home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* NEWDIR.PAS *)
- (* (c) 1992 H.Rüter & DMV-Verlag *)
- (* ------------------------------------------------- *)
- (* Diese Programm testet die Unit HRDOSUM.TPU *)
- (* Programmaufruf auf DOS-Ebene: *)
- (* *)
- (* NewDir [?] [Dateibezeichner] [N] *)
- (* [ < Datei1 ] [ > Datei2] *)
- (* *)
- (* ? : Hilfetext *)
- (* Dateibezeichner : Dateiname oder Dateigruppe : *)
- (* Hallo.Pas , *.exe etc. *)
- (* N : schaltet bei Ausgabeumleitung die *)
- (* Crt-Ausgabe aus *)
- (* < Datei1 : liest einen ASCII-Text ein, der aus *)
- (* Dateibezeichnern besteht *)
- (* > Datei2 : leitet die Textausgabe in Datei2 um *)
- (* *)
- (* Die Ausgabe ist immer auf dem Schirm zu sehen, *)
- (* wenn nicht [N] angegeben wird *)
- (* ------------------------------------------------- *)
- PROGRAM NewDir;
- (*$M 4024,0,0,I-,R-,S-,N-,V-,B-,O-,A+,D+ *)
-
- USES Dos, Crt, HrDosUm;
-
- CONST
- Space = ' ';
- A : ARRAY [1..6] OF CHAR =
- ('R', 'H', 'S', Space, Space, 'A');
-
- VAR
- Para, Dir : STRING;
- F : SearchRec;
- Ready,
- OU,IU : BOOLEAN;
- DelayTime : WORD;
- C : CHAR;
- Summe : Longint;
- Nr : WORD;
- Lw : BYTE;
-
- PROCEDURE Hilfetext;
- BEGIN
- ClrScr;
- WriteLn(' HILFESTELLUNG FÜR ', ParamStr(0));
- WriteLn;
- WriteLn(' Es bestehen folgende Möglichkeiten ',
- 'des Programmaufrufs auf Dos-Ebene :');
- WriteLn;
- WriteLn(' NEWDIR [/?] [/Dateibezeichner] [/N] ',
- '[ < Datei1 ] [ > Datei2] <RETURN>');
- WriteLn;
- WriteLn(' PARAMETER BEDEUTUNG',
- ' BEISPIEL');
- WriteLn;
- WriteLn(' [/?] Hilfetext',
- ' NewDir ?');
- WriteLn(' [/Dateibezeichner] Dateiname',
- ' Hallo.Pas');
- WriteLn(' oder Dateigruppe',
- ' *.exe H*.*');
- WriteLn(' [/N] Schaltet bei ');
- WriteLn(' Ausgabeumleitung');
- WriteLn(' die Crt-Ausgabe ',
- 'aus NewDir N >Out.Txt');
- WriteLn(' [< Datei1] Liest einen ',
- 'ASCII-Text');
- WriteLn(' ein,der aus');
- WriteLn(' Dateibezeichnern',
- ' besteht NewDir < In.Txt');
- WriteLn(' [> Datei2] Leitet die ',
- 'Textausgabe ');
- WriteLn(' in Datei2 um',
- ' NewDir > Out.Txt');
- WriteLn;
- WriteLn(' Die Ausgabe ist immer auf dem Schirm ',
- 'zu sehen, wenn nicht [N] angegeben');
- Halt;
- END;
-
- FUNCTION FileString(M : SearchRec) : STRING;
- VAR
- S1, S2 : STRING;
- Dt : DateTime;
- L,P : BYTE;
-
- FUNCTION AttrStr(Attr : BYTE) : STRING;
- VAR
- L : BYTE;
- S : STRING;
- BEGIN
- S := '';
- FOR L := 1 TO 6 DO BEGIN
- IF NOT (L IN [4,5]) THEN BEGIN
- IF Odd(Attr) THEN S := S+A[L]+Space
- ELSE S := S+' ';
- END;
- Attr := Attr SHR 1;
- END;
- AttrStr := S;
- END;
-
- FUNCTION ZeroStr(W : LongInt) : STRING;
- VAR
- S : STRING;
- BEGIN
- Str(W:0, S);
- IF Length(s) = 1 THEN S := '0' + S;
- ZeroStr := S;
- END;
-
- BEGIN
- WITH M DO BEGIN
- S2 := Name;
- P := Pos('.', S2);
- IF P <> 0 THEN
- Insert(Copy(' ',1,8-Pred(P)),S2,P);
- FOR L := Length(S2) TO 12 DO S2 := S2 + Space;
- Str(Size:10,S1);
- S1 := '- '+ S2 + S1+' ';
-
- UnpackTime(Time,DT);
- WITH Dt DO BEGIN
- S1 := S1 + ZeroStr(hour)+'.'+
- ZeroStr(min)+','+ZeroStr(sec);
- S1 := S1 + ' ' + ZeroStr(Day)+'.'+
- ZeroStr(Month)+'.'+ZeroStr(Year);
- END;
- FileString := S1 + ' ' + AttrStr(Attr);
- END;
- END;
-
- FUNCTION GetChar : CHAR;
- VAR
- C : CHAR;
- BEGIN
- ProtOut;
- REPEAT
- C := UpCase(ReadKey);
- UNTIL C <> #0;
- GetChar := C;
- ProtOn;
- END;
-
- PROCEDURE Pause;
- VAR
- Y : BYTE;
- BEGIN
- Y := WhereY;
- TextAttr := TextAttr OR Blink;
- ProtOut;
- Write('Taste drücken...');
- ProtOn;
- C := GetChar;
- TextAttr := TextAttr AND 127;
- GotoXY(1,Y);
- ClrEol;
- END;
-
- BEGIN
- IF ParamCount = 0 THEN Para := '*.*'
- ELSE Para := ParamStr(1);
- IF Para = '?' Then HilfeText;
-
- TextAttr := White;
- ClrScr;
- WriteLn(' DIR-UTILITY ',
- '(c) 1992 H.Rüter & DMV-Verlag');
- GotoXY(1,25);
- Write(' <ESC> : Exit <Ctrl><S> : ',
- 'Halt/Weiter <+> <-> : Verzögerung');
- Window(1,2,80,24);
- TextAttr := LightGray SHL 4;
- ClrScr;
-
- IU := DosInputRedirected;
- OU := DosOutputRedirected;
-
- Ready := FALSE;
- DelayTime := 0;
-
- IF OU THEN BEGIN
- ChangeInoutModus(OutPutRedirection);
- IF ParamStr(2) = 'N' THEN
- ChangeSightAbleMode(FALSE);
- END;
-
- IF IU THEN BEGIN
- ChangeInoutModus(InPutRedirection);
- SetReadKeyMode(FALSE);
- InSightOnOff(FALSE);
- SetInputDelay(0);
- IF NOT OU THEN ChangeSightAbleMode(FALSE);
- ProtOut;
- ReadLn(Para);
- ProtOn;
- END;
-
- WHILE NOT Ready DO BEGIN
- Summe := 0;
- Nr := 0;
- IF Para[2] = ':' THEN
- LW := Ord(UpCase(Para[1]))-Ord('@')
- ELSE
- LW := 0;
-
- WriteLn;
- WriteLn('-> PARAMETER : ', Para);
-
- FindFirst(Para, AnyFile, F);
-
- WHILE (DosError = 0) AND NOT Ready DO BEGIN
- IF (F.Attr AND Directory = 0) AND
- (F.Attr AND VolumeID = 0) THEN BEGIN
- WriteLn(FileString(F));
- Inc(Summe,F.Size);
- Inc(Nr);
- END;
-
- WHILE KeyPressed AND NOT Ready DO BEGIN
- C := GetChar;
- CASE C OF
- #27 : Ready := TRUE;
- #19 : REPEAT
- C := GetChar;
- UNTIL C = #19;
- '+' : Inc(DelayTime,100);
- '-' : IF DelayTime >= 100 THEN
- Dec(DelayTime, 100);
- END;
- END;
- FindNext(F);
- Delay(DelayTime);
- END;
-
- WriteLn;
- IF Nr > 0 THEN
- Write('-> ',Nr:3,' Datei(en) : ',Summe:8,' Byte')
- ELSE Write('-> Keine Datei gefunden');
-
- GetDir(LW,Dir);
- WriteLn(' ',DiskFree(LW),
- ' Byte frei in Laufwerk ',Dir[1]);
-
- IF OU AND NOT IU THEN
- Ready := TRUE
- ELSE If IU THEN BEGIN
- Para := '';
- ProtOut;
- IF NOT EOFInput THEN ReadLn(Para)
- ELSE Ready := TRUE;
- ProtOn;
- Pause;
- END ELSE Ready := TRUE;
- END;
- END.
- (* ------------------------------------------------- *)
- (* Ende von NEWDIR.PAS *)
-