1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-01-13 15:17:03 +00:00
Paul Kimpel c9fe38ede3 1. Commit proofreading corrections to SYMBOL.PASCAL and PASCRUN.DISK.
2. Commit compile deck and listing with patches to allow the compiler to work with B5500 Mark XIII Algol.
3. Commit compile & go deck and output listing for HMSS2.TEST sample program.
2016-07-04 18:35:59 -07:00

476 lines
42 KiB
Plaintext

$ CARD SEQXEQ RESET LIST% 00000001
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00000002
% % 00000003
% THE PASCAL RUN TIME-SYSTEM. % 00000004
% --------------------------- % 00000005
% % 00000006
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 00000007
BEGIN% 00000008
INTEGER V00167,V00168,V00169;% 00000009
FILE INPUT "INPUT" (2,10);% 00000010
FILE OUTPUT 1 (2,17);% 00000011
% 00000012
DEFINE PROCEDU =PROCEDURE#,% 00000013
FUNCTN =REAL PROCEDURE#,% 00000014
DOWNTO =STEP -1 UNTIL#,% 00000015
UPTO =STEP 1 UNTIL#,% 00000016
B =BOOLEAN#,% 00000017
F00603 =INPUT#,% 00000018
F00742 =OUTPUT#,% 00000019
LASTCH =[5:6]#,% 00000020
BUFSIZE =[13:8]#,% 00000021
BUFPNT =[21:8]#,% 00000022
EOF =[22:1]#,% 00000023
EOLN =[23:1]#,% 00000024
INP =[24:1]#,% 00000025
OUTP =[25:1]#,% 00000026
ENDFOUND=[26:1]#,% 00000027
MEMSIZE =10000#,% 00000028
MAXINT =549755813887#;% 00000029
% 00000030
ARRAY MEM[0:MEMSIZE DIV 1022,0:1022], TEXT,CHAR[0:0], TEMPTEXT[0:19],% 00000031
V00603[0:9], V00742[0:16];% 00000032
INTEGER MEMPNT,T,T1,I00603,I00742;% 00000033
POINTER CHARPNT,TEXTPNT;% 00000034
LABEL TERMINATE;% 00000035
FORMAT TERMMESS ("**** PROGRAM EXECUTION TERMINATED AT LINE ",I*,"."),% 00000036
CHECKERR ("**** THE VALUE ",I*," IS NOT IN THE RANGE ",I*,"..",% 00000037
I*,"."),% 00000038
ERRMARK (X*,"|"),% 00000039
CONCATERR("**** CONCAT ERROR: [",I*,":",I*,":",I*,"]"),% 00000040
ILLEGALCC("**** ILLEGAL CARRIAGE CONTROL CHARACTER:"""",A1,""");%00000041
SWITCH FORMAT ERRMESS :=% 00000042
(),% 00000043
("**** NO READING WHILE EOF IS TRUE."), %1 00000044
("**** NO WRITING WHILE EOF IS FALSE."), %2 00000045
("**** ILLEGAL CHARACTER,"), %3 00000046
("**** OVERFLOW ERROR."), %4 00000047
("**** NO RESET/REWRITE ON INPUT/OUTPUT."), %5 00000048
("**** LINE IMAGE OVERFLOW."); %6 00000049
MONITOR EXPOVR:=REALOVERFLOW;% 00000050
% 00000051
INTEGER PROCEDURE NUMDIGITS(N);% 00000052
VALUE N; INTEGER N;% 00000053
NUMDIGITS:=IF N<0 THEN 1+NUMDIGITS(-N) ELSE% 00000054
IF N>9 THEN 1+NUMDIGITS(N DIV 10) ELSE 1;% 00000055
% 00000056
PROCEDURE RUNERR(ERRNUM,LINENUM); %*** RUN TIME ERROR *** 00000057
VALUE ERRNUM,LINENUM;% 00000058
INTEGER ERRNUM,LINENUM;% 00000059
BEGIN% 00000060
WRITE(OUTPUT,ERRMESS[ERRNUM]);% 00000061
WRITE(OUTPUT,TERMMESS,NUMDIGITS(LINENUM),LINENUM);% 00000062
GO TO TERMINATE;% 00000063
END OF RUNNER;% 00000064
% 00000065
INTEGER PROCEDURE CHECK(VAL,LIM1,LIM2,LINENUM);% 00000066
VALUE VAL,LIM1,LIM2,LINENUM;% 00000067
INTEGER VAL,LIM1,LIM2,LINENUM;% 00000068
BEGIN% 00000069
IF VAL<LIM1 OR VAL>LIM2 THEN% 00000070
BEGIN WRITE(OUTPUT,CHECKERR,NUMDIGITS(VAL),VAL,NUMDIGITS(LIM1),% 00000071
LIM1,NUMDIGITS(LIM2),LIM2);% 00000072
RUNERR(4,LINENUM);% 00000073
END;% 00000074
CHECK:=VAL;% 00000075
END OF CHECK;% 00000076
% 00000077
ALPHA PROCEDURE CURDAT;% 00000078
CURDAT:=" "&TIME(5)[41:35:36];% 00000079
% 00000080
ALPHA PROCEDURE WEEKDA;% 00000081
WEEKDA:=TIME(6)&" "[41:5:6];% 00000082
% 00000083
INTEGER PROCEDURE TRUNC(X,LINENUM);% 00000084
VALUE X,LINENUM;% 00000085
REAL X; INTEGER LINENUM;% 00000086
BEGIN% 00000087
IF ABS(X)>MAXINT THEN RUNERR(4,LINENUM);% 00000088
TRUNC:=IF X<0 THEN -ENTIER(-X) ELSE ENTIER(X);% 00000089
END OF TRUNC;% 00000090
% 00000091
INTEGER PROCEDURE ROUND(X,LINENUM);% 00000092
VALUE X,LINENUM;% 00000093
REAL X; INTEGER LINENUM;% 00000094
BEGIN% 00000095
IF ABS(X)>MAXINT THEN RUNERR(4,LINENUM);% 00000096
ROUND:=X;% 00000097
END OF ROUND;% 00000098
% 00000099
BOOLEAN PROCEDURE ODD(N);% 00000100
VALUE N; INTEGER N;% 00000101
ODD:=N MOD 2 = 1;% 00000102
% 00000103
REAL PROCEDURE SQR(X,LINENUM);% 00000104
VALUE X,LINENUM;% 00000105
REAL X; INTEGER LINENUM;% 00000106
BEGIN% 00000107
IF ABS(X)>2.0769187@34 THEN RUNERR(4,LINENUM);% 00000108
SQR:=X|X;% 00000109
END OF SQR;% 00000110
% 00000111
BOOLEAN PROCEDURE INCL1(A,B); %*** IS THE SET "A" INCLUDED 00000112
VALUE A,B; REAL A,B; %*** IN THE SET "B". 00000113
INCL1:=REAL(BOOLEAN(A) AND NOT BOOLEAN(B))=0;% 00000114
% 00000115
BOOLEAN PROCEDURE INCL2(A,B); %*** IS THE SET "B" INCLUDED 00000116
VALUE A,B; REAL A,B; %*** IN THE SET "A". 00000117
INCL2:=REAL(BOOLEAN(B) AND NOT BOOLEAN(A))=0;% 00000118
% 00000119
BOOLEAN PROCEDURE INTST(A,B); %*** IS THE VALUE "A" AN ELEMENT00000120
VALUE A,B; REAL A,B; %*** IN THE SET "B". 00000121
INTST:=IF A<0 OR B>38 THEN FALSE ELSE 0&B[0:38-A:1]=1;% 00000122
% 00000123
PROCEDURE NEW(P,SIZE);% 00000124
VALUE SIZE; REAL P; INTEGER SIZE;% 00000125
BEGIN% 00000126
P:=IF MEMPNT+SIZE>MEMSIZE THEN 0 ELSE MEMPNT;% 00000127
MEMPNT:=MEMPNT+SIZE;% 00000128
END OF NEW;% 00000129
% 00000130
PROCEDURE DISPOSE(P,SIZE);% 00000131
VALUE SIZE; REAL P; INTEGER SIZE;% 00000132
BEGIN% 00000133
END OF DISPOSE;% 00000134
% 00000135
PROCEDURE PACK(A,LLIM,ULIM,I,Z,LINENUM);% 00000136
VALUE LLIM,ULIM,I,LINENUM;% 00000137
ARRAY A[*]; ALPHA Z;% 00000138
INTEGER LLIM,ULIM,I,LINENUM;% 00000139
BEGIN;% 00000140
Z:=0;% 00000141
FOR T1:=0 STEP 1 UNTIL 6 DO% 00000142
Z:=A[CHECK(I+T1,LLIM,ULIM,LINENUM)] & Z [41:35:36];% 00000143
END;% 00000144
% 00000145
PROCEDURE UNPACK(Z,A,LLIM,ULIM,I,LINENUM);% 00000146
VALUE Z,LLIM,ULIM,I,LINENUM;% 00000147
ARRAY A[*]; ALPHA Z;% 00000148
INTEGER LLIM,ULIM,I,LINENUM;% 00000149
FOR T1:=0 STEP 1 UNTIL 6 DO% 00000150
A[CHECK(I+T1,LLIM,ULIM,LINENUM)]:= 0 & Z [5:41-6|T1:6];% 00000151
% 00000152
REAL PROCEDURE CONCAT(A,B,AS,BS,N,LINENUM);% 00000153
VALUE A,B,AS,BS,N,LINENUM;% 00000154
REAL A,B; INTEGER AS,BS,N,LINENUM;% 00000155
BEGIN% 00000156
IF AS<1 OR BS<1 OR N<0 OR AS+N>48 OR BS+N>48 THEN% 00000157
BEGIN% 00000158
WRITE(OUTPUT,CONCATERR,NUMDIGITS(AS),AS,NUMDIGITS(BS),% 00000159
BS,NUMDIGITS(N),N);% 00000160
RUNERR(0,LINENUM);% 00000161
END;% 00000162
CONCAT:=A & B [47-AS:47-BS:N];% 00000163
END OF CONCAT;% 00000164
% 00000165
BOOLEAN PROCEDURE BIT(N,LINENUM);% %*** SET BIT NO "N" IN A WORD. 00000166
VALUE N,LINENUM; INTEGER N,LINENUM;% 00000167
BIT:=BOOLEAN(0 & 1 [38-CHECK(N,0,38,LINENUM):0:1]);% 00000168
% 00000169
BOOLEAN PROCEDURE BITS(N1,N2,LINENUM); %*** SET BITS "N1".."N2". 00000170
VALUE N1,N2,LINENUM;% 00000171
INTEGER N1,N2,LINENUM;% 00000172
BITS:=BOOLEAN(0 & 3"7777777777777" [38-CHECK(N1,0,38,LINENUM):38:% 00000173
CHECK(N2,0,38,LINENUM)-N1+1]);% 00000174
% 00000175
PROCEDURE RLINE(F,BUF,INFO);% 00000176
FILE F; ARRAY BUF[0]; INTEGER INFO;% 00000177
BEGIN% 00000178
LABEL ENDFILE;% 00000179
INFO.EOLN:=0; INFO.BUFPNT:=1;% 00000180
READ(F,999,BUF[*]) [ENDFILE];% 00000181
REPLACE CHARPNT BY POINTER(BUF[*]) FOR 1;% 00000182
INFO.LASTCH:=CHAR[0];% 00000183
IF FALSE THEN% 00000184
BEGIN ENDFILE: INFO.ENDFOUND:=1;% 00000185
END;% 00000186
END OF RLINE;% 00000187
% 00000188
REAL PROCEDURE PREAD(F,BUF,INFO,MODE,LINENUM);% 00000189
VALUE MODE,LINENUM;% 00000190
FILE F; ARRAY BUF[0];% 00000191
INTEGER INFO,MODE,LINENUM;% 00000192
BEGIN% 00000193
DEFINE GETCHAR=% 00000194
BEGIN% 00000195
IF BOOLEAN(INFO.EOLN) THEN% 00000196
BEGIN% 00000197
RLINE(F,BUF,INFO); CH:=INFO.LASTCH;% 00000198
END ELSE% 00000199
IF INFO.BUFPNT=INFO.BUFSIZE THEN% 00000200
BEGIN CH:=" "; INFO.EOLN:=1 END ELSE% 00000201
BEGIN% 00000202
REPLACE CHARPNT BY POINTER(BUF[*])+INFO.BUFPNT FOR 1;% 00000203
CH:=CHAR[0]; INFO.BUFPNT:=INFO.BUFPNT+1;% 00000204
END END OF GETCHAR#;% 00000205
% 00000206
DEFINE READERR(ERRNUM)=% 00000207
BEGIN% 00000208
WRITE(OUTPUT,999,BUF[*]);% 00000209
WRITE(OUTPUT,ERRMARK,INFO.BUFPNT-1);% 00000210
RUNERR(ERRNUM,LINENUM);% 00000211
END READERR#;% 00000212
% 00000213
REAL RES; ALPHA CH;% 00000214
BOOLEAN NEGATIVE,NEGEXP; INTEGER POWER,EXP;% 00000215
LABEL OVERFLOW,RETURN;% 00000216
% 00000217
IF BOOLEAN(INFO.EOF) THEN RUNERR(1,LINENUM);% 00000218
IF BOOLEAN(INFO.ENDFOUND) THEN% 00000219
BEGIN% 00000220
INFO.EOF:=1; PREAD:=0;% 00000221
GO TO RETURN;% 00000222
END;% 00000223
IF MODE=1 THEN %*** MODE = CHAR *** 00000224
BEGIN% 00000225
PREAD:=INFO.LASTCH; GETCHAR; INFO.LASTCH:=CH;% 00000226
END ELSE% 00000227
BEGIN %*** MODE = REAL/INTEGER *** 00000228
CH:=INFO.LASTCH;% 00000229
WHILE CH=" " AND NOT BOOLEAN(INFO.ENDFOUND) DO GETCHAR;% 00000230
IF BOOLEAN(INFO.ENDFOUND) THEN% 00000231
BEGIN% 00000232
INFO.EOF:=1; PREAD:=0;% 00000233
GO TO RETURN;% 00000234
END;% 00000235
IF CH="+" OR CH="-" THEN BEGIN NEGATIVE:=CH="-"; GETCHAR END;% 00000236
IF CH>9 THEN READERR(3);% 00000237
RES:=CH; GETCHAR;% 00000238
WHILE CH{9 DO BEGIN RES:=10|RES+CH; GETCHAR END;% 00000239
IF MODE=3 THEN % MODE = REAL. 00000240
BEGIN% 00000241
IF CH="." THEN% 00000242
BEGIN% 00000243
GETCHAR; IF CH>9 THEN READERR(3);% 00000244
WHILE CH{9 DO BEGIN RES:=10|RES+CH;POWER:=POWER-1;GETCHAR END;00000245
END;% 00000246
IF CH="E" THEN% 00000247
BEGIN% 00000248
GETCHAR;% 00000249
IF CH="+" OR CH="-" THEN BEGIN NEGEXP:=CH="-"; GETCHAR END;% 00000250
IF CH>9 THEN READERR(3);% 00000251
WHILE CH{9 DO BEGIN EXP:=10|EXP+CH; GETCHAR END;% 00000252
IF NEGEXP THEN EXP:=-EXP;% 00000253
END;% 00000254
POWER:=POWER+EXP;% 00000255
REALOVERFLOW:=OVERFLOW; RES:=RES|10*POWER;% 00000256
IF FALSE THEN OVERFLOW: READERR(4);% 00000257
REALOVERFLOW:=0;% 00000258
END ELSE IF RES>MAXINT THEN READERR(4);% 00000259
PREAD:=IF NEGATIVE THEN -RES ELSE RES;% 00000260
INFO.LASTCH:=CH;% 00000261
END;% 00000262
RETURN:% 00000263
END OF PREAD;% 00000264
% 00000265
% 00000266
PROCEDURE WLINE(F,BUF,INFO); %*** PRINT A LINE.*** 00000267
FILE F; ARRAY BUF[0]; INTEGER INFO;% 00000268
BEGIN% 00000269
ALPHA CC;% 00000270
IF BOOLEAN(INFO.OUTP) THEN% 00000271
BEGIN% 00000272
REPLACE CHARPNT BY POINTER(BUF[*]) FOR 1; CC:=CHAR[0];% 00000273
REPLACE POINTER(BUF[*]) BY " ";% 00000274
IF CC=" " THEN WRITE(OUTPUT,999,BUF[*]) ELSE% 00000275
IF CC="+" THEN WRITE(OUTPUT[NO],999,BUF[*]) ELSE% 00000276
BEGIN% 00000277
IF CC="0" THEN WRITE(OUTPUT) ELSE% 00000278
IF CC="-" THEN WRITE(OUTPUT[DBL]) ELSE% 00000279
IF CC="1" THEN WRITE(OUTPUT[PAGE]) ELSE% 00000280
WRITE(OUTPUT,ILLEGALCC,CC);% 00000281
WRITE(OUTPUT,999,BUF[*]);% 00000282
END;% 00000283
END ELSE WRITE(F,999,BUF[*]);% 00000284
REPLACE POINTER(BUF[*]) BY " " FOR INFO.BUFSIZE;% 00000285
INFO.BUFPNT:=0;% 00000286
END OF WLINE;% 00000287
% 00000288
% 00000289
PROCEDURE CHFIL(F);% 00000290
FILE F;% 00000291
BEGIN% 00000292
ARRAY A[0:6];% 00000293
SEARCH(F,A[*]);% 00000294
IF A[0]=-1 THEN% 00000295
BEGIN% 00000296
F.AREAS := 20;% 00000297
F.AREASIZE := 300;% 00000298
END;% 00000299
END OF CHFIL;% 00000300
% 00000301
% 00000302
PROCEDURE WALFA(F,BUF,INFO,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,ALENG,00000303
LINENUM);% 00000304
VALUE A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,ALENG,LINENUM;% 00000305
FILE F; ARRAY BUF[0]; INTEGER INFO,ALENG,LINENUM;% 00000306
ALPHA A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12;% 00000307
BEGIN% 00000308
ALPHA A; POINTER PNT;% 00000309
LABEL EXIT;% 00000310
IF NOT BOOLEAN(INFO.EOF) THEN RUNERR(2,LINENUM);% 00000311
IF INFO.BUFPNT+ALENG}INFO.BUFSIZE THEN WLINE(F,BUF,INFO);% 00000312
PNT:=POINTER(BUF[*])+INFO.BUFPNT;% 00000313
INFO.BUFPNT:=INFO.BUFPNT+ALENG;% 00000314
FOR A:=A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12 DO% 00000315
BEGIN% 00000316
TEXT[0]:=A;% 00000317
REPLACE PNT:PNT BY TEXTPNT FOR MIN(ALENG,7);% 00000318
ALENG:=ALENG-7; IF ALENG{0 THEN GO TO EXIT;% 00000319
END;% 00000320
EXIT:% 00000321
END OF WALFA;% 00000322
% 00000323
% 00000324
PROCEDURE PWRITE(F,BUF,INFO,E,EMODE,M,N,LINENUM);% 00000325
VALUE E,EMODE,M,N,LINENUM;% 00000326
FILE F; ARRAY BUF[0]; REAL E;% 00000327
INTEGER INFO,EMODE,M,N,LINENUM;% 00000328
BEGIN% 00000329
INTEGER NCHARS,NEXP,I; POINTER CPNT;% 00000330
DEFINE PUTCHAR(C)= % PUTS A CHARACTER INTO TEMPTEXT00000331
BEGIN CHAR[0]:=C; NCHARS:=NCHARS+1;% 00000332
REPLACE CPNT:CPNT BY CHARPNT FOR 1;% 00000333
END#;% 00000334
% 00000335
PROCEDURE PUTINT(N); % PUTS AN INTEGER INTO TEMPTEXT 00000336
VALUE N; INTEGER N; % WITH ZERO SUPPRESSION. 00000337
IF N{9 THEN PUTCHAR(N) ELSE% 00000338
BEGIN PUTINT(N DIV 10); PUTCHAR(ENTIER(N MOD 10)) END;% 00000339
% 00000340
CPNT:=POINTER(TEMPTEXT[*]);% 00000341
IF NOT BOOLEAN(INFO.EOF) THEN RUNERR(2,LINENUM);% 00000342
IF EMODE=1 THEN %*** MODE = INTEGER *** 00000343
BEGIN% 00000344
IF E<0 THEN BEGIN PUTCHAR("-"); E:=-E END;% 00000345
PUTINT(E);% 00000346
END ELSE% 00000347
IF EMODE=2 THEN %*** MODE = REAL *** 00000348
BEGIN% 00000349
PUTCHAR(" ");% 00000350
IF E<0 THEN BEGIN PUTCHAR("-"); E:=-E END;% 00000351
IF E>MAXINT OR N<0 THEN % FLOATING-POINT. 00000352
BEGIN% 00000353
IF E>0 THEN% 00000354
BEGIN% 00000355
WHILE E<1 DO BEGIN NEXP:=NEXP-1; E:=10|E END;% 00000356
WHILE E}10 DO BEGIN NEXP:=NEXP+1; E:=E/10 END;% 00000357
END;% 00000358
I:=MAX(M-8,1);% 00000359
E:=E+0.5|10*(-I);% 00000360
IF E GEQ 10 THEN BEGIN NEXP:=NEXP+1; E:=E/10 END;% 00000361
PUTCHAR(ENTIER(E)); E:=E-ENTIER(E); PUTCHAR(".");% 00000362
DO BEGIN% 00000363
E:=10|E; PUTCHAR(ENTIER(E));% 00000364
E:=E-ENTIER(E); I:=I-1;% 00000365
END UNTIL I{0;% 00000366
PUTCHAR("E");% 00000367
IF NEXP<0 THEN BEGIN PUTCHAR("-"); NEXP:=-NEXP END% 00000368
ELSE PUTCHAR("+");% 00000369
PUTCHAR(NEXP DIV 10); PUTCHAR(ENTIER(NEXP MOD 10));% 00000370
END ELSE% 00000371
BEGIN % FIXED-POINT. 00000372
E:=E+0.5|10*(-N);% 00000373
PUTINT(ENTIER(E)); PUTCHAR("."); E:=E-ENTIER(E);% 00000374
IF N>150 THEN RUNERR(6,LINENUM);% 00000375
FOR I:=1 STEP 1 UNTIL N DO% 00000376
BEGIN E:=10|E; PUTCHAR(ENTIER(E));% 00000377
E:=E-ENTIER(E);% 00000378
END END END ELSE% 00000379
IF EMODE=3 THEN %*** MODE = BOOLEAN *** 00000380
BEGIN% 00000381
IF E<0.5 THEN REPLACE CPNT BY "FALSE" ELSE REPLACE CPNT BY "TRUE";00000382
NCHARS:=IF E<0.5 THEN 5 ELSE 4;% 00000383
END ELSE% 00000384
IF EMODE=5 THEN %*** MODE = ALFA *** 00000385
BEGIN% 00000386
TEXT[0]:=E; NCHARS:=MIN(M,7);% 00000387
REPLACE CPNT:CPNT BY TEXTPNT FOR 7;% 00000388
END ELSE% 00000389
BEGIN %*** MODE = CHAR *** 00000390
PUTCHAR(E);% 00000391
END;% 00000392
IF NCHARS>M THEN M:=NCHARS;% 00000393
IF INFO.BUFPNT+M>INFO.BUFSIZE THEN WLINE(F,BUF,INFO);% 00000394
IF M>INFO.BUFSIZE THEN RUNERR(6,LINENUM);% 00000395
REPLACE POINTER(BUF[*])+(INFO.BUFPNT+M-NCHARS) BY% 00000396
POINTER(TEMPTEXT[*]) FOR NCHARS;% 00000397
INFO.BUFPNT:=INFO.BUFPNT+M;% 00000398
END OF PWRITE;% 00000399
% 00000400
% 00000401
PROCEDURE PUT(F,BUF,INFO,LINENUM);% 00000402
VALUE LINENUM;% 00000403
FILE F; ARRAY BUF[*];% 00000404
INTEGER INFO,LINENUM;% 00000405
BEGIN% 00000406
IF INFO.BUFSIZE=0 THEN% 00000407
BEGIN% 00000408
IF NOT BOOLEAN(INFO.EOF) THEN RUNERR(2,LINENUM);% 00000409
WRITE(F,1023,BUF[*]);% 00000410
END ELSE PWRITE(F,BUF,INFO,INFO.LASTCH,4,1,1,LINENUM);% 00000411
END OF PUT;% 00000412
% 00000413
% 00000414
PROCEDURE GET(F,BUF,INFO,LINENUM);% 00000415
VALUE LINENUM;% 00000416
FILE F; ARRAY BUF[*];% 00000417
INTEGER INFO,LINENUM;% 00000418
BEGIN% 00000419
ALPHA X; LABEL ENDFILE;% 00000420
IF INFO.BUFSIZE=0 THEN% 00000421
BEGIN% 00000422
IF BOOLEAN(INFO.EOF) THEN RUNERR(1,LINENUM);% 00000423
READ(F,1023,BUF[*]) [ENDFILE];% 00000424
IF FALSE THEN ENDFILE: INFO.EOF:=1;% 00000425
END ELSE X:=PREAD(F,BUF,INFO,1,LINENUM);% 00000426
END OF GET;% 00000427
% 00000428
% 00000429
PROCEDURE PPAGE(F,BUF,INFO,LINENUM);% 00000430
VALUE LINENUM;% 00000431
FILE F; ARRAY BUF[*];% 00000432
INTEGER INFO,LINENUM;% 00000433
BEGIN% 00000434
IF NOT BOOLEAN(INFO.EOF) THEN RUNERR(2,LINENUM);% 00000435
WRITE(F[PAGE]);% 00000436
END OF PPAGE;% 00000437
% 00000438
% 00000439
PROCEDURE RESET(F,BUF,INFO,LINENUM);% 00000440
VALUE LINENUM;% 00000441
FILE F; ARRAY BUF[*];% 00000442
INTEGER INFO,LINENUM;% 00000443
BEGIN% 00000444
IF BOOLEAN(INFO.INP) OR BOOLEAN(INFO.OUTP) THEN RUNERR(5,LINENUM);% 00000445
REWIND(F); INFO.EOF:=0; INFO.EOLN:=0; INFO.BUFPNT:=0;% 00000446
INFO.ENDFOUND:=0;% 00000447
IF INFO.BUFSIZE=0 THEN GET(F,BUF,INFO,LINENUM)% 00000448
ELSE RLINE(F,BUF,INFO);% 00000449
END OF RESET;% 00000450
% 00000451
PROCEDURE REWRITE(F,BUF,INFO,LINENUM);% 00000452
VALUE LINENUM;% 00000453
FILE F; ARRAY BUF[*];% 00000454
INTEGER INFO,LINENUM;% 00000455
BEGIN% 00000456
IF BOOLEAN(INFO.INP) OR BOOLEAN(INFO.OUTP) THEN RUNERR(5,LINENUM);% 00000457
REWIND(F); INFO.EOF:=1; INFO.BUFPNT:=0; INFO.ENDFOUND:=0;% 00000458
IF INFO.BUFSIZE>0 THEN% 00000459
REPLACE POINTER(BUF[*]) BY " " FOR INFO.BUFSIZE;% 00000460
END OF REWRITE;% 00000461
% 00000462
% 00000463
PROCEDURE INIT(INPUTDECL);% 00000464
VALUE INPUTDECL;% 00000465
BOOLEAN INPUTDECL;% 00000466
BEGIN% 00000467
MEMPNT:=1;% 00000468
CHARPNT:=POINTER(CHAR[*])+7; TEXTPNT:=POINTER(TEXT[*])+1;% 00000469
T:=0; T.BUFSIZE:=80; T.BUFPNT:=80; T.EOLN:=1; T.INP:=1;% 00000470
I00603:=T; IF INPUTDECL THEN RLINE(INPUT,V00603,I00603);% 00000471
T:=0; T.BUFSIZE:=132; T.EOLN:=1; T.OUTP:=1; T.EOF:=1;% 00000472
I00742:=T;% 00000473
REPLACE POINTER(V00742[*]) BY " " FOR 17 WORDS;% 00000474
END OF INIT;% 00000475