mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-24 08:54:17 +00:00
Upload
Digital Research
This commit is contained in:
61
CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v101/klib/lseek.c
Normal file
61
CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v101/klib/lseek.c
Normal file
@@ -0,0 +1,61 @@
|
||||
/****************************************************************************/
|
||||
/* */
|
||||
/* L s e e k F u n c t i o n */
|
||||
/* --------------------------- */
|
||||
/* */
|
||||
/* The lseek function simulates the UNIX lseek system call. */
|
||||
/* */
|
||||
/* Calling sequence: */
|
||||
/* */
|
||||
/* ret = lseek(fd,offset,sense); */
|
||||
/* */
|
||||
/* Where: */
|
||||
/* */
|
||||
/* fd Is an open file descriptor */
|
||||
/* offset Is the (long) file offset */
|
||||
/* sense Is the meaning of offset */
|
||||
/* 0 => From the beginning of the file */
|
||||
/* 1 => From the present file position */
|
||||
/* 2 => From the end of the file */
|
||||
/* */
|
||||
/* ret Is the resulting absolute file offset */
|
||||
/* -1 indicates failure */
|
||||
/* */
|
||||
/****************************************************************************/
|
||||
#include "stdio.h"
|
||||
#include "cpm.h"
|
||||
LONG lseek(fd,offs,sense) /****************************/
|
||||
/* */
|
||||
WORD fd; /* Open file descriptor */
|
||||
LONG offs; /* File offset */
|
||||
WORD sense; /* Sense of offset */
|
||||
/* */
|
||||
/****************************/
|
||||
{
|
||||
/****************************/
|
||||
REG FILE *fp; /* File pointer */
|
||||
EXTERN LONG _chkc(); /* fd to fp translation */
|
||||
/* */
|
||||
if((LONG)(fp = _chkc(fd)) == FAILURE) /* Convert to pointer */
|
||||
return(FAILURE); /* Can't */
|
||||
/* */
|
||||
switch(sense) /****************************/
|
||||
{ /* */
|
||||
case 0: /* From beginning of file */
|
||||
fp->offset = offs; /* Just set to offset */
|
||||
break; /* Then quit */
|
||||
/****************************/
|
||||
case 1: /* From present position */
|
||||
fp->offset += offs; /* */
|
||||
break; /* */
|
||||
/****************************/
|
||||
case 2: /* From end of file */
|
||||
fp->offset = fp->hiwater + offs;/* compute end of file */
|
||||
break; /* */
|
||||
/****************************/
|
||||
default: /* All others NFG */
|
||||
return(FAILURE); /* */
|
||||
} /****************************/
|
||||
fp->flags &= ~ATEOF; /* any seek clears EOF */
|
||||
return(fp->offset); /* Return resultant offset */
|
||||
} /****************************/
|
||||
Reference in New Issue
Block a user