http://www.ousob.com --- Legacy Redefined #include <io.h> #include <dos.h> #include <extend50.h> #define open _topen #define close _tclose #define lseek _tlseek #define read _tread #define write _twrite #define create _tcreat extern int _topen(char*, int); extern int _tclose(int); extern long _tlseek(int, long, int); extern int _tread(int, char*, int); extern int _twrite(int, char*, int); extern int _tcreat(char*, int); #define O_WRONLY 0x0001 /* open for writing only */ #define O_RDWR 0x0002 /* open for reading and writing */ #define O_APPEND 0x0008 /* writes done at eof */ #define O_RDONLY 0x0000 /* open for reading only */ #define O_BINARY 0x8000 /* file mode is binary (untranslated) */ #define O_TEXT 0x4000 /* file mode is text (translated) */ #define O_CREAT 0x0100 /* create and open file */ #define O_TRUNC 0x0200 /* open and truncate */ #define O_EXCL 0x0400 /* open only if file doesn't already exist */ #define SH_COMPAT 0x00 /* compatibility mode */ #define SH_DENYRW 0x10 /* deny read/write mode */ #define SH_DENYWR 0x20 /* deny write mode */ #define SH_DENYRD 0x30 /* deny read mode */ #define SH_DENYNO 0x40 /* deny none mode */ #define S_IFMT 0170000 /* file type mask */ #define S_IFDIR 0040000 /* directory */ #define S_IFCHR 0020000 /* character special */ #define S_IFREG 0100000 /* regular */ #define S_IREAD 0000400 /* read permission, owner */ #define S_IWRITE 0000200 /* write permission, owner */ #define S_IEXEC 0000100 /* execute/search permission, owner */ int stationNumber(void); CLIPPER b_tempfile() { register int i,j; int seed; int handle; char buffr[256]; char *prf = _parc(1); /* 3 letter prefix */ char *ext = _parc(2); /* 3 letter extention */ char *dir = _parc(3); /* directory name */ buffr[0] = NULL; if( !ISCHAR(1) && !ISCHAR(2) && !ISCHAR(3) ){ _retc(buffr); return; } if( ext[0] == 0x2e ){ for(i=1,j=0;i<4;i++,j++){ ext[j] = ext[i]; } ext[j] = NULL; } if( (strlen(prf)) > 3 ){ prf[3] = NULL; } if( dir[strlen(dir) -1] == 0x5c ){ dir[strlen(dir) -1] = NULL; } seed = stationNumber(); for(i=seed; i< 250; i++){ sprintf(buffr,"%s\\%s%d.%s\0",dir,prf,i,ext); if( (access(buffr,0)) == 0 ){ continue; } handle = create(buffr, S_IFREG ); if( handle == -1 ){ continue; } else{ break; } } if( handle == -1 ){ buffr[0] = NULL; } close(handle); _retc(buffr); } int stationNumber(void) { union REGS regs; regs.h.ah = 0xDC; int86(0x21,&regs,&regs); return( (regs.h.al > 0) ? regs.h.al : 0 ); }