home *** CD-ROM | disk | FTP | other *** search
- (*****************************************************************************)
- (* CALCAOS.PAS *)
- (* *)
- (* Bildschirmausgabe von Calc-Programmen *)
- (*****************************************************************************)
-
-
- PROCEDURE calcaos(pptr : calc_prog;vartable : calc_vartab);
-
- VAR value : STRING[50];
- len : BYTE ABSOLUTE value;
- key : char;
- dummy : calc_operand;
- pptr1 : calc_prog;
- {$a-}
-
- PROCEDURE writeaos( pptr : calc_prog);
-
- VAR pptra,pptrb : calc_prog;
- paren : BOOLEAN;
-
- BEGIN
- IF (pptr <> nil)
- THEN
- BEGIN
- if keypressed THEN
- BEGIN
- read(kbd,key);
- if key = ^s THEN read(kbd,key)
- END;
- pptra := pptr^.nextinst;
- IF pptra <> nil
- THEN
- BEGIN
- pptrb := endof(pptra);
- pptrb := pptrb^.nextinst
- END;
- CASE pptr^.instruct OF
- calc_const : BEGIN
- dummy := pptr^.operand;
- Str(dummy:0:10,value);
- WHILE value[len] = '0' DO
- len := Pred(len);
- IF value[len] = '.'
- THEN
- len := Pred(len);
- paren := dummy < 0.0;
- IF paren
- THEN
- Write('(');
- Write(value);
- IF paren
- THEN
- Write(')')
- END;
- calc_var : Write(vartable^[pptr^.varindex].varid);
- calc_add..calc_pow : BEGIN
- paren := (pptr^.instruct IN [calc_mul..
- calc_pow]) AND
- (pptrb^.
- instruct IN [calc_add,
- calc_sub]);
- paren := paren or (pptr^.instruct =
- calc_pow) and (pptrb^.instruct in
- [calc_add..calc_pow]);
- IF paren
- THEN
- Write('(');
- writeaos(pptrb);
- IF paren
- THEN
- Write(')');
- if pptr^.instruct in [calc_div..Calc_Kgv]
- THEN Write(' ');
- Write(calc_ids[pptr^.instruct]);
- if pptr^.instruct in [calc_div..Calc_Kgv]
- THEN Write(' ');
- paren := (pptr^.instruct IN [calc_mul..
- calc_pow]) AND (pptra^.
- instruct IN [calc_add,
- calc_sub]);
- paren := paren OR ((pptr^.instruct IN [
- calc_dvd..calc_pow]) AND (
- pptra^.instruct IN [calc_add..calc_pow]));
- paren := paren OR ((pptr^.instruct =
- calc_sub) AND (pptra^.
- instruct IN [calc_add,
- calc_sub]));
- IF paren
- THEN
- Write('(');
- writeaos(pptra);
- IF paren
- THEN
- Write(')')
- END;
- calc_neg : BEGIN
- Write('(-');
- paren := pptra^.instruct IN [calc_add..calc_pow];
- IF paren
- THEN
- Write('(');
- writeaos(pptra);
- IF paren
- THEN
- Write(')');
- Write(')')
- END;
- calc_sqr..calc_fak : BEGIN
- Write(calc_ids[pptr^.instruct],'(');
- writeaos(pptra);
- Write(')')
- END
- END
- END
- END;
- {$a+}
-
- BEGIN
- IF pptr <> nil
- THEN
- BEGIN
- pptr1 := pptr;
- invert(pptr);
- pptr := pptr^.nextinst;
- writeaos(pptr);
- invert(pptr1);
- Writeln
- END
- ELSE Writeln('Funktion ist nicht definiert !')
- END;
-