28 lines
		
	
	
	
		
			591 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
	
		
			591 B
		
	
	
	
		
			C
		
	
	
	
	
	
#include <stdio.h>
 | 
						|
#include <stdlib.h>
 | 
						|
#include <errno.h>
 | 
						|
#include <sys/types.h>
 | 
						|
#include <unistd.h>
 | 
						|
#include <cpm.h>
 | 
						|
#include "cpmsys.h"
 | 
						|
 | 
						|
off_t lseek(int fd, off_t offset, int whence)
 | 
						|
{
 | 
						|
    struct FCBE* fcbe = &__fd[fd];
 | 
						|
 | 
						|
    __init_file_descriptors();
 | 
						|
    if (fcbe->fcb.dr == 0)
 | 
						|
    {
 | 
						|
        /* Can't seek the console. */
 | 
						|
        return 0;
 | 
						|
    }
 | 
						|
 | 
						|
    if (whence == SEEK_END)
 | 
						|
        offset += fcbe->length<<7;
 | 
						|
    if (whence == SEEK_CUR)
 | 
						|
        offset += (U16(fcbe->fcb.r)<<7) | fcbe->offset;
 | 
						|
    
 | 
						|
    U16(fcbe->fcb.r) = offset>>7;
 | 
						|
    fcbe->offset = offset & 0x7f;
 | 
						|
    return offset;
 | 
						|
}
 |