home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9101 / parser / wartesch.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-09-12  |  4.0 KB  |  137 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      WARTESCH.PAS                      *)
  3. (*  enthält die Funktionen zur Realisation einer          *)
  4. (*  dynamischen und einer statischen FIFO-Schlange.       *)
  5. (*        (c) 1991 Andreas Tengicki & DMV-Verlag          *)
  6. (* ------------------------------------------------------ *)
  7. UNIT WarteSch;
  8.  
  9. INTERFACE
  10.  
  11. CONST
  12.   FiFo_Max      = 100;
  13.  
  14. TYPE
  15.   FiFo_Element  = STRING;
  16.   FiFo_Satz_Ptr = ^FiFo_Satz;
  17.   FiFo_Satz     = RECORD
  18.                     Wert : FiFo_Element;
  19.                     Next : FiFo_Satz_Ptr;
  20.                   END;
  21.   FiFo_Array    = ARRAY [0..FiFo_Max-1] OF FiFo_Element;
  22.  
  23.     (* --- Dynamische Version --------------------------- *)
  24.  
  25.   PROCEDURE FiFo_Init_d(VAR Inp, Out : FiFo_Satz_Ptr);
  26.   PROCEDURE FiFo_In_d  (VAR Inp, Out : FiFo_Satz_Ptr;
  27.                             Element  : FiFo_Element);
  28.   PROCEDURE FiFo_Out_d (VAR Inp, Out : FiFo_Satz_Ptr;
  29.                         VAR Element  : FiFo_Element);
  30.  
  31.     (* --- Statische Version ---------------------------- *)
  32.  
  33.   PROCEDURE FiFo_Init_s(VAR Inp, Out : INTEGER);
  34.   PROCEDURE FiFo_In_s  (VAR Feld     : FiFo_Array;
  35.                         VAR Inp, Out : INTEGER;
  36.                             Element  : FiFo_Element);
  37.   PROCEDURE FiFo_Out_s (VAR Feld     : FiFo_Array;
  38.                         VAR Inp, Out : INTEGER;
  39.                         VAR Element  : FiFo_Element);
  40.  
  41.  
  42. IMPLEMENTATION
  43.  
  44.  
  45.   PROCEDURE FiFo_Init_d(VAR Inp, Out : FiFo_Satz_Ptr);
  46.     (* initialisiert die dynamische FIFO-Schlange  *)
  47.   BEGIN
  48.     Inp := NIL;
  49.     Out := NIL;
  50.   END;
  51.  
  52.   PROCEDURE FiFo_In_d(VAR Inp, Out : FiFo_Satz_Ptr;
  53.                           Element  : FiFo_Element);
  54.     (*          fügt ein Element in die dyn. FIFO-Schlange *)
  55.   VAR
  56.     h : FiFo_Satz_Ptr;
  57.   BEGIN
  58.     h := inp;
  59.     New(inp);
  60.     Inp^.Wert := Element;
  61.     Inp^.Next := NIL;
  62.     IF h = NIL THEN
  63.       Out := Inp        (*  1.Element  *)
  64.     ELSE
  65.       h^.Next := Inp;   (*  sonst      *)
  66.   END;
  67.  
  68.   PROCEDURE FiFo_Out_d(VAR Inp, Out : FiFo_Satz_Ptr;
  69.                        VAR Element  : FiFo_Element);
  70.     (* löscht ein Element aus der dyn. FIFO-Schlange. *)
  71.   VAR
  72.     h : FiFo_Satz_Ptr;
  73.   BEGIN
  74.     IF Out = NIL THEN BEGIN
  75.       WriteLn('Fehler in der Warteschlange !!');
  76.       Halt;
  77.     END ELSE BEGIN
  78.       Element := Out^.Wert;
  79.       h       := Out;
  80.       Out     := Out^.Next;
  81.       Dispose(h);
  82.       IF Out = NIL THEN Inp := NIL;  (* letztes Element *)
  83.     END;
  84.   END;
  85.  
  86.   FUNCTION Next(Pos : INTEGER) : INTEGER;
  87.     (* bestimmt nächsten Index bei der statischen *)
  88.     (* FIFO-Warteschlange.                        *)
  89.   BEGIN
  90.     Next := (Pos + 1) MOD FiFo_Max;
  91.   END;
  92.  
  93.   PROCEDURE FiFo_Init_s(VAR Inp, Out : INTEGER);
  94.     (* initialisiert die statische FIFO-Schlange  *)
  95.   BEGIN
  96.     Inp := -1;
  97.     Out := -1;
  98.   END;
  99.  
  100.   PROCEDURE FiFo_In_s(VAR Feld     : FiFo_Array;
  101.                       VAR Inp, Out : INTEGER;
  102.                           Element  : FiFo_Element);
  103.     (* fügt ein Element in die stat. FIFO-Schlange *)
  104.   BEGIN
  105.     Inp := Next(Inp);
  106.     IF Inp = Out THEN BEGIN
  107.       WriteLn('Warteschlange voll !!');
  108.       Halt;
  109.     END ELSE BEGIN
  110.       Feld[Inp] := Element;
  111.       IF Out = -1 THEN
  112.         Out := Inp        (*  1.Element  *)
  113.     END;
  114.   END;
  115.  
  116.   PROCEDURE FiFo_Out_s(VAR Feld     : FiFo_Array;
  117.                        VAR Inp, Out : INTEGER;
  118.                        VAR Element  : FiFo_Element);
  119.     (* löscht ein Element aus der statischen FIFO-Schlange *)
  120.   BEGIN
  121.     IF Out = -1 THEN BEGIN     (* leere Warteschlange *)
  122.       WriteLn('Fehler in der Warteschlange !!');
  123.       Halt;
  124.     END ELSE BEGIN
  125.       Element := Feld[Out];
  126.       Out     := Next(Out);
  127.       IF Out = Next(Inp) THEN BEGIN  (* letztes Element *)
  128.         Inp := -1;
  129.         Out := -1;
  130.       END;
  131.     END;
  132.   END;
  133.  
  134. END.
  135. (* ------------------------------------------------------ *)
  136. (*              Ende von WARTESCH.PAS                     *)
  137.