home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 8 / FreshFishVol8-CD1.bin / gnu / src / amiga / libnix-0.7-src.lha / libnix-0.7 / sources / nix_main / __nocommandline.c next >
Encoding:
C/C++ Source or Header  |  1994-12-12  |  1.4 KB  |  73 lines

  1. /*
  2.  * This is a different calling convention for main (actually its _main):
  3.  *
  4.  * int main(char *commandline);
  5.  * void exit(int returncode);
  6.  * 
  7.  */
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <exec/memory.h>
  11. #include <dos/dos.h>
  12. #ifdef __GNUC__
  13. #include <inline/exec.h>
  14. #include <inline/dos.h>
  15. #endif
  16. #include <stabs.h>
  17.  
  18. extern char *__argc; /* Defined in startup */
  19. extern char  *__commandline;
  20. extern struct WBStartup *_WBenchMsg;
  21.  
  22. /* This guarantees that this module gets linked in.
  23.    If you replace this by an own reference called
  24.    __nocommandline you get no commandline arguments */
  25. ALIAS(__nocommandline,__initcommandline);
  26.  
  27. void __initcommandline(void)
  28. { if(_WBenchMsg==NULL)
  29.   { char *a,*b,**ac;
  30.     unsigned long i;
  31.  
  32.     a=b=__commandline;
  33.  
  34.     while(*a++!='\n')
  35.       ;
  36.  
  37.     for(i=256;;i+=256) /* try in steps of 256 bytes */
  38.     { if(!(*(ac=&__argc)=(char *)AllocVec(i+a-b+4,MEMF_ANY)))
  39.         exit(20);
  40.       GetProgramName(*ac+1,i); /* Who am I ? */
  41.       if(IoErr()!=ERROR_LINE_TOO_LONG)
  42.         break;
  43.       FreeVec(*ac);
  44.     }
  45.  
  46.     a=*ac;
  47.  
  48.     *a++='\"';
  49.  
  50.     while(*a++)
  51.       ;
  52.  
  53.     a[-1]='\"';
  54.     *a++=' ';
  55.  
  56.     while((*a++=*b++)!='\n')
  57.       ;
  58.  
  59.     *a=0;
  60.   }
  61. }
  62.  
  63. void __exitcommandline(void)
  64. { char **ac;
  65.  
  66.   if(*(ac=&__argc)!=NULL)
  67.     FreeVec(*ac);
  68. }
  69.  
  70. /* Add these two functions to the lists */
  71. ADD2INIT(__initcommandline,-40);
  72. ADD2EXIT(__exitcommandline,-40);
  73.