perm filename PUB2.SAI[2,TES] blob
sn#075085 filedate 1973-11-28 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00015 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 BEGIN "PUB2"
C00010 00003 STRING TMPFILE, LISTFILE, PAGEFILE, IFILE, SFILE, S,
C00014 00004 COMMENT I N I T I A L I Z E
C00019 00005 BEGIN "INNER BLOCK"
C00023 00006 SIMPLE PROCEDURE UNDERSCORE(INTEGER RIGHTCHAR)
C00026 00007 SIMPLE PROCEDURE RIGHTBOUND
C00029 00008 IF PAGEHIGH THEN GO TO CONTINUE comment, re-entered
C00032 00009 WHILE (TOPLINE ← INNUM) > -10 DO
C00034 00010 CASE CHARTBL[PAGEBRC] OF
C00037 00011 comment 4 ... CR -- Justify it
C00041 00012 ELSE BEGIN CHAR ← APPD(S)
C00047 00013 ELSE IF F="F" THEN FONTSELECT(S[3 FOR 1])
C00050 00014 comment 5 ... LF BEGIN END
C00052 00015 BEGIN EXTERNAL SIMPLE PROCEDURE K_OUT K_OUT END COMMENT ** ** ** ** **
C00056 ENDMK
C⊗;
BEGIN "PUB2"
REQUIRE "VERSION.SAI" SOURCE_FILE;
REQUIRE 6500 STRING_SPACE ;
COMMENT The Document Compiler -- Pass Two ;
COMMENT PASS 1 OUTPUT FORMAT FOR EACH PAGE :
Height Width
For each area:
UpperLine NumCols NumLines
For each column:
LeftChar
For each non-null line: LineNo SHORTM Index of PUInS.PUI line
0
-10
PASS 2 reads the output file name and the intermediate page file names from
PUPSEQ.PUI, and the label table from PULABL.PUI. Then it reads
each page from each page file, processes each line in each of
its areas, and writes out a line printer image on the output file.
Each line is subject to three operations, in this order:
(1) Substitute label values at each vertical tab.
(2) Justify the line, if required, by inserting spaces at word breaks marked by altmodes.
(3) Generate underlining and super/sub-scripting as indicated by rubouts.
;
DEFINE THRU = "STEP 1 UNTIL", DOWN = "STEP -1 UNTIL",
TES = "COMMENT", RKJ = "COMMENT", TVR = "COMMENT",
ie = "COMMENT", AWHILE = "WHILE TRUE",
INP(BRKTBL) = "INPUT(SCHAN, BRKTBL)", INNUM = "WORDIN(ICHAN)",
SCN(BRKTBL)="(IF FROMFILE THEN INPUT(SCHAN,BRKTBL) ELSE SCAN(OWL,BRKTBL,PAGEBRC))",
SCNUM = "CVD(SCN(TO_ALTMODE_SKIP))",
LPT = "1", TTY = "2", MIC = "3", XGP = "4",
HORIZ="'40", VERTI="'41", CSIZE="'42", ULINE="'43", RSPCS="'44",
LSPCS="'45", UDOTS="'46", RDOTS="'47", comment FR80 escape codes ;
FULSTR(X) = "LENGTH(X)", NULSTR(X) = "(LENGTH(X)=0)",
CR = "'15", LF = "'12", VT = "'13", FF = "'14", SP = "'40",
RUBOUT = "'177", TB = "'11",
ALTMODE = IFC VERSION=SAILVER THENC "'175" ELSEC "'176" ENDC,
TO_ALTMODE_SKIP = "1", TO_LF_APPD = "2",
ONE_CHAR = "3", BREAKER = "4", TO_RUB_ALT_SKIP = "5",
FIML = "256",
ANS(A) = "(S = ""A"" OR S = ""A"" + '40)";
DEFINE COMMENT FOR XGP;
USEA="('177&'14)", USEB="('177&'15)", VSB="('177&'20)",
XTAB="('177&'30)",
XGPNUM(N)="((N LSH -7) & N)";
DEFINE ESCAPE1="('177&'1)", ESCAPE2="('177&'2)";
DEFINE CTLF="6", CTLE="5", CTLT="'24";
INTEGER IML, IMC, comment, no. of lines and chars per page image ;
DEBUG, DEVICE, SEQCHAN, SEQBRC, SEQEOF, comment PUPSEQ.PUI info ;
LFTMAR, comment Stanford XGP left margin (for tabs) ;
TES LFTMAR used at PARC too but always 0 now;
LISTCHAN, comment output file ;
BAR, TES underlining character (or 0 if OFF) 10/22/73;
PAGEHIGH, PAGEWIDE, comment IML and IMC for latest page ;
I, J, K, L, M, N, DUMMY, comment general-purpose ;
LABCHAN, LABBRC, LABEOF, comment PULABL.PUI info ;
NL, comment LABTAB upper bound ; PAGECT, comment counts pages ;
TABLE, comment LABTAB first subscript -- selects Pass 1 NUMBER vs ITBL ;
ICHAN, SCHAN, FROMFILE, PAGEBRC, PAGEEOF, comment PUIn[S].PUI info ;
TOPLINE, NCOLS, NLINES, comment Area info ;
COL, LEFTCH, comment Column info ;
SLIDETOP, comment top of ∞ stacks such as SLIDESG ;
NCSIZE,CCSIZE, NHORIZ,CHORIZ, NVERTI,CVERTI, comment microfilm normal/current settings ;
NEEDCR, comment, assures CR before every LF for Stanford LPT ;
CHARW, LINENO, SHORTM, SH, BRKS, FSTBRK, CHRS, FSTCHRS, SG, NOTFST, comment, Line info ;
TERM, TERMX, LINE, UNDERLINE, CHAR, F, G, LAST, LASL, AVAIL ; comment, Justify info ;
INTEGER SCRIPT, comment baseline adjustment ;
THISFONT, comment PARC font number for scripts;
SCRLVL, comment baseline level ;
BASELINE ; comment useful? for underscore at stanford ;
INTEGER TLFTMAR ; TVR temporary left margin in XGP pts;
INTEGER FLUSHING, FSIZE; comment kludges for XGP ;
EXTERNAL INTEGER RPGSW ;
IFC VERSION=PARCVER THENC
SIMPLE PROCEDURE FOOBAZ;
START!CODE "FOOBAZ"
LABEL EVEC,GO,STRT,REEN;
EVEC: JRST STRT;
JRST REEN;
HRRZ 1,'120;
JRST 1(1);
STRT: HRRZ 1,'120;
JRST (1);
REEN: HRRZ 1,'124;
JRST (1);
GO: MOVEI 1,'400000;
MOVEI 2,EVEC;
HRLI 2,3;
'104000000204;
'104000000170;
END "FOOBAZ";
ENDC
STRING TMPFILE, LISTFILE, PAGEFILE, IFILE, SFILE, S,
OWL, SS, T, ENDLINE, RESTARTLINE, ENDPAGE, DELINT, CRLF, JOBNO ;
REAL RATIO ;
INTEGER ARRAY CHARTBL[0:127], XFILL,XINF,SLIDESG,RB,LBD[1:5] ;
STRING ARRAY LBF[1:5] ;
INTEGER SIMPLE PROCEDURE READIN(STRING FILENAME; BOOLEAN BINARY ; REFERENCE INTEGER BRC, EOF) ;
BEGIN "READIN"
INTEGER CH ;
CH ← GETCHAN ; EOF ← 0 ; OPEN(CH, "DSK", IF BINARY THEN 8 ELSE 0,2,0,150, BRC, EOF) ;
LOOKUP(CH, FILENAME & JOBNO, 0) ; RETURN(CH) ;
END "READIN" ;
INTEGER SIMPLE PROCEDURE WRITEON(STRING FILENAME) ;
BEGIN "WRITEON"
INTEGER CH ;
CH ← GETCHAN ; OPEN(CH, "DSK", 0,0,2,0, 0, 0) ;
ENTER(CH, FILENAME, 0) ; RETURN(CH) ;
END "WRITEON" ;
SIMPLE PROCEDURE WARN(STRING MESSG) ; OUTSTR(MESSG&CR&LF) ;
SIMPLE PROCEDURE IMPOSSIBLE(STRING HOW) ; WARN("Impossible case index for "&HOW) ;
STRING SIMPLE PROCEDURE MICROFILM(INTEGER OP, ARG) ;
RETURN('177 & OP & (IF OP≤'42 THEN (ARG DIV 128)&(ARG MOD 128) ELSE ARG)) ;
STRING SIMPLE PROCEDURE SETSIZE(INTEGER N) ; RETURN(MICROFILM(CSIZE, CCSIZE ← N)) ;
STRING SIMPLE PROCEDURE SETHORIZ(INTEGER N) ; RETURN(MICROFILM(HORIZ, CHORIZ ← N)) ;
STRING SIMPLE PROCEDURE SETVERTI(INTEGER N) ; RETURN(MICROFILM(VERTI, CVERTI ← N)) ;
STRING SIMPLE PROCEDURE DOULINE(INTEGER N) ; RETURN(MICROFILM(ULINE, N)) ;
STRING SIMPLE PROCEDURE DORSPCS(INTEGER N) ; RETURN(MICROFILM(RSPCS, N)) ;
STRING SIMPLE PROCEDURE DOLSPCS(INTEGER N) ; RETURN(MICROFILM(LSPCS, N)) ;
STRING SIMPLE PROCEDURE DOUDOTS(INTEGER N) ; RETURN(MICROFILM(UDOTS, N)) ;
STRING SIMPLE PROCEDURE DORDOTS(INTEGER N) ; RETURN(MICROFILM(RDOTS, N)) ;
RECURSIVE STRING PROCEDURE VARBLANK(INTEGER N);
BEGIN "VARBLANK"
IFC VERSION=CMUVER THENC
IF N ≤ 0 THEN RETURN(NULL) ELSE
IF N ≥ 128 THEN RETURN(VSB & 127 & VARBLANK(N-127)) ELSE
RETURN(VSB&N)
ELSEC IFC VERSION=SAILVER THENC
IF N ≤ 0 THEN RETURN(NULL) ELSE
IF N ≥ 64 THEN RETURN(ESCAPE2 & 63 & VARBLANK(N-63)) ELSE
RETURN(ESCAPE2&N)
ELSEC IFC VERSION=PARCVER THENC
RETURN(CTLE&CVS(N)&".")
ENDC ENDC ENDC;
END "VARBLANK";
PRELOAD_WITH "", " ", " ", " ", " ", " ", " ",
" ", " ", " ", " " ;
SAFE STRING ARRAY SPSARR[0:10] ;
INTERNAL STRING SIMPLE PROCEDURE SPS(INTEGER N) ; IF N≤10 THEN RETURN(SPSARR[N MAX 0])
ELSE IF DEVICE=MIC THEN RETURN(DORSPCS(N))
ELSE BEGIN
STRING S ; INTEGER I ;
S ← SPSARR[10] ;
FOR I ← 11 THRU N DO S ← S & SP ;
RETURN(S) ;
END ;
COMMENT I N I T I A L I Z E ;
IFC VERSION=PARCVER THENC
DUMMY←CVSIX("PUB2 ");
START!CODE
MOVE 1,DUMMY;
'104000000210;
END;
ENDC
SCRIPT ← 10;
IFC TENEX THENC JOBNO ← GJINF(DUMMY, DUMMY, DUMMY) ; ENDC TES 10/25/73 ;
OUTSTR("PASS TWO: ") ;
IFC VERSION=PARCVER THENC IML←65; IMC←72; ENDC
IFC VERSION=SAILVER THENC IML←53; IMC←69; ENDC
IFC VERSION=CMUVER THENC IML←55; IMC←69; ENDC
PAGEHIGH ← PAGEWIDE ← PAGECT ← 0 ; CRLF ← CR & LF ;
SETBREAK(ONE_CHAR, NULL, NULL, "XA") ;
SETBREAK(TO_ALTMODE_SKIP, ALTMODE, NULL, "IS") ;
SETBREAK(TO_LF_APPD, LF, NULL, "IA") ;
SETBREAK(BREAKER, RUBOUT&VT&ALTMODE&CR&LF, NULL, "IS") ;
SETBREAK(TO_RUB_ALT_SKIP, RUBOUT&ALTMODE, NULL, "IS") ;
SEQCHAN ← READIN("PUPSEQ.PUI", FALSE, SEQBRC, SEQEOF) ;
TMPFILE ← INPUT(SEQCHAN, TO_ALTMODE_SKIP) ;
LISTFILE ← INPUT(SEQCHAN, TO_ALTMODE_SKIP) ;
DEBUG ← CVD(INPUT(SEQCHAN, TO_ALTMODE_SKIP)) ;
DEVICE ← CVD(INPUT(SEQCHAN, TO_ALTMODE_SKIP)) ;
DELINT ← INPUT(SEQCHAN, TO_ALTMODE_SKIP) ;
BAR ← INPUT(SEQCHAN, TO_ALTMODE_SKIP)[1 FOR 1] ;
IF BAR = SP THEN BAR ← 0 ; TES 10/22/73 ;
CHARW ← CVD(INPUT(SEQCHAN, TO_ALTMODE_SKIP));
IFC VERSION=SAILVER THENC LFTMAR←CVD(INPUT(SEQCHAN, TO_ALTMODE_SKIP));
BASELINE←CVD(INPUT(SEQCHAN, TO_ALTMODE_SKIP)); BASELINE←BASELINE+(BASELINE DIV 4); ENDC
IF ¬RPGSW AND DEVICE ≠ XGP THEN COMMENT STARTED BY ".R PUB2" ;
DO BEGIN
OUTSTR("OUTPUT DEVICE (LPT, TTY or MIC): ") ;
S ← INCHWL ;
DEVICE ← IF ANS(L) THEN LPT ELSE IF ANS(T) THEN TTY ELSE
IF ANS(M) THEN MIC ELSE IF ANS(X) THEN XGP ELSE 0;
END
UNTIL DEVICE ;
IF ¬RPGSW AND DEBUG THEN
IF DEVICE = MIC THEN DEBUG ← 0
ELSE DO BEGIN
OUTSTR("DEBUG INFO IN RIGHT MARGIN? (Y or N) = ") ;
S ← INCHWL ;
DEBUG ← IF ANS(Y) THEN -1 ELSE IF ANS(N) THEN 0 ELSE 100 ;
END
UNTIL DEBUG < 100 ;
OUTSTR(LISTFILE & " ") ;
ENDLINE ← LF ; ENDPAGE ← FF ;
RESTARTLINE ←
IFC PARCVER THENC IF DEVICE=XGP THEN CTLT&"0." ELSE CR
ELSEC CR ENDC ; TES 11/1/73 ;
CASE DEVICE-1 OF
BEGIN "DEV"
comment 1...LPT ; LISTCHAN ← WRITEON(LISTFILE) ;
comment 2...TTY ; LISTCHAN ← WRITEON(LISTFILE) ;
comment 3...MIC ; BEGIN IML ← IMC ← 1 ; LISTCHAN ← WRITEON(TMPFILE) ;
IF DEBUG THEN BEGIN WARN("Won't put Debug info on Microfilm") ;
DEBUG ← FALSE ; END END ;
COMMENT 4...XGP ; LISTCHAN ← WRITEON(LISTFILE)
END "DEV" ;
J ← 0 ; FOR K ← RUBOUT, ALTMODE, VT, CR, LF DO CHARTBL[K] ← J ← J + 1 ;
LABCHAN ← READIN("PULABL.PUI", FALSE, LABBRC, LABEOF) ;
NL ← CVD(INPUT(LABCHAN, TO_ALTMODE_SKIP)) ;
LASL ← 1000 ; comment, last physical line occupied on the page ;
S←INPUT(SEQCHAN,TO_LF_APPD); comment get to right place ;
BEGIN "INNER BLOCK"
STRING ARRAY LABTAB[0:1, 0:NL], OWLS[0:FIML-1] ;
AWHILE DO
BEGIN "LABEL"
TABLE ← CVD(INPUT(LABCHAN, TO_ALTMODE_SKIP)) ; IF LABEOF THEN DONE ;
LABTAB[TABLE, CVD(INPUT(LABCHAN, TO_ALTMODE_SKIP))] ←
INPUT(LABCHAN, TO_ALTMODE_SKIP) &
(IF DEVICE = XGP THEN
(ALTMODE & INPUT(LABCHAN, TO_ALTMODE_SKIP))
ELSE NULL);
END "LABEL" ;
RELEASE(LABCHAN);
COMMENT G O ! ;
DO comment, This loop is re-entered only if page image grows ;
BEGIN "SIZE"
SAFE STRING ARRAY IMG[1:IML+IML], SEG[0:IMC+IMC], SRCREF[1:IML] ;
SAFE INTEGER ARRAY LINK,FAKE,LASC[1:IML+IML] ;
LABEL CONTINUE ;
INTEGER SIMPLE PROCEDURE APPD(STRING S) ;
BEGIN "APPD"
INTEGER HAD, EXTRA, SPACES, F ; STRING T, SS ;
L ← LINE ; EXTRA ← LENGTH(S) ;
IFC VERSION NEQ CMUVER THENC
IF DEVICE=XGP THEN
BEGIN TES 11/13/73 FOR MULTI-COLUMNS ;
IF CHAR < (HAD ← LASC[L]) THEN
BEGIN
FAKE[L] ← FAKE[L] + HAD - CHAR ;
HAD ← LASC[L] ← CHAR ;
END
END
ELSE
ENDC
WHILE CHAR < (HAD ← LASC[L]) DO IF (F←LINK[L]) THEN L ← F ELSE
IF (LINK[L] ← AVAIL←AVAIL+1) > IML+IML THEN WARN("TOO MUCH FOR 1 PAGE: " & S)
ELSE L ← AVAIL ;
T ← IMG[L] ; SPACES ← CHAR - HAD ; HAD ← HAD + FAKE[L] ;
IF LENGTH(T) < HAD+SPACES+EXTRA THEN BEGIN comment no room -- must use concatenate ;
SS ← SPS(SPACES) ; IF DEVICE=MIC THEN FAKE[L] ← FAKE[L] + LENGTH(SS) - SPACES ;
IMG[L] ← IF HAD THEN T[1 TO HAD]&SS&S ELSE (0&SS&S)[2 TO ∞] END
ELSE BEGIN comment there's room in old string -- IDPB into it.;
SS ← T[HAD + 1 FOR 1] ; comment byte pointer to IDPB place ;
START_CODE "APPEND" LABEL LOOP1, LOOP2 ;
MOVE 1, SS ; MOVE 2, S ; MOVE 3, EXTRA ;
MOVE 4, SPACES ; JUMPE 4, LOOP2 ; MOVEI 5, '40 ; LOOP1: IDPB 5,1 ; SOJG 4,LOOP1 ;
LOOP2: ILDB 5, 2 ; IDPB 5, 1 ; SOJG 3, LOOP2 ;
END "APPEND" ;
END ;
RETURN(LASC[L] ← CHAR + EXTRA) ;
END "APPD" ;
SIMPLE PROCEDURE CTRL(STRING S) ;
BEGIN "CTRL"
CHAR ← APPD(S) - LENGTH(S) ;
LASC[L] ← CHAR ;
FAKE[L] ← FAKE[L] + LENGTH(S) ;
END "CTRL" ;
SIMPLE PROCEDURE UNDERSCORE(INTEGER RIGHTCHAR) ;
BEGIN "UNDERSCORE"
INTEGER NUMCHARS, DESCEND, SAVEHORIZ ;
NUMCHARS ← RIGHTCHAR - UNDERLINE ;
IF NUMCHARS > 0 THEN
BEGIN
SAVEHORIZ ← CHORIZ ;
DESCEND ← CCSIZE DIV 4 ;
CTRL( DOLSPCS(CHAR-UNDERLINE) & DOUDOTS(-DESCEND) & DOULINE(NUMCHARS-1) &
SETHORIZ(CCSIZE) & DOULINE(1) & DOLSPCS(1) & SETHORIZ(SAVEHORIZ) &
DOUDOTS(DESCEND) & DORSPCS(CHAR - RIGHTCHAR + 1) ) ;
UNDERLINE ← RIGHTCHAR ;
END ;
END "UNDERSCORE" ;
SIMPLE PROCEDURE CHANGESPACING ;
IF (N←CHRS-CHAR-1)>0 ∧ (K←(J←N*CHORIZ+SHORTM)/N MIN 511)≠CHORIZ THEN
BEGIN "CHANGESPACING"
IF UNDERLINE≥0 THEN UNDERSCORE(CHAR) ;
SHORTM ← J - K*N ;
IF NOTFST ∧ (UNDERLINE<0 ∨ SHORTM<0) THEN
BEGIN DORDOTS(SHORTM) ; SHORTM ← 0 END ;
CTRL(SETHORIZ(K)) ; NOTFST ← TRUE ;
END "CHANGESPACING" ;
SIMPLE PROCEDURE FONTSELECT(INTEGER WHICH);
BEGIN "FONTSELECT"
IF (WHICH←WHICH-"0")>9 THEN WHICH←WHICH-("A"-"0"-10);
IFC VERSION=CMUVER THENC
IF WHICH=10 THEN CTRL(USEA) ELSE
IF WHICH=11 THEN CTRL(USEB) ELSE
WARN("Font ignored")
ELSEC IFC VERSION=SAILVER THENC
IF WHICH>16 THEN WARN("Font ignored") ELSE
BEGIN
CTRL(ESCAPE1&(WHICH-1));
IF SCRLVL THEN CTRL(ESCAPE1&'43&SCRLVL);
END;
ELSEC IFC VERSION=PARCVER THENC
IF WHICH>9 THEN WARN("Font ignored") ELSE
CTRL(6&(THISFONT←WHICH+"0"))
ENDC ENDC ENDC;
END "FONTSELECT";
SIMPLE PROCEDURE XGPTAB(INTEGER N);
BEGIN "XGPTAB"
IFC VERSION NEQ CMUVER THENC
N ← N + TLFTMAR ; TVR: used to be LFTMAR; ENDC
IFC VERSION=CMUVER THENC CTRL(XTAB&XGPNUM(N)) ENDC
IFC VERSION=SAILVER THENC
CTRL(ESCAPE1&'40&XGPNUM(N))
ENDC
IFC VERSION=PARCVER THEN
CTRL(CTLT&CVS(N)&".")
ENDC;
END "XGPTAB";
SIMPLE PROCEDURE RIGHTBOUND ;
BEGIN "RIGHTBOUND" COMMENT RIGHT BOUND OF ∞ ;
INTEGER DEST, FILLIN, I ; STRING FILLER, OLBF ;
INTEGER XF;
IF SLIDETOP < 1 THEN BEGIN IMPOSSIBLE("SLIDETOP1") ; SLIDETOP ← 1 END ;
IF LBD[SLIDETOP] < -900 THEN COMMENT FLUSH RIGHT ;
BEGIN
IF DEVICE = XGP THEN XF←RB[SLIDETOP]-(XFILL[SLIDETOP]+FSIZE);
FILLIN←RB[SLIDETOP]-CHRS;
END
ELSE COMMENT CENTER ;
BEGIN
IF DEVICE = XGP THEN
XF ← (RB[SLIDETOP]-LBD[SLIDETOP]-(XFILL[SLIDETOP]+FSIZE)) DIV 2;
FILLIN ← (((RB[SLIDETOP]-CHRS) - LBD[SLIDETOP]) DIV 2) MAX 0;
END;
DEST ← CHRS + FILLIN ; OLBF ← LBF[SLIDETOP] ;
IF FULSTR(OLBF) THEN
IF DEVICE=XGP THEN
BEGIN "XGPINFINITY"
FILLER ← NULL ;
FOR I ← 1 THRU XINF[SLIDETOP] DO FILLER ← FILLER & OLBF ;
SEG[I ← SLIDESG[SLIDETOP]] ← FILLER ;
SEG[I + 1] ← RUBOUT & "=" & CVS(XF) ;
END "XGPINFINITY"
ELSE
BEGIN "NON-BLANKS"
FILLER ← NULL ;
WHILE CHRS < DEST DO
BEGIN
FILLER ← FILLER & OLBF ;
CHRS ← CHRS + LENGTH(OLBF) ;
END ;
IF CHRS > DEST THEN FILLER ← FILLER[1 TO ∞-(CHRS-DEST)] ;
SEG[SLIDESG[SLIDETOP]] ← FILLER ;
END "NON-BLANKS"
ELSE SEG[SLIDESG[SLIDETOP]] ← RUBOUT &
(IF DEVICE = XGP THEN ("="&CVS(XF))
ELSE ("+"&CVS(FILLIN)) );
CHRS ← DEST ; SLIDETOP ← SLIDETOP - 1 ;
BRKS ← 0 ; FSTCHRS ← CHRS ; FSTBRK ← SG ; COMMENT NOJUST TO LEFT ;
FLUSHING ← FALSE ; FSIZE ← 0 ;
END "RIGHTBOUND";
IF PAGEHIGH THEN GO TO CONTINUE ; comment, re-entered ;
AWHILE DO
BEGIN "FILE"
PAGEFILE ← INPUT(SEQCHAN, TO_ALTMODE_SKIP) ; IF SEQEOF THEN DONE ;
IFILE ← PAGEFILE & ".PUI" ; SFILE ← PAGEFILE & "S.PUI" ;
ICHAN ← READIN(IFILE, TRUE, PAGEBRC, PAGEEOF) ; SCHAN ← READIN(SFILE, FALSE, PAGEBRC, PAGEEOF) ;
AWHILE DO
BEGIN "PAGE"
PAGEHIGH ← INNUM ; IF PAGEEOF ∨ PAGEHIGH≤0 THEN DONE ; PAGEWIDE ← INNUM ;
IF PAGEHIGH > IML ∨ PAGEWIDE > IMC THEN
BEGIN "EXPAND"
IF DEVICE=MIC THEN
BEGIN "FRAME SIZE"
IF LASL ≠ 1000 THEN OUT(LISTCHAN, ENDPAGE) ;
NVERTI ← 11000 DIV PAGEHIGH MIN 16384 DIV PAGEWIDE MIN 375 ;
NHORIZ ← 10*NVERTI DIV 11 ; NCSIZE ← (9*NHORIZ DIV 80)*8 ;
OUT(LISTCHAN, SETSIZE(NCSIZE)&SETHORIZ(NHORIZ)&SETVERTI(NVERTI)) ;
END "FRAME SIZE"
IFC VERSION=SAILVER THENC
ELSE IF DEVICE = LPT THEN
BEGIN
IF (LASL-1) MOD 66 + 1 ≤ 6 ∧ (PAGEHIGH-1) MOD 66 < 60 THEN
OUT(LISTCHAN, ENDPAGE) ;
ENDLINE ← IF PAGEHIGH≥54 THEN RUBOUT & '21 ELSE LF ;
END ;
ENDC;
IML ← PAGEHIGH ; IMC ← PAGEWIDE ;
DONE ; comment, Exit "SIZE" block and immediately reenter with bigger IMG array ;
END "EXPAND" ;
CONTINUE: OUTSTR(CVS(PAGECT ← PAGECT + 1) & SP) ; AVAIL ← IML ;
IFC VERSION=SAILVER THENC
IF PAGECT NEQ 1 THEN
IF DEVICE = LPT THEN COMMENT AVOID SPURIOUS BLANK PAGE ;
IF (IML-1) MOD 66 < 60 THEN OUT(LISTCHAN, ENDPAGE)
ELSE FOR L ← (LASL-1) MOD 66 + 2 THRU 66 DO
BEGIN OUT(LISTCHAN, CR) ; OUT(LISTCHAN, ENDLINE) END
ELSE OUT(LISTCHAN, ENDPAGE) ; TES 11/28/73 ;
ENDC
WHILE (TOPLINE ← INNUM) > -10 DO
BEGIN "AREA"
NCOLS ← INNUM ; NLINES ← INNUM ;
FOR COL ← 1 THRU NCOLS DO
BEGIN "COLUMN"
LEFTCH ← INNUM ;
IFC VERSION NEQ CMUVER THENC
TLFTMAR ← LFTMAR + CHARW*(LEFTCH-1) ;
ENDC TVR: Initiallize left margin for this column ;
WHILE (LINENO ← INNUM) DO
BEGIN "LINE"
SH ← SHORTM ← INNUM ; SG ← FSTBRK ← -1 ; BRKS ← CHRS ← FSTCHRS ← SLIDETOP ← 0 ;
LINE ← TOPLINE - 1 + LINENO ;
IF LINE<1∨LINE>IML THEN BEGIN WARN("Area outside page"); LINE←LINE MAX 1 MIN IML END ;
L ← INNUM ; F ← L MOD FIML ; OWL ← OWLS[F] ;
IF FULSTR(OWL) THEN BEGIN FROMFILE ← FALSE ; OWLS[F] ← NULL END
ELSE BEGIN FROMFILE ← TRUE ;
WHILE L ≠ (M←CVD(INP(TO_ALTMODE_SKIP))) DO
BEGIN S ← NULL ;
DO S ← S & INP(TO_LF_APPD) UNTIL PAGEBRC = LF ;
OWLS[M MOD FIML] ← S ;
END ;
END ;
IF ¬DEBUG THEN S ← SCN(TO_ALTMODE_SKIP)
ELSE BEGIN
SRCREF[LINE] ← SRCREF[LINE] & " " & SCN(TO_RUB_ALT_SKIP) ;
WHILE PAGEBRC ≠ ALTMODE DO
BEGIN "ERROR MESSG"
S ← SCN(TO_RUB_ALT_SKIP) ; M ← LENGTH(S)+3 ; L ← LINE ;
IF DEVICE=TTY ∨ (IMC MAX 75)+13*(NCOLS-COL)+LENGTH(SRCREF[L])+M ≤ 119 THEN
SRCREF[L] ← SRCREF[L] & "..." & S ;
END "ERROR MESSG" ;
END ;
DO BEGIN "PIECE"
CHRS ← CHRS + LENGTH(SEG[SG ← SG + 1] ← SCN(BREAKER)) ;
CASE CHARTBL[PAGEBRC] OF
BEGIN comment by BRC ;
comment 0 ... ; IMPOSSIBLE("BREAKER") ;
comment 1 ... RUBOUT -- Font change ; BEGIN
SEG[SG←SG+1] ← RUBOUT & (F←SCN(ONE_CHAR)) &
(S ← IF F="-" ∨ F="+" ∨ F="=" THEN SCN(TO_ALTMODE_SKIP)
ELSE IF F = "π" OR F = "F" THEN SCN(ONE_CHAR) ELSE NULL) ;
IF F = "π" THEN CHRS ← CHRS + 1
ELSE IF F = "+" THEN CHRS ← CHRS + CVD(S)
ELSE IF F = "-" THEN CHRS ← CHRS - CVD(S)
ELSE IF F = "→" THEN
BEGIN COMMENT ∞ ;
IF (SLIDETOP ← SLIDETOP + 1) > 5 THEN IMPOSSIBLE("SLIDETOP") ;
SLIDESG[SLIDETOP] ← SG ; RB[SLIDETOP] ← SCNUM ;
LBD[SLIDETOP] ← SCNUM ;
IF DEVICE = XGP THEN
BEGIN
RKJ; XFILL[SLIDETOP] ← SCNUM ;
TES ; XINF[SLIDETOP] ← SCNUM ;
END ;
LBF[SLIDETOP] ← SCN(TO_ALTMODE_SKIP) ;
FLUSHING ← TRUE;
END
ELSE IF F = "←" THEN
RIGHTBOUND
ELSE IF F = "=" THEN BEGIN
comment 8/9/73 RKJ IF DEVICE=XGP THEN SHORTM←(SHORTM-BRKS*CHARW) MAX 0;
BRKS←0 ; FSTCHRS←CHRS←CVD(S) ; FSTBRK←SG END ;
END ; COMMENT NOJUST LEFT OF TAB ;
comment 2 ... ALTMODE -- Word Break ; BEGIN BRKS ← BRKS + 1 ; SEG[SG←SG+1] ← ALTMODE END ;
comment 3 ... VT -- label reference ;
BEGIN "LABEL REF"
STRING S;
S ← LABTAB[(F←SCNUM) LSH -14, F LAND '37777] ;
L ← LENGTH(SEG[SG←SG+1] ← SCAN(S, TO_ALTMODE_SKIP, DUMMY)) ;
J ← CVD(S) ;
SHORTM ← SHORTM - (IF DEVICE=XGP THEN J ELSE L) ; CHRS ← CHRS + L ;
IF FLUSHING AND DEVICE=XGP THEN FSIZE←FSIZE+J ;
END "LABEL REF" ;
comment 4 ... CR -- Justify it ;
BEGIN "JUSTIFY"
WHILE SLIDETOP DO BEGIN IMPOSSIBLE("SLIDE TOP") ; RIGHTBOUND END ;
IF SHORTM < 0 THEN SHORTM ← 0 ;
IF DEVICE = MIC THEN SHORTM ← SHORTM*NHORIZ
ELSE BEGIN "DISTRIBUTE SPACES"
COMMENT β(α,K) = [α(K+1)] - [αK],
WHERE α = SHORTM/BRKS, is h.m. spaces to insert at the K'th break ;
RATIO ← IF BRKS=0 THEN 0.0 ELSE SHORTM/BRKS ; TERM ← RATIO + .0001 ; BRKS ← 1 ;
END "DISTRIBUTE SPACES" ;
UNDERLINE←-1 ; LINE←TOPLINE-1+LINENO MAX 1 MIN IML ; CHAR←LEFTCH-1 MAX 0 ;
NOTFST ← FALSE ; CHRS ← CHRS + CHAR ;
TVR: Initial column select for XGP ;
IFC VERSION NEQ CMUVER THENC IF DEVICE=XGP AND LEFTCH NEQ 1 THEN XGPTAB(0) ELSE ENDC
IF DEVICE = MIC AND FSTBRK = -1 THEN CHANGESPACING ;
FOR G ← 0 THRU SG DO IF FULSTR(S ← SEG[G]) THEN CASE CHARTBL[S] OF
BEGIN comment three cases ;
comment 0 ... text ;
BEGIN "TEXT SEG"
IF UNDERLINE<0 OR BAR=0 TES 10/22/73 ; THEN CHAR←APPD(S) ELSE
IF DEVICE = MIC THEN
BEGIN K ← LENGTH(S) ;
WHILE K DO
BEGIN COMMENT DON'T UNDERLINE BLANKS ;
N ← LOP(S) ;
IF N=SP THEN BEGIN UNDERSCORE(CHAR-K) ; UNDERLINE←UNDERLINE+1 END ;
K ← K - 1 ;
END ;
END
ELSE IF DEVICE = XGP THEN
BEGIN
IFC VERSION=CMUVER THENC
K←LENGTH(S); SS←0&SPS(K*4); N←LOP(SS);
START!CODE "XGPUNDER"
DEFINE LEN="2",SRC="3",DEST="4",RUB="5",ESC="6",R="7",CNT="'10",UBAR="'11";
LABEL LOOP,ELOOP,SPACE,OUTT;
SETZ CNT,0; MOVE LEN,K; MOVE SRC,S; MOVE DEST,SS; MOVEI RUB,'177; MOVEI ESC,'35; MOVE UBAR,BAR;
LOOP: ILDB R,SRC;
CAIE R,BAR; CAIN R,SP; JRST SPACE;
IDPB RUB,DEST; IDPB ESC,DEST; IDPB R,DEST; IDPB UBAR,DEST;
ELOOP: SOJG LEN,LOOP;
MOVEM CNT,N; JRST OUTT;
SPACE: IDPB R,DEST;
AOJA CNT,ELOOP;
OUTT:
END "XGPUNDER";
CHAR←APPD(SS[1 TO (K*4-N*3)])-(K-N)*3;
LASC[L]←CHAR; FAKE[L]←FAKE[L]+(K-N)*3;
ENDC
IFC VERSION=SAILVER THENC CHAR←APPD(S); ENDC
IFC VERSION=PARCVER THENC
K←LENGTH(S); SS←0&SPS(K*3); N←LOP(SS);
START!CODE "XGPUNDER"
DEFINE LEN="2",SRC="3",DEST="4",BS="5",UBAR="6",CNT="7",R="'10";
LABEL LOOP, OUTT;
SETZ CNT,0;
MOVE LEN,K; MOVE SRC,S; MOVE DEST,SS; MOVEI BS,'10; MOVE UBAR,BAR;
LOOP: SOJL LEN,OUTT;
ILDB R,SRC;
IDPB R,DEST;
CAIE R,BAR; CAIN R,SP; AOJA CNT,LOOP;
IDPB BS,DEST; IDPB UBAR,DEST;
JUMPA LOOP;
OUTT: MOVEM CNT,N;
END "XGPUNDER";
CHAR←APPD(SS[1 TO (K*3-N*2)])-(K-N)*2;
LASC[L]←CHAR; FAKE[L]←FAKE[L]+(K-N)*2;
ENDC
END
ELSE BEGIN CHAR ← APPD(S);
K ← LENGTH(S) ; SS ← 0&S ; N ← LOP(SS) ; CHAR←CHAR-K ;
START_CODE "UNDER" LABEL LOOP ;
MOVE 2, K ; MOVE 3, SS ;
LOOP: ILDB 4,3 ; CAIE 4,SP ; CAIN 4,BAR ; CAIA 0,0 ; MOVE 4,BAR ; DPB 4,3 ; SOJG 2,LOOP ;
END "UNDER" ; CHAR ← APPD(SS[1 TO LENGTH(S)]) ;
END ;
END "TEXT SEG" ;
comment 1 ... RUBOUT -- Font Change ;
IF (F←S[2 FOR 1])="↑" THEN
IF DEVICE=MIC THEN CTRL(DOUDOTS(CCSIZE MIN 63)) ELSE
IFC VERSION=PARCVER THENC
IF DEVICE=XGP THEN
IF (SCRLVL←SCRLVL+SCRIPT)≤0 THEN CTRL("R"-'100) ELSE
BEGIN LABEL L1;
CTRL("U"-'100);
L1:
IF G<SG THEN
BEGIN
SS←SEG[G+1];
IF NULSTR(SS) THEN BEGIN G←G+1; GO L1 END; comment try again ;
IF EQU(SS[1 FOR 2],RUBOUT&"F") THEN
BEGIN
G←G+1;
CTRL(SS[3 FOR 1]);
END ELSE CTRL(THISFONT);
END ELSE CTRL(THISFONT)
END
ELSE ENDC
IFC VERSION=SAILVER THENC
IF DEVICE=XGP THEN
CTRL(ESCAPE1&'43&(SCRLVL←SCRLVL+SCRIPT))
ELSE ENDC LINE←LINE-1 MAX 1
ELSE IF F = "↓" THEN
IF DEVICE=MIC THEN CTRL(DOUDOTS(-(CCSIZE MIN 63))) ELSE
IFC VERSION=PARCVER THENC
IF DEVICE=XGP THEN
IF (SCRLVL←SCRLVL-SCRIPT)≥0 THEN CTRL("R"-'100) ELSE
BEGIN LABEL L2;
CTRL("S"-'100);
L2:
IF G<SG THEN
BEGIN
SS←SEG[G+1];
IF NULSTR(SS) THEN BEGIN G←G+1; GO L2 END; comment ↑↑↑ ;
IF EQU(SS[1 FOR 2],RUBOUT&"F") THEN
BEGIN
G←G+1;
CTRL(SS[3 FOR 1]);
END ELSE CTRL(THISFONT);
END ELSE CTRL(THISFONT)
END
ELSE ENDC
IFC VERSION=SAILVER THENC
IF DEVICE=XGP THEN
CTRL(ESCAPE1&'43&(SCRLVL←SCRLVL-SCRIPT)) ELSE ENDC LINE←LINE+1 MIN IML
ELSE IF F = "_" THEN
BEGIN
UNDERLINE ← CHAR;
IFC VERSION=SAILVER THENC
IF DEVICE=XGP THEN CTRL(ESCAPE1&'46);
ENDC
END
ELSE IF F = "≡" THEN
BEGIN "END UNDERLINED TEXT"
IF DEVICE = MIC AND BAR TES 10/22/73; THEN UNDERSCORE(CHAR) ;
UNDERLINE ← -1 ;
IFC VERSION=SAILVER THENC
IF DEVICE=XGP AND BAR TES 10/22/73; THEN
CTRL(ESCAPE1&'47&3); TES AND REG 11/19/73 ;
ENDC
END "END UNDERLINED TEXT"
ELSE IF F="-" THEN
IF DEVICE=MIC THEN CTRL(DOLSPCS(CVD(S[3 TO ∞])))
ELSE CHAR←CHAR-CVD(S[3 TO ∞]) MAX 0
ELSE IF F="*" THEN CHAR ← LASC[LINE] comment not always correct! ;
ELSE IF F="+" THEN
IF DEVICE=MIC THEN CTRL(DORSPCS(CVD(S[3 TO ∞])))
ELSE IF DEVICE=XGP THEN CTRL(VARBLANK(CVD(S[3 TO ∞])))
ELSE CHAR←CHAR+CVD(S[3 TO ∞]) MIN IMC
ELSE IF F="=" THEN
BEGIN "TAB"
F ← CVD(S[3 TO ∞]) ;
IF DEVICE ≠ XGP THEN F ← F + LEFTCH - 1 MIN IMC MAX 1 ;
IF DEVICE = XGP THEN XGPTAB(F)
ELSE IF DEVICE ≠ MIC THEN CHAR ← F
ELSE IF F < CHAR THEN DOLSPCS(CHAR - F)
ELSE IF F > CHAR THEN DORSPCS(F - CHAR) ;
END "TAB"
ELSE IF F = "π" THEN
BEGIN F←S[∞ FOR 1] ;
IF DEVICE = TTY THEN CHAR ← APPD(F)
ELSE BEGIN
IFC VERSION=CMUVER THENC
DEFINE S1="'34",
K1="(IF DEVICE=XGP THEN 2 ELSE 1)",
K2="(IF DEVICE=XGP THEN 1 ELSE 2)";
ELSEC DEFINE S1="NULL",K1="1",K2="1";
ENDC
CHAR←APPD(RUBOUT&S1&(
IF F="." THEN '0 ELSE IF F="G" THEN '11 ELSE IF F="∂" THEN '12 ELSE IF F
="~" THEN '13 ELSE IF F="-" THEN '14 ELSE IF F="+" THEN '15 ELSE 0))-K1 ;
LASC[L] ← CHAR ; FAKE[L] ← FAKE[L] + K1 ; END ; RKJ 11/20/73;
IF UNDERLINE≥0 ∧ DEVICE≠MIC THEN BEGIN CHAR←CHAR-1; CHAR←APPD(BAR) END ;
END
ELSE IF F = "←" THEN BEGIN END
ELSE IF F="F" THEN FONTSELECT(S[3 FOR 1])
ELSE IF F='35 THEN COMMENT OVERSTRIKE NEXT CHAR OVER LAST ;
BEGIN "OVERSTRIKE"
IFC VERSION=CMUVER THENC
INTEGER Q;
Q←IMG[L][(LASC[L]+FAKE[L]) FOR 1];
LASC[L]←LASC[L]-1; CHAR←CHAR-1;
CTRL(RUBOUT&'35); CHAR←APPD(Q);
ENDC
IFC VERSION=SAILVER THENC IMPOSSIBLE("Overstrike") ENDC
IFC VERSION=PARCVER THENC
CTRL('10)
ENDC
END
ELSE IF F=RUBOUT THEN IF DEVICE≠XGP THEN CHAR←APPD(SP) ELSE
BEGIN
CHAR←APPD(RUBOUT&RUBOUT)-1; LASC[L]←CHAR; FAKE[L]←FAKE[L]+1;
END
ELSE IMPOSSIBLE("FONT `"&F&"'") ;
comment 2 ... ALTMODE -- word break ;
IF SHORTM ∧ G > FSTBRK THEN
IF DEVICE ≠ MIC THEN
BEGIN "SPREAD"
TERMX ← RATIO*(BRKS←BRKS+1) + .0001 ;
IF DEVICE = XGP THEN
BEGIN "DOVSB"
CTRL(VARBLANK((TERMX-TERM) MIN SHORTM));
SHORTM←(SHORTM-TERMX+TERM) MAX 0;
END "DOVSB"
ELSE CHAR ← CHAR + TERMX - TERM MIN IMC ;
TERM ← TERMX ;
END "SPREAD"
ELSE CHANGESPACING
ELSE IF SHORTM AND DEVICE=XGP THEN
BEGIN
CHAR←APPD(SP);
END;
comment 3-5 ; IMPOSSIBLE("VT in SEG[]") ; IMPOSSIBLE("CR in SEG[]") ; IMPOSSIBLE("LF in SEG[]") ;
END ; COMMENT three cases ;
IF CHORIZ ≠ NHORIZ THEN CTRL(SETHORIZ(NHORIZ)) ;
IFC VERSION=SAILVER THENC
IF DEVICE=XGP AND UNDERLINE≥0 THEN
CTRL(ESCAPE1&'47&BASELINE);
ENDC
BRKS ← CHRS ← FSTCHRS ← SLIDETOP ← 0 ; SG ← FSTBRK ← -1 ; SHORTM ← SH ;
END "JUSTIFY" ;
comment 5 ... LF ; BEGIN END ;
END ; comment, by BRC ;
END "PIECE"
UNTIL PAGEBRC = LF ;
END "LINE" ;
END "COLUMN" ;
END "AREA" ;
FOR LASL ← PAGEHIGH DOWN 1 DO IF LASC[LASL] THEN DONE ;
F ← 120 - (IMC MAX 78) ;
FOR N ← 1 THRU LASL DO
BEGIN "LIST LINE"
L ← N ; IF DEBUG ∧ LENGTH(S←SRCREF[L])>F ∧ DEVICE=LPT THEN S←S[1 TO F] ;
NEEDCR ← FALSE ; TES 11/1/73 ;
DO BEGIN "PART LINE"
IF M ← LASC[L] THEN
BEGIN "NONBLANK"
IF NEEDCR THEN OUT(LISTCHAN, RESTARTLINE) ELSE NEEDCR ← TRUE ; TES 11/1/73;
OUT(LISTCHAN, IMG[L][1 TO M+FAKE[L]]) ;
IF DEBUG ∧ L=N THEN OUT(LISTCHAN, SPS((IMC MAX 80)-M) & S);
END "NONBLANK" ;
M ← L ; L ← LINK[M] ; LINK[M] ← LASC[M] ← FAKE[M] ← 0 ;
END "PART LINE" UNTIL L=0 ;
TES 11/1/73 CHANGED ; OUT(LISTCHAN, CR) ; COMMENT ALWAYS CR BEFORE LF ;
OUT(LISTCHAN, ENDLINE) ;
IF DEBUG THEN SRCREF[N] ← NULL ;
END "LIST LINE" ;
IFC VERSION≠SAILVER THENC OUT(LISTCHAN, ENDPAGE) ; ENDC
END "PAGE" ;
IF ¬(PAGEEOF ∨ PAGEHIGH≤0) THEN DONE ; comment expand IMG ;
RELEASE(ICHAN) ; RELEASE(SCHAN) ;
END "FILE" ;
END "SIZE" UNTIL SEQEOF ;
IFC VERSION=SAILVER THENC OUT(LISTCHAN, ENDPAGE) ; ENDC
RELEASE(LISTCHAN) ; RELEASE(SEQCHAN) ;
END "INNER BLOCK" ;
BEGIN EXTERNAL SIMPLE PROCEDURE K_OUT ; K_OUT END ; COMMENT ** ** ** ** ** ;
OUTSTR(CRLF) ; comment signal terminal that pass two is done ;
IF DELINT="A" ∨ DELINT="a" THEN
BEGIN
OUTSTR(CRLF & "DELETE INTERMEDIATE FILES?(Y OR N,CR)") ;
DELINT ← INCHWL ;
END ;
IF DELINT="Y" ∨ DELINT="y" THEN
BEGIN "DELETE INTERMEDIATE FILES"
SEQCHAN ← READIN("PUPSEQ.PUI", FALSE, SEQBRC, SEQEOF) ;
DO INPUT(SEQCHAN, TO_LF_APPD) UNTIL SEQBRC=LF;
LABCHAN ← READIN("PULABL.PUI", FALSE, LABBRC, LABEOF) ;
RENAME(LABCHAN, NULL, 0, I) ; COMMENT DELETE ;
RELEASE(LABCHAN);
AWHILE DO
BEGIN
PAGEFILE ← INPUT(SEQCHAN, TO_ALTMODE_SKIP) ;
IF SEQEOF THEN DONE ;
IFILE ← PAGEFILE & ".PUI" ; SFILE ← PAGEFILE & "S.PUI" ;
ICHAN ← READIN(IFILE, TRUE, PAGEBRC, PAGEEOF) ;
SCHAN ← READIN(SFILE, FALSE, PAGEBRC, PAGEEOF) ;
RENAME(ICHAN, NULL, 0, I) ; RENAME(SCHAN, NULL, 0, I) ;
RELEASE(ICHAN); RELEASE(SCHAN);
END ;
RENAME(SEQCHAN, NULL, 0, I) ; RELEASE(SEQCHAN) ;
END "DELETE INTERMEDIATE FILES"
ELSE IF DELINT≠"N" ∧ DELINT≠"n" THEN WARN(DELINT&"? -- .PUI FILES WERE NOT DELETED") ;
IFC VERSION=SAILVER THENC
IF DEVICE = MIC THEN
BEGIN "PASS 3"
INTEGER FCHAN ;
INTEGER SIMPLE PROCEDURE CORELOC(INTEGER ARRAY A) ; START_CODE MOVE 1, A ; END ;
INTEGER ARRAY PASSTHREE[0:4] ;
FCHAN ← WRITEON("$PUB$.RPG") ;
OUT(FCHAN, LISTFILE&CRLF&TMPFILE&CRLF&"F"&CRLF&FF) ;
RELEASE(FCHAN) ;
PASSTHREE[0] ← CVSIX("DSK") ;
PASSTHREE[1] ← CVFIL("TXTF80[1,3]", PASSTHREE[2], PASSTHREE[4]) ;
PASSTHREE[3] ← 1 ; COMMENT STARTING ADDRESS IS NORMAL + 1 ;
OUTSTR("PRODUCING FR80 FILE" & CRLF) ;
CALL(CORELOC(PASSTHREE), "SWAP") ;
END "PASS 3" ;
IF DEVICE=XGP THEN LODED("XSPOOL @QQXGP.RPG"&CRLF);
ENDC
IFC VERSION=CMUVER THENC
IF DEVICE = XGP THEN
BEGIN "RUN DOXAP"
INTEGER ARRAY RUNBLK[0:5];
INTEGER C,D;
INTEGER PROCEDURE PJOB;
START!CODE CALLI 1, '30; END;
SETFORMAT(-3,0);
C←WRITEON(CVS(PJOB)&"PB3.TMP");
OUT(C,LISTFILE&CR&LF);
RELEASE(C);
RUNBLK[0]←CVSIX("DSK");
RUNBLK[1]←CVFIL("PUB3[A700PU00]",RUNBLK[2],RUNBLK[4]);
RUNBLK[3]←RUNBLK[5]←0;
START!CODE
MOVE 1, RUNBLK;
HRLI 1, 1;
CALLI 1, '35;
JRST 4, ;
END;
END "RUN DOXAP";
ENDC
START_CODE CALLI 1,'12; CALLI 0,'12; END;
END "PUB2" ;