home *** CD-ROM | disk | FTP | other *** search
- // Olaf Heß, 1991
- // Turbo C++, Modell Small, C++ Compiler eingeschaltet
-
- #include <iostream.h>
- #include <process.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <dir.h>
- #include <dos.h>
-
- #define TRUE 1
- #define FALSE 0
-
- // Prototypen
- void execfile (char *pfad);
- void findfile (char *pfad_z);
-
- // Globale Variablen
- char filename [13]; // Name der zu suchenden Datei
- int ext = TRUE; // Name hat Erweiterung
- char parameter [128]; // Aufrufsparameter
-
- // -----------------------------------
-
- void execfile (char *pfad)
- // Ausführen der in Pfad gespeicherten Datei mit Parametern
- {
- execl (pfad, "DUMMY", parameter, NULL);
- perror("Fehler bei EXEC");
- exit (2); // Fehler bei der Ausführung => Abbruch
- } // execfile
-
- // -----------------------------------
-
- void findfile (char *pfad_z)
- // Rekursive Suche durch den Verzeichnisbaum nach FILENAME
- {
- char pfad [65]; // Programmpfad
- struct ffblk suchblk; // Für findfirst/findnext
- int result; // Ergebnis von findfirst/findnext
-
- strcat (strcpy (pfad, pfad_z), filename);
-
- if (ext == TRUE) result = findfirst (pfad, &suchblk, 0x3F);
- else
- { // Suche nach FILENAME + Erweiterung COM
- strcat (strcat (strcpy (pfad, pfad_z), filename), ".COM");
- result = findfirst (pfad, &suchblk, 0x3F);
- if (result != 0)
- { // Suche nach FILENAME + Erweiterung EXE
- strcat (strcat (strcpy (pfad, pfad_z), filename), ".EXE");
- result = findfirst (pfad, &suchblk, 0x3F);
- } // if
- } // else
-
- if (result == 0) execfile (pfad); // Gefunden => Ausführen
- else
- { // Suche nach Unterverzeichnissen in PFAD
- strcat (strcpy (pfad, pfad_z), "*.*");
- result = findfirst (pfad, &suchblk, FA_DIREC);
- if (result == 0) do
- { // Datei gefunden
- if ((suchblk.ff_name [0] != '.') &&
- (suchblk.ff_attrib == 16))
- { // Datei ist Unterverzeichnis => Durchsuchen
- strcat (strcat (strcpy (pfad, pfad_z), suchblk.ff_name), "\\");
- findfile (pfad);
- } // if
- result = findnext (&suchblk); // Suche nach weiterem Verzeichnis
- } while (result == 0); // Keine weiteren Dateien
-
- } // else
- } // findfile
-
- // -----------------------------------
-
- void main (int argc, char *argv [])
-
- {
- char laufwerk [4] = ""; // Laufwerksbuchstabe
-
- if (argc < 2)
- { // Fehlender Programmname
- cout <<"\nRUN: Start eines Programmes aus jedem Verzeichnis heraus.\n";
- cout <<"\nAufruf: RUN [d:][Programmname] [Parameter]\n";
- cout <<"\Die Angabe eines Laufwerksbuchstabens ist optional.\n";
- exit (1);
- } // if
- else
- {
- strcpy (parameter, argv [1]);
-
- if (parameter [1] == ':')
- { // Es wurde ein Laufwerk angegeben
- unsigned int i;
- laufwerk [0] = parameter [0];
- laufwerk [1] = ':';
- laufwerk [2] = '\0';
- for (i = 0; i <= strlen (parameter) + 1; i++)
- parameter [i] = parameter [i + 2];
- strcpy (filename, parameter);
- } // if
- else strcpy (filename, argv [1]); // Kein Laufwerk angegeben
-
- parameter [0] = '\0';
- cout <<"\nSuche nach »"<<filename<<"«\n";
-
- { // Wurde FILENAME mit Erweiterung angegeben?
- char *ptr;
- ptr = strchr (filename, '.');
- if (ptr == NULL) ext = FALSE;
- }
-
- if (argc > 2)
- { // Parameter speichern
- unsigned int i;
- char *blank = " ";
- for (i = 3; i <= argc; i++)
- {
- strcat (parameter, blank);
- strcat (parameter, argv [i - 1]);
- } // for
- } // if
-
- } // else
-
- findfile (strcat (laufwerk, "\\")); // Los geht's...
- cout <<"\nNix gefunden...\n";
- } // main
-
- // -----------------------------------
-
-