home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------- *)
- (* STKDEMO.PAS *)
- (* Kleine Demo zur Unit TP_STACK. *)
- (* (c) 1991 H.Zorba & DMV-Verlag *)
- (* ------------------------------------------------- *)
- PROGRAM StkDemo;
-
- USES
- TP_Stack, Dos, Crt;
-
- TYPE
- { Aus dem elementaren 'DynStack' abgeleiteter,
- "typisierter" Stack. }
-
- SearchRecStack = OBJECT(DynStack)
- PROCEDURE Push(sr : SearchRec);
- PROCEDURE Pop(VAR sr : SearchRec);
- { Die restlichen Methoden können bei diesem
- Beispiel übernommen werden. Wenn 'Push'
- mehrfach 'DynStack.Push' verwendet, sind
- jedoch auch die anderen Methoden zu
- überladen. }
- END;
-
- VAR
- VideoMode : BYTE ABSOLUTE $40:$49;
- VideoSeg : WORD;
-
- ss : SearchRecStack;
- { Ein "Spezial"-Stack.. }
- st : Dynstack;
- { ..und ein Vielzweck-Stack }
-
- s : String;
- sr : SearchRec;
- ox,oy : Byte;
-
-
- PROCEDURE SearchRecStack.Push(sr : SearchRec);
- BEGIN
- DynStack.Push(sr, SizeOf(sr))
- END;
-
- PROCEDURE SearchRecStack.Pop(VAR sr : SearchRec);
- BEGIN
- DynStack.Pop(sr)
- END;
-
- BEGIN
- CASE VideoMode OF
- 2,3 : VideoSeg := $B800;
- 7 : VideoSeg := $B000
- ELSE
- WriteLn(#7, 'Falscher Bildschirm-Modus');
- Halt(1);
- END;
-
- { Stacks vor Gebrauch initialisieren }
- st.Init;
- ss.Init;
-
- { Bildschirmparameter PUSHen }
- ox := WhereX; oy := WhereY;
- st.Push(Ptr(VideoSeg,0)^,4000);
- st.Push(ox,1);
- st.Push(oy,1);
-
- { 'SearchRec's aller .PAS-Dateien PUSHen }
- GetDir(0, s);
- s := s + '*.pas';
- FindFirst(s,Archive,sr);
- WHILE DosError = 0 DO BEGIN
- ss.Push(sr);
- FindNext(sr)
- END;
-
- { 'ClrScr' stellvertretend für
- umfangreiche Operationen }
- ClrScr;
-
- { 'SearchRec's POPen und deren Info ausgeben }
- IF NOT ss.IsEmpty THEN BEGIN
- WriteLn('--- .PAS Quelldateien ---');
- WriteLn;
- REPEAT
- ss.Pop(sr);
- WriteLn(sr.Name, sr.Size:20-Length(sr.Name),
- ' Bytes')
- UNTIL ss.IsEmpty
- END ELSE
- WriteLn('Keine .PAS - Dateien gefunden');
-
- WriteLn('** Weiter mit beliebiger Taste **');
- IF ReadKey = #0 THEN IF ReadKey = '?' THEN;
-
- { Bildschirmparameter in umgekehrter
- Reihenfolge POPen }
- st.Pop(oy);
- st.Pop(ox);
- st.Pop(Ptr(VideoSeg,0)^);
- GotoXY(ox,oy)
- END.
- (* ------------------------------------------------- *)
- (* Ende von STKDEMO.PAS *)
-