home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1998 #4 / amigaacscoverdisc1998-041998.iso / utilities / shareware / dev / vbcc / machines / amiga68k / libsrc / _main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-12-30  |  2.5 KB  |  76 lines

  1. /*  _main()-Routine fuer vbcc-Amiga-Version */
  2. /*  initialisiert stdin, stdout, stderr etc.    */
  3.  
  4. /*  MATH_IEEE definieren, wenn die MathIeee-Libraries benutzt werden sollen */
  5.  
  6. #include <stddef.h>
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <libraries/dos.h>
  10. #include <proto/dos.h>
  11.  
  12. FILE *stdin,*stdout,*stderr,*_firstfile=0,*_lastfile=0;
  13.  
  14. extern int main(int, char **);
  15. extern BPTR _stdin,_stdout,_stderr;
  16.  
  17. #ifdef MATH_IEEE
  18. #include <proto/exec.h>
  19. struct Library *MathIeeeDoubBasBase,*MathIeeeDoubTransBase,*MathIeeeSingBasBase;
  20. #endif
  21.  
  22. void _main(int argc, char **argv)
  23. {
  24.     stdin=(FILE *)malloc(sizeof(FILE));
  25.     stdout=(FILE *)malloc(sizeof(FILE));
  26.     stderr=(FILE *)malloc(sizeof(FILE));
  27.     if(!stdin||!stdout||!stderr) exit(EXIT_FAILURE);
  28.     stdin->filehandle=(char*)_stdin;
  29.     stdin->flags=_READABLE;if(IsInteractive(_stdin)) stdin->flags|=_UNBUF;
  30.     stdout->filehandle=(char*)_stdout;
  31.     stdout->flags=_WRITEABLE;if(IsInteractive(_stdout)) stdout->flags|=_LINEBUF;
  32.     stderr->filehandle=(char*)_stderr;
  33.     stderr->flags=_WRITEABLE;if(IsInteractive(_stderr)) stderr->flags|=_UNBUF;
  34.     stdin->pointer=stdout->pointer=stderr->pointer=0;
  35.     stdin->base=stdout->base=stderr->base=0;
  36.     stdin->count=stdout->count=stderr->count=0;
  37.     stdin->bufsize=stdout->bufsize=stderr->bufsize=0;
  38.     stdin->prev=0;stdin->next=stdout;
  39.     stdout->prev=stdin;stdout->next=stderr;
  40.     stderr->prev=stdout;stderr->next=0;
  41.     _firstfile=stdin;_lastfile=stderr;
  42. #ifdef MATH_IEEE
  43.     if(!(MathIeeeSingBasBase=OpenLibrary("mathieeesingbas.library",37L)))
  44.         exit(EXIT_FAILURE);
  45.     if(!(MathIeeeDoubBasBase=OpenLibrary("mathieeedoubbas.library",37L)))
  46.         exit(EXIT_FAILURE);
  47.     if(!(MathIeeeDoubTransBase=OpenLibrary("mathieeedoubtrans.library",37L)))
  48.         exit(EXIT_FAILURE);
  49. #endif
  50.     exit(main(argc,argv));
  51. /*    main(argc,argv);*/
  52. }
  53.  
  54. /*  Wie sieht das genau aus? Das ist eine Asm-Routine   */
  55. extern void _exit();
  56.  
  57. struct __exitfuncs *__firstexit;
  58.  
  59. /*  exit()-Routine fuer vbcc-Amiga-Version  */
  60. void exit(int returncode)
  61. {
  62.     struct __exitfuncs *p=__firstexit;
  63.     /*  atexit-Routinen starten */
  64.     while(p){p->func();p=p->next;}
  65. #ifdef MATH_IEEE
  66.     if(MathIeeeDoubTransBase) CloseLibrary(MathIeeeDoubTransBase);
  67.     if(MathIeeeDoubBasBase) CloseLibrary(MathIeeeDoubBasBase);
  68.     if(MathIeeeSingBasBase) CloseLibrary(MathIeeeSingBasBase);
  69. #endif
  70.     /*  alle offenen Files schliessen   */
  71.     while(_firstfile&&!fclose(_firstfile));
  72.     /*  allen Speicher freigeben        */
  73.     _freemem();
  74.     _exit(returncode);
  75. }
  76.