home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* RECURSE.PAS *)
- (* Deklarations-Vorspann *)
- (* (c) 1988 by Frank A. Lohmeier und PASCAL International *)
- (* ------------------------------------------------------ *)
-
- {$M 65000,0,0} (* stack = 65 kB wegen Rekursion *)
- (* heap wird nicht gebraucht *)
- {$V-}
-
- PROGRAM recurse_utils;
-
- USES dos , (* DOS standard library *)
- crt , (* SCREEN standard library *)
- library, (* WORKING routines *)
- header; (* HEADER module *)
-
- VAR old_diskmem : longint;
-
- (* ------------------------------------------------------ *)
- (* Sicherung des DOS-Status / erste Informationen *)
- PROCEDURE start_program;
-
- VAR dta : searchrec;
- BEGIN
- get_cursor(DOScursor );
- set_cursor(CURSOR_OFF);
- WriteLn;
- chdir('\'); LowVideo;
- {$IFDEF dir_recurse}
- Write('':MAIN_MARGIN+Succ(Length(PROG_NAME)),
- 'Laufwerk ',start_path[1]);
- findfirst('*.*',volumeid,dta);
- WHILE (DOSerror = 0) AND
- (dta.attr AND volumeid <> volumeid) DO
- findnext(dta);
- IF (dta.attr AND volumeid = volumeid)
- THEN WriteLn(' trägt den Namen ',dta.name)
- ELSE WriteLn(' trägt keinen Namen');
- {$ENDIF}
- highvideo;
- Write ('':MAIN_MARGIN, PROG_NAME ); LowVideo;
- WriteLn(PROG_JOB,start_path);
- chdir(Copy(start_path,3,80));
- WriteLn ;
- END;
-
- (* ------------------------------------------------------ *)
- (* optical at the end of program *)
- PROCEDURE end_program;
-
- VAR l : STRING[3];
- BEGIN
- highvideo;
- WriteLn; (* zuerst einen Report des Laufes zeigen *)
- Write ('':MAIN_MARGIN,PROG_NAME);
- LowVideo;
- Write (' ... fertig');
- IF dir_count > 1 THEN l := 'ies' ELSE l:= 'y';
- IF is_echo THEN BEGIN
- WriteLn (fil_count:15-Length(PROG_NAME),
- ' Datei(en) gefunden.');
- WriteLn ('':MAIN_MARGIN, dir_count:24,
- ' Director',l,' durchsucht.');
- WriteLn ;
- WriteLn ('':MAIN_MARGIN,disksize(0):24 ,
- ' Byte gesamt auf Laufwerk ',start_path[1],':');
- {$IFDEF clean_recurse}
- WriteLn ('':MAIN_MARGIN,old_diskmem:24 ,
- ' Byte vorher frei.');
- {$ENDIF}
- WriteLn ('':MAIN_MARGIN, mem_count:24 ,
- ' Byte in Datei(en) gefunden.');
- WriteLn ('':MAIN_MARGIN,diskfree(0):24 ,' Byte ',
- 'jetzt frei.');
- {$IFDEF clean_recurse}
- {$ENDIF}
- (* writeln ('':MAIN_MARGIN + length(PROG_NAME)+2, *)
- (* COPY_RIGHT); *)
- WriteLn;
- LowVideo;
- END;
- chdir (start_path); (* zurück zum Ursprungs-Directory *)
- set_cursor (DOScursor); (* DOS-Cursor wieder setzen *)
- END;
-
- (* ------------------------------------------------------ *)
- PROCEDURE error_level (Line : textline);
-
- BEGIN
- highvideo;
- Write(^G,'':FAIL_MARGIN,'FEHLER: '); LowVideo;
- WriteLn(Line,' !');
- WriteLn('':FAIL_MARGIN,' HILFE: ','PROG_NAME',
- ' mit ''-?'' starten.');
- END;
-
- (* ------------------------------------------------------ *)
- PROCEDURE analyze (var order : order_typ);
- VAR line : textline; i : byte;
-
- PROCEDURE analyze_options;
- VAR k : byte;
- BEGIN
- for k := 2 to length(pattern[i]) do
- case upcase(pattern[i][k]) of
- '-' ,
- '/' : (* default := toggle_ *);
- 'R' : recursive := not recursive;
- 'E' : is_echo := not is_echo ;
- '0'..'9' : OUTPUT_DELAY := (ord(pattern[i][k])-48)*50;
- '?' : order := info_ ;
- {$IFDEF clean_recurse}
- 'T' : tmp_on := not tmp_on ;
- 'N' : norton_on := not norton_on;
- 'B' : turbo_on := not turbo_on ;
- 'O' : obj_on := not obj_on ;
- 'M' : map_on := not map_on ;
- 'U' : unit_on := not unit_on ;
- {$ELSE}
- 'T' : time_on := not time_on ;
- 'D' : date_on := not date_on ;
- 'S' : size_on := not size_on ;
- 'A' : attr_on := not attr_on ;
- {$ENDIF}
- else order := param_;
- end;
- END;
-
- BEGIN
- order := work_ ;
- parameters := paramcount;
- if parameters > MAXPATTERN-6 then begin
- parameters := MAXPATTERN-6;
- highvideo;
- writeln('WARNUNG: Das Maximum sind ',MAXPATTERN-6,
- ' Pattern!');
- writeln;
- lowvideo;
- end;
- i := 1;
- while (order = work_) and (i <= parameters) do begin
- pattern[i] := paramstr(i);
- if pattern[i][1] in ['-','/'] then begin
- analyze_options;
- pattern[i] := ''; END
- ELSE IF Pattern[i] = '*.*' THEN order := pattern_;
- inc(i);
- END;
- parameters := 0;
- {$IFDEF clean_recurse}
- IF order = work_ THEN BEGIN
- IF tmp_on THEN Pattern[20] := '*.TMP';
- IF norton_on THEN Pattern[19] := '*.~* ';
- IF turbo_on THEN Pattern[18] := '*.BAK';
- IF obj_on THEN Pattern[17] := '*.OBJ';
- IF map_on THEN Pattern[16] := '*.TPM';
- IF unit_on THEN Pattern[15] := '*.TPU';
- END;
- FOR i := 1 TO MAXPATTERN DO
- IF Pattern[i] <> '' THEN inc(parameters);
- IF parameters = 0 THEN order := missing_;
- {$ELSE}
- FOR i := 1 TO MAXPATTERN DO
- IF Pattern[i] <> '' THEN inc(parameters);
- IF parameters = 0 THEN Pattern[1] := '*.*';
- is_echo := TRUE;
- {$ENDIF}
- END;
-
- (* ------------------------------------------------------ *)
- (* Main *)
- VAR order : order_typ;
- (* gibt Status / nächstes anzusteuerndes Modul an *)
- BEGIN
- checkbreak := FALSE;
- (* wird zu CTRL-C und damit von wait() abgefangen *)
- old_diskmem := diskfree(0);
- getdir(0,start_path);
- start_program;
- analyze (order);
- CASE order OF
- {$IFDEF clean_recurse}
- pattern_ : error_level
- ('ZUGRIFF VERWEIGERT wegen Pattern ''*.*''');
- {$ELSE}
- pattern_ ,
- {$ENDIF}
- work_ : BEGIN
- subdir := start_path;
- recurse (0);
- end_program;
- END;
- info_ : error_level ('Keine HILFE verfügbar');
- param_ : error_level ('Unbekannte Option');
- missing_ : error_level ('Kein Pattern angegeben');
- ELSE error_level ('Undefinierte Störung');
- END;
- END.
- (* ------------------------------------------------------ *)
- (* Ende von RECURSE.PAS *)
-