rminnich@udel.EDU (Ron Minnich) (08/04/88)
Newsgroups: alt.sources.amiga Subject: version zero of a unix compat library. Rather than hack perl up to fit the amiga, i hacked this this simple library up to support perl. It is not complete, and i expect to hack a much nicer one for perl v2. when i get a chance. But is a start, right? This is going to alt.sources.amiga due to the fact that there is a 6-month delay in comp.sources.amiga. Note that you must pull some /usr/include files from unix to your machine. It has been 6 months since i did this but i think you need /usr/include/stat.h and /usr/include/time.h. See what you think. Also some things remain to be done. But the semantics of what is in here fits ados to unix correctly (in my opinion). I really recommend you look at perl. And i will try to get the object file size down for perl2. ######no i did not shar it. sorry. ####### /* * Revision 1.0 87/12/18 13:04:33 root * Initial revision * Lattice C 4.01 * */ #include "EXTERN.h" #include "perl.h" #include <signal.h> stat(name,sbuf) char *name; struct stat *sbuf; { static struct FileInfoBlock *info; int error; unsigned short mode; info = calloc(1, sizeof *info); if (info == NULL) { printf("calloc in stat fialed!\n"); return(-1); } error = dfind(info,name,0); #ifdef notdefined printf("dfind for :%s: error %d\n", name, error); #endif if (error < 0) goto done; /* now the fun begins */ #ifdef notdefined printf("DET %d\n", info->fib_DirEntryType); #endif sbuf->st_ino = 0; mode = info->fib_Protection >> 1; mode |= mode | (mode << 3) | (mode << 6); mode |= info->fib_DirEntryType > 0 ? S_IFREG : S_IFDIR; sbuf->st_mode = mode; sbuf->st_nlink = 1; sbuf->st_uid = 0; sbuf->st_gid = 0; sbuf->st_size = info->fib_Size; sbuf->st_mtime = info->fib_Date.ds_Days << 22 + info->fib_Date.ds_Minute << 9 + info->fib_Date.ds_Tick; sbuf->st_atime = sbuf->st_ctime = sbuf->st_mtime; /* I thinnk st_blksize is wrong. */ sbuf->st_blksize = 512; sbuf->st_blocks = info->fib_NumBlocks; done: free(info); return(error); } sleep(x) int x; { if (x) Delay(x*50); } /* Unix functions that have no real meaning under ADOS */ getuid(){ return 0; } geteuid(){ return 0; } getgid(){ return 0; } getegid(){ return 0; } umask(){ return 0; } chown(){ return 0; } /* Stuff i haven't done yet */ execl(){ return -1;} FILE *popen(){ return NULL;} pclose(){ return -1;} kill(){ return -1;} mktemp(){ return -1;} fork(){ return -1; } vfork(){ return -1; } execvp(){ return -1; } link(){ return -1;} getpid(){ return 0;} -- ron (rminnich@udel.edu)