home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 09_10 / tricks / run.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-04-08  |  3.6 KB  |  129 lines

  1. /* Olaf Heß, 1991 */
  2. /* Turbo C++ 1.0, Modell Small */
  3.  
  4. #include <process.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <dir.h>
  9. #include <dos.h>
  10.  
  11. #define TRUE 1
  12. #define FALSE 0
  13.  
  14. /* Globale Variablen */
  15. char filename [13]; /* Name der zu suchenden Datei */
  16. int ext = TRUE; /* Name hat Erweiterung */
  17. char parameter [128]; /* Aufrufsparameter */
  18.  
  19. /* ----------------------------------- */
  20.  
  21. void execfile (char *pfad) 
  22. /* Ausführen der in Pfad gespeicherten Datei mit Parametern*/
  23. {
  24.   execl (pfad, "DUMMY", parameter,  NULL);
  25.   perror("Fehler bei EXEC");
  26.   exit (2); /* Fehler bei der Ausführung => Abbruch */
  27. }   /* execfile */
  28.  
  29. /* ----------------------------------- */
  30.  
  31. void findfile (char *pfad_z)
  32. /* Rekursive Suche durch den Verzeichnisbaum nach FILENAME */
  33. {
  34. char pfad [65]; /* Pfad */
  35. struct ffblk suchblk; /* Für findfirst/findnext */
  36. int result; /* Ergebnis von findfirst/findnext */
  37.   
  38.   strcat (strcpy (pfad, pfad_z), filename);
  39.  
  40.   if (ext == TRUE) result = findfirst (pfad, &suchblk, 0x3F);
  41.   else  
  42.   { /* Suche nach FILENAME + Erweiterung COM */
  43.     strcat (strcat (strcpy (pfad, pfad_z), filename), ".COM");
  44.     result = findfirst (pfad, &suchblk, 0x3F);
  45.     if (result != 0) 
  46.     {   /* Suche nach FILENAME + Erweiterung EXE */
  47.       strcat (strcat (strcpy (pfad, pfad_z), filename), ".EXE");
  48.       result = findfirst (pfad, &suchblk, 0x3F);
  49.     }   /* if */
  50.   }   /* else */
  51.  
  52.   if (result == 0) execfile (pfad);   /* Gefunden => Ausführen */
  53.   else
  54.   { /* Suche nach Unterverzeichnissen in PFAD */
  55.     strcat (strcpy (pfad, pfad_z), "*.*");
  56.     result = findfirst (pfad, &suchblk, FA_DIREC);
  57.     if (result == 0) do
  58.     { /* Datei gefunden */
  59.       if ((suchblk.ff_name [0] != '.') && 
  60.         (suchblk.ff_attrib == 16)) 
  61.       { /* Datei ist Unterverzeichnis => Durchsuchen */
  62.         strcat (strcat (strcpy (pfad, pfad_z), suchblk.ff_name), "\\");
  63.         findfile (pfad);
  64.       }   /* if */
  65.       result = findnext (&suchblk); /* Suche nach weiterem Verzeichnis */
  66.     } while (result == 0);  /* Keine weiteren Dateien */
  67.       
  68.   }   /* else */
  69. }   /* findfile */
  70.  
  71. /* ----------------------------------- */
  72.  
  73. void main (int argc, char *argv [])
  74.  
  75. {
  76. char laufwerk [4] = ""; /* Laufwerksbuchstabe */
  77.  
  78.   if (argc < 2)
  79.   { /* Fehlender Programmname */
  80.     printf ("\nRUN: Start eines Programmes aus jedem Verzeichnis heraus\n");
  81.     printf ("\nAufruf: RUN [d:][Programmname] [Parameter]\n");
  82.     printf ("\Die Angabe eines Laufwerksbuchstabens ist optional.\n");
  83.     exit (1);
  84.   }   /* if */
  85.   else
  86.   {
  87.     strcpy (parameter, argv [1]);
  88.  
  89.     if (parameter [1] == ':')
  90.     {   /* Es wurde ein Laufwerk angegeben */
  91.     unsigned int i;
  92.       laufwerk [0] = parameter [0];
  93.       laufwerk [1] = ':';
  94.       laufwerk [2] = '\0';
  95.       for (i = 0; i <= strlen (parameter) + 1; i++)
  96.         parameter [i] = parameter [i + 2];
  97.       strcpy (filename, parameter);
  98.     }   /* if */
  99.     else strcpy (filename, argv [1]); /* Kein Laufwerk angegeben */
  100.  
  101.     parameter [0] = '\0';
  102.     printf ("\nSuche nach »%s«\n", filename);
  103.  
  104.     { /* Wurde FILENAME mit Erweiterung angegeben? */
  105.     char *ptr;
  106.       ptr = strchr (filename, '.');
  107.       if (ptr == NULL) ext = FALSE;
  108.     }
  109.  
  110.     if (argc > 2)
  111.     { /* Parameter speichern */
  112.     unsigned int i;
  113.     char *blank = " ";
  114.       for (i = 3; i <= argc; i++)
  115.       {
  116.         strcat (parameter, blank);
  117.         strcat (parameter, argv [i - 1]);
  118.       }   /* for */
  119.     }   /* if */
  120.  
  121.   }   /* else */
  122.  
  123.   findfile (strcat (laufwerk, "\\")); /* Los geht's... */
  124.   printf ("\nNix gefunden...\n");
  125. }   /* main */
  126.  
  127. /* ----------------------------------- */
  128.  
  129.