home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / extra18 / grdlagen / tpstack / stkdemo.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-12-10  |  2.5 KB  |  105 lines

  1. (* ------------------------------------------------- *)
  2. (*                   STKDEMO.PAS                     *)
  3. (*          Kleine Demo zur Unit TP_STACK.           *)
  4. (*            (c) 1991  H.Zorba & DMV-Verlag         *)
  5. (* ------------------------------------------------- *)
  6. PROGRAM StkDemo;
  7.  
  8. USES
  9.   TP_Stack, Dos, Crt;
  10.  
  11. TYPE
  12.   { Aus dem elementaren 'DynStack' abgeleiteter,
  13.     "typisierter" Stack. }
  14.  
  15.   SearchRecStack = OBJECT(DynStack)
  16.     PROCEDURE Push(sr : SearchRec);
  17.     PROCEDURE Pop(VAR sr : SearchRec);
  18.       { Die restlichen Methoden können bei diesem
  19.         Beispiel übernommen werden. Wenn 'Push'
  20.         mehrfach 'DynStack.Push' verwendet, sind
  21.         jedoch auch die anderen Methoden zu
  22.         überladen. }
  23.   END;
  24.  
  25. VAR
  26.   VideoMode : BYTE ABSOLUTE $40:$49;
  27.   VideoSeg  : WORD;
  28.  
  29.   ss : SearchRecStack;
  30.     { Ein "Spezial"-Stack.. }
  31.   st : Dynstack;
  32.      { ..und ein Vielzweck-Stack }
  33.  
  34.   s : String;
  35.   sr : SearchRec;
  36.   ox,oy : Byte;
  37.  
  38.  
  39.   PROCEDURE SearchRecStack.Push(sr : SearchRec);
  40.   BEGIN
  41.     DynStack.Push(sr, SizeOf(sr))
  42.   END;
  43.  
  44.   PROCEDURE SearchRecStack.Pop(VAR sr : SearchRec);
  45.   BEGIN
  46.     DynStack.Pop(sr)
  47.   END;
  48.  
  49. BEGIN
  50.   CASE VideoMode OF
  51.     2,3 : VideoSeg := $B800;
  52.     7   : VideoSeg := $B000
  53.   ELSE
  54.     WriteLn(#7, 'Falscher Bildschirm-Modus');
  55.     Halt(1);
  56.   END;
  57.  
  58.     { Stacks vor Gebrauch initialisieren }
  59.   st.Init;
  60.   ss.Init;
  61.  
  62.     { Bildschirmparameter PUSHen }
  63.   ox := WhereX; oy := WhereY;
  64.   st.Push(Ptr(VideoSeg,0)^,4000);
  65.   st.Push(ox,1);
  66.   st.Push(oy,1);
  67.  
  68.   { 'SearchRec's aller .PAS-Dateien PUSHen }
  69.   GetDir(0, s);
  70.   s := s + '*.pas';
  71.   FindFirst(s,Archive,sr);
  72.   WHILE DosError = 0 DO BEGIN
  73.     ss.Push(sr);
  74.     FindNext(sr)
  75.   END;
  76.  
  77.   { 'ClrScr' stellvertretend für
  78.     umfangreiche Operationen }
  79.   ClrScr;
  80.  
  81.   { 'SearchRec's POPen und deren Info ausgeben }
  82.   IF NOT ss.IsEmpty THEN BEGIN
  83.     WriteLn('---  .PAS Quelldateien  ---');
  84.     WriteLn;
  85.     REPEAT
  86.       ss.Pop(sr);
  87.       WriteLn(sr.Name, sr.Size:20-Length(sr.Name),
  88.               ' Bytes')
  89.     UNTIL ss.IsEmpty
  90.   END ELSE
  91.     WriteLn('Keine .PAS - Dateien gefunden');
  92.  
  93.   WriteLn('**  Weiter mit beliebiger Taste  **');
  94.   IF ReadKey = #0 THEN IF ReadKey = '?' THEN;
  95.  
  96.    { Bildschirmparameter in umgekehrter
  97.      Reihenfolge POPen }
  98.    st.Pop(oy);
  99.    st.Pop(ox);
  100.    st.Pop(Ptr(VideoSeg,0)^);
  101.    GotoXY(ox,oy)
  102. END.
  103. (* ------------------------------------------------- *)
  104. (*             Ende von STKDEMO.PAS                  *)
  105.