123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- module goutput; % GENTRAN Code Formatting & Printing and Error Handler
- %% Author: Barbara L. Gates %%
- %% December 1986 %%
- % Entry Points: FormatC, FormatFort, FormatRat, GentranErr, FormatPasc
- % All format routines moved to individual language modules
- % JHD December 1987
- symbolic$
- fluid '(!*errcont)$
- % GENTRAN Global Variables %
- global '(!*errchan!* !*outchanl!* gentranlang!*
- !*posn!* !*stdin!* !*stdout!* !$eol!$)$
- !*errchan!* := nil$ %error channel number
- !*posn!* := 0$ %current position on output line
- %% %%
- %% General Printing Functions %%
- %% %%
- % Pprin2 and pterpri changed by F.Kako.
- % Original did not work in SLISP/370, since output must be buffered.
- global '(!*pprinbuf!*);
- procedure pprin2 arg;
- begin
- !*pprinbuf!* := arg . !*pprinbuf!*;
- !*posn!* := !*posn!* + length explode2 arg;
- end$
- procedure pterpri;
- begin
- scalar ch,pbuf;
- ch := wrs nil;
- pbuf := reversip !*pprinbuf!*;
- for each c in !*outchanl!* do
- <<wrs c;
- for each a in pbuf do
- if gentranlang!* eq 'fortran then fprin2 a else prin2 a;
- terpri()>>;
- !*posn!* := 0;
- !*pprinbuf!* := nil;
- wrs ch
- end$
- %% %%
- %% Error Handler %%
- %% %%
- %% Error & Warning Message Printing Routine %%
- symbolic procedure gentranerr(msgtype, exp, msg1, msg2);
- % Added check for !*errcont to aid graceful recovery from errors
- % occurring in templates MCD 11.4.94
- begin scalar holdich, holdoch, resp;
- holdich := rds !*errchan!*;
- holdoch := wrs !*errchan!*;
- terpri();
- if exp then prettyprint exp;
- if (msgtype eq 'e) and not !*errcont then
- <<
- rds cdr !*stdin!*;
- wrs cdr !*stdout!*;
- rederr msg1
- >>;
- prin2 "*** ";
- prin2t msg1;
- if msg2 then resp := yesp msg2;
- wrs holdoch;
- rds holdich;
- if not(resp or !*errcont) then error1()
- end$
- %% %%
- %% Misc. Functions %%
- %% %%
- procedure min0(n1, n2);
- max(min(n1, n2), 0)$
- procedure nspaces n;
- % Note n is assumed > 0 here.
- begin scalar s;
- for i := 1:n do s := ('!! . '! . s);
- return intern compress s
- end$
- endmodule;
- end;
|