home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 04 / quellen / calcglob.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1979-12-31  |  1.9 KB  |  69 lines

  1. (*****************************************************************************)
  2. (*                             CALCGLOB.PAS                                  *)
  3. (*                                                                           *)
  4. (*                         globale Prozeduren fuer calcderi                  *)
  5. (*****************************************************************************)
  6.  
  7.  
  8. PROCEDURE invert(pptrstart : calc_prog);
  9.  
  10. VAR pptr,pptr1,pptr2 : calc_prog;
  11.     max,i : INTEGER;
  12.     dummy : calc_instruct;
  13.  
  14. BEGIN
  15.   IF pptrstart <> nil
  16.     THEN
  17.       BEGIN
  18.         pptr := pptrstart^.nextinst;
  19.         max := 0;
  20.         WHILE pptr^.nextinst <> nil DO
  21.           BEGIN
  22.             pptr := pptr^.nextinst;
  23.             max := Succ(max)
  24.           END;
  25.         pptr := pptrstart;
  26.         REPEAT
  27.           pptr := pptr^.nextinst;
  28.           pptr1 := pptr;
  29.           FOR i := 1 TO max DO
  30.             pptr1 := pptr1^.nextinst;
  31.           dummy := pptr^;
  32.           pptr^ := pptr1^;
  33.           pptr1^ := dummy;
  34.           pptr2 := pptr^.nextinst;
  35.           pptr^.nextinst := pptr1^.nextinst;
  36.           pptr1^.nextinst := pptr2;
  37.           max := max - 2;
  38.         UNTIL max <= 0
  39.       END
  40. END;
  41.  
  42. FUNCTION endof(pptr : calc_prog): calc_prog;
  43.  
  44. VAR help : calc_prog;
  45.     op : INTEGER;
  46.  
  47. BEGIN
  48.   IF pptr <> nil
  49.     THEN
  50.       BEGIN
  51.         op := 1;
  52.         REPEAT
  53.           help := pptr;
  54.           IF pptr^.instruct IN [calc_var,calc_const]
  55.             THEN
  56.               op := Pred(op)
  57.             ELSE
  58.               IF NOT (pptr^.instruct IN [calc_neg,calc_sqr..calc_fak])
  59.                 THEN
  60.                   op := Succ(op);
  61.           pptr := pptr^.nextinst
  62.         UNTIL op = 0;
  63.         endof := help
  64.       END
  65.     ELSE
  66.       endof := nil
  67. END;
  68.  
  69.