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

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