Table of Contents

MODIFY

Table Of Contents

  • [00010] SOURCE LIBRARY EDITING PROGRAM.
  • [00357] ASSEMBLY CONSTANTS AND MACRO DEFINITIONS.
  • [00392] ADDWRD - ADD WORD TO TABLE.
  • [00411] CARD - GENERATE LIST AND CALL FOR DIRECTIVE TRANSLATION.
  • [00447] ALLOC - ALLOCATE *N* ADDITIONAL WORDS TO TABLE *TNAM*.
  • [00470] PRINT - PRINT LINE.
  • [00493] SEARCH - SEARCH TABLE *TNAM* FOR *ENTRY*.
  • [00517] TABLE - GENERATE MANAGED TABLE.
  • [00542] LISTOP - CHECK LIST OPTION.
  • [00562] OPTION - DEFINE BIT VALUE OF OPTION.
  • [00702] MANAGED TABLE DEFINITIONS.
  • [00717] TDKN - TABLE OF DECK NAMES.
  • [00725] TNME - TABLE OF NAMES MENTIONED ON DIRECTIVE LINES.
  • [00740] TMOD - TABLE OF MODIFICATIONS.
  • [00762] TDKI - TABLE OF DECK IDENTIFIERS.
  • [00777] TNCD - TABLE OF NEXT LINES.
  • [00788] TEDT - TABLE OF DECKS TO BE EDITED.
  • [00799] TNDK - TABLE OF NEW DECKS.
  • [00806] TECD - TABLE OF EDITED COMMON DECKS.
  • [00813] TDEF - TABLE OF DEFINED NAMES.
  • [00824] TIGD - TABLE OF DECKS TO BE IGNORED.
  • [00831] TMVE - TABLE OF MOVE AND PURGE DIRECTIVES.
  • [00842] TNCC - TABLE OF NESTED COMMON DECK CALLS.
  • [00849] TCCD - TABLE OF CALLED COMMON DECKS.
  • [00856] TXTT - TABLE OF INSERTION TEXT.
  • [00865] TCDK - TABLE OF COMMON DECKS.
  • [00882] OPTION - LIST OPTION TABLE.
  • [00894] TEMPORARY STORAGE ASSIGNMENTS.
  • [01014] MAIN PROGRAM.
  • [01075] BDK - BEGIN DECK.
  • [01195] CDK - COMPLETE DECK.
  • [01289] INS - PROCESS INSERTIONS.
  • [01345] DEL - PROCESS DELETIONS.
  • [01472] SCS - SET LINE STATUS.
  • [01531] SNC - SET NEXT LINES.
  • [01590] WRITE COMPILE FILE PROCESSORS.
  • [01591] WRC - WRITE LINE.
  • [01620] WCC - WRITE COMPRESSED COMPILE FILE.
  • [01711] WCF - WRITE COMPILE FILE.
  • [01766] WSC - WRITE STANDARD COMPILE FILE.
  • [01816] COMPILE FILE DIRECTIVE PROCESSORS.
  • [02292] WCD - WRITE COMMON DECK.
  • [02538] ABT - ABORT MODIFY.
  • [02549] ADW - ADD ENTRY TO A TABLE.
  • [02590] AMD - ASSEMBLE MODIFIER.
  • [02699] ASD - ASSEMBLE DIGITS.
  • [02739] ASN - ASSEMBLE NAME.
  • [02806] ATS - ALLOCATE TABLE SPACE.
  • [02951] ATX - ALLOCATE TABLE EXPANSION SPACE.
  • [02983] CAS - CALL ASSEMBLER.
  • [03047] CKC - CHECK LINE.
  • [03095] CMF - COMPLETE FILES.
  • [03147] CPF - CONVERT PROGRAM FILE.
  • [03179] CTF - CONVERT 63 TO 64 CHARACTER SET.
  • [03299] CFT - CONVERT 64 TO 63 CHARACTER SET.
  • [03408] DNL - DECREMENT NESTING LEVEL.
  • [03437] ECD - EXPAND LINE.
  • [03645] INL - INCREMENT NESTING LEVEL.
  • [03679] PCS - PROCESS OPL CHARACTER SET.
  • [03822] PLE - PROCESS LIBRARY ERROR.
  • [03838] PCW - PROCESS COMPILE FILE WRITE.
  • [03966] RCL - RE-COMPRESS LINE.
  • [04067] RMT - READ MODIFIER TABLE.
  • [04158] RPF - READ LINE FROM PROGRAM LIBRARY.
  • [04220] RTF - READ LINE FROM TEXT FILE.
  • [04296] STB - SEARCH TABLE FOR ENTRY WITH MASK.
  • [04331] UPN - UNPACK NAME.
  • [04357] WDR - WRITE DIRECTORY TO PROGRAM LIBRARY.
  • [04407] WMT - WRITE MODIFIER TABLE.
  • [04470] WNF - WRITE LINE TO NEW PROGRAM LIIBRARY.
  • [04534] WOF - WRITE OUTPUT FILE.
  • [04612] SSR - SELECT *S* READ FUNCTION.
  • [04633] SSW - SELECT *S* WRITE FUNCTION.
  • [04653] LIST SUBROUTINES.
  • [04655] LCE - LIST COMPILE FILE DIRECTIVE ERROR MESSAGE.
  • [04680] LCS - LIST LINE STATUS.
  • [04717] LDS - LIST DECK STATUS.
  • [04741] LER - LIST ERROR MESSAGE.
  • [04774] LST - LIST STATISTICS.
  • [04918] LTB - LIST TABLE.
  • [05018] LUM - LIST UNPROCESSED MODIFICATIONS.
  • [05103] PML - PREPARE MODIFICATION LIMIT.
  • [05159] SPACE 4,6
  • [05286] PDC - PROCESS DIRECTIVE LINES.
  • [05404] ERR - DIRECTIVE ERROR PROCESSORS.
  • [06327] ADK - ADD FROM NEW DECK TABLE TO DECK TABLE.
  • [06390] AMI - ASSEMBLE MODIFICATION IDENTIFICATION.
  • [06433] CCC - COMPRESS CONVERTED LINE.
  • [06447] CCD - COMPRESS LINE.
  • [06547] EMT - ENTER MODIFICATION TABLE.
  • [06594] IMP - INITIALIZE MODIFICATION PROCESSING.
  • [06764] IPC - INSERT PREFIX CHARACTER.
  • [06786] LDC - LIST DIRECTIVE LINE.
  • [06860] PMP - PROCESS MOVE AND PURDECK DIRECTIVES.
  • [06954] RCS - RESET CHARACTER SET.
  • [07000] RDD - READ DIRECTIVE.
  • [07488] CRD - CONDITIONALLY READ DIRECTORY.
  • [07506] RDR - READ DIRECTORY FROM PROGRAM LIBRARY.
  • [07576] SAF - SET ALTERNATE INPUT FILE.
  • [07616] WTF - WRITE LINE TO TEXT FILE.
  • [07671] PRS - PRESET MODIFY.
  • [07737] ARGUMENT TABLE AND PRESET TEMPORARIES.
  • [07739] ARGT - ARGUMENT TABLE.
  • [07776] MODIFY PRESET SUBROUTINES.
  • [07778] IAF - INITIALIZE ALL FILES.
  • [07847] IOD - INITIALIZE OPTICAL DISK FET EXTENSIONS.
  • [07900] ICS - INITIALIZE CHARACTER SET.
  • [07940] IVI - INITIALIZE VARIOUS ITEMS.
  • [07968] IXQ - INITIALIZE *X* OR *Q* MODE PARAMETERS.
  • [08064] IZI - INITIALIZE *Z* MODE INPUT.
  • [08101] PCV - PROCESS *CV* OPTION.
  • [08152] SLC - SET LIST CONTROL.
  • [08189] SMM - SET MODIFICATION MODE.
  • [08210] SOF - SET OUTPUT FORMAT.

Source Code

MODIFY.txt
  1. IDENT MODIFY,FETS,MODIFY
  2. ABS
  3. ENTRY MODIFY
  4. ENTRY RFL=
  5. SYSCOM B1
  6. MODIFY TITLE MODIFY - SOURCE LIBRARY EDITING PROGRAM.
  7. *COMMENT MODIFY - SOURCE LIBRARY EDITING PROGRAM.
  8. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
  9. DOC SPACE 4
  10. *** MODIFY - SOURCE LIBRARY EDITING PROGRAM.
  11. * G. R. MANSFIELD. 69/06/22.
  12. * A. D. FORET. 74/12/05.
  13. * A. D. FORET. 76/08/04.
  14. SPACE 4,20
  15. *** MODIFY IS A SOURCE LIBRARY EDITING PROGRAM
  16. * DESIGNED TO AID IN THE DEVELOPMENT AND MAINTENANCE
  17. * OF A SYSTEM OF PROGRAMS OR DECKS. THE SOURCE LINES
  18. * ARE MAINTAINED IN SUCH A MANNER THAT EACH DIRECTIVE HAS
  19. * PERMANENT SEQUENCING INFORMATION AS LONG AS THE LINE
  20. * REMAINS ON THE PROGRAM LIBRARY.
  21. CARD SPACE 4,20
  22. *** COMMAND CALL.
  23. *
  24. * MODIFY(P1,P2,P3...PN)
  25. *
  26. * *PN* MAY BE ONE OF THE FOLLOWING -
  27. *
  28. * SECOND DEFAULT IS THE VALUE OF THE PARAMETER IF IT IS NOT
  29. * EQUATED. IF NO SECOUND DEFAULT IS SPECIFIED IT IS THE SAME
  30. * AS THE FIRST DEFAULT.
  31. *
  32. * PN DESCRIPTION
  33. *
  34. * I DIRECTIVE INPUT. DEFAULT IS *INPUT*.
  35. *
  36. * P PROGRAM LIBRARY FILE. DEFAULT IS *OPL*.
  37. *
  38. * C COMPILE FILE OUTPUT. DEFAULT IS *COMPILE*.
  39. *
  40. * N NEW PROGRAM LIBRARY. DEFAULT IS NOT SELECTED.
  41. * SECOND DEFAULT IS *NPL*.
  42. *
  43. * S SOURCE FILE. DEFAULT IS NOT SELECTED.
  44. * SECOND DEFAULT IS *SOURCE*.
  45. *
  46. * L LIST OUTPUT FILE. DEFAULT IS *OUTPUT*.
  47. *
  48. * LO LIST OPTIONS. DEFAULT IS *E* IF LIST OUTPUT FILE IS
  49. * ASSIGNED TO THE TERMINAL, OTHERWISE DEFAULT IS
  50. * *ECTMWDS*.
  51. *
  52. * OPTION DESCRIPTION
  53. *
  54. * E ERRORS.
  55. * C DIRECTIVES OTHER THAN *INSERT*,
  56. * *DELETE*, AND *RESTORE*.
  57. * T INPUT TEXT.
  58. * M MODIFICATIONS PERFORMED.
  59. * W COMPILE FILE DIRECTIVES.
  60. * D DECK STATUS.
  61. * S STATISTICS.
  62. * I INACTIVE LINES.
  63. * A ACTIVE LINES.
  64. *
  65. *
  66. * A WRITE COMPRESSED COMPILE. DEFAULT IS NOT SELECTED.
  67. *
  68. * BL BURSTABLE LISTING. GENERATE OUTPUT LISTING EASILY
  69. * SEPARABLE INTO COMPONENTS. A NEW PAGE WILL BE
  70. * STARTED ON THE OUTPUT LISTING FOR EACH INDIVIDUAL
  71. * DECK. DEFAULT IS NOT SELECTED.
  72. *
  73. * D IGNORE ALL ERRORS. DEFAULT IS NOT SELECTED.
  74. *
  75. * F MODIFY ALL DECKS. DEFAULT IS NOT SELECTED.
  76. *
  77. * U MODIFY ONLY DECKS MENTIONED ON *DECK* DIRECTIVES.
  78. * DEFAULT IS NOT SELECTED.
  79. *
  80. * NR NO REWIND ON COMPILE. DEFAULT IS NOT SELECTED.
  81. *
  82. * X REWIND *INPUT* AND *OUTPUT* FILES, SET *A*
  83. * OPTION AND CALL SPECIFIED PROGRAM WHEN
  84. * MODIFICATION IS COMPLETE. DEFAULT PROGRAM
  85. * IS *COMPASS*. DEFAULT IS NOT SELECTED.
  86. *
  87. * Q SAME AS *X* EXCEPT THAT *INPUT* AND *OUTPUT*
  88. * ARE NOT REWOUND.
  89. *
  90. * Z TAKE DIRECTIVES ONLY FROM COMMAND. DEFAULT IS
  91. * NOT SELECTED.
  92. * EXAMPLE - MODIFY(...Z...)XDDDDDXDDDXDDD
  93. * X IS ANY CHARACTER NOT IN *D*.
  94. * D IS A MODIFY DIRECTIVE.
  95. *
  96. * CV CONVERSION OPTION. DEFAULT NOT SELECTED.
  97. * *CV* MAY BE EITHER 63 OR 64.
  98. * CV=MAD64 INDICATES THAT MODIFY SHOULD CONVERT THE
  99. * OLD *MADIFY* COMPRESSION CODES TO THE MODIFY CODE.
  100. *
  101. * IF *X* OR *Q* OPTIONS ARE SELECTED THE FOLLOWING
  102. * ADDITIONAL OPTIONS APPLY.
  103. *
  104. * CB SET ASSEMBLER *B* ARGUMENT. DEFAULT IS *LGO*.
  105. *
  106. * CS SET ASSEMBLER *S* ARGUMENT. DEFAULT IS *SYSTEXT*.
  107. *
  108. * CG SET ASSEMBLER *G* ARGUMENT. DEFAULT IS *0*.
  109. * SECOND DEFAULT IS *SYSTEXT*.
  110. *
  111. * CL SET ASSEMBLER *L* ARGUMENT. DEFAULT IS *0*.
  112. * SECOND DEFAULT IS *OUTPUT*.
  113. DAYFILE SPACE 4,25
  114. *** DAYFILE MESSAGES.
  115. *
  116. *
  117. * * MODIFICATION COMPLETE.* - NORMAL COMPLETION MESSAGE.
  118. *
  119. * * MODIFICATION ERRORS.* - ERRORS ENCOUNTERED WHILE
  120. * PROCESSING DIRECTIVES.
  121. *
  122. * * ERROR IN MODIFY ARGUMENTS.* - AN INCORRECT COMMAND
  123. * OPTION WAS ENCOUNTERED.
  124. *
  125. * * FILE NAME CONFLICT.* - TWO OR MORE FILES HAVE THE SAME
  126. * NAME.
  127. *
  128. * * DIRECTIVE ERRORS.* - INCORRECT DIRECTIVES WERE ENCOUNTERED.
  129. *
  130. * * NO DIRECTIVES.* - INPUT FILE WAS EMPTY, AND DIRECTIVES
  131. * WERE REQUIRED.
  132. *
  133. * * ERROR IN DIRECTORY.* - THE DIRECTORY ON THE PROGRAM
  134. * LIBRARY WAS NOT IN THE PROPER FORMAT.
  135. *
  136. * * PL ERROR IN DECK DECKNAM* - AN ERROR WAS ENCOUNTERED
  137. * DURING PROCESSING OF DECK *DECKNAM*.
  138. *
  139. * * PROGRAM LIBRARY EMPTY.* - THE SPECIFIED OPL FILE CONTAINED
  140. * NO DATA.
  141. *
  142. * * -LO- ERROR, MUST BE IN -ECTMWDSIA-.* - *LO* OPTION
  143. * SPECIFIED NOT VALID.
  144. *
  145. * * NNNN ERRORS IN DECKNAM - * - DECK *DECKNAM*
  146. * CONTAINED *NNNN* ERRORS.
  147. *
  148. * * S OPTION INCORRECT WITH A, X OR Q.* - COMPRESSED COMPILE
  149. * AND SOURCE OUTPUT NOT ALLOWED SIMULTANEOUSLY.
  150. *
  151. * * X OR Q INCORRECT WITHOUT COMPILE.* - SELECTION OF *X*
  152. * OR *Q* OPTIONS WITHOUT WRITING A COMPILE FILE
  153. * IS NOT PERMITTED.
  154. *
  155. * * DECKNAM - INCORRECT CS, 63 ASSUMED.* - CHARACTER SET
  156. * IDENTIFICATION FOR DECK *DECKNAM* DID NOT INDICATE
  157. * IT WAS EITHER 63 OR 64 CHARACTER SET. MODIFY
  158. * ASSUMES IT TO BE 63 CHARACTER SET AND MAKES IT
  159. * SUCH ON A NEW PROGRAM LIBRARY, IF ONE IS BEING
  160. * CREATED.
  161. *
  162. * * DECKNAM - MIXED CHARACTER SET DETECTED.* - UPON EDITING
  163. * THE INDICATED DECK MODIFY DETECTED THAT THE CHARACTER
  164. * SET OF THIS DECK WAS DIFFERENT FROM THOSE ALREADY
  165. * PROCESSED. PROGRAM LIBRARIES CONTAINING RECORDS OF
  166. * MORE THAN ONE CHARACTER SET ARE INCORRECT.
  167. *
  168. * * REDUNDANT CONVERSION IGNORED.* - CONVERSION TO THE
  169. * DESIRED CHARACTER SET IS REDUNDANT SINCE THE
  170. * OLD PROGRAM LIBRARY IS ALREADY IN THE SPECIFIED
  171. * RESULTANT CHARACTER SET MODE.
  172. *
  173. * *INCORRECT CS ON INPUT.* - A 64 CHARACTER INPUT WAS
  174. * DETECTED WHILE THE PL IS 63. THIS MIXED MODE
  175. * IS NOT ALLOWED. A 63 CHARACTER SET ZERO CHARACTER
  176. * IS NOT DEFINED.
  177. *
  178. * * CSET - UNKNOWN CHARACTER SET.* - AN UNKNOWN CHARACTER
  179. * SET WAS SPECIFIED.
  180. *
  181. * * DECKNAM - INCORRECTLY NESTED CALL OF COMMON DECK*
  182. * A REDUNDANT NESTED CALL WAS FOUND. A CALL, CALLC,
  183. * NIFCALL, OR IFCALL CALLS A COMMON DECK WHICH HAS
  184. * HAS ALREADY BEEN CALLED IN THE CURRENT NESTING
  185. * SEQUENCE.
  186.  
  187. OPERATOR SPACE 4,15
  188. *** OPERATOR MESSAGES.
  189. *
  190. * * MODIFY / DECKNAM * - DECK *DECKNAM* IS CURRENTLY HAVING
  191. * MODIFICATIONS PROCESSED AGAINST IT.
  192. *
  193. * * CREATE / DECKNAM * - DECK *DECKNAM* IS CURRENTLY BEING
  194. * TRANSFORMED FROM SOURCE TO COMPRESSED FORMAT.
  195. *
  196. * * IGNORE / DECKNAM * - MODIFICATIONS TO DECK *DECKNAM*
  197. * ARE BEING IGNORED, IN RESPONSE TO AN *IGNORE*
  198. * DIRECTIVE.
  199. *
  200. * * SKIP / RECNAME * - RECORD *RECNAME* IS BEING SKIPPED.
  201. MODIFY TITLE GENERAL DESCRIPTION.
  202. *** THE MODIFY EDITING PROCESS IS CONTROLLED BY THE USE OF
  203. * DIRECTIVE LINES, WHICH ARE NORMALLY READ FROM THE JOB
  204. * INPUT FILE. A DIRECTIVE CONSISTS OF A PREFIX CHARACTER
  205. * IN COLUMN ONE FOLLOWED IMMEDIATELY BY A DIRECTIVE NAME. THE
  206. * PREFIX CHARACTER IS PRESET TO -*-, BUT MAY BE CHANGED VIA A
  207. * DIRECTIVE. THE DIRECTIVE IS TERMINATED BY ANY CHARACTER
  208. * WITH A DISPLAY CODE VALUE .GE. 55B. THE MAXIMUM LENGTH OF
  209. * ANY MODIFY NAME IS SEVEN CHARACTERS.
  210. *
  211. * OUTPUT FROM MODIFY IS PLACED ON A FILE CALLED *COMPILE* FOR
  212. * FURTHER PROCESSING BY OTHER PROGRAMS. THESE LINES CONTAIN
  213. * SEQUENCING INFORMATION AFTER THE LAST CHARACTER OF SOURCE
  214. * DATA. THIS INFORMATION MAY BE SUPPRESSED OR IT,S POSITION
  215. * CHANGED VIA DIRECTIVES. THE *COMPILE* MAY ALSO BE DIVIDED
  216. * INTO LOGICAL RECORDS OR FILES.
  217. *
  218. * THE PROGRAM LIBRARY CONSISTS OF TWO OR MORE LOGICAL RECORDS
  219. * OF SOURCE LINES WHICH ARE REFERRED TO AS DECKS. THE USUAL
  220. * DECKS CONSISTS OF A SINGLE PROGRAM. CERTAIN DECKS MAY BE
  221. * *COMMON* DECKS. COMMON DECKS MAY BE CALLED FROM OTHER DECKS
  222. * FOR INSERTION OF THE TEXT OF THE *COMMON* DECK INTO THE
  223. * COMPILE FILE. THIS FEATURE ALLOWS SEVERAL ROUTINES TO SHARE
  224. * IDENTICAL SUBROUTINES OR DATA BLOCKS. *COMMON* DECKS MAY ALSO
  225. * BE CALLED FROM OTHER *COMMON* DECKS.
  226. *
  227. * THE PROGRAM LIBRARY IS TREATED AS A RANDOM ACCESS FILE AND
  228. * AS SUCH, MUST RESIDE ON MASS STORAGE. A DIRECTIVE IS PROVIDED
  229. * FOR COPYING THE PROGRAM LIBRARY ONTO MASS STORAGE.
  230. *
  231. * DECKS MAY REMOVED, REPLACED, OR INSERTED INTO THE PROGRAM
  232. * LIBRARY BY USE OF COPY UTILITIES SUCH AS *COPYX*, *COPYBR*,
  233. * OR *LIBEDIT*.
  234. *
  235. * DECKS MAY BE MODIFIED BY INSERTION, DELETION, AND RESTORATION
  236. * OF LINES VIA DIRECTIVE. DELETED LINES ARE MARKED INACTIVE,
  237. * BUT NOT DELETED FROM THE PROGRAM LIBRARY. THE LINE MAY BE
  238. * REACTIVATED BY RESTORATION.
  239. *
  240. * FACILITIES INCLUDED IN MODIFY ARE -
  241. *
  242. * PREPARATION OF PROGRAM LIBRARY FROM SOURCE.
  243. * MODIFICATION OF DECKS BY INSERTION, DELETION, AND RESTORATION.
  244. * PRODUCTION OF SOURCE FROM THE PROGRAM LIBRARY.
  245. * GENERATION OF PROGRAM LIBRARIES.
  246. * COMPREHENSIVE LIST OUTPUT OF THE MODIFICATION PROCESS.
  247. * COMPREHENSIVE LIST OUTPUT OF THE STATUS OF THE LIBRARY.
  248. * CONTROL OF MODIFIED OUTPUT FOR PROCESSING BY OTHER PROCESSORS.
  249. * ABILITY TO PROCESS INPUT FROM ALTERNATE INPUT FILES.
  250. * PROCESSING OF DIRECTIVES FROM THE MODIFY COMMAND.
  251. * DIVISION OF COMPILE FILE INTO RECORDS AND FILES.
  252. * ABILITY TO SIMULTANEOUSLY PROCESS MORE THAN ONE LIBRARY.
  253. * SUPPORT OF 63 OR 64 CHARACTER SET PROGRAM LIBRARIES.
  254. * CONDITIONAL PROCESSING OF OUTPUT TO COMPILE FILE.
  255. FILES TITLE FILE FORMATS.
  256. ** FILE FORMATS.
  257. *
  258. * SOURCE.
  259. * THE SOURCE FILE CONSISTS OF ONE OR MORE RECORDS
  260. * REPRESENTING THE DECKS. EACH DECK IS PRECEEDED BY ONE OR TWO
  261. * LINES WHICH ARE USED FOR DECK GENERATION. THE FIRST
  262. * CONTAINS THE NAME OF THE DECK BEGINNING IN COLUMN ONE.
  263. * THE SECOND LINE, IF IT CONTAINS THE NAME *COMMON* BEGINNING
  264. * IN COLUMN ONE, SIGNIFIES THAT THE DECK WILL BE GIVEN COMMON
  265. * STATUS ON THE PROGRAM LIBRARY. THESE LINE(S) ARE NOT PART
  266. * OF THE DECK RECORD WHEN PLACED ON THE PROGRAM LIBRARY.
  267. *
  268. *
  269. * PROGRAM LIBRARY.
  270. *
  271. * THE PROGRAM LIBRARY CONTAINS TWO OR MORE RECORDS.
  272. * THE LAST RECORD IS A DIRECTORY OF ALL PRECEEDING RECORDS.
  273. * EACH DECK RECORD IS OF THE FOLLOWING FORMAT -
  274. *
  275. * WORD CONTENTS
  276. *
  277. * PREFIX TABLE.
  278. *
  279. *T ID 12/7700,12/0016,36/
  280. *T,ID+1 42/DECKNAM,18/
  281. *T,ID+2 60/CREATION DATE
  282. *T,ID+3 60/LAST MODIFICATION DATE
  283. *T,ID+4 60/
  284. *T,ID+5 60/
  285. *T,ID+6 60/
  286. *T,ID+7 60/
  287. *T,ID+10 60/
  288. *T,ID+11 60/
  289. *T,ID+12 60/
  290. *T,ID+13 60/
  291. *T,ID+14 60/
  292. *T,ID+15 60/
  293. *T,ID+16 48/,6/A,6/CS
  294. *
  295. * A ASCII CHARACTER SET FLAG.
  296. * 1 = ASCII 6/12 CHARACTER SET.
  297. * 0 = DISPLAY CODE.
  298. *
  299. * CS CHARACTER SET OF RECORD.
  300. * 64 = 64 CHARACTER SET.
  301. * 0 = 63 CHARACTER SET.
  302. * OTHER, IMPLIES 63 CHARACTER SET.
  303. *
  304. *
  305. * MODIFIER TABLE, N+1 WORDS LONG.
  306. *
  307. *T MT 12/TYPE,36/,12/N
  308. *T, MT+1 42/MODNAM,1/,1/Y,16/
  309. *
  310. * TYPE 7001, IF NORMAL DECK.
  311. * 7002, IF COMMON DECK.
  312. * N NUMBER OF MODIFIERS.
  313. * Y YANK FLAG.
  314. *
  315. * MODNAM MODIFIER NAME.
  316. *
  317. * CONTROL INFORMATION FOR EACH LINE.
  318. *
  319. *T CARD 1/A,5/WC,18/SEQ,18/MHB,18/MHB
  320. *T,CARD+1 6/,18/MHB,18/MHB,18/MHB
  321. *T,CARD+2 6/,18/MHB,18/MHB,18/END
  322. *T,LINE+N 60/TEXT OF COMPRESSED LINE
  323. *
  324. * A IF SET, LINE IS ACTIVE.
  325. * WC WORD COUNT OF COMPRESSED LINE.
  326. * SEQ LINE SEQUENCE NUMBER.
  327. * END THE LIST OF MHB-S IS TERMINATED BY ONE TO FIVE ZERO
  328. * BYTES, AS REQUIRED TO FILL THE WORD.
  329. *
  330. * MODIFICATION HISTORY BYTE.
  331. *
  332. *T MHB 1/,1/A,16/MOD
  333. *
  334. * MOD ORDINAL INTO MODIFIER TABLE OF THE MODIFIER THAT
  335. * CAUSED THIS STATUS CHANGE FOR THE LINE.
  336. * 0, IF ORIGINAL LINE.
  337. * A SET IF THE MODIFIER ACTIVATED THE LINE.
  338. *
  339. * PROGRAM LIBRARY DIRECTORY.
  340. *
  341. * THE PREFIX TABLE FOR THE PROGRAM LIBRARY DIRECTORY
  342. * IS IN STANDARD KRONOS PREFIX TABLE FORMAT.
  343. *
  344. * DIRECTORY TABLE.
  345. *
  346. *T DIR 12/7000,30/,18/L
  347. *T DIR+1 42/DECK NAME 1,18/TYPE
  348. *T DIR+2 30/,30/RANDOM ADDRESS 1
  349. *T DIR+3 42/DECK NAME 2,18/TYPE
  350. *T DIR+4 30/,30/RANDOM ADDRESS 2
  351. *T DIR+N*2 42/ DECK NAME N,18/TYPE
  352. *T DIR+N*2+1 30/,30/RANDOM ADDRESS N
  353. *
  354. * L LENGTH IN WORDS.
  355. * TYPE 7001, IF NORMAL DECK
  356. * 7002, IF COMMON DECK.
  357. TITLE ASSEMBLY CONSTANTS AND MACRO DEFINITIONS.
  358. ASSEMBLY SPACE 4,10
  359. **** ASSEMBLY CONSTANTS.
  360.  
  361.  
  362. OBUFL EQU 4004B OUTPUT BUFFER LENGTH
  363. CBUFL EQU 10022B COMPILE FILE BUFFER LENGTH
  364. SBUFL EQU 4004B SOURCE FILE BUFFER LENGTH
  365. MBUFL EQU 10022B SCRATCH FILE BUFFER LENGTH
  366. PBUFL EQU 16044B OPL FILE BUFFER LENGTH
  367. NBUFL EQU 10022B NPL FILE BUFFER LENGTH
  368. TBUFL EQU 4004B SCRATCH BUFFER (MULTIPLE OF 1001B)
  369. IWMACS EQU 150 MAXIMUM INPUT LINE WIDTH 150 CHARACTERS
  370. IWMAX EQU IWMACS*2 MAXIMUM INPUT WIDTH BUFFER SIZE
  371. BUFL EQU IWMAX+1 BUFFER LENGTH
  372. FLINL EQU 2000B FIELD LENGTH INCREMENT
  373. MTBSL EQU 14000B NOMINAL TABLE LENGTH
  374. MXCCL EQU 37B MAXIMUM LENGTH OF COMPRESSED LINE
  375. CMFL EQU 600B *COMPASS* DEFAULT FL
  376. FETLEN EQU 10 ALL FETS MUST BE 10 WORDS LONG
  377. FETODL EQU 16 LENGTH OF OD FET EXTENSION
  378.  
  379. ****
  380. COMMON SPACE 4,10
  381. * COMMON DECKS.
  382.  
  383.  
  384. *CALL COMCMAC
  385. *CALL COMCCMD
  386. *CALL COMSSRT
  387. MACROS SPACE 4,20
  388. ** MACRO DEFINITIONS.
  389.  
  390.  
  391. ADDWRD SPACE 4,10
  392. ** ADDWRD - ADD WORD TO TABLE.
  393. *
  394. * ADDWRD TNAM,WORD
  395. *
  396. * TNAM NAME OF TABLE.
  397. * WORD WORD TO ADD.
  398. *
  399. * CALLS ADW.
  400.  
  401.  
  402. PURGMAC ADDWRD
  403.  
  404. ADDWRD MACRO T,W
  405. IFC NE,$X1$W$,1
  406. BX1 W
  407. R= A0,T
  408. RJ ADW
  409. ENDM
  410. CARD SPACE 4,20
  411. ** CARD - GENERATE LIST AND CALL FOR DIRECTIVE TRANSLATION.
  412. *
  413. * CARD NAME,ADDR
  414. *
  415. * NAME DIRECTIVE NAME.
  416. * ADDR ADDRESS OF DIRECTIVE PROCESSOR
  417. * IF *ADDR* NOT SPECIFIED, EXECUTION BEGINS
  418. * AT *NAME*.
  419. *
  420. * CALLS CKC.
  421.  
  422.  
  423. NOREF .X
  424. PURGMAC CARD
  425.  
  426. CARD MACRO N,AD
  427. LOCAL A,B,C
  428. IF DEF,//.X,1
  429. D IFNE //.X,*
  430. RMT
  431. CON 0
  432. A BSS 0
  433. RMT
  434. SA0 A
  435. RJ CKC
  436. QUAL
  437. B BSS 0
  438. .X SET B
  439. QUAL *
  440. D ENDIF
  441. RMT
  442. C SET AD N
  443. CON 0L_N+C
  444. RMT
  445. ENDM
  446. ALLOC SPACE 4,10
  447. ** ALLOC - ALLOCATE *N* ADDITIONAL WORDS TO TABLE *TNAM*.
  448. *
  449. * ALLOC TNAM,N,S
  450. *
  451. * TNAM TABLE NAME.
  452. * N NUMBER OF WORDS TO ALLOCATE.
  453. * S ALLOCATE TABLE SLACK ROOM ONLY.
  454. *
  455. * CALLS ATS, ATX.
  456.  
  457.  
  458. PURGMAC ALLOC
  459.  
  460. ALLOC MACRO T,N,S
  461. R= X1,N
  462. R= A0,T
  463. IFC EQ,$S$$
  464. RJ ATS
  465. ELSE
  466. RJ ATX
  467. ENDIF
  468. ENDM
  469. PRINT SPACE 4,10
  470. ** PRINT - PRINT LINE.
  471. *
  472. * PRINT FWA,N
  473. *
  474. * FWA FWA OF LINE.
  475. * N WORD COUNT OF LINE IN *S* FORMAT. IF MISSING
  476. * LINE IN *C* FORMAT.
  477. *
  478. * CALLS WOF.
  479.  
  480.  
  481. PURGMAC PRINT
  482.  
  483. PRINT MACRO F,N
  484. SX1 F
  485. IFC NE,$N$$
  486. R= X2,N
  487. ELSE
  488. BX2 X2-X2
  489. ENDIF
  490. RJ WOF
  491. ENDM
  492. SEARCH SPACE 4,20
  493. ** SEARCH - SEARCH TABLE *TNAM* FOR *ENTRY*.
  494. *
  495. * SEARCH TNAM,ENTRY,BITS
  496. *
  497. * TNAM TABLE NAME.
  498. * ENTRY ENTRY TO SEARCH FOR.
  499. * BITS ADDITIONAL BITS FROM 0 - 16.
  500. *
  501. * CALLS STB.
  502.  
  503.  
  504. PURGMAC SEARCH
  505.  
  506. SEARCH MACRO T,E,B
  507. R= A0,T
  508. IFC NE,$X6$E$,1
  509. BX6 E
  510. MX1 42
  511. IFC NE,$B$$,2
  512. R= X2,B
  513. BX1 X1+X2
  514. RJ STB
  515. ENDM
  516. TABLE SPACE 4,15
  517. ** TABLE - GENERATE MANAGED TABLE.
  518. *
  519. * TABLE TNAM
  520. *
  521. * TNAM NAME OF TABLE.
  522. *
  523. * EXIT F.TNAM - NAME OF WORD CONTAINING TABLE FWA.
  524. * L.TNAM - NAME OF WORD CONTAINING TABLE LENGTH.
  525.  
  526.  
  527. PURGMAC TABLE
  528.  
  529. MACRO TABLE,T,N
  530. T EQU *
  531. CON MTBS
  532. F.T EQU FTAB+T
  533. RMT
  534. L.T EQU LTAB+T
  535. ORG L.T
  536. CON 0
  537. ORG NTAB+T
  538. CON N
  539. RMT
  540. ENDM
  541. LISTOP SPACE 4,15
  542. ** LISTOP - CHECK LIST OPTION.
  543. *
  544. * LISTOP TYPE,ADDR,INS,REG
  545. *
  546. * TYPE OPTION LETTER.
  547. * ADDR ADDRESS TO JUMP TO.
  548. * INS ALTERNATE INSTRUCTION TO EXECUTE, DEFAULT IS *PL*.
  549. * REG ALTERNATE REGISTER TO USE, DEFAULT IS *X1*.
  550.  
  551.  
  552. PURGMAC LISTOP
  553.  
  554. LISTOP MACRO T,A,I,R
  555. .INS MICRO 1,2,*I_PL*
  556. .REG MICRO 1,1,*R_1*
  557. SA".REG" LO
  558. LX".REG" 59-LO.T
  559. ".INS" X".REG",A
  560. ENDM
  561. OPTION SPACE 4,15
  562. ** OPTION - DEFINE BIT VALUE OF OPTION.
  563. *
  564. * OPTION TYPE
  565. *
  566. * TYPE OPTION LETTER.
  567. *
  568. * THE SYMBOL LO.X IS GENERATED, WHERE X IS THE OPTION BIT
  569. * CORRESPONDING TO THE LETTER *X*.
  570.  
  571.  
  572. .OPT SET 0
  573. NOREF .OPT
  574. PURGMAC OPTION
  575.  
  576. OPTION MACRO T
  577. LO.T EQU .OPT
  578. .OPT SET .OPT+1
  579. OPTION RMT
  580. CON 0R_T
  581. OPTION RMT
  582. LO.T DECMIC LO.T
  583. ENDM
  584. READK SPACE 4
  585. *** READK - READ CODED LINE TO WORKING BUFFER.
  586. *
  587. *
  588. * READK FILE,BUF,N
  589. *
  590. * WORDS ARE UNPACKED AND STORED IN THE WORKING BUFFER ONE 6/12
  591. * CHARACTER/WORD UNTIL THE END OF LINE (0000) BYTE IS SENSED.
  592. * IF THE CODED LINE TERMINATES BEFORE *N* CHARACTERS ARE
  593. * STORED, THE WORKING BUFFER IS FILLED WITH SPACE CODES.
  594. *
  595. * CALLS SSR.
  596.  
  597.  
  598. PURGMAC READK
  599.  
  600. READK MACRO F,S,N
  601. R= B6,S
  602. R= B7,N
  603. R= X2,F
  604. RJ =XSSR
  605. ENDM
  606. WRITEK SPACE 4,10
  607. *** WRITEK - WRITE CODED LINE FROM LINE BUFFER.
  608. *
  609. *
  610. * WRITEK FILE,BUF,N
  611. *
  612. * 6/12 CHARACTERS ARE PACKED FROM THE WORKING BUFFER 5-10
  613. * CHARACTERS PER WORD.
  614. * TRAILING CODES ARE DELETED BEFORE CHARACTERS ARE PACKED.
  615. *
  616. * CALLS SSW.
  617.  
  618.  
  619. PURGMAC WRITEK
  620.  
  621. WRITEK MACRO F,S,N
  622. R= B6,S
  623. R= B7,N
  624. R= X2,F
  625. RJ =XSSW
  626. ENDM
  627. QUAL SPACE 4
  628. ** DEFINE QUAL BLOCK ORDER.
  629.  
  630.  
  631. QUAL
  632. QUAL DIRECT
  633. QUAL PRESET
  634. QUAL MACRO$
  635. QUAL
  636. FETS TITLE FILE DEFINITIONS.
  637. ** FILE DEFINITIONS.
  638.  
  639.  
  640. ORG 110B
  641. FETS BSS 0 ALL FETS ARE 26 WORDS LONG
  642.  
  643. I BSS 0 DIRECTIVE INPUT FILE
  644. INPUT FILEC SBUF,SBUFL,FET=10
  645. BSSZ FETODL
  646.  
  647. O BSS 0 LIST OUTPUT FILE
  648. OUTPUT FILEC OBUF,OBUFL,FET=10
  649. BSSZ FETODL
  650.  
  651. C BSS 0 COMPILE FILE
  652. COMPILE FILEC CBUF,CBUFL+SBUFL,FET=10
  653. BSSZ FETODL
  654.  
  655. S BSS 0 SOURCE FILE
  656. SOURCE FILEC SBUF,SBUFL,FET=10
  657. ORG S
  658. CON 0
  659. ORG S+FETLEN
  660. BSSZ FETODL
  661.  
  662. M BSS 0 SCRATCH FILE
  663. ZZZZZG0 RFILEB MBUF,MBUFL,FET=10
  664. ORG M+7
  665. CON 0LSCR1+3
  666. ORG M+FETLEN
  667. BSSZ FETODL
  668.  
  669. P BSS 0 PROGRAM LIBRARY FILE
  670. OPL RFILEB PBUF,PBUFL,FET=10
  671. ORG P+7
  672. CON 0LOPL+3
  673. ORG P+FETLEN
  674. BSSZ FETODL
  675.  
  676. N BSS 0 NEW PROGRAM LIBRARY FILE
  677. NPL RFILEB NBUF,NBUFL,FET=10
  678. ORG N
  679. CON 0
  680. ORG N+8
  681. ORG N+FETLEN
  682. BSSZ FETODL
  683.  
  684. A BSS 0 SCRATCH FILE
  685. ZZZZZG1 RFILEC CBUF,CBUFL,FET=10
  686. ORG A+7
  687. CON 0LSCR2+3
  688. ORG A+FETLEN
  689. BSSZ FETODL
  690.  
  691. T BSS 0 INSERTION TEXT OVERFLOW FILE
  692. ZZZZZG2 RFILEB TBUF,TBUFL,FET=10
  693. ORG T
  694. CON 0
  695. ORG T+7
  696. CON 0LSCR3+3
  697. ORG T+FETLEN
  698. BSSZ FETODL
  699.  
  700.  
  701. FETSL BSS 0
  702. TITLE MANAGED TABLE DEFINITIONS.
  703. TABLES SPACE 4,10
  704. ** MODIFY MANAGED TABLES.
  705. *
  706. * MANAGED TABLES ARE REFERENCED BY TABLE NUMBER *TNAM*.
  707. *
  708. * F.TNAM FWA OF TABLE.
  709. * L.TNAM LENGTH OF TABLE.
  710. *
  711. * *TABLE* MACRO GENERATES THE ABOVE SYMBOLS.
  712.  
  713.  
  714. FTAB BSS 0
  715. LOC 0
  716. TDKN SPACE 4,10
  717. ** TDKN - TABLE OF DECK NAMES.
  718. *
  719. *T TDKN 42/DECK NAME,18/
  720. *T,TDKN+1 24/ADDRESS OF FILE NAME,36/RANDOM ADDRESS OF RECORD
  721.  
  722.  
  723. TDKN TABLE 10 TABLE OF DECK NAMES
  724. TNME SPACE 4,15
  725. ** TNME - TABLE OF NAMES MENTIONED ON DIRECTIVE LINES.
  726. *
  727. *T TNME 42/ NAME, 1/, 1/ U, 1/ Y, 1/, 1/ I, 12/, 1/ A
  728. *
  729. * NAME NAME MENTIONED ON DIRECTIVE LINE.
  730. * U IF NOT SET, INDICATED *UNYANK*. SET FOR *YANK*.
  731. * Y SET FOR *YANK* OR *UNYANK*.
  732. * I SET IF IDENT NAME.
  733. * A ALL AFTER FLAG.
  734. *
  735. * SET TO -*******- ON INITIAL ENTRY.
  736.  
  737.  
  738. TNME TABLE 10 TABLE OF NAMES
  739. TMOD SPACE 4,20
  740. ** TMOD - TABLE OF MODIFICATIONS.
  741. *
  742. *T TMOD 1/I,1/R,4/,18/AFC,18/NFC,18/NEXT
  743. *T,TMOD+1 1/E,5/,18/ALC,18/NLC,18/EC
  744. *T,TMOD+2 2/,16/IMN,18/NCI,24/AIT
  745. *
  746. * I SET IF INSERT. NOT SET IF DELETE.
  747. * R SET IF RESTORE.
  748. * AFC ADDRESS OF MODIFIER OF FIRST LINE FOR MODIFICATION.
  749. * NFC NUMBER OF FIRST LINE FOR MODIFICATION.
  750. * NEXT ADDRESS OF NEXT MODIFICATION.
  751. * E SET IF ERROR.
  752. * ALC ADDRESS OF MODIFIER OF LAST LINE FOR MODIFICATION.
  753. * NLC NUMBER OF LAST LINE FOR MODIFICATION.
  754. * EC ERROR CODE.
  755. * IMN INDEX OF MODIFIER NAME FOR MODIFICATION.
  756. * NCI NUMBER OF LINES TO INSERT.
  757. * AIT ADDRESS OF INSERTION TEXT.
  758.  
  759.  
  760. TMOD TABLE 30 TABLE OF MODIFICATIONS
  761. TDKI SPACE 4,12
  762. ** TDKI - TABLE OF DECK IDENTIFIERS.
  763. *
  764. * WHEN PROCESSING DIRECTIVES -
  765. *
  766. *T TDKI 42/DECK NAME,18/
  767. *
  768. * WHEN PROCESSING MODIFICATIONS -
  769. *
  770. *T TDKI 42/IDENTIFIER,1/Y,17/CARD NUMBER
  771. *
  772. * Y YANK FLAG.
  773.  
  774.  
  775. TDKI TABLE 10 TABLE OF DECK IDENTIFIERS
  776. TNCD SPACE 4,10
  777. ** TNCD - TABLE OF NEXT LINES.
  778. *
  779. * TABLE PARALLELS *TDKI*.
  780. *
  781. *T TNCD 42/,18/NEXT
  782. *
  783. * NEXT NEXT LINE TO BE PROCESSED.
  784.  
  785.  
  786. TNCD TABLE 10 TABLE OF NEXT LINES
  787. TEDT SPACE 4,12
  788. ** TEDT - TABLE OF DECKS TO BE EDITED.
  789. *
  790. *T TEDT 42/DECK NAME,18/AFM
  791. *T TEDT+1 42/,18/ADK
  792. *
  793. * AFM ADDRESS OF FIRST MODIFICATION.
  794. * ADK ADDRESS OF DECK IN *TDKN*.
  795.  
  796.  
  797. TEDT TABLE 10 TABLE OF DECKS TO BE EDITED
  798. TNDK SPACE 4,10
  799. ** TNDK - TABLE OF NEW DECKS.
  800. *
  801. * SEE *TDKN* TABLE FORMAT.
  802.  
  803.  
  804. TNDK TABLE 10 TABLE OF NEW DECKS
  805. TECD SPACE 4,10
  806. ** TECD - TABLE OF EDITED COMMON DECKS.
  807. *
  808. * SEE *TDKN* TABLE FORMAT.
  809.  
  810.  
  811. TECD TABLE 10 TABLE OF EDITED COMMON DECKS
  812. TDEF SPACE 4,10
  813. ** TDEF - TABLE OF DEFINED NAMES.
  814. *
  815. *T DEF 42/ DEFINED NAME, 1/ I, 1/ , 16/ VALUE
  816. *
  817. * I DEFINITION OF SYMBOL ENCOUNTERED ON INPUT. IF THIS
  818. * BIT IS SET COMPILE FILE DEFINITIONS OF THE SAME
  819. * SYMBOL WILL BE IGNORED.
  820.  
  821.  
  822. TDEF TABLE 10 TABLE OF DEFINED NAMES
  823. TIGD SPACE 4,10
  824. ** TIGD - TABLE OF DECKS TO BE IGNORED.
  825. *
  826. *T TIGD 42/DECK NAME,18/
  827.  
  828.  
  829. TIGD TABLE 10 TABLE OF DECKS TO BE IGNORED
  830. TMVE SPACE 4,10
  831. ** TMVE - TABLE OF MOVE AND PURGE DIRECTIVES.
  832. *
  833. *T TMVE 1/P,23/,18/DNR,18/DNP
  834. *
  835. * P PURGE BIT.
  836. * DNR DECK NAME INDEX OF MOVE REFERENCE.
  837. * DNP DECK NAME INDEX OF PURGE/MOVE.
  838.  
  839.  
  840. TMVE TABLE 10 TABLE OF MOVE AND PURGE DIRECTIVES
  841. TNCC SPACE 4,10
  842. ** TNCC - TABLE OF NESTED COMMON DECK CALLS.
  843. *
  844. *T TNCC 42/DECK NAME,18/SKIP COUNT
  845.  
  846.  
  847. TNCC TABLE 50 TABLE OF NESTED COMMON DECK CALLS
  848. TCCD SPACE 4,10
  849. ** TCCD - TABLE OF CALLED COMMON DECKS.
  850. *
  851. *T TCCD 42/DECK NAME,18/0
  852.  
  853.  
  854. TCCD TABLE 200 TABLE OF CALLED COMMON DECKS
  855. TTXT SPACE 4,10
  856. ** TXTT - TABLE OF INSERTION TEXT.
  857. *
  858. * VARIABLE LENGTH ENTRIES.
  859. *
  860. * COMPRESSED LINE TEXT.
  861.  
  862.  
  863. TTXT TABLE IWMAX TABLE OF INSERTION TEXT
  864. TCDK SPACE 4,10
  865. ** TCDK - TABLE OF COMMON DECKS.
  866. *
  867. * SEE *TXTT* TABLE FORMAT.
  868.  
  869.  
  870. TCDK TABLE 0 TABLE OF COMMON DECKS
  871. SPACE 4
  872. * MANAGED TABLES VALUES.
  873.  
  874.  
  875. FTABL BSS 0
  876. LOC *O
  877. CON MTBS LWA+1 OF ALL TABLES
  878. LTAB BSS 0
  879. NTAB EQU LTAB+FTABL
  880. HERE
  881. OPTION SPACE 4,10
  882. ** OPTION - LIST OPTION TABLE.
  883.  
  884.  
  885. OPTION E ERRORS
  886. OPTION C OTHER INPUT DIRECTIVES
  887. OPTION T INPUT TEXT
  888. OPTION M MODIFICATIONS
  889. OPTION W COMPILE FILE DIRECTIVES
  890. OPTION D DECK STATUS
  891. OPTION S STATISTICS
  892. OPTION I INACTIVE LINES
  893. OPTION A ACTIVE LINES
  894. TITLE TEMPORARY STORAGE ASSIGNMENTS.
  895. COMMON SPACE 4
  896. ** COMMON DATA.
  897.  
  898.  
  899. T1 CON 0 TEMPORARY STORAGE
  900. T2 CON 0 TEMPORARY STORAGE
  901. FL CON 0 FIELD LENGTH
  902. DL CON -0 LENGTH OF ORIGINAL DECK TABLE
  903. PC CON 1R* DIRECTIVE PREFIX CHARACTER
  904. PCC CON 1R* COMPILE PREFIX CHARACTER
  905. CH CON 0 CHARACTER POINTER
  906. SC CON 72 SEQUENCE NUMBER COLUMN - 1
  907. CON 0 CURRENT VALUE OF SC (RESET FOR EACH DECK)
  908. PL CON 0LOPL PROGRAM LIBRARY NAME
  909. NC CON 0 LINES WRITTEN TO COMPILE THIS RECORD
  910. CON 0 TOTAL NUMBER OF LINES ON COMPILE FILE
  911. RI CON 0 RANDOM INDEX RETURN
  912. CON 0
  913. IW CON 72 DEFAULT INPUT LINE WIDTH
  914. DISCOL CON 00B DISPLAY CODE COLON CHARACTER
  915. DISPER CON 63B DISPLAY CODE PERCENT CHARACTER
  916. SFL CON 0 STORE FL
  917. EFL CON 0 *ECS* FIELD LENGTH
  918. CDC CON 0 OPLC LINE COUNT - RESET FOR EACH DECK
  919. CDS CON 0 OPLC SKIP COUNT - RESET FOR EACH DECK
  920. SPACE 4
  921. ** MODIFICATION CONTROLS.
  922.  
  923.  
  924. EI CON 0 EDIT TABLE INDEX
  925. MA CON 0 MODIFICATION ADDRESS
  926. CON 0 DELETE MODIFICATION ADDRESS
  927. CON 0 INSERT MODIFICATION ADDRESS
  928. DN CON 0 CURRENT DECK NAME
  929. DA CON 0 CURRENT DECK ADDRESS
  930. EC CON 0 DECK ERROR COUNTER
  931. CC CON 0 INACTIVE LINE COUNTER
  932. CON 0 ACTIVE LINE COUNTER
  933. CON 0 INSERTED LINE COUNTER
  934. SPACE 4
  935. ** LIST CONTROLS.
  936.  
  937.  
  938. BL CON 0 BURSTABLE LISTING FLAG
  939. ERRM CON 0 ADDRESS OF ERROR MESSAGE
  940. LO CON 0 LIST OPTIONS
  941. LC CON 99999 LINE COUNT
  942. LL CON 0 LINE LIMIT
  943. ERRNZ LL-LC-1 LOCATIONS MUST BE CONTIGUOUS
  944. PN CON 1 PAGE NUMBER
  945. TL CON TLT ADDRESS OF TITLE TEXT
  946. TO CON 0 TERMINAL OUTPUT FORMAT FLAG
  947. TI CON 1 TERMINAL INPUT FORMAT FLAG
  948. FLAGS SPACE 4,6
  949. ** FLAGS.
  950.  
  951.  
  952. EF CON 0 ERROR (TOTAL ERRORS DURING MODIFICATION)
  953. DE CON 0 DIRECTIVE ERROR COUNT
  954. EA CON DE DIRECTIVE ERROR COUNTER ADDRESS
  955. CD CON 0 COMMON DECK
  956. LF CON 0 SET IF DATA TRANSMITTED TO LIST FILE
  957. YK CON 0 YANK IN DIRECTIVES
  958. YD CON 0 YANK IN DECK
  959. UP CON 0 *UPDATE* FLAG FOR INSERTION LINE NUMBERS
  960. COPL CON -1 CHARACTER SET OF OPL
  961. CNPL CON -1 CHARACTER SET OF NPL
  962. CVT CON 0 CONVERSION OPTION
  963. MADCV CON 0 MADIFY CONVERSION FLAG
  964. IG CON 0 IGNORE DIRECTIVES PRESENT
  965. IFIP CON 0 *IF IN PROGRESS FLAG
  966. * .EQ. 0 IMPLIES NO IF IN PROGRESS
  967. * .LT. 0 IMPLIES FALSE CONDITION PRESENT
  968. * .GT. 0 IMPLIES TRUE CONTITION PRESENT
  969. SPACE 4,6
  970. ** FLAGS SET BY COMMAND PARAMETERS.
  971.  
  972.  
  973. CL CON 0 LINE LISTED
  974. CON 0 LINE TO BE LISTED FLAG
  975. DB CON 0 DEBUG
  976. NR CON 0 NO REWIND FOR PROGRAM LIBRARY
  977. NS CON 0 NO SEQUENCE NUMBERS ON COMPILE FILE
  978. CON 0 CURRENT NO SEQUENCE FLAG (RESET EACH DECK)
  979. SS CON 0 SEQUENCE NUMBERS ON SOURCE FILE
  980. AM CON 0 *A* MODE
  981. CON 0 FIRST LINE OF RECORD FLAG
  982. FM CON 0 *F* MODE
  983. QM CON 0 *Q* MODE
  984. UM CON 0 *U* MODE
  985. XM CON 0 *X* MODE
  986. ZM CON 0 *Z* MODE
  987. CMNF CON 1 COMMENTS NEEDED FLAG
  988. CSR CON -0 CHARACTER SET REQUEST (*EC*)
  989. CSD SPACE 4,10
  990. * CHARACTER SET DEFINITIONS.
  991.  
  992. .DIS EQU 0 DISPLAY CODE 63/64
  993. .AS612 EQU 1 ASCII 6/12 (63/64)
  994.  
  995. TCST SPACE 4,10
  996. ** TABLE OF SYMBOLIC NAMES OF CHARACTER SETS.
  997. *
  998. *T TCST 42/ CS NAME,18/ CS ORDINAL
  999. *
  1000.  
  1001. TCST BSS 0
  1002. CON 0LDISPLAY+.DIS DISPLAY
  1003. CON 0LASCII+.AS612 ASCII (6/12)
  1004. CON 0 MAXIMUM CHARACTER SETS
  1005.  
  1006. * CHARACTER SET CONTROLS.
  1007.  
  1008. CSC CON .AS612 CURRENT CHARACTER SET
  1009. SETC CON -1 NEG = USE CHARACTER SET OF DECK
  1010. * 0 = USE DISPLAY SET (FOLD IF NECESSARY)
  1011. * 1 = USE 6/12 ASCII SET
  1012.  
  1013. MODIFY TITLE MODIFY - MAIN PROGRAM.
  1014. ** MODIFY - MAIN PROGRAM.
  1015.  
  1016.  
  1017. MODIFY SB1 1 (B1) = 1
  1018. RJ /PRESET/PRS PRESET PROGRAM
  1019. RJ /DIRECT/PDC PROCESS DIRECTIVE LINES
  1020. RJ /DIRECT/IMP INITIALIZE MODIFICATION PASS
  1021. RJ /DIRECT/PMP PROCESS *MOVE* AND *PURDECK*
  1022. SX6 EC SET MODIFICATION ERROR COUNTER ADDRESS
  1023. SA6 EA
  1024. EQ MOD6 BEGIN NEXT DECK
  1025.  
  1026. * PROCESS MODIFICATIONS.
  1027.  
  1028. MOD1 BX6 X6-X6 CLEAR LINE LIST
  1029. SA5 MA+2 CHECK MODIFICATIONS
  1030. SA6 CL
  1031. SA6 CL+1
  1032. SA6 CDAC CLEAR LINE ACTIVITY
  1033. ZR X5,MOD2 IF NO MODIFICATIONS
  1034. RJ INS PROCESS INSERT
  1035. SA5 MA CHECK MODIFICATIONS
  1036. EQ MOD3
  1037.  
  1038. MOD2 SA0 P READ LINE FROM PROGRAM LIBRARY
  1039. RJ RPF READ PROGRAM FILE
  1040. NZ X1,MOD5 IF EOR
  1041. SA5 MA+1 CHECK MODIFICATION ADDRESS
  1042. MOD3 ZR X5,MOD4 IF NO MODIFICATIONS
  1043. RJ DEL PROCESS DELETE/RESTORE
  1044. MOD4 RJ SCS SET LINE STATUS
  1045. RJ WRC WRITE LINE
  1046. SA1 CL+1
  1047. ZR X1,MOD1 IF NO LIST
  1048. RJ LCS LIST LINE STATUS
  1049. EQ MOD1 LOOP
  1050.  
  1051. * COMPLETE PROCESSING.
  1052.  
  1053. MOD5 RJ CDK COMPLETE DECK
  1054. MOD6 RJ BDK BEGIN NEXT DECK
  1055. NZ X7,MOD1 IF DECK TO BE PROCESSED
  1056. SA0 N WRITE DIRECTORY
  1057. RJ WDR WRITE DIRECTORY
  1058. RJ LST LIST STATISTICS
  1059. RJ CMF COMPLETE FILES
  1060. SA1 EF
  1061. SA2 DB
  1062. SA3 DE DIRECTIVE ERROR COUNT
  1063. SA0 =C* MODIFICATION/DIRECTIVE ERRORS.*
  1064. NZ X3,MOD8 IF DEBUG AND AT LEAST DIRECTIVE ERRORS
  1065. ZR X1,MOD7 IF NO MODIFICATION ERRORS
  1066. SA0 =C* MODIFICATION ERRORS.*
  1067. ZR X2,ABT1 IF DEBUG NOT SET AND MODIFICATION ERRORS
  1068. EQ MOD8 ISSUE MESSAGE
  1069.  
  1070. MOD7 SA0 =C* MODIFICATION COMPLETE.*
  1071. MOD8 MESSAGE A0
  1072. RJ CAS CALL ASSEMBLER
  1073. ENDRUN
  1074. BDK SPACE 4,20
  1075. ** BDK - BEGIN DECK.
  1076. *
  1077. * EXIT (X7) .NE. 0, IF DECK READY FOR PROCESSING.
  1078. *
  1079. * USES X - ALL.
  1080. * A - 1, 2, 3, 4, 5, 6, 7.
  1081. * B - 2.
  1082. *
  1083. * CALLS LDS, RMT, SFN, SNC.
  1084.  
  1085.  
  1086. BDK SUBR ENTRY/EXIT
  1087. SA1 EI CHECK EDIT TABLE
  1088. SA2 L.TEDT
  1089. IX7 X2-X1
  1090. SX6 X1+2 ADVANCE EDIT INDEX
  1091. ZR X7,BDKX IF END OF TABLE - RETURN
  1092. SA3 F.TEDT LOOK UP EDIT TABLE ENTRY
  1093. SB2 X1
  1094. SA2 X3+B2
  1095. SA6 A1
  1096. MX4 -17 SET MODIFICATION ADDRESS
  1097. BX7 -X4*X2
  1098. MX0 42 MASK DECK NAME
  1099. SA7 MA
  1100. BX6 X0*X2
  1101. SA1 A2+B1 SET DECK ADDRESS
  1102. BX7 X1
  1103. SA6 A2 CLEAR MODIFICATION POINTER
  1104. SA6 DN SET DECK NAME
  1105. SA6 BDKA+1 ENTER DECK NAME IN MESSAGE
  1106. SA7 DA
  1107. BX1 X6
  1108. RJ SFN ENTER DECK NAME IN SUBTITLE
  1109. SA6 SBTL+2
  1110. SA1 BL
  1111. ZR X1,BDK1 IF BURSTABLE LISTING NOT SPECIFIED
  1112. SX7 99999 FORCE PAGE EJECT
  1113. SA7 LC
  1114. BDK1 BX7 X7-X7 CLEAR DECK IDENTIFIER TABLE LENGTH
  1115. SA7 L.TDKI
  1116. SA7 L.TCCD CLEAR TABLE OF CALLED COMMON DECKS
  1117. SA7 L.TNCC CLEAR TABLE OF NESTED COMMON DECK CALLS
  1118. SA7 CD CLEAR COMMON DECK FLAG
  1119. SA7 L.TNCD CLEAR NEXT LINE TABLE
  1120. SA7 IFIP CLEAR *IF CONDITION FLAG
  1121. RJ RMT READ MODIFIER TABLE
  1122. MESSAGE BDKA,1 ISSUE CONSOLE MESSAGE
  1123. SA1 S
  1124. ZR X1,BDK1.2 IF NO SOURCE
  1125. RECALL A1
  1126. WRITEW S,DN,1 WRITE DECK NAME
  1127. SA1 CSC
  1128. ZR X1,BDK1.1 IF NOT AN ASCII DECK
  1129. WRITEW X2,(=0LASCII),1
  1130. BDK1.1 SA1 CD
  1131. ZR X1,BDK1.2 IF NOT COMMON DECK
  1132. WRITEW X2,(=0LCOMMON),1
  1133. BDK1.2 SA1 SC RESET SEQUENCE COLUMN
  1134. SA2 NS RESET NO SEQUENCE FLAG
  1135. BX6 X1
  1136. LX7 X2
  1137. SA6 A1+B1
  1138. SA7 A2+B1
  1139. SA3 BDKB
  1140. ZR X3,BDK2 IF NO PREVIOUS USE OF SCRATCH FILE
  1141. RECALL M
  1142. BX6 X6-X6 CLEAR NEW PROGRAM LIBRARY
  1143. SA6 A3
  1144. SA6 M
  1145. BDK2 SA1 CD
  1146. ZR X1,BDK3 IF NOT COMMON DECK
  1147. SA3 MA
  1148. SA4 YD
  1149. IX5 X3+X4
  1150. ZR X5,BDK3 IF NO MODIFICATIONS
  1151. SA1 M+7 USE SCRATCH FILE FOR COMMON DECK
  1152. BX6 X1
  1153. SX7 B1 SET NEW PROGRAM LIBRARY FLAG
  1154. SA6 M
  1155. SA7 BDKB
  1156. BDK3 SA1 N
  1157. SA2 M
  1158. BX1 X1+X2
  1159. ZR X1,BDK4 IF NO NEW PROGRAM LIBRARY
  1160. RJ WMT WRITE MODIFIER TABLE
  1161. SA2 M
  1162. ZR X2,BDK4 IF NO SCRATCH NPL
  1163. SA1 F.TNDK
  1164. SA2 L.TNDK
  1165. IX3 X1+X2
  1166. SA1 X3-1
  1167. ADDWRD TECD,X1 ENTER DECK NAME
  1168. BDK4 RJ LDS LIST DECK STATUS
  1169. SA1 CD
  1170. SA2 AM
  1171. NZ X1,BDK5 IF COMMON DECK
  1172. ZR X2,BDK5 IF NOT *A* MODE
  1173. SA1 C
  1174. ZR X1,BDK5 IF NO COMPILE FILE
  1175. SA2 A2+B1
  1176. NZ X2,BDK5 IF NOT FIRST DECK
  1177. SX6 B1
  1178. SA6 A2
  1179. WRITEW C,CIDT,1 WRITE *A* MODE FLAG
  1180. BDK5 BX6 X6-X6 CLEAR LINE COUNTS
  1181. SA6 CC
  1182. SA6 A6+B1
  1183. SA6 A6+B1
  1184. RJ SNC SET NEXT LINES
  1185. SA1 MA FORCE INITIAL MODIFICATION
  1186. SX6 X1
  1187. SX7 B1
  1188. SA6 A1+B1
  1189. EQ BDKX RETURN
  1190.  
  1191. BDKA CON 10H MODIFY /
  1192. CON 0
  1193. BDKB CON 0 NEW PROGRAM LIBRARY FLAG FOR COMMON DECK
  1194. CDK SPACE 4,20
  1195. ** CDK - COMPLETE DECK.
  1196. *
  1197. * ISSUE ERROR MESSAGE IF APPROPRIATE, COMPLETE DECK
  1198. * ON NEW PROGRAM LIBRARY IF SELECTED AND RESET
  1199. * MISCELLANEOUS FLAGS.
  1200. *
  1201. * USES X - 1, 2, 5, 6, 7.
  1202. * A - 1, 2, 5, 6, 7.
  1203. * B - 7.
  1204. *
  1205. * CALLS ADW, CDD, LUM, WOF.
  1206.  
  1207.  
  1208. CDK SUBR ENTRY/EXIT
  1209. SA5 MA
  1210. ZR X5,CDK1 IF NO MODIFICATIONS
  1211. RJ LUM LIST UNPROCESSED MODIFICATIONS
  1212. CDK1 SA2 EF PROPAGATE ERRORS
  1213. SA1 EC
  1214. BX7 X7-X7 CLEAR ERROR COUNT
  1215. IX6 X2+X1
  1216. SA7 A1
  1217. SA6 A2
  1218. SA7 CD CLEAR COMMON DECK FLAG
  1219. SX6 -B1
  1220. SA6 SETC CLEAR *CSET INDICATOR
  1221. ZR X1,CDK3 IF NO ERRORS
  1222. SA2 SBTL+2
  1223. SB7 X1
  1224. BX6 X2
  1225. SA2 =10H ERRORS IN
  1226. NE B7,B1,CDK2 IF MORE THAN 1
  1227. SA2 =10H ERROR IN
  1228. LX6 6 SHIFT NAME
  1229. CDK2 BX7 X2
  1230. LX6 -6
  1231. SA7 CDKA+1
  1232. SA6 A7+B1
  1233. SX1 B7 CONVERT COUNT
  1234. RJ CDD CONVERT TO DECIMAL DISPLAY
  1235. SA6 A7-B1
  1236. MESSAGE A6,3
  1237. CDK3 SA1 N
  1238. ZR X1,CDK4 IF NO NPL
  1239. WRITER N,R
  1240. SA1 RI ENTER RANDOM INDEX
  1241. SX2 N+7
  1242. LX2 36
  1243. ADDWRD TNDK,X2+X1
  1244. CDK4 SA1 M
  1245. ZR X1,CDK5 IF NO SCRATCH NPL
  1246. WRITER M,R
  1247. SA1 RI+1
  1248. SX2 M+7
  1249. LX2 36
  1250. ADDWRD TECD,X2+X1
  1251. CDK5 WRITER S
  1252. LISTOP D,CDKX IF *D* OPTION OFF
  1253. PRINT (=C* *)
  1254. SA1 CC INACTIVE LINE COUNT
  1255. RJ CDD CONVERT TO DECIMAL DISPLAY
  1256. SA6 CDKC
  1257. SA1 A1+1 ACTIVE LINE COUNT
  1258. RJ CDD CONVERT TO DECIMAL DISPLAY
  1259. SA6 CDKB+1
  1260. SA1 A1+1 INSERTED LINE COUNT
  1261. RJ CDD CONVERT TO DECIMAL DISPLAY
  1262. SA6 CDKD
  1263. PRINT CDKB
  1264. SA1 MA
  1265. SA2 YD
  1266. IX6 X1+X2
  1267. ZR X6,CDK IF NO MODIFICATIONS - RETURN
  1268. SX6 99999 FORCE PAGE EJECT
  1269. SA6 LC
  1270. EQ CDKX RETURN
  1271.  
  1272. CDKA DATA 10H
  1273. DATA 10HERRORS IN
  1274. DATA 10H
  1275. DATA 0
  1276.  
  1277. CDKB DATA 10H
  1278. DATA 10H
  1279. DATA 20H ACTIVE LINE(S).
  1280.  
  1281. CDKC DATA 10H
  1282. DATA 20H INACTIVE LINE(S).
  1283.  
  1284. CDKD DATA 10H
  1285. DATA 20H INSERTED LINE(S).
  1286. DATA 0
  1287. INS TITLE MODIFICATION PROCESSORS.
  1288. INS SPACE 4,20
  1289. ** INS - PROCESS INSERTIONS.
  1290. *
  1291. * ENTRY (A5) = INSERT POINTER ADDRESS.
  1292. * (X5) = INSERT ADDRESS.
  1293. *
  1294. * USES X - 0, 1, 2, 3, 5, 6, 7.
  1295. * A - 1, 2, 3, 5, 6, 7.
  1296. * B - 2, 4.
  1297. *
  1298. * CALLS RTF.
  1299.  
  1300.  
  1301. INS SUBR ENTRY/EXIT
  1302. SA5 X5+
  1303. SA5 X5+2 READ TEXT
  1304. RJ RTF READ TEXT FILE
  1305. LX5 -42 EXTRACT IDENTIFIER ADDRESS
  1306. SA1 X5+B1 ADVANCE LINE COUNT
  1307. SX2 B1
  1308. IX7 X1+X2
  1309. SA7 A1
  1310. LX2 24 DECREMENT INSERTION COUNT
  1311. IX6 X6-X2
  1312. SA6 A5
  1313. AX6 24 CHECK FOR END OF TEXT
  1314. SB2 X6
  1315. NZ B2,INS1 IF NOT END OF TEXT
  1316. SA2 MA+2 UNLINK INSERT
  1317. BX6 X6-X6
  1318. MX0 -18
  1319. SA6 A2 CLEAR INSERT
  1320. SA2 X2
  1321. SA3 X2
  1322. BX6 X0*X2
  1323. BX0 -X0*X3
  1324. IX6 X6+X0
  1325. SB4 A2-MA-1
  1326. SA6 A2
  1327. NZ B4,INS1 IF NOT FIRST INSERT
  1328. SA6 A2-B1
  1329. INS1 LX1 -24 SET IDENTIFIER INDEX
  1330. SA2 F.TDKI
  1331. SB2 X1
  1332. SA3 X2+B2 MERGE DECK IDENTIFIER AND LINE NUMBER
  1333. MX0 44
  1334. SX6 X7
  1335. BX1 X0*X3
  1336. IX6 X1+X6
  1337. SX7 B2+1S16 SET FIRST MHB RESTORED
  1338. SA6 A3 SET LINE COUNTER
  1339. SA7 TMHB
  1340. SA6 CDID SET LINE ID
  1341. SX7 B1 SET MHB COUNT = 1
  1342. SA7 A7-B1
  1343. EQ INSX RETURN
  1344. DEL SPACE 4,15
  1345. ** DEL - PROCESS DELETIONS.
  1346. *
  1347. * ENTRY (A5) = MODIFICATION TABLE ADDRESS.
  1348. * (X5) = ADDRESS OF MODIFICATION ADDRESS TABLE.
  1349. *
  1350. * USES ALL.
  1351.  
  1352.  
  1353. DEL11 SX6 X5 SET INSERT ADDRESS
  1354. BX7 X7-X7 CLEAR MODIFICATION INDICATOR
  1355. SA6 MA+2
  1356. NZ X0,DELX IF MODIFICATIONS REMAIN
  1357. SA7 MA+1
  1358.  
  1359. DEL SUBR ENTRY/EXIT
  1360. SA1 L.TNCD
  1361. SA2 F.TNCD
  1362. SB3 B0
  1363. SB4 X1
  1364. SX7 1S16
  1365. DEL0 SA7 X2+B3 SET HIGH LINE NUMBER
  1366. SB3 B3+B1
  1367. NE B3,B4,DEL0 IF NOT COMPLETE
  1368. SA1 F.TDKI (B7) = TABLE DIFFERENCE
  1369. IX6 X2-X1
  1370. SB7 X6
  1371. SB2 X5
  1372. BX0 X0-X0
  1373. MX5 0
  1374. SA1 A5 SET POINTER ADDRESS
  1375. DEL1 ZR B2,DEL11 IF END OF MODIFICATION TABLE
  1376. SA0 A1 SAVE POINTER ADDRESS
  1377. SA1 B2 CHECK NEXT ENTRY
  1378. SA2 B2+B1 (B4) = LAST LIMIT LINE COUNTER
  1379. SB2 X1 SET NEXT INDEX
  1380. MI X2,DEL1 IF ERROR FLAG SET
  1381. LX1 -18 (B3) = FIRST LIMIT LINE NUMBER
  1382. SB3 X1
  1383. LX1 -18 (B5) = CURRENT LINE NUMBER
  1384. SA4 X1
  1385. SA3 X1+B7 (B6) = MINIMUM LINE NUMBER
  1386. SB5 X4
  1387. SB6 X3
  1388. LX2 -18
  1389. GT B3,B6,DEL2 IF LAST MODIFICATION LOWER
  1390. SX6 B3
  1391. SA6 A3
  1392. DEL2 LT B5,B3,DEL1 IF FIRST LIMIT NOT REACHED
  1393.  
  1394. * PROCESS ACTIVE INSERT OR DELETE.
  1395.  
  1396. LX1 36
  1397. SB4 X2
  1398. SX7 1S16
  1399. BX4 X7*X4
  1400. NZ X4,DEL9 IF MOD TO YANKED IDENT
  1401. PL X1,DEL5 IF NOT INSERT
  1402. DEL3 SA2 A1+2 CHECK TEXT STATUS
  1403. AX2 24
  1404. SB4 X2
  1405. SX0 X0+B1
  1406. ZR B4,DEL4 IF NO TEXT
  1407. SX5 A0 UPDATE MODIFICATON INDEX
  1408. EQ DEL1 LOOP
  1409.  
  1410. DEL4 MX7 -18 UNLINK INSERT
  1411. SA1 A1
  1412. BX6 -X7*X1
  1413. SA1 A0
  1414. BX7 X7*X1
  1415. IX6 X6+X7
  1416. SB4 A0-MA-1
  1417. SA6 A0
  1418. NZ B4,DEL1 IF NOT FIRST INSERT
  1419. SA6 A0-B1
  1420. EQ DEL1 LOOP
  1421.  
  1422. * PROCESS DELETE.
  1423.  
  1424. DEL5 LX2 -18 (B6) = CURRENT LINE NUMBER
  1425. SA3 X2
  1426. SB6 X3
  1427. SX0 X0+B1 COUNT DELETION
  1428. GT B6,B4,DEL8 IF CURRENT LINE BEYOND LAST LIMIT
  1429. SA3 A2+B1 EXTRACT MODIFICATION SET INDEX
  1430. LX3 -42
  1431. SA4 X3+B1
  1432. LX4 -24
  1433. SX6 X4
  1434. LX1 59-57
  1435. SA4 NMHB (X4) = INDEX OF LAST MHB
  1436. PL X1,DEL6 IF MODIFICATION IS DELETION
  1437. SX6 X6+1S16 SET RESTORE BIT
  1438. DEL6 SA6 X4+TMHB STORE LAST MHB
  1439. MX7 -16 CHECK PREVIOUS MHB
  1440. SA3 A6-B1
  1441. BX3 -X7*X3
  1442. BX6 -X7*X6
  1443. IX2 X6-X3
  1444. ZR X2,DEL8 IF SAME IDENTIFIER
  1445. MI X2,DEL7 IF PREVIOUS MODIFIER
  1446. SX6 X4+1
  1447. SA6 A4+
  1448. DEL7 NE B4,B6,DEL1 IF LAST LIMIT NOT REACHED
  1449. SA2 A2 CONVERT TO INSERT AT LAST LIMIT
  1450. MX1 1
  1451. SX7 B2
  1452. IX2 X2+X7
  1453. BX7 X1+X2
  1454. SA7 A2-B1
  1455. EQ DEL3 LOOP
  1456.  
  1457. * NOTE- IF (X2) = 0, ERROR IS OVERLAP.
  1458.  
  1459. DEL8 SX7 B1+B1 SET OVERLAP
  1460. ZR X2,DEL10 IF OVERLAP
  1461. SX7 X7+B1 SET RANGE ERROR
  1462. NE B3,B4,DEL10 IF RANGE ERROR
  1463. NE B5,B6,DEL10 IF NOT SAME LINE
  1464. DEL9 SX7 B0+ SET DIRECTIVE NOT REACHED
  1465. DEL10 SA2 A2 ADD ERROR CODE TO WORD 2
  1466. MX1 1
  1467. BX7 X1+X7
  1468. BX7 X7+X2
  1469. SA7 A2
  1470. EQ DEL1 LOOP
  1471. SCS SPACE 4,20
  1472. ** SCS - SET LINE STATUS.
  1473. *
  1474. * SET LINE ACTIVITY ACCORDING TO LAST MHB AND YANK
  1475. * STATUS. LIST MODIFICATION TO LINE.
  1476. *
  1477. * ENTRY (NMHB) = MHB COUNT.
  1478. *
  1479. * USES X - 0, 1, 2, 3, 6, 7.
  1480. * A - 1, 2, 3, 6, 7.
  1481. * B - 2, 3.
  1482. *
  1483. * CALLS ECD.
  1484.  
  1485.  
  1486. SCS SUBR ENTRY/EXIT
  1487. SA1 NMHB (B2) = MHB COUNT
  1488. SA2 F.TDKI (B3) = FWA DECK IDENTIFIER TABLE
  1489. MX0 -16 MHB INDEX MASK
  1490. SB2 X1
  1491. SB3 X2
  1492. BX7 X7-X7 CLEAR STATUS
  1493. SA2 A1+B1 FIRST MHB
  1494. BX3 -X0*X2
  1495. ZR X3,SCS1 IF ORIGINAL LINE
  1496. SA2 CC+2 ADVANCE INSERTED LINE COUNT
  1497. SX6 X2+B1
  1498. SA6 A2
  1499. SCS1 SA1 A1+B1 NEXT MHB
  1500. BX3 -X0*X1 SET MODIFIER INDEX
  1501. SB2 B2-B1 COUNT MHB
  1502. SA2 X3+B3
  1503. LX2 59-16 CHECK YANK
  1504. MI X2,SCS2 IF MODIFIER YANKED
  1505. BX7 X1 STATUS = MHB STATUS
  1506. SCS2 NZ B2,SCS1 IF NOT END OF MHB,S
  1507. SA3 CDAC COMPARE STATUS
  1508. LX7 59-16
  1509. BX6 X7-X3
  1510. SA7 A3 SET NEW STATUS
  1511. SX1 B1
  1512. LX7 1
  1513. BX2 X1*X7
  1514. SA3 CC+X2 COUNT LINE
  1515. SX7 X3+B1
  1516. SA7 A3
  1517. PL X6,SCSX IF UNCHANGED - RETURN
  1518. LISTOP M,SCSX IF NO LIST FOR MODIFICATION - RETURN
  1519. RJ ECD EXPAND LINE
  1520. SA3 CDAC CHECK STATUS
  1521. SX6 1RA
  1522. SX7 1R
  1523. MI X3,SCS3 IF ACTIVE
  1524. SX6 1R
  1525. SX7 1RD
  1526. SCS3 SA6 CHSP+5
  1527. SA7 A6+1
  1528. SA6 CL+1
  1529. EQ SCSX RETURN
  1530. SNC SPACE 4,10
  1531. ** SNC - SET NEXT LINES.
  1532. *
  1533. * USES X - 1, 2, 3, 4, 6, 7.
  1534. * A - 0, 1, 2, 3, 4, 6.
  1535. * B - 2, 3, 4, 6, 7.
  1536.  
  1537.  
  1538. SNC SUBR ENTRY/EXIT
  1539. SA1 L.TNCD
  1540. SA2 F.TNCD
  1541. SB3 B0
  1542. SB4 X1
  1543. SX7 1S16
  1544. SX2 X2+
  1545. SB2 2
  1546. SNC1 SA7 X2+B3 SET HIGH LINE NUMBER
  1547. SB3 B3+B1
  1548. NE B3,B4,SNC1 IF END OF TABLE NOT REACHED
  1549. SA1 MA
  1550. SA4 F.TDKI (B7) = TABLE DIFFERENCE
  1551. SB2 X1+
  1552. IX6 X2-X4
  1553. SB7 X6
  1554. SNC2 ZR B2,SNCX IF END OF MODIFICATION TABLE - RETURN
  1555. SA0 A1 SAVE POINTER ADDRESS
  1556. SA1 B2 CHECK NEXT ENTRY
  1557. SA4 B2+B1
  1558. SB2 X1 SET NEXT ENTRY
  1559. LX1 -18 (B3) = FIRST LIMIT LINE NUMBER
  1560. SB3 X1
  1561. LX1 -18 (B6) = MINIMUM LINE NUMBER
  1562. MI X4,SNC2 IF ERROR FLAG SET
  1563. SA3 X1+B7
  1564. SB6 X3+
  1565. GT B3,B6,SNC3 IF LAST MODIFICATION LOWER
  1566. SX6 B3+ UPDATE MINIMUM LINE NUMBER
  1567. SA6 A3+
  1568. SNC3 NZ B3,SNC2 IF FIRST LIMIT NOT REACHED
  1569.  
  1570. * PROCESS ACTIVE INSERT OR DELETE.
  1571.  
  1572. LX1 36
  1573. PL X1,SNC2 IF NOT INSERT
  1574. SA2 A1+2
  1575. AX2 24
  1576. SB4 X2
  1577. ZR B4,SNC4 IF NO TEXT
  1578. SX6 A0+
  1579. SA6 MA+2
  1580. EQ SNC2 LOOP
  1581.  
  1582. SNC4 MX7 -18 UNLINK INSERT
  1583. SA1 A1
  1584. BX6 -X7*X1
  1585. SA1 A0
  1586. BX7 X7*X1
  1587. IX6 X6+X7
  1588. SA6 A0+
  1589. EQ SNC2 LOOP
  1590. TITLE WRITE COMPILE FILE PROCESSORS.
  1591. ** WRC - WRITE LINE.
  1592. *
  1593. * WRITE LINE TO NEW PROGRAM LIBRARY, SOURCE, COMPILE, AND
  1594. * LIST OUTPUT AS REQUIRED.
  1595. * *WRC* WILL CALL *WCC* IF A COMPRESSED COMPILE FILE IS TO
  1596. * BE WRITTEN. FOR NON-COMPRESSED COMPILE FILE GENERATION
  1597. * *WCF* WILL BE CALLED.
  1598. *
  1599. * USES X - 1, 2.
  1600. * A - 1, 2.
  1601. *
  1602. * CALLS WCC, WNF, WSC.
  1603.  
  1604.  
  1605. WRC2 RJ WSC WRITE STANDARD COMPILE FILE
  1606.  
  1607. WRC SUBR ENTRY/EXIT
  1608. SA1 N
  1609. SA2 M
  1610. BX1 X1+X2
  1611. ZR X1,WRC1 IF NO NEW PROGRAM LIBRARY
  1612. RJ WNF WRITE NEW PROGRAM LIBRARY
  1613. WRC1 SA1 AM
  1614. SA2 CD
  1615. ZR X1,WRC2 IF NOT *A* MODE
  1616. NZ X2,WRCX IF COMMON DECK - RETURN
  1617. RJ WCC WRITE COMPRESSED COMPILE FILE
  1618. EQ WRCX RETURN
  1619. WCC SPACE 4,10
  1620. ** WCC - WRITE COMPRESSED COMPILE FILE.
  1621. *
  1622. * ENTRY (PCC) = PREFIX CHARACTER.
  1623. * (CDTX) = FIRST WORD OF LINE TEXT.
  1624. *
  1625. * EXIT (X1) = 0, IF COMMENT LINE AND COMMENTS NOT NEEDED.
  1626. * COMPRESSED LINE WRITTEN TO COMPILE FILE.
  1627. * IF SUSPECTED COMPILE FILE DIRECTIVE ENCOUNTERED
  1628. * *WSC* WILL BE CALLED TO PROCESS THE INTERESTING LINE.
  1629. *
  1630. * USES X - 1, 2, 3, 4, 6, 7.
  1631. * A - 1, 2, 3.
  1632. *
  1633. * CALLS WSC, WTW=.
  1634.  
  1635.  
  1636.  
  1637. WCC2 SA1 CMNF CHECK FOR COMMENTS NEEDED
  1638. ZR X1,WCCX IF NO COMMENTS NEEDED
  1639.  
  1640. * WRITE LINE TO COMPILE FILE.
  1641.  
  1642. WCC3 SA2 IFIP *IF CONDITION FLAG
  1643. MI X2,WCC4 IF INACTIVE SEQUENCE IN PROGRESS
  1644. SA2 CSC GET CHARACTER SET OF COMDECK
  1645. SA1 SETC CHECK FOR *CSET
  1646. NG X1,WCC3.1 IF NO *CSET
  1647. NZ X1,WCC3.1 IF *CSET,ASCII
  1648. ZR X2,WCC3.1 IF DISPLAY COMMON DECK AND *CSET DISPLAY
  1649. RJ ECD EXPAND AND CONVERT ASCII LINE
  1650. RJ RCL RE-COMPRESS CONVERTED LINE
  1651. WCC3.1 SA1 CDWC WRITE IDENTIFICATION + COMPRESSED LINE
  1652. WRITEW C,A1+B1,X1+B1
  1653. SA1 NC ADVANCE LINE COUNT
  1654. SX2 B1
  1655. IX6 X1+X2
  1656. SA6 A1+
  1657. WCC4 SX1 B1+ SET NOT COMMENT LINE FLAG
  1658.  
  1659. WCC SUBR ENTRY/EXIT
  1660. SA1 CDAC CHECK LINE ACTIVITY
  1661. SA2 C CHECK FOR COMPILE FILE BEING WRITTEN
  1662. PL X1,WCCX IF LINE NOT ACTIVE
  1663. ZR X2,WCCX IF NO COMPILE FILE BEING WRITTEN
  1664. SA1 CDTX FIRST WORD OF COMPRESSED LINE
  1665. SA4 WCCA COMPILE FILE PREFIX CHARACTER
  1666. BX3 X1-X4 COMPARE FIRST CHARACTER AGAINST PREFIX
  1667. AX3 54
  1668. NZ X3,WCC3 IF NOT COMMENT LINE
  1669. NG X3,WCC3 IF NOT COMMENT LINE
  1670. MX0 -12
  1671.  
  1672. * CHECK FOR SUSPECTED COMPILE FILE DIRECTIVES.
  1673.  
  1674. SA2 CD CHECK FOR COMMON DECK
  1675. ZR X2,WCC1 IF NOT COMMON DECK
  1676. SA4 WCCB BEGIN SEARCH AFTER CALLS FOR COMMON DECKS
  1677. WCC1 BX3 X4-X1 COMPARE DATA
  1678. BX2 -X0*X4
  1679. ZR X4,WCC2 IF AT END OF DIRECTIVES AND COMMENT LINE
  1680. SB2 X2+
  1681. AX3 X3,B2
  1682. SA4 A4+B1
  1683. NZ X3,WCC1 IF NO MATCH - LOOP FOR NEXT DIRECTIVE
  1684. RJ WSC WRITE COMPILE FILE
  1685. SX1 B1
  1686. EQ WCCX RETURN
  1687.  
  1688. WCCA BSS 0 DECK TABLE FWA
  1689. VFD 6/0,42/0LCALL,12/5*6 *CALL
  1690. VFD 6/0,42/0LCALLC,12/4*6 *CALLC
  1691. VFD 6/0,42/0LCALLALL,12/2*6 *CALLALL
  1692. VFD 6/0,42/0LIFCALL,12/3*6 *IFCALL
  1693. VFD 6/0,42/0LNIFCALL,12/2*6 *NIFCALL
  1694.  
  1695. WCCB BSS 0 COMMON DECK/DECK TABLE FWA
  1696. VFD 6/0,42/0LCOMMENT,12/2*6 *COMMENT
  1697. VFD 6/0,42/0LCSET,12/5*6 *CSET
  1698. VFD 6/0,42/0LCWEOR,12/4*6 *CWEOR
  1699. VFD 6/0,42/0LDEFINE,12/3*6 *DEFINE
  1700. VFD 6/0,42/0LELSE,12/5*6 *ELSE
  1701. VFD 6/0,42/0LENDIF,12/4*6 *ENDIF
  1702. VFD 6/0,42/0LIF,12/7*6 *IF
  1703. VFD 6/0,42/0LNOSEQ,12/4*6 *NOSEQ
  1704. VFD 6/0,42/0LSEQ,12/6*6 *SEQ
  1705. VFD 6/0,42/0LWEOF,12/5*6 *WEOF
  1706. VFD 6/0,42/0LWEOR,12/5*6 *WEOR
  1707. VFD 6/0,42/0LWIDTH,12/4*6 *WIDTH
  1708.  
  1709. CON 0 TABLE TERMINATOR
  1710. WCF SPACE 4,10
  1711. ** WCF - WRITE COMPILE FILE.
  1712. *
  1713. * ENTRY (CHAR) = FWA OF CHARACTER STRING BUFFER.
  1714. *
  1715. * USES X - 1, 2, 6.
  1716. * A - 1, 2, 6.
  1717. *
  1718. * CALLS LCS.
  1719.  
  1720.  
  1721. WCFX LISTOP W,WCF IF NO LIST FOR DIRECTIVE
  1722. RJ LCS LIST LINE STATUS
  1723.  
  1724. WCF PS 0 ENTRY/EXIT
  1725.  
  1726. * PROCESS POSSIBLE *IF CONDITION ALTERATION.
  1727.  
  1728. CARD ELSE
  1729. CARD ENDIF
  1730.  
  1731. * PROCESS ALL OTHER POSSIBLE COMPILE FILE DIRECTIVES.
  1732.  
  1733. WCF1 SA1 IFIP CHECK *IF CONDITION
  1734. MI X1,WCF IF INACTIVE SEQUENCE IN PROGRESS
  1735. CARD COMMENT
  1736. CARD CWEOR
  1737. CARD DEFINE
  1738. CARD IF,IFX
  1739. CARD NOSEQ,NSQ
  1740. CARD SEQ
  1741. CARD WEOF
  1742. CARD WEOR
  1743. CARD WIDTH,WDH
  1744. WCF2 SA2 NS+1
  1745. SA1 AM
  1746. NZ X1,WCF5 IF *A* MODE
  1747.  
  1748. * *WCF3* AND *WCF4* ENTERED FROM *COMMENT DIRECTIVE PROCESSOR.
  1749.  
  1750. WCF3 SA1 SC+1
  1751. NZ X2,WCF4 IF NO SEQUENCE NUMBERS
  1752. SX1 X1+14
  1753. WCF4 WRITEK C,CHAR,X1 WRITE LINE TO COMPILE
  1754. EQ WCF6
  1755.  
  1756. * WRITE COMPRESSED LINE.
  1757.  
  1758. WCF5 WRITEW C,CDID,1 WRITE IDENTIFICATION
  1759. WRITEC X2,CDTX WRITE COMPRESSED LINE
  1760. WCF6 SA1 NC ADVANCE LINE COUNT
  1761. SX2 B1
  1762. IX6 X1+X2
  1763. SA6 A1
  1764. EQ WCF RETURN
  1765. WSC SPACE 4,10
  1766. ** WSC - WRITE STANDARD COMPILE FILE.
  1767. *
  1768. * ENTRY (C) = COMPILE FILE NAME.
  1769. * (S) = SOURCE FILE NAME.
  1770. * (CD) = COMMON DECK FLAG.
  1771. * (CDAC) = LINE ACTIVITY FLAG.
  1772. *
  1773. * EXIT COMPILE FILE WRITTEN AS NEEDED.
  1774. *
  1775. * USES X - 1, 2, 6.
  1776. * A - 1, 2, 6.
  1777. *
  1778. * CALLS CKC, ECD, WCF.
  1779.  
  1780.  
  1781. WSC4 LISTOP I,WSCX IF NO LIST FOR INACTIVE LINE - RETURN
  1782. SX6 1RI
  1783. WSC5 SA6 CHSP+4 SET ACTIVITY INDICATOR
  1784. SA6 CL+1 SET LIST REQUESTED FLAG
  1785.  
  1786. WSC SUBR ENTRY/EXIT
  1787. RJ ECD EXPAND LINE
  1788. SA1 CDAC
  1789. SA2 S
  1790. PL X1,WSC3 IF LINE NOT ACTIVE
  1791. ZR X2,WSC2 IF NO SOURCE FILE
  1792. SA1 SC+1 WRITE SOURCE
  1793. SA2 SS
  1794. ZR X2,WSC1 IF NO SEQUENCE NUMBERS
  1795. SX1 X1+14
  1796. WSC1 WRITEK S,CHAR,X1
  1797. WSC2 SA1 C CHECK FOR COMPILE FILE BEING WRITTEN
  1798. SA2 CD COMMON DECK FLAG
  1799. ZR X1,WSC3 IF NO COMPILE FILE
  1800. NZ X2,WSC3 IF COMMON DECK
  1801.  
  1802. * CHECK FOR COMMON DECK CALL DIRECTIVES.
  1803.  
  1804. CARD CALL *CALL
  1805. CARD CALLC *CALLC
  1806. CARD CALLALL *CALLALL
  1807. CARD CSET
  1808. CARD IFCALL *IFCALL
  1809. CARD NIFCALL *NIFCALL
  1810. RJ WCF WRITE COMPILE FILE
  1811. WSC3 SA1 CDAC CHECK LINE ACTIVITY
  1812. PL X1,WSC4 IF LINE INACTIVE
  1813. SX6 1RA
  1814. LISTOP A,WSC5,MI IF LIST FOR ACTIVE LINE SELECTED
  1815. EQ WSCX RETURN
  1816. TITLE COMPILE FILE DIRECTIVE PROCESSORS.
  1817. *** COMPILE FILE CONTROL DIRECTIVES.
  1818. *
  1819. * THESE DIRECTIVES CONTROL THE PROCESSING OF THE COMPILE FILE.
  1820. * THEY ARE PROCESSED WHEN THEY OCCUR FROM THE PROGRAM LIBRARY
  1821. * OR RESULT FROM INSERTION.
  1822. CALL SPACE 4,10
  1823. *** CALL DNAME
  1824. *
  1825. * PLACE A COPY OF DECK *DNAME* ON COMPILE FILE.
  1826.  
  1827.  
  1828. CALL SA1 IFIP CHECK FOR INACTIVE SEQUENCE IN PROGRESS
  1829. MI X1,WRCX IF INACTIVE SEQUENCE IN PROGRESS
  1830. RECALL M
  1831. RJ ASN ASSEMBLE NAME
  1832. RJ WCD WRITE COMMON DECK
  1833. EQ WRCX RETURN
  1834. CALLC SPACE 4,10
  1835. *** CALLC DNAME
  1836. *
  1837. * PLACE A COPY OF DECK *DNAME* ON COMPILE FILE, IF IT HAS NOT
  1838. * ALREADY BEEN CALLED BY A PREVIOUS *CALL* OR *CALLC* COMPILE
  1839. * FILE DIRECTIVE.
  1840.  
  1841.  
  1842. CALLC SA1 IFIP CHECK FOR INACTIVE SEQUENCE IN PROGRESS
  1843. NG X1,WRCX IF INACTIVE SEQUENCE IN PROGRESS
  1844. RECALL M
  1845. RJ ASN ASSEMBLE NAME
  1846. SEARCH TCCD,X6 SEARCH TABLE OF PREVIOUSLY CALLED DECKS
  1847. NZ X2,WRCX IF FOUND - RETURN
  1848. RJ WCD WRITE COMMON DECK
  1849. EQ WRCX RETURN
  1850. CALLALL SPACE 4,10
  1851. *** CALLALL STRING
  1852. *
  1853. * PLACE COPY OF EACH COMMON DECK WITH LEADING CHARACTERS =
  1854. * STRING.
  1855.  
  1856.  
  1857. CALLALL SA1 CH SAVE FIRST CHARACTER ADDRESS
  1858. SA2 IFIP CHECK INACTIVE SEQUENCE
  1859. SX6 X1+B1
  1860. MI X2,WRCX IF INACTIVE SEQUENCE IN PROGRESS
  1861. SA6 CLAA
  1862. RJ ASN ASSEMBLE NAME
  1863. SA1 CH
  1864. SA2 CLAA
  1865. MX4 6 FORM NAME MASK
  1866. IX5 X1-X2
  1867. LX5 1
  1868. SB3 X5
  1869. LX5 1
  1870. SB3 B3+X5
  1871. AX7 X4,B3
  1872. BX3 X6
  1873. SA6 CLAA STORE STRING
  1874. SA7 A6+B1 STORE MASK
  1875. LX4 X7
  1876. SB2 B1+B1
  1877. BX2 X2-X2
  1878. SA1 L.TDKN
  1879. CLA1 IX6 X1-X2
  1880. ZR X6,WRCX IF END OF DECK NAMES - RETURN
  1881. SB3 X2
  1882. SA5 F.TDKN CHECK NAME
  1883. SX2 X2+B2 ADVANCE DECK NAME INDEX
  1884. SA5 X5+B3
  1885. BX6 X4*X5
  1886. IX7 X6-X3
  1887. NZ X7,CLA1 IF NO MATCH
  1888. SX6 X5-7
  1889. NZ X6,CLA1 IF NOT COMMON DECK
  1890. LX5 59-16
  1891. MI X5,CLA1 IF DECK NOT ACTIVE
  1892. LX5 17
  1893. MX0 42 MASK NAME
  1894. SX7 X2+ SAVE INDEX
  1895. BX6 X0*X5
  1896. SA7 CLAA+2
  1897. RJ WCD WRITE COMMON DECK
  1898. SA3 CLAA RESTORE STRING
  1899. SA4 A3+B1 RESTORE MASK
  1900. SA2 A4+B1 RESTORE INDEX
  1901. SB2 2
  1902. SA1 L.TDKN
  1903. EQ CLA1 LOOP
  1904.  
  1905. CLAA CON 0
  1906. CON 0
  1907. CON 0
  1908. COMMENT SPACE 4,10
  1909. *** COMMENT CCC-CCC
  1910. *
  1911. * PLACE COMMENT CCC-CCC IN COMPILE FILE IN FOLLOWING FORMAT -
  1912. * COMMENT CRDATE MODDATE CCC-CCC
  1913. * 1 2 3
  1914. * 2 1 1 1
  1915. * WHERE CRDATE = CREATION DATE
  1916. * MODDATE = LAST MODIFICATION DATE
  1917.  
  1918.  
  1919. COMMENT SA1 SC+1 SET SEQUENCE NUMBER COLUMN
  1920. SA2 CHAR+X1 PRESET (A6)
  1921. BX6 X2
  1922. SA3 CH SET FIRST CHARACTER
  1923. SA6 A2
  1924. SB2 A2-B1 SET LAST COLUMN OF COMMENT
  1925. SB3 X3 SET FIRST COLUMN OF COMMENT
  1926. GE B3,B2,CMT2 IF COMMENT EMPTY
  1927. SB4 B2-CHAR-30 SET WORD COUNT FOR COMMENT
  1928. MI B4,CMT2 IF NO ROOM FOR COMMENT
  1929. SA2 B3+B4 UNPACK COMMENT
  1930. CMT1 BX6 X2
  1931. SA6 A6-B1
  1932. SB4 B4-B1
  1933. SA2 A2-B1
  1934. PL B4,CMT1 IF NOT COMPLETE
  1935. CMT2 SB3 CHAR ENTER COMMENT PSEUDO
  1936. SA1 =9L COMMENT
  1937. RJ UPN UNPACK NAME
  1938. SA1 TIDT+2 ENTER CREATION DATE
  1939. RJ UPN UNPACK NAME
  1940. SA1 TIDT+3 CHECK MODIFICATION DATE
  1941. NZ X1,CMT3 IF DECK MODIFIED
  1942. SA1 =1H
  1943. CMT3 RJ UPN UNPACK NAME
  1944. SX6 1R
  1945. SA6 B3+
  1946. SA1 AM
  1947. NZ X1,CMT4 IF *A* MODE
  1948. SA2 NS+1
  1949. EQ WCF3
  1950.  
  1951. * WRITE COMPRESSED LINE IDENTIFICATION.
  1952.  
  1953. CMT4 WRITEW C,CDID,1 WRITE IDENTIFICATION
  1954. SA1 SC+1
  1955. EQ WCF4
  1956. CSET SPACE 4,10
  1957. *** CSET DNAME
  1958. *
  1959. * DECLARE CHARACTER SET TO BE USED IN PROCESSING
  1960. * CALLED COMMON DECKS.
  1961.  
  1962.  
  1963. CSET RJ ASN ASSEMBLE NAME OF *CSET*
  1964. MX3 42
  1965. SA1 TCST-1 FWA-1 OF CHARACTER SET TABLE
  1966. CSET1 SA1 A1+B1
  1967. ZR X1,CSET2 IF UNKNOWN CHARACTER SET
  1968. BX4 X3*X1
  1969. BX7 X6-X4
  1970. NZ X7,CSET1 IF NO MATCH
  1971. BX7 -X3*X1
  1972. SA7 SETC SET NEW CHARACTER SET
  1973. EQ WRCX RETURN
  1974.  
  1975. CSET2 SA0 =C/ CSET - UNKNOWN CHARACTER SET./
  1976. RJ LCE LIST COMPILE FILE DIRECTIVE ERROR
  1977. EQ WRCX RETURN
  1978. CWEOR SPACE 4,10
  1979. *** CWEOR
  1980. *
  1981. * WRITE END OF RECORD ON COMPILE FILE IF BUFFER IS NOT EMPTY.
  1982.  
  1983.  
  1984. CWEOR RECALL C
  1985. SA1 NC CHECK LINE COUNT
  1986. ZR X1,WRCX IF NO LINES WRITTEN THIS RECORD - RETURN
  1987. EQ WEOR
  1988. DEFINE SPACE 4,10
  1989. *** DEFINE NAME,VALUE
  1990. *
  1991. * SET THE VALUE OF *NAME* TO *VALUE*. IF *VALUE* IS
  1992. * NOT PRESENT A VALUE OF ZERO IS ASSUMED.
  1993. *
  1994. * DEFINED NAMES ARE USED IN CONJUNCTION WITH *IF*, *ELSE*,
  1995. * *ENDIF* AND *IFCALL* DIRECTIVES.
  1996. *
  1997. * WHEN A SYMBOL IS DEFINED ON THE INPUT STREAM ( NO INSERT IN
  1998. * PROGRESS ) THE INPUT DEFINITION WILL OVERRIDE ANY COMPILE
  1999. * FILE SPECIFICATIONS FOR VALUES OF THE SPECIFIED NAME *NAME*.
  2000.  
  2001.  
  2002. DEFINE RJ ASN ASSEMBLE NAME
  2003. BX5 X6 SAVE NAME
  2004. SX7 X7+B1 ADVANE BEYOND SEPARATOR
  2005. SA7 A1+
  2006. RJ ASD ASSEMBLE VALUE
  2007. BX0 X7 SAVE VALUE
  2008.  
  2009. * CHECK FOR VALUE IN RANGE.
  2010.  
  2011. AX7 16
  2012. ZR X7,DEF1 IF VALUE WITHIN RANGE
  2013. SA0 =C/ VALUE ERROR./
  2014. RJ LCE LIST COMPILE FILE DIRECTIVE ERROR
  2015. EQ WCF RETURN
  2016.  
  2017. * SEARCH FOR SYMBOL.
  2018.  
  2019. DEF1 SEARCH TDEF,X5 SEARCH FOR PREVIOUSLY DEFINED SYMBOL
  2020. NZ X2,DEF2 IF PREVIOUSLY DEFINED
  2021. ADDWRD A0,X5 ADD SYMBOL TO TABLE
  2022. SA2 A6+ SET VALUE
  2023.  
  2024. * ENTER SYMBOL VALUE INTO DEFINITION.
  2025.  
  2026. DEF2 LX2 59-17
  2027. MI X2,WCFX IF DEFINED ON INPUT
  2028. LX2 17-59 REPOSITION SYMBOL
  2029. MX1 42
  2030. BX2 X1*X2 CLEAR PREVIOUS VALUE DEFINITION
  2031. BX6 X2+X0 SYMBOL + VALUE
  2032. SA6 A2 SET IN TABLE
  2033. EQ WCFX RETURN
  2034. ELSE SPACE 4,10
  2035. *** ELSE
  2036. *
  2037. * REVERSE MODIFICATION EFFECTS OF PREVIOUS *IF.
  2038.  
  2039.  
  2040. ELSE SA1 IFIP CHECK FOR *IF IN PROGRESS
  2041. ZR X1,ELS1 IF NO *IF IN PROGRESS
  2042. BX6 -X1 REVERSE PREVIOUS *IF CONDITION
  2043. SA6 A1
  2044. EQ WCFX
  2045.  
  2046. ELS1 SA0 =C/ NO *IF IN PROGRESS./
  2047. RJ LCE LIST COMPILE FILE DIRECTIVE ERROR
  2048. EQ WCF RETURN
  2049. ENDIF SPACE 4,10
  2050. *** ENDIF
  2051. *
  2052. * TERMINATE *IF RANGE.
  2053.  
  2054.  
  2055. ENDIF SA1 IFIP CHECK FOR *IF IN PROGRESS
  2056. ZR X1,EIF1 IF NO *IF IN PROGRESS
  2057. BX6 X6-X6 CLEAR *IF IN PROGRESS FLAG
  2058. SA6 A1
  2059. EQ WCFX RETURN
  2060.  
  2061. EIF1 SA0 =C/ NO *IF IN PROGRESS./
  2062. RJ LCE LIST COMPILE FILE ERROR MESSAGE
  2063. EQ WCF RETURN
  2064. IFX SPACE 4,10
  2065. *** IF ATR,NAME,VALUE
  2066. *
  2067. * *ATR* MAY ASSUME ONE OF THE FOLLOWING VALUES.
  2068. *
  2069. * DEF SYMBOL REFERENCED BY ATTRIBUTE DEFINED.
  2070. * UNDEF SYMBOL REFERENCED BY ATTRIBUTE UNDEFINED.
  2071. * EQ SYMBOL REFERENCED BY ATTRIBUTE EQUAL TO *VALUE*.
  2072. * NE SYMBOL REFERENCED BY ATTRIBUTE NOT EQUAL TO *VALUE*.
  2073. *
  2074. * IF THE CONDITION SPECIFIED BY THE ATTRIBUTE EXPRESSION
  2075. * IS TRUE, AN ACTIVE *IF RANGE WILL BE INITIATED.
  2076. *
  2077. * IF THE CONDITION IS FALSE THEN ALL LINES NORMALLY
  2078. * WRITTEN TO THE COMPILE FILE AND COMPILE FILE DIRECTIVES
  2079. * WILL BE TREATED AS INACTIVE FOR THE CURRENT MODIFICATION
  2080. * RUN.
  2081. *
  2082. * LINES WILL BE SKIPPED UNTIL THE OCCURENCE OF AN *ELSE OR
  2083. * *ENDIF COMPILE FILE DIRECTIVE.
  2084.  
  2085.  
  2086. IFX RJ ASN ASSEMBLE ATTRIBUTE
  2087. SX7 X7+B1 SKIP SEPARATOR
  2088. SA6 IFXA SAVE ATTRIBUTE
  2089. SA7 A1
  2090. RJ ASN ASSEMBLE SYMBOL NAME
  2091. SX7 X7+B1
  2092. SA6 A6+B1 SAVE SYMBOL NAME
  2093. SA7 A1+
  2094. RJ ASD ASSEMBLE SYMBOL VALUE
  2095.  
  2096. * CHECK FOR VALUE SPECIFICATION IN RANGE.
  2097.  
  2098. BX3 X7
  2099. AX7 16
  2100. SA0 =C/ VALUE ERROR./
  2101. NZ X7,IFX6 IF VALUE ERROR.
  2102.  
  2103. * PROCESS SPECIFICATION.
  2104.  
  2105. SA1 IFIP CHECK *IF IN PROGRESS FLAG
  2106. SA0 =C/ RECURSIVE *IF-S INCORRECT./
  2107. NZ X1,IFX6 IF *IF ALREADY IN PROGRESS
  2108. SA2 IFXA ATTRIBUTE
  2109. SA4 A2+B1 SYMBOLIC NAME
  2110. SA0 =C/ INCORRECT ATTRIBUTE./
  2111. ZR X2,IFX6 IF NO ATTRIBUTE
  2112. MX0 36
  2113. SA5 IFXB-1 FWA - 1 OF ATTRIBUTE TABLE
  2114.  
  2115. * SEARCH FOR ATTRIBUTE.
  2116.  
  2117. IFX1 SA5 A5+1 ADVANCE TO NEXT ENTRY
  2118. BX7 X0*X5
  2119. BX6 X7-X2 COMPARE SYMBOL
  2120. ZR X5,IFX6 IF AT END OF ATTRIBUTE TABLE
  2121. NZ X6,IFX1 IF NO MATCH
  2122. SX2 X5 VALUE MASKING EXPRESSION
  2123. LX5 59-18 ATTRIBUTE TEST TYPE FLAG
  2124.  
  2125. * SEARCH FOR SYMBOL AND DETERMINE ACTION.
  2126.  
  2127. SEARCH TDEF,X3+X4,X2
  2128. MI X5,IFX2 IF NEGATIVE ATTRIBUTE TEST
  2129. EQ IFX3 POSITIVE ATTRIBUTE TEST
  2130.  
  2131. * PROCESS NEGATIVE ATTRIBUTE EXPRESSIONS.
  2132.  
  2133. IFX2 ZR X2,IFX4 IF *IF EXPRESSION TRUE
  2134. EQ IFX5 *IF EXPRESSION FALSE
  2135.  
  2136. * PROCESS POSITIVE ATTRIBUTE EXPRESSIONS.
  2137.  
  2138. IFX3 ZR X2,IFX5 IF *IF EXPRESSION FLASE
  2139. EQ IFX4 *IF EXPRESSION TRUE
  2140.  
  2141. * EXPRESSION TRUE.
  2142.  
  2143. IFX4 SX6 B1 SET TRUE *IF EXPRESSION TEST FALG
  2144. SA6 A1
  2145. EQ WCFX RETURN
  2146.  
  2147. * EXPRESSION FLASE.
  2148.  
  2149. IFX5 SX6 -B1 SET FALSE *IF EXPRESSION TEST
  2150. SA6 A1
  2151. EQ WCFX RETURN
  2152.  
  2153. IFX6 RJ LCE LIST COMPILE FILE DIRECTIVE ERROR MESSAGE
  2154. EQ WCF RETURN
  2155.  
  2156. IFXA CON 0 ATTRIBUTE TEMPORARY
  2157. CON 0 SYMBOL TEMPORARY
  2158.  
  2159. IFXB BSS 0 TABLE OF ATTRIBUTES
  2160.  
  2161. VFD 36/0LDEF,6/0,18/0 DEFINED TEST
  2162. VFD 36/0LUNDEF,6/1,18/0 UNDEFINED TEST
  2163. VFD 36/0LEQ,6/0,18/377777B EQUAL TEST
  2164. VFD 36/0LNE,6/1,18/377777B NOT EQUAL TEST
  2165.  
  2166. CON 0
  2167. IFCALL SPACE 4,10
  2168. *** IFCALL NAME,DNAME
  2169. *
  2170. * PLACE COPY OF COMMON DECK *DNAME* ON COMPILE FILE, IF
  2171. * *NAME* IS DEFINED.
  2172.  
  2173.  
  2174. IFCALL RJ ASN ASSEMBLE NAME
  2175. SEARCH TDEF,X6 SEARCH FOR NAME
  2176. ZR X2,WRCX IF NOT FOUND - RETURN
  2177. SX7 X7+B1 SKIP SEPARATOR
  2178. SA7 CH
  2179. EQ CALL PROCESS AS *CALL
  2180. NIFCALL SPACE 4,10
  2181. *** NIFCALL NAME,DNAME
  2182. *
  2183. * PLACE COPY OF COMMON DECK *DNAME* ON COMPILE FILE, IF
  2184. * *NAME* IS NOT DEFINED.
  2185.  
  2186.  
  2187. NIFCALL RJ ASN ASSEMBLE NAME
  2188. SEARCH TDEF,X6 SEARCH FOR NAME
  2189. NZ X2,WRCX IF FOUND - RETURN
  2190. SX7 X7+B1 SKIP SEPARATOR
  2191. SA7 CH
  2192. EQ CALL PROCESS AS *CALL
  2193. NOSEQ SPACE 4,10
  2194. *** NOSEQ
  2195. *
  2196. * REQUEST NO SEQUENCE NUMBERS ON COMPILE FILE.
  2197.  
  2198.  
  2199. NSQ SX6 B1+ SET NO SEQUENCE NUMBER FLAG
  2200. SA6 NS+1
  2201. EQ WCFX LIST LINE
  2202. SEQ SPACE 4,8
  2203. *** SEQ
  2204. *
  2205. * REQUEST SEQUENCE NUMBERS ON COMPILE FILE.
  2206.  
  2207.  
  2208. SEQ SX6 B0+ CLEAR NO SEQUENCE NUMBER FLAG
  2209. SA6 NS+1
  2210. EQ WCFX LIST LINE
  2211. WIDTH SPACE 4,10
  2212. *** WIDTH N
  2213. *
  2214. * SET LINE WIDTH BEFORE SEQUENCE NUMBERS = *N*.
  2215.  
  2216.  
  2217. WDH RJ ASD ASSEMBLE COLUMN NUMBER
  2218. SB2 X7-IWMACS-1
  2219. MI B2,WDH1 IF IN RANGE
  2220. SA0 =C/ COLUMN NUMBER OUT OF RANGE./
  2221. RJ LCE LIST COMPILE FILE DIRECTIVE ERROR MESSAGE
  2222. EQ WCF RETURN
  2223.  
  2224. * PROCESS WIDTH DIRECTIVE.
  2225.  
  2226. WDH1 SA1 SC+1 READ CURRENT SEQUENCE NUMBER COLUMN
  2227. SB2 X1+CHAR
  2228. SB3 X7+CHAR
  2229. EQ B2,B3,WCFX IF NEW WIDTH = CURRENT WIDTH - LIST LINE
  2230. SA7 A1 UPDATE WIDTH
  2231. SB5 B0
  2232. SB4 16
  2233. GT B2,B3,WDH4 IF DECREASE IN WIDTH
  2234.  
  2235. * PROCESS INCREASE IN WIDTH.
  2236.  
  2237. WDH2 SA1 B2+B4 MOVE SEQUENCE FIELD UP
  2238. BX6 X1
  2239. SA6 B3+B4
  2240. SB4 B4-B1
  2241. PL B4,WDH2 IF MOVE NOT COMPLETE
  2242. SX6 1R
  2243. WDH3 SA6 A6-B1 BLANK FILL LINE
  2244. SB3 B3-B1
  2245. NE B2,B3,WDH3 IF NOT AT END OF LINE
  2246. EQ WCFX LIST LINE
  2247.  
  2248. * PROCESS DECREASE IN WIDTH.
  2249.  
  2250. WDH4 SA1 B2+B5 MOVE SEQUENCE FIELD DOWN
  2251. BX6 X1
  2252. SA6 B3+B5
  2253. SB5 B5+B1
  2254. NE B4,B5,WDH4 IF MOVE NOT COMPLETE
  2255. SX6 1R BLANK FILL REMAINDER OF BUFFER
  2256. WDH5 SA6 B3+B5
  2257. SB3 B3+B1
  2258. NE B2,B3,WDH5 IF NOT COMPLETE
  2259. EQ WCFX LIST LINE
  2260. WEOF SPACE 4,10
  2261. *** WEOF
  2262. *
  2263. * WRITE END OF FILE ON *COMPILE* FILE.
  2264.  
  2265.  
  2266. WEOF WRITEF C,R
  2267. WEF1 SA1 NC PROPAGATE TOTAL LINE COUNT
  2268. SA2 A1+B1
  2269. BX6 X6-X6 CLEAR LINE COUNT THIS RECORD
  2270. IX7 X1+X2
  2271. SA6 A1
  2272. SA7 A2+
  2273. SA1 AM
  2274. ZR X1,WCFX IF NOT *A* MODE
  2275. WRITEW C,CIDT,1 WRITE COMPILE FILE *A* MODE FLAG
  2276. EQ WCFX LIST LINE
  2277. WEOR SPACE 4,10
  2278. *** WEOR N
  2279. *
  2280. * WRITE END OF RECORD (LEVEL N) ON COMPILE FILE.
  2281. * IF N = 15 THIS IS THE SAME AS A WEOF DIRECTIVE.
  2282. * ANY OTHER VALUE WRITES AN END OF RECORD.
  2283.  
  2284.  
  2285. WEOR RJ ASD ASSEMBLE LEVEL NUMBER
  2286. SB2 X7-17B
  2287. ZR B2,WEOF IF EOR LEVEL 17 PROCESS AS *WEOF*
  2288. WRITER C,R
  2289. EQ WEF1
  2290. WCD TITLE COMMON DECK PROCESSOR.
  2291. WCD SPACE 4,20
  2292. ** WCD - WRITE COMMON DECK.
  2293. *
  2294. * DECK WRITTEN FROM EITHER MEMORY, NEW PROGRAM LIBRARY,
  2295. * OR PROGRAM LIBRARY.
  2296. *
  2297. * ENTRY (X6) = DECK NAME, ELSE ZERO IF DECK NAME NOT CORRECT.
  2298. *
  2299. * USES ALL.
  2300. *
  2301. * CALLS DNL, ECD, INL, LCE, LCS, PCS, PCW, RPF, WCC, WCF.
  2302.  
  2303.  
  2304. WCD14 LISTOP E,WCD15 IF NO ERROR LIST
  2305. BX7 X7-X7
  2306. SA7 CL CLEAR LINE LISTED STATUS
  2307. SA0 =C/ UNKNOWN DECK./
  2308. RJ LCE LIST COMPILE FILE DIRECTIVE ERROR
  2309. WCD15 RJ DNL DECREMENT COMMON DECK NESTING LEVEL
  2310. NZ X6,WCD0.1 IF STACK NOT EMPTY
  2311. SA6 CD
  2312. SA6 WCDE CLEAR NESTING COMMON DECK NAME
  2313. SA1 WCDF
  2314. BX7 X1
  2315. SA7 CSC RESTORE CHARACTER SET OF CALLING DECK
  2316.  
  2317. WCD SUBR ENTRY/EXIT
  2318. SA1 CSC GET CHARACTER SET OF CALLING DECK
  2319. BX7 X1
  2320. SA7 WCDF SAVE IT
  2321. NZ X6,WCD0 IF NAME IS OK
  2322. BX7 X7-X7
  2323. SA7 CL CLEAR LINE LISTED STATUS
  2324. SA0 =C/ UNKNOWN DECK./
  2325. RJ LCE LIST COMPILE FILE DIRECTIVE ERROR
  2326. EQ WCDX RETURN AFTER ERROR
  2327.  
  2328. WCD0 RJ INL INCREMENT COMMON DECK NESTING LEVEL
  2329. WCD0.1 SA1 L.TCDK
  2330. ZR X1,WCD4 IF NO DECKS IN MEMORY
  2331.  
  2332. * CHECK DECKS IN MEMORY.
  2333.  
  2334. SA2 F.TCDK
  2335. MX0 42
  2336. SB3 X1
  2337. SB2 B0+
  2338. WCD1 EQ B2,B3,WCD4 IF END OF DECKS
  2339. SA3 X2+B2 CHECK NAME
  2340. BX7 X0*X3
  2341. SB2 X3+B2
  2342. IX4 X7-X6
  2343. NZ X4,WCD1 IF NO MATCH
  2344. SX6 X3 EXTRACT LENGTH OF TCDK COMMON DECK
  2345. SA3 A3+B1 SET CHARACTER SET OF COMMON DECK
  2346. BX7 X3
  2347. SA7 CSC
  2348. SX7 A3+1 SET START
  2349. SA6 WCDC SAVE DECK LENGTH
  2350. SA7 WCDD SAVE DECK START POSITION
  2351. LISTOP W,WCD1.1 IF NO LIST SET FOR DIRECTIVE
  2352. RJ LCS LIST LINE STATUS
  2353.  
  2354. * COPY DECK FROM MEMORY.
  2355.  
  2356. WCD1.1 SX6 B1+ SET COMMON DECK FLAG
  2357. SA6 CD
  2358. WCD2 SA1 WCDC RESET LENGTH OF DECK
  2359. SA4 A1+B1
  2360. ERRNZ WCDD-WCDC-1 CODE ASSUMES VALUE
  2361. SB2 X1
  2362. ZR B2,WCD15 IF END OF COPY - RETURN
  2363. SA1 X4 STORE IDENTIFICATION
  2364. SA2 A1+B1 START MOVE
  2365. BX6 X1
  2366. SA6 CDID
  2367. MX0 48
  2368. WCD3 LX6 X2
  2369. SA6 A6+B1
  2370. BX3 -X0*X2
  2371. SA2 A2+B1
  2372. SB2 B2-B1
  2373. NZ X3,WCD3 IF NOT AT END OF LINE
  2374. SX7 A2 UPDATE START OF NEXT LINE
  2375. SX6 A6-CDID WORD COUNT OF COMPRESSED LINE
  2376. SA6 CDWC SET WORD COUNT OF COMPRESSED LINE
  2377. SX6 B2-1 SET WORD COUNT
  2378. SA7 WCDD
  2379. SA6 A7-1
  2380. RJ PCW WRITE COMPILE FILE
  2381. ZR X6,WCD2 IF SAME NESTING LEVEL
  2382. EQ WCD0 ENTER NEXT NESTING LEVEL
  2383.  
  2384. * SEARCH DECK NAME TABLES.
  2385.  
  2386. WCD4 BX0 X6 SAVE DECK NAME
  2387. RECALL M
  2388. SX3 7 SEARCH FOR DECK IN NEW DECKS
  2389. SEARCH TECD,X0+X3,377777B
  2390. NZ X2,WCD5 IF FOUND
  2391. SX3 7 SEARCH FOR DECK IN OLD DECKS
  2392. SEARCH TDKN,X0+X3,377777B
  2393. ZR X2,WCD14 IF COMMON DECK NOT FOUND
  2394.  
  2395. * INITIALIZE COMMON DECK READ FROM PROGRAM LIBRARY.
  2396.  
  2397. WCD5 SA2 A2+1
  2398. BX6 X2
  2399. AX2 36 SET FILE NAME
  2400. SA1 X2
  2401. BX7 X1
  2402. SA6 M+6
  2403. SA7 M
  2404. SA2 A7+B1 GET *FIRST*
  2405. SX6 X2
  2406. SA6 A2+B1
  2407. SA6 A6+B1 SET BUFFER EMPTY
  2408. SA2 CL+1
  2409. NZ X2,WCD6 IF LINE SHOULD BE LISTED
  2410. LISTOP W,WCD7 IF NO LIST FOR DIRECTIVE
  2411. WCD6 RJ LCS LIST LINE STATUS
  2412. WCD7 RECALL P
  2413. READ M BEGIN READ
  2414. READW M,BUF,TIDTL READ IDENT TABLE
  2415. SX6 B1+
  2416. SA6 CD INDICATE COMMON DECK
  2417. SB5 BUF FWA OF IDENT TABLE
  2418. RJ PCS PROCESS OPL CHARACTER SET
  2419. READW M,T1,1 READ MODIFIER TABLE WORD
  2420. SA5 L.TDKI SAVE CURENT IDENTIFIER TABLE LENGTH
  2421. SA1 T1 AUGMENT IDENTIFIER TABLE
  2422. + ZR X1,*
  2423. ALLOC TDKI,X1+B1
  2424. BX6 X2 SAVE CURRENT FWA
  2425. LX7 X5
  2426. SA6 WCDB
  2427. SA7 A6+B1
  2428. IX6 X2+X5 SET TEMPORARY FWA
  2429. SA4 BUF+1 SET DECK NAME
  2430. SA1 T1
  2431. SX2 B1
  2432. BX7 X4+X2
  2433. SX1 X1
  2434. SA6 F.TDKI
  2435. SA7 X6
  2436. SX7 X7+1 ADD WORD FOR CHARACTER SET INDICATOR
  2437. SA7 WCDD SET POINTER WORD
  2438. ZR X1,WCD8 IF NO MODIFIERS
  2439. READW M,X6+B1,X1 READ MODIFIERS
  2440. WCD8 SA3 L.TCDK SET COMMON DECK LENGTH
  2441. BX6 X3
  2442. SA6 WCDC
  2443. ALLOC TCDK,2 ALLOCATE FOR POINTER AND CHARACTER SET
  2444. ZR X3,WCD11.1 IF NO ROOM
  2445. SA1 CSC SET CHARACTER SET INDICATOR IN TCDK
  2446. SA3 L.TCDK
  2447. BX7 X1
  2448. SA2 F.TCDK
  2449. SB2 X3-1
  2450. SA7 X2+B2
  2451.  
  2452. * COPY COMMON DECK TO COMPILE FILE.
  2453.  
  2454. WCD9 SA0 M FET ADDRESS
  2455. RJ RPF READ PROGRAM FILE
  2456. NZ X1,WCD13 IF EOR
  2457. SA1 CDAC
  2458. PL X1,WCD9 IF LINE INACTIVE
  2459. RJ PCW WRITE COMPILE FILE
  2460. SA6 WCDE SAVE NAME OF COMMON DECK
  2461. NZ X6,WCD12 IF NEXT NESTING LEVEL
  2462. ZR X1,WCD9 IF COMMENT OR NOT SAVING IN MEMORY
  2463.  
  2464. * SAVE COMMON DECK IN MEMORY IF POSSIBLE.
  2465.  
  2466. SA1 WCDD
  2467. SA5 CDWC
  2468. ZR X1,WCD9 IF NO ROOM FOR COMMON DECK
  2469. ALLOC TCDK,X5+B1 ALLOCATE FOR TEXT
  2470. ZR X3,WCD12 IF NO ROOM
  2471. IX7 X3-X5 SET FWA
  2472. SB2 X5+B1
  2473. SB3 X7-1
  2474. SA1 CDID
  2475. WCD11 BX6 X1
  2476. SA6 X2+B3 X2 = FWA OF TABLE
  2477. SB2 B2-B1
  2478. SA1 A1+B1
  2479. SB3 B3+B1
  2480. NZ B2,WCD11 IF MORE TEXT REMAINS
  2481. SX5 X5+B1 ADVANCE LENGTH
  2482. SA1 WCDD
  2483. IX6 X1+X5
  2484. SA6 A1
  2485. EQ WCD9 READ NEXT LINE
  2486.  
  2487. WCD11.1 MX6 0
  2488. SA6 WCDE CLEAR COMMON DECK NAME
  2489. WCD12 SA1 WCDC RESET OLD LENGTH
  2490. SX6 X1
  2491. BX7 X7-X7 CLEAR POINTER WORD
  2492. SA6 L.TCDK
  2493. SA7 WCDD
  2494. SA2 F.TCDK RESET END OF TABLE
  2495. IX6 X2+X1
  2496. SA6 A2+B1
  2497. SA1 WCDE
  2498. ZR X1,WCD9 IF SAME NESTING LEVEL, READ NEXT LINE
  2499.  
  2500. * RESET ALL CONDITIONS.
  2501.  
  2502. WCD13 RECALL P
  2503. SA2 WCDB RESET DECK IDENTIFIER FWA
  2504. BX6 X6-X6 CLEAR SCRATCH FILE
  2505. SA3 A2+B1 RESET LENGTH
  2506. SA6 M
  2507. SA4 P+6 RESET FILE
  2508. BX6 X2
  2509. LX7 X3
  2510. SA6 F.TDKI
  2511. SA7 L.TDKI
  2512. MX1 30 RESET FILE POSITION
  2513. BX2 X1*X4
  2514. SA3 WCDD GET POINTER WORD
  2515. AX4 30
  2516. IX6 X2+X4
  2517. SA1 A3-B1 LAST LENGTH
  2518. SA6 A4
  2519. SA2 L.TCDK
  2520. ZR X2,WCD13.1 IF *TCDK* EMPTY
  2521. SA2 F.TCDK
  2522. BX6 X3
  2523. SB2 X1+
  2524. SA6 X2+B2
  2525. WCD13.1 SA3 WCDE
  2526. ZR X3,WCD15 IF NESTING STACK IS EMPTY, RETURN
  2527. BX6 X3
  2528. EQ WCD0 ENTER NEXT NESTING LEVEL
  2529.  
  2530. WCDB CON 0 FWA OF DECK IDENTIFIER TABLE
  2531. CON 0 LENGTH OF DECK IDENTIFIER TABLE
  2532. WCDC CON 0 LAST COMMON DECK LENGTH
  2533. WCDD CON 0 NEW POINTER WORD
  2534. WCDE CON 0 COMMON DECK NAME OF NEXT NESTING LEVEL
  2535. WCDF CON 0 SAVE CHARACTER SET OF CALLING DECK
  2536. ABT TITLE SUBROUTINES.
  2537. ABT SPACE 4,10
  2538. ** ABT - ABORT MODIFY.
  2539. *
  2540. * ENTRY (X0) = ADDRESS OF ERROR MESSAGE.
  2541. *
  2542. * CALLS CMF.
  2543.  
  2544.  
  2545. ABT RJ CMF COMPLETE FILES
  2546. ABT1 MESSAGE A0 SEND ERROR MESSAGE
  2547. ABORT
  2548. ADW SPACE 4,20
  2549. ** ADW - ADD ENTRY TO A TABLE.
  2550. *
  2551. * ENTRY (A0) = TABLE POINTER ADDRESS.
  2552. * (X1) = TABLE ENTRY TO ADD.
  2553. *
  2554. * EXIT (X6) = TABLE ENTRY.
  2555. * (A6) = ADDRESS OF TABLE ENTRY.
  2556. * (X3) = INDEX OF TABLE ENTRY.
  2557. *
  2558. * USES X - 1, 2, 3, 4, 6, 7.
  2559. * A - 1, 2, 3, 4, 6, 7.
  2560. * B - 2.
  2561. *
  2562. * CALLS ATS.
  2563.  
  2564.  
  2565. ADW1 BX6 X1 ENTER WORD
  2566. SX7 X3+B1 ADVANCE LENGTH
  2567. SA6 X2+B2
  2568. SA7 A3
  2569.  
  2570. ADW SUBR ENTRY/EXIT
  2571. SA2 FTAB+A0 CHECK TABLE ROOM
  2572. SA3 LTAB+A0
  2573. SA4 A2+B1
  2574. IX6 X2+X3
  2575. SB2 X3
  2576. IX7 X4-X6
  2577. NZ X7,ADW1 IF ROOM FOR WORD
  2578. SA2 NTAB+A0 ALLOCATE TABLE
  2579. BX6 X1 SAVE WORD
  2580. SA6 ADWA
  2581. ALLOC A0,X2
  2582. SA4 NTAB+A0 RESET LAST LENGTH
  2583. SA1 ADWA RESTORE WORD
  2584. IX3 X3-X4
  2585. SB2 X3
  2586. EQ ADW1 ENTER WORD
  2587.  
  2588. ADWA CON 0 TEMPORARY STORAGE
  2589. AMD SPACE 4,15
  2590. ** AMD - ASSEMBLE MODIFIER.
  2591. *
  2592. * ADD AND LINK MODIFIERS INTO MODIFIER TABLE.
  2593. *
  2594. * ENTRY (B6) = ADDRESS OF LINKED LIST OF MODIFIERS.
  2595. *
  2596. * USES X - ALL.
  2597. * A - 1, 2, 4, 5, 6, 7.
  2598. * B - 2, 3, 6, 7.
  2599. *
  2600. * CALLS LER, UPN.
  2601. *
  2602. * MACROS ADDWRD, PRINT, SEARCH.
  2603.  
  2604.  
  2605. * PROCESS DUPLICATED MODIFIER NAME.
  2606.  
  2607. AMD6 SB3 CHAR ENTER NAME IN ERROR MESSAGE
  2608. BX1 X6
  2609. SX7 B6 SAVE ADDRESS OF LINKED LIST
  2610. SX6 B1 SET ERROR FLAG
  2611. SA7 AMDA
  2612. SA6 A7+B1
  2613. RJ UPN UNPACK NAME
  2614. PRINT -CHSP,B3+X1
  2615. SX0 =C*DUPLICATE MODIFIER NAME.*
  2616. RJ LER LIST ERROR
  2617. SA2 AMDA RESTORE ADDRESS OF LINKED LIST
  2618. SB6 X2+
  2619. NZ B6,AMD0 IF NOT AT THE END OF THE CHAIN
  2620. AMD7 SX6 B0+ CLEAR MODIFICATIONS
  2621. SA6 MA
  2622.  
  2623. AMD SUBR ENTRY/EXIT
  2624. SX7 B0+ CLEAR ERROR FLAG
  2625. SA7 AMDB
  2626. AMD0 SA2 L.TDKI SET CURRENT LENGTH
  2627. SB7 X2
  2628. MX0 42
  2629. AMD1 SA1 B6 NEXT MODIFICATION LINK
  2630. SA5 A1+2 EXTRACT MODIFICATION IDENTIFIER ADDRESS
  2631. SB6 X1
  2632. LX5 18
  2633. SA4 X5 SEARCH FOR IDENTIFIER IN DECK TABLE
  2634. SEARCH TDKI,X4
  2635. NZ X2,AMD2 IF FOUND
  2636. ADDWRD TDKI,X1*X4 ADD NEW MODIFIER
  2637. SA1 X5+B1 ENTER MODIFIER INDEX
  2638. SX6 X3
  2639. SA2 UP CHECK UPDATE MODE
  2640. LX6 24
  2641. SA6 A1
  2642. ZR X2,AMD2 IF NOT *UPDATE* MODE
  2643. BX1 -X0*X1 PROPAGATE LINE COUNT
  2644. IX6 X6+X1
  2645. SA6 A1+
  2646. AMD2 SB2 X3+ CHECK MODIFIER INDEX
  2647. LT B2,B7,AMD6 IF OLD MODIFIER
  2648. NZ B6,AMD1 IF NOT AT END OF CHAIN
  2649. SA1 AMDB
  2650. NZ X1,AMD7 IF ERRORS OCCURRED
  2651. SA1 MA SET MODIFICATION ADDRESS
  2652. SB6 X1+
  2653. ZR X1,AMDX IF NO MODIFIERS - RETURN
  2654.  
  2655. * CONVERT LINE IDENTIFIERS.
  2656.  
  2657. AMD3 SA5 B6 LOOK UP FIRST LIMIT
  2658. SB6 X5
  2659. LX5 24
  2660. SA2 X5
  2661. SEARCH A0,X2
  2662. ZR X2,AMD5 IF NOT FOUND
  2663. BX2 X1*X5 ADD MODIFIER ADDRESS
  2664. SA4 A5+B1 LOOK UP SECOND LIMIT
  2665. SX3 A2
  2666. IX6 X2+X3
  2667. LX6 36
  2668. SA6 A5
  2669. ZR X4,AMD4 IF NOT DEFINED
  2670. LX4 24
  2671. SA2 X4
  2672. SEARCH A0,X2
  2673. ZR X2,AMD5 IF NOT FOUND
  2674. BX2 X1*X4 ADD MODIFIER ADDRESS
  2675. SX3 A2
  2676. IX6 X2+X3
  2677. LX6 36
  2678. SA6 A4+
  2679. AMD4 NZ B6,AMD3 IF NOT AT END OF MODIFICATION CHAIN
  2680. EQ AMDX RETURN
  2681.  
  2682. * PROCESS UNKNOWN IDENTIFIER NAME.
  2683.  
  2684. AMD5 SA1 A5+B1 SET UNKNOWN MODIFIER FLAG
  2685. MX3 2
  2686. SA2 A1+B1 CLEAR TEXT
  2687. LX3 1
  2688. MX0 42
  2689. BX6 X3+X1
  2690. LX0 24
  2691. SA6 A1
  2692. BX7 X0*X2
  2693. SA7 A2
  2694. EQ AMD4
  2695.  
  2696. AMDA CON 0 ADDRESS OF LINKED LIST
  2697. AMDB CON 0 DUPLICATE MODIFIER ERROR FLAG
  2698. ASD SPACE 4,20
  2699. ** ASD - ASSEMBLE DIGITS.
  2700. *
  2701. * ENTRY (CH) = CHARACTER POINTER.
  2702. *
  2703. * EXIT (X7) = ASSEMBLED DIGITS.
  2704. * (B2) = 0, IF NUMERIC FIELD NULL.
  2705. * (B2) .NE. 0, IF NUMERIC FIELD NOT NULL.
  2706. *
  2707. * USES X - 1, 2, 3, 6, 7.
  2708. * A - 1, 2, 6.
  2709. * B - 2.
  2710.  
  2711.  
  2712. ASD3 SX6 =C*INCORRECT NUMERIC FIELD.*
  2713. SA6 ERRM
  2714. SX7 B0+
  2715.  
  2716. ASD SUBR ENTRY/EXIT
  2717. SA1 CH GET NEXT CHARACTER
  2718. BX7 X7-X7 CLEAR ASSEMBLY
  2719. SA2 X1
  2720. SB2 B0+
  2721. SX3 X2-1R+
  2722. ZR X2,ASD3 IF TERMINATOR
  2723. PL X3,ASD3 IF SEPARATOR
  2724. ASD1 SX2 X2-1R0
  2725. MI X2,ASD3 IF ALPHA
  2726. LX3 X7,B1 LAST DIGIT * 10
  2727. LX7 3
  2728. IX3 X3+X7
  2729. SX1 X1+B1 SET NEXT CHARACTER
  2730. IX7 X3+X2 ADD NEW DIGIT
  2731. SA2 X1
  2732. SB2 X2-1R+
  2733. ZR X2,ASD2 IF SEPARATOR
  2734. MI B2,ASD1 IF NOT SEPARATOR
  2735. ASD2 SX6 X1 UPDATE CHARACTER POINTER
  2736. SA6 A1
  2737. EQ ASDX RETURN
  2738. ASN SPACE 4,20
  2739. ** ASN - ASSEMBLE NAME.
  2740. *
  2741. * ASSEMBLE UP TO 7 CHARACTER NAME TO A SEPARATOR.
  2742. *
  2743. * ENTRY (CHAR) = FIRST CHARACTER IN STRING.
  2744. * (CH) = CHARACTER STRING CURRENT INDEX.
  2745. *
  2746. * EXIT (X6) = NAME, LEFT JUSTIFIED ZERO FILL.
  2747. * (X6) = 0, IF SEPARATOR OR .GT. 7 CHARACTERS ASSEMBLED.
  2748. * (A1) = CH.
  2749. * (X7) = UPDATED CHARACTER POINTER.
  2750. *
  2751. * USES X - 1, 2, 6, 7.
  2752. * A - 1, 2, 7.
  2753. * B - 2.
  2754.  
  2755.  
  2756. ASN2 MX1 6
  2757. SX7 A2
  2758. ASN3 LX6 6
  2759. BX2 X1*X6
  2760. ZR X2,ASN3 IF NOT YET LEFT JUSTIFIED
  2761. SA7 A1+ UPDATE CHARACTER POINTER
  2762. MX1 -18
  2763. BX2 -X1*X6
  2764. ZR X2,ASNX IF .GT. 7 CHARACTERS
  2765. SX6 B0+ CLEAR ASSEMBLY
  2766. SA2 X1+
  2767.  
  2768. ASN SUBR ENTRY/EXIT
  2769. SA1 CH CHECK FIRST CHARACTER
  2770. SA2 X1
  2771. BX6 X6-X6 CLEAR ASSEMBLY
  2772. MX1 -6
  2773. BX2 -X1*X2 MASK OFF POSSIBLE ESCAPE CODE
  2774. SB2 X2-1R
  2775. ZR X2,ASNX IF SEPARATOR, RETURN
  2776. NG B2,ASN1 IF NOT SEPARATOR
  2777.  
  2778. * CHECK POSSIBLE 6/12 ESCAPE CODE.
  2779.  
  2780. SB2 X2-76B
  2781. NZ B2,ASNX IF SEPARATOR
  2782. SA2 A2+B1
  2783. BX2 -X1*X2
  2784. SB2 X2-1RZ-1 END OF LOWER CASE LETTERS (Z)
  2785. ZR X2,ASNX IF SEPARATOR, RETURN
  2786. PL B2,ASNX IF SEPARATOR, RETURN
  2787. ASN1 LX6 6 SHIFT ASSEMBLY
  2788. BX6 X6+X2 MERGE NEW CHARACTER
  2789. SA2 A2+1 NEXT CHARACTER
  2790. BX2 -X1*X2 MASK OFF POSSIBLE ESCAPE CODE
  2791. SB2 X2-1R
  2792. ZR X2,ASN2 IF SEPARATOR
  2793. MI B2,ASN1 IF NOT SEPARATOR
  2794.  
  2795. * CHECK POSSIBLE 6/12 ESCAPE CODE.
  2796.  
  2797. SB2 X2-76B
  2798. NZ B2,ASN2 IF NOT ESCAPE CODE THEN SEPARATOR
  2799. SA2 A2+B1
  2800. BX2 -X1*X2
  2801. SB2 X2-1RZ-1 END OF LOWER CASE ALPHABETICS
  2802. ZR X2,ASN2 IF SEPARATOR
  2803. NG B2,ASN1 IF NOT SEPARATOR
  2804. EQ ASN2
  2805. ATS SPACE 4,20
  2806. ** ATS - ALLOCATE TABLE SPACE.
  2807. *
  2808. * ENTRY (A0) = TABLE NUMBER.
  2809. * (X1) = NUMBER OF ADDITIONAL WORDS TO ALLOCATE.
  2810. *
  2811. * EXIT (X2) = TABLE FWA.
  2812. * (X3) = NEW TABLE LENGTH.
  2813. * = ZERO - NO ROOM FOR TCDK TABLE EXPANSION.
  2814. *
  2815. * USES X - 1, 2, 3, 4, 6, 7.
  2816. * A - 1, 2, 3, 4, 6, 7.
  2817. * B - 2, 3.
  2818. *
  2819. * CALLS ABT, WTW=.
  2820.  
  2821.  
  2822. ATS9 SA2 FTAB+A0 SET RESPONSE
  2823. SA3 LTAB+A0
  2824.  
  2825. ATS SUBR ENTRY/EXIT
  2826. SA2 FTAB+A0 CHECK TABLE SPACE
  2827. SA3 LTAB+A0
  2828. IX7 X3+X1 ADVANCE LENGTH
  2829. SA4 A2+B1
  2830. IX6 X2+X7
  2831. SA7 A3
  2832. IX4 X4-X6
  2833. MI X4,ATS1 IF NO ROOM FOR CHANGE
  2834. BX3 X7
  2835. EQ ATSX RETURN
  2836.  
  2837. * CHECK AVAILABLE STORAGE.
  2838.  
  2839. ATS1 SA2 FTAB+FTABL CHECK STORAGE
  2840. SA3 FL
  2841. IX6 X2+X1
  2842. IX7 X3-X6
  2843. MI X7,ATS4 IF NO ROOM FOR INCREASE
  2844. SA6 A2 UPDATE LWA+1 OF ALL TABLES
  2845. SB2 A0+B1
  2846. SB3 FTABL
  2847. BX4 X2
  2848. EQ B2,B3,ATS9 IF LAST TABLE - RETURN
  2849.  
  2850. * MOVE HIGHER TABLE UP.
  2851.  
  2852. ATS2 SA2 A2-B1 ADVANCE FWA OF HIGHER TABLES
  2853. IX6 X2+X1
  2854. SA6 A2
  2855. SB2 B2+B1
  2856. NE B2,B3,ATS2 IF NOT END OF TABLES
  2857. IX3 X4-X2 (B2) = WORD COUNT
  2858. SB3 X1 (B3) = MOVE INCREMENT
  2859. ZR X3,ATS9 IF NO MOVE NEEDED
  2860. SB2 X3+
  2861. SA1 X4-1 BEGIN AT LWA
  2862. ATS3 BX6 X1 MOVE TABLE UP
  2863. SA6 A1+B3
  2864. SB2 B2-B1
  2865. SA1 A1-B1
  2866. NZ B2,ATS3 IF MOVE NOT COMPLETE
  2867. EQ ATS9 EXIT TO SET RESPONSE
  2868.  
  2869. ATS4 SX3 A0-TCDK
  2870. SA2 L.TCDK
  2871. ZR X3,ATSX IF COMMON DECK TABLE - RETURN
  2872.  
  2873. * CLEAR COMMON DECKS.
  2874.  
  2875. ZR X2,ATS5 IF NO COMMON DECKS IN MEMORY
  2876. SA3 F.TCDK
  2877. BX6 X6-X6 CLEAR COMMON DECKS
  2878. LX7 X3
  2879. SA6 A2+
  2880. SA7 FTAB+FTABL
  2881. EQ ATS1 ATTEMPT TO ALLOCATE AGAIN
  2882.  
  2883. * DUMP INSERTION TEXT.
  2884.  
  2885. ATS5 SA2 T
  2886. SA4 L.TTXT
  2887. NZ X2,ATS8 IF TEXT FILE BEGUN
  2888. ZR X4,ATS8 IF NO TEXT
  2889. SX7 X1 SAVE CHANGE
  2890. SX6 B4 SAVE B4 - B7
  2891. SB2 A0-TTXT
  2892. NZ B2,ATS6 IF NOT TEXT TABLE INCREASE
  2893. IX4 X4-X1 (X4) = ACTUAL LENGTH
  2894. ATS6 SA7 ATSA
  2895. SX7 B5
  2896. SA6 A7+B1
  2897. SA7 A6+B1
  2898. SX6 B6
  2899. SX7 B7
  2900. SA6 A7+B1
  2901. SA7 A6+B1
  2902. SA3 F.TTXT LWA+1 ALL TABLES = FWA TEXT TABLE
  2903. BX6 X6-X6 CLEAR TEXT TABLE LENGTH
  2904. LX7 X3
  2905. SA6 A4
  2906. SA7 FTAB+FTABL
  2907. SA7 A7-B1 FWA COMMON DECKS = FWA TEXT TABLE
  2908. SA1 T+7 SET TEXT FILE NAME
  2909. BX6 X1
  2910. SA6 A2
  2911. EVICT A2,R DUMP TEXT TABLE
  2912. WRITEW X2,X3,X4
  2913. SA1 EI
  2914. ZR X1,ATS7 IF NO EDITING BEGUN
  2915. WRITER X2,R
  2916. SA1 X2+1 REWIND POINTERS
  2917. SX7 X1
  2918. SA7 A1+B1
  2919. SA7 A7+B1
  2920. BX7 X7-X7 INSURE NO HIT ON TEXT INDEX
  2921. SA7 T+5
  2922. ATS7 SA1 ATSA RESET CHANGE
  2923. SB2 A0-TTXT
  2924. SA2 A1+B1 RESTORE B4 - B7
  2925. SA3 A2+B1
  2926. SB4 X2
  2927. SB5 X3
  2928. SA2 A3+B1
  2929. SA3 A2+B1
  2930. SB6 X2
  2931. SB7 X3
  2932. NZ B2,ATS1 IF NOT TEXT TABLE REQUEST - RETRY
  2933. EQ ATSX RETURN
  2934.  
  2935. * ALLOCATE ADDITIONAL MEMORY.
  2936.  
  2937. ATS8 SA3 FL INCREMENT FL
  2938. SX7 X3+FLINL
  2939. BX4 X1 SAVE X1
  2940. SA7 A3 SET NEW FL
  2941. MEMORY CM,,R,X7
  2942. BX1 X4 RESTORE X1
  2943. EQ ATS1 ATTEMPT TO ALLOCATE AGAIN
  2944.  
  2945. ATSA CON 0 TEMPORARIES
  2946. CON 0
  2947. CON 0
  2948. CON 0
  2949. CON 0
  2950. ATX SPACE 4,20
  2951. ** ATX - ALLOCATE TABLE EXPANSION SPACE.
  2952. *
  2953. * ENTRY (A0) = TABLE POINTER ADDRESS.
  2954. * (X1) = TABLE BLOCK SIZE.
  2955. *
  2956. *
  2957. * USES X - 1, 2, 3, 4, 6, 7.
  2958. * A - 1, 2, 3, 4, 6, 7.
  2959. * B - 2.
  2960. *
  2961. * CALLS ATS.
  2962.  
  2963.  
  2964. ATX SUBR ENTRY/EXIT
  2965. SA2 FTAB+A0 CHECK TABLE ROOM
  2966. SA3 LTAB+A0
  2967. IX2 X2+X1 ADD DESIRED BLOCK SIZE
  2968. SA4 A2+B1
  2969. IX6 X2+X3
  2970. SB2 X3
  2971. IX7 X4-X6
  2972. PL X7,ATXX IF ROOM FOR BLOCK
  2973. BX6 X1 SAVE WORD
  2974. SA6 ATXA
  2975. ALLOC A0,X1
  2976. SA1 ATXA RESTORE WORD
  2977. IX7 X3-X1
  2978. SA7 A3 RESET TABLE CONTENT LENGTH
  2979. EQ ATXX RETURN
  2980.  
  2981. ATXA CON 0 TEMPORARY STORAGE
  2982. CAS SPACE 4,20
  2983. ** CAS - CALL ASSEMBLER.
  2984. *
  2985. * ENTRY (QM) = *Q* MODE ASSEMBLER NAME.
  2986. * (XM) = *X* MODE ASSEMBLER NAME.
  2987. * (NC) = LINES WRITTEN TO COMPILE FILE.
  2988. * (NC+1) = LINES WRITTEN TO COMPILE FILE
  2989. * IN LAST RECORD.
  2990. * (SFL) = SYSTEM FIELD LENGTH.
  2991. *
  2992. * EXIT IF *X* OR *Q* MODE, EXIT IS TO ASSEMBLER
  2993. * AND A0 AND X0 ARE SET UP WITH EXTENDED MEMORY AND FL,
  2994. * OTHERWISE RETURN.
  2995. *
  2996. * USES X - 0, 1, 2, 3, 4, 6, 7.
  2997. * A - 0, 1, 2, 3, 4, 6, 7.
  2998. *
  2999. * CALLS MVE=.
  3000.  
  3001.  
  3002. CAS SUBR ENTRY/EXIT
  3003. SA1 QM CHECK FOR *X* OR *Q* MODE
  3004. SA2 XM
  3005. SA3 NC CHECK FOR LINES WRITTEN ON COMPILE
  3006. BX6 X1+X2
  3007. SA4 A3+B1
  3008. ZR X6,CASX IF NOT *X* OR *Q* MODE - RETURN
  3009. BX3 X3+X4
  3010. ZR X3,CASX IF NO LINES WRITTEN ON COMPILE - RETURN
  3011. SA1 SFL
  3012. SA0 X1
  3013. SA6 CASA STORE ASSEMBLER NAME
  3014. MEMORY CM,,R,X1 RESTORE ORIGINAL FL
  3015. SX7 CASBL-1
  3016. SA7 ACTR SET ARGUMENT COUNT
  3017. MOVE CASBL,CASB,ARGR MOVE PARAMETERS
  3018. MOVE CASGL,CASG,CCDR MOVE COMMAND
  3019. SA1 EFL RESTORE *ECS* FIELD LENGTH
  3020. BX0 X1
  3021. SYSTEM LDR,R,CASA CALL ASSEMBLER
  3022. EQ CASX RETURN
  3023.  
  3024. CASA CON 0 LOADER CALL WORDS
  3025. CON 140BS36
  3026.  
  3027. CASB BSS 0 ASSEMBLER PARAMETER LIST
  3028. CON 0LI+1R=
  3029. CON 0LCOMPILE
  3030. CON 0LL+1R=
  3031. CASC CON 0L0
  3032. CON 0LB+1R=
  3033. CASD CON 0LLGO
  3034. CON 0LS+1R=
  3035. CASE CON 0LSYSTEXT
  3036. CON 0LG+1R=
  3037. CASF CON 0L0
  3038. CON 0
  3039. CASBL EQU *-CASB
  3040.  
  3041. CASG BSS 0 ASSEMBLER COMMAND
  3042. DUP 8,1
  3043. CON 1H
  3044. CON 0
  3045. CASGL EQU *-CASG
  3046. CKC SPACE 4,20
  3047. ** CKC - CHECK LINE.
  3048. *
  3049. * ENTRY (A0) - ADDRESS OF FLAG LIST WORD.
  3050. *
  3051. *T LIST 42/FLAG NAME,18/PROCESSOR ADDR.
  3052. *
  3053. * EXIT (X4) = 0 IF NULL DIRECTIVE.
  3054. *
  3055. * USES X - 0, 1, 2, 3, 4, 6, 7.
  3056. * A - 1, 2, 7.
  3057. * B - 2, 3, 5.
  3058. *
  3059. * CALLS *ASN* AND SPECIAL LINE PROCESSORS.
  3060.  
  3061.  
  3062. CKC SUBR ENTRY/EXIT
  3063. SA1 CHAR CHECK FIRST CHARACTER
  3064. SA2 PC CHECK PREFIX CHARACTER
  3065. MX6 -6
  3066. BX1 -X6*X1 USE 6 BIT CHARACTER ONLY
  3067. SX7 A1+B1
  3068. BX3 X1-X2
  3069. SX4 X1-1R
  3070. SA7 CH SET SECOND CHARACTER
  3071. RJ ASN ASSEMBLE NAME
  3072. MX0 42
  3073. SA1 A0+
  3074. BX4 X4+X6 SET EXIT CONDITION
  3075. SB3 64
  3076. NZ X3,CKCX IF FIRST CHARACTER .NE. PREFIX - RETURN
  3077. ZR X6,CKCX IF BLANK NAME - RETURN
  3078. CKC1 ZR X1,CKCX IF END OF LIST - RETURN
  3079. IX7 X1-X6 COMPARE NAMES
  3080. SB5 X1 SET PROCESSOR ADDRESS
  3081. BX3 X0*X7
  3082. SA1 A1+B1 NEXT LIST ENTRY
  3083. NZ X3,CKC1 IF NO MATCH
  3084. SA1 CH CHECK NEXT CHARACTER
  3085. SA2 X1+1
  3086. CKC2 SB2 X2-1R
  3087. NZ B2,CKC3 IF NOT BLANK
  3088. SA2 A2+B1 NEXT CHARACTER
  3089. SB3 B3-B1
  3090. PL B3,CKC2 IF NOT AT END OF LINE
  3091. CKC3 SX7 A2 SET NEXT CHARACTER ADDRESS
  3092. SA7 A1
  3093. JP B5 PROCESS SPECIAL LINE
  3094. CMF SPACE 4,20
  3095. ** CMF - COMPLETE FILES.
  3096. *
  3097. * WRITE DIRECTORY, RETURN SCRATCH FILES, REWIND MODSET,
  3098. * INSURE EVEN PAGE COUNT AND TERMINATE OUTPT FILE.
  3099. *
  3100. * USES X - 1, 2, 3, 4, 6, 7.
  3101. * A - 1, 2, 3, 4, 6, 7.
  3102. * B - 6, 7.
  3103. *
  3104. * MACROS RECALL, RETURN, REWIND, WRITER, WRITEW.
  3105.  
  3106.  
  3107. CMF SUBR ENTRY/EXIT
  3108. RECALL P
  3109. WRITER C
  3110. RETURN T
  3111. REWIND S
  3112. SA1 NR
  3113. NZ X1,CMF1 IF NO REWIND SET
  3114. REWIND C
  3115. CMF1 SA1 O
  3116. SA2 LF
  3117. ZR X1,CMF3 IF NO OUTPUT FILE
  3118. SA3 PN
  3119. ZR X2,CMF3 IF NOTHING LISTED
  3120. LX3 59-0
  3121. NG X3,CMF2 IF PAGE NUMBER EVEN
  3122. SA1 TO
  3123. ZR X1,CMF2 IF TERMINAL OUTPUT
  3124. WRITEW O,(=2L1 ),1 EJECT
  3125. CMF2 WRITER O
  3126. CMF3 SA1 A
  3127. ZR X1,CMF4 IF FILE NOT USED
  3128. RECALL A
  3129. CMF4 RECALL M
  3130. SA1 M+7
  3131. SA2 A+7
  3132. BX6 X1
  3133. LX7 X2
  3134. SA6 M
  3135. SA7 A
  3136. RETURN M
  3137. RETURN A
  3138. SB6 FETS WAIT FOR ALL FILES QUIET
  3139. SB7 FETSL
  3140. CMF5 SA1 B6
  3141. ZR X1,CMF6 IF FILE NOT DEFINED
  3142. RECALL B6
  3143. CMF6 SB6 B6+FETLEN+FETODL
  3144. NE B6,B7,CMF5 IF MORE FILES TO PROCESS
  3145. EQ CMFX RETURN
  3146. CPF SPACE 4,30
  3147. ** CPF - CONVERT PROGRAM FILE.
  3148. *
  3149. * ENTRY (CDTX) = FIRST WORD OF COMPRESSED LINE.
  3150. * (CDWC) = WORD COUNT OF COMPRESSED LINE.
  3151. *
  3152. * EXIT (X2) = -6 BIT MASK.
  3153. * (X0) = 2074BS48.
  3154. * (B5) = (B7) = 60.
  3155. * (B2) = 6.
  3156. * (A5) = CDTX.
  3157. * (X5) = (CDTX).
  3158. *
  3159. * USES X - 0, 1, 2, 5.
  3160. * A - 1, 5.
  3161. * B - 2, 4, 5, 7.
  3162. *
  3163. * CALLS CFT, CTF.
  3164.  
  3165.  
  3166. CPF SUBR ENTRY/EXIT
  3167. SA1 CVT CHECK FOR CONVERSION
  3168. ZR X1,CPFX IF NO CONVERSION
  3169. SX0 2074B CONSTANT - XN=0, BN=60 UPON UNPACK
  3170. SB7 60 CONSTANT 60
  3171. LX0 48
  3172. SB5 B7
  3173. SB2 6 CONSTANT 6
  3174. MX2 -6 CHARACTER MASK
  3175. SA5 CDTX FWA OF COMPRESSED LINE BUFFER
  3176. MI X1,CFT IF 64 TO 63 CHARACTER SET CONVERSION
  3177. * EQ CTF 63 TO 64 CHARACTER SET CONVERSION
  3178. CTF SPACE 4,20
  3179. ** CTF - CONVERT 63 TO 64 CHARACTER SET.
  3180. *
  3181. * CONVERTS A COMPRESSED LINE FROM 63 TO 64 CHARACTER
  3182. * SET. A *0001* BYTE IS CONVERTED TO *5555* AND A *63*
  3183. * CODE BECOMES A *0001* BYTE. THE WORD COUNT IS ALSO
  3184. * UPDATED. SINCE THE NEW COMPRESSED LINE MAY BE LONGER THAN
  3185. * THE OLD, THE LINE IS NOT CONVERTED IN PLACE. THE CONVERTED
  3186. * LINE IS MOVED BACK TO THE *CDTX* BUFFER AFTER CONVERSION.
  3187. *
  3188. * IN *ASCII* MODE, 63 CHARACTER SET PERCENT (*7404B*) IS
  3189. * CONVERTED TO *63B*.
  3190. *
  3191. *
  3192. * ENTRY (X2) = -6 BIT MASK.
  3193. * (X0) = 2074BS48.
  3194. * (B5) = (B7) = 60.
  3195. * (B2) = 6.
  3196. * (A5) = CDTX.
  3197. * (X5) = (CDTX).
  3198. *
  3199. * EXIT (CDTX) = CONVERTED LINE IMAGE.
  3200. * (CDWC) = UPDATED LINE WORD COUNT.
  3201. *
  3202. * USES X - 1, 3, 4, 5, 6, 7.
  3203. * A - 1, 5, 6, 7.
  3204. * B - 3, 4, 5, 6, 7.
  3205. *
  3206. * CALLS MVE=.
  3207.  
  3208.  
  3209. *CTF BSS 0
  3210. SA1 CSC CHARACTER SET (DISPLAY/ASCII) CURRENT DECK
  3211. SB4 X1
  3212. SA1 CVTX-1 PRESET (A6)
  3213. BX6 X1
  3214. SA6 A1+
  3215. UX6,B6 X0 SET REGISTERS
  3216. CTF1 LX5 6 PICK NEXT CHARACTER
  3217. SB5 B5-6 DECREMENT CHARACTER COUNT
  3218. BX4 -X2*X5
  3219. NZ B5,CTF2 IF NOT END OF INPUT WORD
  3220. SA5 A5+B1 ADVANCE TO NEXT WORD
  3221. SB5 B7 RESET CHARACTER COUNT
  3222. CTF2 SX1 X4-63B CHECK FOR 63 CHARACTER SET COLON
  3223. ZR X4,CTF4 IF COMPRESSION CHARACTER (*00*)
  3224. ZR X1,CTF8 IF COLON
  3225. SA1 MADCV
  3226. ZR B4,CTF3 IF DISPLAY CODE MODE
  3227. NZ X1,CTF3 IF MADIFY CONVERSION
  3228. SX1 X4-74B
  3229. NZ X1,CTF3 IF NOT ESCAPE CODE 74B
  3230. LX7 B2,X5 TRY NEXT CHARACTER
  3231. BX1 -X2*X7
  3232. SX7 X1-04
  3233. NZ X7,CTF3 IF NOT *7404B* (PERCENT)
  3234. SX4 63B (X4) = 64 CHARACTER SET PERCENT
  3235. LX5 6
  3236. SB5 B5-6
  3237. NZ B5,CTF3 IF NOT END OF INPUT WORD
  3238. SA5 A5+B1
  3239. SB5 B7 RESET CHARACTER COUNT
  3240. CTF3 LX6 6 PROCESS NORMAL CHARACTER
  3241. SB6 B6-6 DECREMENT CHARACTER COUNT
  3242. BX6 X6+X4 INSERT NEXT CHARACTER
  3243. NZ B6,CTF1 IF OUTPUT WORD NOT EXHAUSTED
  3244. SA6 A6+B1 SET CURRENT WORD
  3245. UX6,B6 X0 RESET REGISTERS
  3246. EQ CTF1 GET NEXT CHARACTER
  3247.  
  3248. * PROCESS COMPRESSION CODE.
  3249.  
  3250. CTF4 LX5 6 PROCESS CHARACTER FOLLOWING COMPRESSION
  3251. BX4 -X2*X5
  3252. SB5 B5-6 DECREMENT CHARACTER COUNT
  3253. NZ B5,CTF5 IF INPUT WORD NOT EMPTY
  3254. SA5 A5+B1 ADVANCE TO NEXT WORD
  3255. SB5 B7
  3256. CTF5 ZR X4,CTF9 IF END OF LINE
  3257. SB3 X4-1 CHECK FOR *0001* BYTE
  3258. ZR B3,CTF7 IF *0001* BYTE
  3259. LX6 6 INSERT *00*
  3260. CTF6 SB6 B6-B2
  3261. NZ B6,CTF3 IF NOT END OF OUTPUT WORD
  3262. SA6 A6+B1 SET CURRENT WORD
  3263. UX6,B6 X0 RESET REGISTERS
  3264. EQ CTF3 PROCESS COMPRESSION AS NORMAL CHARACTER
  3265.  
  3266. * PROCESS *0001* CODE.
  3267.  
  3268. CTF7 SX4 1R CONVERT *0001* TO *5555*
  3269. LX6 6 INSERT *55*
  3270. BX6 X6+X4
  3271. EQ CTF6 PROCESS SPACE AS NORMAL CHARACTER
  3272.  
  3273. * PROCESS *63* CODE.
  3274.  
  3275. CTF8 SA1 MADCV
  3276. NZ X1,CTF3 IF MADIFY CONVERSION
  3277. SX4 B1 CONVERT *63* TO *0001*
  3278. LX6 6 INSERT *00*
  3279. ZR B4,CTF6 IF DISPLAY CODE, PROCESS *01* AS NORMAL
  3280. SX1 74B
  3281. BX6 X6+X1
  3282. SX4 04B MAKE *63* INTO *7404* IN ASCII MODE
  3283. EQ CTF6 PROCESS *01* AS NORMAL CHARACTER
  3284.  
  3285. * PROCESS END OF LINE.
  3286.  
  3287. CTF9 LX6 X6,B6 POSITION LAST WORD
  3288. MX3 -12
  3289. SA6 A6+B1
  3290. BX4 -X3*X6 CHECK FOR END OF LINE IN CURRENT WORD
  3291. ZR X4,CTF10 IF END OF LINE PRESENT
  3292. BX6 X6-X6 SET END OF LINE WORD
  3293. SA6 A6+B1
  3294. CTF10 SX7 A6-CVTX+1 SET UPDATED WORD COUNT
  3295. SA7 CDWC
  3296. MOVE X7,CVTX,CDTX MOVE TO COMPRESSED LINE BUFFER
  3297. EQ CPFX RETURN
  3298. CFT SPACE 4,20
  3299. ** CFT - CONVERT 64 TO 63 CHARACTER SET.
  3300. *
  3301. * CONVERTS A COMPRESSED LINE FROM 64 TO 63 CHARACTER
  3302. * SET. A *0001* BYTE IS CONVERTED TO A *63* AND A
  3303. * *63* IS CONVERTED TO A *55*.
  3304. *
  3305. * ENTRY (X2) = -6 BIT MASK.
  3306. * (X0) = 2074BS48.
  3307. * (B5) = (B7) = 60.
  3308. * (B2) = 6.
  3309. * (A5) = CDTX.
  3310. * (X5) = (CDTX).
  3311. *
  3312. * EXIT (CDTX) = CONVERTED LINE IMAGE.
  3313. * (CDWC) = UPDATED LINE WORD COUNT.
  3314. *
  3315. * USES X - 1, 3, 4, 5, 6, 7.
  3316. * A - 1, 4, 5, 6, 7.
  3317. * B - 4, 5, 6.
  3318.  
  3319.  
  3320. CFT SA1 CSC CHARACTER SET (DISPLAY/ASCII) CURRENT DECK
  3321. SA4 CVTX-1 PRESET (A6)
  3322. SB4 X1
  3323. BX6 X4
  3324. SA6 A4
  3325. UX6,B6 X0 SET REGISTERS
  3326. CFT1 LX5 6 GET NEXT CHARACTER
  3327. SB5 B5-6 DECREMENT CHARACTER COUNT
  3328. BX4 -X2*X5
  3329. NZ B5,CFT2 IF NOT END OF INPUT WORD
  3330. SA5 A5+B1 SET NEXT WORD
  3331. SB5 B7 RESET CHARACTER COUNT
  3332. CFT2 ZR X4,CFT4 IF COMPRESSION CODE OR COLON
  3333. SX1 X4-74B
  3334. NZ X1,CFT2.1 IF NOT ESCAPE CODE 74B
  3335. LX7 B2,X5 CHECK NEXT CHARACTER
  3336. BX1 -X2*X7
  3337. SX7 X1-04B CHECK FOR 64 CHARACTER SET COLON
  3338. NZ X7,CFT2.1 IF NOT 64 CHARACTER SET COLON (*7404*)
  3339. SX4 63B SET 63 CHARACTER SET COLON (*63B*)
  3340. LX5 6
  3341. SB5 B5-6
  3342. NZ B5,CFT3 IF NOT END OF INPUT WORD
  3343. SA5 A5+B1
  3344. SB5 B7 RESET CHARACTER COUNT
  3345. EQ CFT3 INSERT CHARACTER
  3346.  
  3347. CFT2.1 SX1 X4-63B CHECK FOR PERCENT SIGN
  3348. NZ X1,CFT3 IF NOT PERCENT SIGN
  3349. EQ B4,B1,CFT9 IF ASCII MODE
  3350. SX4 1R CONVERT PERCENT TO BLANK
  3351. CFT3 LX6 6 INSERT CHARACTER
  3352. SB6 B6-6
  3353. BX6 X6+X4
  3354. NZ B6,CFT1 IF OUTPUT WORD NOT FULL
  3355. SA6 A6+B1 SET CURRENT WORD
  3356. UX6,B6 X0 RESET REGISTERS
  3357. EQ CFT1 GET NEXT CHARACTER
  3358.  
  3359. * PROCESS COMPRESSION/COLON CODES.
  3360.  
  3361. CFT4 LX5 6 GET NEXT CHARACTER
  3362. SB5 B5-6 DECREMENT CHARACTER COUNT
  3363. BX4 -X2*X5
  3364. ZR X4,CFT7 IF END OF LINE
  3365. NZ B5,CFT5 IF INPUT WORD NOT EXHAUSTED
  3366. SA5 A5+1 GET NEXT CHARACTER
  3367. SB5 B7+ RESET CHARACTER COUNT
  3368. CFT5 SX1 X4-1 CHECK FOR *0001* CODE
  3369. ZR X1,CFT6 IF COLON (*0001*)
  3370. LX6 6 SET *00*
  3371. SB6 B6-B2 DECREMENT CHARACTER COUNT
  3372. NZ B6,CFT3 IF OUTPUT WORD NOT EXHAUSTED
  3373. SA6 A6+B1
  3374. UX6,B6 X0
  3375. EQ CFT3 PROCESS AS NORMAL CHARACTER
  3376.  
  3377. * PROCESS *0001* CODE.
  3378.  
  3379. CFT6 SX4 63B CONVERT *0001* TO *63*
  3380. EQ CFT3 PROCESS AS NORMAL CHARACTER
  3381.  
  3382. * PROCESS END OF LINE.
  3383.  
  3384. CFT7 LX6 X6,B6 LEFT JUSTIFY ASSEMBLY
  3385. MX3 -12 CHECK FOR END OF LINE SUPPLIED
  3386. SA6 A6+B1 SET LAST WORD
  3387. BX4 -X3*X6
  3388. ZR X4,CFT8 IF END OF LINE PRESENT
  3389. BX6 X6-X6
  3390. SA6 A6+B1
  3391. CFT8 SX7 A6-CVTX+1 SET UPDATED WORD COUNT
  3392. SA7 CDWC
  3393. MOVE X7,CVTX,CDTX MOVE TO COMPRESSED LINE BUFFER
  3394. EQ CPFX RETURN
  3395.  
  3396. * PROCESS *63* IN ASCII MODE.
  3397.  
  3398. CFT9 SX1 74B MAKE PERCENT IN ASCII CHARACTER SET
  3399. LX6 6
  3400. SB6 B6-B2
  3401. SX4 04B
  3402. BX6 X6+X1
  3403. NZ B6,CFT3 IF OUTPUT WORD NOT EXHAUSTED
  3404. SA6 A6+B1
  3405. UX6,B6 X0
  3406. EQ CFT3 PROCESS AS NORMAL CHARACTER
  3407. DNL SPACE 4,15
  3408. ** DNL - DECREMENT NESTING LEVEL.
  3409. *
  3410. * ENTRY NONE.
  3411. *
  3412. * EXIT (X6) = COMMON DECK NAME OF PREVIOUS NESTING LEVEL.
  3413. * = 0 IF NO NESTING.
  3414. *
  3415. * USES X - 1, 2, 3, 6, 7.
  3416. * A - 1, 2, 6, 7.
  3417.  
  3418.  
  3419. DNL SUBR ENTRY/EXIT
  3420. SX6 0
  3421. SA1 L.TNCC
  3422. SA6 CDC CLEAR COMMON DECK LINE COUNT
  3423. SA6 CDS CLEAR COMMON DECK SKIP COUNT
  3424. ZR X1,DNLX IF NO NESTING
  3425. SX6 X1-1
  3426. SA6 A1 DECREMENT TABLE LENGTH
  3427. ZR X6,DNLX IF NO NESTING
  3428. SA2 F.TNCC
  3429. IX3 X6+X2
  3430. MX2 42
  3431. SA1 X3-1 GET PREVIOUS NESTING LEVEL NAME
  3432. SX7 X1 SKIP COUNT
  3433. BX6 X2*X1 COMMON DECK NAME
  3434. SA7 CDS SET SKIP COUNT
  3435. EQ DNLX RETURN
  3436. ECD SPACE 4,20
  3437. ** ECD - EXPAND LINE.
  3438. *
  3439. * ENTRY (CDTX) = FIRST WORD OF COMPRESSED LINE.
  3440. *
  3441. * EXIT (B7) = LWA+1 OF LAST CHARACTER IN EXPANDED LINE.
  3442. * (CHAR) = FIRST CHARACTER OF EXPANDED LINE.
  3443. *
  3444. * USES X - 0, 1, 2, 3, 4, 6, 7.
  3445. * A - 1, 2, 3, 4, 6, 7.
  3446. * B - ALL.
  3447. *
  3448. * CALLS CDD.
  3449.  
  3450.  
  3451. ECD SUBR ENTRY/EXIT
  3452. SA3 CSC CHARACTER SET OF DECK
  3453. SA4 SETC CHECK FOR *CSET
  3454. ZR X3,ECD0 IF DECK IS DISPLAY
  3455.  
  3456. * DECK IS 6/12 ASCII.
  3457.  
  3458. SB6 B1+
  3459. NZ X4,ECD0.1 IF NOT *CSET,DISPLAY - UNPACK 6/12 ASCII
  3460. SB6 B0+
  3461. EQ ECD0.1 OTHERWISE *CSET,DISPLAY FOLD TO UPPER CASE
  3462.  
  3463. * DECK IS DISPLAY.
  3464.  
  3465. ECD0 SB6 -B1 UNPACK 6 BIT CHARACTERS
  3466. NG X4,ECD0.1 IF NO *CSET
  3467. ZR X4,ECD0.1 IF *CSET,DISPLAY
  3468. SB6 B1+ UNPACK 6/12 ASCII CHARACTERS
  3469.  
  3470. ECD0.1 SA1 SC+1 SET LAST COLUMN
  3471. SX6 1R SET TO BLANK FILL BUFFER
  3472. SB7 X1+B1
  3473. SA6 CHAR PRESET (A6)
  3474. MX0 -6
  3475. SB2 -B7
  3476. SB5 10 CONSTANT 10
  3477. SB4 B5
  3478. ECD1 SB7 B7-B1 BLANK FILL LINE
  3479. SA6 A6+B1
  3480. PL B7,ECD1 IF NOT COMPLETE
  3481. SB3 CHAR+1+X1
  3482. SA1 CDTX
  3483. EQ ECD3
  3484.  
  3485. * EXPAND LINE TEXT.
  3486.  
  3487. ECD1.1 SX2 X7-76B
  3488. SX4 X7-74B
  3489. ZR X2,ECD1.2 IF 76B ESCAPE CODE
  3490. NZ X4,ECD2 IF NO ESCAPE CODES
  3491. BX3 X1
  3492. LX3 6
  3493. BX2 -X0*X3
  3494. SX4 X2-1
  3495. SX3 X2-2
  3496. ZR X4,ECD1.3 IF 7401B UNPACK AT SIGN
  3497. ZR X3,ECD1.3 IF 7402B UNPACK CIRCUMFLEX
  3498. SX4 X2-4
  3499. SX3 X2-7
  3500. ZR X4,ECD1.3 IF 7404B UNPACK COLON (64) OR PERCENT (63)
  3501. ZR X3,ECD1.3 IF 7407B UNPACK GRAVE ACCENT
  3502. EQ ECD2 OTHERWISE UNPACK 6 BIT CHARACTERS
  3503.  
  3504. ECD1.2 BX4 X1
  3505. LX4 6
  3506. BX3 -X0*X4
  3507. SX4 X3-37B
  3508. PL X4,ECD2 IF .GT. 7636B UNPACK 6 BIT CHARACTERS
  3509. ECD1.3 LX7 6 12 BIT CHARACTER
  3510. SB4 B4-B1
  3511. LX1 6
  3512. BX2 -X0*X1
  3513. BX7 X7+X2
  3514. NZ B4,ECD2 IF NOT END OF WORD
  3515. SA1 A1+B1
  3516. SB4 B5
  3517. ECD2 PL B2,ECD7 IF LINE LIMIT REACHED
  3518. SA7 B2+B3 STORE CHARACTER
  3519. SB2 B2+B1
  3520. ECD3 SB4 B4-1 SHIFT TO NEXT CHARACTER
  3521. LX1 6
  3522. BX7 -X0*X1
  3523. NZ B4,ECD4 IF NOT END OF WORD
  3524. SA1 A1+B1 SET NEXT WORD
  3525. SB4 B5
  3526. ECD4 ZR X7,ECD4.1 IF CURRENT CHARACTER IS *00*
  3527. NG B6,ECD2 IF UNPACKING 6 BIT CHARACTERS
  3528. ZR B6,ECD11 IF CONVERTING LOWER TO UPPER CASE
  3529. EQ ECD1.1 OTHERWISE UNPACK 12 BIT ASCII
  3530.  
  3531. ECD4.1 SB4 B4-1
  3532. LX1 6 EXTRACT SPACE COUNT
  3533. BX7 -X0*X1
  3534.  
  3535. ECDA BSS 0
  3536. NZ B4,ECD5 IF NOT END OF WORD
  3537. * NZ B4,ECD6 (63 CHARACTER SET)
  3538. SA1 A1+B1 SET NEXT WORD
  3539. SB4 B5 RESET CHARACTER COUNT
  3540.  
  3541. ECDB BSS 0
  3542. ECD5 SB7 X7 CHECK COMPRESSION CODE
  3543. * EQ ECD6 (63 CHARACTER SET)
  3544. NE B7,B1,ECD6 IF NOT *0001*
  3545. BX7 X7-X7 INSERT *00* CHARACTER
  3546. EQ ECD2
  3547.  
  3548. * PROCESS COMPRESSION CODE.
  3549.  
  3550. ECD6 SX4 X7+B1 SET COMPRESSION COUNT
  3551. SB2 X4+B2 SET BLANKS IN BUFFER
  3552. NZ X7,ECD3 IF NOT END OF WORD
  3553.  
  3554. * ENTER IDENTIFIER NAME.
  3555.  
  3556. ECD7 SA2 CDID GET LINE IDENTIFICATION
  3557. SB7 B2+B3 SET ADDRESS OF LAST CHARACTER +1
  3558. MX3 -16
  3559. SB2 7
  3560. LX2 6
  3561. ECD8 BX7 -X0*X2 NEXT CHARACTER
  3562. SB2 B2-1
  3563. LX2 6
  3564. NZ X7,ECD9 IF NOT *00*
  3565. SX7 1R SET BLANK
  3566. ECD9 SA7 B3-B1
  3567. SB3 B3+B1
  3568. NZ B2,ECD8 IF NOT AT END OF NAME
  3569.  
  3570. * ENTER LINE NUMBER.
  3571.  
  3572. LX2 12 CONVERT LINE NUMBER
  3573. BX1 -X3*X2
  3574. RJ CDD CONVERT TO DECIMAL DISPLAY
  3575. SB2 9
  3576. LX6 24
  3577. MX0 -6
  3578. ECD10 BX7 -X0*X6 ENTER SEQUENCE NUMBER
  3579. SB2 B2-B1
  3580. SA7 A7+B1
  3581. LX6 6
  3582. NZ B2,ECD10 IF NOT AT END OF SEQUENCE NUMBER
  3583. SB3 A7+1 RETURN WITH NEXT CHARACTER POSITION
  3584. EQ ECDX
  3585.  
  3586.  
  3587. * CONVERT 6/12 ASCII TO DISPLAY CODE.
  3588. *
  3589. * X0 = 6 BIT CHARACTER MASK (LOW ORDER CHARACTER).
  3590. * X1 = UNPACK REGISTER POSITIONED TO NEXT CHARACTER.
  3591. * X7 = CURRENT ESCAPE CODE RIGHT JUSTIFIED.
  3592. * B4 = COUNT OF CHARACTERS UNPACKED FROM X1.
  3593. * B5 = 10 (NUMBER OF 6 BIT CHARACTERS IN A WORD).
  3594.  
  3595.  
  3596. ECD11 BX3 X1
  3597. LX3 6
  3598. BX2 -X0*X3 GET NEXT CHARACTER
  3599. SX4 X7-74B
  3600. SX3 X7-76B
  3601. ZR X4,ECD14 IF 74B ESCAPE CODE
  3602. NZ X3,ECD2 IF NO ESCAPE CODES
  3603. ZR X2,ECD2 IF 7600B, PROCESS AS 2 CHARACTERS
  3604. SX4 X2-37B
  3605. PL X4,ECD2 IF .GT. 7636B, PROCESS AS 2 CHARACTERS
  3606. SX4 X2-33B
  3607. NG X4,ECD12 IF LOWER CASE CONVERT TO UPPER CASE
  3608.  
  3609. * CHECK FOR ISO NATIONAL CHARACTERS.
  3610.  
  3611. SX7 61B
  3612. ZR X4,ECD13 IF LEFT BRACE CONVERT TO LEFT BRACKET
  3613. SX4 X2-34B
  3614. SX7 75B
  3615. ZR X4,ECD13 IF VERTICAL LINE CONVERT TO BACK SLASH
  3616. SX4 X2-35B
  3617. SX7 62B
  3618. ZR X4,ECD13 IF RIGHT BRACE CONVERT TO RIGHT BRACKET
  3619. SX2 76B CONVERT TILDE TO CIRCUMFLEX
  3620.  
  3621. ECD12 BX7 X2 STRIP AWAY 76B ASCII ESCAPE CODE
  3622. ECD13 SB4 B4-B1
  3623. LX1 6
  3624. NZ B4,ECD2 IF DISPLAY CODE CHARACTER
  3625. SA1 A1+B1 SET UP NEXT WORD
  3626. SB4 B5
  3627. EQ ECD2 STORE DISPLAY CODE CHARACTER
  3628.  
  3629. ECD14 BX3 X2 POSSIBLE 74B ESCAPE CODE FOUND
  3630. SX4 X3-1
  3631. ZR X4,ECD13 IF AT SIGN (IN X7)
  3632. SX4 X3-2
  3633. SX2 76B
  3634. ZR X4,ECD12 IF CIRCUMFLEX
  3635. SX4 X3-7
  3636. ZR X4,ECD13 IF 7407B - UNPACK GRAVE ACCENT
  3637. SX4 X3-4
  3638. NZ X4,ECD2 IF NOT 7407B - 2 CHARACTERS
  3639. SA4 COPL CHECK FOR 63 OR 64 CHARACTER SET
  3640. SA2 DISCOL
  3641. NZ X4,ECD12 IF 64 UNPACK COLON
  3642. SA2 DISPER
  3643. EQ ECD12 OTHERWISE UNPACK 63 PERCENT (55B)
  3644. INL SPACE 4,15
  3645. ** INL - INCREMENT NESTING LEVEL.
  3646. *
  3647. * INCREMENT NESTING LEVEL OF COMMON DECK CALLS.
  3648. *
  3649. * ENTRY (X6) = COMMON DECK NAME.
  3650. *
  3651. * EXIT (X6) = COMMON DECK NAME.
  3652. *
  3653. * USES X - 0, 1, 4, 7.
  3654. * A - 1, 4, 7.
  3655. * B - 2.
  3656. *
  3657. * MACROS ADDWRD, SEARCH.
  3658.  
  3659.  
  3660. INL1 SX7 0
  3661. SA7 CDC RESET LINE COUNT
  3662. SA7 CDS RESET SKIP COUNT
  3663. SEARCH TCCD,X6
  3664. NZ X2,INLX IF ALREADY CALLED COMMON DECK
  3665. ADDWRD TCCD,X6 ADD NAME TO TABLE OF CALLED DECKS
  3666.  
  3667. INL SUBR ENTRY/EXIT
  3668. MX0 42
  3669. BX6 X0*X6
  3670. ADDWRD TNCC,X6 PUSH DECK NAME ON STACK
  3671. LE B2,B0,INL1 IF NO PREVIOUS ENTRY
  3672. SA1 CDC GET COUNT OF LINES OF PREVIOUS OPLC
  3673. SA4 A6-B1 GET PREVIOUS ENTRY
  3674. BX4 X0*X4
  3675. BX7 X4+X1 INCLUDE SKIP COUNT
  3676. SA7 A4
  3677. EQ INL1 SEARCH TABLE OF CALLED COMMON DECKS
  3678. PCS SPACE 4,15
  3679. ** PCS - PROCESS OPL CHARACTER SET.
  3680. *
  3681. * CHECK AND/OR INITIALIZE *MODIFY* FOR 63/64 CHARACTER
  3682. * AND DISPLAY/ASCII CHARACTER SET OPL PROCESSING.
  3683. *
  3684. * ENTRY (B5) = FWA OF IDENT TABLE FOR RECORD.
  3685. *
  3686. * EXIT IF INITIAL ENTRY.
  3687. * (ECDA) INITIALIZED.
  3688. * (ECDB) INITIALIZED.
  3689. *
  3690. * USES X - 1, 2, 3, 4, 5.6, 7.
  3691. * A - 0, 1, 3, 4, 6, 7.
  3692. * B - 2.
  3693. *
  3694. * CALLS ABT, SFN.
  3695.  
  3696.  
  3697. PCS SUBR ENTRY/EXIT
  3698. SA5 B5+16B CHECK CHARACTER SET OF RECORD
  3699. MX1 -6 MASK OFF 63/64 CHARACTER SET
  3700. BX5 -X1*X5
  3701.  
  3702. * VERIFY OPL CHARACTER SET.
  3703.  
  3704. SX3 X5-64B CHECK FOR 64 CHARACTER SET PL
  3705. ZR X3,PCS1 IF 64 CHARACTER SET
  3706. ZR X5,PCS1 IF 63 CHARACTER SET (*00*)
  3707. SA1 B5+B1 INCORRECT CHARACTER SET DECK NAME
  3708. RJ SFN SPACE FILL DECK NAME
  3709. SX2 1R &1R- FORM MESSAGE
  3710. BX5 X5-X5 SET 63 CHARACTER SET
  3711. LX6 -6
  3712. BX6 X6-X2
  3713. SA6 PCSB SET MESSAGE
  3714. SA1 A5 CORRECT CHARACTER SET IN HEADER
  3715. MX2 54
  3716. BX7 X2*X1 PRESERVE ASCII FLAG
  3717. SA7 A1
  3718. MESSAGE A6,3 * DECKNAM - INCORRECT CS, 63 ASSUMED.*
  3719.  
  3720. * CHECK FOR MIXED PL,S.
  3721.  
  3722. PCS1 SA4 COPL PREVIOUS CHARACTER SET
  3723. BX3 X4-X5 COMPARE PREVIOUS AGAINST CURRENT
  3724. BX6 X5 CHARACTER SET OF CURRENT RECORD
  3725. SB2 X5 CHARACTER SET OF CURRENT RECORD
  3726. SA6 A4 SET PREVIOUS CHARACTER SET
  3727. MI X4,PCS2 IF INITIAL ENTRY
  3728.  
  3729. * COMPARE AGAINST CHARACTER SET OF PREVIOUS RECORD.
  3730.  
  3731. ZR X3,PCS11 IF SAME CHARACTER SET - CHECK ASCII FLAG
  3732. SA1 B5+B1 SET DECK NAME IN MESSAGE
  3733. RJ SFN SPACE FILL DECK NAME
  3734. SX2 1R &1R- FORM MESSAGE
  3735. LX6 -6
  3736. BX6 X6-X2
  3737. SA6 PCSC
  3738. SA0 A6 ADDRESS OF MESSAGE
  3739. EQ ABT
  3740.  
  3741. * CHECK REDUNDANT CONVERSION.
  3742.  
  3743. PCS2 SA3 CVT CHECK AGAINST CONVERSION OPTION
  3744. ZR X3,PCS7 IF NO CONVERSION SPECIFIED
  3745. SB2 X3-63B
  3746. NZ X5,PCS4 IF PROGRAM LIBRARY IS 64 CHARACTER SET
  3747. NZ B2,PCS5 IF NOT REDUNDANT, NOT 63 TO 63 CONVERSION
  3748. PCS3 MESSAGE (=C* REDUNDANT CONVERSION IGNORED.*),3
  3749. BX6 X6-X6 CLEAR CONVERSION IF REDUNDANT
  3750. SA6 A3
  3751. EQ PCS7 PROCESS AS NO CONVERSION
  3752.  
  3753. PCS4 NE B1,B2,PCS5 IF NOT 64 TO 64 REDUNDANCY
  3754. SA1 MADCV
  3755. NZ X1,PCS5 IF MADIFY CONVERSION - NOT REDUNDANT
  3756. SB2 64B NEW PROGRAM LIBRARY CHARACTER SET
  3757. EQ PCS3 REDUNDANT 64 TO 64 CONVERSION
  3758.  
  3759. PCS5 ZR B2,PCS6 IF CONVERSION TO 63 CHARACTER SET
  3760. SB2 64B SET CONVERSION TO 64 CHARACTER SET
  3761. PCS6 SX7 B2-1 SET CONVERSION FLAG
  3762. SA7 A3+
  3763.  
  3764. * MODIFY INSTRUCTIONS FOR 63 CHARACTER SET.
  3765.  
  3766. PCS7 NZ B2,PCS8 IF 64 CHARACTER SET
  3767. SA1 PCSE
  3768. SA0 PCSD
  3769. NZ X1,ABT IF INPUT 64 WHILE PL IS 63
  3770. SA1 PCSA MODIFY INSTRUCTIONS
  3771. SA2 A1+B1
  3772. BX6 X1
  3773. BX7 X2
  3774. SA6 ECDA
  3775. SA7 ECDB
  3776.  
  3777. * INITIALIZE PROGRAM LIBRARY/COMPILE FILE CHARACTER SETS.
  3778.  
  3779. PCS8 SX7 B2 NEW CHARACTER SET
  3780. SA1 CIDT COMPILE FILE HEADER SKELETON
  3781. SA7 CNPL CHARACTER SET OF NEW PROGRAM LIBRARY
  3782. LX7 24
  3783. BX6 X7+X1
  3784. SA6 A1
  3785.  
  3786. * STORE DISPLAY CODE COLON AND PERCENT CHARACTERS.
  3787.  
  3788. ZR B2,PCS9 IF 63 CHARACTER SET
  3789. MX7 0 00B = 64 CHARACTER SET COLON
  3790. SX6 63B 63B = 64 CHARACTER SET PERCENT
  3791. EQ PCS10 STORE CHARACTERS
  3792.  
  3793. PCS9 SX7 63B 63 CHARACTER SET COLON
  3794. SX6 1R 63 CHARACTER SET PERCENT
  3795. PCS10 SA7 DISCOL COLON
  3796. SA6 DISPER PERCENT
  3797.  
  3798.  
  3799. * DETERMINE IF DECK IS DISPLAY OR 6/12 ASCII.
  3800.  
  3801. PCS11 SA2 MADCV CHECK FOR MADIFY CONVERSION
  3802. SX6 1 SET ASCII BIT FOR THIS DECK
  3803. NZ X2,PCS12 IF MADIFY CONVERSION
  3804. SA1 A5 GET CHARACTER SET WORD
  3805. MX4 -6
  3806. LX1 -6 SHIFT TO ASCII/DISPLAY FIELD
  3807. BX6 -X4*X1
  3808. PCS12 SA6 CSC SET CURRENT CHARACTER SET
  3809. EQ PCSX RETURN
  3810.  
  3811.  
  3812. PCSA NZ B4,ECD6 IF NOT END OF WORD (63 CHARACTER SET)
  3813. SA1 A1+B1
  3814. SB4 B5
  3815. + EQ ECD6 (63 CHARACTER SET)
  3816.  
  3817. PCSB DATA C* DECKNAM - INCORRECT CS, 63 ASSUMED.*
  3818. PCSC DATA C* DECKNAM - MIXED CHARACTER SET DETECTED.*
  3819. PCSD DATA C* INCORRECT CS ON INPUT.*
  3820. PCSE DATA 0 INPUT 64 SET INDICATOR
  3821. PLE SPACE 4,20
  3822. ** PLE - PROCESS LIBRARY ERROR.
  3823. *
  3824. * ISSUES LIBRARY ERROR MESSAGE AND ABORTS JOB.
  3825. *
  3826. * CALLS ABT.
  3827.  
  3828.  
  3829. PLE SA1 DN SET DECK NAME IN MESSAGE
  3830. BX6 X1
  3831. SA6 PLEB
  3832. SA0 PLEA ABORT JOB
  3833. EQ ABT
  3834.  
  3835. PLEA DATA 20H PL ERROR IN DECK
  3836. PLEB CON 0
  3837. PCW SPACE 4,20
  3838. ** PCW - PROCESS COMPILE FILE WRITE.
  3839. *
  3840. * WRITE COMMON DECK DATA IF NOT CALL TO OTHER COMMON DECK.
  3841. * TRAP NESTING OF COMMON DECKS.
  3842. *
  3843. * ENTRY NONE.
  3844. *
  3845. * EXIT (X1) = ZERO = NORMAL RETURN
  3846. * = NONZERO = SKIP THIS LINE
  3847. * (X6) = COMMON DECK NAME IF CALL ENCOUNTERED.
  3848. * ELSE 0, AND LINE WRITTEN.
  3849. *
  3850. * USES ALL.
  3851. *
  3852. * CALLS ASN, ECD, LCE, WCC, WCF.
  3853. *
  3854. * MACROS CARD, LISTOP, RECALL, SEARCH.
  3855.  
  3856.  
  3857. PCW7 SA1 AM CHECK FOR COMPRESSED COMPILE FILE
  3858. ZR X1,PCW8 IF NOT COMPRESSED MODE
  3859.  
  3860. RJ WCC WRITE COMPRESSED COMPILE FILE
  3861. EQ PCW10 NORMAL RETURN
  3862.  
  3863. PCW8 RJ ECD EXPAND LINE
  3864. PCW9 RJ WCF WRITE COMPILE FILE
  3865. SX1 1 THIS LINE IS NOT A COMMENT
  3866. PCW10 MX6 0 NORMAL RETURN - NO COMMON DECK NESTING
  3867.  
  3868. PCW SUBR ENTRY/EXIT
  3869. SA2 CDC INCREMENT LINE COUNT
  3870. SA1 CDS GET SKIP COUNT
  3871. SX7 X2+B1
  3872. SA7 A2
  3873. ZR X1,PCW1 IF NOTHING TO SKIP
  3874. SX7 X1-1
  3875. SA7 A1
  3876. MX1 0 INDICATE SKIPPING
  3877. BX6 X6-X6
  3878. EQ PCWX RETURN SKIPPING THIS LINE
  3879.  
  3880. PCW1 SA1 CDTX
  3881. SA2 WCCA GET PREFIX CHARACTER
  3882. BX3 X2-X1
  3883. AX3 54
  3884. NG X3,PCW7 IF NOT COMMENT LINE
  3885. NZ X3,PCW7 IF NOT COMMENT LINE
  3886. RJ ECD EXPAND LINE
  3887.  
  3888. CARD CALL,PCW2 *CALL
  3889. CARD CALLC,PCW4 *CALLC
  3890. CARD IFCALL,PCW5 *IFCALL
  3891. CARD NIFCALL,PCW6 *NIFCALL
  3892.  
  3893. EQ PCW9 WRITE COMPILE FILE
  3894. COMPILE SPACE 4,10
  3895. *** COMPILE FILE CONTROL DIRECTIVES.
  3896. *
  3897. * THESE DIRECTIVES CONTROL THE PROCESSING OF THE COMPILE FILE.
  3898. * THEY ARE PROCESSED WHEN THEY OCCUR FROM THE PROGRAM LIBRARY
  3899. * OR RESULT FROM INSERTION.
  3900. CALL SPACE 4,10
  3901. *** CALL DNAME
  3902. *
  3903. * PLACE COPY OF COMMON DECK *DNAME* ON COMPILE FILE.
  3904.  
  3905. PCW2 SA1 IFIP
  3906. NG X1,PCW10 IF INACTIVE
  3907. RECALL M
  3908. RJ ASN ASSEMBLE NAME
  3909. PCW3 NZ X6,PCW3.5 IF NAME IS OK
  3910. BX7 X7-X7
  3911. SA7 CL CLEAR LINE LISTED STATUS
  3912. SA0 =C/ UNKNOWN DECK./
  3913. RJ LCE LIST COMPILE FILE DIRECTIVE ERROR
  3914. EQ PCW10 RETURN AFTER ERROR
  3915.  
  3916. PCW3.5 SEARCH TNCC,X6 CHECK IF RECURSIVE CALL
  3917. ZR X2,PCWX IF NOT FOUND IN NESTING STACK
  3918. LISTOP E,PCW10 IF NO ERROR LIST - RETURN
  3919. SA0 PCWA
  3920. RJ LCE LIST COMPILE FILE DIRECTIVE ERROR
  3921. EQ PCW10 NORMAL RETURN
  3922. CALLC SPACE 4,10
  3923. *** CALLC DNAME
  3924. *
  3925. * PLACE COPY OF COMMON DECK *DNAME* ON COMPILE FILE, IF IT
  3926. * HAS NOT BEEN CALLED BY A PREVIOUS *CALL* OR *CALLC* COMPILE
  3927. * FILE DIRECTIVE.
  3928.  
  3929. PCW4 SA1 IFIP
  3930. NG X1,PCW10 IF INACTIVE
  3931. RECALL M
  3932. RJ ASN ASSEMBLE NAME
  3933. SEARCH TCCD,X6
  3934. ZR X2,PCW3 IF NOT FOUND - PROCESS AS *CALL
  3935. EQ PCW10 NORMAL RETURN
  3936. IFCALL SPACE 4,10
  3937. *** IFCALL NAME,DNAME
  3938. *
  3939. * PLACE COPY OF COMMON DECK *DNAME* ON COMPILE FILE, IF
  3940. * *NAME* IS DEFINED.
  3941.  
  3942.  
  3943. PCW5 RJ ASN ASSEMBLE NAME
  3944. SEARCH TDEF,X6 SEARCH FOR NAME
  3945. ZR X2,PCW10 IF NOT FOUND - RETURN
  3946. SX7 X7+B1 SKIP SEPARATOR
  3947. SA7 CH
  3948. EQ PCW2 PROCESS AS *CALL
  3949. NIFCALL SPACE 4,10
  3950. *** NIFCALL NAME,DNAME
  3951. *
  3952. * PLACE COPY OF COMMON DECK *DNAME* ON COMPILE FILE, IF
  3953. * *NAME* IS NOT DEFINED.
  3954.  
  3955.  
  3956. PCW6 RJ ASN ASSEMBLE NAME
  3957. SEARCH TDEF,X6 SEARCH FOR NAME
  3958. NZ X2,PCW10 IF FOUND - RETURN
  3959. SX7 X7+B1 SKIP SEPARATOR
  3960. SA7 CH
  3961. EQ PCW2 PROCESS AS *CALL
  3962.  
  3963.  
  3964. PCWA DATA C* DECKNAM - INCORRECTLY NESTED CALL OF COMMON DECK*
  3965. RCL SPACE 4,15
  3966. ** RCL - RE-COMPRESS LINE.
  3967. *
  3968. * ENTRY (CHAR) = CHARACTER STRING OF LINE.
  3969. * (B7) = LAST CHARACTER POSITION IN STRING BUFFER.
  3970. *
  3971. * EXIT (CDTX) = COMPRESSED LINE.
  3972. * (CDWC) = WORD COUNT OF COMPRESSED LINE.
  3973. *
  3974. * USES ALL.
  3975.  
  3976.  
  3977. * PROCESS END OF LINE.
  3978.  
  3979. RCL8 LX6 X6,B6 SHIFT UP LAST WORD
  3980. MX3 -12
  3981. SA6 A6+1
  3982. BX4 -X3*X6
  3983. SB2 A1+
  3984. BX6 X6-X6
  3985. ZR X4,RCL9 IF LINE TERMINATED
  3986. SA6 A6+1 TERMINATE LINE
  3987. RCL9 SX7 A6-B2 SET WORD COUNT
  3988. SA7 A1-B1
  3989.  
  3990. RCL SUBR ENTRY/EXIT
  3991. SX7 B7-1 SAVE LAST CHARACTER POSITION
  3992. SA7 RCLL
  3993. SX0 2074B (X0) = CONSTANT 60 FOR UNPACK
  3994. SB4 100B
  3995. SB3 -B1
  3996. SA1 CDID PRESET (A6)
  3997. LX0 48
  3998. SA5 CHAR FIRST CHARACTER
  3999. SB7 B4+B1
  4000. BX6 X1
  4001. SA6 A1
  4002. SB2 6
  4003. UX6,B6 X0 RESET REGISTERS
  4004. SA2 RCLL SET LAST CHARACTER POSITION
  4005. SB5 -B1
  4006. BX1 -X2
  4007. SX7 1R
  4008. EQ RCL7 ENTER TO PROCESS FIRST CHARACTER
  4009.  
  4010. RCL1 SB5 B5+1
  4011. RCL2 LX6 6 00 CHARACTER
  4012. SB6 B6-B2
  4013. SX4 B4-B1 COMPRESSION = 77B
  4014. SB3 B5-B7
  4015. NZ B6,RCL3 IF NOT END OF WORD
  4016. SA6 A6+B1
  4017. UX6,B6 X0 RESET REGISTERS
  4018. RCL3 PL B3,RCL4 IF .GT. 64 BLANKS
  4019. SX4 B5-B1 COMPRESSION = COUNT - 1
  4020. SB3 -B1
  4021. RCL4 NZ X4,RCL5 IF CHARACTER IS NOT *00*
  4022. LX6 6 INSERT *00*
  4023. SB6 B6-B2
  4024. SX4 B1 SET *01*
  4025. NZ B6,RCL5 IF NOT END OF WORD
  4026. SA6 A6+B1
  4027. UX6,B6 X0 RESET REGISTERS
  4028. RCL5 BX3 X4 SAVE CHARACTER
  4029. AX4 6 CHECK FOR ESCAPE CODE
  4030. ZR X4,RCL6 IF NO ESCAPE CODE
  4031. LX6 6 SHIFT ASSEMBLY
  4032. SB6 B6-B2
  4033. BX6 X6+X4 MERGE NEW CHARACTER
  4034. SB5 B3
  4035. NZ B6,RCL6 IF NOT END OF WORD
  4036. SA6 A6+B1
  4037. UX6,B6 X0 RESET REGISTERS
  4038. RCL6 MX4 -6
  4039. BX4 -X4*X3 CLEAN OFF ESCAPE CODE
  4040. LX6 6 SHIFT ASSEMBLY
  4041. SB6 B6-B2
  4042. BX6 X6+X4 MERGE NEW CHARACTER
  4043. SB5 B3
  4044. NZ B6,RCL7 IF NOT END OF WORD
  4045. SA6 A6+B1
  4046. UX6 B6,X0
  4047. RCL7 IX3 X5-X7 CHECK CHARACTER
  4048. BX4 X5
  4049. SB5 B5+B1 COUNT BLANK
  4050. SB3 X1 -( LWA + 1 ) OF STRING BUFFER
  4051. SB3 B3+A5 CHECK FOR END OF LINE
  4052. SA5 A5+B1 NEXT CHARACTER
  4053. ZR B3,RCL8 IF END OF LINE
  4054. ZR X3,RCL7 IF BLANK
  4055. SB3 -1
  4056. ZR B5,RCL4 IF NO BLANKS
  4057. BX4 X7
  4058. SA5 A5-B1 BACKSPACE
  4059. EQ B5,B1,RCL4 IF 1 BLANK
  4060. SB5 B5-1
  4061. NE B5,B1,RCL1 IF NOT 2 BLANKS
  4062. SA5 A5-1 BACKSPACE
  4063. EQ RCL4 CHECK FOR *00* CHARACTER
  4064.  
  4065. RCLL CON 0 LAST CHARACTER POSITION IN STRING BUFFER
  4066. RMT SPACE 4,25
  4067. ** RMT - READ MODIFIER TABLE.
  4068. *
  4069. * ENTRY (DN) = DECK NAME.
  4070. * (MA) = MODIFICATION TABLE ADDRESS.
  4071. *
  4072. * USES X - ALL.
  4073. * A - 1, 2, 3, 4, 5, 6, 7.
  4074. * B - ALL.
  4075. *
  4076. * CALLS AMD, ATS, PCS, POC.
  4077.  
  4078.  
  4079. RMT SUBR ENTRY/EXIT
  4080. SA1 DA GET DECK TABLE ENTRY
  4081. SA3 X1+B1 SET RANDOM ADDRESS
  4082. MX7 -30
  4083. BX7 -X7*X3
  4084. AX3 36 SET FILE NAME
  4085. SA7 P+6
  4086. SA2 X3
  4087. BX6 X2
  4088. SA6 P
  4089. READ A6 INITIATE NEW READ
  4090. READW X2,TIDT,TIDTL READ IDENT TABLE
  4091. NZ X1,PLE IF EOR
  4092. SA1 TIDT
  4093. LX1 12
  4094. SB2 X1-7700B
  4095. NZ B2,PLE IF NO IDENT TABLE
  4096. SA1 TIDT+1 CHECK DECK NAME
  4097. SA2 DN
  4098. BX3 X1-X2
  4099. NZ X3,PLE IF NO MATCH
  4100. ADDWRD TDKI,X1 ADD DECK NAME TO DECK IDENTIFIER TABLE
  4101. ADDWRD TNCD,X6-X6 ADD NEXT LINE NUMBER
  4102. SB5 TIDT FWA OF IDENT TABLE
  4103. RJ PCS PROCESS CHARACTER SET
  4104. READW P,T1,1 READ MODIFIER TABLE LENGTH
  4105. NZ X1,PLE IF EOR
  4106. SA1 T1 CHECK TABLE
  4107. LX1 18
  4108. BX6 X6-X6
  4109. SB2 X1-700100B
  4110. SB3 X1-700200B
  4111. ZR B2,RMT1 IF NORMAL DECK
  4112. NZ B3,PLE IF NOT COMMON DECK
  4113. SX6 B1
  4114. RMT1 SA6 CD SET DECK STATUS
  4115. LX1 42 SET TABLE LENGTH
  4116. SB7 X1
  4117. ZR B7,RMT2 IF NO MODIFIERS
  4118. ALLOC TNCD,B7 ALLOCATE FOR MODIFIERS
  4119. ALLOC TDKI,B7
  4120. READW P,X2+B1,B7 READ MODIFIERS
  4121. RMT2 SA3 MA
  4122. ZR X3,RMT3 IF NO MODIFICATIONS
  4123. SB6 X3
  4124. RJ AMD ADD MODIFIERS
  4125. SA1 L.TDKI ALLOCATE PARALLEL TABLE
  4126. SB7 X1
  4127. ALLOC TNCD,B7
  4128. RMT3 SA1 YK
  4129. ZR X1,RMTX IF NO YANKS - RETURN
  4130.  
  4131. * ADD YANKS.
  4132.  
  4133. SA2 L.TDKI SEARCH MODIFIER TABLE
  4134. SA1 F.TDKI
  4135. SX0 1S16 YANK/UNYANK MASK
  4136. SB4 X2+
  4137. SA5 X1
  4138. BX7 X7-X7 CLEAR YANK COUNT
  4139. RMT4 EQ B4,B1,RMT6 IF END OF MODIFIER TABLE
  4140. SA5 A5+B1 NEXT ENTRY
  4141. SB4 B4-B1
  4142. SX2 1S15 SEARCH FOR YANK
  4143. SEARCH TNME,X5+X2,X2
  4144. ZR X2,RMT4 IF NOT FOUND
  4145. BX1 X0*X2 CLEAR/SET YANK IN MODIFIER
  4146. LX2 59-0
  4147. RMT5 BX5 -X0*X5
  4148. IX6 X5+X1
  4149. SA6 A5
  4150. SX7 X7+B1 COUNT YANK
  4151. PL X2,RMT4 IF NOT YANK AFTER
  4152. SA5 A5+B1 NEXT ENTRY
  4153. SB4 B4-B1
  4154. NZ B4,RMT5 IF NOT AT END OF MODIFIERS
  4155. RMT6 SA7 YD SET YANK FLAG
  4156. EQ RMTX RETURN
  4157. RPF SPACE 4,25
  4158. ** RPF - READ LINE FROM PROGRAM LIBRARY.
  4159. *
  4160. * EXIT (X1) = 0, IF NO EOR READ.
  4161. *
  4162. * USES ALL.
  4163. *
  4164. * CALLS RDC=.
  4165.  
  4166.  
  4167. RPF SUBR ENTRY/EXIT
  4168. READC A0,BUF,BUFL READ MHB,S
  4169. NZ X1,RPFX IF EOR - RETURN
  4170. SA1 BUF SHIFT TO FIRST MHB
  4171. LX1 24
  4172. SX6 -B1 CLEAR MHB COUNT
  4173. MX0 -18
  4174. SB2 B1 2 MHB-S ON FIRST PASS
  4175. RPF1 LX1 18 SHIFT TO NEXT MHB
  4176. BX7 -X0*X1
  4177. SB2 B2-B1
  4178. SX6 X6+B1
  4179. ZR X7,RPF2 IF END OF MHB LIST
  4180. SA7 TMHB+X6 STORE MHB
  4181. PL B2,RPF1 IF NOT AT END OF WORD
  4182. SA1 A1+B1 NEXT WORD
  4183. SB2 B1+B1 RESET MHB COUNT
  4184. LX1 6
  4185. EQ RPF1 LOOP
  4186.  
  4187. * READ COMPRESSED LINE.
  4188.  
  4189. RPF2 SA5 BUF SET LINE ACTIVITY
  4190. MX0 -16 SET IDENTIFIER INDEX MASK
  4191. BX7 X5
  4192. SA6 NMHB
  4193. SA7 CDAC
  4194. READC A0,CDTX,MXCCL READ COMPRESSED LINE
  4195. NZ X1,PLE IF EOR
  4196. SX7 B6-CDTX SET WORD COUNT OF LINE
  4197. LX5 -18 EXTRACT IDENTIFIER INDEX
  4198. SA7 CDWC
  4199. BX4 -X0*X5
  4200. SA2 F.TDKI
  4201. SB2 X4
  4202. AX5 18 SET LINE NUMBER
  4203. SA2 X2+B2 SET LINE IDENTIFIER
  4204. SX3 X5
  4205. SA4 F.TNCD
  4206. BX6 X0*X2
  4207. IX7 X6+X3
  4208. SA4 X4+B2 CHECK NEXT LINE FOR MODIFICATION
  4209. SA7 A2 SET LINE COUNTER
  4210. SA7 CDID
  4211. IX6 X3-X4
  4212. NZ X6,RPF3 IF NO MODIFICATION
  4213. SA2 MA SET MODIFICATION
  4214. SX6 X2+
  4215. SA6 A2+1
  4216. RPF3 RJ CPF CONVERT PROGRAM FILE
  4217. BX1 X1-X1 CLEAR EOR
  4218. EQ RPFX RETURN
  4219. RTF SPACE 4,20
  4220. ** RTF - READ LINE FROM TEXT FILE.
  4221. *
  4222. * ENTRY (A5) = TEXT INDEX ADDRESS.
  4223. * (X5) = TEXT INDEX.
  4224. *
  4225. * EXIT (X6) = UPDATED TEXT INDEX.
  4226. *
  4227. * USES X - 1, 2, 3, 4, 5, 6, 7.
  4228. * A - 1, 2, 3, 4, 6, 7.
  4229. * B - ALL.
  4230.  
  4231.  
  4232. RTF SUBR ENTRY/EXIT
  4233. SA1 T
  4234. SA2 F.TTXT
  4235. NZ X1,RTF2 IF TEXT FILE WRITTEN
  4236. SB2 X5 FIRST WORD INDEX
  4237. MX4 -12
  4238. SA6 CDID PRESET (A6)
  4239. SB3 A6-1
  4240. SA1 X2+B2 FIRST WORD
  4241. BX7 X7-X7
  4242. RTF1 LX6 X1 MOVE WORD
  4243. BX2 -X4*X1
  4244. SA6 A6+B1
  4245. SX7 X7+B1 COUNT WORD
  4246. SA1 A1+B1 READ NEXT WORD
  4247. NZ X2,RTF1 IF NOT ZERO BYTE
  4248. SA7 B3 SET LINE LENGTH
  4249. IX6 X5+X7 ADVANCE TEXT INDEX
  4250. EQ RTFX RETURN
  4251.  
  4252. * PROCESS DATA ON TEXT FILE.
  4253.  
  4254. RTF2 SA1 T+5 CHECK TEXT FILE POSITION
  4255. SA2 T+2
  4256. SX6 TBUF
  4257. MX4 -24
  4258. IX7 X2-X6
  4259. BX4 -X4*X5
  4260. IX6 X4-X1
  4261. MI X6,RTF4 IF REQUIRED TEXT BEFORE BUFFER
  4262. IX7 X6-X7
  4263. MX3 -12
  4264. PL X7,RTF4 IF REQUIRED TEXT AFTER BUFFER
  4265. SB7 X2 (B7) = BUFFER LIMIT
  4266. BX7 X7-X7 CLEAR WORD COUNT
  4267. SB6 X6+TBUF (B6) = STARTING ADDRESS
  4268. SA6 CDID PRESET (A6)
  4269. SA1 B6 FIRST WORD
  4270. SB3 A6-B1
  4271. RTF3 EQ B6,B7,RTF4 IF END OF BUFFER REACHED
  4272. LX6 X1 MOVE WORD
  4273. BX2 -X3*X1
  4274. SB6 B6+B1
  4275. SA6 A6+B1
  4276. SX7 X7+B1 COUNT WORD
  4277. SA1 A1+B1 READ NEXT WORD
  4278. NZ X2,RTF3 IF NOT ZERO BYTE
  4279. SA7 B3 SET LINE LENGTH
  4280. IX6 X5+X7 ADVANCE TEXT INDEX
  4281. EQ RTFX RETURN
  4282.  
  4283. RTF4 AX4 6 SET RANDOM ADDRESS
  4284. SX6 B1
  4285. IX6 X4+X6
  4286. LX4 6 SET CURRENT TEXT INDEX
  4287. BX7 X4
  4288. SA6 T+6
  4289. SA7 A6-B1
  4290. SX6 TBUF SET IN = OUT = FIRST
  4291. SA6 T+2
  4292. SA6 A6+B1
  4293. READ T,R
  4294. EQ RTF2 RESTART MOVE
  4295. STB SPACE 4,20
  4296. ** STB - SEARCH TABLE FOR ENTRY WITH MASK.
  4297. *
  4298. * ENTRY (A0) = TABLE NUMBER.
  4299. * (X1) = MASK.
  4300. * (X6) = ENTRY TO SEARCH FOR.
  4301. *
  4302. * EXIT (X2) = 0, IF ENTRY NOT FOUND.
  4303. * (X2) .NE. 0, TABLE ENTRY.
  4304. * (A2) = ADDRESS OF TABLE ENTRY.
  4305. * (X3) = INDEX OF TABLE ENTRY.
  4306. *
  4307. * USES X - 2, 3.
  4308. * A - 2, 3.
  4309. * B - 2.
  4310.  
  4311.  
  4312. STB2 SA2 A2-B1 RESTORE ENTRY
  4313. SX3 A2-B3 SET INDEX
  4314.  
  4315. STB SUBR ENTRY/EXIT
  4316. SA3 FTAB+A0
  4317. SA2 LTAB+A0
  4318. ZR X2,STBX IF TABLE EMPTY - RETURN
  4319. SB2 X2
  4320. SB3 X3
  4321. SA2 X3
  4322. STB1 BX3 X6-X2 CHECK ENTRY
  4323. SB2 B2-B1
  4324. BX3 X1*X3
  4325. SA2 A2+B1
  4326. ZR X3,STB2 IF REQUESTED ENTRY FOUND
  4327. NZ B2,STB1 IF NOT END OF TABLE
  4328. BX2 X2-X2 IF ENTRY NOT FOUND
  4329. EQ STBX RETURN
  4330. UPN SPACE 4,20
  4331. ** UPN - UNPACK NAME.
  4332. *
  4333. * ENTRY (X1) = NAME, LEFT JUSTIFIED ZERO FILL.
  4334. * (B3) = CHARACTER ADDRESS.
  4335. *
  4336. * EXIT (B3) = UPDATED CHARACTER ADDRESS.
  4337. *
  4338. * USES X - 1, 6, 7.
  4339. * A - 7.
  4340. * B - 3.
  4341.  
  4342.  
  4343. UPN1 BX7 -X6*X1 GET NEXT CHARACTER
  4344. BX1 X6*X1 ERASE CURRENT CHARACTER
  4345. SA7 B3+
  4346. SB3 B3+B1 ADVANCE ADDRESS
  4347. LX1 6
  4348. NZ X1,UPN1 IF NOT END OF NAME
  4349. SX7 1R SET TERMINAL BLANK
  4350. SA7 B3+
  4351.  
  4352. UPN SUBR ENTRY/EXIT
  4353. MX6 -6
  4354. LX1 6
  4355. EQ UPN1
  4356. WDR SPACE 4,25
  4357. ** WDR - WRITE DIRECTORY TO PROGRAM LIBRARY.
  4358. *
  4359. * ENTRY (A0) = ADDRESS OF FET FOR FILE.
  4360. *
  4361. * SET DATE IN IDENT TABLE AND WRITE TO *NPL*.
  4362. *
  4363. * USES X - 1, 2, 3, 4, 5, 6, 7.
  4364. * A - 1, 2, 3, 4, 6, 7.
  4365. * B - ALL.
  4366. *
  4367. * CALLS WTW=.
  4368.  
  4369.  
  4370. WDR SUBR ENTRY/EXIT
  4371. SA1 A0+
  4372. SA2 L.TNDK
  4373. ZR X1,WDRX IF NO NEW PROGRAM LIBRARY - RETURN
  4374. ZR X2,WDRX IF NO NEW DECKS - RETURN
  4375. RECALL A0
  4376. SA1 PL ENTER PROGRAM LIBRARY NAME
  4377. SA2 DATE ENTER DATE IN IDENT TABLE
  4378. BX6 X1
  4379. LX7 X2
  4380. SA6 TIDT+1
  4381. SA7 A6+B1
  4382. BX7 X7-X7 CLEAR MODIFICATION DATE
  4383. SA7 A7+B1
  4384. WRITEW A0,TIDT,TIDTL
  4385. SA5 L.TNDK MERGE DECK COUNT AND DIRECTORY ID
  4386. SA2 WDRA
  4387. BX6 X5+X2
  4388. SA6 T1
  4389. WRITEW A0,T1,1
  4390. SA1 F.TNDK REMOVE FILE NAME POINTERS
  4391. SB2 B1+B1
  4392. SB3 X5
  4393. MX4 24
  4394. SA2 X1+B1
  4395. BX6 -X4*X2
  4396. WDR1 SA6 A2
  4397. SB3 B3-B2
  4398. SA2 A2+B2
  4399. BX6 -X4*X2
  4400. NZ B3,WDR1 IF NOT COMPLETE
  4401. WRITEW A0,X1,X5 WRITE DECK NAME TABLE
  4402. WRITEF X2,R
  4403. EQ WDRX RETURN
  4404.  
  4405. WDRA CON 7000BS48 DIRECTORY ID
  4406. WMT SPACE 4,20
  4407. ** WMT - WRITE MODIFIER TABLE.
  4408. *
  4409. * ADD DECK TO NEW DECK NAME TABLE. WRITE MODIFIER TABLE
  4410. * TO *NPL*.
  4411. *
  4412. * USES ALL.
  4413. *
  4414. * CALLS ADW, WTW=.
  4415.  
  4416.  
  4417. WMT SUBR ENTRY/EXIT
  4418. SA1 MA
  4419. SA2 DN ENTER DECK NAME IN IDENT TABLE
  4420. SA3 TIDT+3
  4421. ZR X1,WMT1 IF NO MODIFICATIONS
  4422. SA3 DATE ENTER NEW DATE
  4423. WMT1 BX6 X2
  4424. LX7 X3
  4425. SA6 TIDT+1
  4426. SA7 TIDT+3
  4427. SA1 CD
  4428. SX3 X1+6
  4429. ADDWRD TNDK,X2+X3 ENTER DECK NAME
  4430. SX1 RI SET RANDOM INDEX RETURN ADDRESS
  4431. SX2 X1
  4432. LX1 30
  4433. BX6 X1+X2
  4434. SA6 N+6
  4435. SX1 X2+B1
  4436. SX2 X1
  4437. LX1 30
  4438. BX6 X2+X1
  4439. SA6 M+6
  4440. SA1 CD
  4441. SA2 WMTA
  4442. ZR X1,WMT2 IF NOT COMMON DECK
  4443. SA2 WMTB
  4444. WMT2 SA1 L.TDKI MERGE MODIFIER COUNT AND MODIFIER TABLE ID
  4445. SX5 X1-1
  4446. BX6 X2+X5
  4447. SA6 T1
  4448. SA2 CSC GET DISPLAY/ASCII FLAG
  4449. SA1 CNPL SET CHARACTER SET OF NEW PROGRAM LIBRARY
  4450. LX2 6
  4451. BX6 X1+X2 MERGE DISPLAY/ASCII FLAG
  4452. SA6 TIDT+16B
  4453. SA1 N
  4454. ZR X1,WMT3 IF NO NEW PROGRAM LIBRARY
  4455. WRITEW N,TIDT,TIDTL WRITE IDENT TABLE
  4456. WRITEW N,T1,1 WRITE MODIFIER ID
  4457. SA1 F.TDKI WRITE DECK MODIFIERS
  4458. WRITEW X2,X1+B1,X5
  4459. SA1 M
  4460. ZR X1,WMTX IF NOT SCRATCH FILE - RETURN
  4461. WMT3 WRITEW M,TIDT,TIDTL WRITE IDENT TABLE
  4462. WRITEW X2,T1,1 WRITE MODIFIER ID
  4463. SA1 F.TDKI WRITE DECK MODIFIERS
  4464. WRITEW X2,X1+B1,X5
  4465. EQ WMTX RETURN
  4466.  
  4467. WMTA CON 7001BS48 MODIFIER TABLE ID FOR DECK
  4468. WMTB CON 7002BS48 MODIFIER TABLE ID FOR COMMON DECK
  4469. WNF SPACE 4,25
  4470. ** WNF - WRITE LINE TO NEW PROGRAM LIIBRARY.
  4471. *
  4472. * ENTRY (CDAC) = LINE ACTIVITY FLAG.
  4473. * (CDID) = LINE IDENTIFICATION.
  4474. * (CDWC) = WORD COUNT OF COMPRESSED LINE.
  4475. * (CDTX) = FWA OF TEXT OF COMPRESSED LINE.
  4476. * (NMHB) = NUMBER OF MODIFICATION HISTORY BYTES (MHBS).
  4477. * (THMB) = TABLE OF MHBS.
  4478. *
  4479. * USES ALL.
  4480. *
  4481. * CALLS WTW=.
  4482.  
  4483.  
  4484. WNF SUBR ENTRY/EXIT
  4485. SA1 CDAC ACTIVITY TO BIT 59
  4486. SA5 NMHB STORE MHB TERMINATORS
  4487. MX3 1
  4488. SA2 A1+B1 WORD COUNT OF LINE TO BITS 54 - 58
  4489. BX6 X6-X6
  4490. BX1 X3*X1
  4491. SA6 TMHB+X5
  4492. LX1 24
  4493. SA3 A2+B1 LINE NUMBER TO BITS 36 - 53
  4494. MX0 -16
  4495. SA6 A6+B1
  4496. LX2 18
  4497. SB3 X5 MHB COUNT
  4498. BX3 -X0*X3
  4499. SA6 A6+B1
  4500. BX1 X1+X2
  4501. SA5 A5+B1 FIRST MHB
  4502. SB2 B1 2 MHB,S ON FIRST PASS
  4503. IX7 X1+X3
  4504. SA7 BUF
  4505.  
  4506. * PACK AND WRITE MHB TABLE.
  4507.  
  4508. WNF1 LX7 18 PACK MHB-S
  4509. SB3 B3-B1
  4510. BX7 X5+X7
  4511. SB2 B2-B1
  4512. SA5 A5+B1 NEXT MHB
  4513. PL B2,WNF1 IF NOT AT END OF WORD OF MHB,S
  4514. SA7 A7+B1 STORE WORD
  4515. SB2 B1+B1
  4516. BX7 X7-X7
  4517. PL B3,WNF1 IF NOT DONE WITH ALL MHB,S
  4518. SX5 A7-BUF
  4519.  
  4520. * WRITE MHB TABLE AND COMPRESSED LINE.
  4521.  
  4522. SA1 N
  4523. ZR X1,WNF2 IF NO NEW PROGRAM LIBRARY
  4524. WRITEW N,BUF+1,X5
  4525. SA1 CDWC
  4526. WRITEW X2,CDTX,X1
  4527. SA1 M
  4528. ZR X1,WNFX IF NO SCRATCH LIBRARY - RETURN
  4529. WNF2 WRITEW M,BUF+1,X5
  4530. SA1 CDWC
  4531. WRITEW X2,CDTX,X1
  4532. EQ WNFX RETURN
  4533. WOF SPACE 4,20
  4534. ** WOF - WRITE OUTPUT FILE.
  4535. *
  4536. * ENTRY (X1) .GT. 0, FWA OF LINE IN *C* FORMAT.
  4537. * (X1) .LT. 0, -(FWA) OF LINE IN *S* FORMAT.
  4538. * (X2) = LENGTH OF LINE IN *S* FORMAT.
  4539. *
  4540. * USES X - 1, 2, 3, 4, 6, 7.
  4541. * A - 1, 2, 3, 4, 6, 7.
  4542. *
  4543. * CALLS CDD.
  4544. *
  4545. * MACROS WRITEC, WRITES, WRITEW.
  4546.  
  4547.  
  4548. WOF SUBR ENTRY/EXIT
  4549. SX6 B1+ INDICATE DATA WRITTEN TO OUTPUT FILE
  4550. SA3 LC ADVANCE LINE COUNT
  4551. SA6 LF
  4552. SX6 X3+B1
  4553. SA6 A3
  4554. SA4 A3+B1
  4555. IX7 X6-X4
  4556. NG X7,WOF5 IF BOTTOM OF PAGE NOT REACHED
  4557. BX6 X1 SAVE REQUEST
  4558. LX7 X2
  4559. SA6 WOFA
  4560. SA7 A6+B1
  4561. SA1 PN ADVANCE PAGE NUMBER
  4562. SX7 X1+B1
  4563. SX6 3 RESET LINE COUNT
  4564. SA6 A3
  4565. SA7 A1
  4566. RJ CDD CONVERT PAGE NUMBER
  4567. MX1 -12
  4568. LX6 4*6 STORE PAGE NUMBER
  4569. BX6 X1*X6
  4570. SA6 PAGE
  4571. SA1 TO
  4572. SX2 O
  4573. ZR X1,WOF1 IF TERMINAL OUTPUT
  4574. WRITEW X2,(=1H1),1
  4575. SA1 TL
  4576. WRITEW X2,X1,6
  4577. WRITEW X2,TITL,TITLL
  4578. EQ WOF2 CONTINUE PROCESSING
  4579.  
  4580. WOF1 SA3 PN
  4581. SX3 X3-2
  4582. NZ X3,WOF2 IF NOT FIRST TIME
  4583. WRITEW X2,TERL,TERLL
  4584. WRITEW X2,(=C* *),1 WRITE END OF LINE
  4585. WOF2 SA1 WOFB CHECK IF TIME FOR CONTROL IMAGE
  4586. SX6 B1
  4587. SA6 A1
  4588. SA3 TO
  4589. NZ X1,WOF4 IF *MODIFY* CONTROL HAS BEEN OUTPUT
  4590. ZR X3,WOF3 IF TERMINAL OUTPUT
  4591. WRITEW X2,(=1H),1 *MODIFY* CONTROL IMAGE
  4592. WOF3 WRITEW X2,CCDR,8
  4593. WRITEW X2,(=C* *),1 WRITE END OF LINE
  4594. SA1 LC SET LINE COUNT FOR EXTRA LINE
  4595. SX6 X1+B1
  4596. SA6 A1
  4597. WOF4 WRITEW X2,SBTL,SBTLL
  4598. SA1 WOFA RESTORE REQUEST
  4599. SA2 A1+B1
  4600. WOF5 NG X1,WOF6 IF *S* FORMAT
  4601. WRITEC O,X1
  4602. EQ WOFX RETURN
  4603.  
  4604. WOF6 BX1 -X1
  4605. WRITEK O,X1,X2
  4606. EQ WOFX RETURN
  4607.  
  4608. WOFA CON 0
  4609. CON 0
  4610. WOFB CON 0 *MODIFY* CONTROL LINE ISSUE FLAG
  4611. SSR SPACE 4,15
  4612. ** SSR - SELECT *S* READ FUNCTION.
  4613. *
  4614. * SELECT *RDS=* OR *RDA=* DEPENDING ON CHARACTER SET.
  4615. *
  4616. * ENTRY (CSC) = CURRENT CHARACTER SET.
  4617. *
  4618. * USES X - 3.
  4619. * A - 3.
  4620. *
  4621. * CALLS RDA=, RDS=.
  4622.  
  4623.  
  4624. SSR SUBR ENTRY/EXIT
  4625. SA3 CSC GET CURRENT CHARACTER SET
  4626. NZ X3,SSR1 IF ASCII
  4627. RJ =XRDS= DISPLAY CODE
  4628. EQ SSRX RETURN
  4629.  
  4630. SSR1 RJ =XRDA= 6/12 DISPLAY BASED ASCII
  4631. EQ SSRX RETURN
  4632. SSW SPACE 4,15
  4633. ** SSW - SELECT *S* WRITE FUNCTION.
  4634. *
  4635. * SELECT *WTS=* OR *WTA=* DEPENDING ON CHARACTER SET.
  4636. *
  4637. * ENTRY (CSC) = CURRENT CHARACTER SET.
  4638. *
  4639. * USES X - 3.
  4640. * A - 3.
  4641. *
  4642. * CALLS WTA=, WTS=.
  4643.  
  4644.  
  4645. SSW SUBR ENTRY/EXIT
  4646. SA3 CSC GET CURRENT CHARACTER SET
  4647. NZ X3,SSW1 IF ASCII
  4648. RJ =XWTS= DISPLAY CODE
  4649. EQ SSWX RETURN
  4650.  
  4651. SSW1 RJ =XWTA= 6/12 DISPLAY BASED ASCII
  4652. EQ SSWX RETURN
  4653. TITLE LIST SUBROUTINES.
  4654. LCE SPACE 4,10
  4655. ** LCE - LIST COMPILE FILE DIRECTIVE ERROR MESSAGE.
  4656. *
  4657. * ENTRY (A0) = ERROR MESSAGE ADDRESS.
  4658. *
  4659. * EXIT ERROR MESSAGE AND LINE IN ERROR LISTED.
  4660. *
  4661. * USES X - 0, 1.
  4662. * A - 1.
  4663. * B - 3.
  4664. *
  4665. * CALLS ECD, LCS, LER, UPN.
  4666.  
  4667.  
  4668. LCE SUBR ENTRY/EXIT
  4669. SA1 AM CHECK FOR COMPRESSED COMPILE GENERATION
  4670. ZR X1,LCE1 IF NOT COMPRESSED COMPILE FILE GENERATION
  4671. RJ ECD EXPAND COMPRESSED LINE
  4672. LCE1 SA1 =9L *ERROR*
  4673. SB3 CHSP
  4674. RJ UPN UNPACK ERROR DATA
  4675. RJ LCS LIST LINE
  4676. SX0 A0
  4677. RJ LER LIST ERROR MESSAGE
  4678. EQ LCEX RETURN
  4679. LCS SPACE 4,15
  4680. ** LCS - LIST LINE STATUS.
  4681. *
  4682. * USES X - 0, 1, 2, 3, 6.
  4683. * A - 1, 2, 3, 6.
  4684. * B - 2, 3, 4, 5.
  4685. *
  4686. * CALLS CDD, UPN, WOF.
  4687.  
  4688.  
  4689. LCS SUBR ENTRY/EXIT
  4690. SA1 CL
  4691. NZ X1,LCSX IF LINE LISTED - RETURN
  4692. BX6 X6-X6
  4693. SA6 A1+B1 CLEAR LIST REQUEST
  4694. SA1 TMHB
  4695. SA2 SC+1
  4696. MX0 -16
  4697. BX6 -X0*X1
  4698. SB6 CHAR+15+X2
  4699. ZR X6,LCS1 IF DECK LINE
  4700. SA2 F.TDKI ADD CURRENT DECK NUMBER
  4701. SA3 X2
  4702. BX1 -X0*X3
  4703. RJ CDD CONVERT TO DECIMAL DISPLAY
  4704. LX6 4*6
  4705. BX1 X6
  4706. SB3 B6+
  4707. RJ UPN UNPACK NAME
  4708. SB6 B3+
  4709. LCS1 PRINT -CHSP,B6+X1 LIST LINE
  4710. SX6 1R CLEAR STATUS
  4711. SA6 CHSP+4
  4712. SA6 A6+B1
  4713. SA6 A6+B1
  4714. SA6 CL SET LINE LISTED
  4715. EQ LCSX RETURN
  4716. LDS SPACE 4,15
  4717. ** LDS - LIST DECK STATUS.
  4718. *
  4719. * USES X - ALL.
  4720. * A - 1, 2, 3, 4, 6, 7.
  4721. * B - ALL.
  4722. *
  4723. * CALLS LTB, SFN, WOF.
  4724.  
  4725.  
  4726. LDS SUBR ENTRY/EXIT
  4727. LISTOP D,LDSX IF NO LIST FOR DECK STATUS - RETURN
  4728. SA1 DN DECK NAME
  4729. RJ SFN SPACE FILL NAME
  4730. SA2 F.TDKI
  4731. LX6 -12
  4732. SX4 X2+B1
  4733. SA6 BUF
  4734. SA3 L.TDKI
  4735. SX0 =C*MODIFIERS.*
  4736. SX5 X3-1
  4737. RJ LTB LIST TABLE
  4738. PRINT (=C* *)
  4739. EQ LDSX RETURN
  4740. LER SPACE 4,20
  4741. ** LER - LIST ERROR MESSAGE.
  4742. *
  4743. * ENTRY (X0) = ERROR MESSAGE ADDRESS.
  4744. * (EA) = ERROR COUNTER ADDRESS TO BE INCREMENTED.
  4745. *
  4746. * EXIT CHSP CLEARED.
  4747. * (EC) = INCREMENTED BY 1.
  4748. *
  4749. * USES ALL.
  4750. *
  4751. * CALLS WTC=, WTW=.
  4752.  
  4753.  
  4754. LER SUBR ENTRY/EXIT
  4755. LISTOP E,LER1 IF NO ERROR LIST
  4756. SA2 O CHECK FOR OUTPUT FILE
  4757. ZR X2,LER1 IF NO OUTPUT FILE
  4758. WRITEW O,(=8A******* ),1
  4759. WRITEC X2,X0
  4760. SA2 LC ADVANCE LINE COUNT
  4761. SX7 X2+B1
  4762. SA7 A2
  4763. LER1 SB2 9 CLEAR CHARACTER SPACING
  4764. SX6 1R
  4765. LER2 SA6 CHSP+B2
  4766. SB2 B2-1
  4767. PL B2,LER2 IF NOT COMPLETE
  4768. SA1 EA ADVANCE ERROR COUNT
  4769. SA1 X1
  4770. SX6 X1+B1
  4771. SA6 A1
  4772. EQ LERX RETURN
  4773. LST SPACE 4,20
  4774. ** LST - LIST STATISTICS.
  4775. *
  4776. * LIST DECKS ON PROGRAM LIBRARY. LIST DECKS ON *NPL*.
  4777. *
  4778. * USES ALL.
  4779. *
  4780. * CALLS CDD, LTB, WOF.
  4781.  
  4782.  
  4783. LST SUBR ENTRY/EXIT
  4784. LISTOP S,LSTX IF NO LIST FOR STATISTICS - RETURN
  4785. SX6 =60HSTATISTICS.
  4786. SX7 99999 FORCE PAGE EJECT
  4787. SA6 TL
  4788. SA7 LC
  4789. SA1 =1H CLEAR FIRST WORD OF BUFFER
  4790. SX7 B1+B1 RESET WORDS/ENTRY
  4791. BX6 X1
  4792. SA6 BUF
  4793. SA7 LTBA
  4794. SA6 SBTL+1 CLEAR SUBTITLE
  4795. SA6 A6+B1
  4796.  
  4797. * LIST DECKS ON PROGRAM LIBRARY.
  4798.  
  4799. SX0 =C*DECKS ON PROGRAM LIBRARY.*
  4800. SA4 F.TDKN
  4801. SA5 DL
  4802. RJ LTB LIST TABLE
  4803.  
  4804. * LIST COMMON DECKS ON PROGRAM LIBRARY.
  4805.  
  4806. SA1 DL
  4807. SA2 F.TDKN
  4808. BX7 X7-X7 CLEAR DECK IDENTIFIER TABLE
  4809. SA5 X2
  4810. SA7 L.TDKI
  4811. ZR X1,LST3 IF NO DECKS IN PROGRAM LIBRARY
  4812. SB6 B1+B1
  4813. MX0 -16
  4814. SB7 X1+
  4815. LST1 BX1 -X0*X5
  4816. SB2 X1-7
  4817. NZ B2,LST2 IF NOT COMMON DECK
  4818. ADDWRD TDKI,X5 ADD DECK
  4819. ADDWRD A0,X6-X6
  4820. LST2 SB7 B7-B6
  4821. SA5 A5+B6
  4822. NZ B7,LST1 IF NOT END OF DECK NAME TABLE
  4823. LST3 SA4 F.TDKI
  4824. SA5 L.TDKI
  4825. SX0 =C*COMMON DECKS ON PROGRAM LIBRARY.*
  4826. RJ LTB LIST TABLE
  4827.  
  4828. * LIST INTRODUCED DECKS.
  4829.  
  4830. SA1 L.TDKN
  4831. SA2 DL
  4832. IX5 X1-X2
  4833. ZR X5,LST4 IF NO DECKS INTRODUCED
  4834. SA3 F.TDKN
  4835. IX4 X3+X2
  4836. SX0 =C*DECKS ADDED BY INITIALIZATION DIRECTIVES.*
  4837. RJ LTB LIST TABLE
  4838.  
  4839. * LIST DECKS ON NEW PROGRAM LIBRARY.
  4840.  
  4841. LST4 SA1 N
  4842. ZR X1,LST5 IF NO NEW PROGRAM LIBRARY
  4843. SX0 =C*DECKS ON NEW PROGRAM LIBRARY.*
  4844. SA4 F.TNDK
  4845. SA5 L.TNDK
  4846. RJ LTB LIST TABLE
  4847.  
  4848. * REMOVE COMMON DECKS FROM EDIT TABLE.
  4849.  
  4850. LST5 SA1 L.TEDT
  4851. SA4 F.TEDT
  4852. SB3 X1
  4853. BX5 X5-X5
  4854. SA2 X4
  4855. SB4 X4
  4856. SA3 C
  4857. ZR X1,LST8 IF EDIT TABLE EMPTY
  4858. ZR X3,LST8 IF NO COMPILE FILE
  4859. SB6 B1+B1
  4860. SB2 -B6
  4861. LST6 BX6 X2 STORE DECK NAME
  4862. SA1 A2+B1 CHECK DECK TYPE
  4863. SA3 X1
  4864. BX7 X1
  4865. SB7 X3-OCRT
  4866. SA6 B4+X5
  4867. SA7 A6+B1
  4868. SX5 X5+B6
  4869. NZ B7,LST7 IF NOT COMMON DECK
  4870. SX5 X5+B2
  4871. LST7 SB3 B3-B6
  4872. SA2 A2+B6
  4873. NZ B3,LST6 IF NOT END OF EDIT TABLE
  4874.  
  4875. * LIST DECKS ON COMPILE FILE.
  4876.  
  4877. LST8 SX0 =C*DECKS WRITTEN ON COMPILE FILE.*
  4878. RJ LTB LIST TABLE
  4879. PRINT (=C* *)
  4880.  
  4881. * LIST STORAGE USED AND LINE COUNT.
  4882.  
  4883. SA1 FTAB+FTABL ROUND UP STORAGE USED
  4884. SX7 MTBS+300 MINIMUM CORE REQUIRED
  4885. IX3 X1-X7
  4886. PL X3,LST9 IF CURRENT USED MORE THAN MINIMUM
  4887. SX1 X7
  4888. LST9 SA2 =1AB
  4889. MX0 -3
  4890. SB3 1R0-1R
  4891. SB2 B0
  4892. SX1 X1+77B ROUND UP FL USED
  4893. AX1 6
  4894. LX1 6
  4895. LST10 BX7 -X0*X1 CONVERT TO OCTAL DISPLAY
  4896. LX2 -6
  4897. SB2 B2+6
  4898. SX3 X7+B3
  4899. AX1 3
  4900. IX2 X2+X3
  4901. NZ X1,LST10 IF NOT FINISHED CONVERTING
  4902. LX6 X2,B2
  4903. SA6 LSTA+1
  4904. SA1 NC LINE COUNT
  4905. SA2 A1+B1
  4906. IX1 X1+X2
  4907. RJ CDD CONVERT TO DECIMAL DISPLAY
  4908. SA6 LSTB
  4909. PRINT LSTA
  4910. EQ LSTX RETURN
  4911.  
  4912. LSTA DATA 10H
  4913. DATA 10H
  4914. DATA H* STORAGE USED.*
  4915. LSTB DATA 10H
  4916. DATA C* LINES WRITTEN ON COMPILE FILE.*
  4917. LTB SPACE 4,20
  4918. ** LTB - LIST TABLE.
  4919. *
  4920. * LIST SPECIFIED TABLE ON OUTPUT FILE.
  4921. *
  4922. * ENTRY (X0) = MESSAGE ADDRESS.
  4923. * (X4) = TABLE ADDRESS.
  4924. * (X5) = LENGTH OF TABLE.
  4925. *
  4926. * USES X - 0, 1, 2, 3, 4, 6, 7.
  4927. * A - ALL.
  4928. * B - 2, 3, 4, 5, 6.
  4929. *
  4930. * CALLS SFN, WOF.
  4931.  
  4932.  
  4933. LTB SUBR ENTRY/EXIT
  4934. SA1 LC CHECK LINE COUNT
  4935. SA0 X4 (A0) = TABLE ADDRESS
  4936. SA2 A1+B1
  4937. SX6 X1+4
  4938. IX7 X6-X2
  4939. PL X7,LTB1 IF NOT ROOM FOR FIRST LINE OF TABLE
  4940. PRINT (=C* *)
  4941. SA1 LC
  4942. BX6 X1
  4943. LTB1 SA6 A1 UPDATE LINE COUNT
  4944. MX3 -12 COPY MESSAGE TO BUFFER
  4945. SA2 X0
  4946. LX6 X2
  4947. SB2 BUF+1
  4948. LTB2 SA6 B2
  4949. BX7 -X3*X2
  4950. SB2 B2+B1
  4951. SA2 A2+B1
  4952. LX6 X2
  4953. NZ X7,LTB2 IF NOT END OF MESSAGE
  4954. PRINT BUF
  4955. SA1 =1H CLEAR FIRST WORD OF BUFFER
  4956. BX6 X1
  4957. MX0 42
  4958. SA6 BUF
  4959. PRINT (=C* *)
  4960. NZ X5,LTB3 IF TABLE NOT EMPTY
  4961. PRINT (=C+ * NONE * +)
  4962. EQ LTBX RETURN
  4963.  
  4964. * LIST SPECIFIED TABLE.
  4965.  
  4966. LTB3 SA1 LTBA SET ENTRY COUNT
  4967. SB2 X1-1
  4968. AX4 X5,B2 COMPUTE NUMBER OF ROWS
  4969. SX3 X4+11
  4970. PX6 X3
  4971. SA2 =12.
  4972. FX4 X6/X2
  4973. UX3 B2,X4
  4974. BX6 X6-X6 CLEAR ENTRY INDEX
  4975. LX0 X3,B2
  4976. PX2 X0 COMPUTE ENTRY INCREMENT (ROWS*ENTRY)
  4977. PX7 X1
  4978. SA6 A1+B1
  4979. DX3 X7*X2
  4980. UX6 X3
  4981. SA6 A6+B1
  4982. LTB4 SX0 X0-1 DECREMENT ROW COUNT
  4983. SA1 LTBA+1 SET ENTRY INDEX
  4984. MI X0,LTBX IF ALL ROWS LISTED - RETURN
  4985. SA2 A1-B1 ADVANCE TABLE
  4986. SA3 A1+B1 SET ENTRY INCREMENT
  4987. IX6 X1+X2
  4988. SB3 X1
  4989. SB6 X3
  4990. MX4 42
  4991. SA6 A1
  4992. SB4 X5
  4993. SB5 B0+
  4994. LTB5 SA1 B3+A0 TABLE ENTRY
  4995. BX1 X4*X1
  4996. RJ SFN SPACE FILL NAME
  4997. SA1 A1 TABLE ENTRY
  4998. LX1 59-16 CHECK YANK BIT
  4999. PL X1,LTB6 IF NOT YANKED
  5000. SA2 LTBB ADD()
  5001. IX6 X6+X2
  5002. LTB6 LX6 -6 STORE NAME
  5003. SA6 BUF+1+B5
  5004. SB5 B5+B1
  5005. SB3 B3+B6
  5006. LT B3,B4,LTB5 IF NOT AT END OF LINE
  5007. BX6 X6-X6
  5008. SA6 A6+B1
  5009. PRINT BUF
  5010. MX4 42
  5011. EQ LTB4 LOOP
  5012.  
  5013. LTBA CON 2 WORDS/ENTRY
  5014. CON 0 TEMPORARY
  5015. CON 0 TEMPORARY
  5016. LTBB CON 10H ) (-1H
  5017. LUM SPACE 4,15
  5018. ** LUM - LIST UNPROCESSED MODIFICATIONS.
  5019. *
  5020. * ENTRY (X5) = MODIFICATION TABLE ADDRESS.
  5021. *
  5022. * USES X - ALL.
  5023. * A - 1, 2, 3, 4, 5, 6, 7.
  5024. * B - 2, 3.
  5025. *
  5026. * CALLS LER, PML, SFN, UPN, WOF.
  5027.  
  5028.  
  5029. LUM SUBR ENTRY/EXIT
  5030. SA1 =9L *ERROR*
  5031. SB3 CHAR
  5032. RJ UPN UNPACK NAME
  5033. LUM1 SB3 X5
  5034. ZR B3,LUMX IF END OF MODIFICATIONS - RETURN
  5035. SA5 B3
  5036. SA1 A5+B1
  5037. LX6 X5,B1
  5038. MI X1,LUM2 IF ERROR FLAG SET
  5039. MI X6,LUM2 IF DELETE
  5040. SA2 A1+B1 CHECK TEXT STATUS
  5041. AX2 24
  5042. SX7 X2
  5043. ZR X7,LUM1 IF TEXT PROCESSED
  5044.  
  5045. * AN ERROR OCCURRED ON MODIFICATION LINE.
  5046.  
  5047. LUM2 SX6 X5 SAVE POSITION
  5048. SB2 B1+B1
  5049. SA6 LUMA
  5050. SA2 A5+B2 ENTER IDENTIFIER NAME
  5051. AX2 42
  5052. SA1 X2
  5053. MX0 42
  5054. BX1 X0*X1
  5055. RJ SFN SPACE FILL NAME
  5056. BX1 X6
  5057. SB3 CHAR+10
  5058. RJ UPN UNPACK NAME
  5059. SB2 B1+1
  5060. PL X5,LUM3 IF NOT INSERT
  5061. SA1 =7LINSERT,
  5062. EQ LUM4
  5063.  
  5064. LUM3 SA1 =7LDELETE,
  5065. LX2 X5,B2
  5066. PL X2,LUM4 IF DELETE
  5067. SA1 =8LRESTORE,
  5068. LUM4 RJ UPN UNPACK MODIFICATION TYPE
  5069. RJ PML PREPARE MODIFICATION LIMIT
  5070. SA1 A5
  5071. SA5 A5+B1 CHECK NEXT WORD
  5072. MX2 36
  5073. BX6 X1-X5
  5074. LX2 54
  5075. BX7 X2*X6
  5076. ZR X7,LUM5 IF SAME IDENTIFICATION
  5077. BX6 X2*X5
  5078. ZR X6,LUM5 IF LIMIT = 0
  5079. SX6 1R, ADD COMMA TO PREVIOUS LIMIT
  5080. SA6 B3-B1
  5081. RJ PML PREPARE MODIFICATION LIMIT
  5082. LUM5 SX0 B3-CHAR
  5083. PRINT (=C* *)
  5084. PRINT -CHAR,X0
  5085. SA5 A5 EXTRACT ERROR CODE
  5086. SB2 X5
  5087. SA1 LUMB+B2 SET ERROR
  5088. SX0 X1
  5089. RJ LER LIST ERROR
  5090. SA5 LUMA RESTORE POSITION
  5091. EQ LUM1 LOOP
  5092.  
  5093. LUMA CON 0
  5094.  
  5095. LUMB BSS 0
  5096. LOC 0
  5097. CON =C*DIRECTIVE NOT REACHED.*
  5098. CON =C*UNKNOWN MODIFIER.*
  5099. CON =C*OVERLAPPING MODIFICATION.*
  5100. CON =C*FIRST SOURCE LINE IS AFTER SECOND SOURCE LINE.*
  5101. LOC *O
  5102. PML SPACE 4,15
  5103. ** PML - PREPARE MODIFICATION LIMIT.
  5104. *
  5105. * ENTRY (X5) = MODIFICATION LIMIT WORD.
  5106. * (A6) = NEXT BUFFER ADDRESS.
  5107. *
  5108. * USES X - 0, 1, 2, 3, 4, 5, 6.
  5109. * A - 1, 6, 7.
  5110. * B - 2, 3, 5.
  5111. *
  5112. * CALLS CDD, UPN.
  5113.  
  5114.  
  5115. PML SUBR ENTRY/EXIT
  5116. AX5 18 SET LINE NUMBER
  5117. SX3 X5
  5118. AX5 18
  5119. SA1 X5 SET MODIFIER NAME
  5120. MX0 42
  5121. BX1 X0*X1
  5122. RJ UPN UNPACK NAME
  5123. SX6 1R. ADD PERIOD
  5124. SA6 B3
  5125. SB6 B3+B1
  5126. SX1 X3 CONVERT NUMBER
  5127. RJ CDD CONVERT TO DECIMAL DISPLAY
  5128. SB3 B6
  5129. BX1 X4 LEFT JUSTIFIED NUMBER
  5130. RJ UPN UNPACK NUMNER
  5131. EQ PMLX RETURN
  5132. BUFFERS TITLE COMMON DECKS AND BUFFERS.
  5133. ** PROGRAM LIBRARY DIRECTIVE PROCESSOR TABLE.
  5134.  
  5135.  
  5136. HERE
  5137. DATA 0 END OF TABLE
  5138. SPACE 4
  5139. *CALL COMCDXB
  5140. *CALL COMCCDD
  5141. *CALL COMCSFN
  5142. *CALL COMCMVE
  5143. *CALL COMCRDA
  5144. *CALL COMCRDC
  5145. *CALL COMCRDS
  5146. *CALL COMCRDW
  5147. *CALL COMCWTA
  5148. *CALL COMCWTC
  5149. *CALL COMCWTS
  5150. *CALL COMCWTW
  5151. *CALL COMCCIO
  5152. *CALL COMCSYS
  5153. SPACE 4
  5154. ** BUFFERS.
  5155. BUFFERS SPACE 4
  5156. USE BUFFERS
  5157. BLOCKS SPACE 4,10
  5158. ** BLOCK STORAGE.
  5159. TITLE SPACE 4,6
  5160. ** TITLE LINE.
  5161.  
  5162.  
  5163. TITL DATA 20H MODIFY - VER 1.2
  5164. DATE CON 1H
  5165. TIME CON 1H
  5166. CON 4APAGE
  5167. PAGE CON 1H
  5168. TITLL EQU *-TITL
  5169.  
  5170. ** TERMINAL TITLE LINE.
  5171.  
  5172. TERL DATA 50H MODIFY - VER 1.2
  5173. TERDT CON 1H
  5174. TERTM CON 1H
  5175. TERLL EQU *-TERL
  5176. SPACE 4,6
  5177. ** ALTERNATE TITLE.
  5178.  
  5179.  
  5180. ALT DATA 60HDECK STATUS AND MODIFICATIONS.
  5181.  
  5182. * *MODIFY* INPUT SUB-HEADER.
  5183.  
  5184. TLT DATA 60HMODIFY INPUT.
  5185. SUB SPACE 4,6
  5186. ** SUB-TITLE LINE.
  5187.  
  5188.  
  5189. SBTL DATA 30H
  5190. CON 0
  5191. CON 2L
  5192. SBTLL EQU *-SBTL
  5193. IDENT SPACE 4,6
  5194. ** IDENT TABLE.
  5195.  
  5196.  
  5197. TIDT VFD 12/7700B,12/TIDTL-1,36/0
  5198. BSSZ 16B
  5199. TIDTL EQU *-TIDT
  5200. SPACE 4,6
  5201. ** COMPRESSED COMPILE FILE HEADER.
  5202.  
  5203.  
  5204. CIDT VFD 12/7700B,12/TIDTL-1,12/0000B,24/0
  5205. OPL SPACE 4,6
  5206. ** OPL FILE NAME TABLE.
  5207.  
  5208.  
  5209. TOFN CON 0 INDEX
  5210. BSS 50
  5211. TOFNL EQU *-TOFN
  5212. CDAC SPACE 4,10
  5213. ** PROGRAM LIBRARY PROCESSING BUFFERS.
  5214. *
  5215. * THE ORDER OF THE FOLLOWING MUST
  5216. * BE MAINTAINED.
  5217.  
  5218.  
  5219. CDAC CON 1S59 LINE ACTIVITY
  5220. CDWC CON 0 WORD COUNT OF COMPRESSED LINE
  5221. CDID CON 1 CARD ID
  5222. CDTX BSS MXCCL TEXT OF COMPRESSED LINE
  5223. CVTX BSS MXCCL CONVERSION BUFFER
  5224.  
  5225. NMHB CON 1 NUMBER OF MODIFICATION HISTORY BYTES
  5226. TMHB CON 1S16 MODIFICATION HISTORY BYTE TABLE
  5227. BSS 199
  5228. CDCT SPACE 4,10
  5229. ** CHARACTER STRING BUFFER.
  5230.  
  5231.  
  5232. CDCT DATA 1 LINE COUNT-(MUST PROCEED CHSP)
  5233. CHSP BSS 0 SPACING FOR LIST
  5234. DUP 10+IWMAX+26,1
  5235. CON 1R
  5236. CHAR EQU CHSP+10
  5237. USBB EQU CHAR STRING BUFFER
  5238. BUFFERS SPACE 4,10
  5239. ** BUFFER ALLOCATION.
  5240.  
  5241.  
  5242. BUF BSS 0 SCRATCH BUFFER
  5243. PBUF EQU BUF+BUFL
  5244. OBUF EQU PBUF+PBUFL
  5245. CBUF EQU OBUF+OBUFL
  5246. SBUF EQU CBUF+CBUFL
  5247. MBUF EQU SBUF+SBUFL
  5248. NBUF EQU MBUF+MBUFL
  5249. TBUF EQU NBUF+NBUFL
  5250. MTBS EQU TBUF+TBUFL
  5251. RFL= EQU MTBS+MTBSL+4
  5252.  
  5253.  
  5254. ERRNG PBUF-USBB-81 STRING BUFFER OVERFLOWS CODE
  5255. IDENT SPACE 4
  5256. IDENT TERMINATE BLOCK
  5257. QUAL DIRECT
  5258. PDC TITLE DIRECTIVE LINE PROCESSING.
  5259. ** DIRECTIVE LINE PROCESSORS WILL BE OVERLAID AFTER COMPLETION.
  5260. DATA SPACE 4
  5261. ** DATA STORAGE.
  5262.  
  5263.  
  5264. ORG PBUF
  5265. CDLS CON 0 LINE LIST FLAGS
  5266. INSF CON 0 INSERT FLAG
  5267. AIDT CON 0 ASSUMED IDENTIFIER NUMBER
  5268. LCAC CON 0 ADDRESS+1 OF LAST CHARACTER ON *READS*
  5269.  
  5270. * THE ORDER OF THE FOLLOWING MUST BE MAINTAINED.
  5271.  
  5272. MDTI CON 0 MODIFICATION TABLE INDEX
  5273. IDT1 CON 0 FIRST LIMIT IDENTIFICATION
  5274. CON 0
  5275. IDT2 CON 0 SECOND LIMIT IDENTIFICATION
  5276. CON 0
  5277. MDSA CON 0 MODIFICATION SET NAME ADDRESS
  5278. PDC SPACE 4,10
  5279. *** INPUT RECORD COMMENTS.
  5280. *
  5281. * THE FOLLOWING DIRECTIVE IS RECOGNIZED AS A COMMENT IN THE
  5282. * MODIFY INPUT STREAM.
  5283. *
  5284. * / CCC-CCC
  5285. PDC SPACE 4,10
  5286. ** PDC - PROCESS DIRECTIVE LINES.
  5287.  
  5288.  
  5289. PDC10 RJ IPC INSERT PREFIX CHARACTER
  5290.  
  5291. PDC SUBR ENTRY/EXIT
  5292. SA1 ZM CHECK FOR *Z* MODE ARGUMENT
  5293. NZ X1,PDC0 IF *Z* ARGUMENT SELECTED
  5294. SA1 I
  5295. ZR X1,PDC9 IF NO INPUT FILE
  5296. READ I
  5297. PDC0 BSS 0
  5298. RJ RDD READ FIRST DIRECTIVE
  5299. NZ X1,PDC9 IF EOR
  5300. EQ PDC2
  5301.  
  5302. * PROCESS NEXT DIRECTIVE.
  5303.  
  5304. PDC1 RJ RDD READ DIRECTIVE
  5305. NZ X1,PDC8 IF EOR
  5306. PDC2 CARD COPY
  5307. RJ CRD CONDITIONALLY READ DIRECTORY
  5308. PDC3 SA1 PDCB INCREMENT DIRECTIVE COUNT
  5309. SX7 X1+B1
  5310. SA7 A1
  5311. CARD COPYPL
  5312. CARD CREATE
  5313. CARD CSET
  5314. CARD DECK
  5315. CARD DEFINE
  5316. CARD EDIT
  5317. CARD IDENT
  5318. CARD INWIDTH
  5319. CARD MOVE
  5320. CARD NOSEQ
  5321. CARD OPLFILE
  5322. CARD PREFIX
  5323. CARD PREFIXC
  5324. CARD PURDECK
  5325. CARD SEQ
  5326. CARD SORSEQ
  5327. CARD UNYANK
  5328. CARD UPDATE
  5329. CARD WIDTH
  5330. CARD YANK
  5331. CARD IGNORE
  5332. RMT
  5333. VFD 42/1L/,18/PDC6 LIST COMMENT LINE
  5334. RMT
  5335. SX6 1S"LO.T"
  5336. SA6 CDLS
  5337. CARD D,DELETE
  5338. CARD DELETE
  5339. CARD I,INSERT
  5340. CARD INSERT
  5341. CARD MODNAME
  5342. CARD RESTORE
  5343. SA2 INSF
  5344. NZ X2,PDC4 IF INSERTING
  5345. NZ X4,ERR1 IF NOT NULL DIRECTIVE
  5346. SA1 PDCB DECREMENT DIRECTIVE COUNT
  5347. SX7 X1-1
  5348. SA7 A1
  5349. EQ PDC6.1 CONTINUE
  5350.  
  5351. PDC4 RJ CCD COMPRESS LINE
  5352. RJ WTF WRITE TEXT FILE
  5353. SA1 F.TMOD INCREMENT DIRECTIVE COUNT
  5354. SA2 L.TMOD
  5355. SX0 B1+
  5356. IX3 X1+X2
  5357. LX0 24
  5358. SA1 X3-1
  5359. IX6 X1+X0
  5360. SA6 A1
  5361.  
  5362. * DIRECTIVE PROCESSORS RETURN HERE TO LIST LINE.
  5363.  
  5364. PDC5 SX6 1 SET *CREATE*, *COPYPL* NOT ALLOWED
  5365. SA6 PDCA
  5366. PDC6 RJ LDC LIST LINE
  5367. PDC6.1 SA1 DL
  5368. MI X1,PDC1 IF NO DIRECTORY
  5369.  
  5370. * DIRECTIVE PROCESSORS RETURN HERE TO READ NEXT LINE.
  5371.  
  5372. PDC7 RJ RDD READ NEXT DIRECTIVE
  5373. ZR X1,PDC3 IF NOT EOR/EOF/EOI
  5374. PDC8 SA1 DE CHECK FOR DIRECTIVE ERRORS
  5375. SA2 DB
  5376. NZ X1,PDC8.1 IF ERRORS
  5377. SA1 PDCB GET DIRECTIVE COUNT
  5378. ZR X1,PDC9 IF NO DIRECTIVES PROCESSED
  5379. EQ PDC10 CONTINUE
  5380.  
  5381. PDC8.1 NZ X2,PDC10 IF DEBUG SELECTED
  5382. BX6 X6-X6 CLEAR EDIT TABLE
  5383. SA6 L.TEDT
  5384. RJ LST LIST STATISTICS
  5385. SA0 =C* DIRECTIVE ERRORS.*
  5386. EQ ABT
  5387.  
  5388. * PROCESS EMPTY INPUT FILE.
  5389.  
  5390. PDC9 SA1 FM
  5391. SA0 =C* NO DIRECTIVES.*
  5392. ZR X1,ABT IF NOT *F* MODE
  5393. SA5 P+7 READ *P* FILE DIRECTORY
  5394. RJ RDR READ DIRECTORY
  5395. NZ X0,ABT IF ERRORS IN OPL
  5396. SA1 L.TDKN SET ORIGINAL DECK TABLE LENGTH
  5397. BX6 X1
  5398. SA6 DL
  5399. EQ PDC10 COMPLETE PROCESSING
  5400.  
  5401. PDCA CON 0 *CREATE*, *COPY* ALLOWED FLAG
  5402. PDCB CON 0 DIRECTIVE COUNT
  5403. ERR SPACE 4
  5404. ** ERR - DIRECTIVE ERROR PROCESSORS.
  5405.  
  5406.  
  5407. ERR SA6 ERRM SET ERROR MESSAGE ADDRESS
  5408. EQ PDC6 EXIT
  5409.  
  5410. ERR1 SX6 =C*INCORRECT DIRECTIVE.*
  5411. EQ ERR
  5412.  
  5413. ERR2 SX6 =C*FORMAT ERROR IN DIRECTIVE.*
  5414. EQ ERR
  5415.  
  5416. ERR3 SX6 =C*IDENT NAME PREVIOUSLY REFERENCED.*
  5417. EQ ERR
  5418.  
  5419. ERR4 SX6 =C* INITIALIZATION DIRECTIVE OUT OF ORDER.*
  5420. EQ ERR PUT OUT ERROR MESSAGE AND CONTINUE
  5421. SPACE 4,10
  5422. *** INITIALIZATION DIRECTIVES.
  5423. *
  5424. * THE FOLLOWING DIRECTIVES MUST BE THE FIRST DIRECTIVES
  5425. * OTHER THAN FILE MANIPULATION DIRECTIVES.
  5426. * DECKS INTRODUCED BY THESE DIRECTIVES TAKE PRECEDENCE OVER
  5427. * ANY PREVIOUS DECKS BY THE SAME NAME.
  5428. * THESE PREVIOUS DECKS ARE DENOTED IN THE DIRECTORY LISTS
  5429. * BY BEING ENCLOSED IN PARENS.
  5430. COPY SPACE 4,10
  5431. *** COPY FNAME,RNAME
  5432. *
  5433. * COPY PROGRAM LIBRARY *FNAME* TO OPL FILE FOR RANDOM ACCESS.
  5434. * *RNAME* IF PRESENT, IS THE NAME OF THE LAST RECORD
  5435. * TO BE COPIED.
  5436.  
  5437.  
  5438. COPY SA1 P
  5439. SA2 CPYA
  5440. SX5 P+7 SET PROGRAM LIBRARY NAME
  5441. ZR X1,ERR1 IF NO PROGRAM LIBRARY NAME
  5442. NZ X2,CPY1 IF NOT FIRST ENTRY
  5443. EVICT A1,R
  5444.  
  5445. CPY1 SA1 PDCA
  5446. NZ X1,ERR4 IF *COPY* NOT ALLOWED
  5447. RECALL M
  5448. SA1 X5 SET FILE NAME
  5449. BX6 X1
  5450. SX7 X5 SET FILE NAME ADDRESS
  5451. SA6 X2
  5452. SA7 CPYA
  5453. RJ SAF SET ALTERNATE FILE
  5454. SA1 CH CHECK NEXT CHARACTER
  5455. SX2 B1+B1 SET BINARY FILE
  5456. IX7 X6+X2
  5457. SA3 X1
  5458. BX6 X6-X6
  5459. SA7 A
  5460. SB2 X3-1R,
  5461. NZ B2,CPY2 IF NO COMMA
  5462. SX7 X1+B1 SKIP COMMA
  5463. SA7 A1
  5464. RJ ASN ASSEMBLE RECORD NAME
  5465. CPY2 SA6 CPYB SET RECORD NAME
  5466. READ A
  5467. READW A,BUF,BUFL READ FIRST PART
  5468. SX6 =C*COPY FILE EMPTY.*
  5469. MI X1,ERR IF EOR/EOF/EOI
  5470.  
  5471. * READ REMAINDER OF RECORD(S).
  5472.  
  5473. CPY3 BX6 X1 SAVE WORD COUNT
  5474. SA6 T1
  5475. SX1 B6 LWA+1 OF DATA READ
  5476. SX2 BUF SET RECORD TYPE
  5477. RJ SRT SET RECORD TYPE
  5478. SB2 X6-ODRT
  5479. NZ B2,CPY5 IF NOT *OPLD*
  5480. CPY4 READW A,BUF,BUFL SKIP DIRECTORY
  5481. ZR X1,CPY4 IF NOT EOR/EOF/EOI
  5482. EQ CPY8
  5483.  
  5484. * COPY ONE RECORD.
  5485.  
  5486. CPY5 SA7 CPYC+1 ENTER DECK NAME IN MESSAGE
  5487. ADDWRD TNDK,X6 ENTER RECORD NAME
  5488. ADDWRD A0,X6-X6
  5489. SX7 A6 SET RANDOM RETURN ADDRESS
  5490. SA7 M+6
  5491. MESSAGE CPYC,1 ISSUE CONSOLE MESSAGE
  5492. SA1 T1 CHECK RECORD LENGTH
  5493. NZ X1,CPY7 IF SHORT BLOCK
  5494. CPY6 WRITEW M,BUF,BUFL WRITE RECORD
  5495. READW A,BUF,BUFL READ NEXT BLOCK
  5496. ZR X1,CPY6 IF NOT EOR/EOF/EOI
  5497. CPY7 WRITEW M,BUF,X1-BUF
  5498. WRITER X2
  5499. SA1 CPYB
  5500. ZR X1,CPY8 IF NO RECORD NAME OPTION
  5501. SA2 CPYC+1 COMPARE NAMES
  5502. BX6 X2-X1
  5503. ZR X6,CPY9 IF RECORD REACHED
  5504.  
  5505. * BEGIN NEXT RECORD.
  5506.  
  5507. CPY8 READ A BEGIN NEW READ
  5508. RECALL M
  5509. READW A,BUF,BUFL
  5510. PL X1,CPY3 IF NOT EOF
  5511. SA2 CPYB
  5512. ZR X2,CPY9 IF NO RECORD NAME OPTION
  5513. SA3 CPYC+1
  5514. BX7 X2-X3
  5515. ZR X7,CPY9 IF RECORD REACHED
  5516. SX6 =C*RECORD NOT FOUND.*
  5517. SA6 ERRM
  5518. CPY9 RJ LDC LIST DIRECTIVE LINE
  5519. SA2 =10H
  5520. LISTOP C,CPY10 IF NO LIST FOR COPY LINE
  5521. BX6 X2
  5522. SA4 F.TNDK LIST RECORDS COPIED
  5523. SA5 L.TNDK
  5524. SA6 BUF
  5525. SX0 =C*RECORDS COPIED.*
  5526. RJ LTB LIST TABLE
  5527. PRINT (=C* *)
  5528. CPY10 SA0 M WRITE DIRECTORY
  5529. RJ WDR WRITE DIRECTORY
  5530. SA5 CPYA ADD DECKS
  5531. RJ ADK ADD DECK
  5532. MESSAGE CCDR,1
  5533. SA1 L.TDKN SET ORIGINAL DECK TABLE LENGTH
  5534. BX6 X1
  5535. SA6 DL
  5536. EQ PDC7 EXIT TO READ NEXT LINE
  5537.  
  5538. CPYA CON 0 FILE NAME ADDRESS
  5539. CPYB CON 0 RECORD NAME IF REQUESTED
  5540. CPYC CON 10H COPY /
  5541. CON 0
  5542. COPYPL SPACE 4,10
  5543. *** COPYPL FNAME,DNAME
  5544. *
  5545. * COPY PROGRAM LIBRARY *FNAME* TO AN INTERNAL FILE FOR RANDOM
  5546. * ACCESS.
  5547. * *RNAME* IF PRESENT, IS THE NAME OF THE LAST RECORD
  5548. * TO BE COPIED.
  5549.  
  5550.  
  5551. COPYPL SX5 A+7 COPY TO SCRATCH FILE
  5552. EQ CPY1
  5553. CREATE SPACE 4,10
  5554. *** CREATE FNAME
  5555. *
  5556. * CREATE DECK(S) FROM SOURCE FILE *FNAME*.
  5557. * DECKS ARE CREATED TO A SCRATCH FILE FOR MODIFICATION USE.
  5558. * IF A DECK DUPLICATES A DECK ON THE PROGRAM LIBRARY, THE
  5559. * NEW DECK IS USED FOR MODIFICATION.
  5560.  
  5561.  
  5562. CREATE SA1 PDCA
  5563. NZ X1,ERR4 IF *CREATE* NOT ALLOWED
  5564. SA1 CVT DIS-ALLOW CREATE WITH CONVERSION
  5565. SA0 =C*CREATE NOT ALLOWED WITH CONVERSION.*
  5566. NZ X1,ABT IF CONVERSION BEING MADE
  5567. RJ SAF SET ALTERNATE FILE
  5568. SA1 CH CHECK NEXT CHARACTER
  5569. SA3 X1
  5570. SB2 X3-1R CHECK FOR BLANK TERMINATOR
  5571. NZ B2,ERR1 IF NOT TERMINATED
  5572. SA6 A SET CREATION FILE NAME
  5573. READ A
  5574. READW A,T1,1
  5575. SA0 =C*CREATION FILE EMPTY.*
  5576. NZ X1,ABT IF EOR/EOF/EOI
  5577. RJ LDC LIST DIRECTIVE LINE
  5578. SB6 TIDTL-1 CLEAR *77* TABLE
  5579. SX7 B0+
  5580. CRT0 SA7 TIDT+B6
  5581. SB6 B6-1
  5582. GT B6,B1,CRT0 IF NOT COMPLETE
  5583. SA1 A+7 USE SCRATCH FILE
  5584. SA2 DATE SET CREATION DATE
  5585. BX6 X1
  5586. LX7 X2
  5587. SA6 M
  5588. BX6 X6-X6
  5589. SA6 N CLEAR NEW PROGRAM LIBRARY
  5590. SA7 TIDT+2
  5591. RECALL A
  5592. SA1 X2+B1 SET OUT = FIRST
  5593. SX6 X1
  5594. SA6 A1+2
  5595. SA1 IW
  5596. READS A,CHAR,X1
  5597.  
  5598. * BEGIN NEW DECK.
  5599.  
  5600. CRT1 SX6 CHAR SET CHARACTER POINTER
  5601. SA6 CH
  5602. BX7 X7-X7
  5603. SA7 CD CLEAR COMMON DECK
  5604. SA7 CRTF CLEAR CHARACTER SET FOUND
  5605. SX7 .DIS NOMINAL CHARACTER SET IS DISPLAY
  5606. SA7 CSC
  5607. RJ ASN ASSEMBLE NAME
  5608. SA0 =C*FORMAT ERROR IN DIRECTIVE.*
  5609. ZR X6,ABT IF NAME BLANK OR TOO LONG
  5610. SA6 DN SET DECK NAME
  5611. SA6 CRTA+1 INSERT NAME IN MESSAGE
  5612. MESSAGE A6-B1,1
  5613.  
  5614. CRT1.1 SA1 IW LOOP LOOKING FOR COMMON/ASCII/DISPLAY
  5615. READK A,CHAR,X1 READ NEXT LINE
  5616. SX6 B6 LAST CHARACTER ADDRESS
  5617. SA6 LCAC
  5618. SX6 CHAR SET CHARACTER POINTER
  5619. SA6 CH
  5620. RJ ASN ASSEMBLE NAME
  5621. ZR X6,CRT2 IF BLANK NAME OR TOO LONG
  5622. SA2 CD
  5623. NZ X2,CRT1.2 IF COMMON DECK HEADER CARD ALREADY FOUND
  5624.  
  5625. SA1 =0LCOMMON
  5626. BX2 X6-X1
  5627. SX7 B1
  5628. NZ X2,CRT1.2 IF NOT A *COMMON* DECK
  5629. SA7 CD SET COMMON DECK
  5630. EQ CRT1.1 READ NEXT LINE
  5631. CRT1.2 SA2 CRTF
  5632. NZ X2,CRT2 IF CHARACTER SET HEADER CARD ALREADY FOUND
  5633. SA6 CSR INDICATE CHARACTER SET REQUEST
  5634. RJ RCS REQUEST CHARACTER SET
  5635. NZ X6,CRT2 IF THIS LINE NOT CHARACTER SET HEADER
  5636. SX7 B1
  5637. SA7 CRTF FIRST PASS CHARACTER SET HEADER
  5638. SA1 CD
  5639. ZR X1,CRT1.1 IF COMMON DECK HEADER NOT FOUND YET
  5640. SA1 IW
  5641. READK A,CHAR,X1 READ TEXT FOLLOWING HEADER CARDS
  5642. SX6 B6+ SET LAST CHARACTER ADDRESS
  5643. SA6 LCAC
  5644. CRT2 RJ WMT WRITE MODIFIER TABLE
  5645.  
  5646. * COPY SOURCE TEXT.
  5647.  
  5648. CRT3 RJ CCD COMPRESS LINE
  5649. RJ WNF WRITE NEW PROGRAM LIBRARY
  5650. SA1 CDID ADVANCE LINE NUMBER
  5651. SX6 X1+B1
  5652. SA6 A1
  5653. SA1 IW
  5654. READK A,CHAR,X1 READ NEXT LINE
  5655. SX6 B6+ SET LAST CHARACTER ADDRESS
  5656. SA6 LCAC
  5657. ZR X1,CRT3 IF NO EOR/EOF/EOI
  5658.  
  5659. * COMPLETE CURRENT DECK.
  5660.  
  5661. WRITER M,R END CURRENT DECK
  5662. SA1 RI+1 ENTER RANDOM INDEX
  5663. SX2 N+7
  5664. LX2 36
  5665. ADDWRD TNDK,X2+X1
  5666. SX6 B1 RESET LINE COUNTER
  5667. SA6 CDID
  5668. READ A BEGIN NEW RECORD
  5669. SA1 IW
  5670. READS A,CHAR,X1 READ NEXT LINE
  5671. ZR X1,CRT1 IF NOT EOR/EOF/EOI
  5672.  
  5673. * TERMINATE CREATE.
  5674.  
  5675. LISTOP C,CRT4 IF NO LIST FOR DIRECTIVE
  5676. SX0 =C*DECKS CREATED.*
  5677. SA4 F.TNDK LIST DECKS
  5678. SA5 L.TNDK
  5679. SA1 =1H
  5680. BX6 X1
  5681. SA6 BUF
  5682. RJ LTB LIST TABLE
  5683. PRINT (=C* *)
  5684. CRT4 SA1 N+7 RESTORE NEW PROGRAM LIBRARY FILE
  5685. SX5 A+7 ADD DECKS
  5686. BX7 X1
  5687. SA7 N
  5688. BX6 X6-X6 CLEAR SCRATCH FILE NAME
  5689. SA6 M
  5690. RJ ADK ADD DECK
  5691. MESSAGE CCDR,1
  5692. EQ PDC7 EXIT TO READ NEXT LINE
  5693.  
  5694. CRTA CON 10H CREATE /
  5695. CON 0
  5696. CRTF CON 0 CHARACTER SET REQUEST FOUND FOR THIS DECK
  5697. CSET SPACE 4,10
  5698. *** CSET DNAME
  5699. *
  5700. * DECLARE THE INITIAL CHARACTER SET FOR READING MODSETS.
  5701. * IF OMITTED, *CSET* DEFAULTS TO *ASCII*.
  5702.  
  5703.  
  5704. CSET RJ ASN ASSEMBLE NAME OF *CSET*
  5705. MX3 42
  5706. SA1 TCST-1 FWA-1 OF CHARACTER SET TABLE
  5707. CSET1 SA1 A1+B1
  5708. ZR X1,CSET2 IF UNKNOWN CHARACTER SET
  5709. BX4 X3*X1
  5710. BX7 X6-X4
  5711. NZ X7,CSET1 IF NO MATCH
  5712. BX7 -X3*X1
  5713. SA7 CSC
  5714. EQ PDC6 RETURN
  5715.  
  5716. CSET2 SX6 =C*CSET - UNKNOWN CHARACTER SET.*
  5717. EQ ERR EXIT WITH ERROR MESSAGE
  5718. OPLFILE SPACE 4,10
  5719. *** OPLFILE FNAME,FNAME,...,FNAME
  5720. *
  5721. * DECLARE FILE(S) *FNAME* TO BE AN ADDITIONAL PROGRAM LIBRARY
  5722. * FILE(S).
  5723.  
  5724.  
  5725. OPLFILE SA1 PDCA
  5726. NZ X1,ERR4 IF *OPLFILE* NOT ALLOWED
  5727. RJ SAF SET ALTERNATE FILE
  5728. SA1 TOFN
  5729. SB2 X1-TOFNL+1
  5730. MI B2,OFN1 IF ROOM IN FILE NAME TABLE
  5731. SX6 =C*TOO MANY OPL FILES.*
  5732. EQ ERR
  5733.  
  5734. OFN1 SB2 X1+B1 ADD FILE NAME
  5735. SX3 B1+B1
  5736. BX6 X6+X3
  5737. SX7 B2 ADVANCE INDEX
  5738. SA6 A1+B2
  5739. SA7 A1+
  5740. SA5 A1+B2 READ DIRECTORY
  5741. RJ RDR READ DIRECTORY
  5742. SX6 A0+
  5743. NZ X0,ERR IF ERRORS IN OPL
  5744. SA1 CH CHECK NEXT CHARACTER
  5745. SA2 X1
  5746. SX6 X1+B1
  5747. SB2 X2-1R,
  5748. SA6 A1+
  5749. ZR B2,OPLFILE IF COMMA LOOP
  5750. EQ PDC6 EXIT
  5751. DECK SPACE 4,10
  5752. *** MODIFICATION DIRECTIVES.
  5753. *
  5754. * MODIFICATION DIRECTIVES WHICH REFER TO ACTUAL LINES ON THE
  5755. * PROGRAM LIBRARY INCLUDE THE IDENTIFICATION OF THE LINE AT
  5756. * WHICH MODIFICATION TAKES PLACE. THE IDENTIFICATION HAS THE
  5757. * GENERAL FORM *MNAME*.*NUMBER*, WHERE *MNAME* = THE NAME OF
  5758. * THE MODIFIER, AND *NUMBER* IS THE NUMBER OF THE LINE.
  5759. * FOR ORIGINAL LINES IN THE DECK, THE LINE IDENTIFICATION MAY
  5760. * BE SHORTENED TO *NUMBER*. THE IDENTIFICATION IS REFERRED
  5761. * TO AS *C* OR *CN* IN THE DESCRIPTION OF THE DIRECTIVES.
  5762. DECK SPACE 4,10
  5763. *** DECK DNAME
  5764. *
  5765. * SET DECK NAME FOR MODIFICATION TO *DNAME*
  5766. * THIS DIRECTIVE MUST PRECEED ALL DIRECTIVES WHICH RESULT IN
  5767. * THE MODIFICATION OF A DECK.
  5768.  
  5769.  
  5770. DECK RJ ASN ASSEMBLE NAME
  5771. ZR X6,ERR2 IF NAME BLANK OR TOO LONG
  5772. SA1 IG
  5773. ZR X1,DCK2 IF NO IGNORES
  5774. SEARCH TIGD,X6
  5775. ZR X2,DCK2 IF DECK IS NOT TO BE IGNORED
  5776. SA6 DCKA+1
  5777. MESSAGE A6-B1,1
  5778. SA1 LO CHECK LIST OPTIONS
  5779. SA2 CDLS
  5780. BX6 X1*X2
  5781. ZR X6,DCK0 IF LIST OPTION OFF
  5782. PRINT (=C* IGNORE THE FOLLOWING DECK*)
  5783. PRINT (=C* *)
  5784. DCK0 RJ LDC LIST DIRECTIVE LINE
  5785. DCK1 RJ RDD READ DIRECTIVE
  5786. NZ X1,PDC8 IF EOR
  5787. CARD IDENT
  5788. CARD EDIT
  5789. CARD DECK
  5790. SX7 1S"LO.T"
  5791. SA7 CDLS
  5792. RJ LDC LIST IGNORED LINES
  5793. EQ DCK1
  5794.  
  5795. DCK2 SX1 6
  5796. SEARCH TDKN,X6+X1,777776B
  5797. NZ X2,DCK3 IF DECK FOUND
  5798. MX6 0
  5799. SA6 MDTI CLEAR CURRENT DECK NAME
  5800. SA6 INSF CLEAR INSERT FLAG
  5801. SX6 =C*UNKNOWN DECK.*
  5802. EQ ERR
  5803.  
  5804. DCK3 SX5 A2 SET DECK ADDRESS
  5805. SEARCH TDKI,X6 SEARCH FOR PREVIOUS ENTRY
  5806. NZ X2,DCK4 IF FOUND
  5807. ADDWRD A0,X1*X6 ENTER DECK TABLE
  5808. DCK4 BX6 X3 SET EDIT INDEX
  5809. SX7 X5 SET DECK NAME ADDRESS
  5810. SA6 MDTI
  5811. SA7 AIDT
  5812. BX6 X6-X6 CLEAR INSERT
  5813. SA6 INSF
  5814. EQ PDC5 EXIT
  5815.  
  5816. DCKA DATA 10H IGNORE /
  5817. DATA 0
  5818. DEFINE SPACE 4,10
  5819. *** DEFINE NAME,VALUE
  5820. *
  5821. * SET THE VALUE OF *NAME* TO *VALUE*. IF *VALUE* IS
  5822. * NOT PRESENT A VALUE OF ZERO IS ASSUMED.
  5823. *
  5824. * DEFINED NAMES ARE USED IN CONJUNCTION WITH *IF*, *ELSE*,
  5825. * *ENDIF* AND *IFCALL* DIRECTIVES.
  5826. *
  5827. * WHEN A SYMBOL IS DEFINED ON THE INPUT STREAM ( NO INSERT IN
  5828. * PROGRESS ) THE INPUT DEFINITION WILL OVERRIDE ANY COMPILE
  5829. * FILE SPECIFICATIONS FOR VALUES OF THE SPECIFIED NAME *NAME*.
  5830.  
  5831.  
  5832. DEFINE SA1 INSF CHECK FOR INSERT IN PROGRESS
  5833. NZ X1,PDC4 IF INSERT FLAG SET
  5834.  
  5835. * PROCESS DEFINE DIRECTIVE.
  5836.  
  5837. ZR X6,ERR2 IF NAME BLANK OR TOO LONG
  5838. RJ ASN ASSEMBLE NAME
  5839. SEARCH TDEF,X6 SEARCH FOR NAME
  5840. NZ X2,DEF1 IF SYMBOL ALREADY EXISTS
  5841. ADDWRD A0,X6 ADD ENTRY TO TABLE
  5842. SA2 A6+ GET ENTRY
  5843.  
  5844. * ASSEMBLE VALUE AND DEFINITION.
  5845.  
  5846. DEF1 SA5 A2
  5847. SA1 CH SKIP SEPARATOR
  5848. SX6 X1+B1
  5849. SA6 A1
  5850. RJ ASD ASSEMBLE NUMERIC VALUE
  5851. NZ B2,DEF2 IF FIELD NOT NULL
  5852. SX6 B0+
  5853. SA6 ERRM CLEAR ERROR FLAG AND USE DEFAULT VALUE
  5854. DEF2 BX3 X7
  5855. AX7 16
  5856. NZ X7,DEF3 IF VALUE TO LARGE
  5857. MX1 42
  5858. BX5 X1*X5
  5859. MX4 1 SET DEFINED ON INPUT FLAG
  5860. LX4 17-59
  5861. BX6 X4+X3 FLAG + VALUE
  5862. BX6 X5+X6 FLAG + SYMBOL + VALUE
  5863. SA6 A5 SET IN TABLE
  5864. EQ PDC6 RETURN
  5865.  
  5866. * VALUE ERROR.
  5867.  
  5868. DEF3 SX6 =C/ VALUE ERROR./
  5869. EQ ERR
  5870. DELETE SPACE 4,10
  5871. *** DELETE C
  5872. * D C
  5873. *
  5874. * DELETE DIRECTIVE *C* AND INSERT FOLLOWING TEXT.
  5875. DELETE SPACE 4,10
  5876. *** DELETE C1,C2
  5877. * D C1,C2
  5878. *
  5879. * DELETE LINES *C1* THROUGH *C2* AND INSERT FOLLOWING TEXT.
  5880.  
  5881.  
  5882. DELETE SX6 2 SET DELETE
  5883. DLT1 SA6 T1
  5884. RJ AMI ASSEMBLE FIRST DELETE IDENTIFIER
  5885. SA1 CH CHECK NEXT CHARACTER
  5886. SA6 IDT1 SET FIRST IDENTIFIER
  5887. SA7 A6+B1
  5888. SA2 X1
  5889. SB7 X2-1R
  5890. ZR B7,DLT2 IF BLANK
  5891. RJ AMI ASSEMBLE SECOND IDENTIFIER
  5892. DLT2 SA6 IDT2 SET SECOND IDENTIFIER
  5893. SA7 A6+1
  5894. SA1 T1 ENTER MODIFICATION TABLE
  5895. RJ EMT ENTER MODIFIER TABLE
  5896. SX6 1 SET INSERT FLAG
  5897. SA6 INSF
  5898. EQ PDC5 EXIT
  5899. EDIT SPACE 4,10
  5900. *** EDIT D1
  5901. * EDIT D1,D2,...DN
  5902. * EDIT D1.DN
  5903. *
  5904. * REQUEST EDITING OF DECK(S) D1 - DN.
  5905.  
  5906.  
  5907. EDIT RJ ASN ASSEMBLE NAME
  5908. SB7 B0 1 ENTRY
  5909. SA1 IG
  5910. ZR X1,EDI1 IF NO IGNORES
  5911. SEARCH TIGD,X6
  5912. NZ X2,EDI5 IF DECK IS TO BE IGNORED
  5913. EDI1 SX3 6 SEARCH FOR DECK
  5914. SEARCH TDKN,X6+X3,377776B
  5915. ZR X6,ERR2 IF BLANK NAME - FORMAT ERROR
  5916. ZR X2,EDI6 IF NOT FOUND
  5917. SA1 CH CHECK NEXT CHARACTER
  5918. SA3 X1
  5919. SB2 X3-1R.
  5920. SA5 A2+
  5921. NZ B2,EDI3 IF NOT PERIOD
  5922. SX7 X1+B1 SKIP PERIOD
  5923. SA7 A1
  5924. RJ ASN ASSEMBLE NAME
  5925. ZR X6,ERR2 IF NAME BLANK OR TOO LONG
  5926. SA1 IG
  5927. ZR X1,EDI2 IF NO IGNORES
  5928. SEARCH TIGD,X6
  5929. NZ X2,ERR2 IF DECK IS TO BE IGNORED - *D1.DN* ILLEGAL
  5930. EDI2 SX3 6 SEARCH FOR DECK
  5931. SEARCH TDKN,X6+X3,377776B
  5932. ZR X6,ERR2 IF NAME BLANK OR TOO LONG
  5933. ZR X2,EDI6 IF NOT FOUND
  5934. SB6 A5 SET NUMBER OF ENTRIES
  5935. SB7 A2-B6
  5936. SX6 =C/NAMES SEPARATED BY *.* IN WRONG ORDER./
  5937. MI B7,ERR IF FIRST NAME AFTER SECOND
  5938. EDI3 BX6 X5 CHECK DECK STATUS
  5939. LX6 59-16
  5940. MI X6,EDI4 IF IGNORE BIT SET
  5941. SEARCH TEDT,X5 SEARCH FOR PREVIOUS ENTRY
  5942. NZ X2,EDI4 IF FOUND
  5943. ADDWRD A0,X1*X5 ENTER DECK IN EDIT TABLE
  5944. SX1 A5
  5945. ADDWRD A0,X1
  5946. EDI4 SB7 B7-2
  5947. SA5 A5+2
  5948. PL B7,EDI3 IF NOT AT END OF REQUESTED DECKS
  5949.  
  5950. EDI5 SA1 CH CHECK NEXT CHARACTER
  5951. SA2 X1
  5952. SX6 X1+B1
  5953. SB2 X2-1R
  5954. ZR B2,PDC5 IF BLANK - RETURN
  5955. NE B2,B1,ERR2 IF NOT COMMA - FORMAT ERROR
  5956. SA6 A1 SKIP COMMA
  5957. EQ EDIT LOOP
  5958.  
  5959. EDI6 SA1 EDTA+1 SET NAME IN MESSAGE
  5960. MX2 30
  5961. BX1 X2*X1
  5962. LX6 30
  5963. BX3 -X2*X6
  5964. IX7 X1+X3
  5965. MX2 12
  5966. BX6 X2*X6
  5967. SA7 A1
  5968. SA6 A1+1
  5969. SX6 EDTA SET MESSAGE ADDRESS
  5970. EQ ERR
  5971.  
  5972. EDTA DATA 30HUNKNOWN DECK -
  5973. IDENT SPACE 4,10
  5974. *** IDENT MNAME
  5975. *
  5976. * BEGIN MODIFICATION SET WITH MODIFIER *MNAME*.
  5977.  
  5978.  
  5979. IDENT RJ ASN ASSEMBLE NAME
  5980. SX2 1S13 SEARCH FOR IDENTIFIER NAME
  5981. ZR X6,ERR2 IF NO NAME - FORMAT ERROR
  5982. SEARCH TNME,X6 DONT ALLOW DUPLICATE IDENT LINES
  5983. NZ X2,ERR3 IF MOD REFERENCED BEFORE IDENT LINE
  5984. ADDWRD A0,X6 ADD IDENTIFIER
  5985. ADDWRD A0,X6-X6
  5986. SA2 A6-B1
  5987. SX7 A2
  5988. SA1 A2 RESTORE NAME
  5989. SA7 MDSA
  5990. MX0 42
  5991. BX1 X0*X1
  5992. RJ SFN SPACE FILL NAME
  5993. SA1 =10H-IDENT-
  5994. BX7 X1
  5995. SA6 SBTL+2
  5996. SA7 A6-B1
  5997. BX6 X6-X6 CLEAR INSERT
  5998. SA6 INSF
  5999. LISTOP T,IDN1 IF INPUT TEXT NOT SELECTED
  6000. SX7 99999 FORCE PAGE EJECT
  6001. SA7 LC
  6002. SX6 B1+
  6003. SA6 CDCT RESTART INPUT SEQUENCING
  6004. EQ PDC5 EXIT
  6005.  
  6006. IDN1 LISTOP C,PDC5 IF DIRECTIVE LIST NOT SELECTED
  6007. PRINT (=C* *)
  6008. PRINT (=C* *)
  6009. EQ PDC5
  6010. INSERT SPACE 4,10
  6011. *** INSERT C
  6012. * I C
  6013. *
  6014. * INSERT FOLLOWING LINES AFTER *C*.
  6015.  
  6016.  
  6017. INSERT RJ AMI ASSEMBLE INSERT IDENTIFIER
  6018. SA6 IDT1 SET FIRST LIMIT
  6019. SA7 A6+B1
  6020. BX6 X6-X6
  6021. SA1 CH CHECK NEXT CHARACTER
  6022. SA2 X1
  6023. SB7 X2-1R
  6024. NZ B7,ERR2 IF NOT BLANK - FORMAT ERROR
  6025. SA6 A7+B1 CLEAR SECOND LIMIT
  6026. SA6 A6+B1
  6027. SX1 4 ENTER INSERT INTO MODIFICATION TABLE
  6028. RJ EMT ENTER MODIFIER TABLE
  6029. SX6 1 SET INSERT FLAG
  6030. SA6 INSF
  6031. EQ PDC5 EXIT
  6032. INWIDTH SPACE 4,10
  6033. *** INWIDTH N
  6034. *
  6035. * SET THE WIDTH OF THE INPUT LINES TO N.
  6036.  
  6037.  
  6038. INWIDTH RJ ASD ASSEMBLE COLUMN NUMBER
  6039. SB2 X7-IWMACS-1
  6040. MI B2,INW2 IF IN RANGE
  6041. INW1 SX6 =C*COLUMN OUT OF RANGE.*
  6042. EQ ERR
  6043.  
  6044. INW2 SA7 IW
  6045. SX6 1R CLEAR INPUT BUFFER
  6046. SB2 CHAR+X7
  6047. SB3 CHAR+IWMAX
  6048. INW3 EQ B2,B3,PDC6 IF COMPLETE
  6049. SA6 B2
  6050. SB2 B2+B1
  6051. EQ INW3 LOOP FOR REMAINDER OF BUFFER
  6052. MODNAME SPACE 4,10
  6053. *** MODNAME MNAME
  6054. *
  6055. * SET ASSUMED MODIFIER NAME TO *MNAME*.
  6056. * NOTE - IF THIS DIRECTIVE IS USED, THE DECK NAME MUST BE
  6057. * RESET BY ANOTHER -MODNAME- DIRECTIVE.
  6058.  
  6059.  
  6060. MODNAME RJ ASN ASSEMBLE NAME
  6061. ZR X6,ERR2 IF NO NAME - FORMAT ERROR
  6062. SEARCH TNME,X6 SEARCH FOR NAME
  6063. NZ X2,MNM1 IF FOUND
  6064. ADDWRD A0,X6 ADD NEW NAME
  6065. SA2 A6
  6066. MNM1 SX6 A2 SET ASSUMED IDENTIFIER ADDRESS
  6067. SA6 AIDT
  6068. EQ PDC5 EXIT
  6069. MOVE SPACE 4,10
  6070. *** MOVE D1,D2
  6071. * MOVE D1,D2,...,DN
  6072. *
  6073. * MOVE DECK D2 TO BE AFTER DECK D1.
  6074.  
  6075.  
  6076. MOVE RJ ASN ASSEMBLE NAME
  6077. ZR X6,ERR2 IF BLANK NAME - FORMAT ERROR
  6078. SX3 6 SEARCH FOR DECK
  6079. SEARCH TDKN,X6+X3,377776B
  6080. ZR X2,EDI6 IF NOT FOUND
  6081. SA1 CH CHECK NEXT CHARACTER
  6082. SX5 X3
  6083. SA3 X1
  6084. SB2 X3-1R,
  6085. NZ B2,ERR2 IF NOT COMMA
  6086. SX7 X1+B1 SKIP COMMA
  6087. SA7 A1
  6088.  
  6089. MVE1 RJ ASN ASSEMBLE NAME
  6090. ZR X6,ERR2 IF BLANK NAME - FORMAT ERROR
  6091. SX3 6 SEARCH FOR DECK
  6092. SEARCH TDKN,X6+X3,377776B
  6093. ZR X2,EDI6 IF NOT FOUND
  6094. LX5 18
  6095. BX1 X5+X3
  6096. SX5 X3+
  6097. ADDWRD TMVE,X1 ENTER IN MOVE TABLE
  6098. SA1 CH CHECK NEXT CHARACTER
  6099. SA3 X1
  6100. SX7 X1+B1
  6101. SB2 X3-1R
  6102. ZR B2,PDC5 IF BLANK - RETURN
  6103. NE B2,B1,ERR2 IF NOT COMMA - FORMAT ERROR
  6104. SA7 A1 SKIP COMMA
  6105. EQ MVE1 LOOP
  6106. NOSEQ SPACE 4,10
  6107. *** NOSEQ
  6108. *
  6109. * REQUEST NO SEQUENCE NUMBERS ON COMPILE FILE.
  6110.  
  6111.  
  6112. NOSEQ SX6 B1+ SET NO SEQUENCE NUMBERS FLAG
  6113. SA1 INSF
  6114. NZ X1,PDC4 IF INSERT FLAG
  6115. SA6 NS
  6116. EQ PDC6 EXIT
  6117. PREFIX SPACE 4,10
  6118. *** PREFIX C
  6119. *
  6120. * SET DIRECTIVE PREFIX = *C*. C MAY BE ANY 6 BIT DISPLAY
  6121. * CODE CHARACTER.
  6122.  
  6123.  
  6124. PREFIX SA1 CH
  6125. SA2 X1+
  6126. SB7 X2-1R
  6127. ZR B7,ERR2 IF CHARACTER IS BLANK
  6128. MX3 -6
  6129. BX6 -X3*X2 USE 6 BIT CHARACTER ONLY
  6130. SA6 PC
  6131. EQ PDC6 EXIT
  6132. PREFIXC SPACE 4,10
  6133. *** PREFIXC C
  6134. *
  6135. * SET COMPILE FILE DIRECTIVE PREFIX = *C*. C MAY BE ANY 6
  6136. * BIT DISPLAY CODE CHARACTER.
  6137.  
  6138.  
  6139. PREFIXC SA1 CH CHECK NEW PREFIX CHARACTER
  6140. SA2 X1
  6141. SB7 X2-1R
  6142. ZR B7,ERR2 IF CHARACTER IS BLANK
  6143. MX3 -6
  6144. BX6 -X3*X2 USE 6 BIT CHARACTER ONLY
  6145. SA6 PCC
  6146. EQ PDC6 EXIT
  6147. PURDECK SPACE 4,10
  6148. *** PURDECK D1
  6149. * PURDECK D1,D2,...,DN
  6150. * PURDECK D1.DN
  6151. *
  6152. * REQUEST PURGE OF DECK(S) D1 - DN.
  6153.  
  6154.  
  6155. PURDECK RJ ASN ASSEMBLE NAME
  6156. ZR X6,ERR2 IF NO NAME - FORMAT ERROR
  6157. SX3 6 SEARCH FOR DECK NAME
  6158. SEARCH TDKN,X6+X3,377776B
  6159. ZR X2,EDI6 IF NOT FOUND
  6160. MX1 1
  6161. ADDWRD TMVE,X1+X3 ENTER IN MOVE TABLE
  6162. SA5 A6
  6163. SA1 CH CHECK NEXT CHARACTER
  6164. SA3 X1
  6165. SX7 X1+1
  6166. SB2 X3-1R
  6167. ZR B2,PDC5 IF BLANK - RETURN
  6168. NE B2,B1,PUR1 IF NOT COMMA
  6169. SA7 A1 SKIP COMMA
  6170. EQ PURDECK LOOP
  6171.  
  6172. PUR1 SB2 X3-1R.
  6173. NZ B2,ERR2 FORMAT ERROR IF NOT PERIOD
  6174. SA7 A1
  6175. RJ ASN ASSEMBLE NAME
  6176. ZR X6,ERR2 IF NO NAME - FORMAT ERROR
  6177. SX3 6
  6178. SEARCH TDKN,X6+X3,377776B
  6179. ZR X2,EDI6 IF NOT FOUND
  6180. LX3 18
  6181. IX6 X5+X3
  6182. SA6 A5
  6183. JP PDC5
  6184. RESTORE SPACE 4,10
  6185. *** RESTORE C
  6186. *
  6187. * RESTORE DIRECTIVE *C*, AND INSERT FOLLOWING TEXT.
  6188. RESTORE SPACE 4,10
  6189. *** RESTORE C1,C2
  6190. *
  6191. * RESTORE LINES *C1* THROUGH *C2*, AND INSERT FOLLOWING TEXT.
  6192.  
  6193.  
  6194. RESTORE SX6 3 SET RESTORE
  6195. EQ DLT1 PROCESS AS DELETE
  6196. SEQ SPACE 4,10
  6197. *** SEQ.
  6198. *
  6199. * REQUEST SEQUENCE NUMBERS ON COMPILE FILE.
  6200.  
  6201.  
  6202. SEQ SX6 B0+ SET SEQUENCE NUMBERS FLAG
  6203. SA1 INSF
  6204. NZ X1,PDC4 IF INSERT FLAG
  6205. SA6 NS
  6206. EQ PDC6 EXIT
  6207. SORSEQ SPACE 4,10
  6208. *** SORSEQ
  6209. *
  6210. * REQUEST SEQUENCE NUMBERS ON SOURCE FILE.
  6211.  
  6212.  
  6213. SORSEQ BSS 0 ENTRY
  6214. SX6 B1+ SET SEQUENCE NUMBERS FLAG
  6215. SA6 SS
  6216. EQ PDC6 EXIT
  6217. UNYANK SPACE 4,10
  6218. *** UNYANK MNAME
  6219. *
  6220. * REMOVE A PREVIOUS YANK ON MODIFIER *MNAME*.
  6221. UNYANK SPACE 4,10
  6222. *** UNYANK MNAME,*
  6223. *
  6224. * REMOVE PREVIOUS YANKS ON ALL MODIFIERS FROM *MNAME* ON.
  6225.  
  6226.  
  6227. UNYANK RJ ASN ASSEMBLE IDENT NAME
  6228. ZR X6,ERR2 IF NAME BLANK OR TOO LONG
  6229. SX7 1S15 SET UNYANK STATUS
  6230. BX6 X6+X7
  6231. EQ YNK1 PROCESS YANK
  6232. UPDATE SPACE 4,10
  6233. *** UPDATE
  6234. *
  6235. * PROPAGATE LINE COUNTS FOR IDENTS BETWEEN DECKS.
  6236. * WHEN THIS OPTION IS USED, THE ORDER OF EDITING IS DETERMINED
  6237. * BY THE ORDER OF THE PROGRAM LIBRARY, AND INSERTION TEXT
  6238. * NUMBERS WILL BE THE SAME AS THOSE PRODUCED BY *UPDATE*.
  6239.  
  6240.  
  6241. UPDATE SX6 B1 SET -UPDATE- FLAG
  6242. SA6 UP
  6243. EQ PDC6 EXIT
  6244. WIDTH SPACE 4,10
  6245. *** WIDTH N
  6246. *
  6247. * SET LINE WIDTH BEFORE SEQUENCE NUMBERS = *N*.
  6248.  
  6249.  
  6250. WIDTH RJ ASD ASSEMBLE COLUMN NUMBER
  6251. SB2 X7-IWMACS-1
  6252. PL B2,INW1 IF OUT OF RANGE
  6253. SA1 INSF
  6254. NZ X1,PDC4 IF INSERT FLAG
  6255. SA7 SC SET SEQUENCE NUMBER COLUMN
  6256. EQ PDC6 EXIT
  6257. YANK SPACE 4,10
  6258. *** YANK MNAME
  6259. *
  6260. * REMOVE EFFECTS OF MODIFIER *MNAME*.
  6261. YANK SPACE 4,10
  6262. *** YANK MNAME,*
  6263. *
  6264. * REMOVE EFFECTS OF MODIFIERS FROM *MNAME* ON.
  6265. * ANY MODIFIERS WHICH HAVE BEEN YANKED ARE DENOTED IN THE
  6266. * MODIFIER LIST BY ENCLOSING PARENS.
  6267.  
  6268.  
  6269. YANK RJ ASN ASSEMBLE IDENT NAME
  6270. ZR X6,ERR2 IF NO NAME - FORMAT ERROR
  6271. SX7 3S15 SET YANK BIT
  6272. BX6 X6+X7
  6273. YNK1 SX3 6 SEARCH FOR DECK NAME
  6274. SEARCH TDKN,X6+X3,777776B
  6275. NZ X2,ERR1 IF INCORRECT DIRECTIVE FOUND
  6276. SX2 1S15 SEARCH FOR YANK NAME
  6277. SEARCH TNME,X6+X2,X2
  6278. ZR X2,YNK2 IF NOT FOUND
  6279. MX4 -15 ENTER NEW STATUS
  6280. BX2 -X4*X2
  6281. BX6 X6+X2
  6282. SA6 A2
  6283. EQ YNK3
  6284.  
  6285. * PROCESS ALL PARAMETERS.
  6286.  
  6287. YNK2 ADDWRD A0,X6 ENTER NEW YANK NAME
  6288. YNK3 SA1 CH CHECK NEXT CHARACTER
  6289. SX7 B1 SET YANK FLAG
  6290. SA2 X1
  6291. SX7 X1+1
  6292. SA7 YK
  6293. SB2 X2-1R,
  6294. NZ B2,PDC5 IF NOT COMMA - RETURN
  6295. SA2 X7 CHECK NEXT CHARACTER
  6296. SX3 B1
  6297. SB2 X2-1R*
  6298. NZ B2,ERR1 IF NOT ASTERISK
  6299. BX6 X3+X6 SET ALL AFTER FLAG
  6300. SA6 A6
  6301. EQ PDC5 EXIT
  6302. IGNORE SPACE 4,10
  6303. *** IGNORE D1
  6304. * IGNORE D1,D2,...,DN
  6305. *
  6306. * CAUSES ANY FURTHER MODIFICATION DIRECTIVES TO THE DESIGNATED
  6307. * DECK(S) TO BE IGNORED.
  6308.  
  6309.  
  6310. IGNORE RJ ASN ASSEMBLE NAME
  6311. ZR X6,ERR2 IF NO NAME - FORMAT ERROR
  6312. SEARCH TIGD,X6
  6313. NZ X2,IGN1 IF FOUND - IGNORE DUPLICATED IGNORES
  6314. ADDWRD A0,X6 ENTER DECK NAME
  6315. IGN1 SA1 CH CHECK NEXT CHARACTER
  6316. SX7 B1 IGNORE FLAG
  6317. SA2 X1
  6318. SX7 X1+1
  6319. SA7 IG SET IGNORE FLAG
  6320. SB2 X2-1R
  6321. ZR B2,PDC5 IF BLANK - RETURN
  6322. NE B2,B1,ERR2 IF NOT COMMA
  6323. SA7 A1+
  6324. EQ IGNORE
  6325. ADK TITLE DIRECTIVE PROCESSING SUBROUTINES.
  6326. ADK SPACE 4,20
  6327. ** ADK - ADD FROM NEW DECK TABLE TO DECK TABLE.
  6328. *
  6329. * ENTRY (X5) - FILE NAME ADDRESS.
  6330. *
  6331. * EXIT TNDK - CLEARED.
  6332. *
  6333. * USES ALL.
  6334. *
  6335. * CALLS ADW, STB.
  6336.  
  6337.  
  6338. ADK SUBR ENTRY/EXIT
  6339. SA1 L.TNDK
  6340. ZR X1,ADKX IF NO NEW DECKS - RETURN
  6341. ALLOC TDKN,X1,S ALLOCATE TABLE SLACK FOR LARGE BLOCK
  6342. SA1 L.TNDK
  6343. SB4 B0 PREPARE TO ADD NEW DECKS
  6344. SB5 X1
  6345. SX6 X5 SET FILE NAME ADDRESS
  6346. MX0 24
  6347. SB6 2
  6348. SA6 T1
  6349. ADK1 SA1 F.TNDK CHECK FOR PREVIOUS DECK
  6350. SA5 X1+B4
  6351. SB2 X5-OPRT
  6352. ZR B2,ADK2 IF TYPE = OPL
  6353. NE B2,B1,ADK6 IF TYPE .NE. OPLC
  6354. ADK2 SEARCH TDKN,X5,377777B
  6355. ZR X2,ADK3 IF NOT FOUND
  6356. SX1 1S16 SET IGNORE BIT
  6357. BX6 X2+X1
  6358. SA6 A2
  6359. ADK3 SA1 FM
  6360. ZR X1,ADK5 IF NOT -F- MODE
  6361. SEARCH TEDT,X5 LOOK UP EDIT ENTRY
  6362. NZ X2,ADK4 IF FOUND
  6363. ADDWRD A0,X1*X5 ADD ENTRY
  6364. ADDWRD A0,X6-X6
  6365. SA2 A6-B1
  6366. ADK4 SA1 F.TDKN SET NEW DECK ADDRESS
  6367. SA3 L.TDKN
  6368. IX6 X1+X3
  6369. SA0 TDKN
  6370. SA6 A2+B1
  6371. ADK5 ADDWRD A0,X5 ADD NEW DECK
  6372. SB2 B4+B1 REPLACE FILE NAME ADDRESS
  6373. SA1 F.TNDK
  6374. SA5 X1+B2
  6375. SA2 T1
  6376. BX5 -X0*X5
  6377. LX2 36
  6378. IX1 X2+X5
  6379. ADDWRD A0,X1
  6380. ADK6 SB5 B5-B6 ADVANCE TABLE
  6381. SB4 B4+B6
  6382. NZ B5,ADK1 IF NOT END OF NEW DECKS
  6383. SA1 F.TNME SET ASSUMED IDENTIFIER ADDRESS
  6384. BX6 X6-X6 CLEAR NEW DECK NAME TABLE
  6385. LX7 X1
  6386. SA6 L.TNDK
  6387. SA7 MDSA
  6388. EQ ADKX RETURN
  6389. AMI SPACE 4,20
  6390. ** AMI - ASSEMBLE MODIFICATION IDENTIFICATION.
  6391. *
  6392. * EXIT (X6) - LINE NAME.
  6393. * (X7) - LINE NUMBER.
  6394. *
  6395. * USES ALL.
  6396. *
  6397. * CALLS ADW, ASD, ASN, STB.
  6398.  
  6399.  
  6400. AMI SUBR ENTRY/EXIT
  6401. SA1 MDTI
  6402. ZR X1,ERR1 IF NO DECK DIRECTIVE - INCORRECT DIRECTIVE
  6403. SA5 CH SAVE CURRENT CHARACTER POINTER
  6404. RJ ASN ASSEMBLE IDENTIFIER NAME
  6405. SA1 A5 CHECK NEXT CHARACTER
  6406. SA4 AIDT GET ASSUMED IDENTIFIER
  6407. SA2 X1
  6408. SB2 X2-1R.
  6409. ZR B2,AMI1 IF PERIOD
  6410. NZ X4,AMI2 IF ASSUMED IDENTIFIER PRESENT
  6411. EQ ERR1 INCORRECT DIRECTIVE
  6412.  
  6413. AMI1 SX5 X1+B1 SKIP PERIOD
  6414. SEARCH TNME,X6 SEARCH FOR IDENTIFIER
  6415. SX4 A2
  6416. NZ X2,AMI2 IF FOUND
  6417. ADDWRD A0,X6 ENTER IDENTIFIER
  6418. SX4 A6+ SET ADDRESS
  6419. AMI2 SX6 X5 SET CHARACTER POSITION
  6420. SA6 A5
  6421. RJ ASD ASSEMBLE NUMBER
  6422. SA1 A5+ CHECK NEXT CHARACTER
  6423. SX6 X4 SET ADDRESS
  6424. SA2 X1
  6425. SB2 X2-1R
  6426. ZR B2,AMIX IF NOT BLANK - RETURN
  6427. NE B2,B1,ERR1 IF NOT COMMA
  6428. SX6 X1+B1 SKIP COMMA
  6429. SA6 A1
  6430. SX6 X4 RESET ADDRESS
  6431. EQ AMIX RETURN
  6432. CCC SPACE 4,10
  6433. ** CCC - COMPRESS CONVERTED LINE.
  6434. *
  6435. * ENTRY (B7) = LAST CHARACTER +1 OF CONVERTED LINE.
  6436. *
  6437. * CALLS CCD.
  6438.  
  6439.  
  6440. CCC1 RJ CCD COMPRESS LINE
  6441.  
  6442. CCC SUBR ENTRY/EXIT
  6443. SX7 B7-1
  6444. SA7 LCAC STORE END OF LINE POSITION
  6445. EQ CCC1 COMPRESS LINE
  6446. CCD SPACE 4,15
  6447. ** CCD - COMPRESS LINE.
  6448. *
  6449. * ENTRY (CHAR) - CHARACTER STRING OF LINE.
  6450. *
  6451. * EXIT (CDTX) - COMPRESSED LINE.
  6452. * (CDWC) - WORD COUNT OF COMPRESSED LINE.
  6453. *
  6454. * USES ALL.
  6455.  
  6456.  
  6457. * PROCESS END OF LINE.
  6458.  
  6459. CCD8 LX6 X6,B6 SHIFT UP LAST WORD
  6460. MX3 -12
  6461. SA6 A6+1
  6462. BX4 -X3*X6
  6463. SB2 A1+
  6464. BX6 X6-X6
  6465. ZR X4,CCD9 IF LINE TERMINATED
  6466. SA6 A6+1 TERMINATE LINE
  6467. CCD9 SX7 A6-B2 SET WORD COUNT
  6468. SA7 A1-B1
  6469. SX6 A0 SET 64 CHARACTER INDICATOR
  6470. SA6 PCSE
  6471.  
  6472. CCD SUBR ENTRY/EXIT
  6473. SA0 B0 INITIALIZE 64 CHARACTER INDICATOR
  6474. SX0 2074B (X0) = CONSTANT 60 FOR UNPACK
  6475. SB4 100B
  6476. SB3 -B1
  6477. SA1 CDID PRESET (A6)
  6478. LX0 48
  6479. SA5 CHAR FIRST CHARACTER
  6480. SB7 B4+B1
  6481. BX6 X1
  6482. SA6 A1
  6483. SB2 6
  6484. UX6,B6 X0 RESET REGISTERS
  6485. SA2 LCAC SET LAST CHARACTER POSITION
  6486. SB5 -B1
  6487. BX1 -X2
  6488. SX7 1R
  6489. EQ CCD6 ENTER TO PROCESS FIRST CHARACTER
  6490.  
  6491. CCD1 SB5 B5+1
  6492. CCD2 LX6 6 00 CHARACTER
  6493. SB6 B6-B2
  6494. SX4 B4-B1 COMPRESSION = 77B
  6495. SB3 B5-B7
  6496. NZ B6,CCD3 IF NOT END OF WORD
  6497. SA6 A6+B1
  6498. UX6,B6 X0 RESET REGISTERS
  6499. CCD3 PL B3,CCD4 IF .GT. 64 BLANKS
  6500. SX4 B5-B1 COMPRESSION = COUNT - 1
  6501. SB3 -B1
  6502. CCD4 NZ X4,CCD5 IF CHARACTER IS NOT *00*
  6503. LX6 6 INSERT *00*
  6504. SA0 B1 64 CHARACTER SET CHARACTER ENCOUNTERED
  6505. SB6 B6-B2
  6506. SX4 B1 SET *01*
  6507. NZ B6,CCD5 IF NOT END OF WORD
  6508. SA6 A6+B1
  6509. UX6,B6 X0 RESET REGISTERS
  6510. CCD5 BX3 X4 SAVE CHARACTER
  6511. AX4 6 CHECK FOR ESCAPE CODE
  6512. ZR X4,CCD5.1 IF NO ESCAPE CODE
  6513. LX6 6 SHIFT ASSEMBLY
  6514. SB6 B6-B2
  6515. BX6 X6+X4 MERGE NEW CHARACTER
  6516. SB5 B3
  6517. NZ B6,CCD5.1 IF NOT END OF WORD
  6518. SA6 A6+B1
  6519. UX6,B6 X0 RESET REGISTERS
  6520. CCD5.1 MX4 -6
  6521. BX4 -X4*X3 CLEAN OFF ESCAPE CODE
  6522. LX6 6 SHIFT ASSEMBLY
  6523. SB6 B6-B2
  6524. BX6 X6+X4 MERGE NEW CHARACTER
  6525. SB5 B3
  6526. NZ B6,CCD6 IF NOT END OF WORD
  6527. SA6 A6+B1
  6528. UX6 B6,X0
  6529. CCD6 IX3 X5-X7 CHECK CHARACTER
  6530. BX4 X5
  6531. SB5 B5+B1 COUNT BLANK
  6532. SB3 X1 -( LWA + 1 ) OF STRING BUFFER
  6533. SB3 B3+A5 CHECK FOR END OF LINE
  6534. SA5 A5+B1 NEXT CHARACTER
  6535. ZR B3,CCD8 IF END OF LINE
  6536. ZR X3,CCD6 IF BLANK
  6537. SB3 -1
  6538. ZR B5,CCD4 IF NO BLANKS
  6539. BX4 X7
  6540. SA5 A5-B1 BACKSPACE
  6541. EQ B5,B1,CCD4 IF 1 BLANK
  6542. SB5 B5-1
  6543. NE B5,B1,CCD1 IF NOT 2 BLANKS
  6544. SA5 A5-1 BACKSPACE
  6545. EQ CCD4
  6546. EMT SPACE 4,20
  6547. ** EMT - ENTER MODIFICATION TABLE.
  6548. *
  6549. * ENTRY (X1) - MODIFICATION REQUEST.
  6550. * 4 = INSERT.
  6551. * 3 = RESTORE.
  6552. * 2 = DELETE.
  6553. * (MDTI) - EDIT TABLE INDEX.
  6554. * (MDSA) - ADDRESS OF MODIFICATION SET NAME.
  6555. * (IDT1 - IDT1+1) - FIRST MODIFICATION LIMIT.
  6556. * (IDT2 - IDT2+1) - SECOND MODIFICATION LIMIT.
  6557. *
  6558. * CALLS ADW.
  6559.  
  6560.  
  6561. EMT SUBR ENTRY/EXIT
  6562.  
  6563. * ENTER FIRST WORD
  6564.  
  6565. SA2 MDTI EDIT INDEX TO BITS 00 - 17
  6566. LX1 57 MODIFICATION TO BITS 57 - 59
  6567. SA3 A2+B1 MODIFIER NAME POINTER TO BITS 36 - 53
  6568. IX1 X1+X2
  6569. SA4 A3+B1 LINE NUMBER TO BITS 18 - 35
  6570. LX3 18
  6571. IX6 X3+X4
  6572. LX6 18
  6573. BX1 X1+X6
  6574. ADDWRD TMOD,X1
  6575.  
  6576. * ENTER SECOND WORD.
  6577.  
  6578. SA2 IDT2 MODIFIER NAME POINTER TO BITS 36 - 53
  6579. LX2 18
  6580. SA3 A2+B1 LINE NUMBER TO BITS 18 - 35
  6581. BX1 X2+X3
  6582. LX1 18
  6583. ADDWRD A0,X1
  6584.  
  6585. * ENTER THIRD WORD
  6586.  
  6587. SA2 MDSA MODIFICATION SET ADDRESS TO BITS 42 - 59
  6588. SA1 T+5 TEXT ADDRESS TO BITS 00 - 24
  6589. LX2 42
  6590. IX1 X2+X1
  6591. ADDWRD A0,X1
  6592. EQ EMTX RETURN
  6593. IMP SPACE 4,15
  6594. ** IMP - INITIALIZE MODIFICATION PROCESSING.
  6595. *
  6596. * LINK MODIFICATION TABLE BY DECKS. ENTER MODIFICATION TABLE
  6597. * LINKAGE IN EDIT TABLE. RESET FETS.
  6598. *
  6599. * USES ALL.
  6600.  
  6601.  
  6602. IMP SUBR ENTRY/EXIT
  6603. SA1 PCC COMPILE PREFIX CHARACTER
  6604. BX6 X1
  6605. SA6 PC
  6606. SA1 =10H DECK -
  6607. SX6 ALT SET ALTERNATE TITLE LINE
  6608. SX7 99999 FORCE PAGE EJECT
  6609. SA6 TL
  6610. SA7 LC
  6611. BX6 X1
  6612. SX7 B1 WORDS/ENTRY = 1
  6613. SA6 SBTL+1
  6614. SA7 LTBA
  6615.  
  6616. * LINK MODIFICATION TABLE BY DECKS.
  6617.  
  6618. SA1 L.TMOD INITIALIZE REGISTERS
  6619. SA2 F.TMOD
  6620. SB2 X1
  6621. MX0 42
  6622. ZR B2,IMP2 IF MODIFICATION TABLE EMPTY
  6623. SA3 F.TDKI
  6624. SB3 3
  6625. SB4 X3
  6626. SB2 B2-B3
  6627. SA2 X2+B2 GET MODIFICATION TABLE ENTRY
  6628. BX5 X0*X2 REMOVE DECK LINKAGE
  6629. IMP1 SA1 B4+X2 GET DECK TABLE ENTRY
  6630. SX3 A2 SET NEW DECK TO MOD LINK
  6631. BX4 X0*X1 REMOVE PREVIOUS LINK FROM DECK ENTRY
  6632. SB2 B2-B3
  6633. SA2 A2-B3 DECREMENT TO NEXT MODIFICATION
  6634. BX7 -X0*X1
  6635. IX6 X4+X3 RESTORE EDIT ENTRY
  6636. BX7 X5+X7
  6637. SA6 A1+
  6638. SA7 A2+B3 STORE LINKED MODIFICATION
  6639. BX5 X0*X2 REMOVE EDIT LINKAGE
  6640. PL B2,IMP1 IF NOT AT END OF TABLE
  6641.  
  6642. * ENTER MODIFICATION TABLE LINKAGE IN EDIT TABLE.
  6643.  
  6644. IMP2 SA3 UM
  6645. NZ X3,IMP7 IF *U* MODE
  6646. SA1 L.TDKI
  6647. SA2 F.TDKI
  6648. SB5 X1
  6649. SA5 X2
  6650. ZR B5,IMP5 IF DECK TABLE EMPTY
  6651. IMP3 SEARCH TEDT,X5 SEARCH EDIT TABLE
  6652. ZR X2,IMP4 IF NOT FOUND
  6653. SX1 X5 ENTER MODIFICATION TABLE LINK
  6654. BX6 X1+X2
  6655. SA6 A2+
  6656. IMP4 SB5 B5-B1
  6657. SA5 A5+B1
  6658. NZ B5,IMP3 IF NOT END OF DECK IDENTIFIERS
  6659. IMP5 SA1 UP
  6660. NZ X1,IMP9 IF *UPDATE* OPTION SELECTED
  6661.  
  6662. * GUARANTEE THAT COPYRIGHT RECORD, IF PRESENT, IS FIRST.
  6663.  
  6664. IMP6 SX6 7 COMMON DECK
  6665. SA1 =C*COPYRT* COPYRIGHT RECORD
  6666. SEARCH TDKN,X6+X1,777776B
  6667. ZR X2,IMP6.3 IF COPYRIGHT RECORD IS NOT PRESENT
  6668. MX2 42 CLEAR DECK FLAGS
  6669. BX6 X2*X6
  6670. SB5 A2 SAVE DECK ADDRESS
  6671. SEARCH TEDT,X6
  6672. SB4 A2 SAVE ENTRY ADDRESS
  6673. NZ X2,IMP6.1 IF DECK IN EDIT TABLE
  6674. ADDWRD TEDT,X6
  6675. SX1 B5
  6676. ADDWRD TEDT,X1
  6677.  
  6678. * MOVE THE COPYRIGHT DECK TO THE FIRST ENTRY.
  6679.  
  6680. SB4 A6-B1 SAVE ENTRY ADDRESS
  6681. IMP6.1 SX4 X3-2
  6682. NG X4,IMP6.3 IF FIRST ORDINAL OF THE TABLE
  6683. SA1 F.TEDT FIRST ORDINAL LOCATION
  6684. SB5 X1
  6685. SA1 B4 PRESENT POSITON
  6686. SA2 B4+B1 SECOND ENTRY
  6687. SB4 A2+B1
  6688. IMP6.2 BX6 X1
  6689. BX7 X2
  6690. SA1 B5
  6691. SA2 B5+B1
  6692. SA6 B5
  6693. SA7 B5+B1
  6694. SB5 A2+B1
  6695. NE B5,B4,IMP6.2 IF NOT FINISHED MOVING DOWN
  6696.  
  6697. * RESET FETS.
  6698.  
  6699. IMP6.3 SA1 T
  6700. SX6 B0+
  6701. SA6 M
  6702. ZR X1,IMPX IF TEXT FILE NOT USED - RETURN
  6703. WRITER A1,R
  6704. SA1 X2+1 REWIND POINTERS
  6705. SX7 X1
  6706. SA7 A1+B1
  6707. SA7 A7+B1
  6708. MX7 60 INSURE NO HIT ON TEXT ADDRESS
  6709. SA7 T+5
  6710. EQ IMPX RETURN
  6711.  
  6712. * FOR *U* MODE, ENTER DECK IDENTIFIER TABLE IN EDIT TABLE.
  6713.  
  6714. IMP7 SA1 F.TDKI
  6715. SA2 L.TDKI
  6716. BX7 X7-X7 CLEAR EDIT LENGTH
  6717. SB7 X2
  6718. SA7 L.TEDT
  6719. SB7 B7-B1
  6720. ZR B7,IMP5 IF NO DECKS
  6721. SA5 X1+B1 FIRST ENTRY
  6722. IMP8 ADDWRD TEDT,X5
  6723. MX0 42
  6724. SX1 6
  6725. BX6 X0*X6
  6726. SEARCH TDKN,X1+X6,777776B
  6727. SX1 A2
  6728. ADDWRD TEDT,X1
  6729. SB7 B7-B1
  6730. SA5 A5+B1
  6731. NZ B7,IMP8 IF MORE DECKS TO PROCESS
  6732. EQ IMP5
  6733.  
  6734. * FOR *UPDATE* OPTION, ORDER EDIT TABLE ACCORDING TO DECK TABLE.
  6735.  
  6736. IMP9 SA1 F.TDKN
  6737. SA2 L.TDKN
  6738. BX7 X7-X7 CLEAR DECK IDENTIFIER TABLE LENGTH
  6739. SB7 X2
  6740. SA7 L.TDKI
  6741. SA5 X1+
  6742. SB6 2
  6743. IMP10 SEARCH TEDT,X5
  6744. ZR X2,IMP11 IF DECK NOT IN EDIT TABLE
  6745. SA1 A2+B1 ENTER EDIT ENTRY
  6746. BX0 X1
  6747. ADDWRD TDKI,X2
  6748. ADDWRD A0,X0
  6749. IMP11 SB7 B7-B6
  6750. SA5 A5+B6
  6751. PL B7,IMP10 IF MORE DECKS TO PROCESS
  6752. SA1 L.TEDT COPY BACK TO EDIT TABLE
  6753. SA2 F.TEDT
  6754. SB7 X1
  6755. SB6 B0
  6756. SA3 F.TDKI
  6757. IMP12 EQ B6,B7,IMP6 IF COMPLETE
  6758. SA1 X3+B6
  6759. BX6 X1
  6760. SA6 X2+B6
  6761. SB6 B6+B1
  6762. EQ IMP12 LOOP
  6763. IPC SPACE 4,10
  6764. ** IPC - INSERT PREFIX CHARACTER.
  6765. *
  6766. * ENTRY (PCC) = COMPILE FILE PREFIX CHARACTER.
  6767. * (WCCA) = TABLE OF COMPILE FILE DIRECTIVES.
  6768. *
  6769. * EXIT (WCCA) = INITIALIZED WITH PREFIX CHARACTER IN UPPER
  6770. * 6-BITS OF TABLE ENTRY.
  6771. *
  6772. * USES X - 1, 2, 6.
  6773. * A - 1, 2, 6.
  6774.  
  6775.  
  6776. IPC SUBR ENTRY/EXIT
  6777. SA2 PCC COMPILE FILE PREFIX CHARACTER
  6778. SA1 WCCA-1 INITIALIZE LOOP
  6779. LX2 54
  6780. IPC1 SA1 A1+B1 INSERT CHARACTER
  6781. BX6 X1+X2
  6782. ZR X1,IPCX IF AT END OF TABLE
  6783. SA6 A1
  6784. EQ IPC1 LOOP FOR REMAINDER OF TABLE
  6785. LDC SPACE 4,20
  6786. ** LDC - LIST DIRECTIVE LINE.
  6787. *
  6788. * ENTRY (CHAR) - LINE IN *S* FORMAT.
  6789. * (CDLS) - LINE LIST STATUS.
  6790. * (ERRM) - ERROR MESSAGE, IF NEEDED.
  6791. *
  6792. * USES X - 0, 1, 2, 3, 4, 6, 7.
  6793. * A - 1, 2, 3, 4, 6, 7.
  6794. * B - ALL.
  6795. *
  6796. * CALLS LER, UPN, WOF.
  6797.  
  6798.  
  6799. LDC SUBR ENTRY/EXIT
  6800. SA1 ERRM
  6801. ZR X1,LDC1 IF NO ERROR MESSSAGE
  6802. SX7 1S"LO.E"
  6803. SA1 =9L *ERROR*
  6804. SA7 CDLS
  6805. SB3 CHSP
  6806. RJ UPN UNPACK NAME
  6807. LISTOP E,LDC1,MI IF ERROR LIST ON
  6808. SA1 EA ADVANCE DIRECTIVE ERROR COUNTER
  6809. SA2 X1
  6810. SX6 X2+B1
  6811. SA6 A2
  6812. BX6 X6-X6 CLEAR ERROR
  6813. SA6 ERRM
  6814. EQ LDCX RETURN
  6815.  
  6816. LDC1 SA1 LO CHECK LIST OPTION
  6817. SA2 CDLS
  6818. BX6 X1*X2
  6819. ZR X6,LDC5 IF NO LIST FOR LINE
  6820. SA1 RDDB
  6821. SX6 2
  6822. IX1 X1-X6
  6823. SX2 125
  6824. PL X1,LDC3 IF READPL
  6825. SA1 CDCT
  6826. MX0 -16
  6827. SX6 B1
  6828. BX1 -X0*X1
  6829. IX7 X6+X1
  6830. SA7 A1 DIRECTIVE COUNT
  6831. RJ CDD CONVERT TO DECIMAL DISPLAY
  6832. SB2 9
  6833. MX0 -6
  6834. LX6 24
  6835. LDC2 BX7 -X0*X6
  6836. SB2 B2-B1
  6837. SA7 A7+B1
  6838. LX6 6
  6839. NZ B2,LDC2 IF NOT COMPLETE
  6840. SA4 IW INPUT WIDTH
  6841. SX2 X4+10
  6842. SA1 A
  6843. ZR X1,LDC3 IF NO ALTERNATE FILE
  6844. SX2 118
  6845. LDC3 PRINT -CHSP,X2
  6846. SX6 1R
  6847. SB2 8
  6848. SA6 CHSP RESTORE SPACES TO CHSP
  6849. LDC4 SB2 B2-B1
  6850. SA6 A6+B1
  6851. NZ B2,LDC4 IF NOT COMPLETE
  6852. LDC5 SA1 ERRM
  6853. ZR X1,LDCX IF NO ERROR MESSAGE - RETURN
  6854. BX6 X6-X6 CLEAR ERROR MESSAGE
  6855. SA6 A1
  6856. SX0 X1
  6857. RJ LER LIST ERROR MESSAGE
  6858. EQ LDCX
  6859. PMP SPACE 4
  6860. ** PMP - PROCESS MOVE AND PURDECK DIRECTIVES.
  6861. *
  6862. * USE TABLE *TMVE* TO REORDER THE EDIT TABLE.
  6863.  
  6864.  
  6865. PMP SUBR ENTRY/EXIT
  6866. BX6 X6-X6
  6867. SA6 T1
  6868. PMP1 SA1 T1 CHECK MOVE TABLE
  6869. SA2 L.TMVE
  6870. IX7 X2-X1
  6871. SX6 X1+B1 ADVANCE MOVE INDEX
  6872. ZR X7,PMPX IF END OF TABLE - RETURN
  6873. SA3 F.TMVE LOOK UP MOVE ENTRY
  6874. SB2 X1
  6875. SA2 X3+B2
  6876. SA6 A1
  6877. SA3 F.TDKN LOOK UP DECK NAME
  6878. IX6 X2+X3
  6879. LX3 18
  6880. IX6 X6+X3
  6881. SA6 T2
  6882. SA1 X6
  6883. SEARCH TEDT,X1 SEARCH FOR DECK NAME
  6884. ZR X2,PMP1 IF NOT FOUND
  6885. SA1 A2+B1 SAVE EDIT ENTRY
  6886. BX6 X2
  6887. BX7 X1
  6888. SA6 PMPA
  6889. SA7 A6+B1
  6890. SA2 F.TEDT
  6891. SA1 L.TEDT DECREMENT EDIT LENGTH
  6892. SX6 X1-2
  6893. SA6 A1
  6894. IX1 X6-X3
  6895. IX3 X2+X3
  6896. BX6 X3
  6897. SA6 PMPA+2
  6898. ZR X1,PMP2 IF NO MOVE
  6899. MOVE X1,X3+2,X3 PURGE EDIT ENTRY
  6900. PMP2 SA1 T2
  6901. MI X1,PMP4 IF MOVE COMPLETE
  6902. LX1 -18
  6903. SA2 X1 SEARCH FOR DECK NAME
  6904. SEARCH TEDT,X2
  6905. ZR X2,PMP1 IF NOT FOUND
  6906. SB2 B1+B1
  6907. SX6 A2+B2
  6908. SA1 L.TEDT
  6909. SA2 F.TEDT
  6910. SA6 T2
  6911. SX7 X1+B2 INCREMENT TABLE LENGTH
  6912. SA7 A1
  6913. SX3 X3+B2
  6914. IX2 X2+X3
  6915. IX1 X1-X3
  6916. ZR X1,PMP3 IF NO MOVE
  6917. MOVE X1,X2,X2+B2 ADD MOVED ENTRY
  6918. PMP3 SA1 T2
  6919. SA2 PMPA
  6920. SA3 A2+B1
  6921. BX6 X2
  6922. BX7 X3
  6923. SA6 X1
  6924. SA7 X1+B1
  6925. EQ PMP1 LOOP
  6926.  
  6927. PMP4 LX1 -18
  6928. SX3 X1
  6929. SA2 F.TDKN
  6930. BX1 X3-X2
  6931. ZR X1,PMP1 IF NO SECOND ADDRESS TO PURGE
  6932. SA2 X3
  6933. SEARCH TEDT,X2
  6934. ZR X2,PMP1 IF NOT FOUND
  6935. SX2 A2+2
  6936. SA3 PMPA+2 PICK UP WHERE 1ST PURGE WAS PERFORMED
  6937. IX1 X2-X3
  6938. SX6 =C/NAMES SEPARATED BY *.* IN WRONG ORDER./
  6939. ZR X1,PMP1 IF NOTHING TO MOVE
  6940. NG X1,ERR IF PURGE ORDER INCORRECT
  6941. SA4 L.TEDT
  6942. SA5 F.TEDT
  6943. IX6 X4-X1
  6944. IX5 X5+X4
  6945. IX1 X5-X2
  6946. SA6 A4
  6947. MOVE X1,X2,X3
  6948. EQ PMP1
  6949.  
  6950. PMPA CON 0
  6951. CON 0
  6952. CON 0
  6953. RCS SPACE 4,15
  6954. ** RCS - RESET CHARACTER SET.
  6955. *
  6956. * RESET CURRENT CHARACTER SET.
  6957. *
  6958. * ENTRY (CSR) = REQUESTED CHARACTER SET NAME.
  6959. * = 0 - DISPLAY CHARACTER SET MESSAGE.
  6960. *
  6961. * EXIT (X6) = ERROR MESSAGE ADDRESS IF NON-ZERO.
  6962. * (CSC) = CURRENT CHARACTER SET.
  6963. * (CSR) = 0.
  6964. *
  6965. * USES A - 1, 2, 3, 6, 7.
  6966. * X - 1, 2, 3, 4, 6, 7.
  6967. * B - NONE.
  6968. *
  6969. * MACROS MESSAGE, TLX.
  6970. *
  6971. * CALLS NONE.
  6972.  
  6973. RCS SUBR ENTRY/EXIT
  6974. SA1 CSR GET REQUESTED CHARACTER SET
  6975. ZR X1,RCS4 IF MESSAGE REQUEST
  6976. MX3 42
  6977. BX2 X1
  6978. SA1 TCST-1 FWA-1 OF CHARSET TABLE
  6979. SX6 RCSA PRESET ERROR MESSAGE
  6980. RCS1 SA1 A1+B1
  6981. ZR X1,RCSX IF UNKNOWN CHARSET
  6982. BX4 X3*X1
  6983. BX7 X2-X4
  6984. NZ X7,RCS1 IF NO MATCH
  6985. BX7 -X3*X1
  6986. SA7 CSC SET NEW CHARACTER SET
  6987. RCS3 BX6 X6-X6 CLEAR ERROR MESSAGE FLAG
  6988. SA6 CSR CLEAR CHARACTER SET REQUEST
  6989. EQ RCSX RETURN
  6990.  
  6991. RCS4 SA2 RCSB
  6992. NG X1,RCS3 IF NO EXPLICIT CS REQUEST
  6993. ZR X2,RCS3 IF NO MESSAGE, RETURN
  6994. MESSAGE X2,3,R
  6995. EQ RCS3 RETURN
  6996.  
  6997. RCSA DATA C* UNKNOWN CHARACTER SET.*
  6998. RCSB CON 0 MESSAGE ADDDRESS IF NON-ZERO.
  6999. RDD SPACE 4,15
  7000. ** RDD - READ DIRECTIVE.
  7001. *
  7002. * *READ*, *SKIP*, *REWIND* DIRECTIVES PROCESSED HERE.
  7003. *
  7004. * EXIT (X1) - .NE. 0, IF EOR/EOF ENCOUNTERED.
  7005. *
  7006. * USES ALL.
  7007. *
  7008. * CALLS ECD, LDC, UPN, WOF.
  7009.  
  7010.  
  7011. RDD SUBR ENTRY/EXIT
  7012. RDD1 SA5 RDDB
  7013. NZ X5,RDD9 IF READPL INPUT
  7014. SA1 A
  7015. NZ X1,RDD6 IF ALTERNATE INPUT
  7016. SA1 IW
  7017. READK I,CHAR,X1
  7018. NZ X1,RDDX IF EOR/EOF/EOI - RETURN
  7019. RDD2 SX6 B6+
  7020. SA6 LCAC
  7021. RDD3 SX6 1BS"LO.C"
  7022. SA6 CDLS
  7023. CARD BKSP
  7024. CARD READ
  7025. CARD READPL
  7026. CARD RETURN
  7027. CARD REWIND
  7028. CARD SKIP
  7029. CARD SKIPR
  7030. BX1 X1-X1 RETURN WITH NO EOR
  7031. EQ RDDX RETURN
  7032.  
  7033. * RETURN HERE TO CLEAR ALTERNATE INPUT AND LIST LINE.
  7034.  
  7035. RDD4 BX6 X6-X6 CLEAR ALTERNATE INPUT
  7036. SA6 A
  7037. SA6 RDDB CLEAR READPL FLAG
  7038. RJ LDC LIST LINE
  7039. MESSAGE CCDR,1 ISSUE CONSOLE MESSAGE
  7040. SX6 1R BLANK FILL BUFFER
  7041. SB2 25
  7042. RDD5 SA6 CHAR+IWMAX+B2
  7043. SB2 B2-B1
  7044. PL B2,RDD5 IF NOT COMPLETE
  7045. EQ RDD1 PROCESS NEXT INPUT
  7046.  
  7047. * ALTERNATE INPUT READ.
  7048.  
  7049. RDD6 SA5 RDDB
  7050. NZ X5,RDD9 IF READPL INPUT
  7051. SA1 IW
  7052. READK A,CHAR,X1
  7053. ZR X1,RDD2 IF NO EOR
  7054. SA3 RDDA
  7055. ZR X3,RDD7 IF NOT *READ* N,*
  7056. MI X1,RDD7 IF EOF
  7057. READ A BEGIN NEW READ
  7058. READC A,BUF,20 READ FIRST LINE
  7059. MI X1,RDD7 IF EOF
  7060. SX6 X1-BUF CHECK LENGTH
  7061. NZ X6,RDD6 IF NEXT RECORD NOT ZERO LENGTH
  7062.  
  7063. RDD7 BX7 X7-X7 CLEAR ALTERNATE INPUT
  7064. SA7 X2
  7065. SA7 RDDA CLEAR (*) FLAG
  7066. RDD8 SA7 RDDB CLEAR READPL FLAG
  7067. LISTOP C,RDD1 IF NO LIST SET FOR DIRECTIVE
  7068. PRINT (=C* *)
  7069. PRINT (=C* *)
  7070. EQ RDD1 PROCESS NEXT INPUT
  7071.  
  7072. RDD9 SA1 RDDB+1
  7073. ZR X1,RDD11 IF LAST LINE READ
  7074. READC N,BUF,BUFL READ MHBS
  7075. NZ X1,RDD11 IF EOR
  7076. READC X2,CDTX,MXCCL READ COMPRESSED LINE
  7077. NZ X1,RDD11 IF EOR
  7078. RDD10 SA1 BUF
  7079. SA2 =00177777177777000000B
  7080. SA3 RDDB
  7081. BX6 X2*X1
  7082. IX6 X6-X3
  7083. SA6 A3+B1
  7084. PL X1,RDD9 IF LINE INACTIVE
  7085. MX0 -16 SET LINE ID
  7086. SA2 F.TNCD
  7087. AX1 18
  7088. BX6 -X0*X1
  7089. IX6 X6+X2
  7090. AX1 18
  7091. SA2 X6 LINE NAME
  7092. BX6 -X0*X1 SEQUENCE NUMBER
  7093. BX2 X0*X2
  7094. IX6 X2+X6
  7095. SA6 CDID
  7096. RJ ECD EXPAND LINE
  7097. SX6 B7 ADDRESS OF LAST CHARACTER FROM LINE + 1
  7098. SA6 LCAC
  7099. EQ RDD3
  7100.  
  7101. * TERMINATE READPL.
  7102.  
  7103. RDD11 RECALL N
  7104. SA1 X2+B1 SET IN = OUT = FIRST
  7105. SX6 X1
  7106. SA6 A1+B1
  7107. SA6 A6+B1
  7108. SA1 A FILE NAME
  7109. MX0 42
  7110. BX1 X0*X1
  7111. RJ SFN SPACE FILL NAME
  7112. SB3 CHAR+IWMAX+1 ENTER NAME IN CHAR
  7113. BX1 X6
  7114. RJ UPN UNPACK NAME
  7115. BX7 X7-X7 CLEAR MODIFIER TABLE
  7116. SA1 N+7 REPLACE NPL NAME
  7117. BX6 X1
  7118. SA7 L.TNCD
  7119. SA6 N
  7120. EQ RDD8
  7121.  
  7122. RDDA CON 0 -READ- (*) FLAG
  7123. RDDB CON 0 -READPL- FLAG
  7124. CON 0
  7125. SPACE 4
  7126. *** FILE MANIPULATION DIRECTIVES.
  7127. *
  7128. * PROCESSED FROM INPUT FILE. THESE DIRECTIVES ARE NOT ALLOWED
  7129. * ON ALTERNATE INPUT.
  7130. BKSP SPACE 4,10
  7131. *** BKSP FNAME
  7132. *
  7133. * BACKSPACE FILE *FNAME* 1 RECORD.
  7134. BKSP SPACE 4,10
  7135. *** BKSP FNAME,N
  7136. *
  7137. * BACKSPACE FILE *FNAME* *N* RECORDS.
  7138.  
  7139.  
  7140. BKSP SX6 B1 SET BACKSPACE FLAG
  7141. EQ SKP1
  7142. READ SPACE 4,10
  7143. *** READ FNAME,RNAME
  7144. *
  7145. * USE FILE *FNAME* FOR DIRECTIVE INPUT.
  7146. * *RNAME* IF PRESENT, SPECIFIES THE NAME OF THE RECORD TO
  7147. * BE USED. *FNAME* MUST BE IN SOURCE FILE FORMAT.
  7148. * I.E. THE FIRST WORD OF EACH RECORD IS THE NAME OF THE
  7149. * RECORD. THIS WORD IS DISCARDED BEFORE DIRECTIVE INPUT
  7150. * IS PROCESSED. THE SEARCH TERMINATES ON AN END OF FILE.
  7151. * WHEN END OF RECORD IS REACHED, DIRECTIVE INPUT RETURNS TO
  7152. * NORMAL INPUT FILE.
  7153. *
  7154. * IF *RNAME* = (*), ALL RECORDS UP TO AN EOF OR A ZERO
  7155. * LENGTH RECORD ARE READ.
  7156.  
  7157.  
  7158. READ RJ SAF SET ALTERNATE FILE
  7159. SA6 A SET FILE NAME
  7160. SA1 CH CHECK NEXT CHARACTER
  7161. SA2 X1
  7162. SX6 X1+B1
  7163. SB2 X2-1R,
  7164. NZ B2,RAF6 IF NOT COMMA
  7165. SA6 A1 SKIP COMMA
  7166. RJ ASN ASSEMBLE RECORD NAME
  7167. BX1 X6 CHECK NAME
  7168. LX7 X6
  7169. ZR X6,RAF7 IF NO RECORD NAME
  7170. LX7 18
  7171. SX7 X7-1L*
  7172. ZR X7,RAF5 IF ASTERISK
  7173. RJ SFN SPACE FILL NAME
  7174. BX5 X6 SAVE NAME
  7175. READ A
  7176. RAF1 READC A,BUF,MXCCL READ FIRST LINE
  7177. MI X1,RAF4 IF EOF
  7178. SA1 BUF SPACE FILL NAME
  7179. RJ SFN SPACE FILL NAME
  7180. BX7 X6-X5
  7181. ZR X7,RAF3 IF RECORDS MATCH
  7182. SB2 BUF+BUFL
  7183. READW A,B6,B2-B6
  7184. SX1 B6 LWA+1 OF DATA READ
  7185. SX2 BUF SET RECORD TYPE
  7186. RJ SRT SET RECORD TYPE
  7187. SA7 RAFA+1 ENTER NAME IN MESSAGE
  7188. MESSAGE A7-B1,1
  7189.  
  7190. RAF2 READW A,BUF,BUFL READ NEXT PART
  7191. ZR X1,RAF2 IF NOT EOR/EOF/EOI
  7192. READ X2 BEGIN NEW READ
  7193. EQ RAF1 PROCESS NEXT RECORD
  7194.  
  7195. RAF3 RJ LDC LIST LINE
  7196. SA1 A SPACE FILL FILE NAME
  7197. MX0 42
  7198. BX1 X0*X1
  7199. RJ SFN SPACE FILL NAME
  7200. SB3 CHAR+IWMAX+1 ENTER NAME IN CHARACTER BUFFER
  7201. BX1 X6
  7202. RJ UPN UNPACK NAME
  7203. MESSAGE CCDR,1 RESET CONSOLE MESSAGE
  7204. EQ RDD1 READ NEXT LINE
  7205.  
  7206. RAF4 SX6 =C*RECORD NOT FOUND.*
  7207. EQ RAF8 SET ERROR MESSAGE
  7208.  
  7209. RAF5 SX6 B1 SET ASTERISK FLAG
  7210. SA6 RDDA
  7211. READ A BEGIN READ
  7212. READC A,BUF,MXCCL READ FIRST LINE
  7213. EQ RAF3
  7214.  
  7215. RAF6 READ A,R LOAD BUFFER
  7216. SA1 A+2
  7217. SA3 A1+B1 (A+3)
  7218. BX6 X1-X3
  7219. NZ X6,RAF3 IF DATA READ
  7220. SX6 =C*EMPTY FILE.*
  7221. EQ RAF8 SET ERROR MESSAGE
  7222.  
  7223. RAF7 SX6 =C*RECORD NAME MISSING.*
  7224. RAF8 SA6 ERRM SET ERROR MESSAGE
  7225. EQ RDD4 EXIT
  7226.  
  7227. RAFA CON 10H SKIP /
  7228. CON 0
  7229. READPL SPACE 4,10
  7230. *** READPL DNAME,C1,C2
  7231. *
  7232. * READ LINES *C1* THROUGH *C2* FROM PROGRAM LIBRARY.
  7233. *
  7234. * IF *C1* AND *C2* ARE MISSING, READ ENTIRE DECK.
  7235.  
  7236.  
  7237. READPL SA1 RDDB
  7238. SX6 =C*OPERATION INCORRECT FROM ALTERNATE INPUT.*
  7239. NZ X1,ERR IF ALTERNATE INPUT ACTIVE
  7240. RJ CRD CONDITIONALLY READ DIRECTORY
  7241. RJ ASN ASSEMBLE NAME
  7242. ZR X6,ERR2 IF NO NAME - FORMAT ERROR
  7243. SEARCH TDKN,X6,200000B SEARCH FOR DECK
  7244. SX6 =C*UNKNOWN DECK.*
  7245. ZR X2,ERR IF DECK NOT FOUND
  7246. SA1 A2+B1 SET RANDOM ADDRESS
  7247. SX6 A2 SET IDENTIFIER ADDRESS
  7248. SA6 RPLA
  7249. MX0 30
  7250. BX6 -X0*X1
  7251. AX1 36
  7252. SA3 X1 PROGRAM LIBRARY NAME
  7253. SA6 N+6
  7254. BX7 X3
  7255. SX6 B1
  7256. SA7 N
  7257. SA6 RDDB
  7258. SX6 IWMACS+1 SET LINE NUMBER COLUMN
  7259. SA6 SC+1
  7260. READ N INITIATE NEW READ
  7261. READW N,TIDT,TIDTL READ IDENT TABLE
  7262. NZ X1,PLE IF EOR
  7263. SA1 TIDT
  7264. LX1 12
  7265. SB2 X1-7700B
  7266. NZ B2,PLE IF NO IDENT TABLE
  7267. SA1 TIDT+1 ADD DECK NAME TO IDENTIFIER TABLE
  7268. ADDWRD TNCD,X1
  7269. SB5 TIDT FWA OF IDENT TABLE
  7270. RJ PCS PROCESS CHARACTER SET
  7271. READW N,T1,1 READ MODIFIER TABLE LENGTH
  7272. NZ X1,PLE IF EOR
  7273. SA1 T1 CHECK TABLE
  7274. SB7 X1 SET TABLE LENGTH
  7275. LX1 18
  7276. SB2 X1-700100B
  7277. SB3 X1-700200B
  7278. ZR B2,RPL1 IF NORMAL DECK
  7279. NZ B3,PLE IF NOT COMMON DECK
  7280. RPL1 ZR B7,RPL2 IF NO MODIFIERS
  7281. ALLOC TNCD,B7 ALLOCATE FOR MODIFIERS
  7282. READW N,X2+B1,B7 READ MODIFIERS
  7283. RPL2 SA1 CH CHECK SEPARATOR CHARACTER
  7284. SA2 X1
  7285. SX6 X1+B1
  7286. SB2 X2-1R
  7287. SA6 A1+
  7288. ZR B2,RPL9 IF READ ENTIRE DECK
  7289. NE B2,B1,ERR2 IF FORMAT ERROR
  7290. SA1 MDTI MODIFICATION TABLE INDEX
  7291. SA2 AIDT ASSUMED IDENTIFIER
  7292. BX6 X1
  7293. LX7 X2
  7294. SA3 RPLA DECK NAME ADDRESS
  7295. SA6 A3
  7296. SA7 A3+B1
  7297. BX6 X3
  7298. SX7 B1
  7299. SA6 A2 ASSUMED IDENTIFIER = DECK NAME ADDRESS
  7300. SA7 A1 INDEX = 1
  7301. RJ AMI ASSEMBLE FIRST IDENTIFIER
  7302. SA7 T1
  7303. SA1 X6 FIND MODIFIER INDEX
  7304. SEARCH TNCD,X1
  7305. NZ X2,RPL4 IF FOUND
  7306. RPL3 SA1 RPLA RESTORE MODNAME
  7307. SA2 A1+1
  7308. BX6 X1
  7309. LX7 X2
  7310. SA6 MDTI
  7311. SA7 AIDT
  7312. SX6 =C*UNKNOWN MODNAME.*
  7313. EQ RPL8
  7314.  
  7315. RPL4 LX3 18 FORM FIRST LINE MASK
  7316. SA1 T1
  7317. LX1 36
  7318. BX6 X1+X3
  7319. SA6 A1
  7320. RJ AMI ASSEMBLE SECOND IDENTIFIER
  7321. SA7 T2
  7322. SA1 X6+ FIND MODIFIER INDEX
  7323. SEARCH TNCD,X1
  7324. ZR X2,RPL3 IF NOT FOUND
  7325. SA1 T2 FORM LAST LINE MASK
  7326. LX3 18
  7327. LX1 36
  7328. BX6 X1+X3
  7329. SA6 A1
  7330. SA1 RPLA RESTORE MODNAME
  7331. SA2 A1+1
  7332. BX6 X1
  7333. LX7 X2
  7334. SA6 MDTI
  7335. SA7 AIDT
  7336. SA1 =00177777177777000000B
  7337. SA5 T1
  7338. BX0 X1
  7339.  
  7340. * SEARCH FOR START OF TEXT.
  7341.  
  7342. RPL5 READC N,BUF,BUFL READ MHBS
  7343. NZ X1,RPL7 IF EOR
  7344. READC X2,CDTX,MXCCL READ COMPRESSED LINE
  7345. NZ X1,RPL7 IF EOR
  7346. SA1 BUF
  7347. BX1 X0*X1
  7348. IX6 X1-X5
  7349. NZ X6,RPL5 IF NOT AT BEGINNING OF TEXT
  7350.  
  7351. RPL6 RJ LDC LIST LINE
  7352. SA1 T2 SET ALTERNATE READ
  7353. BX6 X1
  7354. SA6 RDDB
  7355. MESSAGE CCDR,1 RESET CONSOLE MESSAGE
  7356. EQ RDD10 PROCESS LINE
  7357.  
  7358. RPL7 SX6 =C*CARD NOT FOUND.*
  7359. RPL8 SA6 ERRM
  7360. RECALL N
  7361. SA1 N+1 RESET IN = OUT = FIRST
  7362. SX6 X1
  7363. BX7 X7-X7
  7364. SA6 A1+B1
  7365. SA6 A6+B1
  7366. SA7 L.TNCD
  7367. EQ RDD4 EXIT
  7368.  
  7369. * READ ENTIRE DECK.
  7370.  
  7371. RPL9 READC N,BUF,BUFL READ MHBS
  7372. NZ X1,RPL7 IF EOR
  7373. READC X2,CDTX,MXCCL READ COMPRESSED LINE
  7374. SX6 10 SET ALTERNATE READ
  7375. SA6 T2
  7376. EQ RPL6
  7377.  
  7378. RPLA CON 0 MODIFICATION TABLE INDEX
  7379. CON 0 ASSUMED IDENTIFIED
  7380. RETURN SPACE 4,10
  7381. *** RETURN FNAME,FNAME,...,FNAME
  7382. *
  7383. * RETURN FILE(S) *FNAME*.
  7384.  
  7385.  
  7386. RETURN RJ SAF SET ALTERNATE FILE
  7387. SA6 A SET FILE NAME
  7388. EVICT A,R RETURN FILE
  7389. SA1 CH CHECK NEXT CHARACTER
  7390. BX6 X6-X6 CLEAR ALTERNATE FILE
  7391. SA2 X1
  7392. SB2 X2-1R,
  7393. SA6 A
  7394. NZ B2,RDD4 IF NO COMMA - LIST LINE
  7395. SX7 X1+B1 SKIP COMMA
  7396. SA7 A1
  7397. EQ RETURN PROCESS NEXT NAME
  7398. REWIND SPACE 4,10
  7399. *** REWIND FNAME,FNAME,...,FNAME
  7400. *
  7401. * REWIND FILE(S) *FNAME*.
  7402.  
  7403.  
  7404. REWIND RJ SAF SET ALTERNATE FILE
  7405. SA6 A SET FILE NAME
  7406. REWIND A,R REWIND FILE
  7407. SA1 CH CHECK NEXT CHARACTER
  7408. BX6 X6-X6 CLEAR ALTERNATE FILE
  7409. SA2 X1
  7410. SB2 X2-1R,
  7411. SA6 A
  7412. NZ B2,RDD4 IF NO COMMA - LIST LINE
  7413. SX7 X1+B1 SKIP COMMA
  7414. SA7 A1
  7415. EQ REWIND PROCESS NEXT NAME
  7416. SKIP SPACE 4,10
  7417. *** SKIP FNAME
  7418. *
  7419. * SKIP 1 RECORD ON FILE *FNAME*.
  7420. SKIP SPACE 4,10
  7421. *** SKIP FNAME,N
  7422. *
  7423. * SKIP *N* RECORDS ON FILE *FNAME*.
  7424.  
  7425.  
  7426. SKIP SX6 B0+ SET FORWARD FLAG
  7427. SKP1 SA6 T2
  7428. RJ SAF SET ALTERNATE FILE
  7429. SA1 CH CHECK NEXT CHARACTER
  7430. SA2 X1
  7431. SX6 X1+B1
  7432. SB2 X2-1R
  7433. ZR B2,SKP2 IF BLANK
  7434. NE B2,B1,ERR1 IF NOT COMMA
  7435. SA6 A1
  7436. RJ ASD ASSEMBLE RECORD COUNT
  7437. SB2 X7
  7438. SKP2 SA1 T1 SET FILE NAME
  7439. SA5 T2
  7440. LX6 X1
  7441. BX7 X7-X7 SEND SKIPPING MESSAGE
  7442. SA6 A
  7443. SA7 RAFA+1
  7444. MESSAGE A7-B1,1
  7445. NZ X5,SKP3 IF BACKSPACE
  7446. SKIPF A,B2,R
  7447. EQ RDD4 EXIT
  7448.  
  7449. SKP3 SKIPB A,B2,R
  7450. EQ RDD4 EXIT
  7451. SKIPR SPACE 4,10
  7452. *** SKIPR FNAME,RNAME
  7453. *
  7454. * SKIP RECORDS ON FILE *FNAME* THROUGH RECORD *RNAME*.
  7455.  
  7456.  
  7457. SKIPR RJ SAF SET ALTERNATE FILE
  7458. SA1 CH CHECK NEXT CHARACTER
  7459. SA2 X1
  7460. SX6 X1+B1
  7461. SB2 X2-1R,
  7462. NZ B2,ERR1 IF NOT COMMA
  7463. SA6 A1 SKIP COMMA
  7464. RJ ASN ASSEMBLE RECORD NAME
  7465. BX5 X6
  7466. SA1 T1 SET FILE NAME
  7467. BX7 X1
  7468. SA7 A
  7469. SKR1 READ A BEGIN READ
  7470. READW X2,BUF,BUFL
  7471. MI X1,SKR3 IF EOF
  7472. SX1 B6 LWA+1 OF DATA READ
  7473. SX2 BUF SET RECORD TYPE
  7474. RJ SRT SET RECORD TYPE
  7475. BX0 X7 SAVE NAME
  7476. SA7 RAFA+1
  7477. MESSAGE A7-B1,1
  7478. SKR2 READW A,BUF,BUFL
  7479. ZR X1,SKR2 IF NOT EOR/EOF/EOI
  7480. BX7 X0-X5 COMPARE NAMES
  7481. NZ X7,SKR1 IF NO MATCH
  7482. EQ RDD4 EXIT
  7483.  
  7484. SKR3 SX6 =C*RECORD NOT FOUND.*
  7485. SA6 ERRM
  7486. EQ RDD4
  7487. CRD SPACE 4,10
  7488. ** CRD - CONDITIONALLY READ DIRECTORY.
  7489. *
  7490. * USES ALL.
  7491. *
  7492. * CALLS RDR.
  7493.  
  7494.  
  7495. CRD SUBR ENTRY/EXIT
  7496. SA1 DL
  7497. PL X1,CRDX IF DIRECTORY ALREADY READ - RETURN
  7498. SA5 P+7
  7499. RJ RDR READ DIRECTORY
  7500. NZ X0,ABT IF ERRORS IN OPL
  7501. SA1 L.TDKN SET ORIGINAL DECK TABLE LENGTH
  7502. BX6 X1
  7503. SA6 DL
  7504. EQ CRDX RETURN
  7505. RDR SPACE 4,20
  7506. ** RDR - READ DIRECTORY FROM PROGRAM LIBRARY.
  7507. *
  7508. * CHECK PROGRAM LIBRARY FORMAT. READ DECK NAME TABLE.
  7509. *
  7510. * ENTRY (A5) - ADDRESS OF FILE NAME.
  7511. * (X5) - FILE NAME.
  7512. *
  7513. * EXIT (X0) - 0, IF NO ERRORS.
  7514. * (A0) - ADDRESS OF ERROR MESSAGE, IF ERROR.
  7515. *
  7516. * USES ALL.
  7517. *
  7518. * CALLS ABT, ADW, ATS, RDW=.
  7519.  
  7520.  
  7521. RDR5 SA0 =C* ERROR IN DIRECTORY.*
  7522. RDR6 SX0 B1+ ERROR RETURN
  7523.  
  7524. RDR SUBR ENTRY/EXIT
  7525. BX0 X0-X0 CLEAR ERROR
  7526. ZR X5,RDRX IF NO PROGRAM LIBRARY - RETURN
  7527. RECALL M
  7528. BX6 X5
  7529. SA6 X2
  7530. SKIPEI X2
  7531. SKIPB M,2 BACKSPACE OVER DIRECTORY
  7532. READ M
  7533. READW X2,TIDT,TIDTL READ IDENT TABLE
  7534. SA0 =C* PROGRAM LIBRARY EMPTY.*
  7535. NZ X1,RDR6 IF EOR - FILE NOT FOUND
  7536. SA1 TIDT
  7537. LX1 18
  7538. SA2 A1+B1
  7539. SB2 X1-770000B
  7540. NZ B2,RDR5 IF NO IDENT TABLE
  7541. BX6 X2 SET PROGRAM LIBRARY NAME
  7542. SA6 PL
  7543. READW M,T1,1 READ FIRST WORD
  7544. NZ X1,RDR5 IF EOR
  7545. SA1 T1
  7546. SX5 X1 SET DIRECTORY LENGTH
  7547. LX1 18
  7548. SB2 X1-700000B
  7549. NZ B2,RDR5 IF NOT DIRECTORY
  7550. ZR X5,RDR5 IF EMPTY
  7551. ALLOC TNDK,X5,S ALLOCATE TABLE SLACK FOR LARGE BLOCK
  7552. RDR2 READW M,T1,2 READ RECORD NAME
  7553. SA1 T1 CHECK TYPE
  7554. SB2 X1-OPRT
  7555. ZR B2,RDR3 IF OPL DECK
  7556. NE B2,B1,RDR4 IF NOT OPL COMMON DECK
  7557. ERRNZ OPRT+1-OCRT CODE ASSUMES VALUE
  7558. RDR3 ADDWRD TNDK,X1 ENTER DECK NAME
  7559. SA1 T2 ENTER RANDOM INDEX
  7560. ADDWRD A0,X1
  7561. RDR4 SX5 X5-2
  7562. NZ X5,RDR2 IF NOT AT END OF DIRECTORY
  7563. SX5 A5 ADD DECKS
  7564. RJ ADK ADD DECK
  7565. RECALL M RESET SCRATCH BUFFER
  7566. SA1 X2+B1
  7567. SA2 M+7
  7568. SX6 X1
  7569. BX7 X2
  7570. SA6 A1+B1
  7571. SA6 A6+B1
  7572. SA7 A1-B1
  7573. BX0 X0-X0
  7574. EQ RDRX RETURN
  7575. SAF SPACE 4,15
  7576. ** SAF - SET ALTERNATE INPUT FILE.
  7577. *
  7578. * EXIT (X6) - FILE NAME AND STATUS.
  7579. * (X7) - FILE NAME, ZERO FILL.
  7580. * (T1) - FILE NAME AND STATUS.
  7581. *
  7582. * USES X - 0, 1, 3, 6, 7.
  7583. * A - 1, 6.
  7584. * B - 2, 6, 7.
  7585. *
  7586. * CALLS ASN.
  7587.  
  7588.  
  7589. SAF SUBR ENTRY/EXIT
  7590. SA1 A
  7591. ZR X1,SAF1 IF ALTERNATE FILE NOT ACTIVE
  7592. SX6 =C*OPERATION INCORRECT FROM ALTERNATE INPUT.*
  7593. EQ ERR
  7594.  
  7595. SAF1 RJ ASN ASSEMBLE NAME
  7596. ZR X6,ERR2 IF NO NAME - FORMT ERROR
  7597. MX0 42
  7598. SB6 FETS SET FET SEARCH
  7599. SB7 FETSL
  7600. SB2 FETLEN+FETODL
  7601. SAF2 SA1 B6 READ FET NAME
  7602. BX3 X6-X1
  7603. SB6 B6+B2
  7604. BX7 X0*X3
  7605. NZ X7,SAF3 IF NO MATCH
  7606. SX6 =C*RESERVED FILE NAME.*
  7607. EQ ERR
  7608.  
  7609. SAF3 NE B6,B7,SAF2 IF MORE FETS TO PROCESS
  7610. SX1 B1 SET CODED FILE STATUS
  7611. BX7 X0*X6
  7612. IX6 X7+X1
  7613. SA6 T1 SET NEW FILE NAME
  7614. EQ SAFX RETURN
  7615. WTF SPACE 4,12
  7616. ** WTF - WRITE LINE TO TEXT FILE.
  7617. *
  7618. * ADD LINE TO TEXT TABLE, IF NOT FULL. OTHERWISE WRITE TO
  7619. * TEXT FILE.
  7620. *
  7621. * USES X - 1, 2, 3, 4, 6.
  7622. * A - 0, 1, 2, 3, 4, 6.
  7623. * B - 2, 3.
  7624. *
  7625. * CALLS ATS, CCD.
  7626.  
  7627.  
  7628. WTF SUBR ENTRY/EXIT
  7629. SA1 CDWC ADVANCE FTEXT ADDRESS
  7630. SA2 T+5
  7631. SA3 T CHECK FTEXT FILE
  7632. IX6 X1+X2
  7633. SA6 A2
  7634. NZ X3,WTF2 IF TEXT FILE BEGUN
  7635. ALLOC TTXT,X1 ALLOCATE ROOM
  7636. SA4 T
  7637. SA1 CDWC
  7638. NZ X4,WTF2 IF TEXT FILE BEGUN
  7639. SB3 X1
  7640. IX3 X2+X3
  7641. SB2 B0
  7642. IX4 X3-X1
  7643. SA1 CDTX
  7644. WTF1 BX6 X1 COPY TEXT LINE
  7645. SA6 X4+B2
  7646. SB2 B2+B1
  7647. SA1 A1+B1
  7648. NE B2,B3,WTF1 IF NOT AT END OF LINE
  7649. EQ WTFX RETURN
  7650.  
  7651. WTF2 WRITEW T,CDTX,X1
  7652. EQ WTFX RETURN
  7653. SPACE 4
  7654. ** ADDITIONAL COMMON DECKS.
  7655.  
  7656.  
  7657. *CALL COMCSRT
  7658. SPACE 4
  7659. ** INPUT DIRECTIVE PROCESSOR TABLE.
  7660.  
  7661.  
  7662. HERE
  7663. CON 0 END OF TABLE
  7664. IDENT SPACE 4
  7665. IDENT
  7666. QUAL PRESET
  7667. ERR SPACE 4,4
  7668. ERRMI PBUF+PBUFL-* DIRECTIVE PROCESSOR OVERFLOWS INTO PRESET
  7669. PRESET TITLE MODIFY PRESET.
  7670. PRS SPACE 4,10
  7671. ** PRS - PRESET MODIFY.
  7672. *
  7673. * ENTRY (A0) - FL.
  7674. *
  7675. * USES X - 1, 2, 4, 6.
  7676. * A - 0, 1, 2, 4, 6.
  7677. * B - 4, 5.
  7678. *
  7679. * CALLS ARG, IAF, ICS, IVI, IXQ, IZI, PCV, SMM, SOF.
  7680. *
  7681. * MACROS CLOCK, DATE, GETFLC, GETPP, WRITEC.
  7682.  
  7683.  
  7684. PRS SUBR ENTRY/EXIT
  7685. BX6 X0 SAVE *ECS* FIELD LENGTH
  7686. SA6 EFL
  7687. SX6 A0-10B
  7688. SA6 FL SET FIELD LENGTH
  7689. GETFLC SFL
  7690. SA1 SFL
  7691. MX2 -12
  7692. LX1 -36
  7693. BX6 -X2*X1 LAST COMMAND FL
  7694. LX6 6 *100
  7695. SX1 CMFL COMPARE DEFAULT FL
  7696. LX1 6
  7697. IX2 X1-X6 DEFAULT - LAST COMMAND FL
  7698. NG X2,PRS1 IF LAST COMMAND FL .GT. DEFAULT FL
  7699. BX6 X1
  7700. PRS1 SA6 A1+ SET FL
  7701. DATE DATE REQUEST DATE
  7702. SA1 DATE SET DATE IN SHORT TITLE
  7703. BX6 X1
  7704. SA6 TERDT
  7705. SA1 ACTR SET ARGUMENT COUNT
  7706. SA2 DATE SET DATE IN IDENT TABLE
  7707. SB4 X1
  7708. BX6 X2
  7709. SA6 TIDT+2
  7710. CLOCK TIME REQUEST TIME
  7711. SA1 TIME SET TIME IN SHORT TITLE
  7712. BX6 X1
  7713. SA6 TERTM
  7714. SB5 ARGT AGRUMENT TABLE ADDRESS
  7715. SA4 ARGR FIRST ARGUMENT
  7716. RJ ARG PROCESS ARGUMENTS
  7717. SA0 =C* ERROR IN MODIFY ARGUMENTS.*
  7718. NZ X1,ABT1 IF ARGUMENT ERROR
  7719. RJ SOF SET OUTPUT FORMAT
  7720. RJ SMM SET MODIFICATION MODE
  7721. RJ IAF INITIALIZE ALL FILES
  7722. RJ IXQ INITIALIZE *X* OR *Q* MODE PARAMETERS
  7723. ZR X1,ABT1 IF ERROR IN *Q* OR *X* MODE
  7724. RJ PCV PROCESS CONVERSION OPTION
  7725. NZ X4,ABT1 IF ERROR IN *CV* OPTION
  7726. RJ IZI INITIALIZE *Z* MODE INPUT
  7727. RJ IVI INITIALIZE VARIOUS ITEMS
  7728. RJ ICS INITIALIZE CHARACTER SET
  7729. NZ X6,ABT1 IF INCORRECT CHARACTER SET SPECIFIED
  7730. GETPP BUF,LL,BUF GET PAGE SIZE PARAMETERS
  7731. RJ IOD INITIALIZE OPTICAL DISK FET EXTENSIONS
  7732. SA1 TO
  7733. ZR X1,PRSX IF TERMINAL OUTPUT
  7734. WRITEC O,BUF WRITE PRINT DENSITY FORMAT CONTROL
  7735.  
  7736. EQ PRSX RETURN
  7737. TITLE ARGUMENT TABLE AND PRESET TEMPORARIES.
  7738. ARGT SPACE 4,10
  7739. ** ARGT - ARGUMENT TABLE.
  7740.  
  7741.  
  7742. ARGT BSS 0
  7743. A ARG -NSN,AM COMPRESSED COMPILE
  7744. BL ARG -NSN,BL BURSTABLE LISTING
  7745. C ARG C,C COMPILE FILE
  7746. CB ARG CASD,CASD,400B *CB* OPTION
  7747. CG ARG NGTXT,CASF,400B *CG* OPTION
  7748. CL ARG CLO,CASC,400B *CL* OPTION
  7749. CS ARG CASE,CASE,400B *CS* OPTION
  7750. CV ARG CVT,CVT CONVERSION OPTION
  7751. D ARG -NSN,DB DEBUG MODE
  7752. F ARG -NSN,FM FULL MODIFY MODE
  7753. I ARG I,I INPUT FILE
  7754. L ARG O,O LIST OUTPUT FILE
  7755. LO ARG LO,LO,400B LIST OPTIONS
  7756. N ARG NNPL,N NEW PROGRAM LIBRARY
  7757. NR ARG -NSN,NR *NR* OPTION
  7758. P ARG P,P PROGRAM LIBRARY
  7759. Q ARG NASSM,QM *Q* OPTION
  7760. S ARG NSOURCE,S SOURCE FILE
  7761. U ARG -NSN,UM *U* MODE
  7762. X ARG NASSM,XM *X* MODE
  7763. Z ARG -*,ZM *Z* MODE
  7764. ARG
  7765. SPACE 4,10
  7766. ** PRESET TEMPORARIES.
  7767.  
  7768.  
  7769.  
  7770. NNPL CON 0LNPL+3
  7771. NSOURCE CON 0LSOURCE+1
  7772. NASSM CON 0LCOMPASS
  7773. NGTXT CON 0LSYSTEXT
  7774. NSN CON 1
  7775. CLO CON 0LOUTPUT
  7776. TITLE MODIFY PRESET SUBROUTINES.
  7777. IAF SPACE 4,20
  7778. ** IAF - INITIALIZE ALL FILES.
  7779. *
  7780. * CHECK FOR FILE NAME CONFLICTS AND INITIALIZE ALL FILES.
  7781. *
  7782. * USES X - 0, 1, 2, 3, 4, 6, 7.
  7783. * A - 0, 1, 2, 3, 4, 6, 7.
  7784. * B - 2, 5, 6, 7.
  7785.  
  7786.  
  7787. IAF SUBR ENTRY/EXIT
  7788.  
  7789. * CHECK FOR FILE NAME CONFLICTS.
  7790.  
  7791. SB6 FETS INITIALIZE FOR FET SEARCH
  7792. SB7 FETSL
  7793. MX0 42
  7794. SB2 FETLEN+FETODL LENGTH OF EACH FET+EXTENSION
  7795. SA0 =C* FILE NAME CONFLICT.*
  7796. IAF1 SA1 B6+ OUTER SEARCH LOOP
  7797. SB5 B6+B2 ADVANCE TO NEXT FET
  7798. BX1 X0*X1 CLEAR C/S BITS
  7799. IAF2 SA2 B5+ INNER SEARCH LOOP
  7800. BX2 X0*X2 CLEAR C/S BITS
  7801. BX7 X2-X1 COMPARE
  7802. ZR X2,IAF3 IF FILE NOT DEFINED
  7803. ZR X7,ABT1 IF FILE NAMES COMPARE
  7804. IAF3 SB5 B5+B2 ADVANCE INNER SEARCH LOOP
  7805. LT B5,B7,IAF2 IF SEARCH NOT COMPLETE
  7806. SB6 B6+B2
  7807. NE B6,B7,IAF1 IF NOT COMPLETE
  7808.  
  7809. * INITIALIZE FILES.
  7810.  
  7811. SA1 O SET UP FOR INTERACTIVE I/O
  7812. BX6 X0*X1
  7813. SX2 A1 ADDRESS OF FET
  7814. BX7 X7-X7
  7815. IX6 X6+X2
  7816. R= A6,ARGR
  7817. SA7 A6+B1
  7818. EVICT A,R
  7819. EVICT M,R
  7820. SA1 S CHCK FOR SOURCE REQUESTED
  7821. ZR X1,IAF4 IF NOT SOURCE FILE
  7822. REWIND A1
  7823. SA1 AM CHECK FOR *A*, *X* OR *Q* SELECTED
  7824. SA2 XM
  7825. SA3 QM
  7826. SA0 =C* S OPTION INCORRECT WITH X, Q, OR A.*
  7827. BX4 X1+X2
  7828. BX4 X4+X3
  7829. NZ X4,ABT1 IF EITHER *A*, *X*, OR *Q* SELECTED
  7830. SX7 CBUF+CBUFL REDUCE COMPILE FILE BUFFER LENGTH
  7831. SA7 C+4
  7832. IAF4 SA1 N CHECK FOR NEW PROGRAM LIBRARY
  7833. ZR X1,IAF5 IF NO NEW PROGRAM LIBRARY
  7834. BX6 X1 SAVE FILE NAME
  7835. SA6 N+7
  7836. EVICT A1,R
  7837. IAF5 SA1 NR CHECK FOR *NR* SELECTED
  7838. NZ X1,IAF6 IF *NR* SELECTED
  7839. REWIND C,R
  7840. IAF6 SA1 P SAVE OLD PROGRAM LIBRARY FILE NAME
  7841. BX6 X1
  7842. BX7 X7-X7 CLEAR SCRATCH FILE NAME
  7843. SA6 P+7
  7844. SA7 A
  7845. EQ IAFX
  7846. SPACE 4
  7847. ** IOD - INITIALIZE OPTICAL DISK FET EXTENSIONS.
  7848. *
  7849. * USES X - 0, 1, 2, 3, 6, 7.
  7850. * A - 1, 2, 3, 6, 7.
  7851. * B - 6, 7.
  7852.  
  7853.  
  7854. IOD SUBR ENTRY/EXIT
  7855.  
  7856. * CHECK FOR OPTICAL DISK FILE AND SET EXTENSION.
  7857.  
  7858. SX6 FETS INITIALIZE FOR FET SEARCH
  7859. IOD1 SA1 X6 LOAD FIRST FET WORD
  7860. MX0 42
  7861. SA6 IODA
  7862. SX6 X6-M
  7863. ZR X6,IOD1.1 IF FILE M
  7864. SA2 IODB
  7865. BX3 X0*X1 FILE NAME
  7866. SX2 X2
  7867. BX6 X3+X2
  7868. SA6 A2
  7869. FILINFO IODB GET FILE INFORMATION
  7870. SA3 IODB+1 GET DEVICE TYPE AND STATUS
  7871. AX3 48
  7872. SX2 X3-2ROD OPTICAL DISK DEVICE TYPE
  7873. NZ X2,IOD2 IF NOT OPTICAL DISK DEVICE
  7874. IOD1.1 SA2 IODA
  7875. SX7 FETODL OPTICAL DISK FET EXTENSION LENGTH
  7876. SX3 X2+12B SET OPTICAL FET BUFFER AFTER FET
  7877. LX7 18
  7878. BX7 X3+X7
  7879. SA7 X2+11B STORE POINTER AND LENGTH
  7880. OPEN X2,READNR,R
  7881. IOD2 SX0 FETLEN+FETODL
  7882. SA2 IODA
  7883. IX6 X2+X0
  7884. SB6 X6
  7885. SB7 FETSL
  7886. LT B6,B7,IOD1 IF FET SCAN NOT COMPLETE
  7887. SB6 0
  7888. SB7 FETODL
  7889. IOD3 SA1 B6+P+FETLEN MOVE P FET EXTENSION TO M
  7890. BX6 X1
  7891. SA6 B6+M+FETLEN
  7892. SB6 B6+B1
  7893. NE B7,B6,IOD3 IF NOT DONE WITH MOVE
  7894. EQ IODX RETURN
  7895.  
  7896. IODA BSSZ 1 FET ADDRESS STORAGE
  7897. IODB VFD 42/0,6/5,12/1 *FILINFO* PARAMETER BLOCK
  7898. BSSZ 5
  7899. ICS SPACE 4,20
  7900. ** ICS - INITIALIZE CHARACTER SET.
  7901. *
  7902. * CHECK AND INITIALIZE CHARACTER SET AND
  7903. * ENSURE COMPRESSED COMPILE FILE IS NOT IN USE.
  7904. *
  7905. * ENTRY (CSR) = CHARACTER SET NAME.
  7906. *
  7907. * EXIT (X6) = 0, IF NO ERROR ENCOUNTERED.
  7908. * (A0) = ADDRESS OF ERROR MESSAGE, IF APPROPRIATE.
  7909. * (CSC) = CURRENT CHARACTER SET.
  7910. *
  7911. * USES X - 1, 2, 3, 4, 6, 7.
  7912. * A - 1, 2, 7.
  7913. * B - NONE.
  7914. *
  7915. * MACROS TSTATUS.
  7916. *
  7917. * CALLS RCS, STF.
  7918.  
  7919. ICS SUBR ENTRY/EXIT
  7920. SA2 I
  7921. MX3 42
  7922. BX4 X3*X2
  7923. ZR X4,ICS2 IF *Z* INPUT
  7924. SX2 A2
  7925. RJ STF
  7926. NZ X6,ICS2 IF NOT CONNECTED *INPUT* FILE
  7927. TSTATUS ICSA GET TERMINAL CHARACTER SET
  7928. MX3 -1
  7929. SA2 ICSA+1
  7930. LX2 -2
  7931. BX1 -X3*X2 (X1) = 0 FOR DISPLAY, 1 FOR ASCII
  7932. BX6 -X1
  7933. SA6 TI TERMINAL INPUT CHARACTER SET FLAG
  7934. ICS2 RJ /DIRECT/RCS RESET CHARACTER SET
  7935. SA0 X6 SET POSSIBLE ERROR MESSAGE
  7936. EQ ICSX RETURN
  7937.  
  7938. ICSA BSSZ 2 TSTATUS RETURN BLOCK
  7939. IVI SPACE 4,15
  7940. ** IVI - INITIALIZE VARIOUS ITEMS.
  7941. *
  7942. * SPACE FILL COMMAND, PRESET DECK INENTIFIER TABLE
  7943. * AND SET ASSUMED MODIFIER NAME.
  7944. *
  7945. * USES X - 1, 6.
  7946. * A - 0, 1, 6.
  7947. * B - 4, 5.
  7948. *
  7949. * CALLS ADW, SFN.
  7950.  
  7951.  
  7952. IVI SUBR ENTRY/EXIT
  7953. SB4 B0+ BLANK FILL COMMAND
  7954. SB5 8
  7955. IVI1 SA1 CCDR+B4
  7956. RJ SFN SPACE FILL NAME
  7957. SB4 B4+B1
  7958. SA6 A1
  7959. NE B4,B5,IVI1 IF NOT COMPLETE
  7960. BX6 X6-X6
  7961. SA6 A6+B1 SET END OF LINE
  7962. ADDWRD TDKI,X6-X6 PRESET DECK IDENTIFIER TABLE
  7963. SA1 =7L******* SET ASSUMED MODIFIER NAME
  7964. ADDWRD TNME,X1
  7965. ADDWRD A0,X6-X6
  7966. EQ IVIX RETURN
  7967. IXQ SPACE 4,20
  7968. ** IXQ - INITIALIZE *X* OR *Q* MODE PARAMETERS.
  7969. *
  7970. * ENTRY (XM) - COMMAND *X* MODE PARAMETER.
  7971. * (QM) - COMMAND *Q* MODE PARAMETER.
  7972. * (ZM) = CONTROL STATEMENT *Z* MODE PARAMETER.
  7973. *
  7974. * EXIT (X1) - 0, IF ERROR ENCOUNTERED.
  7975. * (A0) - ADDRESS OF ERROR MESSAGE, IF APPROPRIATE.
  7976. *
  7977. * USES X - ALL.
  7978. * A - ALL.
  7979. * B - 2.
  7980. *
  7981. * CALLS SFN, ZTB.
  7982. *
  7983. * MACROS REWIND.
  7984.  
  7985.  
  7986. IXQ4 SX1 B1+
  7987.  
  7988. IXQ SUBR ENTRY/EXIT
  7989. SA1 XM CHECK *X* OR *Q* SELECTED
  7990. SA2 QM
  7991. BX1 X1+X2
  7992. MX0 -6
  7993. ZR X1,IXQ4 IF NEITHER SELECTED
  7994. RJ SFN SPACE FILL ASSEMBLER NAME
  7995. BX6 X0*X6
  7996. SX7 1R(
  7997. BX6 X6+X7
  7998. SA1 C SET COMPILE FILE NAME
  7999. MX2 42 CLEAR C/S BITS
  8000. BX1 X2*X1
  8001. SA0 =C* X OR Q INCORRECT WITHOUT COMPILE.*
  8002. ZR X1,IXQX IF NO COMPILE FILE
  8003. SA7 AM SELECT MODIFY *A* MODE
  8004. SA2 LO CHECK USER SELECTED LIST OPTIONS
  8005. SA6 CASG SET ASSEMBLER NAME
  8006. NZ X2,IXQ1 IF USER SELECTED LIST OPTION
  8007. SX7 1S"LO.E" SELECT ERROR LIST
  8008. SA7 LO SET LIST OPTION
  8009. IXQ1 SA5 IXQA SET UP PARAMETER STENCIL
  8010. SA4 =0L0
  8011. LX1 -12 MOVE ASSEMBLER INPUT FILE NAME INTO PLACE
  8012. BX1 X1+X5 OVERLAY WITH STENCIL
  8013. RJ ZTB CONVERT ZEROES TO BLANKS
  8014. SA1 CASC GET LIST OPTION SPECIFIED
  8015. SA6 A6+B1 SET ASSEMBLER LIST OPTION
  8016. SA5 A5+B1 SET UP STENCIL FOR ASSEMBLER LIST OPTION
  8017. BX7 X4-X1 CHECK FOR DISPLAY *0*
  8018. NZ X7,IXQ2 IF COMPASS LIST SELECTED
  8019. SA7 CMNF CLEAR COMPILE FILE COMMENTS FLAG
  8020. IXQ2 LX1 -12 POSITION ARGUMENT
  8021. BX1 X1+X5 OVERLAY WITH STENCIL
  8022. RJ ZTB CONVERT ZEROES TO BLANKS
  8023. SA1 CASD ASSLEMBLER BINARY OUTPUT FILE
  8024. SA6 A6+B1 SET LIST OPTION
  8025. SA5 A5+B1 BINARY OUTPUT PARAMETER STENCIL
  8026. LX1 -12 POSITION ARGUMENT
  8027. BX1 X1+X5
  8028. RJ ZTB CONVERT ZEROES TO BLANKS
  8029. SA1 CASE ASSEMBLER *S* OPTION
  8030. SA6 A6+B1 BINARY OUTPUT FILE NAME
  8031. SA5 A5+B1
  8032. LX1 -12
  8033. BX1 X1+X5
  8034. RJ ZTB CONVERT ZEROES TO BLANKS
  8035. SA1 CASF ASSEMBLER *G* OPTION
  8036. SA5 A5+B1
  8037. BX2 X4-X1
  8038. ZR X2,IXQ3 IF *G* NOT SELECTED
  8039. SA4 IXQB CLEAR *S* IF *G* SELECTED
  8040. BX6 X4
  8041. IXQ3 SA6 A6+B1 *S* OPTION TO COMMAND
  8042. LX1 -12 SET *G* OPTION
  8043. BX1 X1+X5
  8044. RJ ZTB CONVERT ZEROES TO BLANKS
  8045. SX7 2RA)
  8046. SA6 A6+B1 *G* OPTION TO COMMAND
  8047. LX7 48
  8048. SA1 XM CHECK FOR MODIFY *X* MODE
  8049. SA7 A6+B1 COMMAND TERMINATOR
  8050. ZR X1,IXQ4 IF *X* NOT SELECTED - RETURN
  8051. REWIND O REWIND OUTPUT FILE
  8052. SA1 ZM CHECK FOR MODIFY *Z* MODE
  8053. NZ X1,IXQX IF SELECTED
  8054. REWIND I REWIND INPUT FILE
  8055. EQ IXQ4 RETURN
  8056.  
  8057. IXQA CON 2LI=+1R, INPUT COMMAND STENCIL
  8058. CON 2LL=+1R, LIST COMMAND STENCIL
  8059. CON 2LB=+1R, BINARY OUTPUT COMMAND STENCIL
  8060. CON 2LS=+1R, *S* OPTION COMMAND STENCIL
  8061. CON 2LG=+1R, *G* OPTION COMMAND STENCIL
  8062. IXQB CON 10HS=0 ,
  8063. IZI SPACE 4,20
  8064. ** IZI - INITIALIZE *Z* MODE INPUT.
  8065. *
  8066. * CLEARS THE FILE NAME IN THE *INPUT* FILE FET AND
  8067. * ENTERS THE *Z* DIRECTIVES IN THE *INPUT* FILE
  8068. * CIRCULAR BUFFER.
  8069. *
  8070. * ENTRY (ZM) = NONZERO IF *Z* MODE SELECTED.
  8071. *
  8072. * EXIT (I) = FILE NAME CLEARED.
  8073. * = CIRCULAR BUFFER PRESET WITH CONTROL STATEMENT
  8074. * *Z* MODE DIRECTIVES.
  8075. *
  8076. * USES A - 2, 6.
  8077. * X - 2, 6.
  8078. * B - 2, 3.
  8079. *
  8080. * CALLS ZAP.
  8081.  
  8082.  
  8083. IZI SUBR ENTRY/EXIT
  8084. SA2 ZM CHECK FOR *Z* MODE
  8085. ZR X2,IZIX IF NOT SELECTED, RETURN
  8086. SA2 I CLEAR *INPUT* FILE NAME
  8087. MX6 -18
  8088. BX6 -X6*X2
  8089. SA6 A2
  8090. SX2 A2 SET FET ADDRESS FOR *ZAP*
  8091. RJ ZAP PROCESS *Z* MODE DIRECTIVES
  8092. SA2 IW
  8093. SX6 1R CLEAR INPUT BUFFER
  8094. SB2 CHAR+X2
  8095. SB3 CHAR+IWMAX
  8096. IZI1 EQ B2,B3,IZIX IF COMPLETE
  8097. SA6 B2
  8098. SB2 B2+B1
  8099. EQ IZI1 CONTINUE CLEARING BUFFER
  8100. PCV SPACE 4,15
  8101. ** PCV - PROCESS *CV* OPTION.
  8102. *
  8103. * ENTRY (CVT) - .NE. 0, IF *CV* OPTION SELECTED.
  8104. *
  8105. * EXIT (X4) - 0, IF NO ERROR.
  8106. * (A0) - ADDRESS OF ERROR MESSAGE, IF APPROPRIATE.
  8107. *
  8108. * USES X - ALL.
  8109. * A - 0, 1, 5, 6.
  8110. * B - 2, 3, 4, 5, 7.
  8111. *
  8112. * CALLS DXB.
  8113.  
  8114.  
  8115. PCV1 SA1 CSMR SET NEW PROGRAM LIBRARY CHARACTER SET
  8116. SX6 64B
  8117. MI X1,PCV2 IF SYSTEM IS 64 CHARACTER SET
  8118. SX6 B0+
  8119. PCV2 SA6 CNPL CHARACTER SET OF NEW PROGRAM LIBRARY
  8120.  
  8121. PCV SUBR ENTRY/EXIT
  8122. SA5 CVT CHECK FOR CONVERSION SPECIFIED
  8123. BX4 X4-X4 CLEAR ERROR
  8124. SB7 B0 SET OCTAL BASE
  8125. ZR X5,PCV1 IF NO CONVERSION SPECIFIED
  8126. SA1 MAD64
  8127. BX1 X5-X1 COMPARE CVT AND MAD64
  8128. NZ X1,PCV0 IF MAD64 NOT SPECIFIED
  8129. SX6 B1
  8130. SA6 MADCV SET MADIFY CONVERSION FLAG
  8131. SA1 MOD64
  8132. BX6 X1
  8133. SA6 CVT TREAT AS 63 TO 64 CONVERSION
  8134. BX5 X6 UPDATE X5 AS WELL
  8135. PCV0 BSS 0
  8136. RJ DXB CONVERT TO BINARY
  8137. SA0 =C* CV OPTION INCORRECT.*
  8138. NZ X4,PCVX IF INCORRECT *CV* OPTION
  8139. SA6 A5+ SET OPTION
  8140. SB2 X6-63B CHECK OPTION
  8141. BX6 X6-X6
  8142. SA6 C CLEAR COMPILE FILE IF CONVERTING
  8143. ZR B2,PCV2 IF *63*
  8144. SX6 64B
  8145. EQ B1,B2,PCV2 IF *64*
  8146. SX4 B1+ SET ERROR
  8147. EQ PCVX IF NOT *64* OR *63*
  8148.  
  8149. MAD64 CON 5LMAD64
  8150. MOD64 CON 2L64
  8151. SLC SPACE 4,20
  8152. ** SLC - SET LIST CONTROL.
  8153. *
  8154. * EXIT (LO) INITIALIZED.
  8155. *
  8156. * USES X - ALL.
  8157. * A - 0, 1, 3, 6, 7.
  8158. * B - 2, 3, 4.
  8159.  
  8160.  
  8161. SLC3 SA6 LO
  8162.  
  8163. SLC SUBR ENTRY/EXIT
  8164. SX4 B1+ BIT CONSTANT
  8165. SA1 LO GET *LO* OPTIONS
  8166. MX0 -6
  8167. BX6 X6-X6 INITIALIZE RESULT REGISTER
  8168. ZR X1,SLCX IF NOT SELECTED
  8169. SA0 =C* -LO- ERROR MUST BE IN -ECTMWDSIA-.*
  8170. SB2 SLCA LIST OPTION TABLE
  8171. SLC1 LX1 6 PICK NEXT LETTER
  8172. BX5 -X0*X1
  8173. ZR X5,SLC3 IF COMPLETE
  8174. SB3 B0+
  8175. SLC2 SA3 B2+B3 GET NEXT OPTION
  8176. BX2 X5-X3 COMPARE
  8177. ZR X3,ABT1 IF END OF OPTION TABLE
  8178. SB3 B3+B1 ADVANCE INDEX
  8179. NZ X2,SLC2 IF NO MATCH
  8180. SB4 B3-B1
  8181. LX7 X4,B4
  8182. BX6 X6+X7 ADD CURRENT OPTION
  8183. EQ SLC1 LOOP FOR NEXT LETTER
  8184.  
  8185. SLCA BSS 0 OPTION TABLE
  8186. OPTION HERE
  8187. CON 0 END OF TABLE
  8188. SMM SPACE 4,20
  8189. ** SMM - SET MODIFICATION MODE.
  8190. *
  8191. * SET MODIFICATION MODE ACCORDING TO *F* AND
  8192. * *U* OPTIONS. THE *F* OPTION OVER-RIDES THE
  8193. * *U* OPTION.
  8194. *
  8195. * EXIT (UM) INITIALIZED.
  8196. *
  8197. * USES X - 1, 2, 6.
  8198. * A - 1, 2, 6.
  8199.  
  8200.  
  8201. SMM SUBR ENTRY/EXIT
  8202. SA1 FM
  8203. SA2 UM
  8204. BX6 X6-X6 SET TO CLEAR *U* MODE
  8205. NZ X1,SMM1 IF *F* MODE SELECTED
  8206. BX6 X2 RESET *U* MODE
  8207. SMM1 SA6 A2 CLEAR/SET *U* MODE
  8208. EQ SMMX RETURN
  8209. SOF SPACE 4,20
  8210. ** SOF - SET OUTPUT FORMAT.
  8211. *
  8212. * SET TERMINAL OUTPUT FLAG AND DEFAULT LIST OPTIONS.
  8213. *
  8214. * ENTRY (LO) = CONTROL STATEMENT *LO* PARAMETERS.
  8215. * = 0 IF OMITTED.
  8216. *
  8217. * EXIT (LO) = LIST OPTION BIT MAP.
  8218. * = DEFAULT OPTIONS IF OMITTED FROM
  8219. * CONTROL STATEMENT.
  8220. * (TO) = 0 IF OUTPUT ASSIGNED TO
  8221. * INTERACTIVE TERMINAL.
  8222. *
  8223. * USES X - 1, 2, 6.
  8224. * A - 1, 2, 6.
  8225. *
  8226. * CALLS SLC, STF.
  8227.  
  8228.  
  8229. SOF SUBR ENTRY/EXIT
  8230.  
  8231. * SET TERMINAL FILE DEFAULT OPTIONS.
  8232.  
  8233. SX2 O CHECK OUTPUT FILE RESIDENCE
  8234. RJ STF
  8235. SA6 TO SET TERMINAL OUTPUT FLAG
  8236. SA2 SOFA
  8237. ZR X6,SOF2 IF ASSIGNED TO TERMINAL
  8238.  
  8239. * SET NON-TERMINAL FILE DEFAULT OPTIONS.
  8240.  
  8241. SA1 XM
  8242. NZ X1,SOF2 IF *X* PARAMETER SELECTED
  8243. SA2 SOFB SET *X* DEFAULT OPTIONS
  8244.  
  8245. * PROCESS SPECIFIED OR DEFAULT OPTIONS.
  8246.  
  8247. SOF2 SA1 LO READ CONTROL STATEMENT OPTIONS
  8248. NZ X1,SOF3 IF OPTIONS ENTERED
  8249. BX6 X2 STORE DEFAULT OPTIONS
  8250. SA6 A1
  8251. SOF3 RJ SLC SET LIST CONTROLS
  8252. EQ SOFX RETURN
  8253.  
  8254. SOFA CON 0LE DEFAULT TERMINAL OPTIONS
  8255. SOFB CON 0LECTMWDS DEFAULT NON-TERMINAL OPTIONS
  8256. COMMON SPACE 4,10
  8257. ** PRESET COMMON DECKS.
  8258.  
  8259.  
  8260. QUAL$ EQU 1 PREVENT QUALIFICATION
  8261. *CALL COMCARG
  8262. *CALL COMCCPM
  8263. *CALL COMCSTF
  8264. *CALL COMCUSB
  8265. *CALL COMCZAP
  8266. *CALL COMCZTB
  8267. MODIFY TTL MODIFY - SOURCE LIBRARY EDITING PROGRAM.
  8268. SPACE 4
  8269. *CALL COMCLFM
  8270. END MODIFY SOURCE LIBRARY EDITING PROGRAM