home *** CD-ROM | disk | FTP | other *** search
/ The Equalizer BBS / equalizer-bbs-collection_2004.zip / equalizer-bbs-collection / DEMOSCENE-STUFF / BM9.ZIP / FIFO.PAS < prev    next >
Pascal/Delphi Source File  |  1994-11-26  |  5KB  |  192 lines

  1.   
  2.   Diese UNIT stellt einen Lister zur Verfügung, der mehr als 64k Daten
  3.   listen kann. Der zur Verfügung stehende Speicher beeinflußt die Größe 
  4.   der anzeigbaren Datei, und kann im Hauptprogramm mit den entsprechenden
  5.   Compiler-Schaltern beeinflußt werden.
  6.   Die Pufferstruktur ist untypisiert, d.h. sie kann auch anderweitig 
  7.   verbastelt werden.
  8.   Für Insider : die Struktur wird als verkettete Liste bezeichnet.
  9.   
  10.        HAVE FUN - BUT GIMME DA CREDITS      (c)1994   JAMES DEAN
  11.  
  12. }
  13.  
  14. unit speed;
  15.  
  16. interface
  17.  
  18.   procedure list(filename : String);
  19.  
  20. implementation
  21.  
  22. uses dos,crt;
  23.  
  24. type  PufferInhalt  = String[77];
  25.       Puffer        = ^PufferEintrag;
  26.       PufferEintrag = record
  27.                         Eintrag   : PufferInhalt;
  28.                         Naechster : Puffer
  29.                       end;
  30.  
  31. var   PufferAnfang,
  32.       PufferEnde    : Puffer;
  33.       PufferLeer    : boolean;   { Wird wahr, wenn kein Element in Puffer }
  34.       dummy : Pufferinhalt;
  35.  
  36. function PufferVoll : boolean;         { Wird wahr, wenn Puffer überläuft }
  37.   const MemEinheit = 16.0;
  38.   var   PufferAvail : real;
  39.   begin
  40.     if MemAvail<0
  41.        then PufferAvail:=MemEinheit*(65536.0+MemAvail)
  42.        else PufferAvail:=MemEinheit*MemAvail;
  43.     PufferVoll:=PufferAvail<SizeOf(PufferEintrag)
  44.   end;
  45.  
  46. procedure InitPuffer;                             { Initialisiert Puffer }
  47.   begin
  48.     PufferAnfang:=NIL; PufferEnde:=NIL; PufferLeer:=true;
  49.   end;
  50.  
  51. procedure SchreibInPuffer(E : PufferInhalt);  { Prüft nicht auf Überlauf! }
  52.   var p : Puffer;
  53.   begin
  54.     if not PufferVoll then
  55.       begin
  56.         new(p); PufferLeer:=false;
  57.         with p^ do begin Eintrag:=E; Naechster:=NIL end;
  58.         if PufferEnde<>NIL
  59.           then PufferEnde^.Naechster:=p
  60.           else if PufferAnfang<>NIL then PufferAnfang^.Naechster:=p
  61.                                      else PufferAnfang:=p;
  62.         PufferEnde:=p
  63.       end
  64.   end;
  65.  
  66. procedure HolVonPuffer(var E : PufferInhalt);
  67.                                          { Undefiniert, wenn Puffer leer! }
  68.   var p : Puffer;
  69.   begin
  70.     if PufferAnfang=NIL
  71.       then PufferLeer:=true
  72.       else begin
  73.              p:=PufferAnfang; E:=p^.Eintrag; PufferAnfang:=p^.Naechster;
  74.              dispose(p); PufferLeer:=PufferAnfang=NIL;
  75.              if PufferLeer then PufferEnde:=NIL
  76.            end
  77.   end;
  78.  
  79. procedure cursor_aus;assembler;
  80. asm
  81.   mov ah,01h     { RUFE INTERRUPT 10hex                                    }
  82.   mov cx,2020h   { MIT FUNKTION 01hex UND CX-WERT 2020hex AUF.             }
  83.   int 10h
  84. end;
  85.  
  86. procedure cursor_an;assembler;
  87. asm
  88.   mov ah,01h     { RUFE INTERRUPT 10hex                                    }
  89.   mov cx,0607h   { MIT FUNKTION 01hex UND CX-WERT 0607hex AUF.             }
  90.   int 10h
  91. end;
  92.  
  93. procedure display(filename : String);
  94.  
  95. var zeilen,ii,i,count : Word;
  96.     f                : Text;
  97.     ch               : char;
  98.  
  99. begin
  100.   zeilen := 25;
  101.   ii:=0;i:=0;
  102.   InitPuffer;
  103.   ClrScr;
  104.   Assign(f, filename);
  105.   Reset(f);
  106.   count := 0;
  107.   while not eof(f) do begin
  108.     Inc(count, 1);
  109.     ReadLn(f, dummy);
  110.     SchreibInPuffer(dummy);
  111.   end;
  112.  
  113.   if count < zeilen then zeilen := count+2;
  114.  
  115.   TextColor(14);TextBackground(0);ClrScr;
  116.  
  117.   GotoXY( 1,zeilen);
  118.   Write('└─────────────────────────────────────────────────────────────────────────────┘');
  119.   GotoXY( 1,1);
  120.   Write('┌─────────────────────────────────────────────────────────────────────────────┐');
  121.  
  122.   GotoXY(39 - Length(filename) DIV 2,1);Write(filename);
  123.   for i := 2 to (zeilen-1) do
  124.   begin
  125.     GotoXY( 1,i);Write('│');
  126.     GotoXY(79,i);Write('│');
  127.   end;
  128.  
  129.   Window(2,2,78,zeilen-1);TextColor(14);TextBackground(1);ClrScr;
  130.  
  131.   cursor_aus;
  132.  
  133.   for i := 1 to (zeilen - 3) do begin
  134.     if not puffervoll then
  135.     begin
  136.       HolVonPuffer(dummy);SchreibInPuffer(dummy);
  137.       WriteLn(dummy);
  138.     end;
  139.   end;
  140.   i := zeilen;
  141.   repeat
  142.     ch := ReadKey;
  143.     if ch = #0 then
  144.     begin
  145.       ch:=ReadKey;
  146.       if ch =  #80  then
  147.       begin
  148.         HolVonPuffer(dummy);SchreibInPuffer(dummy);
  149.         WriteLn(dummy);
  150.       end;
  151.       if ch = #72 then
  152.       begin
  153.         ClrScr;
  154.         for i := 1 to (count - zeilen + 2) do
  155.         begin
  156.           HolVonPuffer(dummy);SchreibInPuffer(dummy);
  157.         end;
  158.         for ii := 1 to (zeilen - 3) do
  159.         begin
  160.           HolVonPuffer(dummy);SchreibInPuffer(dummy);
  161.           WriteLn(dummy);
  162.         end;
  163.       end;
  164.     end;
  165.   until ch = #27;
  166.  
  167.   while not pufferleer do holvonpuffer(dummy);
  168.  
  169.   window(1,1,80,25);TextColor(7);TextBackground(0);ClrScr;
  170.   Close(f);
  171.  
  172.   cursor_an;
  173.  
  174. end;
  175.  
  176. procedure list(filename : string);
  177. var
  178.   DirInfo: SearchRec;
  179. begin
  180.   FindFirst(filename, AnyFile, DirInfo);
  181.   while DosError = 0 do
  182.   begin
  183.     display(DirInfo.Name);
  184.     FindNext(DirInfo);
  185.   end;
  186. end;
  187.  
  188. end.
  189.  
  190. {       HAVE FUN - BUT GIMME DA CREDITS      (c)1994   JAMES DEAN         }
  191.