1
0
mirror of https://github.com/retro-software/B5500-software.git synced 2026-03-02 17:44:40 +00:00
Files
Paul Kimpel 2c72f7fd1d Commit CUBE Library version 13 of February 1972.
1. Commit library tape images, directories, and extracted text files.
2. Commit additional utilities under Unisys-Emode-Tools.
2018-05-27 11:24:23 -07:00

1986 lines
157 KiB
Plaintext

BEGIN % PROGRAM SUPER REPORT - A GENERAL REPORT WRITER 00000100
% BY RON JORGENSEN YOUNG & RUBICAM INC. 00000200
COMMENT THE CUBE LIBRARY NUMBER IS S000002. THE PROGRAM NAME IS 00000300
"SUPER/REPORT". THIS VERSION DATED 5/14/67; 00000400
COMMENT FILE CARDSIN MUST BE LABEL EQUATED TO TAPE EITHER WHEN 00000500
COMPILING OR EXECUTING ; 00000600
DEFINE PLUGMAX = 20 #, CALCMAX = 5 # ; 00000700
DEFINE DEVELOPEARRAYMAX = 30 # ; 00000800
DEFINE IMPDEVMAX = 12 # ; 00000900
DEFINE THRU = STEP 1 UNTIL # ; 00001000
FILE PTR 4 (2,15 ) ; 00001100
BOOLEAN LISTING, RECORDTOTALING, DEVELOPING, DEVTOTALING, 00001200
BREAKING, CALCULATING, TOTALING, TOPTITLEXISTS, 00001300
BOMTITLEXISTS, COLUMNHEADINGS ; 00001400
REAL INDENT ; 00001500
INTEGER NUMTOPTITLES, NUMWDSPEREC, NUMWDSPERBLK, NUMHDREC, NUMCTL,00001600
I, J, K, NUMHEDLINES, BOMTITLELINECT, NUMBOMTITLES, 00001700
NUMRECTOTLFLDS, NUMDEVTOTLFLDS, NUMLINEFLDS, NUMTOTFLDS, 00001800
NUMCTR, PGBRK, LINEMAX, DBLBRKMAX, DBLCTLMAX ; 00001900
INTEGER ARRAY ADDRECKEY8[1:100 , 0:2] , 00002000
ADDEVKEY8 [1:20 , 0:2] ; 00002100
BOOLEAN ARRAY ISDEVELOPE [0:PLUGMAX], 00002200
ISCALC [0:CALCMAX]; 00002300
ARRAY CTLID8[0:35 ], 00002400
TOTLINEKEY8[0:120 ] , 00002500
DATERAY [0:2] , 00002600
QUOTARRAY[0:14], 00002700
TOTALQUOT[0:14], 00002800
TOPTITLERAY8[1:25 , 0:10] , 00002900
BOMTITLERAY8[1:25 , 0:10] , 00003000
SQUEEZE8[0: 140 ], 00003100
KEYARRAY8[1:15 ], 00003200
FIELDKEY8[0: 120 ], 00003300
COLUMNHEADS8[1:10 , 0:19 ] ; 00003400
FORMAT T (X27,11A6 / ) , 00003500
H (20A6) ; 00003600
LABEL ENDJOB ; 00003700
%-----------------------------------------------------------------------00003800
STREAM PROCEDURE MOVEWORDS (FROM, TU, NUMWORDS ) ; 00003900
VALUE NUMWORDS ; 00004000
BEGIN 00004100
SI ~ FROM ; 00004200
DI ~ TU ; 00004300
DS ~ NUMWORDS WDS ; 00004400
END OF MOVEWORDS PROCEDURE ; 00004500
%-----------------------------------------------------------------------00004600
INTEGER STREAM PROCEDURE COMPARE16CHAR (FIELDNAME, SQUEEZE, NUMCTR ); 00004700
VALUE NUMCTR ; 00004800
BEGIN 00004900
LABEL HIT ; 00005000
DI ~ SQUEEZE ; 00005100
TALLY ~ 1 ; 00005200
NUMCTR(SI ~ FIELDNAME ; 00005300
IF 16 SC = DC 00005400
THEN JUMP OUT TO HIT 00005500
ELSE TALLY ~ TALLY + 1 ) ; 00005600
TALLY ~ 63 ; % INVALID FIELD NAME SETS INVALID INDEX00005700
HIT : COMPARE16CHAR ~ TALLY ; 00005800
END OF PROCEDURE COMPARE16CHAR ; 00005900
%-----------------------------------------------------------------------00006000
BEGIN 00006100
COMMENT THE PRE-EDIT BLOCK READS AND INTERPRETS THE INPUT PARAMETERS ; 00006200
FILE IN CARDSIN DISK SERIAL (2, 10, 150 ) ; 00006300
FILE IN DICTION DISK SERIAL (2, 3, 90); 00006400
DEFINE SCANIT = SCAN (CARDSIN, QC, TYPE, STRING ) # , 00006500
IT = STRING [0] # ; 00006600
ARRAY STRING [0:19] , 00006700
FILEFIELD [0:2] , 00006800
READRAY [0:9] , 00006900
PLUGDICT [0:PLUGMAX, 0:6 ], 00007000
CALCDICT [0:CALCMAX, 0:6 ], 00007100
IMPLYDEVELOPES [0:IMPDEVMAX, 0:2 ] ; 00007200
REAL NAME ; 00007300
INTEGER PLUGNO, TYPE, CHARCT, S, WHERE, NUMERR, SKIPCHR, 00007400
WHICHONE, A,B,C, IFNUM, IFDEC, DIGIT, NUMDEC, SPASE, 00007500
TIPE, QUOTCHR, TQCHR, LINECHR, TOTLCHR ; 00007600
BOOLEAN QC, TIPE2 ; 00007700
FORMAT 00007800
F (2A6 ) , 00007900
F1 (X16, A1, I2, A3 ), 00008000
F2 (X16, A1, I2, 4A1), 00008100
F3 (X16, A1, I2, I3,A1 ), 00008200
F4 ("NUMBER OF ERRORS DETECTED = ", I3 ) , 00008300
F5 (A8, 2A6, A4 ), 00008400
F6 (I4, X3, 2A6, A4 ), 00008500
F7 (I12), 00008600
F8 (X19, 3A1 ), 00008700
D ("00",A2,"/",A2,"/00",A2," 00DATE ") ; 00008800
LABEL TOTALS, EOF ; 00008900
COMMENT SCAN, EDITNEW, SPLICEARRAY, AND CALENDAR ARE CALLED HERE FROM 00009000
SUBLIBRARY. SCAN IS MODIFIED TO ACCEPT HYPHENS IN ALPHAMERICS ;00009100
ALPHA PROCEDURE YRDAYTONORM (A); 00009200
VALUE A; ALPHA A; 00009300
COMMENT A IS OF FORM YYDDD I.E. SAME FORM AS TIME(0). 00009400
YRDAYTONORM WILL BE IN FORMAT 312 REPRESENTING YR, MO, DA; 00009500
BEGIN INTEGER YR,MO,DAY, I; 00009600
DEFINE LEAPYEAR = REAL(BOOLEAN(YR) AND BOOLEAN(3)) = 0#; 00009700
ALPHA ARRAY AL[0:0], AT[0:0] ; 00009800
FORMAT 00009900
F1("00",3I2), 00010000
F2 (X3,I2,I3); 00010100
INTEGER ARRAY MONTHCODE [1:12]; 00010200
FILL MONTHCODE[*] WITH 0,31,59,90,120,151,181,212,243,273,304,334; 00010300
AL[0]~A; READ (AL[*],F2,YR, DAY); 00010400
IF LEAPYEAR AND DAY = 60 THEN 00010500
BEGIN MO ~ 2; DAY~29 END ELSE BEGIN 00010600
IF LEAPYEAR AND DAY > 60 THEN DAY~ DAY-1; 00010700
MO ~13; DO MO~MO-1 UNTIL DAY>MONTHCODE [MO] ; 00010800
DAY~ DAY-MONTHCODE[MO] END; 00010900
WRITE(AT[*],F1,YR,MO,DAY); 00011000
YRDAYTONORM ~ AT[0]; 00011100
END YRDAYTONORM; 00011200
%***********************************************************************00011300
STREAM PROCEDURE EDITNEW (INARRAY, OUTARRAY, QS ) ; 00011400
VALUE QS ; 00011500
BEGIN 00011600
COMMENT EDITNEW SCANS A FREE FIELD RECORD (INARRAY) THEN 00011700
IDENTIFIES AND STORES DISTINCT ENTITIES IN 2 WORD 00011800
COUPLETS IN OUTARRAY. 00011900
IF THE INPUT PARAMETER QS HAS BEEN SET FALSE THEN 00012000
QUOTE MARKS WILL BE REGARDED AS DELIMETERS TO QUOTE 00012100
STRINGS. 00012200
IF QS IS TRUE THEN QUOTE MARKS ARE REGARDED AS ANY 00012300
OTHER SPECIAL CHARACTER. 00012400
INARRAY IS A STRING OF CHARACTERS (MAXIMUM 80) ENDING 00012500
WITH AN ARROW. 00012600
OUTARRAY IS AN ARRAY OF 2 WORD COUPLETS. 00012700
IF A QUOTE STRING OR ALPHANUMERIC EXCEEDS 12 CHARACTERS 00012800
THEN AN EXTRA COUPLET(S) IS FORMED TO CONTAIN THE EXCESS 00012900
CHARACTERS. 00013000
OUT ARRAY WILL NOT EXCEED 160 WORDS. 00013100
THE TYPES OF PHRASES RECOGNIZED ARE 00013200
- ANY SPECIAL CHARACTER 00013300
- ALPHANUMERICS OF ANY LENGTH CONTAINED ON A SINGLE RECORD 00013400
- ANY STRING IN QUOTES (IF PERAMETER QS HAS BEEN SET TO FALSE) 00013500
THE CHARACTER " IS PERMISSABLE AS THE FIRST CHARACTER IN A QUOTE. 00013600
- UNSIGNED INTEGERS UP TO 8 DIGITS 00013700
INTEGERS CONTAINING MORE THAN 8 DIGITS ARE SPLIT IN TWO BY THE HARDWARE,00013800
E.G., 987654321 BECOMES 9 87654321, REQUIRING 2 COUPLETS IN OUTARRAY. 00013900
CONTENTS OF OUTARRAY COUPLET ******* 00014000
TYPE OF CODE CODE PHRASE * 00014100
PHRASE COMPARE WORD 1 WORD 2 * 00014200
* 00014300
UNSIGNED INTEGER WORD1 = 0 0 INTEGER PHRASE * 00014400
BLANKS WORD1 = 2 2 6 BLANKS * 00014500
SPECIAL CHAR WORD1 = 3 3 SPEC CHAR * 00014600
ARROW WORD1 = 4 4 ARROW * 00014700
ALPHANUMERIC WORD1 > 4 PHRASE PHRASE (CONT) * 00014800
QUOTE STRING WORD1 < 0 PHRASE PHRASE (CONT) * 00014900
PHRASE TYPES INTEGER, SPECIAL CHAR, AND ARROW, ARE RIGHT JUSTIFIED IN 00015000
WORD 2. ALPHANUMERIC AND QUOTE PHRASES ARE LEFT JUSTIFIED IN THE 00015100
LAST 6 CHARACTERS OF WORDS 1 AND 2. 00015200
WORD 1 CONTAINS THE CODE IDENTIFYING THE TYPE OF PHRASE. 00015300
THE TABLE ABOVE SHOWS HOW WORD 1 MAY BE TESTED, IN WORD MODE, TO 00015400
IDENTIFY THE TYPE OF PHRASE CONTAINED IN THE COUPLET. 00015500
BITS 3-8 ( 6 BITS ) OF WORD 1 CONTAIN A (BINARY) COUNT OF CHARACTERS 00015600
IN THE PHRASE. THIS SERVES THREE PURPOSES-- 00015700
-BLANKS AT THE END OF A QUOTE WHICH ARE PART OF THE QUOTE MAY BE 00015800
DISTINGUISHED FROM FILLER BLANKS. 00015900
-INTEGERS MAY BE DISTINGUISHED FROM SPLIT INTEGERS. 00016000
-THE COUNT GIVES THE NUMBER OF DECIMAL PLACES WHEN THE INTEGER FOLLOWS 00016100
A PERIOD. 00016200
THE COUNT MAY BE REFERENCED BY A PARTIAL WORD DESIGNATOR OF THIS FORM, 00016300
WORD1.[3:6] ; 00016400
LOCAL SAVESI, NEXTSI, NEXTDI, CHARCT, R1, R2, R3, R4, 00016500
BLANKS, IFQUOTE, IFMIDQUOTE, IFMIDALFA ; 00016600
LABEL PHRASE, COUNT, ALFATEST, QUOTE, UNQUOTE, 00016700
BLANK, SPECIALCHAR, ARRO, MIDQUOTE , 00016800
SWIT, MOVEALFA, ARROW, CH1, CH2, CH3, CH4, CH5, 00016900
CH6, CH7, CH8, CH9, CH10, CH11, CH12 ; 00017000
DI ~ LOC BLANKS ; 00017100
DS ~ 6 LIT " " ; 00017200
DI ~ INARRAY ; 00017300
2 (DI ~ DI +40 ) ; 00017400
DS ~ LIT "~" ; 00017500
SI ~ INARRAY ; 00017600
NEXTSI ~ SI ; 00017700
DI ~ OUTARRAY ; 00017800
NEXTDI ~ DI ; 00017900
PHRASE : SI ~ NEXTSI ; 00018000
SAVESI ~ SI ; 00018100
IFMIDQUOTE (JUMP OUT TO MIDQUOTE ) ; 00018200
IF SC = " " THEN GO TO BLANK ; 00018300
IF SC = ALPHA THEN GO TO ALFATEST ; 00018400
IFMIDALFA (JUMP OUT TO ALFATEST) ; 00018500
IF SC = "~" THEN GO TO ARROW ; 00018600
IF SC = """ THEN GO TO QUOTE ; 00018700
SPECIALCHAR : 00018800
DI ~ NEXTDI ; 00018900
DS ~ 7 LIT "0" ; DS ~ LIT "3" ; % FILL WORD 1 00019000
DS ~ 7 LIT "0" ; DS ~ CHR ; % FILL WORD 2 00019100
NEXTSI ~ SI ; NEXTDI ~ DI ; 00019200
GO TO PHRASE ; 00019300
BLANK : SI ~ SI +1 ; 00019400
2 (40 (IF SC ! " " THEN JUMP OUT ELSE SI ~ SI +1 ) ) ; 00019500
NEXTSI ~ SI ; 00019600
DI ~ NEXTDI ; 00019700
DS ~ 7 LIT "0" ; 00019800
DS ~ LIT "2" ; 00019900
DS ~ 2 LIT "0" ; 00020000
DS ~ 6 LIT " " ; 00020100
NEXTDI ~ DI ; 00020200
GO TO PHRASE ; 00020300
ALFATEST: TALLY ~ 1 ; % BEGIN TO COUNT ALPHANUMERIC CHAR 00020400
SI ~ SI +1 ; 00020500
11(IF SC = ALPHA THEN BEGIN TALLY ~ TALLY +1 ; 00020600
SI ~ SI + 1 END 00020700
ELSE IF SC = "-" THEN BEGIN TALLY ~ TALLY +1; SI ~ SI +1; END 00020800
ELSE JUMP OUT ) ; 00020900
NEXTSI ~ SI ; 00021000
CHARCT ~ TALLY ; 00021100
SI ~ SAVESI ; 00021200
IFMIDALFA (JUMP OUT TO SWIT ) ; 00021300
CHARCT (IF SC { "Z" THEN JUMP OUT TO SWIT 00021400
ELSE SI ~ SI + 1 ) ; 00021500
% INTEGER PHRASE 00021600
DI ~ NEXTDI ; 00021700
DS ~ 3 RESET ; 00021800
SI ~ LOC CHARCT ; SI ~ SI +7 ; 00021900
6 ( IF SB THEN DS ~ SET ELSE DS ~ RESET ; SKIP SB ) ; 00022000
DS ~ 3 RESET ; 00022100
DS ~ 6 LIT "0" ; 00022200
SI ~ SAVESI ; 00022300
DS ~ CHARCT OCT ; 00022400
NEXTSI ~ SI ; NEXTDI ~ DI ; 00022500
GO TO PHRASE ; 00022600
QUOTE: 00022700
QS (JUMP OUT TO SPECIALCHAR ) ; 00022800
SI ~ SI +1 ; 00022900
SAVESI ~ SI ; 00023000
IF SC = "~" THEN GO TO ARROW ; 00023100
MIDQUOTE : TALLY ~ 0 ; 00023200
IFMIDQUOTE ~TALLY ; 00023300
TALLY ~ 1 ; 00023400
SI ~ SI +1 ; 00023500
12 (IF SC = "~" THEN JUMP OUT TO ARRO ; 00023600
IF SC = """ THEN JUMP OUT TO UNQUOTE ; 00023700
SI ~ SI + 1 ; 00023800
TALLY ~ TALLY + 1 ) ; 00023900
TALLY ~ 1 ; 00024000
IFMIDQUOTE ~ TALLY ; 00024100
TALLY ~ 12 ; 00024200
SI~ SI -2 ; 00024300
UNQUOTE : SI ~ SI +1 ; 00024400
ARRO : NEXTSI ~ SI ; 00024500
CHARCT ~ TALLY ; 00024600
TALLY ~ 1 ; IFQUOTE ~ TALLY ; 00024700
% SIMULATED BOOLEAN "IFQUOTE" ~ TRUE 00024800
SWIT: CI ~ CI + CHARCT ; 00024900
GO TO CH1 ; 00025000
GO TO CH1 ; 00025100
GO TO CH2 ; 00025200
GO TO CH3 ; 00025300
GO TO CH4 ; 00025400
GO TO CH5 ; 00025500
GO TO CH6 ; 00025600
GO TO CH7 ; 00025700
GO TO CH8 ; 00025800
GO TO CH9 ; 00025900
GO TO CH10 ; 00026000
GO TO CH11 ; 00026100
GO TO CH12 ; 00026200
COMMENT SUBROUTINE AT CHI ASSIGNS VALUES TO REPEAT 00026300
FACTORS (R1,R2,R3,R4) CORRESPONDING TO 00026400
CHARCT = 1. THESE REPEAT FACTORS ARE USED TO 00026500
LOAD THE OUTPUT COUPLET WITH CHARACTERS AND 00026600
BLANKS ; 00026700
CH1 : TALLY ~ 1 ; R1 ~ TALLY ; 00026800
TALLY ~ 5 ; R2 ~ TALLY ; 00026900
TALLY ~ 0 ; R3 ~ TALLY ; 00027000
TALLY ~ 6 ; R4 ~ TALLY ; 00027100
GO TO MOVEALFA ; 00027200
CH2 : TALLY ~ 2 ; R1 ~ TALLY ; 00027300
TALLY ~ 4 ; R2 ~ TALLY ; 00027400
TALLY ~ 0 ; R3 ~ TALLY ; 00027500
TALLY ~ 6 ; R4 ~ TALLY ; 00027600
GO TO MOVEALFA ; 00027700
CH3 : TALLY ~ 3 ; R1 ~ TALLY ; 00027800
TALLY ~ 3 ; R2 ~ TALLY ; 00027900
TALLY ~ 0 ; R3 ~ TALLY ; 00028000
TALLY ~ 6 ; R4 ~ TALLY ; 00028100
GO TO MOVEALFA ; 00028200
CH4 : TALLY ~ 4 ; R1 ~ TALLY ; 00028300
TALLY ~ 2 ; R2 ~ TALLY ; 00028400
TALLY ~ 0 ; R3 ~ TALLY ; 00028500
TALLY ~ 6 ; R4 ~ TALLY ; 00028600
GO TO MOVEALFA ; 00028700
CH5 : TALLY ~ 5 ; R1 ~ TALLY ; 00028800
TALLY ~ 1 ; R2 ~ TALLY ; 00028900
TALLY ~ 0 ; R3 ~ TALLY ; 00029000
TALLY ~ 6 ; R4 ~ TALLY ; 00029100
GO TO MOVEALFA ; 00029200
CH6 : TALLY ~ 6 ; R1 ~ TALLY ; 00029300
TALLY ~ 0 ; R2 ~ TALLY ; 00029400
TALLY ~ 0 ; R3 ~ TALLY ; 00029500
TALLY ~ 6 ; R4 ~ TALLY ; 00029600
GO TO MOVEALFA ; 00029700
CH7 : TALLY ~ 6 ; R1 ~ TALLY ; 00029800
TALLY ~ 0 ; R2 ~ TALLY ; 00029900
TALLY ~ 1 ; R3 ~ TALLY ; 00030000
TALLY ~ 5 ; R4 ~ TALLY ; 00030100
GO TO MOVEALFA ; 00030200
CH8 : TALLY ~ 6 ; R1 ~ TALLY ; 00030300
TALLY ~ 0 ; R2 ~ TALLY ; 00030400
TALLY ~ 2 ; R3 ~ TALLY ; 00030500
TALLY ~ 4 ; R4 ~ TALLY ; 00030600
GO TO MOVEALFA ; 00030700
CH9 : TALLY ~ 6 ; R1 ~ TALLY ; 00030800
TALLY ~ 0 ; R2 ~ TALLY ; 00030900
TALLY ~ 3 ; R3 ~ TALLY ; 00031000
TALLY ~ 3 ; R4 ~ TALLY ; 00031100
GO TO MOVEALFA ; 00031200
CH10 : TALLY ~ 6 ; R1 ~ TALLY ; 00031300
TALLY ~ 0 ; R2 ~ TALLY ; 00031400
TALLY ~ 4 ; R3 ~ TALLY ; 00031500
TALLY ~ 2 ; R4 ~ TALLY ; 00031600
GO TO MOVEALFA ; 00031700
CH11 : TALLY ~ 6 ; R1 ~ TALLY ; 00031800
TALLY ~ 0 ; R2 ~ TALLY ; 00031900
TALLY ~ 5 ; R3 ~ TALLY ; 00032000
TALLY ~ 1 ; R4 ~ TALLY ; 00032100
GO TO MOVEALFA ; 00032200
CH12 : TALLY ~ 6 ; R1 ~ TALLY ; 00032300
TALLY ~ 0 ; R2 ~ TALLY ; 00032400
TALLY ~ 6 ; R3 ~ TALLY ; 00032500
TALLY ~ 0 ; R4 ~ TALLY ; 00032600
MOVEALFA: DI ~ NEXTDI ; 00032700
DS ~ RESET ; 00032800
SI ~ LOC IFQUOTE ; SI ~ SI +7 ; 00032900
TALLY ~ 0 ; 00033000
IF SC = "1" 00033100
THEN BEGIN DS ~ SET ; % QUOTE 00033200
IFQUOTE ~ TALLY 00033300
END 00033400
ELSE BEGIN DS ~ RESET; % ALPHA 00033500
SI ~ NEXTSI ; 00033600
IF SC = ALPHA 00033700
THEN BEGIN TALLY ~ 1 ; 00033800
IFMIDALFA ~ TALLY ; 00033900
END 00034000
ELSE IFMIDALFA ~ TALLY ; 00034100
END ; 00034200
SI ~ LOC CHARCT ; SI ~ SI +7 ; 00034300
DS ~ RESET ; 00034400
6 ( IF SB THEN DS ~ SET ELSE DS ~ RESET ; SKIP SB ) ; 00034500
DS ~ 3 RESET ; 00034600
SI ~ SAVESI ; 00034700
DS ~ R1 CHR ; 00034800
SI ~ LOC BLANKS ; 00034900
DS ~ R2 CHR ; 00035000
DS ~ 2 LIT "0" ; 00035100
SI ~ SAVESI ; 00035200
SI ~ SI + R1 ; 00035300
DS ~ R3 CHR ; 00035400
SI ~ LOC BLANKS ; 00035500
DS ~ R4 CHR ; 00035600
NEXTDI ~ DI ; 00035700
GO TO PHRASE ; 00035800
ARROW : DI ~ NEXTDI ; 00035900
DS ~ 7 LIT "0" ; 00036000
DS ~ LIT "4" ; 00036100
DS ~ 7 LIT "0" ; 00036200
DS ~ LIT "~" ; 00036300
END OF EDITNEW PROCEDURE ; 00036400
%***********************************************************************00036500
PROCEDURE SPLICEARRAY (RAY1, RAY2, CHARCT1, CHARCT2 ) ; 00036600
VALUE CHARCT1, CHARCT2 ; 00036700
ARRAY RAY1 [*], RAY2 [*] ; 00036800
INTEGER CHARCT1, CHARCT2 ; 00036900
BEGIN 00037000
COMMENT GLOBAL VARIABLES - NONE. 00037100
RAY1 AND RAY2 ARE ARRAYS IN WORD MODE. 00037200
SPLICEARRAY JOINS THE TWO ARRAYS TOGETHER, TO FORM A SINGLE 00037300
ARRAY IN WORD MODE. CHARCT1 AND CHARCT2 ARE THE NUMBER OF 00037400
CHARACTERS IN EACH ARRAY WHICH ARE TO BE USED IN FORMING THE 00037500
NEW ARRAY. THE NEW ARRAY IS LOCATED AT RAY1. ; 00037600
INTEGER WDS1, CHR1, FILL1, WDS2, CHR2, FINALCHR, FINALFILL ; 00037700
BOOLEAN IFEXTRAWORD ; 00037800
STREAM PROCEDURE TAGALONG (STRING, CUP, STRINGWDS, STRINGCHR, 00037900
STRINGFILL, CUPWDS, IFEXTRAWORD, 00038000
FINALCHR, FINALFILL ) ; 00038100
VALUE STRINGWDS, STRINGCHR, STRINGFILL, CUPWDS, 00038200
IFEXTRAWORD, FINALCHR, FINALFILL ; 00038300
BEGIN 00038400
COMMENT TAGALONG ALLOWS AN ARRAY (CUP) TO TAGALONG BEHIND 00038500
THE LEADING ARRAY (STRING) BY FILLING MISSING 00038600
CHARACTERS INTO THE LAST WORD OF THE LEADING ARRAY 00038700
WITH THE FIRST CHARACTERS OF THE TAGALONG ARRAY. 00038800
ALL THE FOLLOWING TAGALONG CHARACTERS ARE POSITIONED 00038900
TO FIT INTO THE WORD STRUCTURE OF THE LEADING ARRAY; 00039000
DI ~ STRING ; 00039100
STRINGWDS(DI ~ DI +8 ) ; 00039200
DI ~ DI +2 ; 00039300
DI ~ DI + STRINGCHR ; 00039400
SI ~ CUP ; 00039500
SI ~ SI +2 ; 00039600
CUPWDS(DS ~ STRINGFILL CHR ; 00039700
DS ~ 2 LIT "0" ; 00039800
DS ~ STRINGCHR CHR ; 00039900
SI ~ SI + 2 ) ; 00040000
IFEXTRAWORD(DS ~ STRINGFILL CHR ; DS ~ 2 LIT "0" ) ; 00040100
DS ~ FINALCHR CHR ; 00040200
FINALFILL(DS ~ LIT " " ) ; 00040300
END OF TAGALONG PROCEDURE ; 00040400
WDS1 ~ CHARCT1 DIV 6 ; 00040500
WDS2 ~ CHARCT2 DIV 6 ; 00040600
CHR1 ~ CHARCT1 MOD 6 ; 00040700
CHR2 ~ CHARCT2 MOD 6 ; 00040800
FILL1 ~ 6 - CHR1 ; 00040900
IF CHR2 > FILL1 00041000
THEN BEGIN IFEXTRAWORD ~ TRUE ; 00041100
FINALCHR ~ CHR2 - FILL1 ; 00041200
FINALFILL ~ 6 - FINALCHR ; 00041300
END 00041400
ELSE BEGIN FINALCHR ~ CHR2 ; 00041500
FINALFILL ~ FILL1 - CHR2 ; 00041600
END ; 00041700
IF FINALFILL = 6 00041800
THEN BEGIN FINALFILL ~ 0 ; 00041900
FINALCHR ~ 6 ; 00042000
WDS2 ~ WDS2 - 1 ; 00042100
IF WDS2 < 0 THEN WDS2 ~ FINALCHR ~ 0 ; 00042200
END ; 00042300
TAGALONG (RAY1, RAY2, WDS1, CHR1, FILL1, WDS2, 00042400
IFEXTRAWORD, FINALCHR, FINALFILL ) ; 00042500
END OF SPLICEARRAY PROCEDURE ; 00042600
%********************************************************************** 00042700
INTEGER PROCEDURE SCAN (INFILE, QC, TYPE, STRING ) ; 00042800
VALUE QC ; 00042900
BOOLEAN QC ; 00043000
FILE INFILE ; 00043100
INTEGER TYPE ; 00043200
ARRAY STRING [0] ; 00043300
BEGIN 00043400
COMMENT GLOBAL -- EDITNEW AND SPLICEARRAY PROCEDURES. 00043500
SCAN SUPPLIES THE NEXT ENTITY FROM A FILE "INFILE" TO 00043600
THE USER. 00043700
WHEN A RECORD IS FINISHED, SCAN WILL PRODUCE AN ARROW. 00043800
THE ENTITY IS PLACED IN THE ARRAY "STRING". THE ENTITY 00043900
IS PRECISELY IDENTIFIED BY THE VALUES WHICH THE PROCEDURE 00044000
ASSIGNS TO "SCAN" AND TO "TYPE". 00044100
ENTITY VALUE OF SCAN VALUE OF TYPE *** 00044200
END OF FILE = -9 UNDEFINED * 00044300
INTEGER = 0 = DIGIT COUNT * 00044400
REAL NUMBER = 1 UNDEFINED * 00044500
ARROW = 2 UNDEFINED * 00044600
SPECIAL CHARACTER = 3 IDENTIFIES CHARACTER00044700
ALPHANUMERIC 10 | CHARACTER COUNT = -1 * 00044800
QUOTE STRING 10 | CHARACTER COUNT = -2 *** 00044900
THE USER SPECIFIES HOW QUOTES ARE TO BE TREATED BY 00045000
ASSIGNING A VALUE OF TRUE OR FALSE TO THE PARAMETER "QC". 00045100
- TRUE : QUOTES ARE CHARACTERS 00045200
- FALSE: QUOTES ARE QUOTE STRING DELIMITERS 00045300
THE 4 FORMAL PARAMETERS ARE THE ONLY COMMUNICATION LINKS 00045400
BETWEEN THE PROCEDURE AND THE OUTER PROGRAM. 00045500
THE OUTPUT "STRING" MUST BE DECLARED AS A 20 WORD 00045600
ARRAY. IT WILL CONTAIN THE OUTPUT IN WORD MODE. NUMERIC 00045700
AND SPECIAL CHARACTER ENTITIES ARE PLACED INTO STRING 00045800
[0], RIGHT JUSTIFIED. 00045900
ALPHANUMERICS AND QUOTE STRINGS START IN STRING [0], AND 00046000
ARE LEFT JUSTIFIED IN THE RIGHTMOST 6 CHARACTERS. 00046100
THEREFORE, YOU MUST ALWAYS COMPARE TO A 6 CHARACTER QUOTE 00046200
WHEN TESTING OUTPUT FROM SCAN, 00046300
HOWEVER, IT IS NOW A SIMPLE MATTER TO TEST THE FIRST FEW 00046400
SIGNIFICENT CHARACTERS OF AN INPUT WORD AND IGNORE THE 00046500
REMAINDER. 00046600
ALPHANUMERICS ARE LIMITED TO 80 CHARACTERS ON ONE RECORD. 00046700
QUOTE STRINGS ARE LIMITED TO 120 CHARACTERS, 00046800
ON TWO CARDS ONLY. SUCCESSIVE 00046900
QUOTE STRINGS MUST BE SEPARATED BY AT LEAST ONE BLANK 00047000
SPACE. 00047100
A QUOTE STRING MAY BE INTERRUPTED BY AN ARROW OR 00047200
ALLOWED TO RUN OFF THE CARD, AND THEN 00047300
CONTINUED ON THE FOLLOWING RECORD IF A QUOTE MARK IS 00047400
PUT INTO THE FIRST POSITION OF THE SECOND RECORD. 00047500
THE PARAMETERS INFILE AND QC MAY NOT BE CHANGED IN THE 00047600
MIDDLE OF A RECORD. THEY MAY ONLY BE CHANGED WHEN THE 00047700
LAST ENTITY PRODUCED WAS AN ARROW. OTHERWISE THEY ARE 00047800
IGNORED. THE USER MAY ACCESS AN ENTIRE RECORD (ONLY 00047900
AFTER GETTING AN ARROW) IF HE EXECUTES A "READ NO" 00048000
STATEMENT BEFORE CALLING SCAN AGAIN. WHEN A QUOTE STRING 00048100
RUNS OVER TO A 2ND CARD, THE 2ND RECORD IS NOT ACCESSABLE. 00048200
THE FOLLOWING INPUT QUANTITIES WILL BE RECOGNIZED AND 00048300
+9.732641@-02 +63214612501.3 +.32106910 +21 00048400
-2.65@+13 -413.1234567 -.6 -3216382 00048500
3.14159@+12 2.1 .62 00048600
CONVERTED INTO NUMBERS. THEY MAY BE SIGNED OR UNSIGNED, 00048700
DECIMALS, WHOLE NUMBERS WITH DECIMALS, OR SCIENTIFIC 00048800
NOTATION; 00048900
DEFINE THRU = STEP 1 UNTIL # ; 00049000
OWN BOOLEAN MIDFILE ; 00049100
SAVE OWN REAL ARRAY CUP [0:165 ] ; % ARRAY OF WORD COUPLETS 00049200
ARRAY INARRAY [0:10] ; 00049300
OWN INTEGER I ; 00049400
INTEGER I1, J, K, L, CHARCT, CHRCT ; 00049500
LABEL GETCUPS, NEXTCUP, TESTBLANK, EOP, EOF, EF, ARROW ; 00049600
IF NOT MIDFILE THEN 00049700
BEGIN MIDFILE ~ TRUE ; 00049800
GETCUPS : % ~~~ 00049900
READ (INFILE, 10, INARRAY [*] ) [EOF] ; 00050000
EDITNEW (INARRAY [0], CUP [0], QC ) ; 00050100
I ~ 0 ; 00050200
GO TO TESTBLANK ; 00050300
END OF GETCUPS ; 00050400
IF I = -2 THEN GO TO ARROW ; %QUOTE FAILED TO CONTINUE TO THIS RECORD 00050500
IF I = -1 THEN BEGIN I ~ 0 ; 00050600
GO TO TESTBLANK ; 00050700
END ; 00050800
IF CUP [I ] = 4 THEN GO TO GETCUPS ; % LAST PHRASE WAS ~ 00050900
NEXTCUP : % ~~~ 00051000
I ~ I + 2 ; 00051100
TESTBLANK : % ~~~ 00051200
IF CUP [I ] = 2 THEN GO TO NEXTCUP ; % SKIP BLANK COUPLETS 00051300
IF CUP [I] = 4 THEN 00051400
ARROW : BEGIN IF I = -2 THEN I ~ -1 ; 00051500
SCAN ~ 2 ; 00051600
STRING [0] ~ "~" ; 00051700
GO TO EOP ; 00051800
END ; 00051900
IF CUP [I ]>4 THEN 00052000
BEGIN % ALPHANUMERIC PHRASES 00052100
WHILE CUP [I +J ] > 4 DO BEGIN 00052200
CHARCT ~ CHARCT + CUP [I +J ].[3:6] ; 00052300
J ~ J + 2 ; 00052400
END ; 00052500
FOR K ~ 0 THRU (J-1) DO BEGIN 00052600
STRING [K] ~ CUP [I] ; 00052700
STRING [K ].[3:6] ~ "0" ; 00052800
I ~ I + 1 ; END ; 00052900
I ~ I - 2 ; 00053000
SCAN ~ 10 | CHARCT ; 00053100
TYPE ~ -1 ; 00053200
GO TO EOP ; 00053300
END OF ALPHANUMERICS ; 00053400
IF CUP [I ]<0 THEN 00053500
BEGIN % QUOTE STRING PHRASES 00053600
WHILE CUP [I +J ] < 0 DO BEGIN 00053700
CHARCT ~ CHARCT + CUP [I +J ].[3:6] ; 00053800
J ~ J + 2 ; 00053900
END ; 00054000
FOR K ~ 0 THRU (J-1) DO BEGIN 00054100
STRING [K] ~ CUP [I] ; 00054200
STRING [K].[1:8] ~ "0" ; 00054300
I ~ I + 1 ; END ; 00054400
IF CUP [I ] = 4 % QUOTE FOLLOWED BY AN ARROW 00054500
THEN BEGIN READ (INFILE, 10, INARRAY [*] ) [EF ] ; 00054600
EDITNEW (INARRAY, CUP, QC ) ; 00054700
I ~ 0 ; 00054800
IF CUP [I ] < 0 % QUOTE IS CONTINUED FROM PREVIOUS RECORD 00054900
THEN BEGIN K ~ 0 ; 00055000
WHILE CUP [I +K ] < 0 DO BEGIN 00055100
CHRCT ~ CHRCT + CUP [I+K ].[3:6] ; 00055200
K ~ K + 2 ; END ; 00055300
IF CHARCT + CHRCT > 120 00055400
THEN CHRCT ~ 120 - CHARCT ; 00055500
SPLICEARRAY (STRING, CUP, CHARCT, CHRCT ) ; 00055600
CHARCT ~ CHARCT + CHRCT ; 00055700
I ~ I + K ; 00055800
END ; 00055900
EF: END ; 00056000
I ~ I - 2 ; 00056100
SCAN ~ 10 | CHARCT ; 00056200
TYPE ~ -2 ; 00056300
GO TO EOP ; 00056400
END OF QUOTE STRINGS ; 00056500
COMMENT ONLY NUMBERS & SPECIAL CHARACTERS REMAIN TO BE TESTED FOR 00056600
AT THIS POINT. NUMBERS WILL BE TESTED FIRST. IF A GROUP OF 00056700
PHRASE COUPLETS CONSTITUTES A NUMBER, IT WILL BE CONVERTED TO 00056800
A NUMBER AND PLACED IN THE FIRST WORD OF THE OUTPUT STRING. 00056900
VARIABLES J,K,&L ARE USED TO KEEP TRACK OF POSITION IN THE 00057000
COUPLET ARRAY -- 00057100
J CORRESPONDS TO SIGN OF THE NUMBER 00057200
K " " WHOLE NUMBER PART 00057300
L " " DECIMAL PART ; 00057400
STRING [0] ~ "0" ; 00057500
IF CUP [I] = 3 AND ( CUP [I+1] = "+" OR CUP [I+1] = "-" ) 00057600
THEN J ~ 2 ELSE J ~ 0 ; 00057700
IF CUP [I+J ] = 0 % INTEGER 00057800
THEN BEGIN STRING [0] ~ CUP [I+J+1 ] ; 00057900
K ~ 2 ; 00058000
TYPE ~ CUP [I +J].[3:6] ; % PUT DIGIT COUNT INTO TYPE 00058100
IF CUP [I+J ].[3:6] > 8 % SPLIT INTEGER 00058200
THEN BEGIN STRING [0]~ STRING [0] | 10*8 + CUP [I+J+3 ]; 00058300
K ~ K +2 00058400
END ; 00058500
END 00058600
ELSE K ~ 0 ; 00058700
I1 ~ I +J +K ; 00058800
IF CUP[I1] = 3 AND CUP[I1+1] = "." % DECIMAL 00058900
THEN IF CUP [I1 +2 ] = 0 % FOLLOWED BY INTEGER 00059000
THEN IF CUP [I1 +2 ] .[3:6 ] { 8 % 8 DIGITS OR LESS 00059100
THEN BEGIN L ~ 4 ; 00059200
STRING [0] ~ STRING [0] + CUP [I1 +3 ] 00059300
/ (10*CUP [I1+2].[3:6] ) 00059400
END 00059500
ELSE BEGIN L ~ 6 ; % SPLIT INTEGER 00059600
STRING [0] ~ STRING [0] + CUP [I1 +3 ] 00059700
/(10*(CUP[I1+2].[3:6]-8)) 00059800
+ CUP [I1 +5 ] 00059900
/(10*CUP[I1+2] .[3:6]) ; 00060000
END 00060100
ELSE L ~ 0 00060200
ELSE L ~ 0 ; 00060300
I1 ~ I1 + L ; 00060400
IF K > 0 AND L > 0 00060500
AND CUP [I+J ].[3:6 ] = 1 00060600
AND CUP [I1 ] = 3 00060700
AND CUP [I1 +1 ] = "00000@" 00060800
AND CUP [I1+2 ] = 3 00060900
AND(CUP [I1 +3 ] = "00000+" OR 00061000
CUP [I1 +3 ] = "00000-" OR 00061100
CUP [I1 +3 ] = "00000&" ) 00061200
AND CUP [I1 +4 ] = 0 00061300
AND CUP [I1 +4 ].[3:6 ] = 2 00061400
THEN BEGIN % CONVERT SCIENTIFIC NOTATION TO A REAL NUMBER 00061500
IF CUP [I1 +3 ] = "00000-" % NEGATIVE EXPONENT 00061600
THEN CUP [I1 +5 ] ~ -CUP [I1 +5 ] ; 00061700
STRING [0] ~ STRING [0] | 10*CUP [I1 +5 ] ; 00061800
I1 ~ I1 +6 ; % POINT TO NEXT PHRASE 00061900
END ; 00062000
IF K > 0 OR L > 0 % INTEGER OR REAL NUMBER HAS BEEN PUT INTO STRING 00062100
THEN BEGIN IF CUP [I ] = 3 AND CUP [I+1 ] = "-" 00062200
THEN STRING [0] ~ -STRING [0] ; 00062300
IF L > 0 THEN SCAN ~ 1 ELSE SCAN ~ 0 ; 00062400
I ~ I1 -2 ; 00062500
GO TO EOP ; 00062600
END OF NUMBER CONVERSION AND TESTING ; 00062700
SCAN ~ 3 ; % SPECIAL CHARACTER PHRASE 00062800
J ~ STRING [0] ~ CUP [I +1 ] ; 00062900
IF J = "00000." THEN TYPE ~ 1 ELSE 00063000
IF J = "00000[" THEN TYPE ~ 2 ELSE 00063100
IF J = "00000(" THEN TYPE ~ 3 ELSE 00063200
IF J = "00000<" THEN TYPE ~ 4 ELSE 00063300
IF J = "00000!" THEN TYPE ~ 5 ELSE 00063400
IF J = "00000&" THEN TYPE ~ 6 ELSE 00063500
IF J = "00000$" THEN TYPE ~ 7 ELSE 00063600
IF J = "00000*" THEN TYPE ~ 8 ELSE 00063700
IF J = "00000)" THEN TYPE ~ 9 ELSE 00063800
IF J = "00000;" THEN TYPE ~ 10 ELSE 00063900
IF J = "00000{" THEN TYPE ~ 11 ELSE 00064000
IF J = "00000-" THEN TYPE ~ 12 ELSE 00064100
IF J = "00000/" THEN TYPE ~ 13 ELSE 00064200
IF J = "00000," THEN TYPE ~ 14 ELSE 00064300
IF J = "00000%" THEN TYPE ~ 15 ELSE 00064400
IF J = "00000=" THEN TYPE ~ 16 ELSE 00064500
IF J = "00000]" THEN TYPE ~ 17 ELSE 00064600
IF J = """ THEN TYPE ~ 18 ELSE 00064700
IF J = "00000#" THEN TYPE ~ 19 ELSE 00064800
IF J = "00000@" THEN TYPE ~ 20 ELSE 00064900
IF J = "00000:" THEN TYPE ~ 21 ELSE 00065000
IF J = "00000>" THEN TYPE ~ 22 ELSE 00065100
IF J = "00000}" THEN TYPE ~ 23 ELSE 00065200
IF J = "00000+" THEN TYPE ~ 24 ELSE 00065300
IF J = "00000|" THEN TYPE ~ 25 ; GO TO EOP ; 00065400
EOF : SCAN ~ -9 ; 00065500
EOP : END OF PROCEDURE SCAN ; 00065600
%********************************************************************** 00065700
%-----------------------------------------------------------------------00065800
BOOLEAN STREAM PROCEDURE NAMESAME (READRAY, FILEFIELD ); 00065900
BEGIN 00066000
SI ~ READRAY ; 00066100
DI ~ FILEFIELD ; 00066200
IF 24 SC = DC THEN TALLY ~ 1 ELSE TALLY ~ 0 ; 00066300
NAMESAME ~ TALLY ; 00066400
END OF NAMESAME PROCEDURE ; 00066500
%-----------------------------------------------------------------------00066600
BOOLEAN STREAM PROCEDURE SAMENAME (READRAY, FILEFIELD ); 00066700
BEGIN 00066800
SI ~ READRAY ; 00066900
DI ~ FILEFIELD ; DI ~ DI + 8 ; 00067000
IF 16 SC = DC THEN TALLY ~ 1 ELSE TALLY ~ 0 ; 00067100
SAMENAME ~ TALLY ; 00067200
END OF SAMENAME PROCEDURE ; 00067300
%-----------------------------------------------------------------------00067400
STREAM PROCEDURE CREATEFILEFIELD (STRING, FILEFIELD ); 00067500
BEGIN 00067600
SI ~ STRING ; 00067700
DI ~ FILEFIELD ; 00067800
DI ~ DI + 8 ; 00067900
2( SI ~ SI + 2 ; 00068000
DS ~ 6 CHR ) ; 00068100
SI ~ SI +2 ; 00068200
DS ~ 4 CHR ; 00068300
END OF CREATEFILEFIELD ; 00068400
%-----------------------------------------------------------------------00068500
STREAM PROCEDURE MOVECHAR (STRING, QUOTARRAY, A,B,C, CHARCT ) ; 00068600
VALUE A,B,C, CHARCT ; 00068700
BEGIN 00068800
SI ~ STRING ; 00068900
SI ~ SI +2 ; 00069000
DI ~ QUOTARRAY ; 00069100
A(2(DI ~ DI +50)) ; 00069200
B(DI ~ DI +10 ) ; 00069300
DI ~ DI + C ; 00069400
DS ~ CHARCT CHR ; 00069500
END MOVECHAR PROCEDURE ; 00069600
%-----------------------------------------------------------------------00069700
PROCEDURE TURNONPLUGCASEBOOLEAN ; 00069800
BEGIN 00069900
INTEGER I, J ; 00070000
FORMAT F ("ERROR *** TYPE 1 FIELD NOT IN PLUGDICT ARRAY.") ; 00070100
LABEL EOP ; 00070200
FOR I ~ 0 THRU PLUGMAX DO BEGIN 00070300
IF NAMESAME (FILEFIELD, PLUGDICT [I,*] ) 00070400
THEN BEGIN 00070500
FOR J ~ 3 THRU 6 DO 00070600
ISDEVELOPE [PLUGDICT [I,J] ] ~ TRUE ; 00070700
GO TO EOP 00070800
END 00070900
END ; 00071000
NUMERR ~ NUMERR + 1 ; 00071100
WRITE (PTR, 3, FILEFIELD [*] ) ; 00071200
WRITE (PTR [DBL], F ) ; 00071300
EOP : END OF TURNONPLUGCASEBOOLEAN PROCEDURE ; 00071400
%-----------------------------------------------------------------------00071500
STREAM PROCEDURE FILLFIELDKEY (KEYCUP, G,H,I,J,K,L,M,N,O,P ) ; 00071600
VALUE G,H,I,J,K,L,M,N,O,P ; 00071700
BEGIN DI ~ KEYCUP ; 00071800
DS ~ 6 LIT "0" ; 00071900
SI ~ LOC G ; 00072000
10 ( SI ~ SI +7; 00072100
DS ~ CHR ) ; 00072200
END FILLFIELDKEY PROCEDURE ; 00072300
%-----------------------------------------------------------------------00072400
ALPHA STREAM PROCEDURE UNPACK (PACKEDNUM ) ; 00072500
VALUE PACKEDNUM ; 00072600
BEGIN 00072700
SI ~ LOC PACKEDNUM ; 00072800
DI ~ LOC UNPACK ; 00072900
DS ~ 8 DEC ; 00073000
END OF UNPACK PROCEDURE ; 00073100
%-----------------------------------------------------------------------00073200
FORMAT % ERROR MESSAGES 00073300
E1 ("***ERROR1*** #FIELD NAME ON A BREAK CARD MUST BE FOLLOWED BY 00073400
A QUOTE WHICH NAMES THE FIELD" ), 00073500
E2 ("***ERROR2*** #FIELD MUST BE A # SIGN FOLLOWED BY A 6 DIGIT NU00073600
MBER"/ 00073700
"FIRST 2 DIGITS ARE FIELD LENGTH"/ 00073800
"NEXT 3 DIGITS ARE STARTING POSITION"/ 00073900
"FINAL DIGIT IS EITHER 0 FOR ALPHA OR 1 FOR NUMERIC FIELD" ), 00074000
E3 ("***ERROR3*** THIS FIELD IS NOT ON THE DICTION FILE" ), 00074100
E4 ("***ERROR4*** LEAD CARD MUST BE FIRST CARD" ), 00074200
E5 ("***ERROR5*** LEAD MUST BE FOLLOWED BY A FILE NAME WHICH DOES00074300
NOT EXCEED 7 CHARACTERS" ), 00074400
E6 ("***ERROR6*** LEAD CARD FILE NAME MUST BE FOLLOWED BY NUMBER O00074500
F WORDS PER RECORD THEN NUMBER WORDS PER BLOCK" ), 00074600
E7 ("***ERROR7*** PERAMETER CARD MUST BEGIN WITH PERAMETER TYPE- 00074700
PAGELINES,SKIPHEAD,DATE,INDENT,TOPTITLE,BOTTOMTITLE"/ X67, 00074800
"BREAK,HEADINGS,LINE, OR TOTAL" ), 00074900
E8 ("***ERROR8*** PAGELINES MUST BE FOLLOWED BY AN INTEGER" ), 00075000
E9 ("***ERROR9*** SKIPHEADS MUST BE FOLLOWED BY AN INTEGER" ), 00075100
E10 ("***ERROR10*** INDENT MUST BE FOLLOWED BY AN INTEGER" ), 00075200
E11 ("***ERROR11*** WORDS PER RECORD PRECEDES WORDS PER BLOCK. WDS/00075300
BLOCK IS AN EVEN MULTIPLE OF WORDS/RECORD" ), 00075400
E12 ("***ERROR12*** DATE MUST BE FOLLOWED BY A QUOTE WHICH DOES NO00075500
T EXCEED 18 CHARACTERS" ), 00075600
E13 ("***ERROR13*** THIS QUOTE MUST NOT EXCEED 66 CHARACTERS" ), 00075700
E14 ("***ERROR14*** THE NUMBER OF SPACES PLUS THE NUMBER OF QUOTE C00075800
HARACTERS MUST NOT EXCEED 66" ), 00075900
E15 ("***ERROR15*** A TITLE MUST BE IN QUOTES" ), 00076000
E16 ("***ERROR16*** NUMBER OF SPACES PLUS CHARACTERS MUST NOT EXCEE00076100
D 120 " ), 00076200
E17 ("***ERROR17*** FIELD NAME MUST BE 16 ALPHANUMERIC CHARACTERS 00076300
(INTERNAL HYPHEN ACCEPTABLE)" ), 00076400
E18 ("***ERROR18*** TOTAL FIELD (TYPE 2) MAY NOT APPEAR ON A LINE C00076500
ARD OR BREAK CARD" ), 00076600
E19 ("***ERROR19*** THIS QUOTE MAY NOT EXCEED 6 CHARACTERS. LONGER 00076700
QUOTES MAY BE BUILT UP ON SUCCESSIVE CARDS WITH ZERO SPACEING" ), 00076800
E20 ("***ERROR20*** INVALID FIELD NAME" ), 00076900
E21 ("***ERROR21*** ONLY TOTAL CARDS MAY FOLLOW A TOTAL CARD" ), 00077000
E22 ("***ERROR22*** NUMBER OF DECIMALS MAY NOT EXCEED NUMBER OF DIG00077100
ITS" ), 00077200
E23 ("***ERROR23*** ALPHA FIELDS MAY NOT BE TOTALED" ), 00077300
E24 ("***ERROR24*** DICTION CONTAINS INVALID TYPE" ), 00077400
E25 ("***ERROR25*** DEVELOPED TOTAL FIELD (TYPE 2) HAS NOT BEEN ENT00077500
ERED IN CALCDICT ARRAY" ), 00077600
E26 ("***ERROR26*** IMPLYDEVELOPES ARRAY CONTAINS A FIELD WHICH IS 00077700
NOT ON THE DICTION FILE" ), 00077800
E27 ("***ERROR27*** THE MAXIMUM NUMBER OF PRINT POSITIONS PER LINE 00077900
IS 120 (INCLUDE SPACES & DECIMAL POINTS)."/ 00078000
"YOUR LINE CARDS REQUIRE ", I3, " POSITIONS" ), 00078100
E28 ("***ERROR28*** THE MAXIMUM NUMBER OF PRINT POSITIONS PER LINE 00078200
IS 120 (INCLUDE SPACES & DECIMAL POINTS)."/ 00078300
"YOUR TOTAL CARDS REQUIRE ", I3, " POSITIONS" ), 00078400
E29 ("***ERROR29 IMPLYDEVELOPES ARRAY MUST NOT CONTAIN TYPE 2 FIELD00078500
S, USE CALCDICT ARRAY." ), 00078600
E30 ("***ERROR30*** TOTALS ARE LIMITED TO 12 DIGITS" ) ; 00078700
DEFINE 00078800
ERROR1 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00078900
WRITE (PTR [DBL], E1 ) ; NUMERR ~ NUMERR + 1 ; 00079000
GO TO ENDCARD END # , 00079100
ERROR2 = BEGIN WRITE (PTR,F7, STRING [0] ) ; 00079200
WRITE (PTR [DBL], E2 ) ; NUMERR ~ NUMERR + 1 ; 00079300
GO TO ENDCARD END # , 00079400
ERROR3 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00079500
WRITE (PTR [DBL], E3 ) ; NUMERR ~ NUMERR + 1 ; 00079600
GO TO ENDCARD END # , 00079700
ERROR4 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00079800
WRITE (PTR [DBL], E4 ) ; NUMERR ~ NUMERR + 1 ; 00079900
GO TO ENDCARD END # , 00080000
ERROR5 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00080100
WRITE (PTR [DBL], E5 ) ; NUMERR ~ NUMERR + 1 ; 00080200
GO TO ENDCARD END # , 00080300
ERROR6 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00080400
WRITE (PTR [DBL], E6 ) ; NUMERR ~ NUMERR + 1 ; 00080500
GO TO ENDCARD END # , 00080600
ERROR7 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00080700
WRITE (PTR [DBL], E7 ) ; NUMERR ~ NUMERR + 1 ; 00080800
GO TO ENDCARD END # , 00080900
ERROR8 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00081000
WRITE (PTR [DBL], E8 ) ; NUMERR ~ NUMERR + 1 ; 00081100
GO TO ENDCARD END # , 00081200
ERROR9 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00081300
WRITE (PTR [DBL], E9 ) ; NUMERR ~ NUMERR + 1 ; 00081400
GO TO ENDCARD END # , 00081500
ERROR10 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00081600
WRITE (PTR [DBL], E10 ) ; NUMERR ~ NUMERR + 1 ; 00081700
GO TO ENDCARD END # , 00081800
ERROR11 = BEGIN WRITE (PTR,F7, STRING [0]); 00081900
WRITE (PTR [DBL], E11 ) ; NUMERR ~ NUMERR + 1 ; 00082000
GO TO ENDCARD END # , 00082100
ERROR12 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00082200
WRITE (PTR [DBL], E12 ) ; NUMERR ~ NUMERR + 1 ; 00082300
GO TO ENDCARD END # , 00082400
ERROR13 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00082500
WRITE (PTR [DBL], E13 ) ; NUMERR ~ NUMERR + 1 ; 00082600
GO TO ENDCARD END # , 00082700
ERROR14 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00082800
WRITE (PTR [DBL], E14 ) ; NUMERR ~ NUMERR + 1 ; 00082900
GO TO ENDCARD END # , 00083000
ERROR15 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00083100
WRITE (PTR [DBL], E15 ) ; NUMERR ~ NUMERR + 1 ; 00083200
GO TO ENDCARD END # , 00083300
ERROR16 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00083400
WRITE (PTR [DBL], E16 ) ; NUMERR ~ NUMERR + 1 ; 00083500
GO TO ENDCARD END # , 00083600
ERROR17 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00083700
WRITE (PTR [DBL], E17 ) ; NUMERR ~ NUMERR + 1 ; 00083800
GO TO ENDCARD END # , 00083900
ERROR18 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00084000
WRITE (PTR [DBL], E18 ) ; NUMERR ~ NUMERR + 1 ; 00084100
GO TO ENDCARD END # , 00084200
ERROR19 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00084300
WRITE (PTR [DBL], E19 ) ; NUMERR ~ NUMERR + 1 ; 00084400
GO TO ENDCARD END # , 00084500
ERROR20 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00084600
WRITE (PTR [DBL], E20 ) ; NUMERR ~ NUMERR + 1 ; 00084700
GO TO ENDCARD END # , 00084800
ERROR21 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00084900
WRITE (PTR [DBL], E21 ) ; NUMERR ~ NUMERR + 1 ; 00085000
GO TO ENDCARD END # , 00085100
ERROR22 = BEGIN WRITE (PTR,F7, STRING [0]); 00085200
WRITE (PTR [DBL], E22 ) ; NUMERR ~ NUMERR + 1 ; 00085300
GO TO ENDCARD END # , 00085400
ERROR23 = BEGIN WRITE (PTR, F7, IT ) ; 00085500
WRITE (PTR [DBL], E23 ) ; NUMERR ~ NUMERR + 1 ; 00085600
GO TO ENDCARD END # , 00085700
ERROR24 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00085800
WRITE (PTR [DBL], E24 ) ; NUMERR ~ NUMERR + 1 ; 00085900
GO TO ENDCARD END # , 00086000
ERROR25 = BEGIN WRITE (PTR, F, STRING [0], STRING [1] ) ; 00086100
WRITE (PTR [DBL], E25 ) ; NUMERR ~ NUMERR + 1 ; 00086200
GO TO ENDCARD END # , 00086300
ERROR26 = BEGIN READ (IMPLYDEVELOPES [J,*], F5, FOR B ~ 0 THRU 3 00086400
DO STRING [B] ) ; 00086500
WRITE (PTR, F6, FOR B ~ 0 THRU 3 DO STRING [B] ) ; 00086600
WRITE (PTR [DBL], E26 ) ; NUMERR ~ NUMERR + 1 ; 00086700
END # , 00086800
ERROR27 = BEGIN 00086900
WRITE (PTR [DBL], E27, LINECHR ); NUMERR ~ NUMERR + 1 ; 00087000
END # , 00087100
ERROR28 = BEGIN 00087200
WRITE (PTR [DBL], E28, TOTLCHR ); NUMERR ~ NUMERR + 1 ; 00087300
END # , 00087400
ERROR29 = BEGIN READ (IMPLYDEVELOPES [J,*], F5, FOR B ~ 0 THRU 3 00087500
DO STRING [B] ) ; 00087600
WRITE (PTR, F6, FOR B ~ 0 THRU 3 DO STRING [B] ) ; 00087700
WRITE (PTR [DBL], E29 ) ; NUMERR ~ NUMERR + 1 ; 00087800
END # , 00087900
ERROR30 = BEGIN 00088000
WRITE (PTR [DBL], E30 ) ; NUMERR ~ NUMERR + 1 ; 00088100
GO TO ENDCARD END # ; 00088200
%-----------------------------------------------------------------------00088300
COMMENT "SET PLUG PROCEDURE" 00088400
PURPOSE - TO INFORM THE PRE-EDIT BLOCK OF THE CASE NUMBER(S) OF THE PLUG00088500
IN PROCEDURES WHICH MUST BE EXECUTED TO DEVELOPE A GIVEN FIELD ON A LINE00088600
CARD. FOUR CASE NUMBERS MAY BE SUPPLIED. 00088700
THE DEFINE OF PLUGMAX SHOULD BE INCREASED TO THE VALUE OF THE HIGHEST 00088800
PLUGIN NUMBER. 00088900
PLUGDICT ROW NUMBER = PLUG IN NUMBER . 00089000
FILL PLUGDICT [0,*] WITH "0FILEXX", "FIELDXXX", "NAMEXXXX", 0, 0, 0, 0 ;00089100
%-----------------------------------------------------------------------00089200
COMMENT "SET CALC PROCEDURE" 00089300
PURPOSE - TO INFORM THE PRE-EDIT BLOCK OF THE CASE NUMBER(S) OF THE CALC00089400
PROCEDURES WHICH MUST BE EXECUTED TO CALCULATE A GIVEN FIELD ON A TOTAL 00089500
CARD (TYPE 2). 00089600
FOUR CASE NUMBERS MAY BE SUPPLIED. 00089700
THE DEFINE OF CALCMAX MUST INCREASED TO THE HIGHEST CASE NUMBER. 00089800
CALCDICT ROW NUMBER = CALC PROCEDURE NUMBER. 00089900
FILL CALCDICT [0,*] WITH "0FILEXX", "FIELDXXX", "NAMEXXXX", 0, 0, 0, 0 .00090000
THE IMPLYDEVELOPE ARRAY MUST BE UPDATED IF A TYPE 2 TOTAL FIELD CALCUL- 00090100
ATES FROM TOTALS OF TYPE 1 (DEVELOPED) FIELDS, OR TYPE 0 FIELDS. 00090200
THE DEFINE OF IMPDEVMAX SHOULD BE INCREASED TO ALLOW FOR ADDITIONS TO 00090300
THE IMPLYDEVELOPES ARRAY. 00090400
FILL IMPLYDEVELOPES [0,*] WITH 0, "16CHARFI", "ELDNAME " ; 00090500
%-----------------------------------------------------------------------00090600
BEGIN %NESTED LEAD BLOCK 00090700
LABEL SCANFILE, ENDCARD, EDITOPTITLE, EDITBOMTITLE, HITRECORD, 00090800
GOTIT, EDITNUM, SKIPDICT, ERR3 ; 00090900
READ (CARDSIN [NO], 10, READRAY [*] ) ; 00091000
WRITE (PTR, 10, READRAY [*] ) ; 00091100
S ~ SCANIT ; 00091200
IF IT = "LEAD " AND S = 40 AND TYPE = -1 % LEAD CARD 00091300
THEN BEGIN S ~ SCANIT ; 00091400
IF IT = "DUMMY " THEN GO TO SKIPDICT ; 00091500
IF S { 70 AND TYPE = -1 AND S } 10 00091600
THEN BEGIN 00091700
FILEFIELD [0].[6:36] ~ STRING [0].[12:36] ; 00091800
FILEFIELD [0].[42:6] ~ STRING [1].[12:6 ] ; 00091900
FILL DICTION WITH FILEFIELD [0], * ; 00092000
END 00092100
ELSE ERROR5 ; 00092200
SKIPDICT : S ~ SCANIT ; 00092300
IF S = 0 THEN NUMWDSPEREC ~ IT ELSE ERROR6 ; 00092400
S ~ SCANIT ; 00092500
IF S = 0 THEN NUMWDSPERBLK ~ IT ELSE ERROR6 ; 00092600
IF NUMWDSPERBLK MOD NUMWDSPEREC ! 0 THEN ERROR11 ; 00092700
END LEAD CARD 00092800
ELSE ERROR4 ; 00092900
ENDCARD : 00093000
WHILE TRUE DO 00093100
IF S = 2 00093200
THEN GO TO SCANFILE 00093300
ELSE S ~ SCANIT ; 00093400
SCANFILE : 00093500
READ (CARDSIN [NO], 10, READRAY [*] )[EOF] ; 00093600
WRITE ( PTR , 10, READRAY [*] ) ; 00093700
S ~ SCANIT ; % START NEW PERAMETER CARD 00093800
IF TYPE ! -1 THEN ERROR7 ; 00093900
IF IT = "PAGELI" % PAGELINES CARD 00094000
THEN BEGIN S ~ SCANIT ; 00094100
IF S = 0 00094200
THEN BEGIN LINEMAX ~ IT ; 00094300
GO TO ENDCARD ; 00094400
END 00094500
ELSE ERROR8 ; 00094600
END PAGELINES CARD ; 00094700
IF IT = "SKIPHE" % SKIPHEADS CARD 00094800
THEN BEGIN S ~ SCANIT ; 00094900
IF S = 0 00095000
THEN BEGIN NUMHDREC ~ IT ; 00095100
GO TO ENDCARD ; 00095200
END 00095300
ELSE ERROR9 ; 00095400
END SKIPHEADS CARD ; 00095500
IF IT = "INDENT" % INDENT CARD 00095600
THEN BEGIN S ~ SCANIT ; 00095700
IF S = 0 00095800
THEN BEGIN INDENT ~ IT/2 ; 00095900
GO TO ENDCARD ; 00096000
END 00096100
ELSE ERROR10 ; 00096200
END INDENT CARD ; 00096300
IF IT = "DATE " % DATE CARD 00096400
THEN BEGIN S ~ SCANIT ; 00096500
IF TYPE ! -2 OR S < 10 OR S > 180 THEN ERROR12 00096600
ELSE BEGIN FOR I ~ 0 THRU 2 DO 00096700
DATERAY [I] ~ STRING [I] ; 00096800
GO TO ENDCARD ; 00096900
END ; 00097000
END DATE CARD ; 00097100
IF IT = "TOPTIT" % TOPTITLES CARD 00097200
THEN BEGIN NUMTOPTITLES ~ NUMTOPTITLES + 1 ; 00097300
S ~ SCANIT ; 00097400
IF TYPE = -2 % QUOTE 00097500
THEN BEGIN IF S > 660 THEN ERROR13 ; 00097600
CHARCT ~ S/10 ; 00097700
SKIPCHR ~ (66 - CHARCT) DIV 2 ; 00097800
GO TO EDITOPTITLE ; 00097900
END 00098000
ELSE IF S = 0 % INTEGER 00098100
THEN BEGIN SKIPCHR ~ IT ; 00098200
S ~ SCANIT ; 00098300
IF TYPE ! -2 OR S < 10 THEN ERROR15 ; 00098400
CHARCT ~ S/10 ; 00098500
IF CHARCT + SKIPCHR > 66 THEN ERROR14 ; 00098600
EDITOPTITLE : FOR I ~ 0 THRU 10 DO 00098700
TOPTITLERAY8 [NUMTOPTITLES,I] ~ " ";00098800
SPLICEARRAY(TOPTITLERAY8[NUMTOPTITLES,*],00098900
STRING, SKIPCHR, CHARCT ) ; 00099000
WRITE (PTR, T, FOR I ~ 0 THRU 10 DO 00099100
TOPTITLERAY8 [NUMTOPTITLES,I] ) ; 00099200
GO TO ENDCARD ; 00099300
END 00099400
ELSE ERROR15 ; 00099500
END TOPTITLES CARD ; 00099600
IF IT = "BOTTOM" % BOTTOMTITLES CARD 00099700
THEN BEGIN NUMBOMTITLES ~ NUMBOMTITLES + 1 ; 00099800
S ~ SCANIT ; 00099900
IF TYPE = -2 % QUOTE 00100000
THEN BEGIN IF S > 660 THEN ERROR13 ; 00100100
CHARCT ~ S/10 ; 00100200
SKIPCHR ~ (66 - CHARCT) DIV 2 ; 00100300
GO TO EDITBOMTITLE ; 00100400
END 00100500
ELSE IF S = 0 % INTEGER 00100600
THEN BEGIN SKIPCHR ~ IT ; 00100700
S ~ SCANIT ; 00100800
IF TYPE ! -2 OR S < 10 THEN ERROR15 ; 00100900
CHARCT ~ S/10 ; 00101000
IF CHARCT + SKIPCHR > 66 THEN ERROR14 ; 00101100
EDITBOMTITLE : FOR I ~ 0 THRU 10 DO 00101200
BOMTITLERAY8 [NUMBOMTITLES,I] ~ " ";00101300
SPLICEARRAY(BOMTITLERAY8[NUMBOMTITLES,*],00101400
STRING, SKIPCHR, CHARCT ) ; 00101500
WRITE (PTR, T, FOR I ~ 0 THRU 10 DO 00101600
BOMTITLERAY8 [NUMBOMTITLES,I] ) ; 00101700
GO TO ENDCARD ; 00101800
END 00101900
ELSE ERROR15 ; 00102000
END BOMTITLES CARD ; 00102100
IF IT = "HEADIN" % HEADINGS CARD 00102200
THEN BEGIN NUMHEDLINES ~ NUMHEDLINES + 1 ; 00102300
S ~ SCANIT ; 00102400
IF S = 0 % INTEGER 00102500
THEN BEGIN SKIPCHR ~ IT ; 00102600
S ~ SCANIT ; 00102700
END 00102800
ELSE SKIPCHR ~ 0 ; 00102900
IF TYPE ! -2 OR S < 10 THEN ERROR15 ; 00103000
CHARCT ~ S/10 ; 00103100
IF CHARCT + SKIPCHR > 120 THEN ERROR16 ; 00103200
FOR I ~ 0 THRU 19 DO 00103300
COLUMNHEADS8[NUMHEDLINES,I] ~ " " ; 00103400
SPLICEARRAY (COLUMNHEADS8 [NUMHEDLINES,*], STRING, 00103500
SKIPCHR , CHARCT ) ; 00103600
WRITE (PTR [DBL], H, FOR J ~ 0 THRU 19 DO 00103700
COLUMNHEADS8 [NUMHEDLINES,J] ) ; 00103800
GO TO ENDCARD ; 00103900
END HEADINGS CARD ; 00104000
IF IT = "BREAK " % BREAK CARD 00104100
THEN BEGIN 00104200
NUMCTL ~ NUMCTL + 1 ; 00104300
S ~ SCANIT ; % GET FIELD NAME 00104400
IF S = 3 AND STRING [0] = "#" 00104500
THEN BEGIN S ~ SCANIT ; % POUND FIELD 00104600
IF S = 0 AND TYPE = 6 % 6 DIGIT INTEGER 00104700
THEN BEGIN CHARCT ~ IT DIV 10000 ; 00104800
IF CHARCT > 12 THEN CHARCT ~ 12 ; 00104900
KEYARRAY8 [NUMCTL].[42:6] ~ CHARCT ;00105000
KEYARRAY8 [NUMCTL].[24:18] % WHERE 00105100
~ UNPACK (IT MOD 10000 DIV 10 ) ; 00105200
S ~ SCANIT ; 00105300
IF TYPE ! -2 OR S < 9 00105400
THEN ERROR1 00105500
ELSE BEGIN CTLID8[2|NUMCTL ] ~ IT ;00105600
CTLID8[2|NUMCTL+1] 00105700
~ STRING [1] ; 00105800
S ~ SCANIT ; 00105900
IF TYPE = -1 00106000
AND IT = "PAGE " 00106100
THEN PGBRK ~ 2|NUMCTL ; 00106200
GO TO ENDCARD ; 00106300
END 00106400
END 6 DIGITS 00106500
ELSE ERROR2 ; 00106600
END POUND FIELD ; 00106700
IF S < 10 OR S > 160 OR TYPE ! -1 THEN ERROR17 ; 00106800
IF S { 120 THEN STRING [2] ~ " " ; 00106900
CREATEFILEFIELD (STRING, FILEFIELD ); 00107000
FOR I ~ 1 THRU 1000 DO BEGIN 00107100
READ (DICTION [I], 3, READRAY [*] ) [ERR3] ; 00107200
IF SAMENAME (READRAY, FILEFIELD) 00107300
THEN GO TO HITRECORD END LOOP ; 00107400
ERR3 : ERROR3 ; 00107500
HITRECORD: READ (READRAY [*], F1, TIPE, CHARCT, WHERE ) ; 00107600
IF TIPE } 2 THEN ERROR18 ; 00107700
IF TIPE = 1 THEN TURNONPLUGCASEBOOLEAN ; 00107800
IF CHARCT > 12 THEN CHARCT ~ 12 ; 00107900
KEYARRAY8 [NUMCTL].[18:6] ~ TIPE ; 00108000
KEYARRAY8 [NUMCTL].[42:6] ~ CHARCT ; 00108100
KEYARRAY8 [NUMCTL].[24:18] ~ WHERE ; 00108200
CTLID8[2|NUMCTL] ~ STRING [0] ; 00108300
CTLID8[2|NUMCTL+1] ~ STRING [1] ; 00108400
FOR I ~ 1, 2 DO BEGIN 00108500
S ~ SCANIT ; 00108600
IF S = 2 THEN GO TO SCANFILE ; % ARROW 00108700
IF S > 9 AND 00108800
TYPE = -2 % QUOTE FOR FIELD NAME 00108900
THEN BEGIN CTLID8[2|NUMCTL ] ~ STRING [0] ; 00109000
CTLID8[2|NUMCTL+1] ~ STRING [1] ; 00109100
END ; 00109200
IF TYPE = -1 AND STRING [0] = "PAGE " 00109300
THEN PGBRK ~ 2 | NUMCTL ; 00109400
END LOOP ; 00109500
GO TO ENDCARD ; 00109600
END BREAK CARD ; 00109700
IF IT = "LINE " % LINE CARD 00109800
THEN BEGIN 00109900
NUMLINEFLDS ~ NUMLINEFLDS + 1 ; 00110000
S ~ SCANIT ; 00110100
IF S = 0 THEN BEGIN SPASE ~ IT ; 00110200
S ~ SCANIT ; 00110300
END 00110400
ELSE SPASE ~ 1 ; 00110500
IF S = 3 AND IT = "#" 00110600
THEN BEGIN % POUND FIELD 00110700
S ~ SCANIT ; 00110800
IF S ! 0 OR TYPE ! 6 THEN ERROR2 ; 00110900
WHICHONE ~ 1 ; 00111000
A ~ IT MOD 10000 DIV 1000 ; 00111100
B ~ IT MOD 1000 DIV 100 ; 00111200
C ~ IT MOD 100 DIV 10 ; 00111300
CHARCT ~ IT DIV 10000 ; 00111400
IFNUM ~ IT MOD 10 ; 00111500
END 00111600
ELSE IF S > 9 AND TYPE = -1 % ALPHA FIELD 00111700
THEN BEGIN 00111800
IF S > 160 THEN ERROR17 ; 00111900
IF S { 120 THEN STRING [2] ~ " " ; 00112000
CREATEFILEFIELD (STRING, FILEFIELD ) ; 00112100
FOR I ~ 1 THRU 1000 DO BEGIN 00112200
READ (DICTION [I], 3, READRAY [*] ) [ERR3] ; 00112300
IF SAMENAME (READRAY, FILEFIELD ) 00112400
THEN GO TO GOTIT END LOOP ; 00112500
GOTIT : READ (READRAY [*], F2, TIPE, CHARCT, 00112600
A, B, C, IFNUM ) ; 00112700
IF TIPE = 0 OR TIPE = 1 00112800
THEN WHICHONE ~ TIPE +1 00112900
ELSE ERROR18 ; 00113000
IF TIPE = 1 THEN TURNONPLUGCASEBOOLEAN ; 00113100
END 00113200
ELSE IF S > 9 AND TYPE = -2 % QUOTE CONSTANT 00113300
THEN BEGIN 00113400
WHICHONE ~ 3 ; 00113500
IF S > 60 THEN ERROR19 ; 00113600
CHARCT ~ S/10 ; 00113700
IFNUM ~ 0 ; 00113800
A ~ QUOTCHR DIV 100 ; 00113900
B ~ QUOTCHR DIV 10 MOD 10 ; 00114000
C ~ QUOTCHR MOD 10 ; 00114100
QUOTCHR ~ QUOTCHR + CHARCT ; 00114200
MOVECHAR (STRING, QUOTARRAY, A,B,C,CHARCT);00114300
END 00114400
ELSE ERROR20 ; 00114500
EDITNUM : IF IFNUM = 1 % NUMERIC FIELD 00114600
THEN BEGIN S ~ SCANIT ; 00114700
IF S = 0 00114800
THEN BEGIN IFDEC ~ 1 ; 00114900
DIGIT ~ CHARCT - IT ; 00115000
NUMDEC ~ IT ; 00115100
IF DIGIT < 0 THEN ERROR22 ; 00115200
END 00115300
ELSE BEGIN IFDEC ~ 0 ; 00115400
DIGIT ~ CHARCT ; 00115500
NUMDEC ~ 0 ; 00115600
END ; 00115700
END ; 00115800
FILLFIELDKEY (FIELDKEY8[2|(NUMLINEFLDS-1)], WHICHONE, A,B,00115900
C, CHARCT, IFNUM,IFDEC,DIGIT,NUMDEC,SPASE );00116000
LINECHR ~ LINECHR + CHARCT + SPASE +(IF IFNUM = 1 00116100
THEN IFDEC 00116200
ELSE 0); 00116300
IF LINECHR > 120 THEN ERROR27 ; 00116400
GO TO ENDCARD ; 00116500
END LINE CARD ; 00116600
IF IT = "TOTAL " THEN GO TO TOTALS ELSE ERROR7 ; 00116700
END OF NESTED LEAD BLOCK; 00116800
%-----------------------------------------------------------------------00116900
TOTALS : 00117000
BEGIN %NESTED TOTALS BLOCK 00117100
LABEL GOTAHIT, TIPE0, EDITDEC, ENDCARD, SCANFILE, TOTCARD, ERR3;00117200
GO TO TOTCARD ; 00117300
ENDCARD : 00117400
WHILE TRUE DO 00117500
IF S = 2 00117600
THEN GO TO SCANFILE 00117700
ELSE S ~ SCANIT ; 00117800
SCANFILE : 00117900
READ (CARDSIN [NO], 10, READRAY [*] )[EOF] ; 00118000
WRITE ( PTR , 10, READRAY [*] ) ; 00118100
S ~ SCANIT ; % START NEW PERAMETER CARD 00118200
IF TYPE ! -1 THEN ERROR7 ; 00118300
IF IT ! "TOTAL " THEN ERROR21 00118400
ELSE 00118500
TOTCARD : 00118600
BEGIN % TOTAL CARD 00118700
NUMTOTFLDS ~ NUMTOTFLDS + 1 ; 00118800
S ~ SCANIT ; 00118900
IF S = 0 THEN BEGIN SPASE ~ IT ; 00119000
S ~ SCANIT ; 00119100
END 00119200
ELSE SPASE ~ 1 ; 00119300
IF S = 3 AND IT = "#" 00119400
THEN BEGIN % POUND FIELD 00119500
S ~ SCANIT ; 00119600
IF S ! 0 OR TYPE ! 6 THEN ERROR2 ; 00119700
WHERE ~ IT DIV 10 MOD 1000 ; 00119800
CHARCT ~ IT DIV 10000 ; 00119900
IFNUM ~ IT MOD 10 ; 00120000
IF IFNUM ! 1 THEN ERROR23 ; 00120100
GO TO TIPE0 ; 00120200
END 00120300
ELSE IF S > 9 AND TYPE = -1 % ALPHA FIELD 00120400
THEN BEGIN 00120500
IF IT = "TALLY " 00120600
THEN BEGIN WHICHONE ~ A ~ 0 ; 00120700
CHARCT ~ 4 ; 00120800
IFNUM ~ 1 ; 00120900
END 00121000
ELSE BEGIN 00121100
IF S > 160 THEN ERROR17 ; 00121200
IF S { 120 THEN STRING [2] ~ " " ; 00121300
CREATEFILEFIELD (STRING, FILEFIELD ) ; 00121400
FOR I ~ 1 THRU 1000 DO BEGIN 00121500
READ (DICTION [I], 3, READRAY [*] ) [ERR3] ; 00121600
IF SAMENAME (READRAY, FILEFIELD ) 00121700
THEN GO TO GOTAHIT END LOOP ; 00121800
ERR3 : ERROR3 ; 00121900
GOTAHIT : READ (READRAY [*], F3, TIPE, CHARCT, 00122000
WHERE, IFNUM ) ; 00122100
IF IFNUM ! 1 THEN ERROR23 ; 00122200
IF TIPE > 2 OR TIPE < 0 THEN ERROR24 ; 00122300
CASE TIPE OF BEGIN 00122400
BEGIN % TIPE 0 00122500
MOVEWORDS (FILEFIELD [1], 00122600
SQUEEZE8 [2|NUMCTR], 2 ) ; 00122700
TIPE0 : WHICHONE ~ 0 ; 00122800
NUMRECTOTLFLDS ~ NUMRECTOTLFLDS + 1 ; 00122900
NUMCTR ~ NUMCTR + 1 ; 00123000
A ~ NUMCTR ; 00123100
ADDRECKEY8[NUMRECTOTLFLDS, 0] ~ WHERE ; 00123200
ADDRECKEY8[NUMRECTOTLFLDS, 1] ~ CHARCT ; 00123300
ADDRECKEY8[NUMRECTOTLFLDS, 2] ~ NUMCTR ; 00123400
END OF TIPE 0 ; 00123500
BEGIN % TIPE 1 00123600
MOVEWORDS (FILEFIELD [1], 00123700
SQUEEZE8 [2|NUMCTR], 2 ) ; 00123800
WHICHONE ~ 0 ; 00123900
NUMDEVTOTLFLDS ~ NUMDEVTOTLFLDS + 1 ; 00124000
NUMCTR ~ NUMCTR + 1 ; 00124100
A ~ NUMCTR ; 00124200
ADDEVKEY8[NUMDEVTOTLFLDS, 0 ] ~ WHERE ; 00124300
ADDEVKEY8[NUMDEVTOTLFLDS, 01 ] ~ CHARCT ; 00124400
ADDEVKEY8[NUMDEVTOTLFLDS, 02 ] ~ NUMCTR ; 00124500
TURNONPLUGCASEBOOLEAN ; 00124600
END OF TIPE 1 ; 00124700
BEGIN % TIPE 2 00124800
WHICHONE ~ 2 ; 00124900
TIPE2 ~ TRUE ; 00125000
READ ( READRAY [*], F8, A, B, C ) ; 00125100
FOR I ~ 0 THRU CALCMAX DO BEGIN 00125200
IF NAMESAME (FILEFIELD, CALCDICT [I,*] ) 00125300
THEN BEGIN FOR J ~ 3 THRU 6 DO 00125400
ISCALC [CALCDICT[I,J] ] ~ TRUE ; 00125500
GO TO EDITDEC ; 00125600
END 00125700
END LOOP ; 00125800
ERROR25 ; 00125900
END TIPE 2 ; 00126000
END CASE STATEMENT ; 00126100
END 00126200
END 00126300
ELSE IF S > 9 AND TYPE = -2 % QUOTE CONSTANT 00126400
THEN BEGIN 00126500
WHICHONE ~ 3 ; 00126600
IF S > 60 THEN ERROR19 ; 00126700
CHARCT ~ S/10 ; 00126800
IFNUM ~ 0 ; 00126900
A ~ TQCHR DIV 100 ; 00127000
B ~ TQCHR DIV 10 MOD 10 ; 00127100
C ~ TQCHR MOD 10 ; 00127200
TQCHR ~ TQCHR + CHARCT ; 00127300
MOVECHAR (STRING,TOTALQUOT,A,B,C,CHARCT);00127400
END 00127500
ELSE ERROR20 ; 00127600
EDITDEC : IF IFNUM = 1 % NUMERIC FIELD ; 00127700
THEN BEGIN 00127800
IF CHARCT > 12 THEN ERROR30 ; 00127900
IF NOT TIPE2 THEN BEGIN 00128000
WHILE CHARCT < 8 AND SPASE > 1 DO BEGIN 00128100
CHARCT ~ CHARCT + 1 ; 00128200
SPASE ~ SPASE - 1 ; END LOOP ; 00128300
IF CHARCT > 8 THEN 00128400
WHILE CHARCT <12 AND SPASE > 1 DO BEGIN 00128500
CHARCT ~ CHARCT + 1 ; 00128600
SPASE ~ SPASE - 1 ; END LOOP ; 00128700
END 00128800
ELSE TIPE2 ~ FALSE ; 00128900
S ~ SCANIT ; 00129000
IF S = 0 00129100
THEN BEGIN IFDEC ~ 1 ; 00129200
DIGIT ~ CHARCT - IT ; 00129300
NUMDEC ~ IT ; 00129400
IF DIGIT < 0 THEN ERROR22 ; 00129500
END 00129600
ELSE BEGIN IFDEC ~ 0 ; 00129700
DIGIT ~ CHARCT ; 00129800
NUMDEC ~ 0 ; 00129900
END ; 00130000
END ; 00130100
FILLFIELDKEY (TOTLINEKEY8[2|(NUMTOTFLDS-1)], WHICHONE, 00130200
A, B, C, 00130300
CHARCT, IFNUM,IFDEC,DIGIT,NUMDEC,SPASE );00130400
TOTLCHR ~ TOTLCHR + CHARCT + SPASE +(IF IFNUM = 1 00130500
THEN IFDEC 00130600
ELSE 0); 00130700
IF TOTLCHR > 120 THEN ERROR28 ; 00130800
GO TO ENDCARD ; 00130900
END ; 00131000
END OF NESTED TOTALS BLOCK ; 00131100
%-----------------------------------------------------------------------00131200
EOF : 00131300
BEGIN %NESTED EOF BLOCK 00131400
LABEL GOTHIT, ERR26, ENDCARD ; 00131500
FOR I ~ 1 THRU CALCMAX DO BEGIN 00131600
IF ISCALC [I] 00131700
THEN FOR J ~ 0 THRU IMPDEVMAX DO BEGIN 00131800
IF I = IMPLYDEVELOPES [J,0] 00131900
AND COMPARE16CHAR(IMPLYDEVELOPES[J,1],SQUEEZE8, 00132000
NUMCTR ) = 63 00132100
COMMENT A TYPE 2 TOTAL FIELD REQUIRES THE PRESENCE OF 00132200
A TOTALED DEVELOPED FIELD WHICH HAS NOT BEEN CALLED 00132300
FOR BY ANY TOTAL CARD. THEREFORE, THE DEVELOPED FIELD00132400
MUST NOW BE SET ON, KEYED TO ACCUMULATE, AND BE 00132500
LISTED IN THE "SQUEEZE" ARRAY. ; 00132600
THEN BEGIN 00132700
MOVEWORDS (IMPLYDEVELOPES[J,1], FILEFIELD [1], 2 );00132800
FOR K ~ 1 THRU 1000 DO BEGIN 00132900
READ (DICTION [K], 3, READRAY [*] ) [ERR26] ; 00133000
IF SAMENAME (READRAY, FILEFIELD ) 00133100
THEN GO TO GOTHIT END DICTIONARY LOOP ; 00133200
ERR26 : ERROR26 ; 00133300
GOTHIT : READ (READRAY [*], F3, TIPE, CHARCT, WHERE, IFNUM);00133400
IF IFNUM ! 1 THEN ERROR23 ; 00133500
IF TIPE > 2 OR TIPE < 0 THEN ERROR24 ; 00133600
MOVEWORDS (FILEFIELD [1], SQUEEZE8 [2|NUMCTR], 2 );00133700
NUMCTR ~ NUMCTR +1 ; 00133800
CASE TIPE OF BEGIN 00133900
BEGIN % TIPE 0 00134000
NUMRECTOTLFLDS ~ NUMRECTOTLFLDS + 1 ; 00134100
ADDRECKEY8[NUMRECTOTLFLDS, 0] ~ WHERE ; 00134200
ADDRECKEY8[NUMRECTOTLFLDS, 1] ~ CHARCT ; 00134300
ADDRECKEY8[NUMRECTOTLFLDS, 2] ~ NUMCTR ; 00134400
END OF TIPE 0 ; 00134500
BEGIN % TIPE 1 00134600
NUMDEVTOTLFLDS ~ NUMDEVTOTLFLDS + 1 ; 00134700
ADDEVKEY8[NUMDEVTOTLFLDS, 0 ] ~ WHERE ; 00134800
ADDEVKEY8[NUMDEVTOTLFLDS, 01 ] ~ CHARCT ; 00134900
ADDEVKEY8[NUMDEVTOTLFLDS, 02 ] ~ NUMCTR ; 00135000
TURNONPLUGCASEBOOLEAN ; 00135100
END OF TIPE 1 ; 00135200
ERROR29 ; 00135300
END CASE STATEMENT ; 00135400
ENDCARD : END ; 00135500
END IMPLY LOOP ; 00135600
END ISCALC LOOP ; 00135700
IF INDENT = 0 THEN INDENT ~ 1 ; 00135800
IF DATERAY [0] = 0 00135900
THEN BEGIN 00136000
NAME ~ YRDAYTONORM (TIME(0) ) ; 00136100
WRITE (DATERAY [*], D, NAME.[24:12], NAME.[36:12], 00136200
NAME.[12:12] ) ; 00136300
END 00136400
ELSE IF DATERAY [2] = 0 THEN DATERAY [2] ~ " " ; 00136500
IF LINEMAX = 0 THEN LINEMAX ~ 60 ; 00136600
BOMTITLELINECT ~ LINEMAX - 2 | NUMBOMTITLES ; 00136700
LINEMAX ~ BOMTITLELINECT - 3 | NUMCTL - 2 ; 00136800
IF NUMBOMTITLES > 0 THEN LINEMAX ~ LINEMAX - 3 ; 00136900
IF NUMLINEFLDS > 0 THEN BEGIN 00137000
LISTING ~ TRUE ; 00137100
A ~ 120 - LINECHR ; 00137200
IF A > 63 THEN BEGIN B ~ A - 63 ; 00137300
A ~ 63 ; 00137400
END 00137500
ELSE B ~ 0 ; 00137600
FIELDKEY8 [0].[6:6] ~ NUMLINEFLDS ; 00137700
FIELDKEY8 [0].[12:6] ~ A ; 00137800
FIELDKEY8 [0].[18:6] ~ B ; 00137900
END 00138000
ELSE NUMLINEFLDS ~ 1 ; 00138100
IF NUMTOTFLDS > 0 THEN BEGIN 00138200
TOTALING ~ TRUE ; 00138300
A ~ 120 - TOTLCHR ; 00138400
IF A > 63 THEN BEGIN B ~ A - 63 ; 00138500
A ~ 63 ; 00138600
END 00138700
ELSE B ~ 0 ; 00138800
TOTLINEKEY8 [0].[6:6] ~ NUMTOTFLDS ; 00138900
TOTLINEKEY8 [0].[12:6] ~ A ; 00139000
TOTLINEKEY8 [0].[18:6] ~ B ; 00139100
END 00139200
ELSE NUMTOTFLDS ~ 1 ; 00139300
KEYARRAY8 [1].[6:6] ~ NUMCTL ; 00139400
DBLBRKMAX ~ DBLCTLMAX ~ 2 | NUMCTL ; 00139500
IF NUMCTL > 0 THEN BREAKING ~ TRUE 00139600
ELSE DBLCTLMAX ~ 1 ; 00139700
IF NUMRECTOTLFLDS > 0 THEN RECORDTOTALING ~ TRUE 00139800
ELSE NUMRECTOTLFLDS ~ 1 ; 00139900
IF NUMDEVTOTLFLDS > 0 THEN DEVTOTALING ~ TRUE 00140000
ELSE NUMDEVTOTLFLDS ~ 1 ; 00140100
FOR I ~ 0 THRU PLUGMAX DO 00140200
IF ISDEVELOPE [I] THEN DEVELOPING ~ TRUE ; 00140300
FOR I ~ 0 THRU CALCMAX DO 00140400
IF ISCALC [I] THEN CALCULATING ~ TRUE ; 00140500
WRITE (PTR, F4, NUMERR ) ; 00140600
IF NUMERR > 0 THEN GO TO ENDJOB ; 00140700
WRITE (PTR [PAGE] ) ; 00140800
IF NUMTOPTITLES > 0 THEN TOPTITLEXISTS ~ TRUE ; 00140900
IF NUMBOMTITLES > 0 THEN BOMTITLEXISTS ~ TRUE ; 00141000
IF NUMHEDLINES > 0 THEN COLUMNHEADINGS ~ TRUE 00141100
ELSE NUMHEDLINES ~ 1 ; 00141200
END OF NESTED EOF BLOCK ; 00141300
END OF PRE EDIT BLOCK ; 00141400
%-----------------------------------------------------------------------00141500
BEGIN 00141600
COMMENT THIS BLOCK GENERATES THE WRITTEN REPORT. ; 00141700
LABEL CONTROL, DEVELOPE, CTLBRK, EOJ ; 00141800
FILE IN INFILE DISK SERIAL (2, NUMWDSPEREC, NUMWDSPERBLK ); 00141900
INTEGER ARRAY ADDRECKEY [1:NUMRECTOTLFLDS, 0:2] , 00142000
ADDEVKEY [1:NUMDEVTOTLFLDS, 0:2] ; 00142100
ARRAY CTLID [0:DBLCTLMAX+1], 00142200
CTLWD [0:DBLCTLMAX+1], 00142300
STORECTL [0:DBLCTLMAX+1] , 00142400
COLUMNHEADS [1:NUMHEDLINES, 0:19 ] , 00142500
TOPTITLERAY [0:NUMTOPTITLES, 0:10] , 00142600
BOMTITLERAY [0:NUMBOMTITLES, 0:10] , 00142700
SQUEEZE [0: 2|NUMCTR ], 00142800
KEYARRAY [1:IF NUMCTL > 0 THEN NUMCTL ELSE 1], 00142900
FIELDKEY [0: 2|NUMLINEFLDS-1 ], 00143000
TOTLINEKEY[0:2|NUMTOTFLDS-1 ] , 00143100
OUTARRAY [0:14 ] , 00143200
FILERAY [1:NUMWDSPEREC ], 00143300
TOTARRAY [0:DEVELOPEARRAYMAX], 00143400
DEVARRAY [0:DEVELOPEARRAYMAX]; 00143500
SAVE INTEGER ARRAY COUNTERS [-1:NUMCTL, 0:NUMCTR ] ; 00143600
INTEGER BRK, DBLBRK, LINECT ; 00143700
BOOLEAN JUSTBROKE ; 00143800
%-----------------------------------------------------------------------00143900
DEFINE REPLACEOVERSIZEDARRAYS = 00144000
NUMTOPTITLES ~ NUMTOPTITLES - 1 ; %COMPENSATE DOWNSHIFT IN 00144100
NUMBOMTITLES ~ NUMBOMTITLES - 1 ; %DECLARATION OF ARRAY 00144200
%LOWER LIMITS 00144300
FOR I ~ 0 THRU DBLBRKMAX+1 DO CTLID[I] ~ CTLID8 [I] ; 00144400
FILL CTLID [*] WITH "00F I N ", "00A L " ; 00144500
FILL STORECTL[*]WITH "00T O T ", "00A L " ; 00144600
FOR I ~ 1 THRU NUMHEDLINES DO 00144700
WRITE (COLUMNHEADS [I,*], 20, COLUMNHEADS8 [I,*] ) ; 00144800
FOR I ~ 1 THRU NUMRECTOTLFLDS DO 00144900
WRITE (ADDRECKEY [I,*], 3, ADDRECKEY8[I,*] ) ; 00145000
FOR I ~ 1 THRU NUMDEVTOTLFLDS DO 00145100
WRITE (ADDEVKEY [I,*], 3, ADDEVKEY8 [I,*] ) ; 00145200
FOR I ~ 0 THRU NUMTOPTITLES DO 00145300
WRITE (TOPTITLERAY[I,*],11,TOPTITLERAY8[I+1,*] ) ; 00145400
FOR I ~ 0 THRU NUMBOMTITLES DO 00145500
WRITE (BOMTITLERAY[I,*],11,BOMTITLERAY8[I+1,*] ) ; 00145600
MOVEWORDS (SQUEEZE8, SQUEEZE, 2|NUMCTR ) ; 00145700
MOVEWORDS (KEYARRAY8, KEYARRAY, NUMCTL ) ; 00145800
MOVEWORDS (FIELDKEY8, FIELDKEY, 2|NUMLINEFLDS ); 00145900
MOVEWORDS (TOTLINEKEY8, TOTLINEKEY, 2|NUMTOTFLDS ) # ; 00146000
%-----------------------------------------------------------------------00146100
PROCEDURE PRINTOP ; 00146200
BEGIN 00146300
OWN INTEGER PAGENO ; 00146400
FORMAT F (3A6, X90, I3 ); 00146500
PAGENO ~ PAGENO + 1 ; 00146600
WRITE (PTR, F, FOR I ~ 0 THRU 2 DO DATERAY [I], PAGENO ); 00146700
WRITE (PTR [DBL] ) ; 00146800
LINECT ~ 4 ; 00146900
IF TOPTITLEXISTS THEN BEGIN 00147000
FOR I ~ 0 THRU NUMTOPTITLES DO BEGIN 00147100
WRITE (PTR, T, FOR J ~ 0 THRU 10 DO TOPTITLERAY [I,J] ) ; 00147200
LINECT ~ LINECT + 2 END ; 00147300
WRITE (PTR [DBL] ); 00147400
LINECT ~ LINECT + 2 ; 00147500
END ; 00147600
END OF PRINTOP PROCEDURE ; 00147700
%-----------------------------------------------------------------------00147800
PROCEDURE PRINTBOTTOMTITLES ; 00147900
BEGIN 00148000
WHILE LINECT < BOMTITLELINECT 00148100
DO BEGIN WRITE (PTR ); LINECT ~ LINECT +1 ; END ; 00148200
FOR I ~ 0 THRU NUMBOMTITLES DO 00148300
WRITE (PTR, T, FOR J ~ 0 THRU 10 DO BOMTITLERAY [I,J] ) ; 00148400
END OF PRINTBOTTOMTITLES PROCEDURE ; 00148500
%-----------------------------------------------------------------------00148600
PROCEDURE PRINTBOTTOM ; 00148700
BEGIN 00148800
IF BOMTITLEXISTS THEN PRINTBOTTOMTITLES ; 00148900
WRITE (PTR [PAGE] ); 00149000
PRINTOP ; 00149100
JUSTBROKE ~ FALSE ; 00149200
END OF PRINTBOTTOM PROCEDURE ; 00149300
%-----------------------------------------------------------------------00149400
DEFINE SKIPHEADERECORDS = FOR I ~ 1 THRU NUMHDREC DO 00149500
READ (INFILE ) # ; 00149600
%-----------------------------------------------------------------------00149700
STREAM PROCEDURE ASSEMBLECONTROLS (STRING, KEY, CTLWDS, DEVARRAY ) ; 00149800
BEGIN 00149900
LOCAL NUMCTL, SAVEKEY, SAVEFILE, SAVECTL, R1,R2,R3,R4, 00150000
A, B, C, CHARCT, WHICHONE ; 00150100
LABEL CH1,CH2,CH3,CH4,CH5,CH6,CH7,CH8,CH9,CH10,CH11,CH12, 00150200
MOVEALFA, RDFILE, POINT ; 00150300
SI ~ KEY ; 00150400
SAVEKEY ~ SI ; 00150500
SI ~ SI + 1 ; 00150600
DI ~ LOC NUMCTL ; 00150700
DI ~ DI +7 ; 00150800
DS ~ CHR ; 00150900
DI ~ CTLWDS ; 00151000
SAVECTL ~ DI ; 00151100
NUMCTL ( SI ~ SAVEKEY ; % ALL FOLLOWING REPEATS NUMCTL TIMES 00151200
SI ~ SI +3 ; 00151300
DI ~ LOC WHICHONE ; DI ~ DI + 7 ; DS ~ CHR ; 00151400
DI ~ LOC A ; DI ~ DI + 7 ; DS ~ CHR ; 00151500
DI ~ LOC B ; DI ~ DI + 7 ; DS ~ CHR ; 00151600
DI ~ LOC C ; DI ~ DI + 7 ; DS ~ CHR ; 00151700
DI ~ LOC CHARCT ; DI ~ DI + 7 ; DS ~ CHR ; 00151800
SAVEKEY ~ SI ; 00151900
CI ~ CI + WHICHONE ; 00152000
GO TO RDFILE ; 00152100
SI ~ DEVARRAY ; 00152200
GO TO POINT ; 00152300
RDFILE : SI ~ STRING ; 00152400
POINT : A(2(SI ~ SI +50 )); 00152500
B( SI ~ SI +10 ) ; 00152600
SI ~ SI + C ; % SI POINTS TO KEY WORD IN STRING 00152700
SAVEFILE ~ SI ; 00152800
DI ~ SAVECTL ; 00152900
CI ~ CI + CHARCT ; 00153000
GO TO CH1 ; 00153100
GO TO CH1 ; 00153200
GO TO CH2 ; 00153300
GO TO CH3 ; 00153400
GO TO CH4 ; 00153500
GO TO CH5 ; 00153600
GO TO CH6 ; 00153700
GO TO CH7 ; 00153800
GO TO CH8 ; 00153900
GO TO CH9 ; 00154000
GO TO CH10 ; 00154100
GO TO CH11 ; 00154200
GO TO CH12 ; 00154300
COMMENT SUBROUTINE AT CHI ASSIGNS VALUES TO REPEAT 00154400
FACTORS (R1,R2,R3,R4) CORRESPONDING TO 00154500
CHARCT = 1. THESE REPEAT FACTORS ARE USED TO 00154600
LOAD THE OUTPUT COUPLET WITH CHARACTERS AND 00154700
BLANKS ; 00154800
CH1 : TALLY ~ 1 ; R1 ~ TALLY ; 00154900
TALLY ~ 5 ; R2 ~ TALLY ; 00155000
TALLY ~ 0 ; R3 ~ TALLY ; 00155100
TALLY ~ 6 ; R4 ~ TALLY ; 00155200
GO TO MOVEALFA ; 00155300
CH2 : TALLY ~ 2 ; R1 ~ TALLY ; 00155400
TALLY ~ 4 ; R2 ~ TALLY ; 00155500
TALLY ~ 0 ; R3 ~ TALLY ; 00155600
TALLY ~ 6 ; R4 ~ TALLY ; 00155700
GO TO MOVEALFA ; 00155800
CH3 : TALLY ~ 3 ; R1 ~ TALLY ; 00155900
TALLY ~ 3 ; R2 ~ TALLY ; 00156000
TALLY ~ 0 ; R3 ~ TALLY ; 00156100
TALLY ~ 6 ; R4 ~ TALLY ; 00156200
GO TO MOVEALFA ; 00156300
CH4 : TALLY ~ 4 ; R1 ~ TALLY ; 00156400
TALLY ~ 2 ; R2 ~ TALLY ; 00156500
TALLY ~ 0 ; R3 ~ TALLY ; 00156600
TALLY ~ 6 ; R4 ~ TALLY ; 00156700
GO TO MOVEALFA ; 00156800
CH5 : TALLY ~ 5 ; R1 ~ TALLY ; 00156900
TALLY ~ 1 ; R2 ~ TALLY ; 00157000
TALLY ~ 0 ; R3 ~ TALLY ; 00157100
TALLY ~ 6 ; R4 ~ TALLY ; 00157200
GO TO MOVEALFA ; 00157300
CH6 : TALLY ~ 6 ; R1 ~ TALLY ; 00157400
TALLY ~ 0 ; R2 ~ TALLY ; 00157500
TALLY ~ 0 ; R3 ~ TALLY ; 00157600
TALLY ~ 6 ; R4 ~ TALLY ; 00157700
GO TO MOVEALFA ; 00157800
CH7 : TALLY ~ 6 ; R1 ~ TALLY ; 00157900
TALLY ~ 0 ; R2 ~ TALLY ; 00158000
TALLY ~ 1 ; R3 ~ TALLY ; 00158100
TALLY ~ 5 ; R4 ~ TALLY ; 00158200
GO TO MOVEALFA ; 00158300
CH8 : TALLY ~ 6 ; R1 ~ TALLY ; 00158400
TALLY ~ 0 ; R2 ~ TALLY ; 00158500
TALLY ~ 2 ; R3 ~ TALLY ; 00158600
TALLY ~ 4 ; R4 ~ TALLY ; 00158700
GO TO MOVEALFA ; 00158800
CH9 : TALLY ~ 6 ; R1 ~ TALLY ; 00158900
TALLY ~ 0 ; R2 ~ TALLY ; 00159000
TALLY ~ 3 ; R3 ~ TALLY ; 00159100
TALLY ~ 3 ; R4 ~ TALLY ; 00159200
GO TO MOVEALFA ; 00159300
CH10 : TALLY ~ 6 ; R1 ~ TALLY ; 00159400
TALLY ~ 0 ; R2 ~ TALLY ; 00159500
TALLY ~ 4 ; R3 ~ TALLY ; 00159600
TALLY ~ 2 ; R4 ~ TALLY ; 00159700
GO TO MOVEALFA ; 00159800
CH11 : TALLY ~ 6 ; R1 ~ TALLY ; 00159900
TALLY ~ 0 ; R2 ~ TALLY ; 00160000
TALLY ~ 5 ; R3 ~ TALLY ; 00160100
TALLY ~ 1 ; R4 ~ TALLY ; 00160200
GO TO MOVEALFA ; 00160300
CH12 : TALLY ~ 6 ; R1 ~ TALLY ; 00160400
TALLY ~ 0 ; R2 ~ TALLY ; 00160500
TALLY ~ 6 ; R3 ~ TALLY ; 00160600
TALLY ~ 0 ; R4 ~ TALLY ; 00160700
MOVEALFA : DS ~ 2 LIT "0" ; 00160800
DS ~ R1 CHR ; 00160900
R2 (DS ~ LIT " " ); 00161000
DS ~ 2 LIT "0" ; 00161100
DS ~ R3 CHR ; 00161200
R4 (DS ~ LIT " " ); 00161300
SAVECTL ~ DI ; ) ; 00161400
END OF ASSEMBLECONTROLWORDS PROCEDURE ; 00161500
%-----------------------------------------------------------------------00161600
PROCEDURE WRITECONTROLS ; 00161700
BEGIN 00161800
FORMAT INDIC (X*, 2A6, X2, 2A6 /) ; 00161900
IF JUSTBROKE AND PGBRK } DBLBRK 00162000
OR LINECT } LINEMAX THEN PRINTBOTTOM ; 00162100
FOR I ~ DBLBRK STEP 2 UNTIL DBLBRKMAX DO BEGIN 00162200
WRITE (PTR, INDIC , INDENT | I , 00162300
CTLID[I], CTLID[I+1], CTLWD[I], CTLWD[I+1] ); 00162400
LINECT ~ LINECT + 2 ; END ; 00162500
WRITE (PTR [DBL] ); 00162600
LINECT ~ LINECT + 2 ; 00162700
END OF WRITECONTROLS PROCEDURE ; 00162800
%-----------------------------------------------------------------------00162900
DEFINE STORECONTROLS = FOR I ~ DBLBRK THRU DBLBRKMAX+1 DO 00163000
STORECTL [I] ~ CTLWD [I] # ; 00163100
%-----------------------------------------------------------------------00163200
PROCEDURE PRINTCOLUMNHEADS ; 00163300
BEGIN 00163400
FOR I ~ 1 THRU NUMHEDLINES DO 00163500
WRITE (PTR, H, FOR J ~ 0 THRU 19 DO COLUMNHEADS [I,J] ) ; 00163600
WRITE (PTR [DBL] ) ; 00163700
LINECT ~ LINECT + NUMHEDLINES + 2 ; 00163800
END OF PRINTCOLUMNHEADS PROCEDURE ; 00163900
%-----------------------------------------------------------------------00164000
DEFINE COMPARECONTROLS = FOR I ~ 2 THRU DBLBRKMAX+1 DO 00164100
IF CTLWD [I] ! STORECTL [I] 00164200
THEN BEGIN IF I MOD 2 = 0 00164300
THEN DBLBRK ~ I 00164400
ELSE DBLBRK ~ I-1 ; 00164500
JUSTBROKE ~ TRUE ; 00164600
GO TO CTLBRK ; 00164700
END # ; 00164800
%-----------------------------------------------------------------------00164900
DEFINE DEVELOPEOUTPUTLINE = 00165000
COUNTERS [NUMCTL,0] ~ COUNTERS [NUMCTL,0] + 1 ; 00165100
% TALLY OF RECORDS PROCESSED 00165200
IF LISTING THEN 00165300
ASSEMBLELINE (FILERAY, DEVARRAY, QUOTARRAY, 00165400
FIELDKEY, OUTARRAY ) ; 00165500
IF RECORDTOTALING THEN 00165600
ADDFIELDTOCOUNTERS (FILERAY, ADDRECKEY, NUMRECTOTLFLDS ); 00165700
IF DEVTOTALING THEN 00165800
ADDFIELDTOCOUNTERS (DEVARRAY, ADDEVKEY, NUMDEVTOTLFLDS )#;00165900
%-----------------------------------------------------------------------00166000
PROCEDURE ADDFIELDTOCOUNTERS (INARRAY, INKEY, NUMKEY ) ; 00166100
VALUE NUMKEY ; 00166200
ARRAY INARRAY[*] , INKEY[1,0] ; 00166300
INTEGER NUMKEY ; 00166400
BEGIN 00166500
INTEGER WORK, CTR ; 00166600
FORMAT F (X*, I* ); 00166700
FOR I ~ 1 THRU NUMKEY DO BEGIN 00166800
READ(INARRAY[*], F, INKEY [I,0], INKEY [I,1], WORK ) ; 00166900
CTR ~ INKEY [I,2] ; 00167000
COUNTERS [NUMCTL,CTR] ~ COUNTERS [NUMCTL,CTR] + WORK ; 00167100
END LOOP ; 00167200
END OF ADDFIELDTOCOUNTERS PROCEDURE ; 00167300
%-----------------------------------------------------------------------00167400
INTEGER PROCEDURE COUNTERINDEX (FIELDNAME ); 00167500
ARRAY FIELDNAME [0] ; 00167600
BEGIN 00167700
COMMENT COUNTERINDEX IS THE INDEX NUMBER (OR SUBSCRIPT) OF A FIELD 00167800
IN THE ARRAY OF TOTAL COUNTERS. FIELDNAME IS THE NAME OF A 00167900
FIELD WHICH EITHER APPEARS ON A TOTAL CARD, OR IS IMPLIED BY A 00168000
TOTAL CARD CONTAINING A TYPE 2 FIELD. 00168100
FIELDNAME IS A TWO WORD ARRAY [0:1]. 00168200
FIELDNAME MUST BE FILLED WITH ALL 16 CHARACTERS OF THE 00168300
FIELD NAME. 00168400
THE MINOR COUNTER IS "COUNTERS [NUMCTL, <COUNTERINDEX> ] ". 00168500
ANY TOTAL COUNTER IS "COUNTERS [ BRK , <COUNTERINDEX> ] "; 00168600
COUNTERINDEX ~ COMPARE16CHAR (FIELDNAME,SQUEEZE [0], 00168700
NUMCTR ); 00168800
END OF PROCEDURE COUNTERINDEX ; 00168900
%-----------------------------------------------------------------------00169000
STREAM PROCEDURE MOVECHAR (N,SOURCE,SSKIP,DEST,DSKIP); 00169100
VALUE N,SSKIP,DSKIP; 00169200
BEGIN 00169300
SI ~ SOURCE; DI ~ DEST ; 00169400
SI ~ SI + SSKIP; DI ~ DI + DSKIP; 00169500
DS ~ N CHR ; 00169600
END ; 00169700
%-----------------------------------------------------------------------00169800
STREAM PROCEDURE UNPACKTODEST (NOM, DIGITS, DEST, DSKIP ) ; 00169900
VALUE NOM, DIGITS, DSKIP ; 00170000
BEGIN 00170100
LOCAL DSKIP1 ; 00170200
SI ~ LOC DSKIP ; 00170300
SI ~ SI + 6 ; 00170400
DI ~ LOC DSKIP1 ; 00170500
DI ~ DI + 7 ; 00170600
DS ~ CHR ; 00170700
SI ~ LOC NOM ; 00170800
DI ~ DEST ; 00170900
DSKIP1 (2 (DI ~ DI + 32 ) ) ; 00171000
DI ~ DI + DSKIP ; 00171100
DS ~ DIGITS DEC ; 00171200
END UNPACKTODEST PROCEDURE ; 00171300
%-----------------------------------------------------------------------00171400
COMMENT PROCEDURES TO BE PLUGGED INTO THE CASE STATEMENT OF THIS PRO- 00171500
CEDURE MAY DEVELOPE LINE FIELDS ONLY, NOT TOTAL FIELDS. 00171600
THESE FIELDS ARE OF TYPE 1 IN THE DICTIONARY ENTRY. 00171700
PLUG-INS MAY MOVE&EDIT FROM"FILERAY"WHICH CONTAINS THE INPUT 00171800
RECORD. SUBTOTALS FROM THE MINOR COUNTERS ARE REFERENCED AS 00171900
COUNTERS[NUMCTL, <INDEX> ] 00172000
WHERE <INDEX> IS OBTAINED FROM THE PROCEDURE COUNTERINDEX. 00172100
RESULTS OF PREVIOUS PLUG-INS MAY PICKED UP FROM DEVARRAY IN 00172200
DISPLAY FORM WITH A MOVE EDIT. IF A PLUG-IN IS EXECUTED, IT 00172300
WILL BE EXECUTED IN THE ORDER IN WHICH IT APPEARS IN THE CASE 00172400
STATEMENT. 00172500
EVERY PLUG-IN MUST PUT ITS OUTPUT IN DISPLAY FORM INTO 00172600
"DEVARRAY", IN POSITIONS IMMEDIATELY FOLLOWING THOSE ALLOCATED 00172700
TO THE PREVIOUS PLUG-IN. 00172800
ALL PLUG-INS REQUIRE THE UPDATEING OF BOTH THE "DICTION" FILE 00172900
AND THE "SETPLUG" PROCEDURE. ; 00173000
%-----------------------------------------------------------------------00173100
%-----------------------------------------------------------------------00173200
COMMENT CALCULATION PROCEDURES TO BE PLUGGED IN WILL CALCULATE TOTAL 00173300
FIELDS ONLY (TYPE 2 ). 00173400
COUNTERS [BRK, <INDEX> ] WILL REFERENCE THE TOTAL COUNTERS 00173500
WHERE <INDEX> IS OBTAIN FROM THE PROCEDURE CONVERTINDEX. 00173600
RESULTS OF PREVIOUS CALCULATIONS MAY BE PICKED UP FROM 00173700
DEVARRAY. 00173800
EVERY CALCULATION PROCEDURE MAY BE CALLED IN THE ORDER IN 00173900
WHICH IT APPEARS IN THE CASE STATEMENT. ITS OUTPUT MUST BE 00174000
PUT INTO DEVARRAY (DISPLAY FORM) IN THE POSITIONS ALLOCATED 00174100
TO IT. 00174200
ALL PLUG-INS REQUIRE THE UPDATEINGOF BOTH THE "DICTION" FILE 00174300
AND THE "SETCALC" PROCEDURE. ; 00174400
%-----------------------------------------------------------------------00174500
PROCEDURE FILLDEVELOPEARRAY ; % DEVELOPE EACH RECORD 00174600
BEGIN 00174700
INTEGER I ; 00174800
FOR I ~1 THRU PLUGMAX DO 00174900
IF ISDEVELOPE [I] THEN 00175000
CASE I OF BEGIN 00175100
; % 0 CASE NUMBER (ZERO IS NULL) 00175200
END CASE STATEMENT ; 00175300
END OF FILLDEVELOPEARRAY ; 00175400
%-----------------------------------------------------------------------00175500
PROCEDURE CALCULATEDEVELOPEARRAY ; % FOR TOTAL CALCULATIONS 00175600
BEGIN 00175700
INTEGER I ; 00175800
FOR I ~ 1 THRU CALCMAX DO 00175900
IF ISCALC [I] THEN 00176000
CASE I OF BEGIN 00176100
; % 0 CASE NUMBER (ZERO IS NULL) 00176200
END ; 00176300
END OF CALCULATEDEVELOPEARRAY ; 00176400
%-----------------------------------------------------------------------00176500
PROCEDURE ACCESSRECORD ; 00176600
BEGIN 00176700
LABEL ACCESS ; 00176800
ACCESS : READ (INFILE, NUMWDSPEREC, FILERAY [*] ) [EOJ] ; 00176900
00177000
00177100
IF DEVELOPING THEN FILLDEVELOPEARRAY ; 00177200
END ACCESSRECORD PROCEDURE ; 00177300
%-----------------------------------------------------------------------00177400
STREAM PROCEDURE ASSEMBLELINE (FILERAY, DEVARRAY, QUOTARRAY, 00177500
FIELDKEY, OUTARRAY );00177600
BEGIN 00177700
LOCAL NUMFIELDS, BLANK1, BLANK2, 00177800
SAVEKEY, WHICHONE, A,B,C, CHARCT, IFNUM, IFDEC, 00177900
DIGIT, NUMDEC, SPASE, WHEREOUT, MOREWORK, WORK, 00178000
MORE64, PWR64, ENDSUM ; 00178100
LABEL RDFILE, RDDEV, POINT, NUMERICS, ENDLOOP, GETCTR, FAIL ; 00178200
SI ~ FIELDKEY ; 00178300
SAVEKEY ~ SI ; 00178400
SI ~ SI + 1 ; 00178500
DI ~ LOC NUMFIELDS ; DI ~ DI + 7 ; DS ~ CHR ; 00178600
DI ~ LOC BLANK1 ; DI ~ DI + 7 ; DS ~ CHR ; 00178700
DI ~ LOC BLANK2 ; DI ~ DI + 7 ; DS ~ CHR ; 00178800
DI ~ OUTARRAY ; 00178900
WHEREOUT ~ DI ; 00179000
NUMFIELDS ( SI ~ SAVEKEY ; 00179100
SI ~ SI +6 ; 00179200
DI ~ LOC WHICHONE ; DI ~ DI + 7 ; DS ~ CHR ; 00179300
DI ~ LOC A ; DI ~ DI + 7 ; DS ~ CHR ; 00179400
DI ~ LOC B ; DI ~ DI + 7 ; DS ~ CHR ; 00179500
DI ~ LOC C ; DI ~ DI + 7 ; DS ~ CHR ; 00179600
DI ~ LOC CHARCT ; DI ~ DI + 7 ; DS ~ CHR ; 00179700
DI ~ LOC IFNUM ; DI ~ DI + 7 ; DS ~ CHR ; 00179800
DI ~ LOC IFDEC ; DI ~ DI + 7 ; DS ~ CHR ; 00179900
DI ~ LOC DIGIT ; DI ~ DI + 7 ; DS ~ CHR ; 00180000
DI ~ LOC NUMDEC ; DI ~ DI + 7 ; DS ~ CHR ; 00180100
DI ~ LOC SPASE ; DI ~ DI + 7 ; DS ~ CHR ; 00180200
SAVEKEY ~ SI ; 00180300
CI ~ CI + WHICHONE ; 00180400
GO TO GETCTR ; 00180500
GO TO RDFILE ; 00180600
GO TO RDDEV ; 00180700
SI ~ QUOTARRAY ; 00180800
GO TO POINT ; 00180900
RDFILE : SI ~ FILERAY ; 00181000
GO TO POINT ; 00181100
RDDEV : SI ~ DEVARRAY ; 00181200
POINT : A(2(SI ~ SI +50)) ; 00181300
B (SI ~ SI +10 ) ; 00181400
SI ~ SI + C ; 00181500
IFNUM (JUMP OUT TO NUMERICS) ; 00181600
DI ~ WHEREOUT ; % ALPHANUMERICS 00181700
SPASE (DS ~ LIT " " ) ; 00181800
DS ~ CHARCT CHR ; 00181900
WHEREOUT ~ DI ; 00182000
GO TO ENDLOOP ; 00182100
GETCTR : SI ~ FILERAY ; % POINT TO ACTUAL PARAMETER, COUNTERS 00182200
A (SI ~ SI + 8 ); 00182300
DI ~ LOC WORK ; 00182400
DS ~ CHARCT DEC ; 00182500
SI ~ LOC WORK ; 00182600
IF TOGGLE THEN GO TO NUMERICS ; 00182700
SI ~ LOC CHARCT ; 00182800
SI ~ SI + 7 ; 00182900
IF SC } "0" THEN IF SC { "8" 00183000
THEN BEGIN 00183100
SI ~ LOC SPASE ; 00183200
SI ~ SI + 7 ; 00183300
IF SC = "0" THEN GO TO FAIL ; 00183400
IF SC = "1" THEN GO TO FAIL ; 00183500
4 (TALLY ~ CHARCT ; 00183600
TALLY ~ TALLY + 1 ; 00183700
CHARCT ~ TALLY ; 00183800
TALLY ~ DIGIT ; 00183900
TALLY ~ TALLY + 1 ; 00184000
DIGIT ~ TALLY ; 00184100
TALLY ~ SPASE ; 00184200
TALLY ~ TALLY + 63 ; 00184300
SPASE ~ TALLY ; 00184400
SI ~ LOC CHARCT ; 00184500
SI ~ SI + 7 ; 00184600
IF SC > "9" THEN JUMP OUT ; % SC = 12 00184700
SI ~ LOC SPASE ; 00184800
SI ~ SI + 7 ; 00184900
IF SC = "1" THEN JUMP OUT ) ; 00185000
END ; 00185100
SI ~ FILERAY ; 00185200
A ( SI ~ SI + 8 ) ; 00185300
SKIP 9 SB ; 00185400
DI ~ LOC A ; 00185500
DI ~ DI + 7 ; 00185600
DS ~ 3 RESET ; 00185700
3 (IF SB THEN DS ~ SET ELSE DS ~ RESET ; SKIP SB ) ; 00185800
DI ~ LOC B ; DI ~ DI + 7 ; DS ~ CHR ; 00185900
DI ~ LOC C ; DI ~ DI + 7 ; DS ~ CHR ; 00186000
DI ~ LOC ENDSUM ; 00186100
DS ~ 4 LIT "0" ; 00186200
DS ~ 4 CHR ; 00186300
SI ~ LOC ENDSUM ; 00186400
DI ~ LOC WORK ; 00186500
DS ~ 4 LIT "0" ; 00186600
DS ~ 8 DEC ; % WORK EXTENDS INTO MOREWORK 00186700
DI ~ LOC PWR64 ; % PWR64 EXTENDS INTO MORE64 00186800
DS ~ 12 LIT "068719476736" ; % SIXTH POWER OF 64 00186900
A ( SI ~ LOC PWR64 ; DI ~ LOC WORK ; DS ~ 12 ADD ) ; 00187000
DI ~ LOC PWR64 ; 00187100
DS ~ 12 LIT "001073741824" ; % FIFTH POWER OF 64 00187200
B ( SI ~ LOC PWR64 ; DI ~ LOC WORK ; DS ~ 12 ADD ) ; 00187300
DI ~ LOC PWR64 ; 00187400
DS ~ 12 LIT "000016777216" ; % FOURTH POWER OF 64 00187500
C ( SI ~ LOC PWR64 ; DI ~ LOC WORK ; DS ~ 12 ADD ) ; 00187600
DI ~ LOC WORK ; DI ~ DI + 11 ; DS ~ 2 RESET ; 00187700
TALLY ~ 12 ; 00187800
CHARCT (TALLY ~ TALLY + 63) ; 00187900
A ~ TALLY ; % A = 12 - CHARCT 00188000
SI ~ LOC WORK ; 00188100
A (IF SC = "0" THEN SI ~ SI+1 ELSE JUMP OUT TO FAIL) ; 00188200
GO TO NUMERICS ; 00188300
FAIL : DI ~ WHEREOUT ; 00188400
SPASE (DS ~ LIT " " ) ; 00188500
CHARCT(DS ~ LIT "*") ; 00188600
IFDEC (DS ~ LIT "*") ; 00188700
WHEREOUT ~ DI ; 00188800
GO TO ENDLOOP ; 00188900
NUMERICS : 00189000
DIGIT (C ~ SI ; DI ~ C ; 00189100
TALLY ~ DIGIT ; 00189200
TALLY ~ TALLY + 63 ; 00189300
DIGIT ~ TALLY ; 00189400
DS ~ DIGIT FILL ; % ZERO SURPRESS WHOLE DIGITS EXCEPT LAST00189500
IFDEC (DS ~ FILL);% ALSO SURPRESS LAST IF FOLLOWED BY DEC.00189600
TALLY ~ TALLY + 1; 00189700
DIGIT ~ TALLY ; 00189800
JUMP OUT ) ; 00189900
DI ~ WHEREOUT ; 00190000
SPASE (DS ~ LIT " " ) ; 00190100
DS ~ DIGIT CHR ; 00190200
IFDEC (DS ~ LIT "." ); 00190300
DS ~ NUMDEC CHR ; 00190400
WHEREOUT ~ DI ; 00190500
ENDLOOP : ; ) ; 00190600
BLANK1 (DS ~ LIT " " ) ; 00190700
BLANK2 (DS ~ LIT " " ) ; 00190800
END OF ASSEMBLELINE PROCEDURE ; 00190900
%-----------------------------------------------------------------------00191000
PROCEDURE PRINTOTALS ; 00191100
BEGIN 00191200
COMMENT PRINTOTALS DOES - PRINT INDICATIVE CONTROLS. 00191300
- FILL TOTARRAY WITH CALCULATIONS FROM 00191400
THE TOTAL COUNTERS. 00191500
- ASSEMBLE & PRINT OUTPUT FROM COUNTERS, 00191600
DEVARRAY, AND TOTALQUOT ARRAY. 00191700
- ROLL AND CLEAR COUNTERS. ; 00191800
FORMAT TOTAL (X*,2A6, X2, 2A6, X2, "***TOTAL***" ) ; 00191900
IF LINECT } LINEMAX 00192000
THEN PRINTBOTTOM 00192100
ELSE BEGIN WRITE (PTR [DBL] ); 00192200
LINECT ~ LINECT + 2 ; 00192300
END ; 00192400
FOR I ~ DBLBRKMAX STEP -2 UNTIL DBLBRK DO BEGIN %BRK LOOP 00192500
BRK ~ I/2 ; 00192600
IF CALCULATING THEN CALCULATEDEVELOPEARRAY ; 00192700
IF TOTALING THEN BEGIN 00192800
WRITE (PTR, TOTAL , INDENT|I, CTLID[I], 00192900
CTLID[I+1], STORECTL [I], STORECTL [I+1] ) ; 00193000
ASSEMBLELINE (COUNTERS[BRK,*], TOTARRAY, TOTALQUOT, 00193100
TOTLINEKEY, OUTARRAY ); 00193200
WRITE (PTR [DBL], 15, OUTARRAY[*] ) ; 00193300
LINECT ~ LINECT + 3 ; 00193400
END TOTALING ; 00193500
FOR J ~ 0 THRU NUMCTR DO BEGIN % ROLL COUNTERS 00193600
COUNTERS [BRK-1,J] ~ COUNTERS [BRK-1,J] + COUNTERS[BRK,J];00193700
COUNTERS [BRK ,J] ~ 0 ; END ROLLING COUNTERS ; 00193800
END OF BRK LOOP ; 00193900
WRITE (PTR [DBL] ) ; 00194000
LINECT ~ LINECT + 2 ; 00194100
END OF PRINTOTALS ; 00194200
%-----------------------------------------------------------------------00194300
%********************************************************************** 00194400
REPLACEOVERSIZEDARRAYS ; 00194500
PRINTOP ; 00194600
SKIPHEADERECORDS ; 00194700
ACCESSRECORD ; 00194800
IF BREAKING THEN BEGIN 00194900
DBLBRK ~ 2 ; 00195000
JUSTBROKE ~ FALSE ; 00195100
ASSEMBLECONTROLS (FILERAY, KEYARRAY, CTLWD [2], 00195200
DEVARRAY ) ; 00195300
CONTROL : WRITECONTROLS ; 00195400
STORECONTROLS ; 00195500
END ; 00195600
IF COLUMNHEADINGS THEN PRINTCOLUMNHEADS ; 00195700
DEVELOPE : DEVELOPEOUTPUTLINE ; 00195800
IF LISTING THEN BEGIN 00195900
IF LINECT } LINEMAX THEN BEGIN PRINTBOTTOM ; 00196000
IF COLUMNHEADINGS 00196100
THEN 00196200
PRINTCOLUMNHEADS ; 00196300
END ; 00196400
WRITE (PTR, 15, OUTARRAY [*] ) ; 00196500
LINECT ~ LINECT + 1 END ; 00196600
ACCESSRECORD ; 00196700
IF BREAKING THEN BEGIN 00196800
ASSEMBLECONTROLS (FILERAY, KEYARRAY, CTLWD [2], 00196900
DEVARRAY ) ; 00197000
COMPARECONTROLS ; 00197100
END ; 00197200
GO TO DEVELOPE ; 00197300
CTLBRK : PRINTOTALS ; 00197400
GO TO CONTROL ; 00197500
EOJ : IF TOTALING THEN BEGIN 00197600
DBLBRK ~ 0 ; 00197700
PRINTOTALS ; 00197800
END ; 00197900
IF BOMTITLEXISTS THEN PRINTBOTTOMTITLES ; 00198000
END OF REPORT GENERATING BLOCK ; 00198100
%-----------------------------------------------------------------------00198200
ENDJOB : 00198300
END OF PROGRAM SUPER REPORT. 00198400
END;END. LAST CARD ON 0CRDING TAPE 00198500