PACKET db scan (********************************************************************) (* *) (* AUTOR : Siegfried Fronzek (ISP GmbH) *) (* ZWECK : Navigation über eine Tupelmenge *) (* *) (* Vor Aufruf der Prozeduren scan first/scan forward *) (* müssen die ersten n Schlüsselwerte gesetzt werden. *) (* Diese Schlüsselwerte bestimmen die zu durchlaufende *) (* Tupel-Menge. *) (* Die Prozeduren scan last/scan pred bestimmen zum *) (* vorgegebenen Schlüssel den vorherigen Datensatz! *) (* *) (* Die Prozedur scan backward liefert einen Stack incl. *) (* (eventuell nächstem !!!!) Datensatz zum vorgegebenen *) (* Schlüssel, eignet sich also nicht zur Simulation *) (* der Proczedur scan last im Stack-Betrieb. *) (* *) (* DATUM : 06.04.87 *) (* GEÄNDERT: 20.05.87 PROCs scan backward, scan stack entry *) (* *) (********************************************************************) DEFINES scan first, scan last, scan succ, scan pred, scan status, scan stack entry, scan forward, scan backward, scan stack succ, scan stack pred : INT VAR scan db status:: db status; PROC scan first (INT CONST index nr, BOOL PROC pruefung): BOOL VAR exact sve:: exact match; exact match (FALSE); scan rumpf (index nr, BOOL PROC pruefung, PROC (INT CONST) search); IF scan status <> ok THEN scan status (file empty) FI ; exact match (exact sve) ENDPROC scan first; PROC scan last (INT CONST index nr, BOOL PROC pruefung): change index; scan rumpf (index nr, BOOL PROC pruefung, PROC (INT CONST) pred); IF scan status <> ok THEN scan status (file empty) FI ENDPROC scan last; PROC scan succ (INT CONST index nr, BOOL PROC pruefung): scan rumpf (index nr, BOOL PROC pruefung, PROC (INT CONST) succ); ENDPROC scan succ; PROC scan pred (INT CONST index nr, BOOL PROC pruefung): scan rumpf (index nr, BOOL PROC pruefung, PROC (INT CONST) pred); ENDPROC scan pred; INT PROC scan status: scan db status ENDPROC scan status; PROC scan status (INT CONST stat): scan db status:= stat ENDPROC scan status; PROC scan rumpf (INT CONST index nr, BOOL PROC pruefung, PROC (INT CONST) aktion ): TEXT VAR sve t:: ""; save tupel (index nr, sve t); aktion (index nr); IF db status <> ok THEN restore tupel (index nr, sve t); change index; scan status (db status) ELSE IF NOT pruefung THEN restore tupel (index nr, sve t); change index; scan status (end of file) ELSE scan status (ok) FI FI ENDPROC scan rumpf; (******************************************************************) (* *) (* STACK ohne Datenraum *) (* *) (******************************************************************) # PROC scan forward (INT CONST index nr, BOOL PROC pruefung, INT VAR anz tupels): scan stack rumpf (index nr, BOOL PROC pruefung, PROC (INT CONST,INT VAR) multisearch forward, anz tupels) ENDPROC scan forward; PROC scan backward (INT CONST index nr, BOOL PROC pruefung, INT VAR anz tupels): scan stack rumpf (index nr, BOOL PROC pruefung, PROC (INT CONST,INT VAR) multisearch backward, anz tupels) (* !!! Vorsicht: multisearch backward liefert den naechsten zu einem ungültigen Startwert !!!!! *) ENDPROC scan backward; PROC scan succ (INT CONST index nr, BOOL PROC pruefung, INT VAR anz tupels): scan stack rumpf (index nr, BOOL PROC pruefung, PROC (INT CONST,INT VAR) multisucc, anz tupels); ENDPROC scan succ; PROC scan pred (INT CONST index nr, BOOL PROC pruefung, INT VAR anz tupels): scan stack rumpf (index nr, BOOL PROC pruefung, PROC (INT CONST,INT VAR) multipred, anz tupels) ENDPROC scan pred; PROC scan stack succ (INT CONST index nr, BOOL PROC pruefung): scan stack rumpf (index nr, BOOL PROC pruefung, PROC multisucc); ENDPROC scan stack succ; PROC scan stack pred (INT CONST index nr, BOOL PROC pruefung): scan stack rumpf (index nr, BOOL PROC pruefung, PROC multipred); ENDPROC scan stack pred; BOOL PROC scan stack entry (INT CONST entry nr, BOOL PROC pruefung): stack entry (entry nr); pruefung ENDPROC scan stack entry; PROC scan stack rumpf (INT CONST index nr, BOOL PROC pruefung, PROC (INT CONST,INT VAR) aktion, INT VAR anz tupels ): change index; aktion (index nr, anz tupels); scan status (end of file); change index; IF anz tupels = 0 COR db status <> ok THEN IF anz tupels <> 0 THEN scan status (db status) FI ELSE scan status (ok) FI ENDPROC scan stack rumpf; PROC scan stack rumpf (INT CONST index nr, BOOL PROC pruefung, PROC aktion): aktion; change index; IF NOT pruefung THEN scan status (end of file) ELSE scan status (ok) FI ENDPROC scan stack rumpf; # (******************************************************************) (* *) (* STACK mit Datenraum *) (* *) (******************************************************************) PROC scan forward (INT CONST index nr, BOOL PROC pruefung, INT VAR anz tupels): scan stack rumpf (index nr, BOOL PROC pruefung, PROC (INT CONST,INT VAR) multisearch forward, anz tupels) ENDPROC scan forward; PROC scan backward (INT CONST index nr, BOOL PROC pruefung, INT VAR anz tupels): scan stack rumpf (index nr, BOOL PROC pruefung, PROC (INT CONST,INT VAR) multisearch backward, anz tupels) (* !!! Vorsicht: multisearch backward liefert den naechsten zu einem ungültigen Startwert !!!!! *) ENDPROC scan backward; PROC scan succ (INT CONST index nr, BOOL PROC pruefung, INT VAR anz tupels): scan stack rumpf (index nr, BOOL PROC pruefung, PROC (INT CONST,INT VAR) multisucc, anz tupels) ENDPROC scan succ; PROC scan pred (INT CONST index nr, BOOL PROC pruefung, INT VAR anz tupels): scan stack rumpf (index nr, BOOL PROC pruefung, PROC (INT CONST,INT VAR) multipred, anz tupels) ENDPROC scan pred; PROC scan stack succ (INT CONST index nr, BOOL PROC pruefung): scan stack rumpf (index nr, BOOL PROC pruefung, PROC multisucc) ENDPROC scan stack succ; PROC scan stack pred (INT CONST index nr, BOOL PROC pruefung): scan stack rumpf (index nr, BOOL PROC pruefung, PROC multipred) ENDPROC scan stack pred; BOOL PROC scan stack entry (INT CONST entry nr, BOOL PROC pruefung ): stack entry (entry nr); pruefung ENDPROC scan stack entry; PROC scan stack rumpf (INT CONST index nr, BOOL PROC pruefung, PROC (INT CONST,INT VAR) aktion, INT VAR anz tupels): change index; aktion (index nr, anz tupels); scan status (end of file); IF anz tupels = 0 COR db status <> ok THEN change index; IF anz tupels <> 0 THEN scan status (db status) FI ELSE scan status (ok) FI ENDPROC scan stack rumpf; PROC scan stack rumpf (INT CONST index nr, BOOL PROC pruefung, PROC aktion): aktion; IF NOT pruefung THEN change index; scan status (end of file) ELSE scan status (ok) FI ENDPROC scan stack rumpf; ENDPACKET db scan;