home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / vbcc / machines / amiga68k / libsrc / stdio / fopen.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-24  |  1.0 KB  |  38 lines

  1. #include <stddef.h>
  2. #include <stdio.h>
  3. #include <limits.h>
  4. #include <stdarg.h>
  5. #include <stdlib.h>
  6.  
  7. #include <dos/dos.h>
  8. #include <proto/dos.h>
  9.  
  10. extern FILE *_firstfile,*_lastfile;
  11.  
  12. /*  oeffnet Dateien */
  13. /*  noch sehr eingeschraenkt    */
  14. FILE *fopen(const char *name,const char *mode)
  15. {
  16.     FILE *f;long amigamode=0;int append;
  17.     if(*mode=='w') amigamode=MODE_NEWFILE; else amigamode=MODE_OLDFILE;
  18.     if(*mode=='a') append=1; else append=0;
  19.     if(!(f=malloc(sizeof(FILE)))) return(0);
  20.     f->count=0;
  21.     f->base=0;
  22.     f->bufsize=0;
  23.     f->next=0;
  24.     if(*mode=='r') f->flags=_READABLE; else f->flags=_WRITEABLE;
  25.     if(*mode=='b') mode++;
  26.     if(*mode=='+') {f->flags|=_READABLE|_WRITEABLE;amigamode=MODE_READWRITE;}
  27.     f->filehandle=(char *)Open((STRPTR)name,amigamode);
  28.     if(!f->filehandle){free(f);return(0);}
  29.     if(IsInteractive((BPTR)f->filehandle)) f->flags|=_LINEBUF;
  30.     if(_lastfile){
  31.         _lastfile->next=f;f->prev=_lastfile;_lastfile=f;
  32.     }else{
  33.         _firstfile=_lastfile=f;
  34.     }
  35.     if(append) fseek(f,0,SEEK_END);
  36.     return(f);
  37. }
  38.