home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / utility / misc / master / source / system.c < prev    next >
C/C++ Source or Header  |  1988-12-04  |  1KB  |  45 lines

  1. #ifdef COMMENT
  2.         Die Funktion system ruft eine SHELL auf. Uebergeben wird das
  3.         auszufuehrende Kommando. Soll die Shell interaktive Eingaben
  4.         verarbeiten, so wird "-i" uebergeben.
  5.     Falls die Environment-Variable $SHELL gesetzt ist und einen
  6.     Wert hat, der vom Leerstring verschieden ist, so wird dieses
  7.     Programm aufgerufen. Ansonst wird ein Direktaufruf von Master
  8.     probiert.
  9. #endif COMMENT
  10.  
  11. #include <osbind.h>
  12.  
  13. #define DEFAULT_SHELL        "\\Master\\Master.Prg"
  14. #define MASTER_MAGIC        0x4D415354L
  15.  
  16. int
  17. system(com)
  18. char        *com;
  19. {
  20.         char        tail[128];
  21.         char        *shell;
  22.         long        **_shell_p = (long **) 0x4f6L;
  23.         long        *ptr;
  24.         int        (*master)();
  25.         long        ssp;
  26.     extern char    *getenv();
  27.  
  28.         if(!com) com = "-i";
  29.         if(!(shell = getenv("SHELL")) shell = DEFAULT_SHELL;
  30.         if(!*shell) {
  31.                 ssp = Super(0L);
  32.                         ptr = *_shell_p;
  33.                 Super(ssp);
  34.                 if(*(ptr-2) == MASTER_MAGIC) {
  35.                         master = (int (*)) ptr;
  36.                         return((*master)(com));
  37.                 }
  38.         }
  39.         strncat(&tail[1],com,126);
  40.         tail[126] = '\r';
  41.         tail[127] = '\0';
  42.         tail[0] = strlen(&tail[1])-1;
  43.         return(Pexec(0,shell,tail,(char *)0));
  44. }
  45.