home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser-CD 1999 January / STC_CD_01_1999.iso / base / pd_ph105 / pd_mint.c < prev    next >
C/C++ Source or Header  |  2000-01-08  |  3KB  |  97 lines

  1.  
  2. /*
  3.    RUN_PD.C
  4.    startet den Pure Debugger unter MiNT
  5.  
  6.    geschrieben 1994 von Thomas Künneth
  7.    Friedrich-Neuper-Str. 2b
  8.    90552 Röthenbach
  9.  
  10.    modifiziert 1998 von Chris Felsch
  11.    Da nun auch den MiNT-Cookie geprüft wird, kann das Programm kann als 
  12.    PD.PRG installiert werden und starter dann auch bei aktivem MagiC den
  13.    PD korrekt.
  14.    Vor der Installation mu₧ man allerdings den alten PD nach pd_org.prg 
  15.    umbenennen!
  16.    
  17.    modifiziert 1998 von Dimitri Junker
  18.    Um diesen Starter aus dem Starter von PD_PATCH aufrufen zu können
  19.    mu₧te eine Möglichkeit gefunden werden, dan Pfad des zu startenden
  20.    PD zu übergeben. Da ich diesen Starter nicht compilieren kann, 
  21.    geschweige denn testen (Ich habe weder MiNT noch die MiNT Lib)
  22.    habe ich eine Methode gewählt, die zwar nicht den Preis für Eleganz
  23.    erhält, aber 'minimal invasiv' ist. (Nein ich bin kein Mediziner)
  24.    Ich habe also die 1. if/else Struktur eingefügt, und sonst
  25.    PD_ORG durch pd_pfad ersetzt. Ist START_PD.INF nicht vorhanden
  26.    funktioniert der Starter wie bisher.
  27. */
  28.  
  29. #include <cflib.h>      /* für getcookie() */
  30. #include <basepage.h>
  31. #include <signal.h>
  32. #include <stdio.h>
  33. #include <string.h>
  34.  
  35.  
  36. #define PD_ORG "g:\\purec\\pd_org.prg"
  37.  
  38. int abbruch = 1;
  39.  
  40. void cdecl signal_handler(long sgnl)
  41. {
  42.    if ((int)sgnl == SIGCHLD)
  43.       abbruch = 1;
  44. }
  45.  
  46. void main(void)
  47. {    char pd_pfad[500];
  48.     FILE *inf_file;
  49.     if((inf_file=fopen("START_PD.INF","rb"))==NULL)
  50.         strcpy(pd_pfad,PD_ORG);
  51.     else
  52.     {    fseek(inf_file,sizeof(int),SEEK_SET);
  53.         fgets(pd_pfad,500,inf_file);
  54.         fclose(pfad);
  55.     }
  56.    if (getcookie("MiNT", NULL))
  57.    {    
  58.       long  error;
  59.       int      fd;
  60.       
  61.       if (getcookie("FSEL", NULL) || getcookie("VGAS", NULL))
  62.       {
  63.          appl_init();
  64.          form_alert(1, "[3][VGA-Simu oder Freedom laufen noch!][Abbruch]");
  65.          appl_exit();
  66.          exit(1);
  67.       }
  68.  
  69.       /* physikalische Console zum Lesen und Schreiben öffnen */
  70.       error = Fopen("U:\\dev\\console", 2);
  71.       if (error >= 0) 
  72.       {
  73.          fd = (int)error;
  74.          /* den Schalter umlegen ;-) */
  75.          Fforce(-1, fd);
  76.          /* Signal-Handler installieren */
  77.          Psignal(SIGCHLD, (long)signal_handler);
  78.          /* Kopie des Prozesses anlegen */
  79.          appl_init();
  80.          graf_mouse(0x8000, NULL);
  81.          appl_exit();
  82.          switch (Pfork()) 
  83.          {
  84.             case 0: /* child */
  85.                Pexec(0, pd_pfad, _base->p_cmdlin, _base->p_env);
  86.                exit(0);
  87.             default:
  88.                while (!abbruch) 
  89.                   Syield();
  90.          }
  91.          /* Datei schlie₧en */
  92.          Fclose(fd);
  93.       }
  94.    }
  95.    else  /* MiNT nicht da, also einfach nur nachstarten */
  96.       Pexec(0, pd_pfad, _base->p_cmdlin, _base->p_env);
  97. }