home *** CD-ROM | disk | FTP | other *** search
- (*****************************************************************************)
- (* CALCGLOB.PAS *)
- (* *)
- (* globale Prozeduren fuer calcderi *)
- (*****************************************************************************)
-
-
- PROCEDURE invert(pptrstart : calc_prog);
-
- VAR pptr,pptr1,pptr2 : calc_prog;
- max,i : INTEGER;
- dummy : calc_instruct;
-
- BEGIN
- IF pptrstart <> nil
- THEN
- BEGIN
- pptr := pptrstart^.nextinst;
- max := 0;
- WHILE pptr^.nextinst <> nil DO
- BEGIN
- pptr := pptr^.nextinst;
- max := Succ(max)
- END;
- pptr := pptrstart;
- REPEAT
- pptr := pptr^.nextinst;
- pptr1 := pptr;
- FOR i := 1 TO max DO
- pptr1 := pptr1^.nextinst;
- dummy := pptr^;
- pptr^ := pptr1^;
- pptr1^ := dummy;
- pptr2 := pptr^.nextinst;
- pptr^.nextinst := pptr1^.nextinst;
- pptr1^.nextinst := pptr2;
- max := max - 2;
- UNTIL max <= 0
- END
- END;
-
- FUNCTION endof(pptr : calc_prog): calc_prog;
-
- VAR help : calc_prog;
- op : INTEGER;
-
- BEGIN
- IF pptr <> nil
- THEN
- BEGIN
- op := 1;
- REPEAT
- help := pptr;
- IF pptr^.instruct IN [calc_var,calc_const]
- THEN
- op := Pred(op)
- ELSE
- IF NOT (pptr^.instruct IN [calc_neg,calc_sqr..calc_fak])
- THEN
- op := Succ(op);
- pptr := pptr^.nextinst
- UNTIL op = 0;
- endof := help
- END
- ELSE
- endof := nil
- END;
-