T/CONST/ TS/STARTOFGLOBALSPACE/ R/100/6/ T+1 P+1 TS/GLOBALLNBDESCOFFSET/ R/60/4/ T+1 R/64/0/ T+1 P+1 T/TYPE/ TS/STDPROCFUNCS =/ TS/DATEP,/ R/P,TIME/ANDTIME/ TS/SUPPORTTASK =/ TS/READDATE/ R/READDATE,READTIME/SETDATEANDTIMEVARS/ T/VAR/ TS/TIMEPIECE :/ P+2 T/PROCEDURE REFORMNAME (/ P/FUNCTION/ T/PROCEDURE INITCODEGENERATION ;/ TS/CURRENTLINE := 1/ P+1 TS/TIMEPIECE[/ PS/WHICHMODE/ T/PROCEDURE OPENSUPPORTTASKCONTROL/ TC/[PROGPRELUDE]/ TS/WORDSPASSED/ R/10/8/ TC/[OPENFILE]/ TS/WORDSPASSED/ R/14/20/ TC/[READTIME]/ R/READTIME/SETDATEANDTIMEVARS/ TS/WORDSPASSED/ R/5/9/ TS/EXTCALL/ R/TIME /DATETIME/ TC/[READDATE]/ PC/[HALTSYSTEM]/ T/PROCEDURE DOINTERNALSUPPORT/ TS/PROCEDURE DOPUTTEXTFILE ;/ TS/WRITE/ B/W// P./DONE/ I/NORMAL, / TS/EXPECT/ P+1 R/CALLENDOFLINE/NORMAL/ TC/(LSS/ P+1 T+1 A/JCC,// P.E I/REGEQORLESSTHANOPERAND,NORMAL) ;/ T+1 I/ DOSUPPORTTASK(WRITECONTROL) ;/// PS/JUMP/ T+1 R/WRITEENDOFLINE/NORMAL/ T+1 I/ PINS(LSS,NONE,MODIFYDR,FILECHAR) ;/// T+1 P+2 T+3 P+3 T/PROCEDURE PARAMSFOREXTCALLSUPPORT (/ TS/RETURNSPACE / T+1 P-1 B/R// P.E I/SETDATEANDTIMEVARS,/ TS/READCONTROL ,/ T+1 P-1 B/R// P.E I/SETDATEANDTIMEVARS,/ T/PROCEDURE LEAVEPROGRAM ;/ TC/(ASF/ P+1 TC/(LUH,0/ P+1 T/PROCEDURE OPENSTATEMENT/ TS/IF CODEISTOBEGENERATED AND/ PS/GETSTACK/ T/PROCEDURE TIMEOPERATION (/ PS/END (* TIMEOP/ P+1 I$ PROCEDURE DATEANDTIMEOPERATION ; VAR DATE, TIME : STACKENTRY; BEGIN IF CODEISTOBEGENERATED THEN BEGIN SWAPTOPSTACKENTRIES; UNSTACK(DATE); UNSTACK(TIME); LOADDR(DATE, ONEBYTE); (* -N.B. MUST HAVE A BYTE-VECTOR DESCRIPTOR HERE, TO GET CORRECT *) (* INTERFACE TO A SUPPORT LIBRARY COMPILED WITH THE "IMPLEMENTATION" *) (* VERSION PASCAL COMPILER. *) CONSTPINS(CYD, 0); LOADDR(TIME, ONEBYTE); (* -N.B. SEE COMMENT FOR "DATE" ABOVE. *) DOSUPPORTTASK(SETDATEANDTIMEVARS); FREESTACKENTRY(DATE); FREESTACKENTRY(TIME); END; END (* DATEANDTIMEOPERATION *) ; PROCEDURE CLOCKOPERATION ; VAR CLOCKRESULT : STACKENTRY; BEGIN IF CODEISTOBEGENERATED THEN BEGIN DOSUPPORTTASK(READCLOCK); GETSTACKENTRY(CLOCKRESULT); WITH CLOCKRESULT@ DO BEGIN REP:=INTEGERREPRESENTATION; KIND:=ONSTACKRESULT; END; PINS(ST, TOS, UNMODIFIED,0); STACK(CLOCKRESULT); END; END (* CLOCKOPERATION *) ; $ T/PROCEDURE FILEOPEN/ TS/VAR/ I$ TYPE TEXTFILEKIND = (ORDINARYORNONTEXT, STDINPUT, STDOUTPUT) ; $ TS/FIRSTHALF/ PS/FILETYPE/ R/0..2/TEXTFILEKIND/ TS/BEGIN/ I$ PROCEDURE STACKFILENAME; (*-DIRTY ONE*) CONST MAXREALINALFAREP=4; (* -SHOULD BE ALFAREPRESENTATION.SIZE DIV *) (* REALREPRESENTATION.SIZE *) TYPE REALINALFARANGE=1..MAXREALINALFAREP; ALFAASREALS=ARRAY [REALINALFARANGE] OF REAL; KLUDGEREC= RECORD CASE ISALFA: BOOLEAN OF TRUE: (A: ALFA); FALSE: (RA: ALFAASREALS) END; VAR I: REALINALFARANGE; KLUDGE: KLUDGEREC; REALVAL: VALU; PARTOFALFA: STACKENTRY; BEGIN WITH KLUDGE, REALVAL DO BEGIN ISALFA:=TRUE; A:=FILENAME; ISALFA:=FALSE; SIZE:=REALREPRESENTATION.SIZE; KIND:=REALVALUE; FOR I:=MAXREALINALFAREP DOWNTO 1 DO BEGIN RVAL:=RA[I]; STACKCONSTANT(REALVAL); END; END; FOR I:=1 TO MAXREALINALFAREP DO BEGIN UNSTACK(PARTOFALFA); LOADACC(PARTOFALFA); PINS(ST, TOS, UNMODIFIED, 0); FREESTACKENTRY(PARTOFALFA); END; END (* STACKFILENAME *); $ TS/ALFATOA8/ PC/(SLSS/ I$ STACKFILENAME; $ R/SLSS/LSS/ TS/IF/ R/FNAMEA8/FILENAME/ *24(B/ '/ /) T+1 R/1/STDINPUT/ TS/IF/ R/FNAMEA8/FILENAME/ *24(B/ '/ /) T+1 R/2/STDOUTPUT/ T+1 R/0/ORDINARYORNONTEXT/ T+1 R/FILETYPE/ORD(FILETYPE)/ T/PROCEDURE LABELJUMP (/ TC/(IAD/ A/CALL// P./)/ T/PROCEDURE INITSYNTAXANALYSER ;/ TC/'DATE '/ P+2 I$ STDPFNAMES [DATEANDTIMEP] := 'DATEANDTIME ' ; $ TS/PROCEDURE TIMEPROCEDURE ;/ B/TIME/DATEAND/ TS/VARIABLE/ A/[/COMMA,/ T+1 P+2 D/ / T+2 P-5 B/V// P.E I/ACCEPT(COMMA);/ T+1 P-1 T+1 P+2 D/ / T+2 P+1 B/TIME/DATEAND/ D/(WHICHPF)/,T+1 B/TIME/DATEAND/ TS/PROCEDURE HALTPROCEDURE ;/ TS/IF EXPTYPE/ R/EXPTYPE <> NIL/(EXPTYPE<>NIL) AND STRING(EXPTYPE)/ TS/BEGIN (* CALL/ TS/IF SYMBOL/ R/SYMBOL = LEFTPARENT/(SYMBOL=LEFTPARENT) AND (WHICHPF<>CLOCKF)/ TS/DATEP,/ R/P,/AND/ T+1 B/TIME/DATEAND/ TS/TIMEOPERATION(CLOCKF)/ B/T// P./;/ I/CLOCKOPERATION/ TELE