#include
#include
#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 */
#define DOES_EXIST(x) access(x,0) == 0
#define PERIOD 0x2e
#define BACK_SLASH 0x5c
CLIPPER b_mktemp()
{
char *pointer;
char uniqueName[10];
char fileName[256];
char *prefix = _parc(1);
char *extention = _parc(2);
char *directory = _parc(3);
int handle = 0;
int i,j;
if( !ISCHAR(1) && !ISCHAR(2) && !ISCHAR(3) ){
fileName[0] = NULL;
_retc(fileName);
return;
}
if( extention[0] == PERIOD ){
for(i=1,j=0;i<4;i++,j++){
extention[j] = extention[i];
}
extention[j] = NULL;
}
if( (strlen(prefix)) > 3 ){
prefix[3] = NULL;
}
if( directory[strlen(directory) -1] == BACK_SLASH ){
directory[strlen(directory) -1] = NULL;
}
if( !DOES_EXIST(directory) ){
fileName[0] = NULL;
_retc(fileName);
return;
}
for(i=0;i<10;i++){
sprintf(uniqueName,"%sXXXXX\0",prefix);
pointer = mktemp(uniqueName);
sprintf(fileName,"%s\\%s.%s\0",directory,uniqueName,extention);
if( DOES_EXIST(fileName) ){
continue;
}
if( (handle = create(fileName, S_IFREG | S_IEXEC)) > 0 ){
break;
}
}
if( DOES_EXIST(fileName) ){
close(handle);
}
else{
fileName[0] = NULL;
}
_retc(fileName);
}