home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / vbcc / machines / amiga68k / libsrc / _main.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-10-26  |  2.5 KB  |  75 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.  
  10. FILE *stdin,*stdout,*stderr,*_firstfile=0,*_lastfile=0;
  11.  
  12. extern int main(int, char **);
  13. extern char *_stdin,*_stdout,*_stderr;
  14.  
  15. #ifdef MATH_IEEE
  16. #include <exec/libraries.h>
  17. struct Library *OpenLibrary();
  18. struct Library *MathIeeeDoubBasBase,*MathIeeeDoubTransBase,*MathIeeeSingBasBase;
  19. #endif
  20.  
  21. void _main(int argc, char **argv)
  22. {
  23.     stdin=(FILE *)malloc(sizeof(FILE));
  24.     stdout=(FILE *)malloc(sizeof(FILE));
  25.     stderr=(FILE *)malloc(sizeof(FILE));
  26.     if(!stdin||!stdout||!stderr) exit(EXIT_FAILURE);
  27.     stdin->filehandle=_stdin;
  28.     stdin->flags=_READ|_READABLE;if(IsInteractive(_stdin)) stdin->flags|=_UNBUF;
  29.     stdout->filehandle=_stdout;
  30.     stdout->flags=_WRITE|_WRITEABLE;if(IsInteractive(_stdout)) stdout->flags|=_UNBUF;
  31.     stderr->filehandle=_stderr;
  32.     stderr->flags=_WRITE|_WRITEABLE;if(IsInteractive(_stderr)) stderr->flags|=_UNBUF;
  33.     stdin->pointer=stdout->pointer=stderr->pointer=0;
  34.     stdin->base=stdout->base=stderr->base=0;
  35.     stdin->count=stdout->count=stderr->count=0;
  36.     stdin->bufsize=stdout->bufsize=stderr->bufsize=0;
  37.     stdin->prev=0;stdin->next=stdout;
  38.     stdout->prev=stdin;stdout->next=stderr;
  39.     stderr->prev=stdout;stderr->next=0;
  40.     _firstfile=stdin;_lastfile=stderr;
  41. #ifdef MATH_IEEE
  42.     if(!(MathIeeeSingBasBase=OpenLibrary("mathieeesingbas.library",0L)))
  43.         exit(EXIT_FAILURE);
  44.     if(!(MathIeeeDoubBasBase=OpenLibrary("mathieeedoubbas.library",0L)))
  45.         exit(EXIT_FAILURE);
  46.     if(!(MathIeeeDoubTransBase=OpenLibrary("mathieeedoubtrans.library",0L)))
  47.         exit(EXIT_FAILURE);
  48. #endif
  49.     exit(main(argc,argv));
  50. /*    main(argc,argv);*/
  51. }
  52.  
  53. /*  Wie sieht das genau aus? Das ist eine Asm-Routine   */
  54. extern void _exit();
  55.  
  56. struct __exitfuncs *__firstexit;
  57.  
  58. /*  exit()-Routine fuer vbcc-Amiga-Version  */
  59. void exit(int returncode)
  60. {
  61.     struct __exitfuncs *p=__firstexit;
  62.     /*  atexit-Routinen starten */
  63.     while(p){p->func();p=p->next;}
  64. #ifdef MATH_IEEE
  65.     if(MathIeeeSingBasBase) CloseLibrary(MathIeeeSingBasBase);
  66.     if(MathIeeeDoubTransBase) CloseLibrary(MathIeeeDoubTransBase);
  67.     if(MathIeeeDoubBasBase) CloseLibrary(MathIeeeDoubTransBase);
  68. #endif
  69.     /*  alle offenen Files schliessen   */
  70.     while(_firstfile&&!fclose(_firstfile));
  71.     /*  allen Speicher freigeben        */
  72.     _freemem();
  73.     _exit(returncode);
  74. }
  75.