home *** CD-ROM | disk | FTP | other *** search
- /* VERY SIMPLE stub-routines to emulate some unix-io */
-
- #include <clib/dos_protos.h>
-
-
- #define MAX_FILES 50
-
- extern BPTR _stdin,_stdout,_stderr;
-
- static BPTR descr[MAX_FILES];
- static char dupped[MAX_FILES];
-
- static _close_added;
-
- static void _close_all(void)
- /* closes files; will be called at exit */
- {
- int i;BPTR p;
- for(i=0;i<MAX_FILES;i++){
- p=descr[i];
- if(!dupped[i]&&p&&p!=_stdin&&p!=_stdout&&p!=_stderr)
- close(i);
- }
- }
- int open(char *name,int bla)
- {
- int d;
- if(!_close_added){
- if(atexit(_close_all)) return(-1);
- _close_added=1;
- }
- d=3;
- while(d<MAX_FILES&&descr[d]) d++;
- if(d<MAX_FILES&&(descr[d]=Open(name,MODE_OLDFILE))) return(d);
- else return(-1);
- }
- int creat(char *name,int bla)
- {
- int d;
- if(!_close_added){
- if(atexit(_close_all)) return(-1);
- _close_added=1;
- }
- d=3;
- while(d<MAX_FILES&&descr[d]) d++;
- if(d<MAX_FILES&&(descr[d]=Open(name,MODE_NEWFILE))) return(d);
- else return(-1);
- }
- void close(int d)
- {
- if(d<MAX_FILES&&descr[d]){
- if(dupped[d]) dupped[d]=0;
- else Close(descr[d]);
- descr[d]=0;
- }
- }
- int read(int d,char *buf,long l)
- {
- if(!descr[0]) descr[0]=_stdin;
- if(!descr[1]) descr[1]=_stdout;
- if(!descr[2]) descr[2]=_stderr;
- return Read(descr[d],buf,l);
- }
- int write(int d,char *buf,long l)
- {
- if(!descr[0]) descr[0]=_stdin;
- if(!descr[1]) descr[1]=_stdout;
- if(!descr[2]) descr[2]=_stderr;
- return Write(descr[d],buf,l);
- }
- int dup2(int old,int new)
- {
- if(!descr[0]) descr[0]=_stdin;
- if(!descr[1]) descr[1]=_stdout;
- if(!descr[2]) descr[2]=_stderr;
- descr[new]=descr[old];
- dupped[new]=1;
- return(0);
- }
-
-