User Tools

Site Tools


cdc:nos2.source:opl871:edit

Table of Contents

EDIT

Table Of Contents

  • [00008] EDIT - TIME SHARING TEXT EDITOR.
  • [00013] TIME SHARING TEXT EDITOR.
  • [00180] ASSEMBLY CONSTANTS.
  • [00206] MACRO DEFINITIONS.
  • [00208] COMMAND - GENERATE ENTRY IN COMMAND AND PROCESSOR TABLES.
  • [00235] CEPF - CHECK EOI ON PRIMARY EDIT FILE.
  • [00248] INTRPT - PROCESS TERMINAL INTERRUPT
  • [00263] FETS.
  • [00290] COMMAND TABLE.
  • [00350] DATA STORAGE.
  • [00383] POINTER WORD - FBW, LBW, SLP.
  • [00410] MAIN - CRACKS COMMAND AND LOCATES PROCESSOR.
  • [02447] UTILITY ROUTINES.
  • [02449] ANC - ASSEMBLE NEXT CHARACTER.
  • [02491] AFW - ADVANCE FILES AND WRITE.
  • [02543] ATF - ADVANCE TEXT FILE.
  • [02583] ATL - ASSEMBLE TABBED LINE.
  • [02671] BLK - INSERTS BLANK AFTER COLON AT END OF LINE.
  • [02726] BSP - BACKSPACE POINTER.
  • [02755] CAC - COUNT ASCII CHARACTERS.
  • [02811] CFC - CHECK FOR COLON.
  • [02833] CPY - REPOSITION TEXT FILES.
  • [02887] CRN - CHECK RESERVED FILE NAME.
  • [02919] CST - COUNT STRINGS.
  • [03006] CTI - CHECK TERMINAL INTERRUPTS.
  • [03030] CTL - COMPRESS TEXT LEFT.
  • [03130] ETX - PROCESS TEXT ENTRY.
  • [03298] GSM - GENERATE STRINGS PROCESSED MESSAGE.
  • [03321] IBC - INSERT BLANK CHARACTERS.
  • [03387] PCC - PROMPT FOR COMMAND CONTINUANCE.
  • [03450] PUR - PROCESS USER RESPONSE.
  • [03505] PURA - TABLE OF LEGAL RESPONSES.
  • [03520] PSB - POSITION STRING BUFFER.
  • [03574] PSO - PRELIMINARY STRING SEARCH.
  • [03602] RSR - RESTORE WORKING REGISTERS.
  • [03616] RTF - REPOSITION TEXT FILES (READ ONLY OPERATIONS).
  • [03659] SBT - SET BLANK TERMINATOR.
  • [03704] SFS - SEARCH FILE FOR STRING.
  • [03760] SLS - SEARCH LINE FOR STRING.
  • [03910] TCHM - TABLE OF CHARACTER MASKS.
  • [03926] SLT - SET LINE TERMINATOR.
  • [03979] SML - SEARCH MODIFIED LINE.
  • [04005] SRO - SEARCH READ ONLY.
  • [04062] SVR - SAVE WORKING REGISTERS.
  • [04080] WNL - WRITE NEW ALIGNED LINE.
  • [04174] COMMON DECKS.
  • [04380] ERR - ISSUE COMMAND ERROR MESSAGE.
  • [04389] TARG - TABLE OF ARGUMENTS.
  • [04403] MARG - TABLE OF MODE ARGUMENTS.

Source Code

EDIT.txt
  1. IDENT EDIT,FETS
  2. ABS
  3. ENTRY EDIT
  4. ENTRY RFL=
  5. ENTRY SSM=
  6. SST
  7. SYSCOM B1
  8. TITLE EDIT - TIME SHARING TEXT EDITOR.
  9. SPACE 4
  10. *COMMENT EDIT - TIME SHARING TEXT EDITOR.
  11. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
  12. SPACE 4
  13. *** EDIT - TIME SHARING TEXT EDITOR.
  14. * P. D. HAAS 72/07/10.
  15. * S. L. KSANDER. 75/09/10.
  16. SPACE 4
  17. *** EDIT IS A TIME SHARING PACKAGE PROVIDING THE TERMINAL USER
  18. * WITH A SET OF COMMANDS BY WHICH TO CREATE, MODIFY,
  19. * OR OTHERWISE MANIPULATE A DATA FILE.
  20. *
  21. * THE BASIC STRUCTURE OF A COMMAND IS-
  22. *
  23. * COMMAND:/PHRASE/;N
  24. *
  25. * A /PHRASE/ IS THE COMMAND COMPONENT WHICH SPECIFIES A
  26. * CHARACTER STRING OF INTEREST. IT MAY BE OF A SIMPLE FORM
  27. * /P1/, OR COMPLEX /P1/,/P2/. THE PARAMETER N IS A SPECIFIC-
  28. * ATOR WHICH INDICATES THE NUMBER OF LINES THE COMMAND WILL
  29. * AFFECT OR THE NUMBER OF TIMES THE COMMAND WILL ACT ON THE
  30. * PRESENCE OF /PHRASE/.
  31. SPACE 4
  32. *** THE COMMAND FORMAT.
  33. *
  34. * EDIT(FN=LFN,M=M,I=IFN,L=OFN)
  35. * OR
  36. * EDIT(LFN,M,IFN,OFN)
  37. *
  38. * LFN FILENAME TO BE EDITED.
  39. *
  40. * M MODE OF PROCESSING FOR CURRENT EDIT SESSION.
  41. * IF EITHER THE DIRECTIVE INPUT FILE (I) OR THE
  42. * OUTPUT FILE (L) IS ASSIGNED TO A
  43. * TIME-SHARING TERMINAL, A *TELEX* CALL IS
  44. * MADE TO SET THE TERMINAL CONTROL FOR THE EDIT SESSION.
  45. *
  46. * ASCII - FULL ASCII MODE.
  47. * AS
  48. * NORMAL - NORMAL CHARACTER MODE.
  49. * N
  50. * (DEFAULT=NORMAL)
  51. *
  52. * IFN FILENAME FROM WHICH TO READ INPUT DIRECTIVES.
  53. * (DEFAULT=INPUT)
  54. *
  55. * OFN FILENAME ON WHICH EDITOR OUTPUT IS WRITTEN.
  56. * (DEFAULT=OUTPUT)
  57. SPACE 4
  58. *** TERMINAL INTERRUPT PROCESSING. (*DISTC* CONTROL)
  59. *
  60. * IF THE USER,S DIRECTIVE INPUT FILE (I) IS ASSIGNED TO
  61. * A TIME-SHARING TERMINAL, *DISTC* PROCESSING IS ENABLED.
  62. * IN ALL OTHER CASES, TERMINAL INPTERRUPTS WILL INTERRUPT
  63. * OR TERMINATE THE EDIT SESSION.
  64. SPACE 4
  65. *** DAYFILE MESSAGES.
  66. *
  67. * * COMMAND ERROR.* - AN INCORRECT OR INVALID PARAMETER
  68. * HAS BEEN DETECTED ON THE *EDIT* COMMAND.
  69. *
  70. * * RESERVED FILE NAME.* - FILE NAME SPECIFIED ON *EDIT*
  71. * COMMAND IS RESERVED FOR USE BY THE EDITOR (SCR, SCR1,
  72. * SCR2, SCR3, SCR4), OR IS A DUPLICATE OF THE INPUT, OUTPUT,
  73. * OR TEXT FILE NAME.
  74. SPACE 4,10
  75. *** OUTPUT MESSAGES.
  76. *
  77. * * BEGIN TEXT EDITING.* - INFORMATIVE MESSAGE INDICATING
  78. * EDITOR IS READY TO BEGIN ACCEPTING COMMANDS.
  79. *
  80. * * COMMAND CONTINUE?* - INQUIRY AS TO WHETHER OR NOT AN
  81. * INTERRUPTED COMMAND SHOULD CONTINUE TO BE PROCESSED.
  82. *
  83. * * DISREGARD PREVIOUS TEXT?* - AN INTERRUPT AS BEEN SENSED
  84. * WHILE INPUTTING TEXT. *YES* OR *Y* RESPONSE WILL DISCARD
  85. * ALL ENTERED TEXT. *NO* OR *N* WILL PROCESS ALL TEXT ENTERED
  86. * TO THIS POINT. MESSAGE WILL BE RE-ISSUED IF AN INCORRECT
  87. * RESPONSE IS GIVEN. AN INTERRUPT AS A RESPONSE WILL SIMULATE
  88. * AN *END* COMMAND.
  89. *
  90. * * EDIT FILE NOT IN WRITE MODE.*
  91. * * DO YOU WISH TO CONTINUE?* - WARNING TO TERMINAL USER
  92. * THAT THE EDIT FILE IS NOT ASSIGNED IN WRITE MODE, AND
  93. * INQUIRY AS TO WHETHER THE USER WISHES TO CONTINUE EDITING.
  94. * IF *NO* OR *N* RESPONSE IS ENTERED, *EDIT* WILL TERMINATE.
  95. * IF *YES* OR *Y* RESPONSE IS ENTERED, EDITING IS ALLOWED,
  96. * BUT *EDIT* WILL EVENTUALLY ABORT WITH AN ERROR DIAGNOSTIC
  97. * SUCH AS *WRITE ON READ ONLY FILE*.
  98. *
  99. * * -END OF FILE- * - INFORMATIVE MESSAGE INDICATING THAT
  100. * THE TEXT FILE IS POSITIONED AFTER THE LAST LINE OF TEXT,
  101. * OR THAT THE END OF TEXT WAS ENCOUNTERED DURING *LIST* OR
  102. * *FIND* COMMAND PROCESSING.
  103. *
  104. * * END TEXT EDITING.* - INFORMATIVE MESSAGE INDICATING
  105. * TERMINATION OF EDIT SESSION.
  106. *
  107. * * ENTER TEXT.* - REQUESTS ENTRY OF NEW OR REPLACEMENT
  108. * TEXT FOR *ADD(S)* OR *CHANGE(S)* COMMAND.
  109. *
  110. * * ENTER TEXT FILE NAME.* - REQUESTS ENTRY OF EDIT FILE
  111. * NAME, SINCE IT WAS NOT SPECIFIED ON THE *EDIT* COMMAND.
  112. *
  113. * * ENTER *YES* OR *NO*.* - PROMPTS THE USER TO ENTER A
  114. * RESPONSE FOR A PREVIOUS ENQUIRY.
  115. *
  116. * * FILE AT LINE NUMBER N.* - INFORMATIVE MESSAGE INDICATING
  117. * THAT THE TEXT FILE IS CURRENTLY POSITIONED AT LINE NUMBER N.
  118. *
  119. * * INCORRECT COMMAND.* - ERROR MESSAGE INDICATING THE COMMAND
  120. * NAME ENTERED IS NOT A VALID COMMAND.
  121. *
  122. * * INCORRECT DELIMITER.* - ERROR MESSAGE INDICATING AN
  123. * INCORRECT DELIMITER WAS USED IN RESPONSE TO THE *ENTER TEXT*
  124. * REQUEST FROM A NON-INTERACTIVE JOB. THE *ADD(S)* OR
  125. * *CHANGES(S)* COMMAND IS TERMINATED.
  126. *
  127. * * INCORRECT DELIMITER - REENTER TEXT.* - ERROR MESSAGE
  128. * INDICATING AN INCORRECT DELIMITER WAS USED IN RESPONSE TO
  129. * THE *ENTER TEXT* REQUEST FROM AN INTERACTIVE JOB.
  130. * REQUESTS REENTRY OF TEXT WITH A VALID DELIMITER.
  131. *
  132. * * INCORRECT FILE NAME.* - ERROR MESSAGE INDICATING FILE NAME
  133. * PASSED WITH *MERGE* COMMAND IS INCORRECT.
  134. *
  135. * * IMPROPER TRUNCATION.* - ERROR MESSAGE INDICATING THE
  136. * LENGTH SPECIFIED ON THE *LENGTH;N* COMMAND IS GREATER
  137. * THAN OR EQUAL TO THE PREVIOUS LENGTH SPECIFIED.
  138. *
  139. * * INTERRUPT AT LINE N.* - INFORMATIVE MESSAGE INDICATING
  140. * THE CURRENT POSITION IN THE TEXT FILE OF AN INTERRUPTED
  141. * COMMAND.
  142. *
  143. * * MERGE ERROR, SECONDARY FILE EMPTY.* - ERROR MESSAGE
  144. * INDICATING THAT THE FILE TO BE MERGED WITH THE EDIT FILE
  145. * IS EMPTY, DOES NOT EXIST, OR IS NOT LOCAL TO THE JOB
  146. * (PERMANENT FILE MUST BE ATTACHED PRIOR TO EDIT SESSION).
  147. *
  148. * * PHRASE NOT FOUND.* - INFORMATIVE MESSAGE INDICATING THE
  149. * SPECIFIED SEARCH STRING WAS NOT FOUND.
  150. *
  151. * * READY.* - INFORMATIVE MESSAGE INDICATING THE NEXT COMMAND
  152. * CAN BE ENTERED.
  153. *
  154. * * RESERVED FILE NAME.* - ERROR MESSAGE INDICATING THAT THE
  155. * FILE NAME SPECIFIED ON THE *MERGE* COMMAND IS RESERVED FOR
  156. * USE BY THE EDITOR (SCR, SCR1, SCR2, SCR3, SCR4), OR IS A
  157. * DUPLICATE OF THE INPUT, OUTPUT, OR TEXT FILE NAME.
  158. *
  159. * * TAB STOPS NONE.* - INFORMATIVE MESSAGE INDICATING NO TAB
  160. * STOPS ARE CURRENTLY ESTABLISHED.
  161. *
  162. * * TAB STOPS T1 T2 ... TN* - INFORMATIVE MESSAGE ISSUED
  163. * IN RESPONSE TO *LISTAB* COMMAND INDICATING THE TEXT EDITOR
  164. * TAB STOPS THAT ARE IN EFFECT.
  165. *
  166. * * XXXXXXX SYNTAX ERROR.* - ERROR MESSAGE INDICATING IMPROPER
  167. * SYNTAX WAS USED WITH TEXT EDITOR COMMAND XXXXXXX.
  168. *
  169. * * N LINES TO EOF.* - INFORMATIVE MESSAGE INDICATING THE
  170. * LINE COUNT FROM THE CURRENT SEARCH POINTER TO THE LAST
  171. * LINE IN THE TEXT FILE.
  172. *
  173. * * N LINES TO INTERRUPT.* - INFORMATIVE MESSAGE INDICATING
  174. * NUMBER OF LINES OR OCCURRENCES OF PHRASE FOUND IN TEXT
  175. * FILE BEFORE THE INTERRUPT WAS DETECTED.
  176. *
  177. * * N OCCURRENCES OF PHRASE FOUND.* - INFORMATIVE MESSAGE
  178. * INDICATING THAT THE END OF TEXT WAS ENCOUNTERED BEFORE THE
  179. * NUMBER OF ITERATIONS SPECIFIED IN THE COMMAND WERE COMPLETED.
  180. TITLE ASSEMBLY CONSTANTS.
  181. * ASSEMBLY CONSTANTS.
  182. SPACE 4
  183. TABCL EQU 150 MAXIMUM TAB VALUE
  184. TTBLL EQU 7 MAXIMUM NUMBER OF TABS
  185. NLR EQU 8 NUMBER OF LENGTH RECORDS
  186. MINWD EQU 6 MINIMUM SIZE FOR WIDTH
  187. MAXWD EQU 150 MAXIMUM SIZE FOR WIDTH
  188. CMDBL EQU MAXWD*2 LENGTH OF COMMAND BUFFER
  189. STRBL EQU MAXWD*2 LENGTH OF CHARACTER BUFFER
  190. USBL$ EQU 1 VARIABLE LENGTH OPTION FOR UNPACK BUFFER
  191. USBBL EQU MAXWD*2 UNPACK STRING BUFFER LENGTH
  192. CCBL EQU 80 COMMAND BUFFER LENGTH
  193. LBUFL EQU 30 LENGTH OF LINE BUFFER
  194. FETL EQU 7 FET LENGTH
  195. OBUFL EQU 201B LENGTH OF O-BUFFER (OUTPUT)
  196. IBUFL EQU 101B LENGTH OF I-BUFFER (INPUT)
  197. MBUFL EQU 201B LENGTH OF M-BUFFER (SCR)
  198. BBUFL EQU 201B LENGTH OF B-BUFFER (SCR2)
  199. FBUFL EQU 1001B LENGTH OF F-BUFFER (SCR5)
  200. CBUFL EQU FBUFL/2
  201.  
  202.  
  203. * SPECIAL ENTRY POINT.
  204.  
  205. SSM= EQU 0 SUPPRESS DUMPS OF FIELD LENGTH
  206. TITLE MACRO DEFINITIONS.
  207. SPACE 4
  208. ** COMMAND - GENERATE ENTRY IN COMMAND AND PROCESSOR TABLES.
  209. *
  210. * COMMAND CNAM,CPROC,STR1,STR2,NUM
  211. *
  212. * CNAM COMMAND NAME.
  213. * CPROC COMMAND PROCESSOR ADDRESS.
  214. * STR1 FIRST STRING SPECIFICATION IS ALLOWED.
  215. * STR2 SECOND STRING SPECIFICATION IS ALLOWED.
  216. * NUM NUMERIC FIELD SPECIFICATION IS ALLOWED.
  217.  
  218.  
  219. COMMAND MACRO CNAM,CPROC,P1,P2,P3
  220. LOCAL A,B,C
  221. A SET 0
  222. B SET 0
  223. C SET 0
  224. ECHO ,P=(P1,P2,P3)
  225. IFC EQ,$P$STR1$,1
  226. A SET 1
  227. IFC EQ,$P$STR2$,1
  228. B SET 1
  229. IFC EQ,$P$NUM$,1
  230. C SET 1
  231. ENDD
  232. VFD 42/0L_CNAM,1/A,1/B,1/C,15/CPROC
  233. ENDM
  234. SPACE 4
  235. ** CEPF - CHECK EOI ON PRIMARY EDIT FILE.
  236. *
  237. * LOC TRANSFER IF NOT PRIMARY FILE.
  238. * R REGISTER USED.
  239.  
  240.  
  241. CEPF MACRO LOC,R
  242. SA_R PFADR
  243. BX7 X_R-X5
  244. SX5 X_R
  245. NZ X7,LOC
  246. ENDM
  247. INTRPT SPACE 4
  248. ** INTRPT - PROCESS TERMINAL INTERRUPT
  249. *
  250. * ALL OUTPUT DATA IN THE BUFFER WILL BE ISSUED PRIOR
  251. * TO PROMPT MESSAGE.
  252. *
  253. * NO - ADDRESS IF COMMAND TO NOT CONTINUE AFTER INTERRUPT.
  254.  
  255.  
  256. INTRPT MACRO NO
  257. + RJ PCC
  258. - EQ NO
  259. ENDM
  260. SPACE 4
  261. *CALL COMCMAC
  262. *CALL COMSTCM
  263. TITLE FETS.
  264. ORG 105B
  265. FETS BSS 0
  266.  
  267. F BSS 0 TEXT FILE
  268. SCR5 FILEC FBUF,FBUFL,FET=7,EPR
  269. SPACE 3
  270. S BSS 0 SCRATCH FILE
  271. SCR4 FILEC SBUF,FBUFL,FET=7
  272. SPACE 3
  273. SC BSS 0 SECONDARY SCRATCH FILE
  274. SCR1 FILEC SCBUF,FBUFL,FET=7
  275. SPACE 3
  276. B BSS 0 STRING BUFFER FILE
  277. SCR2 FILEC BBUF,BBUFL,FET=7
  278. SPACE 3
  279. M BSS 0 MERGE FILE
  280. SCR FILEC MBUF,MBUFL,FET=7,EPR
  281. SPACE 3
  282. I BSS 0 INPUT FILE
  283. INPUT FILEC IBUF,IBUFL,FET=7
  284. SPACE 3
  285. O BSS 0 OUTPUT FILE
  286. OUTPUT FILEC OBUF,OBUFL,FET=7
  287. SPACE 3
  288. T BSS 0 LENGTH FILE
  289. SCR3 RFILEC CMDB,FBUFL
  290. TITLE COMMAND TABLE.
  291. TCMD BSS 0 TABLE OF COMMAND KEYWORDS
  292. COMMAND A,ADD,STR1,NUM
  293. COMMAND ADD,ADD,STR1,NUM
  294. COMMAND ADDS,ADDS,STR1,NUM
  295. COMMAND AL,ALIGN,STR1,STR2,NUM
  296. COMMAND ALIGN,ALIGN,STR1,STR2,NUM
  297. COMMAND AS,ADDS,STR1,NUM
  298. COMMAND B,BLANK,STR1,STR2,NUM
  299. COMMAND BLANK,BLANK,STR1,STR2,NUM
  300. COMMAND BLANKS,BLANKS,STR1,STR2,NUM
  301. COMMAND BS,BLANKS,STR1,STR2,NUM
  302. COMMAND C,CHANGE,STR1,STR2,NUM
  303. COMMAND CHANGE,CHANGE,STR1,STR2,NUM
  304. COMMAND CHANGES,CHANGES,STR1,STR2,NUM
  305. COMMAND CL,CLEAR
  306. COMMAND CLEAR,CLEAR
  307. COMMAND CS,CHANGES,STR1,STR2,NUM
  308. COMMAND D,DELETE,STR1,STR2,NUM
  309. COMMAND DEFTAB,DEFTAB,STR1
  310. COMMAND DELETE,DELETE,STR1,STR2,NUM
  311. COMMAND DELETES,DLETES,STR1,STR2,NUM
  312. COMMAND DS,DLETES,STR1,STR2,NUM
  313. COMMAND DT,DEFTAB,STR1
  314. COMMAND E,XTRACT,STR1,STR2,NUM
  315. COMMAND END,END
  316. COMMAND ES,XTRACTS,STR1,STR2,NUM
  317. COMMAND EXTRACT,XTRACT,STR1,STR2,NUM
  318. COMMAND F,FIND,STR1,STR2,NUM
  319. COMMAND FIND,FIND,STR1,STR2,NUM
  320. COMMAND FINDS,FINDS,STR1,STR2,NUM
  321. COMMAND FS,FINDS,STR1,STR2,NUM
  322. COMMAND INSERTS,INSERTS,STR1,STR2,NUM
  323. COMMAND IS,INSERTS,STR1,STR2,NUM
  324. COMMAND L,LIST,STR1,STR2,NUM
  325. COMMAND LENGTH,LENGTH,NUM
  326. COMMAND LINE,LINE
  327. COMMAND LIST,LIST,STR1,STR2,NUM
  328. COMMAND LISTAB,LISTAB
  329. COMMAND LISTS,LISTS,STR1,STR2,NUM
  330. COMMAND LN,LINE
  331. COMMAND LS,LISTS,STR1,STR2,NUM
  332. COMMAND LT,LISTAB
  333. COMMAND M,MERGE,STR1,STR2,NUM
  334. COMMAND MERGE,MERGE,STR1,STR2,NUM
  335. COMMAND N,NUMBER,STR1,STR2
  336. COMMAND NS,NUMBERS,STR1,STR2
  337. COMMAND NUMBER,NUMBER,STR1,STR2
  338. COMMAND NUMBERS,NUMBERS,STR1,STR2
  339. COMMAND R,RESET
  340. COMMAND RESET,RESET
  341. COMMAND RS,RPLACES,STR1,STR2,NUM
  342. COMMAND S,SET,STR1,NUM
  343. COMMAND SET,SET,STR1,NUM
  344. COMMAND STOP,END6
  345. COMMAND T,TABS,STR1
  346. COMMAND TAB,TABS,STR1
  347. COMMAND W,WIDTH,NUM
  348. COMMAND WIDTH,WIDTH,NUM
  349. TCMDL EQU *-TCMD
  350. TITLE DATA STORAGE.
  351. ** DATA STORAGE.
  352.  
  353.  
  354. MODE BSS 4 MODE FLAG
  355. STPHR1 EQU MODE+1 POINTER TO /P1/
  356. STPHR2 EQU STPHR1+1 POINTER TO /P2/
  357. WDTH CON 72 DEFAULT WITDH
  358. SVLC CON 0 SEARCH POINTER
  359. PFADR CON F FET ADDRESS OF PRIMARY TEXT FILE
  360. JOTY CON 0 JOB ORIGIN TYPE
  361. TFILE CON 1 EDIT FILE NAME
  362. INTP CON 0 INTERRUPT PENDING
  363. TINT CON 0 TERMINAL INTERRUPT INDICATOR
  364. TFLEN CON 377776B LENGTH OF EDIT FILE
  365. DAFF CON 0 DIRECT ACCESS FILE FLAG
  366. EOFIF CON 1 EOF ON INPUT FLAG
  367. EOFTF CON 0 EOF ON TEXT FILE FLAG
  368. FBB CON 340B FILE BIAS BITS
  369. TABCH CON 1S59 TAB CHARACTER
  370. ASC CON 0 ESCAPE CODE INDICATOR (-76B IF SET)
  371. AFLI CON 0 ALIGN FIELD LENGTH INDICATOR
  372.  
  373. TTBL CON 11 START OF PRESET TAB COLUMNS
  374. CON 18
  375. CON 30
  376. CON 40
  377. CON 50
  378. BSSZ TTBLL-*+TTBL+1
  379. BLKS CON 1H BLANK WORD
  380. BLKL VFD 12/2H ,48/0
  381.  
  382.  
  383. ** POINTER WORD - FBW, LBW, SLP.
  384. *
  385. *T 1/S,35/POSITION,24/ADDRESS
  386. * *S* = STATUS OF POINTER, NEGATIVE INDICATES
  387. * POINTER IS AT END OF LINE.
  388. * *POSITION* = CHARACTER POSITION WITHIN WORD (0 - 9)
  389. * *ADDRESS* = ADDRESS OF WORD CONTAINING *POSITION*.
  390. *
  391. * THE ORDER OF THE FOLLOWING MUST BE MAINTAINED.
  392.  
  393. FBW CON 0 FIRST CHARACTER BUFFER POINTER WORD
  394. LBW CON 0 LAST CHARACTER BUFFER POINTER WORD
  395. SLP CON 0 SOURCE LINE POINTER
  396.  
  397. LBA CON LBUF LINE BUFFER ADDRESS
  398.  
  399. NUM CON 0 COMMAND NUMERIC FIELD
  400. SEC CON 0 SEARCH COUNT
  401. ICT CON 0 INTERRUPT PROCESSING SEARCH COUNT
  402.  
  403. LCT CON 0 LINE COUNT
  404. LBL CON 0 LINE BUFFER LWA
  405. TBL CON 0 TEMPORARY BUFFER LWA
  406.  
  407. RTFP CON 0 TEXT FILE BUFFER POINTER
  408. TBST CON 0 TEXT FILE BUFFER STATUS
  409. MAIN TITLE COMMAND CRACKER.
  410. ** MAIN - CRACKS COMMAND AND LOCATES PROCESSOR.
  411. *
  412. * ENTRY (JOTY) - JOB ORIGIN TYPE.
  413. * (EOFIF) - INPUT FILE STATUS.
  414. * (ASC) - ASCII INDICATOR.
  415. * (TFILE) - EDIT FILE NAME.
  416. * (DAFF) - DIRECT ACCESS TEXT FILE FLAG.
  417. * (EOFTF) - TEXT FILE STATUS.
  418. * (LBL) - LINE BUFFER LAST WORD ADDRESS.
  419. *
  420. * EXIT (NUM) - ABSOLUTE VALUE OF NUMERIC FIELD, DEFAULT OF 1.
  421. * (SEC) - NEGATE OF (NUM).
  422. * (A3) = STPHR1.
  423. *T STPHR1 36/NUMBER OF CHARACTERS IN STRING P1,24/P1 BEGINNING ADDRESS
  424. * (A4) = STPHR2.
  425. *T STPHR2 36/NUMBER OF CHARACTERS IN STRING P2,24/P2 BEGINNING ADDRESS
  426. * (A5) - FET ADDRESS OF WRITE FILE.
  427. * (X0) = (X2) = (NUM).
  428. * (X1) = (X7) = 0.
  429. * (X3) = (STPHR1).
  430. * (X4) = (STPHR2).
  431. * (X5) - FET ADDRESS OF READ FILE.
  432. * (B7) = 1, IF NUMERIC FIELD NEGATIVE, 0 OTHERWISE.
  433. *
  434. * USES ALL.
  435. *
  436. * CALLS ANC, CFC, SFN, COMMAND PROCESSORS.
  437.  
  438.  
  439. MAIN22 SB4 X2-1R
  440. NZ B4,MAIN23 IF NOT BLANK CHARACTER
  441. SB2 B2+B1
  442. SA2 B2
  443. NE B2,B6,MAIN22 IF NOT END OF INPUT
  444. EQ MAIN17
  445.  
  446. MAIN23 SB4 X2-1R$
  447. ZR B4,MAIN17 IF COMMENTS FIELD
  448.  
  449. * PROCESS SYNTAX ERROR.
  450.  
  451. MAINX SA1 SEM
  452. RJ SFN BLANK FILL COMMAND WORD
  453. SA6 A1
  454. WRITEC O,A6
  455.  
  456. MAIN RJ CTI CLEAR TERMINAL INTERRUPTS
  457. SA3 JOTY
  458. ZR X6,MAIN2 IF NOT INTERRUPT PENDING
  459. NZ X3,MAIN1 IF NOT INTERACTIVE INPUT
  460. RECALL I
  461. SA1 I+1 RESET INPUT FET
  462. SX6 X1
  463. SA6 A1+B1
  464. SA6 A6+B1
  465. BX7 X7-X7
  466. SA7 EOFIF
  467. MAIN1 RECALL O
  468. SA1 X2+B1 RESET OUTPUT FET
  469. SX6 X1
  470. SA6 A1+B1
  471. SA6 A6+B1
  472. BX7 X7-X7 CLEAR INTERRUPT PENDING
  473. SA7 INTP
  474. MAIN2 SA2 EOFIF CHECK INPUT STATUS
  475. NZ X2,MAIN3 IF NO EOF ON INPUT FILE
  476. SB5 END PRESET END COMMAND
  477. SB7 B0+ CLEAR NEGATIVE NUMERIC INDICATOR
  478. NZ X3,MAIN19 IF NOT INTERACTIVE JOB
  479. SX6 B1
  480. SA6 A2 CLEAR EOI STATUS
  481. READ I REINIATE READ
  482. MAIN3 READS I,CMDB,-CMDBL
  483. NZ X1,MAIN20 IF USER HIT (CR) ONLY
  484. SB2 CMDB-1 START OF COMMAND BUFFER
  485. SB3 7
  486. SB5 60
  487. SX7 B0+
  488.  
  489. * ASSEMBLE COMMAND WORD.
  490.  
  491. MAIN4 RJ ANC ASSEMBLE NEXT CHARACTER
  492. EQ B2,B6,MAIN5 IF END OF INPUT
  493. SX1 X2-1R
  494. ZR X1,MAIN4 IF BLANK CHARACTER
  495. ZR X4,MAIN5 IF NOT ALPHA CHARACTER
  496. SX1 X4-1R0
  497. PL X1,MAIN5 IF NOT ALPHA CHARACTER
  498. SX1 X3-74B
  499. ZR X1,MAIN5 IF 74B ESCAPE CHARACTER
  500. SB3 B3-1
  501. NG B3,MAIN21 IF COMMAND TOO LONG
  502. SB5 B5-6
  503. LX7 6
  504. BX7 X4+X7
  505. EQ MAIN4
  506.  
  507. * SEARCH FOR COMMAND.
  508.  
  509. MAIN5 ZR X7,MAIN21 IF NO COMMAND
  510. MX1 -6 MASK FOR MODE CHARACTER
  511. BX6 -X1*X7
  512. SX6 X6-1RS
  513. SA6 MODE SET MODE
  514. LX7 X7,B5 LEFT JUSTIFY COMMAND WORD
  515. SA1 =0LSTOP CHECK FOR STOP COMMAND
  516. BX5 X1-X7
  517. ZR X5,END6 IF STOP COMMAND
  518. RJ CTI CHECK TERMINAL INTERRUPT
  519. NZ X3,MAIN IF INTERRUPTED
  520. SX4 B1
  521. MX6 42
  522. SB3 TCMD-1 SET COMMAND TABLE ADDRESS
  523. SX3 TCMDL*2 SET TABLE LENGTH
  524. MAIN6 AX3 1
  525. PL X4,MAIN7 IF ENTRY TOO HIGH
  526. SB3 A1+B1 RAISE LOWER LIMIT
  527. MAIN7 SA1 X3+B3 GET NEXT ENTRY
  528. BX5 -X6*X1 CHECK FOR MATCH
  529. BX1 X6*X1
  530. IX4 X1-X7
  531. ZR X4,MAIN8 IF COMMAND FOUND
  532. NZ X3,MAIN6 IF NOT END OF SEARCH
  533. JP MAIN21 PROCESS INCORRECT COMMAND
  534.  
  535. MAIN8 SA7 SEM
  536. MX1 -15
  537. SX7 B1
  538. BX4 -X1*X5 GET PROCESSOR ADDRESS
  539. SX6 B0
  540. LX5 59-17
  541. SB5 X4
  542. SA6 STPHR1 CLEAR STRING FIELD POINTERS
  543. SB7 B0+
  544. SB3 -B1
  545. SA6 A6+B1
  546. EQ B2,B6,MAIN18 IF NO OPTIONAL FIELDS
  547. SX1 X2-1R;
  548. ZR X1,MAIN13 IF SPECIFICATOR FIELD NEXT
  549. RJ CFC CHECK FOR COLON
  550. NZ X3,MAIN23 IF INCORRECT SEPARATOR
  551.  
  552. * PROCESS CHARACTER STRING.
  553.  
  554. MAIN9 RJ ANC ASSEMBLE NEXT CHARACTER
  555. EQ B2,B6,MAINX IF PREMATURE END OF INPUT
  556. SX1 X2-1R
  557. ZR X1,MAINX IF INCORRECT DELIMITER
  558. SX1 X2-1R$
  559. ZR X1,MAINX IF INCORRECT DELIMITER
  560. BX0 X2 SAVE DELIMITER
  561. SX6 B2+B1
  562. SB3 B3+B1 INCREMENT STRING COUNT
  563. SB4 X6+
  564. MAIN10 RJ ANC ASSEMBLE NEXT CHARACTER
  565. EQ B2,B6,MAINX IF PREMATURE END OF INPUT
  566. BX1 X0-X2
  567. NZ X1,MAIN10 IF NOT DELIMITER
  568. ZR X3,MAIN11 IF NOT ASCII DELIMITER
  569. SX3 -1
  570. MAIN11 SA0 B2+X3
  571. SX1 A0-B4 NUMBER OF CHARACTERS IN STRING
  572. LX1 24
  573. BX6 X1+X6
  574. SA6 B3+STPHR1
  575. ZR X1,MAINX IF NULL STRING
  576. GT B3,B1,MAINX IF TOO MANY STRINGS
  577. BX1 X5
  578. LX1 X1,B3
  579. PL X1,MAINX IF STRING FIELD NOT ALLOWED
  580. MAIN12 RJ ANC ASSEMBLE NEXT CHARACTER
  581. EQ B2,B6,MAIN18 IF END OF INPUT
  582. SX1 X2-1R
  583. ZR X1,MAIN12 IF BLANK CHARACTER
  584. SX1 X2-1R,
  585. ZR X1,MAIN9 IF ANOTHER STRING FIELD
  586. SX1 X2-1R;
  587. NZ X1,MAIN23 IF INCORRECT SEPARATOR
  588.  
  589. * PROCESS NUMERIC FIELD.
  590.  
  591. MAIN13 LX5 59-15-59+17
  592. PL X5,MAINX IF NUMERIC FIELD NOT ALLOWED
  593. RJ ANC ASSEMBLE NEXT CHARACTER
  594. EQ B2,B6,MAINX IF PREMATURE END OF INPUT
  595. SX7 B0+
  596. SX1 X2-1R*
  597. NZ X1,MAIN14 IF NOT ASTERISK
  598. SX7 377776B SET INFINITE NUMERIC FIELD
  599. EQ MAIN18
  600.  
  601. MAIN14 SB4 X2-1R+
  602. ZR B4,MAIN15 IF PLUS SIGN
  603. SB4 B4-B1
  604. NZ B4,MAIN16 IF NOT MINUS SIGN
  605. SB7 B1
  606. MAIN15 SB2 B2+B1
  607. EQ B2,B6,MAINX IF PREMATURE END OF INPUT
  608. SA2 B2
  609. MAIN16 SX4 X2-1R+
  610. PL X4,MAIN22 IF NOT DIGIT
  611. SX4 X2-1R0
  612. NG X4,MAIN22 IF NOT DIGIT
  613. LX6 X7,B1
  614. LX7 3
  615. IX7 X6+X7 N(I-1)*10
  616. IX7 X7+X4 N(I-1)*10+N(I)
  617. SB2 B2+B1
  618. SA2 B2
  619. NE B2,B6,MAIN16 IF NOT END OF INPUT
  620. MAIN17 ZR X7,MAINX IF NUMERIC FIELD ZERO
  621. MX1 -17
  622. BX1 -X1*X7
  623. BX1 X7-X1
  624. NZ X1,MAINX IF NUMERIC FIELD TOO LARGE
  625.  
  626. MAIN18 SA7 NUM
  627. BX6 -X7
  628. SA6 A7+B1
  629. BX0 X7
  630. BX2 X7
  631. SX6 B5-SET
  632. ZR X6,MAIN19 IF *SET* COMMAND
  633. NZ B7,MAINX IF NUMERIC FIELD NEGATIVE
  634. MAIN19 MX7 -4
  635. SA1 FBB
  636. BX3 -X7*X1
  637. AX1 4
  638. BX6 -X7*X1
  639. SA4 STPHR2
  640. SA5 X6+F WRITE FILE
  641. SX5 X3+F READ FILE
  642. SA3 STPHR1 POINTER TO STRING FIELD /P1/
  643. BX7 X7-X7
  644. BX1 X1-X1
  645. JP B5 EXECUTE COMMAND
  646.  
  647. * PROCESS INCORRECT COMMAND.
  648.  
  649. MAIN20 SX7 0 SET EOI STATUS
  650. SA7 EOFIF
  651. MAIN21 RJ CTI CHECK TERMINAL INTERRUPTS
  652. NZ X6,MAIN IF INTERRUPTED
  653. WRITEC O,(=C* INCORRECT COMMAND.*)
  654. EQ MAIN
  655.  
  656.  
  657. SEM DATA C* SYNTAX ERROR.*
  658. ADD TITLE LINE COMMAND PROCESSORS.
  659. *** ADD (A) - ADD LINES.
  660. *
  661. * ONE OR MORE LINES ARE ADDED TO THE FILE BEING EDITED.
  662. * NEW DATA IS OBTAINED BY POSTING A REQUEST TO
  663. * * ENTER TEXT.* NEW TEXT IS ADDED AFTER THE NTH LINE OR
  664. * AFTER EACH OF THE FIRST N LINES CONTAINING /P1/.
  665.  
  666.  
  667. ADD BSS 0
  668. NZ X3,CHL1 IF STRING FIELD PRESENT
  669. ADL1 SA2 X1+ADLA
  670. BX6 X2
  671. SA6 ADL2 SET RJ FOR ADD/CHANGE
  672. RJ ETX PROCESS TEXT ENTRY
  673. ZR X0,MAIN IF NO TEXT ENTERED
  674. SA4 EOFTF
  675. BX7 X2 SAVE FET ADDRESS
  676. SA7 A6-B1
  677. ZR X4,ADL3 IF POSITIONED AT END OF INFORMATION
  678. ADL2 SA2 NUM
  679. RJ *
  680. ADL3 INTRPT SET2 PROCESS TERMINAL INTERRUPT
  681. SA2 RTFP RETRIEVE FET POINTER
  682. READW X2,TBUF,100B
  683. SB7 B6-TBUF NUMBER WORDS READ
  684. BX0 X1
  685. SX2 A5
  686. WRITEW X2,TBUF,B7
  687. ZR X0,ADL3 IF COPY NOT COMPLETE
  688. JP SET2
  689.  
  690.  
  691. ADLA SA2 NUM POSITION TEXT FILE FOR ADD COMMAND
  692. RJ AFW
  693. + SA2 SEC POSITION TEXT FILE FOR CHANGE COMMAND
  694. RJ ATF
  695. BLANK EJECT
  696. *** BLANK (B) - BLANK LINES.
  697. *
  698. * ONE OR MORE LINES OF DATA IN THE TEXT FILE ARE REPLACED
  699. * WITH BLANK LINES. LINES BLANKED ARE THE FIRST N LINES OR
  700. * THE FIRST N LINES CONTAINING /PHRASE/.
  701.  
  702.  
  703. BLANK BSS 0
  704. SA2 EOFTF
  705. ZR X2,LTL11 IF POSITIONED AT EOI
  706. ZR X3,BLL6 IF NO STRING FIELDS
  707. RJ PSO SEARCH FOR STRING
  708. BLL1 SA2 STPHR2
  709. NZ X2,BLL3 IF ELLIPSIS OPERATION
  710. BLL2 SA3 SEC
  711. BX6 X6-X6
  712. SX7 X3+B1 DECREMENT SEARCH COUNT
  713. SA6 LBUF
  714. SA7 A3
  715. SX0 B1
  716. ZR X7,SET2 IF ALL DONE
  717. INTRPT SET2 PROCESS TEMINAL INTERRUPT
  718. RJ SFS SEARCH FOR STRING
  719. NZ X7,BLL1 IF ANOTHER /P1/ FOUND
  720. JP CHL6
  721.  
  722. BLL3 SX1 B1 CHECK CURRENT LINE FOR /P2/
  723. RJ SLS
  724. ZR B7,BLL2 IF ONE LINE ELLIPSIS
  725. WRITEC A5,TCHM
  726. SX6 STPHR2 POSITION FILE AT /P2/
  727. RJ SRO
  728. SA4 X5+5
  729. SX7 X4+B4 ADVANCE READ FILE LINE POSITION
  730. SA7 A4
  731. BLL4 EQ B2,B1,BLL2 IF END OF ELLIPSIS IN NEXT LINE
  732. SX2 A5
  733. SX0 B1-B2
  734. BLL5 WRITEC X2,TCHM WRITE BLANK LINES
  735. SX0 X0+1
  736. NZ X0,BLL5 IF BLANKETY-BLANKS NOT ALL WRITTEN
  737. EQ BLL2
  738.  
  739. BLL6 BX2 -X0
  740. SA7 LBUF SET BLANK LINE
  741. SX2 X2+B1
  742. ZR X2,SET2 IF ONLY ONE BLANK LINE
  743. RJ ATF
  744. BX6 X6-X6
  745. MX4 8
  746. SA6 LBUF
  747. + LX4 1 SET EIGHT BLANK LINES
  748. SA6 A6+B1
  749. NG X4,*
  750. SA2 NUM
  751. SX0 X2-1
  752. BLL7 SB4 -8
  753. SX0 X0+B4
  754. SX2 A5
  755. SB7 B0-B4
  756. PL X0,BLL8 IF LINES ALL WRITTEN
  757. SB7 X0+B7
  758. BLL8 WRITEW X2,LBUF,B7
  759. INTRPT SET2 PROCESS TERMINAL INTERRUPT
  760. PL X0,BLL7 IF LINES NOT ALL BLANKED
  761. JP SET2
  762. CHANGE EJECT
  763. *** CHANGE (C) - CHANGE LINES.
  764. *
  765. * ONE OR MORE LINES OF TEXT ARE DELETED AND REPLACED WITH
  766. * DATA ENTERED IN RESPONSE TO THE EDIT REQUEST * ENTER TEXT.*
  767.  
  768.  
  769. CHANGE BSS 0
  770. SX1 1
  771. ZR X3,ADL1 IF NO STRING FIELDS
  772. CHL1 SA2 X1+CHLA
  773. BX6 X2 SET RJ FOR CHANGE/ADD
  774. SX1 B0
  775. SA2 EOFTF
  776. SA6 CHL3
  777. ZR X2,LTL11 IF POSITIONED AT EOF
  778. RJ PSO
  779. RJ ETX
  780. ZR X0,SET2 IF NO TEXT ENTERED
  781. BX7 X2
  782. SA7 A6-B1 SAVE FET ADDRESS
  783. CHL2 SA1 STPHR2
  784. ZR X1,CHL3 IF NOT ELLIPSIS OPERATION
  785. BX0 X0-X0
  786. SX6 A1 SEARCH/READ FOR PHRASE ENDING ELLIPSIS
  787. RJ SRO
  788. SA3 X5+5
  789. SX6 X3+B4 ADVANCE READ FILE LINE POSITION
  790. SA6 A3
  791. CHL3 SX2 -1 GET NEXT LINE
  792. RJ ATF
  793. * SX2 1 ADVANCE LINE FOR ADD COMMAND
  794. * RJ AFW
  795. SA2 RTFP TEXT FILE FET ADDRESS
  796. SA3 X2+5
  797. SX0 X3+ SET LINE COUNT OF REPLACEMENT DATA
  798. SA0 X2+
  799. CHL4 READC A0,TBUF,LBUFL
  800. SX0 X0-1 DECREMENT LINE COUNT
  801. WRITEC A5,TBUF
  802. NZ X0,CHL4 LOOP TO END OF TEXT
  803. SA3 SEC
  804. SX7 X3+B1 DECREMENT OPERATION COUNT
  805. SA7 A3
  806. ZR X7,CHL5 IF COUNTDOWN COMPLETE
  807. INTRPT CHL6 PROCESS TERMINAL INTERRUPT
  808. SA2 EOFTF
  809. SA4 STPHR2
  810. BX3 X2+X4
  811. SX1 B0
  812. ZR X3,CHL6 IF STRING OPERATION COMPLETE
  813. SX6 A4-B1
  814. BX0 X0-X0 LOCATE NEXT OCCURANCE OF /P1/
  815. RJ SFS
  816. ZR X7,CHL6 IF END OF INFORMATION
  817. SA2 RTFP
  818. SA3 X2+B1
  819. SX6 X3 SET OUT = FIRST
  820. SA4 TBST
  821. SA6 X2+3
  822. ZR X4,CHL2 IF TEXT ALL IN BUFFER
  823. REWIND X2
  824. READ X2 REINITIATE INPUT
  825. EQ CHL2
  826.  
  827. CHL5 SA3 STPHR2
  828. ZR X3,SET2 IF LINE REPLACEMENT COMPLETE
  829. CHL6 SA2 NUM
  830. SA4 A2+B1 NUMBER LINES PROCESSED
  831. IX1 X2+X4
  832. ZR X1,SET2 IF NONE CHANGED
  833. RJ GSM
  834. JP SET2
  835.  
  836.  
  837. CHLA SX2 1 ADVANCE LINE FOR ADD COMMAND
  838. RJ AFW
  839. + SX2 -1 ADVANCE LINE FOR CHANGE COMMAND
  840. RJ ATF
  841. DELETE EJECT
  842. *** DELETE (D) - DELETE LINES.
  843. *
  844. * ONE OR MORE LINES ARE DELETED FROM THE FILE BEING EDITED.
  845. * ALL LINES OF A MULTI-LINE /PHRASE/ ARE DELETED.
  846.  
  847.  
  848. DELETE BSS 0
  849. SA2 EOFTF
  850. ZR X2,LTL11 IF POSITIONED AT EOI
  851. ZR X3,DLL3 IF STRING FIELDS EMPTY
  852. RJ PSO
  853. DLL1 SA1 STPHR2
  854. ZR X1,DLL2 IF NOT ELLIPSIS OPERATION
  855. BX0 X0-X0
  856. SX6 A1
  857. RJ SRO FIND PHRASE ENDING ELLIPSIS
  858. SA4 X5+5
  859. SX7 X4+B4 ADVANCE READ FILE LINE POSITION
  860. SA7 A4
  861. DLL2 READC X5,LBUF,LBUFL
  862. NZ X1,DLL4 IF EOF ENCOUNTERED
  863. SA4 X5+5
  864. SX6 X4+B1 BUMP LINE ADVANCE
  865. SA6 A4
  866. SA3 SEC
  867. SX7 X3+B1 DECREMENT NUMERIC COUNT
  868. SA7 A3
  869. ZR X7,SET2 IF OPERATION COMPLETE
  870. INTRPT CHL6 PROCESS TERMINAL INTERRPUT
  871. BX0 X0-X0
  872. SX6 B0
  873. RJ SFS
  874. NZ X7,DLL1 IF NEXT OCCURANCE OF /P1/ FOUND
  875. JP CHL6
  876.  
  877. DLL3 BX2 -X0
  878. RJ ATF ADVANCE FILE OVER LINES BEING DELETED
  879. JP SET2
  880.  
  881. DLL4 CEPF DLL2,4
  882. SA7 EOFTF
  883. SA3 SEC
  884. SX6 X3+B1 DECREMENT COUNT
  885. SA6 A3
  886. ZR X6,CHL5 IF OPERATION COMPLETE
  887. JP CHL6 TERMINATE PROCESSING
  888. EXTRACT EJECT
  889. *** EXTRACT (E) - EXTRACT LINES.
  890. *
  891. * ONE OR MORE LINES OF THE TEXT FILE ARE COPIED TO
  892. * THE STRING BUFFER (SCRATCH FILE SCR2) FOLLOWING THE LAST
  893. * ENTRY TO THE BUFFER.
  894.  
  895.  
  896. XTL5 SX0 0
  897. RJ CST COUNT PHRASES
  898. SA2 LCTB
  899. RJ ATF ADVANCE TO LINE CONTAINING PHRASE
  900. SA1 NUM
  901. ZR X1,XTL5.1 IF SPECIFIED NUMBER FOUND
  902. RJ GSM SEND MESSAGE WITH PHRASE COUNT
  903. XTL5.1 SA4 STPHR2 CHECK FOR ELLIPSIS
  904. ZR X4,XTL6 IF NOT ELLIPSIS OPERATION
  905. SA1 LCTB COUNT TO NTH LINE CONTAINING /P1/
  906. SA2 A1+B1
  907. IX4 X2-X1 NUMBER LINES ACROSS ELLIPSIS
  908. XTL6 SX0 1
  909. BX3 X3-X3
  910. IX0 X0+X4
  911. XTRACT BSS 0
  912. SA2 EOFTF
  913. ZR X2,LTL11 IF POSITIONED AT EOI
  914. SX6 B0+
  915. SA6 XTSB CLEAR BACKSPACE INDICATOR
  916. NZ X3,XTL5 IF STRING FIELDS PRESENT
  917. RJ PSB
  918. WRITEC B,LBUF COPY CURRENT LINE TO STRING BUFFER
  919. SA4 B+5
  920. IX6 X4+X0 BUMP STRING BUFFER LINE COUNT
  921. SA6 A4
  922. SX0 X0-1
  923. ZR X0,XTL2 IF TRANSFER COMPLETE
  924. XTL1 READC X5,LBUF,LBUFL
  925. NZ X1,XTL4 IF EOF
  926. SB7 B6-LBUF
  927. SX0 X0-1 DECREMENT LINE COUNT
  928. WRITEW B,LBUF,B7
  929. INTRPT XTL3 PROCESS TERMINAL INTERRUPT
  930. XTL2 NZ X0,XTL1 IF TRANSFER INCOMPLETE
  931. XTL3 WRITER B FLUSH BUFFER
  932. SX7 -1
  933. SA7 XTSP
  934. JP LTL5
  935.  
  936. XTL4 CEPF XTL1,4
  937. SA3 B+5
  938. IX6 X3-X0 READJUST STRING BUFFER LINE COUNT
  939. SA6 A3
  940. SX0 0 CLEAR LINE COUNT
  941. EQ XTL2
  942. FIND EJECT
  943. *** FIND (F) - FIND LINES.
  944. *
  945. * LISTS THE NTH LINE OR THE NTH LINE(S) CONTAINING /PHRASE/.
  946. * THE SEARCH POINTER IS SET TO THE NTH LINE OR TO THE NTH
  947. * LINE CONTAINING /P1/.
  948.  
  949.  
  950. FIND BSS 0
  951. SA1 EOFTF
  952. ZR X1,LTL11 IF POSITIONED AT EOI
  953. NZ X3,FDL2 IF STRING FIELDS PRESENT
  954. SX6 X0+
  955. SA6 LCTB SET LINE ADVANCE
  956. RJ AFW
  957. ZR X7,FDL1 IF POSITIONED AT EOI
  958. WRITEC O,LBUF
  959. JP SET8
  960.  
  961. FDL1 WRITEC O,EFM ISSUE EOF MESSAGE
  962. JP SET7
  963.  
  964. FDL2 SX0 B0
  965. BX1 X1-X1
  966. RJ CST ASSURE SPECIFIED PHRASE EXISTS
  967. SA2 LCTB
  968. RJ AFW ADVANCE W/O SEARCH TO PROPER LINE
  969. SA0 STPHR2
  970. WRITEC O,LBUF COPY LINE TO OUTPUT
  971. RJ CTI CHECK TERMINAL INTERRUPTS
  972. NZ X3,FDL6 IF INTERRUPTED
  973. SA4 A0
  974. ZR X4,FDL6 IF NOT ELLIPSIS OPERATION
  975. BX1 X1-X1
  976. SA2 STPHR1 SET POINTERS ABOUT /P1/
  977. RJ SLS
  978. SA2 A0 CHECK LINE FOR PHRASE ENDING ELLIPSIS
  979. RJ SLS
  980. NZ B7,FDL4 IF NOT ONE LINE ELLIPSIS
  981. EQ FDL6
  982.  
  983. FDL3 SA4 PFADR SWITCH TO PRIMARY TEXT FILE
  984. SX5 X4+
  985. FDL4 READC X5,LBUF,LBUFL
  986. NZ X1,FDL3 IF EOR
  987. RJ CTI CHECK TERMINAL INTERRUPTS
  988. NZ X3,FDL5 IF INTERRUPTED
  989. WRITEC O,LBUF
  990. BX1 X1-X1 SEARCH LINE FOR PHRASE ENDING ELLIPSIS
  991. SA2 A0
  992. RJ SLS
  993. NZ B7,FDL4 IF PHRASE NOT FOUND
  994. FDL5 RJ RTF REPOSITION TEXT FILE
  995. FDL6 SA1 NUM
  996. RJ GSM
  997. JP SET8
  998. LIST EJECT
  999. *** LIST (L) - LIST LINES.
  1000. *
  1001. * LISTS N LINES OR N GROUPS OF LINES CONTAINING /PHRASE/.
  1002.  
  1003.  
  1004. LIST BSS 0
  1005. SA2 EOFTF
  1006. ZR X2,LTL11 IF FILE AT EOI
  1007. NZ X3,LTL6 IF STRING FIELDS PRESENT
  1008. NZ X4,MAINX IF SYNTAX ERROR
  1009. LTL1 SX0 X0-1 DECREMENT COUNTER
  1010. WRITEC O,LBUF
  1011. RJ CTI CHECK TERMINAL INTERRUPTS
  1012. NZ X3,MAIN IF INTERRUPTED
  1013. NZ X0,LTL3 IF MORE THAN ONE LINE TO BE LISTED
  1014. EQ MAIN
  1015.  
  1016. LTL2 SB7 B6-LBUF
  1017. WRITEW O,LBUF,B7
  1018. RJ CTI CLEAR TERMINAL INTERRUPTS
  1019. NZ X3,LTL5 IF INTERRUPTED
  1020. SX0 X0-1
  1021. ZR X0,LTL5 IF LISTING COMPLETE
  1022. LTL3 READC X5,LBUF,LBUFL
  1023. ZR X1,LTL2 IF NOT END OF DATA
  1024. CEPF LTL3,4
  1025. LTL4 WRITEC O,EFM
  1026. LTL5 RJ RTF REPOSITION TEXT FILES
  1027. JP MAIN
  1028.  
  1029. LTL6 SX0 0
  1030. ZR X4,LTL7 IF NOT LOOKING FOR ELLIPSIS
  1031. RJ CST COUNT ELLIPSI
  1032. SA2 LCT
  1033. RJ ATF ADVANCE WITHOUT SEARCH TO /P1/
  1034. LTL7 SX6 STPHR1 LOCATE /P1/
  1035. RJ SRO
  1036. ZR X7,LTL4 IF STRING NOT FOUND
  1037. SA4 STPHR2
  1038. SX0 1
  1039. ZR X4,LTL10 IF NOT LISTING ELLIPSIS
  1040. LTL8 SA2 STPHR2 SEARCH FOR /P2/
  1041. RJ SLS
  1042. ZR B7,LTL10 IF END OF ELLIPSIS FOUND
  1043. WRITEC O,LBUF
  1044. RJ CTI CHECK TERMINAL INTERRUPTS
  1045. NZ X3,LTL5 IF INTERRUPTED
  1046. LTL9 READC X5,LBUF,LBUFL
  1047. ZR X1,LTL8 IF COPY COMPLETED
  1048. SA4 PFADR
  1049. BX5 X4 SWITCH TO PRIMARY TEXT FILE
  1050. EQ LTL9
  1051.  
  1052. LTL10 WRITEC O,LBUF COPY LINE TO OUTPUT
  1053. RJ CTI CHECK TERMINAL INTERRUPTS
  1054. NZ X3,LTL5 IF INTERRUPTED
  1055. SA3 SEC
  1056. SX7 X3+B1 DECREMENT OPERATION COUNT
  1057. SA7 A3
  1058. NZ X7,LTL7 IF NOT DONE
  1059. EQ LTL5
  1060.  
  1061. LTL11 WRITEC O,EFM ISSUE EOF MESSAGE
  1062. JP MAIN
  1063. NUMBER EJECT
  1064. *** NUMBER (N) - COUNT LINES.
  1065. *
  1066. * COUNTS LINES OR THE NUMBER OF LINES CONTAINING
  1067. * /PHRASE/ FROM THE SEARCH POINTER TO END OF FILE.
  1068.  
  1069.  
  1070. NUMBER BSS 0
  1071. SA2 EOFTF
  1072. NZ X3,NRS1 IF STRING FIELDS SPECIFIED
  1073. NRL1 ZR X2,LTL11 IF FILE AT EOI
  1074. SX0 B0
  1075. BX2 X5
  1076. NRL2 INTRPT NRL3 PROCESS TERMINAL INTERRUPT
  1077. SX0 X0-1 COUNT LINES READ
  1078. READC X2,LBUF,LBUFL
  1079. ZR X1,NRL2 IF NOT EOR
  1080. SA2 PFADR
  1081. BX1 -X0 SET COUNT FOR CONVERSION
  1082. IX7 X2-X5
  1083. SX0 X0+B1
  1084. BX5 X2
  1085. NZ X7,NRL2 IF NOT PRIMARY EDIT FILE
  1086. RJ CDD CONVERT LINE COUNT TO DISPLAY CODE
  1087. SA6 NRLA
  1088. RJ RTF REPOSITION FILES
  1089. WRITEC O,NRLA
  1090. JP MAIN
  1091.  
  1092. NRL3 BX1 -X0 SET COUNT FOR CONVERSION
  1093. RJ CDD
  1094. SA6 NRLB
  1095. RJ RTF REPOSITION FILES
  1096. WRITEC O,NRLB
  1097. JP MAIN
  1098.  
  1099.  
  1100. NRLA DATA C* LINES TO EOF.*
  1101. NRLB DATA C* LINES TO INTERRUPT.*
  1102. ADDS TITLE STRING COMMAND PROCESSORS.
  1103. *** ADDS (AS) - ADD STRINGS.
  1104. *
  1105. * A CHARACTER STRING IS ADDED TO THE TEXT FILE IMMEDIATELY
  1106. * FOLLOWING EACH OF N OCCURENCES OF /P1/.
  1107.  
  1108.  
  1109. ADDS BSS 0
  1110. ZR X3,ADD IF NO STRING FIELD
  1111. SA2 ADSA
  1112. EQ CHS1 PROCESS NEW TEXT
  1113.  
  1114.  
  1115. ADSA SA1 LBW SAVE POINTER TO END OF STRING
  1116. SA2 STPHR2
  1117. BLANKS EJECT
  1118. *** BLANKS (BS) - BLANK STRINGS.
  1119. *
  1120. * EACH OF N OCCURRENCES OF /PHRASE/ ARE REPLACED WITH BLANKS.
  1121.  
  1122.  
  1123. BLANKS BSS 0
  1124. SA2 EOFTF
  1125. ZR X2,LTL11 IF EDIT FILE AT EOI
  1126. ZR X3,BLL6 IF STRING FIELDS EMPTY
  1127. RJ PSO
  1128. BLS1 SA2 STPHR2 ELLIPSIS FIELD POINTER
  1129. SA1 FBW
  1130. ZR X2,BLS2 IF NOT ELLIPSIS OPERATION
  1131. BX6 X1
  1132. SA6 A7+B1
  1133. NG X7,BLS4 IF /P1/ AT END OF LINE
  1134. RJ SLS
  1135. NZ B7,BLS4 IF NOT SINGLE LINE ELLIPSIS
  1136. SA1 SLP
  1137. BLS2 SA4 LBW
  1138. RJ IBC REPLACE STRING WITH BLANKS
  1139. SA3 SEC
  1140. SX7 X3+B1 DECREMENT SPECIFICATOR COUNT
  1141. SA7 A3
  1142. ZR X7,DLS7 IF PROCESSING COMPLETE
  1143. INTRPT DLS7 PROCESS TERMINAL INTERRUPT
  1144. SA1 LBW
  1145. SX0 B1
  1146. NG X1,BLS3 IF PHRASE AT END OF LINE
  1147. BX0 X0-X0
  1148. BLS3 SX6 STPHR1 SEARCH FILE FOR /P1/
  1149. RJ SFS
  1150. NZ X7,BLS1 IF NOT EOF
  1151. JP CHS14
  1152.  
  1153. BLS4 SA1 SLP
  1154. RJ SLT SET LINE TERMINATOR
  1155. SX2 A5
  1156. SX0 B1 DUMP LINE BUFFER
  1157. WRITEC X2,LBUF
  1158. SX6 STPHR2 READ/SEARCH FOR /P2/
  1159. RJ SRO
  1160. SA4 X5+5
  1161. SX7 X4+B4 ADVANCE READ FILE LINE POSITION
  1162. SA7 A4
  1163. EQ B2,B1,BLS6 IF END OF ELLIPSIS IN NEXT LINE
  1164. SX0 B1-B2
  1165. SX2 A5
  1166. BLS5 WRITEC X2,TCHM WRITE BLANK LINES
  1167. SX0 X0+1
  1168. NZ X0,BLS5 IF LINES NOT ALL WRITTEN
  1169. BLS6 SX1 LBUF
  1170. EQ BLS2 PROCESS LINE TERMINATING ELLIPSIS
  1171. CHANGES EJECT
  1172. *** CHANGES (CS) - CHANGE STRINGS.
  1173. *
  1174. * EACH OF N OCCURRENCES OF /PHRASE/ ARE DELETED FROM THE TEXT
  1175. * FILE AND REPLACED WITH THE CHARACTER STRING ENTERED IN
  1176. * RESPONSE TO THE REQUEST * ENTER TEXT.*
  1177.  
  1178.  
  1179. CHANGES BSS 0
  1180. ZR X3,CHANGE IF NO STRING FIELDS
  1181. SA2 CHSA
  1182. CHS1 BX6 X2 STORE INSTRUCTIONS FOR CHANGES/ADDS
  1183. SA6 CHS2
  1184. SA2 EOFTF CHECK FILE STATUS
  1185. ZR X2,LTL11 IF POSITIONED AT EOI
  1186. RJ PSO
  1187. RJ ETX
  1188. ZR X0,SET2 IF NO TEXT ENTERED
  1189. SX7 B0+
  1190. SA7 STRB
  1191. LX7 X2
  1192. BX6 -X0
  1193. SA7 RTFP
  1194. SA6 LCT SAVE COUNT OF LINES ENTERED
  1195. CHS2 SA1 FBW
  1196. SA2 STPHR2
  1197. * SA1 LBW IF ADDS COMMAND
  1198. * SA2 STPHR2
  1199. BX6 X1 SAVE POINTER TO START OF STRING
  1200. NO
  1201. SA6 SLP
  1202. ZR X2,CHS3 IF NOT ELLIPSIS OPERATION
  1203. RJ SLS
  1204. ZR B7,CHS3 IF ELLIPSIS IN SINGLE LINE
  1205. SX7 STRB+1
  1206. SX0 1
  1207. SA7 LBA CHANGE LINE BUFFER POINTER
  1208. SX6 STPHR2
  1209. RJ SRO READ/SEARCH FOR PHRASE ENDING ELLIPSIS
  1210. SA7 STRB
  1211. SA3 X5+5
  1212. SA6 A6+B1
  1213. SX7 X3+B4 ADVANCE READ FILE LINE POSITION
  1214. SA2 RTFP
  1215. SA7 A3
  1216. SA0 X2 RESTORE REPLACEMENT FILE POINTER
  1217. EQ CHS5
  1218.  
  1219. CHS3 SA3 LBW
  1220. NG X3,CHS5 IF PHRASE AT END OF LINE
  1221. SA4 LBL
  1222. SX1 STRB+1 FIX POINTER TO START OF TEMPORARY BUFFER
  1223. SX2 X3
  1224. SB3 X4+ END OF LINE ADDRESS
  1225. BX7 X3-X2
  1226. SB2 X3 ADDRESS OF TEXT FOLLOWING STRING
  1227. BX6 X7+X1
  1228. SA6 STRB SET POINTER TO TEXT IN TEMPORARY BUFFER
  1229. CHS4 SA1 B2
  1230. BX6 X1 MOVE TEXT FOLLOWING STRING
  1231. SB2 B2+B1
  1232. SA6 A6+B1
  1233. NE B2,B3,CHS4 IF MOVE INCOMPLETE
  1234. SX7 A6+B1
  1235. SA7 A4+B1 SET END OF LINE FOR DATA MOVED
  1236. CHS5 SB7 LBUFL
  1237. SA3 SLP
  1238. READC A0,X3+B1,B7
  1239. SA1 SLP
  1240. SX7 B6 END OF FIRST REPLACEMENT LINE
  1241. SX2 X1+B1
  1242. SA7 LBL
  1243. SB6 LBUF+LBUFL-1 LWA DESTINATION BUFFER
  1244. RJ CTL COMPRESS TEXT
  1245. SA3 LCT
  1246. SX0 X3+1
  1247. NZ X0,CHS6 IF MORE THAN ONE LINE REPLACEMENT FILE
  1248. SA1 SLP
  1249. PL X1,CHS10 IF NO TRUNCATION OF NEW TEXT OCCURRED
  1250. EQ CHS11 ELIMINATE REMAINDER OF OLD LINE
  1251.  
  1252. CHS6 SA1 SLP
  1253. RJ SLT SET LINE TERMINATOR
  1254. CHS7 WRITEC A5+,LBUF
  1255. READC A0,LBUF,LBUFL
  1256. SX0 X0+B1
  1257. NZ X0,CHS7 IF COPY INCOMPLETE
  1258. SA2 B6-B1
  1259. MX1 -6
  1260. NZ X2,CHS8 IF EOL NOT ON WORD BOUNDARY
  1261. SA3 A2-B1
  1262. SX4 A2-LBUF
  1263. ZR X4,CHS9 IF BLANK LINE
  1264. BX4 -X1*X3
  1265. NZ X4,CHS9 IF FULL WORD
  1266. SA2 A3
  1267. CHS8 SX0 -10
  1268. CHS8.1 LX2 54
  1269. BX4 -X1*X2 ISOLATE CHARACTER
  1270. SX0 X0+B1
  1271. ZR X4,CHS8.1 IF *00* CHARACTER
  1272. LX0 24 POSITION CHARACTER POINTER
  1273. CHS9 SX4 A2
  1274. IX7 X4-X0 FORM POINTER TO END OF TEXT
  1275. SA7 SLP
  1276. CHS10 SA2 STRB
  1277. ZR X2,CHS11 IF NO DATA AFTER STRING/ELLIPSIS
  1278. SA4 BAC
  1279. SA1 SLP
  1280. RJ BSP BACKSPACE POINTER
  1281. SA3 TBL
  1282. BX7 X3 ADDRESS ENDING DATA IN TEMPORARY BUFFER
  1283. LX6 X1
  1284. SA7 LBL
  1285. SA6 LBW
  1286. SB6 LBUF+LBUFL-1 LWA DESTINATION BUFFER
  1287. RJ CTL APPEND TEXT TO NEW LINE
  1288. CHS11 SA3 SEC
  1289. SX6 LBUF RESET BUFFER ADDRESS
  1290. SX7 X3+B1
  1291. SA7 A3 OPERATION COUNT DECREMENTED
  1292. SA6 LBA
  1293. ZR X7,DLS6 IF PROCESSING COMPLETE
  1294. INTRPT DLS6 PROCESS TEMINAL INTERRUPT
  1295. SA3 A0+B1
  1296. SX6 X3 SET OUT = FIRST
  1297. SA4 TBST
  1298. SA6 A0+3
  1299. ZR X4,CHS12 IF ALL TEXT IN BUFFER
  1300. REWIND A0+
  1301. READ X2
  1302. CHS12 BX7 X7-X7
  1303. SA3 STRB
  1304. SX1 B1
  1305. ZR X3,CHS13 IF REPLACEMENT DATA ENDED LINE
  1306. SA7 STRB
  1307. CHS13 SX6 STPHR1 LOOK FOR NEXT OCCURANCE OF /P1/
  1308. RJ SML
  1309. SA4 RTFP
  1310. SA0 X4+
  1311. CHS14 NZ X7,CHS2 IF STRING FOUND
  1312. SA2 SEC
  1313. SA7 EOFTF
  1314. SA3 A2-B1 GET NUMBER OPERATIONS COMPLETED
  1315. IX1 X3+X2
  1316. RJ GSM ISSUE DIAGNOSTIC
  1317. JP SET2
  1318.  
  1319.  
  1320. CHSA SA1 FBW SAVE POINTER TO START OF STRING
  1321. SA2 STPHR2
  1322. DELETES EJECT
  1323. *** DELETES (DS) - DELETE STRINGS.
  1324. *
  1325. * N OCCURRENCES OF /PHRASE/ ARE DELETED FROM THE TEXT FILE.
  1326. * DATA FOLLOWING /PHRASE/ WITHIN A LINE IS SHIFTED LEFT.
  1327.  
  1328.  
  1329. DLETES BSS 0
  1330. SA2 EOFTF
  1331. ZR X2,LTL11 IF FILE AT EOI
  1332. ZR X3,DLL3 IF NOT STRING OPERATION
  1333. RJ PSO
  1334. DLS1 SA1 FBW
  1335. SA2 STPHR2
  1336. ZR X2,DLS2 IF ELLIPSIS NOT SPECIFIED
  1337. BX6 X1
  1338. SA6 SLP
  1339. RJ SLS SEARCH CURRENT LINE FOR /P2/
  1340. SA1 SLP
  1341. NZ B7,DLS4 IF NOT SINGLE LINE ELLIPSIS
  1342. DLS2 SA2 LBW
  1343. MX6 1
  1344. BX6 X6*X2
  1345. BX6 X1+X6
  1346. SA6 A2
  1347. SB6 B0+
  1348. RJ CTL COMPRESS TEXT LEFT
  1349. SA1 LBUF
  1350. NZ X1,DLS3 IF NOT EMPTY LINE
  1351. SX2 -1
  1352. RJ ATF ADVANCE TEXT FILE
  1353. SX1 B0+ SET FLAG FOR EMPTY LINE
  1354. DLS3 SA3 SEC
  1355. SX7 X3+B1 DECREMENT SPECIFICATOR COUNT
  1356. SA7 A3
  1357. ZR X7,DLS6 IF PROCESSING COMPLETE
  1358. INTRPT DLS6 PROCESS TERMINAL INTERRUPT
  1359. SX6 STPHR1 SEARCH FILE FOR /P1/
  1360. RJ SML
  1361. NZ X7,DLS1 IF PHRASE FOUND
  1362. JP CHS14
  1363.  
  1364. DLS4 SX4 LBUF
  1365. BX7 X1-X4
  1366. SX0 B1
  1367. ZR X7,DLS5 IF ELLIPSIS STARTED LINE
  1368. RJ SLT
  1369. WRITEC A5,LBUF DUMP LINE BUFFER
  1370. DLS5 SX6 STPHR2
  1371. RJ SRO READ/SEARCH FOR /P2/
  1372. SA4 X5+5
  1373. SX1 LBUF
  1374. SX7 X4+B4 ADVANCE READ FILE LINE POSITION
  1375. SA7 A4
  1376. EQ DLS2 PROCESS END OF MULTI-LINE ELLIPSIS
  1377.  
  1378. DLS6 SA1 SLP
  1379. RJ SLT SET LINE TERMINATOR
  1380. DLS7 SA4 STPHR2
  1381. ZR X4,SET2 IF STRING OPERATION COMPLETE
  1382. SA1 NUM
  1383. RJ GSM ISSUE MESSAGE
  1384. JP SET2
  1385. EXTRACTS EJECT
  1386. *** EXTRACTS (ES) - EXTRACT STRINGS.
  1387. *
  1388. * THE NTH OCCURRENCE OF /PHRASE/ IS COPIED TO THE
  1389. * STRING BUFFER FILE (SCR2) FOLLOWING THE LAST ENTRY.
  1390.  
  1391.  
  1392. XTRACTS BSS 0
  1393. ZR X3,XTRACT IF NO STRING FIELDS
  1394. SA2 EOFTF
  1395. NZ X4,XTS8 IF ELLIPSIS SPECIFIED
  1396. BX0 X0-X0
  1397. SX6 A3
  1398. ZR X2,LTL11 IF POSITIONED AT EOF
  1399. RJ SRO
  1400. ZR X7,CST1 IF EOI
  1401. SX6 LBUF-1
  1402. XTS1 SA6 SLP
  1403. RJ PSB
  1404. SA3 STPHR2
  1405. SA1 LBW
  1406. NZ X3,XTS2 IF ELLIPSIS OPERATION
  1407. RJ SBT SET BLANK TERMINATOR
  1408. SX6 B6+
  1409. SA6 XTSB
  1410. XTS2 SA2 A1-B1
  1411. SA1 A1+B1
  1412. SB6 B0+
  1413. RJ CTL
  1414. SA1 SLP
  1415. RJ SLT SET LINE TERMINATOR
  1416. SA1 XTSB
  1417. SX6 B6+X1
  1418. SA6 A1 SAVE NUMBER OF BLANKS ADDED
  1419. WRITEC B,LBUF-1 COPY PHRASE TO STRING BUFFER
  1420. SX6 1R RESTORE NON-ZERO WORD PAD BEFORE LBUF
  1421. SA6 LBUF-1
  1422. SA4 STPHR2
  1423. NZ X4,XTS4 IF ELLIPSIS SPECIFIED
  1424. SX0 1
  1425. SA1 LBW
  1426. NG X1,XTS3 IF STRING AT END OF LINE
  1427. SA1 SLP
  1428. SX4 B1
  1429. RJ BSP BACKSPACE POINTER
  1430. XTS3 AX1 24
  1431. BX6 X1
  1432. SA6 XTSP SAVE POSITION+1 OF LAST CHARACTER
  1433. SA4 B+5
  1434. IX7 X0+X4 ADVANCE STRING FILE LINE COUNT
  1435. SA7 A4
  1436. WRITER X2 FLUSH STRING BUFFER
  1437. RJ RTF
  1438. JP MAIN
  1439.  
  1440. XTS4 SX2 1
  1441. RJ ATF NEXT LINE TO WORKING STORAGE
  1442. SA3 LCTB
  1443. SA2 A3+B1
  1444. IX0 X2-X3 NUMBER LINES TO END OF ELLIPSIS
  1445. XTS5 SX0 X0-1
  1446. ZR X0,XTS7 IF LAST LINE READ
  1447. SB7 B6-LBUF
  1448. WRITEW B,LBUF,B7 COPY LINE TO STRING BUFFER
  1449. XTS6 READC X5,LBUF,LBUFL
  1450. ZR X1,XTS5 IF NOT EOR
  1451. SA4 PFADR
  1452. BX5 X4 SWITCH TO PRIMARY TEXT FILE
  1453. EQ XTS6
  1454.  
  1455. XTS7 SA2 STPHR2
  1456. RJ SLS LOCATE /P2/
  1457. SA3 LCTB
  1458. SA2 A3+B1 LINE COUNT TO END OF ELLIPSIS
  1459. IX0 X2-X3
  1460. SX0 X0+B1 NUMBER LINES ACROSS ELLIPSIS
  1461. BX1 X7
  1462. RJ SBT SET BLANK TERMINATOR
  1463. SX6 B6+
  1464. SA6 XTSB
  1465. RJ SLT SET END OF LINE
  1466. SA1 XTSB
  1467. SX6 B6+X1
  1468. SA6 A1 SAVE NUMBER OF BLANKS ADDED
  1469. WRITEC B,LBUF
  1470. SA1 LBW
  1471. EQ XTS3 COMPLETE PROCESSING
  1472.  
  1473. XTS8 SX0 0
  1474. RJ CST ASSURE ELLIPSIS EXISTS
  1475. SA3 NUM
  1476. ZR X3,XTS10 IF SPECIFIED ELLIPSIS EXISTS
  1477. JP NRS2
  1478.  
  1479. XTS9 SX6 STPHR2 FIND PHRASE ENDING ELLIPSIS
  1480. RJ SRO
  1481. XTS10 SX6 STPHR1 LOCATE START OF ELLIPSIS
  1482. RJ SRO
  1483. SA3 SEC
  1484. SX6 X3+B1 DECREMENT COUNT
  1485. SA6 A3
  1486. NZ X6,XTS9 IF SPECIFIED ELLIPSIS NOT REACHED
  1487. SA2 STPHR2
  1488. SA4 A7-B1
  1489. BX0 X4 CHECK - ONE LINE ELLIPSIS
  1490. RJ SLS
  1491. NZ B7,XTS11 IF MULTI-LINE ELLIPSIS
  1492. BX6 X0
  1493. SX7 B0
  1494. SA6 FBW RESTORE POINTER TO START OF ELLIPSIS
  1495. SA7 STPHR2
  1496. XTS11 SX6 LBUF-1
  1497. EQ XTS1
  1498.  
  1499.  
  1500. XTSB CON 0 NUMBER OF POSITIONS TO BACKSPACE
  1501. XTSP BSS 1
  1502. FINDS EJECT
  1503. *** FINDS (FS) - FIND STRING.
  1504. *
  1505. * LISTS THE NTH OCCURRENCE OF /PHRASE/ AND SETS THE SEARCH
  1506. * POINTER TO THAT LINE. IF /PHRASE/ IS MULTI-LINE, THE SEARCH
  1507. * POINTER IS SET TO THE LINE CONTAINING /P1/.
  1508.  
  1509.  
  1510. FINDS BSS 0
  1511. ZR X3,FIND IF STRING FIELDS EMPTY
  1512. SA2 EOFTF
  1513. SX0 0
  1514. ZR X2,LTL11 IF EDIT FILE AT EOI
  1515. RJ CST ASSURE SPECIFICATION EXISTS
  1516. SA2 LCT
  1517. RJ AFW FAST ADVANCE TO LINE CONTAINING /P1/
  1518. EQ FDS2
  1519.  
  1520. FDS1 SA4 STPHR2 CHECK ELLIPSIS SPECIFIED
  1521. BX0 X0-X0
  1522. SX6 A4
  1523. ZR X4,FDS2 IF NOT ELLIPSIS OPERATION
  1524. RJ SFS LOCATE PHRASE ENDING ELLIPSIS
  1525. FDS2 SX6 STPHR1
  1526. RJ SFS ADVANCE FILE TO LINE CONTAINING /P1/
  1527. SA3 SEC
  1528. SX7 X3+B1 ADVANCE OPERATION COUNT
  1529. SA7 A3
  1530. INTRPT FDS3 PROCESS TEMINAL INTERRUPT
  1531. SA3 SEC CHECK OPERATION COUNT
  1532. NZ X3,FDS1 IF LAST OCCURANCE NOT REACHED
  1533. FDS3 SB2 LBUF
  1534. SA4 LBL GET END OF LINE ADDRESS
  1535. SB3 TBUF-LBUF
  1536. SA1 FBW RESET DESTROYED REGISTER
  1537. SX2 B3
  1538. SB5 X4
  1539. IX6 X1+X2
  1540. SX7 B2+B3 POINT WORKING STORAGE AT TEMPORARY BUFFER
  1541. SA6 A1+B1
  1542. SA7 LBA SET WORKING STORAGE FOR SEARCH ROUTINES
  1543. FDS4 SA3 B2
  1544. SB2 B2+B1
  1545. BX6 X3 MOVE LINE TO TEMPORARY BUFFER
  1546. SA6 A3+B3
  1547. NE B2,B5,FDS4 IF MOVE NOT COMPLETE
  1548. SX7 A6+B1 SET TBUF END-OF-LINE POINTER
  1549. BX6 X4 SAVE LBUF END-OF-LINE POINTER
  1550. SA7 A4
  1551. SA6 A7+B1
  1552. SA2 STPHR1
  1553. RJ SLS
  1554. SX1 TBUF
  1555. BX4 X6 INSERT LEADING BLANKS FOR OUTPUT
  1556. RJ IBC
  1557. SA1 TBL RESTORE LBUF END-OF-LINE POINTER
  1558. BX6 X1
  1559. SA6 A1-B1
  1560. SA2 STPHR2 POINTER TO /P2/
  1561. ZR X2,FDS9 IF NOT ELLIPSIS OPERATION
  1562. RJ SLS
  1563. FDS5 ZR B7,FDS9 IF ONE LINE ELLIPSIS
  1564. RJ CTI CHECK TERMINAL INTERRUPTS
  1565. NZ X3,FDS8 IF INTERRUPTED
  1566. WRITEC O,TBUF
  1567. FDS6 READC X5,TBUF,LBUFL
  1568. ZR X1,FDS7 IF NOT EOR
  1569. SA4 PFADR
  1570. BX5 X4 SWITCH TO PRIMARY TEXT FILE
  1571. EQ FDS6
  1572.  
  1573. FDS7 SA2 STPHR2 LOCATE PHRASE ENDING ELLIPSIS
  1574. RJ SLS
  1575. NZ B7,FDS5 IF PHRASE NOT FOUND
  1576. FDS8 RJ RTF REPOSITION TEXT FILE
  1577. FDS9 SA1 LBW SET END OF LINE
  1578. SA2 LBL
  1579. RJ SLT
  1580. BX6 X2
  1581. SA6 A2
  1582. WRITEC O,TBUF COPY LINE TO OUTPUT
  1583. SX7 LBUF
  1584. SA7 LBA RESTORE NORMAL WORKING STORAGE AREA
  1585. JP FDL6
  1586. INSERTS EJECT
  1587. *** INSERTS (IS) - INSERT STRING.
  1588. *
  1589. * SAME AS ADDS EXCEPT THAT NEW DATA IS FOUND IN /P2/.
  1590.  
  1591.  
  1592. INSERTS BSS 0
  1593. ZR X4,MAINX IF REPLACEMENT STRING EMPTY
  1594. SA2 INSA
  1595. JP RPS1
  1596.  
  1597.  
  1598. INSA BX2 X7
  1599. SB6 10
  1600. SA4 X2 FIRST WORD OF PHRASE
  1601. LISTS EJECT
  1602. *** LISTS (LS) - LIST STRINGS.
  1603. *
  1604. * ONE OR MORE OCCURRENCES OF /PHRASE/ IS LISTED.
  1605.  
  1606.  
  1607. LISTS BSS 0
  1608. SA2 EOFTF
  1609. ZR X2,LTL11 IF POSITIONED AT EOI
  1610. ZR X3,LTL1 IF NOT STRING OPERATION
  1611. SX0 0
  1612. ZR X4,LTS1 IF ELLIPSIS SEARCH NOT REQUIRED
  1613. RJ CST
  1614. SA2 LCT FAST ADVANCE TO START OF ELLIPSIS
  1615. RJ ATF
  1616. LTS1 SX6 STPHR1 SEARCH FOR /P1/
  1617. RJ SRO
  1618. ZR X7,LTL4 IF EOI
  1619. SX1 LBUF
  1620. SA4 FBW INSERT LEADING BLANKS
  1621. RJ IBC
  1622. LTS2 SA1 STPHR2
  1623. NZ X1,LTS7 IF LOOKING FOR ELLIPSIS
  1624. LTS3 SA1 SEC
  1625. SX6 X1+B1 DECREMENT SPECIFICATOR COUNT
  1626. SA6 A1
  1627. ZR X6,LTS4 IF OPERATION COMPLETE
  1628. RJ CTI CHECK TERMINAL INTERRUPTS
  1629. NZ X3,LTS9 IF INTERRUPTED
  1630. SA3 LBW
  1631. NG X3,LTS6 IF PHRASE AT EOL
  1632. BX7 X3 SAVE -END OF STRING- POINTER
  1633. SA7 A3+B1
  1634. SA2 STPHR1 SCAN LINE FOR ANOTHER OCCURRENCE
  1635. RJ SLS
  1636. NZ B7,LTS5 IF STRING NOT IN LINE
  1637. SA1 SLP
  1638. SA4 FBW
  1639. RJ IBC BLANK BETWEEN STRINGS
  1640. EQ LTS2
  1641.  
  1642. LTS4 SA1 LBW
  1643. RJ SLT SET LINE TERMINATOR
  1644. WRITEC O,LBUF
  1645. EQ LTS9 COMPLETE PROCESSING
  1646.  
  1647. LTS5 SA1 SLP SET END OF LINE
  1648. RJ SLT
  1649. LTS6 RJ CTI CHECK TERMINAL INTERRUPTS
  1650. NZ X3,LTS9 IF INTERRUPTED
  1651. WRITEC O,LBUF COPY LINE TO OUTPUT
  1652. SX0 1
  1653. EQ LTS1 CONTINUE PROCESSING
  1654.  
  1655. LTS7 SA2 STPHR2 SEARCH FOR PHRASE ENDING ELLIPSIS
  1656. RJ SLS
  1657. ZR B7,LTS3 IF ELLIPSIS FOUND
  1658. RJ CTI CHECK TERMINAL INTERRUPTS
  1659. NZ X3,LTS9 IF INTERRUPTED
  1660. WRITEC O,LBUF
  1661. LTS8 READC X5,LBUF,LBUFL
  1662. SX7 B6 SAVE END OF LINE POINTER
  1663. SA7 LBL
  1664. ZR X1,LTS7 IF NOT EOR
  1665. SA4 PFADR
  1666. BX5 X4 SWITCH TO PRIMARY FILE
  1667. EQ LTS8
  1668.  
  1669. LTS9 RJ RTF REPOSITION TEXT FILE
  1670. JP MAIN
  1671. NUMBERS EJECT
  1672. *** NUMBERS (NS) - COUNT STRINGS.
  1673. *
  1674. * COUNTS THE OCCURRENCES OF /PHRASE/ FROM THE SEARCH POINTER
  1675. * TO END OF FILE.
  1676.  
  1677.  
  1678. NUMBERS BSS 0
  1679. SA2 EOFTF
  1680. ZR X3,NRL1 IF NO STRING FIELDS
  1681. NRS1 ZR X2,LTL11 IF POSITIONED AT EOF
  1682. SX6 -377776B
  1683. BX7 -X6
  1684. SA6 SEC FORCE SEARCH LIMIT HIGH
  1685. BX0 X0-X0
  1686. SA7 NUM
  1687. RJ CST COUNT STRINGS
  1688. NRS2 SA1 NUM
  1689. RJ GSM SEND MESSAGE WITH PHRASE COUNT
  1690. JP MAIN
  1691. REPLACES EJECT
  1692. *** REPLACES (RS) - REPLACE STRINGS.
  1693. *
  1694. * SAME AS CHANGES EXCEPT THAT REPLACEMENT DATA IS TAKEN
  1695. * FROM /P2/.
  1696.  
  1697.  
  1698. RPLACES BSS 0
  1699. SA2 RPSA
  1700. RPS1 ZR X3,MAINX IF STRING TO BE REPLACED NOT SPECIFIED
  1701. ZR X4,DLETES IF REPLACEMENT STRING EMPTY
  1702. BX7 X2
  1703. SX0 0 SELECT SEARCH BEFORE WRITE/READ
  1704. SA2 EOFTF
  1705. SA7 RPS4
  1706. ZR X2,LTL11 IF POSITIONED AT EOI
  1707. SX6 STPHR1 SEARCH FILE FOR STRING
  1708. RJ SFS
  1709. RPS2 ZR X7,RPS11 IF EOI
  1710. NG X7,RPS4 IF PHRASE AT END OF LINE
  1711. SX3 TBUF-LBUF
  1712. SA4 LBL GET END OF LINE POINTER
  1713. SB2 X7
  1714. IX6 X7+X3 FORM END OF PHRASE POINTER
  1715. SB3 X4
  1716. SA6 A7+B1
  1717. RPS3 SA1 B2 MOVE TEXT FOLLOWING PHRASE
  1718. BX6 X1
  1719. SA6 X3+B2 TO TEMPORARY LOCATION
  1720. SB2 B2+B1
  1721. NE B2,B3,RPS3 IF MOVE NOT DONE
  1722. SX6 A6+B1
  1723. SA6 A4 RESET END OF LINE ADDRESS
  1724. RPS4 SA2 A7-B1
  1725. SA4 X2 FIRST WORD OF PHRASE
  1726. SB6 10
  1727. * BX2 X7
  1728. * SB6 10 IF ENTRY FROM INSERTS
  1729. * SA4 X2
  1730. AX2 24 POSITION CHARACTER POINTER
  1731. SB3 A4
  1732. SA3 X2+TCHM MASK FOR DATA PRECEDING PHRASE
  1733. CX1 X3
  1734. SB5 X2
  1735. BX6 X3*X4 ISOLATE LEADER
  1736. SB4 X1
  1737. SA3 STPHR2 POINTER TO REPLACEMENT PHRASE
  1738. SA2 X3-1
  1739. AX3 24 POSITION CHARACTER COUNT
  1740. SX4 B1
  1741. SB7 X3
  1742. LX6 B4,X6
  1743. RPS5 SX3 B3-LBUF-LBUFL+1
  1744. NZ X3,RPS6 IF NOT AT LWA BUFFER
  1745. SB6 7
  1746. SX4 B0+
  1747. GE B5,B6,RPS7 IF BUFFER COMPLETELY FULL
  1748. SX4 B1+
  1749. RPS6 ZR B7,RPS7 IF REPLACEMENT COMPLETE
  1750. LX6 6
  1751. SA2 A2+B1 GET NEXT ELEMENT
  1752. SB5 B5+1
  1753. BX6 X6+X2 ASSEMBLE WORD
  1754. SB7 B7-B1
  1755. LT B5,B6,RPS6 IF WORD NOT COMPLETE
  1756. SX4 B6-7
  1757. ZR X4,RPS7 IF AT BUFFER LIMIT
  1758. SA6 B3
  1759. SB5 B0
  1760. BX6 X6-X6 CLEAR ASSEMBLY REGISTER
  1761. SB3 B3+B1
  1762. NZ B7,RPS5 IF REPLACEMENT NOT COMPLETE
  1763. RPS7 SX1 B5+ CHARACTER POINTER TO END OF NEW STRING
  1764. SB6 10
  1765. LX1 24
  1766. ZR B5,RPS8 IF NEW STRING FILLED WORD
  1767. + LX6 6
  1768. SB5 B5+B1 LEFT JUSTIFY WORD ENDING PHRASE
  1769. NE B5,B6,*
  1770. RPS8 SA6 B3
  1771. SX3 A6
  1772. BX0 X0-X0
  1773. BX7 X1+X3
  1774. SA2 SLP POINTER TO TEXT IN TEMPORARY BUFFER
  1775. SA3 LBW POINTER TO END OF OLD PHRASE
  1776. BX1 X7
  1777. MX6 1
  1778. NG X3,RPS9 IF NO DATA FOLLOWING ORIGINAL PHRASE
  1779. NZ X4,RPS10 IF NOT AT BUFFER LIMIT
  1780. RPS9 SX0 B1
  1781. BX2 X6*X3
  1782. BX7 X2+X7
  1783. BX2 X3
  1784. RPS10 SA7 A3 SET POINTER TO END OF NEW STRING
  1785. SB6 LBUF+LBUFL-1
  1786. RJ CTL APPEND TEXT FOLLOWING PHRASE TO LINE
  1787. SA1 SEC
  1788. SX7 X1+B1 DECREMENT COUNTER
  1789. SA7 A1
  1790. ZR X7,RPS12 IF OPERATION COMPLETE
  1791. INTRPT RPS11 PROCESS TERMINAL INTERRUPTS
  1792. SX6 STPHR1
  1793. RJ SML SEARCH MODIFIED LINE
  1794. EQ RPS2
  1795.  
  1796. RPS11 SA3 SEC
  1797. SA4 A3-B1 GET NUMBER SUCCESSFUL OPERATIONS
  1798. IX1 X4+X3
  1799. ZR X1,PSO2 IF NONE COMPLETED
  1800. RJ GSM
  1801. JP SET2 REPOSITION FILES
  1802.  
  1803. RPS12 SA1 SLP SET LINE TERMINATOR
  1804. RJ SLT
  1805. JP SET2 REPOSITION FILES
  1806.  
  1807.  
  1808. RPSA SA2 A7-B1
  1809. SA4 X2 FIRST WORD OF PHRASE
  1810. SB6 10
  1811. ALIGN TITLE AUXILIARY COMMAND PROCESSORS.
  1812. *** ALIGN (AL) - ALIGN DATA.
  1813. *
  1814. * ELIMINATES UNWANTED BLANKS ON THE TEXT FILE. DATA IS LINED
  1815. * UP BY WORD, SENTENCE, AND PARAGRAPH.
  1816.  
  1817.  
  1818. ALIGN BSS 0
  1819. SA2 EOFTF
  1820. ZR X2,LTL11 IF POSITIONED AT EOI
  1821. SA2 AFLI
  1822. NZ X2,ALN1 IF ALIGN FIELD LENGTH ALREADY SET
  1823. MEMORY CM,AFLI,R,ALFL
  1824. SA3 STPHR1
  1825. SA4 STPHR2
  1826. ALN1 ZR X3,ALN2 IF NO STRING FIELDS
  1827. RJ PSO
  1828. ALN2 SA3 SEC
  1829. BX6 -X3
  1830. SA6 A3+B1 INITIAL COUNT FOR INTERRUPT PROCESSING
  1831. ALN3 SA2 STPHR2
  1832. SX7 B0
  1833. SX1 B1
  1834. ZR X2,ALN4 IF NOT ELLIPSIS OPERATION
  1835. RJ SLS SEARCH FOR /P2/ IN SAME LINE AS /P1/
  1836. SX7 B1
  1837. NZ B7,ALN4 IF NOT ONE LINE ELLIPSIS
  1838. BX7 X7-X7
  1839. ALN4 SA7 SLP MULTI-LINE ELLIPSIS INDICATOR
  1840. ALN5 SA3 WDTH NEW LINE WIDTH
  1841. SX1 STRA FWA NEW LINE BUFFER
  1842. IX3 X1+X3 MAXIMUM LWA NEW LINE
  1843. LX1 18
  1844. BX0 X1+X3
  1845. ALN6 SA3 LBUF
  1846. SX7 1R
  1847. SB2 A3+
  1848. SB6 USBBL
  1849. RJ USB UNPACK OLD LINE TO STRING BUFFER
  1850. SB4 X0 MAXIMUM LWA NEW LINE
  1851. AX0 18
  1852. SB5 X0+ CURRENT ADDRESS IN NEW LINE
  1853. SA0 B6+ FWA NEXT WORD IN OLD LINE
  1854. SA1 B6 FIRST CHARACTER IN OLD LINE
  1855. AX0 18 LWA+1 OF LAST COMPLETE WORD IN NEW LINE
  1856. NZ X3,ALN7 IF NOT ZERO WORD
  1857. PL X3,ALN14 IF BLANK LINE
  1858. ALN7 SA2 ASC ASCII INDICATOR
  1859. IX3 X1-X7
  1860. NZ X3,ALN9 IF NOT BLANK CHARACTER
  1861. SB6 B6+B1
  1862. MX4 4
  1863. SB5 B5+5
  1864. SA7 B5-B1 INITIALIZE INDENTATION
  1865. + LX4 1
  1866. SA7 A7-B1 INDENT NEW LINE
  1867. NG X4,*
  1868. ALN8 GT B6,B7,ALN14 IF END OF OLD LINE
  1869. SA1 B6
  1870. IX3 X1-X7
  1871. SB6 B6+B1
  1872. ZR X3,ALN8 IF BLANK CHARACTER
  1873. SB6 B6-B1
  1874. ALN9 GT B6,B7,ALN15 IF END OF OLD LINE
  1875. SA1 B6+
  1876. IX3 X1-X7
  1877. SB6 B6+B1
  1878. BX6 X1 TRANSFER CURRENT CHARACTER TO NEW LINE
  1879. SA6 B5
  1880. SB5 B5+B1
  1881. ZR X2,ALN11 IF NO ESCAPE CODE SET
  1882. IX4 X2+X6
  1883. ZR X4,ALN10 IF ESCAPE CODE 76
  1884. SX4 X4-74B+76B
  1885. ALN10 NZ X4,ALN11 IF NO ESCAPE CODE
  1886. SB4 B4+1
  1887. ALN11 GE B5,B4,ALN13 IF NEW LINE WIDTH REACHED
  1888. NZ X3,ALN9 IF NOT BLANK CHARACTER
  1889. SA4 A6-B1 LAST NON-BLANK CHARACTER
  1890. SX0 B5 LWA+1 OF LAST COMPLETE WORD IN NEW LINE
  1891. SX6 X4-1R.
  1892. SX3 B1
  1893. SA0 B6 FWA NEXT WORD IN OLD LINE
  1894. ZR X6,ALN12 IF PERIOD ENDING SENTENCE
  1895. SX6 X4-1R?
  1896. NZ X6,ALN8 IF NOT QUESTION MARK
  1897. ALN12 SA7 B5
  1898. SB5 B5+B1
  1899. LT B5,B4,ALN8 IF NEW LINE WIDTH NOT REACHED
  1900.  
  1901. * NEW LINE WIDTH REACHED.
  1902.  
  1903. ALN13 RJ WNL WRITE NEW LINE
  1904. SX7 1R
  1905. SA2 ASC ASCII INDICATOR
  1906. SA1 USBC
  1907. BX0 X0-X0
  1908. SB7 X1 LWA OLD LINE
  1909. EQ ALN8
  1910.  
  1911. * END OF OLD LINE REACHED.
  1912.  
  1913. ALN14 NZ X0,ALN15 IF NOT BLANK LINE
  1914. SB2 A0-USBB
  1915. NZ B2,ALN15 IF NOT BLANK LINE
  1916. SA7 STRA
  1917. WRITEC A5,BLKL WRITE BLANK LINE
  1918. SB4 STRA
  1919. SB5 B4+1
  1920. ALN15 SA4 SLP
  1921. NZ X4,ALN18 IF WORKING WITH MULTI-LINE ELLIPSIS
  1922. SA3 SEC
  1923. SX7 X3+B1 DECREMENT SEARCH COUNT
  1924. SA7 A3
  1925. ZR X7,ALN27 IF ALIGNMENT COMPLETE
  1926. INTRPT ALN27 PROCESS TERMINAL INTERRUPT
  1927. SA1 STPHR1
  1928. ZR X1,ALN18 IF SEARCH FOR PHRASE NOT REQUIRED
  1929. SX3 B0+
  1930. RJ WNL WRITE ENTIRE NEW LINE
  1931. ALN16 READC X5,LBUF,LBUFL
  1932. ZR X1,ALN17 IF NOT EOR
  1933. CEPF ALN16,4
  1934. SA7 EOFTF SET FILE STATUS
  1935. EQ ALN28
  1936.  
  1937. ALN17 SA4 X5+5
  1938. SX6 B6 LWA+1 PACKED LINE
  1939. SX7 X4+B1 ADVANCE READ FILE LINE POSITION
  1940. BX0 X0-X0
  1941. SA6 LBL
  1942. SA7 A4
  1943. SX6 STPHR1 SEARCH FILE FOR /P1/
  1944. SX1 B0+
  1945. RJ SFS
  1946. ZR X7,ALN28 IF PHRASE NOT FOUND
  1947. EQ ALN3
  1948.  
  1949. ALN18 SX4 B5
  1950. SX1 B4
  1951. LX4 18
  1952. BX0 X4+X1
  1953. ALN19 READC X5,LBUF,LBUFL
  1954. ZR X1,ALN20 IF NOT EOR
  1955. CEPF ALN19,4
  1956. SA7 EOFTF
  1957. AX0 18
  1958. SB5 X0 CURRENT CHARACTER ADDRESS IN NEW LINE
  1959. BX3 X3-X3
  1960. RJ WNL WRITE ENTIRE NEW LINE
  1961. EQ ALN28
  1962.  
  1963. ALN20 SA4 X5+5
  1964. SX6 B6 LWA+1 PACKED LINE
  1965. SX7 X4+B1 ADVANCE READ FILE LINE POSITION
  1966. SA6 LBL
  1967. SA2 STPHR2
  1968. SA7 A4
  1969. ZR X2,ALN21 IF NOT ELLIPSIS OPERATION
  1970. SX1 B0
  1971. RJ SLS
  1972. NZ B7,ALN21 IF NOT ONE LINE ELLIPSIS
  1973. SX6 B0+
  1974. SA6 SLP CLEAR MULTI-LINE ELLIPSIS FLAG
  1975. ALN21 SB4 X0 LWA+1 NEW LINE
  1976. SX7 1R
  1977. AX0 18
  1978. SA1 LBUF FIRST PACKED WORD OF NEXT OLD LINE
  1979. SB5 X0+ CURRENT CHARACTER ADDRESS IN NEW LINE
  1980. MX2 -6
  1981. LX1 6
  1982. BX2 -X2*X1 FIRST CHARACTER OF NEXT OLD LINE
  1983. IX3 X2-X7
  1984. ZR X3,ALN26 IF NEW PARAGRAPH
  1985. NZ X1,ALN22 IF NOT ZERO WORD
  1986. PL X1,ALN26 IF BLANK LINE
  1987. ALN22 SA1 B5-B1 LAST CHARACTER IN NEW LINE
  1988. IX3 X1-X7
  1989. ZR X3,ALN24 IF LAST CHARACTER IN NEW LINE BLANK
  1990. SA7 B5 INSERT BLANK
  1991. SB5 B5+B1
  1992. GT B5,B4,ALN26 IF END OF NEW LINE REACHED
  1993. SX3 X1-1R.
  1994. ZR X3,ALN23 IF LAST CHARACTER IN NEW LINE IS PERIOD
  1995. SX3 X1-1R?
  1996. NZ X3,ALN24 IF LAST CHARACTER NOT QUESTION MARK
  1997. ALN23 SA7 B5 INSERT BLANK
  1998. SB5 B5+B1
  1999. GT B5,B4,ALN26 IF END OF NEW LINE REACHED
  2000. ALN24 SA1 STRA FIRST CHARACTER IN NEW LINE
  2001. IX4 X1-X7
  2002. SB2 A1
  2003. NZ X4,ALN25 IF FIRST CHARACTER IN NEW LINE NOT BLANK
  2004. SB2 B2+5
  2005. ALN25 LE B5,B2,ALN5 IF NEW LINE ALREADY FLUSHED
  2006. SX4 B5
  2007. SX3 B4
  2008. LX4 18
  2009. BX0 X3+X4
  2010. LX4 18
  2011. BX0 X0+X4
  2012. EQ ALN6
  2013.  
  2014. ALN26 BX3 X3-X3
  2015. RJ WNL WRITE NEW LINE
  2016. EQ ALN5
  2017.  
  2018. * ALIGNMENT COMPLETION PROCESSING.
  2019.  
  2020. ALN27 BX3 X3-X3
  2021. RJ WNL WRITE ENTIRE NEW LINE
  2022. SX2 -B1 GET NEXT LINE
  2023. RJ ATF ADVANCE TEXT FILES
  2024. ALN28 SA1 STPHR1
  2025. ZR X1,SET2 IF NO STRING FIELDS
  2026. SA1 ICT
  2027. SA2 SEC
  2028. SA3 NUM
  2029. SA4 STPHR2
  2030. IX1 X1+X2
  2031. ZR X4,ALN29 IF NOT ELLIPSIS
  2032. IX2 X2+X3
  2033. ALN29 ZR X2,SET2 IF ALL OCCURANCES FOUND AND PROCESSED
  2034. RJ GSM GENERATE OCCURANCES MESSAGE
  2035. JP SET2 REPOSITION TEXT FILES
  2036. CLEAR EJECT
  2037. *** CLEAR (CL) - CLEARS THE STRING BUFFER.
  2038. *
  2039. * RETURNS THE STRING BUFFER FILE (SCR2).
  2040.  
  2041.  
  2042. CLEAR BSS 0
  2043. EVICT B,R RETURN STRING FILE SPACE
  2044. SA3 X2+B1
  2045. SX7 X3+ SET IN = OUT = FIRST
  2046. BX6 X6-X6
  2047. SA7 A3+B1
  2048. SA6 B+5 CLEAR LINE COUNT
  2049. SA7 A7+B1
  2050. JP MAIN
  2051. DEFTAB EJECT
  2052. *** DEFTAB (DT) - DEFINE TAB CHARACTER.
  2053. *
  2054. * IDENTIFIES A TAB CHARACTER TO BE USED WHEN STRUCTURING
  2055. * LINES FROM DATA PASSED IN RESPONSE TO * ENTER TEXT.*
  2056.  
  2057.  
  2058. DEFTAB BSS 0
  2059. MX7 1
  2060. ZR X3,DFT1 IF TAB CHARACTER DEFINITION TO BE CLEARED
  2061. SA1 X3
  2062. AX3 24 POSITION CHARACTER COUNT
  2063. SB2 X3
  2064. NE B2,B1,MAINX IF MORE THAN ONE CHARACTER
  2065. BX7 X1
  2066. DFT1 SA7 TABCH
  2067. JP MAIN
  2068. LENGTH EJECT
  2069. *** LENGTH - TRUNCATE TEXT FILE.
  2070. *
  2071. * LIMITS THE NUMBER OF LINES TO BE PROCESSED ON THE TEXT FILE.
  2072. * LINE LIMIT IS SPECIFIED BY N. ORIGINAL PROCESSING BOUNDARIES
  2073. * ARE RESTORED IF N = *.
  2074.  
  2075.  
  2076. LENGTH BSS 0
  2077. SB5 X0-377776B
  2078. ZR B5,LEN5 IF NUMERIC FIELD *
  2079. SA4 X5+5
  2080. SA3 EOFTF CHECK FILE STATUS
  2081. IX2 X0-X4
  2082. NG X2,LEN1 IF EDIT FILE BEYOND LINE OF INTEREST
  2083. SA1 TFLEN CHECK CURRENT FILE LENGTH
  2084. IX4 X0-X1 CHECK FOR PROPER TRUNCATION
  2085. PL X4,LEN8 IF IMPROPER TRUNCATION
  2086. BX6 X0 SAVE NEW LENGTH
  2087. SA6 A1
  2088. ZR X3,MAIN IF POSITIONED AT EOI
  2089. LEN1 SA1 CTO
  2090. ZR X1,MAIN IF TABLE FULL
  2091. SB4 X1+
  2092. SX6 B4-B1 RESET INDEX
  2093. SX7 A1+B4
  2094. SA6 CTO
  2095. SA7 T+6
  2096. LEN2 NG X2,LEN4 IF FILE BEYOND LINE OF INTEREST
  2097. RJ AFW
  2098. ZR X7,RESET IF ADVANCE WENT TO EOI
  2099. SA0 T
  2100. WRITEC A5+,LBUF COPY LAST LINE OF ABBREVIATED TEXT FILE
  2101. LEN3 READW X5,LBUF,CBUFL
  2102. SX2 A0 SCRATCH FILE FET ADDRESS
  2103. BX0 X1
  2104. SB7 B6-LBUF SET NUMBER WORDS TO WRITE
  2105. WRITEW X2,LBUF,B7
  2106. ZR X0,LEN3 IF NOT EOR
  2107. CEPF LEN3,4
  2108. SA7 EOFTF SET FILE STATUS
  2109. SA7 SVLC
  2110. WRITER X2 FLUSH BUFFER
  2111. JP SET2
  2112.  
  2113. LEN4 SA0 X0 SAVE LINE ADVANCE
  2114. RJ CPY REWIND FILES
  2115. SX2 A0-B1 RESTORE CORRECT LINE ADVANCE
  2116. SX7 B1 INSURE ADVANCE TO EOI NOT DEFAULT
  2117. EQ LEN2
  2118.  
  2119. LEN5 SA1 CTO
  2120. SX6 NLR
  2121. IX4 X1-X6
  2122. ZR X4,MAIN IF NO DATA ON FILE
  2123. SB4 X1+B1
  2124. SX7 A1+B4
  2125. SA6 A1
  2126. SA3 EOFTF CHECK FILE STATUS
  2127. SA7 T+5
  2128. ZR X3,LEN6 IF POSITIONED AT EOI
  2129. SX2 377776B
  2130. RJ AFW ADVANCE TO EOI
  2131. LEN6 READLS T
  2132. RECALL A5
  2133. LEN7 READW T,LBUF,CBUFL
  2134. SB7 B6-LBUF NUMBER OF WORDS TO WRITE
  2135. BX0 X1
  2136. SX2 A5 WRITE FILE FET ADDRESS
  2137. WRITEW X2,LBUF,B7
  2138. ZR X0,LEN7 IF NOT END OF RECORD
  2139. EVICT T RETURN LENGTH FILE SPACE
  2140. SX7 0
  2141. SA7 SVLC RESET SEARCH POINTER
  2142. JP SET2
  2143.  
  2144. LEN8 WRITEC O,(=C* IMPROPER TRUNCATION.*)
  2145. JP MAIN
  2146.  
  2147. CTO CON NLR
  2148. BSS NLR
  2149. CON 0
  2150. LINE EJECT
  2151. *** LINE (LN) - LIST LINE NUMBER.
  2152. *
  2153. * INDICATE LINE NUMBER ASSOCIATED WITH SEARCH POINTER.
  2154.  
  2155.  
  2156. LINE BSS 0
  2157. SA2 SVLC
  2158. SX0 1L.&3L
  2159. SA5 EOFTF
  2160. SX1 X2+B1
  2161. RJ CDD CONVERT LINE NUMBER
  2162. LX6 18
  2163. ZR X5,LIN1 IF LAST LINE ON FILE
  2164. BX6 X6-X0
  2165. LIN1 SA6 LNMA SET NUMBER IN MESSAGE
  2166. WRITEC O,LNM
  2167. JP MAIN
  2168.  
  2169.  
  2170. LNM DATA 20H FILE AT LINE NUMBER
  2171. LNMA BSS 1
  2172.  
  2173. EFM DATA C* -END OF FILE-*
  2174. LISTAB EJECT
  2175. *** LISTAB (LT) - LIST TAB STOPS.
  2176.  
  2177.  
  2178. LISTAB BSS 0
  2179. SA1 TTBL FIRST TAB COLUMN
  2180. SA0 TSM+1
  2181. LTB1 ZR X1,LTB3 IF NO TAB STOPS
  2182. RJ CDD
  2183. MX0 30
  2184. BX5 -X0*X6
  2185. SA1 A1+B1 READ NEXT TAB COLUMN
  2186. LX5 30
  2187. ZR X1,LTB2 IF END OF TABLE
  2188. RJ CDD
  2189. BX6 -X0*X6
  2190. BX7 X5+X6
  2191. SA1 A1+B1
  2192. SA7 A0 STORE CONVERTED VALUES IN MESSAGE
  2193. BX5 X5-X5
  2194. SA0 A0+B1
  2195. NZ X1,LTB1 IF NOT END OF TABLE
  2196. LTB2 BX7 X5
  2197. SA7 A0
  2198. WRITEC O,TSM LIST TAB STOPS
  2199. JP MAIN
  2200.  
  2201. LTB3 SA5 LTBA
  2202. EQ LTB2
  2203.  
  2204.  
  2205. LTBA DATA L* NONE.*
  2206.  
  2207. TSM DATA 10H TAB STOPS
  2208. BSS TTBLL/2+1
  2209. MERGE EJECT
  2210. *** MERGE (M) - MERGE FILES.
  2211. *
  2212. * MERGES A SECONDARY FILE INTO THE FILE BEING EDITED. THE
  2213. * SECONDARY FILE NAME IS PASSED IN /P1/. IF MERGING IS
  2214. * RELATIVE TO A SPECIFIC CHARACTER STRING, THE STRING OF
  2215. * INTEREST IS GIVEN IN /P2/. MERGING OCCURS AFTER THE NTH
  2216. * LINE OR AFTER THE NTH LINE CONTAINING /P2/.
  2217.  
  2218.  
  2219. MERGE BSS 0
  2220. ZR X3,MAINX IF MERGE FILE NAME NOT GIVEN
  2221. SB2 X3-1
  2222. AX3 24 POSITION CHARACTER COUNT
  2223. SB5 60
  2224. BX6 X6-X6 CLEAR ACCUMULATOR
  2225. SB6 X3+B2
  2226. MRG1 RJ ANC ASSEMBLE NEXT CHARACTER
  2227. ZR X4,MRG10 IF NOT ALPHANUMERIC CHARACTER
  2228. SX1 X4-1R+
  2229. PL X1,MRG10 IF NOT ALPHANUMERIC CHARACTER
  2230. SX1 X3-74B
  2231. ZR X1,MRG10 IF 74B ESCAPE CODE
  2232. LX6 6
  2233. BX6 X6+X4 ADD CHARACTER TO ACCUMULATOR
  2234. SB5 B5-6
  2235. LT B2,B6,MRG1 IF DELIMITER NOT REACHED
  2236. LX4 B5,X6
  2237. MX7 -18
  2238. SA3 B0 CLEAR FET ADDRESS
  2239. BX3 -X7*X4
  2240. NZ X3,MRG10 IF NAME > 7 CHARACTERS
  2241. RJ CRN
  2242. ZR X7,MRG10.1 IF FILE NAME RESERVED
  2243. RETURN M,R
  2244. SX1 B1 BUSY FLAG OFF
  2245. BX6 X4+X1
  2246. MX3 5
  2247. SA6 X2 SET FILE NAME IN FET
  2248. STATUS X2
  2249. LX3 5+1
  2250. SA1 X2
  2251. BX7 X3*X1 EXTRACT STATUS FIELD
  2252. LX3 9
  2253. NZ X7,MRG3 IF FILE LOCAL
  2254. GET X2
  2255. SA4 X2
  2256. BX7 X3*X4
  2257. ZR X7,MRG4 IF PERMANENT FILE
  2258. MRG2 WRITEC O,(=C* MERGE ERROR, SECONDARY FILE EMPTY.*)
  2259. SB4 MAIN SET TRANSFER
  2260. EQ MRG9
  2261.  
  2262. MRG3 REWIND X2
  2263. MRG4 READ X2 INITIATE READ ON MERGE FILE
  2264. READC X2,TBUF,LBUFL
  2265. NZ X1,MRG2 IF MERGE FILE EMPTY
  2266. SA4 STPHR2
  2267. ZR X4,MRG6 IF NO STRING FIELD
  2268. SA2 EOFTF
  2269. SX0 0
  2270. ZR X2,LTL11 IF EDIT FILE AT EOI
  2271. SA1 NUM
  2272. SX6 X1-377776B
  2273. NZ X6,MRG5 IF NOT ASTERISK
  2274. SA1 STPHR2 SET UP STRING POINTERS
  2275. BX6 X1
  2276. SA6 STPHR1
  2277. BX7 X7-X7
  2278. SA6 MRGA
  2279. SA7 STPHR2
  2280. RJ CST COUNT STINGS
  2281. SA1 MRGA RESTORE STRING POINTER
  2282. BX0 X0-X0
  2283. LX6 X1
  2284. SA6 STPHR2
  2285. MRG5 SX6 STPHR2
  2286. SX1 B0+ BEGIN SEARCH AT START OF CURRENT LINE
  2287. RJ SFS
  2288. ZR X7,MRG11 IF END OF INFORMATION
  2289. SA3 SEC
  2290. SX7 X3+1 ADVANCE OPERATION COUNT
  2291. SX0 B1+
  2292. SA7 A3+
  2293. INTRPT MRG6 PROCESS TERMINAL INTERRUPT
  2294. NZ X7,MRG5 IF STRING NOT FOUND
  2295. MRG6 SA3 EOFTF
  2296. ZR X3,MRG7 IF POSITIONED AT EOI
  2297. BX2 X0
  2298. RJ AFW POSITION TEXT FILES FOR MERGE
  2299. MRG7 WRITEC A5+,TBUF
  2300. MRG8 READW M,TBUF,100B
  2301. SB7 B6-TBUF SET WORD COUNT
  2302. BX0 X1
  2303. SX2 A5 WRITE FILE FET ADDRESS
  2304. WRITEW X2,TBUF,B7
  2305. ZR X0,MRG8 IF NOT END OF DATA
  2306. SB4 SET2
  2307. MRG9 SX2 3RSCR
  2308. BX7 X7-X7 CLEAR LINE COUNT
  2309. SX1 B1
  2310. LX2 60-18 RESTORE NAME IN FET TO *SCR*
  2311. SA7 M+5
  2312. BX6 X2+X1
  2313. SA6 M
  2314. JP B4
  2315.  
  2316. MRG10 SB6 =C* INCORRECT FILE NAME.*
  2317. MRG10.1 WRITEC O,B6
  2318. EQ MAIN PROCESS NEXT COMMAND
  2319.  
  2320. MRG11 SB4 RPS11 SET RETURN
  2321. EQ MRG9
  2322.  
  2323.  
  2324. MRGA CON 0
  2325. RESET EJECT
  2326. *** RESET (R) - RESET SEARCH POINTER.
  2327. *
  2328. * THE SEARCH POINTER IS SET TO THE FIRST LINE OF THE FILE.
  2329.  
  2330.  
  2331. RESET BSS 0
  2332. BX3 X3-X3
  2333. SX6 B0 CLEAR SEARCH POINTER
  2334. EQ SET1
  2335. SET EJECT
  2336. *** SET (S) - REDEFINE SEARCH POINTER.
  2337. *
  2338. * MOVES THE SEARCH POINTER AHEAD OR BACK DEPENDING ON
  2339. * POSITIVE OR NEGATIVE N. IT MAY ALSO BE SET TO THE NTH LINE
  2340. * CONTAINING /P1/, HOWEVER, N MUST BE POSITIVE.
  2341.  
  2342.  
  2343. SET BSS 0
  2344. ZR B7,SET5 IF LINE ADVANCE POSITIVE
  2345. SA4 SVLC
  2346. IX6 X4-X0
  2347. PL X6,SET1 IF SET COUNT IN RANGE
  2348. BX6 X6-X6
  2349. SET1 NZ X3,MAINX IF INCORRECT STRING FIELD
  2350. SA6 SVLC
  2351. SET2 RJ CPY
  2352. SA2 SVLC GET SEARCH POINTER
  2353. SX6 B1
  2354. BX7 X2
  2355. SA6 X5+5 INITIALIZE READ FILE LINE POSITION
  2356. SA7 A5+5
  2357. NZ X1,SET4 IF EOR
  2358. SA6 EOFTF CLEAR EOI FLAG
  2359. RJ AFW
  2360. SET3 SA1 FBB
  2361. MX2 56
  2362. BX3 X2*X1 ASSURE NEXT READ FROM SAME FILE
  2363. SX4 X5-F
  2364. IX6 X4+X3 RESET READ FILE BIAS
  2365. SA6 A1
  2366. SET4 SA4 EOFTF
  2367. ZR X4,LTL11 IF FILE POSITIONED AT EOF
  2368. JP MAIN
  2369.  
  2370. SET5 SA4 EOFTF
  2371. ZR X4,LTL11 IF FILE POSITIONED AT EOF
  2372. LX7 X2
  2373. BX0 X0-X0
  2374. SA7 LCTB
  2375. ZR X3,SET6 IF NO STRING FIELD
  2376. SX6 B1
  2377. SA6 A3-B1 SET LINE MODE
  2378. RJ CST
  2379. SA1 NUM
  2380. RJ GSM
  2381. SET6 SA2 LCTB
  2382. RJ AFW ADVANCE FILES
  2383. SET7 SA2 LCTB
  2384. IX6 X2-X0
  2385. SA6 A2
  2386. SET8 SA2 LCTB
  2387. SA3 SVLC
  2388. IX6 X2+X3 REDEFINE SEARCH POINTER
  2389. SA6 A5+5
  2390. SA6 A3
  2391. EQ SET3
  2392. TABS EJECT
  2393. *** TABS (T) - SET TAB COLUMNS.
  2394. *
  2395. * SET TAB STOPS AS SPECIFIED IN /P1/. SEE DEFTAB.
  2396.  
  2397.  
  2398. TABS BSS 0
  2399. SB4 X3
  2400. SB7 B0
  2401. ZR B4,TBS4 IF TAB STOPS TO BE CLEARED
  2402. AX3 24
  2403. SB6 X3+B4 SET END OF STRING
  2404. TBS1 SA1 B4
  2405. SB4 B4+B1 ADVANCE STRING BUFFER ADDRESS
  2406. SX2 X1-1R,
  2407. ZR X2,TBS2 IF END OF TAB
  2408. SX3 X1-1R0
  2409. NG X3,TBS5 IF CHARACTER ALPHABETIC
  2410. SX2 X1-1R9-1
  2411. PL X2,TBS5 IF CHARACTER NOT NUMERIC
  2412. LX6 X7,B1
  2413. LX7 3
  2414. IX7 X6+X7 ASSEMBLE TAB VALUE
  2415. IX7 X7+X3
  2416. NE B4,B6,TBS1 IF NOT END OF STRING
  2417. TBS2 SX4 X7-TABCL
  2418. PL X4,TBS5 IF TAB VALUE TOO LARGE
  2419. TBS3 SA7 B7+TTBL
  2420. SB7 B7+B1
  2421. BX7 X7-X7 CLEAR ASSEMBLY
  2422. SX0 B7-TTBLL
  2423. EQ B4,B6,TBS4 IF END OF INPUT
  2424. NG X0,TBS1 IF NOT MAX TAB COUNT
  2425.  
  2426. TBS4 SA7 B7+TTBL SET TERMINATOR IN TAB TABLE
  2427. JP MAIN
  2428.  
  2429. TBS5 SX6 0
  2430. SA6 B7+TTBL TERMINATE TAB TABLE
  2431. JP MAINX
  2432. WIDTH EJECT
  2433. *** WIDTH (W) - SET LINE WIDTH.
  2434. *
  2435. * DEFINES A COLUMN AT WHICH LINE ASSEMBLY WILL TERMINATE.
  2436. * USED IN CONNECTION WITH ALIGN.
  2437.  
  2438.  
  2439. WIDTH BSS 0
  2440. SX2 X0-MAXWD-1
  2441. PL X2,MAINX IF WIDTH TOO LARGE
  2442. SX3 X0-MINWD
  2443. NG X3,MAINX IF WIDTH TOO SMALL
  2444. SX7 X0+
  2445. SA7 WDTH SET NEW WIDTH
  2446. JP MAIN
  2447. TITLE UTILITY ROUTINES.
  2448. ANC SPACE
  2449. ** ANC - ASSEMBLE NEXT CHARACTER.
  2450. *
  2451. * PRESET REPLACES ANCA CODE WITH ANCB CODE IF ASCII MODE
  2452. * SPECIFIED.
  2453. *
  2454. * ENTRY (B2) = PREVIOUS CHARACTER ADDRESS.
  2455. * (B6) = LWA+1 OF CHARACTER BUFFER.
  2456. *
  2457. * EXIT (B2) = CURRENT CHARACTER ADDRESS.
  2458. * (B6) = LWA+1 OF CHARACTER BUFFER.
  2459. * (X2) = TOTAL CHARACTER (6 OR 12 BITS),
  2460. * RIGHT-JUSTIFIED.
  2461. * (X3) = UPPER 6 BITS OF 12 BIT ASCII CHARACTER,
  2462. * RIGHT-JUSTIFIED, ZERO OTHERWISE.
  2463. * (X4) = LOWER 6 BITS OF CHARACTER, RIGHT-JUSTIFIED.
  2464. *
  2465. * USES A - 2, 4.
  2466. * B - 2.
  2467. * X - 1, 2, 3, 4.
  2468.  
  2469.  
  2470. ANC SUBR ENTRY/EXIT
  2471. SB2 B2+B1 ADVANCE CHARACTER ADDRESS
  2472. SA2 B2
  2473. BX4 X2
  2474. BX3 X3-X3
  2475. ANCA EQ ANCX RETURN - NOT ASCII MODE
  2476. * EQ B2,B6,ANCX (ASCII MODE)
  2477. * SX1 X4-76B (ASCII MODE)
  2478. ZR X1,ANC1 IF 76B ESCAPE CODE
  2479. SX1 X4-74B
  2480. NZ X1,ANCX IF NOT 74B ESCAPE CODE
  2481. ANC1 BX3 X4
  2482. SB2 B2+B1 ADVANCE CHARACTER ADDRESS
  2483. SA4 B2
  2484. LX2 6
  2485. BX2 X4+X2
  2486. EQ ANCX RETURN - ASCII MODE
  2487.  
  2488. ANCB EQ B2,B6,ANCX IF END OF LINE
  2489. SX1 X4-76B
  2490. AFW SPACE 4,9
  2491. ** AFW - ADVANCE FILES AND WRITE.
  2492. *
  2493. * ENTRY (X2) = NUMBER LINES TO ADVANCE.
  2494. *
  2495. * USES A - 1, 3, 4, 6, 7.
  2496. * B - 6.
  2497. * X - ALL.
  2498. *
  2499. * CALLS RDC=, WTC=.
  2500.  
  2501.  
  2502. AFW3 SX6 B6
  2503. SA3 TBL
  2504. SA6 A3-B1 SET END OF LINE ADDRESS
  2505. SA4 X5+5
  2506. IX7 X4+X3 ADVANCE READ FILE LINE POINTER
  2507. SA7 A4
  2508.  
  2509. AFW SUBR ENTRY/EXIT
  2510. ZR X2,AFWX IF LINE ADVANCE ZERO
  2511. SA4 LBL
  2512. BX7 X2
  2513. SB6 X4 SET EOL ADDRESS FOR CURRENT LINE
  2514. LX0 X2
  2515. SA7 A4+B1 SAVE LINE ADVANCE
  2516. AFW1 ZR X0,AFW3 IF FILE POSITIONING COMPLETE
  2517. WRITEC A5,LBUF
  2518. AFW2 READC X5,LBUF,LBUFL
  2519. SX0 X0-1
  2520. ZR X1,AFW1 IF NOT END OF DATA
  2521. SX0 X0+B1
  2522. SX7 X0
  2523. SA3 TBL
  2524. IX2 X3-X0 NUMBER LINES ADVANCED
  2525. SA1 X5+5
  2526. SA7 A3
  2527. IX6 X1+X2 BUMP READ FILE LINE POINTER
  2528. SA4 PFADR
  2529. SA6 A1
  2530. BX7 X4-X5
  2531. BX5 X4
  2532. SA1 FBB TEXT FILE BECOMES NEW READ FILE
  2533. MX2 56
  2534. BX1 X2*X1
  2535. SX2 X5-F READ FILE BIAS
  2536. BX6 X1+X2
  2537. SA6 A1 UPDATE WRITE/READ FILE BIAS
  2538. NZ X7,AFW2 IF NOT READING PRIMARY TEXT FILE
  2539. SX0 X0-1
  2540. SA7 EOFTF
  2541. EQ AFWX RETURN
  2542. ATF SPACE 4,9
  2543. ** ATF - ADVANCE TEXT FILE.
  2544. *
  2545. * ENTRY (X2) = NUMBER OF LINES TO ADVANCE.
  2546. *
  2547. * USES A - 0, 4, 6, 7.
  2548. * B - 2, 6, 7.
  2549. * X - 0, 2, 4, 5, 6, 7.
  2550. *
  2551. * CALLS RDC=.
  2552.  
  2553.  
  2554. ATF4 SX6 B6+ SAVE END OF LINE ADDRESS
  2555. SA6 LBL
  2556.  
  2557. ATF SUBR ENTRY/EXIT
  2558. BX0 X2
  2559. ZR X2,ATFX IF LINE ADVANCE ZERO
  2560. SA0 X0
  2561. ATF1 BX2 X5
  2562. PL X0,ATF2 IF NO LINE POINTER MANIPULATION
  2563. BX0 -X0
  2564. SA4 X5+5
  2565. IX7 X4+X0 BUMP TEXT FILE LINE COUNT
  2566. SA7 A4
  2567. ATF2 ZR X0,ATF4 IF ADVANCE COMPLETE
  2568. READC X2,LBUF,LBUFL
  2569. SX0 X0-1 DECREMENT COUNT
  2570. ZR X1,ATF2 IF NOT EOR
  2571. SA4 PFADR
  2572. SX0 X0+B1
  2573. BX7 X4-X5 CHECK EOR ON PRIMARY FILE
  2574. SB2 A0
  2575. PL B2,ATF3 IF NO LINE POINTER MANIPULATION
  2576. BX0 -X0
  2577. ATF3 SX5 X4
  2578. NZ X7,ATF1 IF NOT PRIMARY TEXT FILE
  2579. SX0 B0
  2580. SA7 EOFTF
  2581. EQ ATFX RETURN
  2582. ATL SPACE 4,11
  2583. ** ATL - ASSEMBLE TABBED LINE.
  2584. *
  2585. * ENTRY (B2) = LINE BUFFER ADDRESS.
  2586. * (B4) = CHARACTER BUFFER ADDRESS.
  2587. * (B6) = END OF DATA IN CHARACTER BUFFER.
  2588. *
  2589. * USES A - 1, 2, 3, 6, 7.
  2590. * B - 2, 3, 4, 5, 7.
  2591. * X - 1, 2, 3, 6, 7.
  2592. *
  2593. * CALLS SLT.
  2594.  
  2595.  
  2596. ATL8 SX7 B2
  2597. SB5 B2+B2 FORM SHIFT COUNT
  2598. LX7 2
  2599. SB5 X7+B5
  2600. SA3 MODE
  2601. LX7 B5,X6 LEFT JUSTIFY ASSEMBLY
  2602. SA7 A6+B1
  2603. BX6 X6-X6 INSURE END OF LINE
  2604. SA2 STRB
  2605. SA6 A7+B1
  2606. SX1 B2-10
  2607. BX1 -X1
  2608. PL X2,ATL9 IF NOT FINAL DELIMITER
  2609. ZR X3,ATLX IF STRING MODE AND FINAL DELIMITER
  2610. ATL9 SA2 LBL
  2611. ZR X1,ATLX IF EOL ON WORD BOUNDARY
  2612. SX6 A7
  2613. LX1 24 FORM EOL POINTER
  2614. BX1 X1+X6
  2615. RJ SLT SET LINE TERMINATOR
  2616. SX6 X2+
  2617. SA6 LBL RESTORE EOL ADDRESS
  2618.  
  2619. ATL SUBR ENTRY/EXIT
  2620. SA1 B2-B1
  2621. SA3 TTBL FIRST TAB COLUMN
  2622. BX6 X1
  2623. SB5 B1
  2624. SA6 A1+ INITIALIZE STORAGE REGISTER
  2625. SA1 TABCH
  2626. SB7 X3
  2627. BX6 X6-X6 CLEAR ASSEMBLY
  2628. SB2 10
  2629. SA4 ASC ASCII FLAG
  2630. ATL1 SA2 B4 GET NEXT CHARACTER
  2631. SB4 B4+B1
  2632. GT B4,B6,ATL8 IF ASSEMBLY COMPLETE
  2633. BX7 X2-X1
  2634. ZR X7,ATL4 IF TAB CHARACTER FOUND
  2635. ZR X4,ATL2 IF ASCII FLAG NOT SET
  2636. SX7 X2-76B CHECK ESCAPE 76
  2637. ZR X7,ATL3 IF ESCAPE 76
  2638. SX7 X2-74B CHECK ESCAPE 74
  2639. ATL2 ZR X7,ATL3 IF ESCAPE 74
  2640. SB5 B5+1
  2641. ATL3 LX6 6 POSITION ASSEMBLY REGISTER
  2642. SB2 B2-1 DECREMENT CHARACTER COUNT
  2643. BX6 X6+X2
  2644. NZ B2,ATL1 IF WORD NOT COMPLETE
  2645. SA6 A6+B1
  2646. BX6 X6-X6 CLEAR ASSEMBLY
  2647. SB2 10
  2648. EQ ATL1
  2649.  
  2650. ATL4 ZR B7,ATL1 IF ALL TABS PROCESSED
  2651. SX2 1R
  2652. ATL5 LE B5,B7,ATL6 IF NOT PAST TAB COLUMN
  2653. SA3 A3+B1
  2654. SB7 X3
  2655. ZR X3,ATL1 IF ALL TABS PROCESSED
  2656. GT B5,B7,ATL5
  2657. ATL6 EQ B5,B7,ATL7 IF TAB COLUMN REACHED
  2658. SB5 B5+B1
  2659. LX6 6 BLANK FILL TO TAB COLUMN
  2660. SB2 B2-B1
  2661. BX6 X6+X2
  2662. NZ B2,ATL6 IF WORD NOT COMPLETE
  2663. SA6 A6+B1
  2664. SB2 10
  2665. BX6 X6-X6
  2666. ATL7 NE B5,B7,ATL6
  2667. SA3 A3+B1
  2668. SB7 X3 GET NEXT TAB VALUE
  2669. EQ ATL1
  2670. BLK SPACE 4,13
  2671. ** BLK - INSERTS BLANK AFTER COLON AT END OF LINE.
  2672. *
  2673. * ENTRY (X1) = END OF LINE POINTER WORD.
  2674. *T 36/ N1,24/ A1.
  2675. * N1 = POSITION +1 (MOD 10) OF LAST CHARACTER IN LINE.
  2676. * A1 = ADDRESS OF WORD CONTAINING *N1*.
  2677. *
  2678. * EXIT (X1) = END OF LINE POINTER WORD, UPDATED IF NECESSARY.
  2679. * (B6) = NUMBER OF BLANKS ADDED.
  2680. *
  2681. * USES A - 3, 4, 7.
  2682. * B - 2, 3, 4, 5, 6.
  2683. * X - 1, 3, 4, 7.
  2684.  
  2685.  
  2686. BLK1 SA4 A3-1 GET PREVIOUS WORD
  2687. BLK2 MX7 -6
  2688. BX7 -X7*X4
  2689. NZ X7,BLKX IF LAST CHARACTER NOT *00*
  2690. MX7 -54
  2691. BX4 -X7*X3 INSERT BLANK AFTER *00* CHARACTER
  2692. SX7 1R
  2693. LX7 54
  2694. BX7 X7+X4
  2695. SB2 B4-B2 SHIFT COUNT
  2696. LX7 B2,X7 REPOSITION WORD
  2697. SB5 10
  2698. SA7 A3
  2699. SB3 B3+B1 INCREMENT CHARACTER POSITION
  2700. NE B3,B5,BLK3 IF NOT FULL WORD
  2701. SB3 B0
  2702. SA3 A3+B1
  2703. BLK3 SX1 B3
  2704. LX1 24
  2705. SX4 A3 ADDRESS OF NEW END OF LINE WORD
  2706. BX1 X1+X4 FORM NEW END OF LINE POINTER WORD
  2707. SB6 1
  2708.  
  2709. BLK SUBR ENTRY/EXIT
  2710. SB6 B0
  2711. MX4 -59
  2712. BX4 -X4*X1
  2713. SA3 X4 ADDRESS OF END OF LINE WORD
  2714. AX4 24 POSITION +1 (MOD 10) OF LAST CHARACTER
  2715. SB2 B0
  2716. SB4 60
  2717. SB3 X4
  2718. ZR B3,BLK1 IF LAST CHARACTER IS IN PREVIOUS WORD
  2719. SB2 B3+B3 FORM SHIFT COUNT
  2720. LX4 2
  2721. SB2 X4+B2 CHARACTER POSITION * 6
  2722. LX3 B2,X3 RIGHT JUSTIFY LAST CHARACTER
  2723. BX4 X3
  2724. EQ BLK2
  2725. BSP SPACE 4,10
  2726. ** BSP - BACKSPACE POINTER.
  2727. *
  2728. * ENTRY (X1) = POINTER WORD TO BE BACKSPACED.
  2729. * (X4) = NUMBER OF POSITIONS TO BACKSPACE.
  2730. *
  2731. * EXIT (X1) = UPDATED POINTER WORD.
  2732. *
  2733. * USES A - NONE.
  2734. * B - 2.
  2735. * X - 1, 3.
  2736.  
  2737.  
  2738. BSP SUBR ENTRY/EXIT
  2739. SB2 X4+
  2740. LE B2,BSPX IF NO BACKSPACE
  2741. MX3 1
  2742. BX1 -X3*X1
  2743. SX3 X1
  2744. AX1 24
  2745. BSP1 SX1 X1-1
  2746. PL X1,BSP2 IF NOT ON WORD BOUNDARY
  2747. SX1 9
  2748. SX3 X3-1
  2749. BSP2 SB2 B2-B1
  2750. GT B2,BSP1 IF MORE POSITIONS TO BACKSPACE
  2751. LX1 24
  2752. BX1 X1+X3 FORM NEW POINTER WORD
  2753. EQ BSPX RETURN - POINTER UPDATED
  2754. CAC SPACE 4,10
  2755. ** CAC - COUNT ASCII CHARACTERS.
  2756. *
  2757. * ENTRY (X1) = FIRST CHARACTER POINTER WORD.
  2758. * (X4) = LAST CHARACTER POINTER WORD.
  2759. *
  2760. * EXIT (B4) = NUMBER OF ASCII CHARACTERS FOUND.
  2761. *
  2762. * USES A - 2, 3.
  2763. * B - 3, 4, 5, 6, 7.
  2764. * X - 2, 3, 6, 7.
  2765.  
  2766.  
  2767. CAC SUBR ENTRY/EXIT
  2768. SB3 TCHM
  2769. SB4 B0 INITIALIZE ASCII CHARACTER COUNTER
  2770. SB6 X1 FWA OF ASCII STRING
  2771. SB7 X4 LWA OF ASCII STRING
  2772. SB5 24
  2773. AX2 X4,B5 LAST CHARACTER POSITION + 1
  2774. SA3 B3+X2 MASK FOR LAST WORD
  2775. SA2 B7 GET LAST WORD
  2776. BX7 X3*X2 CLEAR UNWANTED DATA
  2777. AX2 X1,B5 FIRST CHARACTER POSITION
  2778. SA3 B3+X2 MASK FOR FIRST WORD
  2779. SA2 B6+ GET FIRST WORD
  2780. BX2 -X3*X2 CLEAR UNWANTED DATA
  2781. NE B6,B7,CAC1 IF STRING NOT WITHIN ONE WORD
  2782. BX2 X2*X7
  2783. BX7 X7-X7
  2784. CAC1 CX6 X3
  2785. SB5 X6
  2786. LX2 B5 LEFT-JUSTIFY REMAINING CHARACTERS
  2787. MX6 -6
  2788. CAC2 LX2 6
  2789. BX3 -X6*X2 ISOLATE CHARACTER
  2790. BX2 X2-X3 CLEAR CHARACTER FROM WORD
  2791. SX3 X3-76B
  2792. ZR X3,CAC3 IF 76B ESCAPE CODE
  2793. SX3 X3+76B-74B
  2794. NZ X3,CAC5 IF NOT 74B ESCAPE CODE
  2795. CAC3 SB4 B4+B1
  2796. NZ X2,CAC4 IF LOWER 6 BITS OF CHARACTER IN SAME WORD
  2797. SB6 B6+B1
  2798. SA2 B6
  2799. LT B6,B7,CAC4 IF NOT LAST WORD
  2800. BX2 X7
  2801. CAC4 LX2 6
  2802. BX2 X6*X2 CLEAR LOWER 6 BITS OF CHARACTER FROM WORD
  2803. CAC5 NZ X2,CAC2 IF WORD NOT UNPACKED
  2804. SB6 B6+1
  2805. SA2 B6
  2806. LT B6,B7,CAC2 IF NOT LAST WORD
  2807. BX2 X7
  2808. EQ B6,B7,CAC2 IF LAST WORD
  2809. EQ CACX RETURN
  2810. CFC SPACE 4,12
  2811. ** CFC - CHECK FOR COLON.
  2812. *
  2813. * ENTRY (X2) = CURRENT CHARACTER.
  2814. *
  2815. * EXIT (X3) - FINAL COMPARISON.
  2816. *
  2817. * USES X - 1, 3.
  2818. * A - 1.
  2819.  
  2820.  
  2821. CFC1 BX3 X3-X2 COMPARE
  2822.  
  2823. CFC SUBR ENTRY/EXIT
  2824. SA1 CSMR SYSTEM CHARACTER SET MODE
  2825. SX3 63B COLON FOR 63 CHARACTER SET SYSTEM
  2826. PL X1,CFC1 IF 63 CHARACTER SET SYSTEM
  2827. SA1 ASC CHECK ASCII FLAG
  2828. SX3 B0 64 CHARACTER SET COLON
  2829. ZR X1,CFC1 IF NOT ASCII MODE
  2830. SX3 7404B 64 CHARACTER SET ASCII COLON
  2831. EQ CFC1 COMPARE ON 64 CHARACTER SET COLON
  2832. CPY SPACE 4,7
  2833. ** CPY - REPOSITION TEXT FILES.
  2834. *
  2835. * USES A - 1, 5, 6, 7.
  2836. * B - 6, 7.
  2837. * X - ALL.
  2838. *
  2839. * CALLS CIO=, RDC=, RDW=, WTC=, WTW=.
  2840.  
  2841.  
  2842. CPY3 WRITEC A5+,LBUF DUMP LINE BUFFER
  2843. SX1 A5-F
  2844. SX2 X5-F UNUSED FILE BECOMES NEXT WRITE FILE
  2845. IX3 X1+X2
  2846. SX4 X3-21
  2847. BX2 -X4 RELATIVE FET OF UNUSED FILE
  2848. SA5 X2+F
  2849. SX5 X1+F OLD WRITE FILE IS NEXT READ FILE
  2850. CPY4 SX2 A5-F
  2851. SX1 X5-F READ FILE BIAS
  2852. LX2 4
  2853. IX7 X2+X1 MERGE FILE BIAS BITS
  2854. SA7 FBB
  2855. REWIND A5+
  2856. WRITER X5+ FLUSH BUFFER
  2857. REWIND X2
  2858. READ X2
  2859. READC X2,LBUF,LBUFL
  2860. SX6 B6+
  2861. SA6 LBL
  2862.  
  2863. CPY SUBR ENTRY/EXIT
  2864. SA1 PFADR
  2865. BX3 X1-X5 CHECK - READ FILE IS PRIMARY FILE
  2866. SX7 A5
  2867. NZ X3,CPY1 IF SECONDARY TEXT FILE
  2868. SA1 EOFTF
  2869. NZ X1,CPY3 IF NOT AT END OF PRIMARY FILE
  2870. SA7 PFADR
  2871. SA5 X5 SET NEW WRITE FILE
  2872. SX5 X7
  2873. EQ CPY4
  2874.  
  2875. CPY1 WRITEC A5+,LBUF WRITE LINE BUFFER
  2876. CPY2 READW X5,LBUF,CBUFL
  2877. SB7 B6-LBUF NUMBER WORDS TO WRITE
  2878. BX0 X1
  2879. SX2 A5 WRITE FILE FET ADDRESS
  2880. WRITEW X2,LBUF,B7
  2881. ZR X0,CPY2 IF NOT END OF RECORD
  2882. SX2 A5
  2883. SA5 X5 SWAP READ/WRITE FILES
  2884. SX5 X2+
  2885. EQ CPY4
  2886. CRN SPACE 4,11
  2887. ** CRN - CHECK RESERVED FILE NAME.
  2888. *
  2889. * ENTRY (X4) = LEFT JUSTIFIED FILE NAME.
  2890. * (A3) = FET ADDRESS OF FILE BEING CHECKED.
  2891. *
  2892. * EXIT (X7) = 0 IF FILE NAME RESERVED.
  2893. * (B6) = ERROR MESSAGE ADDRESS, IF FILE NAME RESERVED.
  2894. *
  2895. * USES A - 1.
  2896. * B - 2, 3, 4, 5, 6.
  2897. * X - 1, 2, 3, 7.
  2898.  
  2899.  
  2900. CRN SUBR ENTRY/EXIT
  2901. SB4 FETL
  2902. SB2 F-FETL SET FWA OF RESERVE FILE FETS
  2903. SB5 A3 SET CURRENT FET ADDRESS
  2904. SB3 T SET LWA FOR SEARCH
  2905. MX3 42
  2906. CRN1 SB2 B2+B4 SET NEXT FET ADDRESS
  2907. EQ B2,B5,CRN1 IF CURRENT FET
  2908. GT B2,B3,CRNX IF SEARCH COMPLETE
  2909. SA1 B2 SET FILE NAME
  2910. BX2 X3*X1
  2911. BX7 X2-X4
  2912. NZ X7,CRN1 IF NO MATCH
  2913. SB6 CRNA * RESERVED FILE NAME.*
  2914. EQ CRNX RETURN
  2915.  
  2916.  
  2917. CRNA DATA C* RESERVED FILE NAME.*
  2918. CST SPACE 4,7
  2919. ** CST - COUNT STRINGS.
  2920. *
  2921. * USES A - 2, 3, 4, 6, 7.
  2922. * B - 6.
  2923. * X - 0, 2, 3, 4, 6, 7.
  2924. *
  2925. * CALLS RTF, SRO, WTC=.
  2926.  
  2927.  
  2928. * COUNT SIMPLE STRINGS /P1/.
  2929.  
  2930. CST6 SA2 LCTB SET LINE COUNT TO STRING
  2931. SA3 SEC
  2932. SX6 X2+B2
  2933. SX7 X3+B1 DECREMENT SEARCH COUNT
  2934. SA6 A2
  2935. SA7 A3
  2936. CST7 ZR X7,CST8 IF ALL STRINGS FOUND
  2937. SX0 *
  2938. SX6 STPHR1 SEARCH FOR NEXT OCCURRENCE OF STRING
  2939. RJ SRO
  2940. CST8 NZ X7,CST6 IF STRING FOUND
  2941. SA2 SEC
  2942. SA3 A2-B1 DETERMINE NUMBER PHRASES FOUND
  2943. IX7 X3+X2
  2944. ZR X7,CST1 IF NO ELLIPSI FOUND
  2945. BX6 -X7
  2946. NZ X2,CST9 IF ALL NOT FOUND
  2947. SX7 B0
  2948. CST9 SA6 A2
  2949. SA7 A3
  2950. RJ RTF REPOSITION FILES
  2951.  
  2952. CST SUBR ENTRY/EXIT
  2953. SX6 STPHR1
  2954. RJ SRO
  2955. CST1 NZ X7,CST2 IF /P1/ FOUND
  2956. RJ RTF
  2957. WRITEC O,NPM
  2958. JP MAIN
  2959.  
  2960. CST2 SX6 B2
  2961. BX7 X7-X7
  2962. SA6 LCT LINE COUNT TO FIRST OCCURRENCE OF /P1/
  2963. SA7 LCTT
  2964. SA6 A7+B1
  2965. SA7 A7-B1
  2966. SA3 MODE
  2967. SA4 STPHR2
  2968. ZR X3,CST3 IF STRING MODE
  2969. SX3 1
  2970. CST3 SA2 A7-B1
  2971. BX6 X2+X3 SET CALL TO *SRO*
  2972. SA6 CST7
  2973. ZR X4,CST6 IF COUNTING SIMPLE STRINGS
  2974. SA6 CST5
  2975.  
  2976. * COUNT ELLIPSI /P1/,/P2/.
  2977.  
  2978. CST4 SA2 LCTT
  2979. SX7 X2+B2 LINE COUNT TO PHRASE STARTING ELLIPSIS
  2980. SA7 A2+B1
  2981. SX6 STPHR2 SEARCH FOR PHRASE ENDING ELLIPSIS
  2982. RJ SRO
  2983. ZR X7,CST8 IF PHRASE NOT FOUND
  2984. SA2 LCTX
  2985. SX6 X2+B2 LINE COUNT TO PHRASE ENDING ELLIPSIS
  2986. BX7 X2
  2987. SA6 A2-B1
  2988. SA7 A6-B1
  2989. SA3 SEC
  2990. SX7 X3+B1 DECREMENT SEARCH COUNT
  2991. SA7 A3
  2992. CST5 ZR X7,CST8 IF ALL ELLIPSI FOUND
  2993. SX0 *
  2994. SX6 STPHR1 SEARCH FOR PHRASE STARTING ELLIPSIS
  2995. RJ SRO
  2996. NZ X7,CST4 IF PHRASE FOUND
  2997. EQ CST8
  2998.  
  2999.  
  3000. CSTA ZR X7,CST8
  3001. SX0 0
  3002. LCTB BSS 3
  3003. LCTT EQU LCTB+1
  3004. LCTX EQU LCTT+1
  3005. CTI SPACE 4
  3006. ** CTI - CHECK TERMINAL INTERRUPTS.
  3007. *
  3008. * ENTRY (TINT) = TERMINAL INTERRUPT INDICATOR.
  3009. *
  3010. * EXIT (X3) .NE. 0 IF TERMINAL INTERRUPT.
  3011. * (X6) .NE. 0 IF INTERRUPT PENDING.
  3012. *
  3013. * USES A - 3, 6.
  3014. * X - 3, 6.
  3015. * EOR/EOF/EOI STATUS IS X1 PRESERVED.
  3016.  
  3017.  
  3018. CTI SUBR ENTRY/EXIT
  3019. BX6 X1 SAVE X1
  3020. SA3 TINT RESET INTERRUPT INDICATOR
  3021. SA1 INTP SET INTERRUPT PENDING
  3022. BX3 X1+X3
  3023. LX1 X6 RESTORE X1
  3024. BX6 X6-X6
  3025. SA6 A3
  3026. BX6 X3
  3027. SA6 A1
  3028. EQ CTIX
  3029. CTL SPACE 4,8
  3030. ** CTL - COMPRESS TEXT LEFT.
  3031. *
  3032. * ENTRY (X1) = DESTINATION POINTER WORD.
  3033. * (X2) = SOURCE POINTER WORD.
  3034. * (B6) = LWA DESTINATION BUFFER.
  3035. * (B6) = 0, IF NO DESTINATION BUFFER LIMIT.
  3036. *
  3037. * USES A - 3, 4, 6, 7.
  3038. * B - 2, 3, 4, 5, 6, 7.
  3039. * X - 1, 2, 3, 4, 6, 7.
  3040.  
  3041.  
  3042. CTL3 EQ B3,B7,CTL9 IF PACKING COMPLETE
  3043. SB4 B4-10
  3044. SA3 B3
  3045. SB3 B3+B1 ADVANCE SOURCE ADDRESS
  3046. NZ X3,CTL4 IF NOT ZERO WORD
  3047. PL X3,CTL9 IF END OF LINE
  3048. CTL4 ZR B4,CTL7 IF LAST CHARACTER IS *00*
  3049. SB4 B0+
  3050. CTL5 LX3 6 POSITION NEXT CHARACTER
  3051. BX4 -X7*X3
  3052. SB4 B4+1 INCREMENT SOURCE CHARACTER COUNT
  3053. NZ X3,CTL6 IF NOT ZERO WORD
  3054. PL X3,CTL3 IF WORD UNPACKED
  3055. CTL6 BX3 X3-X4
  3056. CTL7 LX6 6
  3057. SB5 B5+1 INCREMENT CHARACTER COUNT
  3058. BX6 X6+X4
  3059. LT B5,B6,CTL5 IF NOT FULL WORD
  3060. SX2 B6-7
  3061. ZR X2,CTL9 IF AT DESTINATION BUFFER LIMIT
  3062. SA6 B2+
  3063. SB5 B0+
  3064. BX6 X6-X6 CLEAR ASSEMBLY
  3065. SB2 B2+B1
  3066. CTL8 ZR X1,CTL5 IF NO DESTINATION BUFFER LIMIT
  3067. SX2 B2
  3068. IX2 X1-X2
  3069. NZ X2,CTL5 IF NOT AT LWA DESTINATION BUFFER
  3070. SB6 7
  3071. SX2 B1
  3072. LT B5,B6,CTL5 IF BUFFER NOT COMPLETELY FULL
  3073. SX2 B0
  3074. CTL9 SX1 B5+
  3075. SB6 10
  3076. LX1 24
  3077. ZR B5,CTL10 IF LAST WORD FULL
  3078. + LX6 6
  3079. SB5 B5+B1
  3080. NE B5,B6,* LEFT JUSTIFY ASSEMBLY
  3081. CTL10 SA6 B2+
  3082. SX4 A6
  3083. BX7 X1+X4 MERGE CHARACTER POSITION AND ADDRESS
  3084. MX3 -12
  3085. SA7 SLP STORE EOL POINTER
  3086. BX4 -X3*X6
  3087. ZR X4,CTL11 IF EOL BYTE
  3088. BX6 X6-X6
  3089. SA6 A6+B1 SET END OF LINE
  3090. CTL11 SX7 A6+1
  3091. SA1 SLP
  3092. SA7 LBL STORE EOL ADDRESS
  3093. ZR X2,CTL1 IF SOURCE LINE TRUNCATED
  3094.  
  3095. CTL SUBR ENTRY/EXIT
  3096. PL X2,CTL2 IF NOT END OF LINE
  3097. CTL1 RJ SLT SET LINE TERMINATOR
  3098. SX4 A6+
  3099. MX3 1 FORM EOL POINTER
  3100. BX6 X3+X4
  3101. SA6 SLP
  3102. EQ CTLX RETURN
  3103.  
  3104. CTL2 SB2 X1 SET DESTINATION ADDRESS
  3105. AX1 24
  3106. SA4 X1+TCHM READ LEFT MASK
  3107. SA3 B2
  3108. SB5 X1
  3109. BX6 X4*X3 REMOVE UNWANTED CHARACTER DATA
  3110. CX1 X4
  3111. SB4 X1 SET SHIFT COUNT
  3112. LX6 B4,X6
  3113. SB3 X2+B1 SET SOURCE ADDRESS
  3114. AX2 24
  3115. SA3 B3-B1
  3116. SA4 X2+TCHM READ RIGHT MASK
  3117. BX3 -X4*X3
  3118. CX1 X4
  3119. SB4 X1 SET SHIFT COUNT
  3120. SX1 B6 DESTINATION BUFFER LIMIT
  3121. LX3 B4,X3 POSITION SOURCE DATA
  3122. SB6 10
  3123. SA4 LBL
  3124. MX7 -6
  3125. SB7 X4 SET EOL ADDRESS
  3126. SB4 X2 SOURCE CHARACTER COUNT
  3127. SX2 B1
  3128. EQ CTL8
  3129. ETX SPACE 4,10
  3130. ** ETX - PROCESS TEXT ENTRY.
  3131. *
  3132. * EXIT (X2) = TEXT DATA FET ADDRESS.
  3133. * (A6) = ADDRESS OF BUFFER STATUS WORD.
  3134. *
  3135. * USES A - 0, 1, 2, 3, 4, 6, 7.
  3136. * B - 2, 4, 5, 6, 7.
  3137. * X - 0, 1, 2, 3, 4, 6, 7.
  3138. *
  3139. * CALLS ATL, CIO=, RDS=, WTC=.
  3140.  
  3141.  
  3142. ETX13 READS I,STRA,-STRBL
  3143. RJ CTI CHECK TERMINAL INTERRUPT
  3144. NZ X3,ETX9 IF INTERRUPTED
  3145. NZ X1,ETX8 IF NULL INPUT
  3146. SB4 STRA
  3147. ETX14 SA3 A0+ GET DELIMITER
  3148. SA4 B6-B1 GET LAST CHARACTER
  3149. SB5 A4-B1
  3150. ETX15 SX6 X4-1R
  3151. NZ X6,ETX16 IF NOT BLANK
  3152. SB6 B6-B1
  3153. LE B6,B4,ETX2 IF BLANK LINE
  3154. SA4 B6-B1 GET LAST CHARACTER
  3155. EQ B5,B6,ETX16 IF TWO BLANKS SKIPPED
  3156. ZR X3,ETX15 IF DELIMITER *00*
  3157. ETX16 SB2 B6-1
  3158. SA1 ASC
  3159. ZR X1,ETX18 IF NOT ASCII CHARACTER SET
  3160. LE B2,B4,ETX18 IF AT BEGINING OF LINE
  3161. SA2 B2-B1
  3162. IX6 X1+X2
  3163. ZR X6,ETX17 IF ESCAPE CODE 76B
  3164. SX6 X2-74B
  3165. NZ X6,ETX18 IF NOT ESCAPE CODE 74B
  3166. ETX17 SB2 B2-1
  3167. LX2 6
  3168. BX4 X4+X2
  3169. ETX18 BX6 X3-X4
  3170. NZ X6,ETX19 IF NOT FINAL DELIMITER
  3171. MX6 1
  3172. SB6 B2+ BACKSPACE OVER FINAL DELIMITER
  3173. SA6 A0
  3174. SA4 B6-B1 GET LAST TEXT CHARACTER
  3175. GE B4,B6,ETX2 IF FINAL DELIMITER ONLY
  3176. NZ X4,ETX20 IF LAST CHARACTER NOT *00*
  3177. SX6 1
  3178. SA6 BAC BLANK ADDED AFTER COLON PRECEDING DELIMITER
  3179. ETX19 NZ X4,ETX20 IF LAST CHARACTER NOT *00*
  3180. SX6 1R
  3181. SA6 B6+ PRESERVE COLON WITH BLANK
  3182. SB6 B6+1
  3183. ETX20 SB2 TBUF
  3184. RJ ATL ASSEMBLE TEXT INTO LINE
  3185. ETX21 SX0 X0+1 ADVANCE LINE COUNT
  3186. WRITEC M,TBUF
  3187. SA3 A0
  3188. PL X3,ETX13 IF NOT END OF INPUT
  3189. BX6 X0
  3190. SA6 M+5 STORE LINE COUNT
  3191. WRITER X2 FLUSH BUFFER
  3192. REWIND X2
  3193. ETX22 SB6 =C* READY.*
  3194. SA0 M
  3195. ETX23 WRITEC O,B6
  3196. ZR X0,ETXX IF NO INPUT
  3197. READ A0+,R
  3198. SA3 A0+5 GET LINE COUNT
  3199. SA4 X2
  3200. BX0 X3
  3201. SX6 X4-21B SET BUFFER STATUS
  3202. SA6 TBST
  3203.  
  3204. ETX SUBR ENTRY/EXIT
  3205. SX0 1
  3206. REWIND M,R REWIND TEXT FILE
  3207. SA0 STRB
  3208. WRITEC O,(=C* ENTER TEXT.*)
  3209. ETX1 READS I,STRA,-STRBL
  3210. RJ CTI CHECK TERMINAL INTERRUPTS
  3211. NZ X3,ETX9 IF INTERRUPTED
  3212. BX7 X7-X7
  3213. NZ X1,ETX5 IF EOF (CR) ON INPUT
  3214. SB2 A0
  3215. SA7 BAC CLEAR BACKSPACE INDICATOR
  3216. RJ ANC ASSEMBLE NEXT CHARACTER
  3217. BX6 X2
  3218. SB4 B2+B1 SET FWA OF CHARACTER BUFFER
  3219. SX1 X2-1R$
  3220. ZR X1,ETX6 IF TEXT IN STRING BUFFER
  3221. SX1 X2-1R
  3222. ZR X1,ETX3 IF INCORRECT DELIMITER
  3223. SX0 B0
  3224. SA7 B4-B1
  3225. SA7 A7-B1
  3226. SA6 A0
  3227. NE B4,B6,ETX14 IF NOT DELIMITER ONLY
  3228. ETX2 SX7 B0+ WRITE BLANK LINE
  3229. SA7 TBUF
  3230. EQ ETX21
  3231.  
  3232. ETX3 SA3 JOTY
  3233. NZ X3,ETX4 IF NOT INTERACTIVE JOB
  3234. WRITEC O,(=C* INCORRECT DELIMITER - REENTER TEXT.*)
  3235. EQ ETX1
  3236.  
  3237. ETX4 WRITEC O,(=C* INCORRECT DELIMITER.*)
  3238. EQ MAIN
  3239.  
  3240. * USER SELECTED TEXT ENTERED PREVIOUSLY.
  3241.  
  3242. ETX5 SA7 EOFIF SET EOF ON INPUT
  3243. EQ ETX22
  3244.  
  3245. * USER SELECTED TEXT IN STRING BUFFER.
  3246.  
  3247. ETX6 GE B4,B6,ETX7 IF STRING BUFFER SYMBOL ONLY
  3248. SA4 B4
  3249. SB4 B4+B1
  3250. SX2 X4-1R
  3251. NZ X2,ETX3 IF INCORRECT DELIMITER
  3252. LT B4,B6,ETX3 IF INCORRECT DELIMITER
  3253. ETX7 SA0 B
  3254. REWIND B,R
  3255. SB6 =C* READY.*
  3256. SA1 XTSB GET NUMBER OF POSITIONS TO BACKSPACE
  3257. BX6 X1
  3258. SA6 BAC
  3259. EQ ETX23
  3260.  
  3261. * INPUT TERMINATED WITH EOF.
  3262.  
  3263. ETX8 MX7 1 CLEAR DELIMITER
  3264. BX6 X6-X6
  3265. SA7 A0+
  3266. SA6 EOFIF
  3267. EQ ETX2
  3268.  
  3269. ETX9 SX6 B6 SAVE INPUT STRING LWA+1
  3270. SA6 ETXA
  3271. ETX10 WRITEC O,(=C* DISREGARD PREVIOUS TEXT "CB"*)
  3272. SB6 CMDB FWA WORKING BUFFER
  3273. RJ PUR PROCESS USER RESPONSE
  3274. RJ CTI CHECK TERMINAL INTERRUPTS
  3275. NZ X3,END IF INTERRUPT, SIMULATE END
  3276. NG X4,ETX12 IF INCORRECT REPONSE
  3277. NZ X4,ETX11 PROCESS *YES* RESPONSE
  3278.  
  3279. * TERMINATE TEXT AND PROCESS.
  3280. * (ENTER ASSUMED TERMINATION DELIMETER AT POINT OF INTERRUPT)
  3281.  
  3282. SA1 ETXA RESTORE INPUT STRING LWA+1
  3283. SB6 X1
  3284. SB4 STRA
  3285. EQ ETX8 TERMINATE INPUT
  3286.  
  3287. ETX11 BX0 X0-X0
  3288. EQ ETX22
  3289.  
  3290. ETX12 WRITEC O,PCCD REQUEST *YES* OR *NO* RESPONSE
  3291. EQ ETX10
  3292.  
  3293.  
  3294. ETXA CON 0 INTERRUPTED INPUT STRING LWA+1
  3295.  
  3296. BAC CON 0 NUMBER OF POSITIONS TO BACKSPACE
  3297. GSM SPACE 4,9
  3298. ** GSM - GENERATE STRINGS PROCESSED MESSAGE.
  3299. *
  3300. * ENTRY (X1) = NUMBER OF STRINGS PROCESSED.
  3301. *
  3302. * USES A - 6.
  3303. * B - 6.
  3304. * X - 2, 6.
  3305. *
  3306. * CALLS CDD, WTC=.
  3307.  
  3308.  
  3309. GSM1 RJ CDD CONVERT NUMBER TO DISPLAY CODE
  3310. LX6 12
  3311. SA6 OPM INSERT VALUE IN MESSAGE
  3312. WRITEC O,A6
  3313.  
  3314. GSM SUBR ENTRY/EXIT
  3315. NZ X1,GSM1 IF VALID COUNT
  3316. EQ GSMX RETURN
  3317.  
  3318.  
  3319. OPM DATA C* OCCURRENCES OF PHRASE FOUND.*
  3320. IBC SPACE 4,10
  3321. ** IBC - INSERT BLANK CHARACTERS.
  3322. *
  3323. * ENTRY (X1) = POINTER TO START OF BLANK STRING.
  3324. * (X4) = POINTER TO END OF BLANK STRING.
  3325. *
  3326. * USES A - 1, 2, 3, 4, 6, 7.
  3327. * B - 2, 3, 4, 6, 7.
  3328. * X - 1, 2, 3, 4, 6, 7.
  3329. *
  3330. * CALLS BSP, CAC, CTL, SLT.
  3331.  
  3332.  
  3333. IBC1 BX7 X4-X1
  3334. SA2 ASC
  3335. SB2 X2
  3336. ZR X7,IBCX IF NO STRING
  3337. ZR B2,IBC2 IF NOT ASCII MODE
  3338. RJ CAC COUNT ASCII CHARACTERS
  3339. IBC2 SB6 X1+ FWA OF BLANK STRING
  3340. SB3 TCHM
  3341. AX1 24
  3342. BX2 X4 SAVE END OF STRING POINTER
  3343. SB7 X4+ LWA OF BLANK STRING
  3344. SA3 BLKS
  3345. AX4 24 NUMBER OF BLANKS FOR LAST WORD
  3346. SA1 X1+B3
  3347. SA4 X4+B3
  3348. NE B6,B7,IBC3 IF FWA " LWA
  3349. BX4 X4-X1
  3350. IBC3 LX7 X3
  3351. SA3 B6
  3352. EQ B6,B7,IBC5 IF STRING WITHIN ONE WORD
  3353. BX6 X1*X3
  3354. SB6 B6+B1
  3355. BX3 -X1*X7
  3356. BX6 X6+X3 ADD BLANKS TO FIRST WORD
  3357. SA3 B7
  3358. SA6 B6-B1
  3359. EQ B6,B7,IBC5 IF STRING SPANS TWO WORDS
  3360. IBC4 SA7 B6
  3361. SB6 B6+B1 BLANK BETWEEN FWA AND LWA
  3362. NE B6,B7,IBC4 IF NOT DONE
  3363. IBC5 BX6 X4*X7
  3364. BX1 -X4*X3 ADD BLANKS TO LAST WORD
  3365. BX6 X6+X1
  3366. SA6 B7 STORE LAST WORD
  3367. ZR B2,IBCX IF NOT ASCII MODE
  3368. ZR B4,IBCX IF NO ASCII CHARACTERS
  3369. SX4 B4+
  3370. SA1 LBW
  3371. NG X1,IBC6 IF LBW AT END OF LINE
  3372. RJ BSP BACKSPACE LBW POINTER
  3373. BX6 X1
  3374. SA6 LBW
  3375. IBC6 BX1 X2
  3376. RJ BSP BACKSPACE END OF STRING POINTER
  3377. SB6 B0
  3378. RJ CTL ELIMINATE EXCESS BLANKS
  3379. SA1 SLP
  3380. RJ SLT SET LINE TERMINATOR
  3381.  
  3382. IBC SUBR ENTRY/EXIT
  3383. PL X4,IBC1 IF BLANK STRING NOT AT EOL
  3384. RJ SLT SET LINE TERMINATOR
  3385. EQ IBCX RETURN
  3386. PCC SPACE 4,12
  3387. ** PCC - PROMPT FOR COMMAND CONTINUANCE.
  3388. *
  3389. * ENTRY ((PCCX)-1) = NEGATIVE RETURN ADDRESS.
  3390. * ALL OUTPUT DATA IN THE BUFFER WILL BE ISSUED
  3391. * PRIOR TO PROMPT MESSAGE.
  3392. *
  3393. * EXIT TO NEGATIVE RETURN IF NEGATIVE REPONSE.
  3394. *
  3395. * USES A - 1, 2, 3, 4, 6, 7.
  3396. * X - 2, 3, 4, 7.
  3397. * B - ALL.
  3398. * (REGISTERS X0, X1, X6 ARE SAVED/RESTORED)
  3399. *
  3400. * CALLS CTI, PUR, RSR, SVR, WTC=.
  3401.  
  3402.  
  3403. PCC3 RJ RSR RESTORE WORKING REGISTERS
  3404.  
  3405. PCC SUBR
  3406. SA3 TINT CHEC TEMINAL INTERRUPTS
  3407. ZR X3,PCCX IF NO INTERRUPT
  3408. RJ SVR SAVE WORKING REGISTERS
  3409. RJ CTI CLEAR TERMINAL INTERRUPT
  3410. SA3 NUM CALCULATE CURRENT POSITION
  3411. SA2 A3+B1
  3412. IX1 X3+X2
  3413. SA2 SVLC SET LINE NUMBER
  3414. SX0 1L.&3L
  3415. SX3 X2+B1
  3416. IX1 X3+X1
  3417. RJ CDD
  3418. LX6 18
  3419. BX6 X6-X0
  3420. SA6 PCCB
  3421. WRITEC O,PCCA
  3422. PCC1 WRITEC O,(=C* COMMAND CONTINUE "CB"*)
  3423. SB6 CMDB FWA WORKING BUFFER
  3424. RJ PUR PROCESS USER RESPONCE
  3425. RJ CTI CHECK TERMINAL INTERRUPTS
  3426. NG X4,PCC2 IF INCORRECT REPONSE
  3427. NZ X4,PCC3 IF COMMAND TO CONTINUE
  3428. SA4 PCCX SET NEGATIVE RETURN ADDRESS
  3429. AX4 30
  3430. MX0 42
  3431. SA1 PCCC
  3432. SA4 X4-1 READ RETURN JUMP WORD
  3433. BX6 X0*X1
  3434. BX4 -X0*X4
  3435. IX7 X6+X4
  3436. LX7 30
  3437. SA7 A1
  3438. RJ RSR RESTORE ALL REGISTERS
  3439. PCCC EQ * RETURN
  3440. - EQ *
  3441.  
  3442. PCC2 WRITEC O,PCCD REQUEST *YES* OR *NO* RESPONSE
  3443. EQ PCC1
  3444.  
  3445.  
  3446. PCCA DATA 20H INTERRUPT AT LINE
  3447. PCCB BSS 1
  3448. PCCD DATA C/ ENTER *YES* OR *NO*./
  3449. PUR SPACE 4,15
  3450. ** PUR - PROCESS USER RESPONSE.
  3451. *
  3452. * ENTRY PROMPT MESSAGE ISSUED TO USER.
  3453. * (B6) = FWA WORKING BUFFER FOR READING RESPONSE
  3454. * (MUST BE AT LEAST *LBUFL* WORDS LONG).
  3455. *
  3456. * EXIT (X4) .LT. 0, IF INCORRECT RESPONSE.
  3457. * (X4) = 0, IF NEGATIVE RESPONSE.
  3458. * (X4) .GT. 0, IF POSITIVE RESPONSE.
  3459. *
  3460. * USES A - 1, 7.
  3461. * B - 2, 3, 5.
  3462. * X - 0, 1, 2, 4, 6, 7.
  3463. *
  3464. * CALLS ANC.
  3465. *
  3466. * MACROS READ, READS.
  3467.  
  3468.  
  3469. PUR1 SX4 -1 SET INCORRECT REPONSE
  3470.  
  3471. PUR SUBR
  3472. SX0 B6-B1 SAVE FWA-1 WORKING BUFFER
  3473. BX7 X7-X7 CLEAR INTERRUPT PENDING
  3474. SA7 INTP
  3475. READ I
  3476. READS X2,B6,-LBUFL READ RESPONSE
  3477. NZ X1,PUR1 IF ONLY (CR) ENTERED
  3478. SB2 X0
  3479. BX6 X6-X6 CLEAR ACCUMULATOR
  3480. SB5 60
  3481. SB3 3 SET RESPONSE SIZE
  3482.  
  3483. PUR2 RJ ANC ASSEMBLE NEXT CHARACTER
  3484. EQ B2,B6,PUR3 IF INPUT COMPLETE
  3485. SX1 X2-1R CHECK FOR BLANK
  3486. ZR X1,PUR2 IF BLANK
  3487. SB3 B3-1 INCREMENT LENGTH
  3488. NG B3,PUR1 IF RESPONSE TOO LONG
  3489. SB5 B5-6
  3490. LX6 6
  3491. BX6 X4+X6
  3492. EQ PUR2
  3493.  
  3494. PUR3 LX4 B5,X6 SET RESPONSE
  3495. MX0 42
  3496. SA1 PURA-1 INITIALIZE TABLE SEARCH
  3497. PUR4 SA1 A1+B1 SET NEXT TABLE ITEM
  3498. BX6 X0*X1 COMPARE RESPONSE TO TABLE
  3499. ZR X1,PUR1 IF AT END OF TABLE
  3500. BX2 X6-X4
  3501. NZ X2,PUR4 IF NOT A MATCH
  3502. SX4 X1 SET REPONSE INDICATOR
  3503. EQ PURX RETURN
  3504. SPACE 4
  3505. ** PURA - TABLE OF LEGAL RESPONSES.
  3506. *
  3507. *T 42/RESPONSE,18/TYPE
  3508. *
  3509. * TYPE 0 = NEGATIVE RESPONSE.
  3510. * 1 = POSITIVE RESPONSE.
  3511.  
  3512.  
  3513. PURA BSS 0
  3514. VFD 42/0LNO,18/0
  3515. VFD 42/0LN,18/0
  3516. VFD 42/0LYES,18/1
  3517. VFD 42/0LY,18/1
  3518. CON 0
  3519. PSB SPACE 4,7
  3520. ** PSB - POSITION STRING BUFFER.
  3521. *
  3522. * USES A - 0, 1, 3, 4, 6, 7.
  3523. * B - NONE.
  3524. * X - 1, 2, 3, 4, 6, 7.
  3525. *
  3526. * CALLS CIO=.
  3527.  
  3528.  
  3529. PSB4 BX7 X4
  3530. SX6 A0
  3531. SA7 A4 RESTORE BUFFER POINTERS
  3532. SA6 A7-B1
  3533.  
  3534. PSB SUBR ENTRY/EXIT
  3535. SA3 B+5
  3536. ZR X3,PSBX IF STRING BUFFER EMPTY
  3537. SA1 B
  3538. LX1 59-4 CHECK FILE POSITION
  3539. SX2 A1
  3540. NG X1,PSB1 IF POSITIONED AT EOR
  3541. SKIPEI X2
  3542. PSB1 BKSPRU X2
  3543. RPHR X2,R READ LAST SECTOR
  3544. SA3 X2+2
  3545. SA4 A3+B1 SAVE BUFFER POINTERS
  3546. SA0 X3
  3547. BKSPRU X2,,R POSITION FILE FOR REWRITE
  3548. SA1 MODE
  3549. NZ X1,PSB4 IF LINE MODE
  3550. SA1 XTSP
  3551. NG X1,PSB4 IF PREVIOUS PHRASE AT EOL
  3552. IX6 X4-X3
  3553. SX6 X6+B1
  3554. NZ X6,PSB2 IF MORE THAN ONE WORD IN BUFFER
  3555. SX7 X1-9
  3556. ZR X7,PSB1 IF BUFFER CONTAINS EOL ONLY
  3557. PSB2 SA3 B+5
  3558. SX7 X3-1 ADJUST LINE COUNT
  3559. SA0 A0-B1
  3560. SA7 A3
  3561. ZR X1,PSB4 IF NEXT PHRASE ON WORD BOUNDARY
  3562. SA3 A0+
  3563. NZ X3,PSB3 IF LAST WORD NOT ZERO
  3564. SA0 A0-B1
  3565. SA3 A0
  3566. PSB3 SX2 LBUF-1
  3567. BX6 X3
  3568. LX1 24
  3569. SA6 X2 LAST WORD CURRENTLY IN BUFFER
  3570. BX7 X1+X2
  3571. SA7 SLP FIX POINTER TO LAST WORD
  3572. EQ PSB4
  3573. PSO SPACE 4,10
  3574. ** PSO - PRELIMINARY STRING SEARCH.
  3575. *
  3576. * ENTRY (X3) = POINTER WORD FOR FIRST STRING.
  3577. * (X4) = POINTER WORD FOR SECOND STRING.
  3578. *
  3579. * USES A - 2, 7.
  3580. * B - NONE.
  3581. * X - 0, 2, 6, 7.
  3582. *
  3583. * CALLS CST, AFW, SFS, WTC=.
  3584.  
  3585.  
  3586. PSO SUBR ENTRY/EXIT
  3587. SX0 0
  3588. ZR X4,PSO1 IF ELLIPSIS SEARCH NOT REQUIRED
  3589. RJ CST COUNT ELLIPSI
  3590. SA2 LCT
  3591. RJ AFW ADVANCE TO FIRST OCCURRENCE OF /P1/
  3592. PSO1 SX6 STPHR1 LOCATE FIRST STRING
  3593. RJ SFS
  3594. NZ X7,PSOX IF PHRASE FOUND
  3595. SA7 EOFTF
  3596. PSO2 WRITEC O,NPM
  3597. JP SET2
  3598.  
  3599.  
  3600. NPM DATA C* PHRASE NOT FOUND.*
  3601. RSR SPACE 4
  3602. ** RSR - RESTORE WORKING REGISTERS.
  3603. *
  3604. * ENTRY (SVRA - SVRA+3) = PREVIOUS REGISTER CONTENTS.
  3605.  
  3606.  
  3607. RSR SUBR ENTRY/EXIT
  3608. SA2 SVRA X6
  3609. BX6 X2
  3610. SA1 A2+B1 X1
  3611. SA2 A1+B1 X0
  3612. BX0 X2
  3613. SA2 A2+B1 X2
  3614. EQ RSRX
  3615. RTF SPACE 4,7
  3616. ** RTF - REPOSITION TEXT FILES (READ ONLY OPERATIONS).
  3617. *
  3618. * USES A - 1, 3, 7.
  3619. * B - 6, 7.
  3620. * X - 0, 1, 2, 3, 4, 5, 7.
  3621. *
  3622. * CALLS CIO=, RDC=.
  3623.  
  3624.  
  3625. RTF2 SA1 X5+5
  3626. BX0 X1 TEXT FILE LINE ADVANCE
  3627. REWIND X5
  3628. READ X2
  3629. RTF3 READC X2,LBUF,LBUFL
  3630. SX0 X0-1
  3631. NZ X0,RTF3 IF ADVANCE INCOMPLETE
  3632. SX7 B6
  3633. BX1 X1-X1
  3634. SA7 LBL
  3635.  
  3636. RTF SUBR ENTRY/EXIT
  3637. MX2 -4
  3638. SA1 FBB
  3639. BX4 -X2*X1 ISOLATE ORIGINAL READ FILE BIAS
  3640. SA3 PFADR
  3641. SX2 X4+F INITIAL READ FILE FET
  3642. BX2 X3-X2
  3643. ZR X2,RTF2 IF READ FILE IS PRIMARY FILE
  3644. BX2 X5-X3
  3645. NZ X2,RTF2 IF SCRATCH FILE
  3646. SA3 X5+5
  3647. BX0 X3 SET LINE ADVANCE
  3648. REWIND X5
  3649. READ X2 REPOSITION PRIMARY FILE
  3650. RTF1 READC X2,LBUF,LBUFL
  3651. SX0 X0-1
  3652. NZ X0,RTF1 IF NOT REPOSITIONED
  3653. MX2 -4
  3654. SA1 FBB
  3655. BX3 -X2*X1 BIAS FOR ORIGINAL READ FILE
  3656. SX5 X3+F
  3657. EQ RTF2 REPOSITION SECONDARY FILE
  3658. SBT SPACE 4,12
  3659. ** SBT - SET BLANK TERMINATOR.
  3660. *
  3661. * ENTRY (X1) = END OF LINE POINTER WORD.
  3662. *
  3663. * EXIT (X1) = UPDATED END OF LINE POINTER WORD.
  3664. * (X6) = LAST WORD IN LINE.
  3665. * (B6) = NUMBER OF BLANKS ADDED.
  3666. * (LBL) = END OF LINE ADDRESS.
  3667. *
  3668. * USES A - 3, 4, 6, 7.
  3669. * B - 3.
  3670. * X - 1, 3, 4, 6, 7.
  3671.  
  3672.  
  3673. SBT1 SX7 A6+B1
  3674. SX1 X1+B1 INCREMENT CHARACTER POSITION
  3675. SX3 X1-10
  3676. NZ X3,SBT2 IF NOT FULL WORD
  3677. SX1 B0
  3678. SX4 X4+B1
  3679. SBT2 LX1 24
  3680. BX1 X1+X4 FORM NEW END OF LINE POINTER WORD
  3681. SA7 LBL SET END OF LINE ADDRESS
  3682.  
  3683. SBT SUBR ENTRY/EXIT
  3684. SB6 B0
  3685. NG X1,SBTX IF END OF LINE SET
  3686. SB6 B1
  3687. SA4 X1 GET LAST WORD
  3688. AX1 24
  3689. SA3 X1+TCHM GET MASK
  3690. BX6 X3*X4
  3691. CX7 X3
  3692. SB3 X7-54
  3693. SX3 1R
  3694. AX3 B3,X3 POSITION BLANK CHARACTER
  3695. BX6 X6+X3
  3696. SX3 X1-8
  3697. SA6 A4
  3698. SX4 A4
  3699. NG X3,SBT1 IF END OF LINE ALREADY SET
  3700. BX6 X6-X6
  3701. SA6 A6+B1 SET END OF LINE
  3702. EQ SBT1
  3703. SFS SPACE 4,14
  3704. ** SFS - SEARCH FILE FOR STRING.
  3705. *
  3706. * ENTRY (X0) = 0 SEARCH BEFORE WRITE/READ.
  3707. * " 0 WRITE/READ BEFORE SEARCH.
  3708. * (X6) = STRING POINTER ADDRESS.
  3709. *
  3710. * EXIT (X7) " 0 IF STRING FOUND.
  3711. * = 0 IF EOF.
  3712. *
  3713. * USES A - 0, 2, 4, 6, 7.
  3714. * B - 2, 6, 7.
  3715. * X - 0, 2, 4, 5, 6, 7.
  3716. *
  3717. * CALLS RDC=, SLS, WTC=.
  3718.  
  3719.  
  3720. SFS SUBR ENTRY/EXIT
  3721. ZR X6,SFS1 IF STRING ADDRESS SET PREVIOUSLY
  3722. SA6 SFSA SAVE STRING POINTER ADDRESS
  3723. SFS1 SB2 X0
  3724. BX0 X0-X0
  3725. ZR B2,SFS4 IF SEARCH BEFORE WRITE/READ
  3726. SFS2 WRITEC A5+,LBUF
  3727. SFS3 READC X5,LBUF,LBUFL
  3728. NZ X1,SFS5 IF END OF DATA ENCOUNTERED
  3729. SX0 X0+B1
  3730. SA0 B6
  3731. SFS4 SA2 SFSA GET STRING POINTER
  3732. SA2 X2
  3733. RJ SLS
  3734. NZ B7,SFS2 IF STRING NOT FOUND
  3735. ZR X0,SFSX IF STRING IN ORIGINAL LINE
  3736. SA2 X5+5
  3737. IX6 X2+X0 ADVANCE READ FILE LINE COUNT
  3738. SA6 A2
  3739. BX0 X0-X0
  3740. SX6 A0 SAVE END OF LINE ADDRESS
  3741. SA6 LBL
  3742. EQ SFSX RETURN
  3743.  
  3744. SFS5 SX0 0
  3745. SA4 PFADR
  3746. BX7 X4-X5
  3747. BX5 X4
  3748. SA1 FBB TEXT FILE BECOMES NEW READ FILE
  3749. MX2 56
  3750. BX1 X2*X1
  3751. SX2 X5-F READ FILE BIAS
  3752. BX6 X1+X2
  3753. SA6 A1 UPDATE WRITE/READ FILE BIAS
  3754. NZ X7,SFS3 IF NOT READING PRIMARY TEXT FILE
  3755. SA7 EOFTF
  3756. EQ SFSX RETURN
  3757.  
  3758. SFSA CON 0 STRING POINTER ADDRESS
  3759. SLS SPACE 4,18
  3760. ** SLS - SEARCH LINE FOR STRING.
  3761. *
  3762. * ENTRY (X1) = 0 BEGIN SEARCH AT ADDRESS IN *LBA*.
  3763. * (X1) .NE. 0 BEGIN SEARCH AT POINTER IN *LBW*.
  3764. * (X2) = STRING LENGTH AND ADDRESS.
  3765. *
  3766. * EXIT (B7) = 0 IF STRING FOUND.
  3767. * (X7) - LBW.
  3768. * (X6) - FBW.
  3769. * (A6) - ADDRESS OF FBW.
  3770. * (A7) - ADDRESS OF LBW.
  3771. *T, FBW 36/ N1,24/ A1
  3772. *T, LBW 36/ N2,24/ A2
  3773. *
  3774. * N1 = POSITION OF LEADING CHARACTER IN STRING, .LE. 9.
  3775. * A1 = ADDRESS OF WORD CONTAINING *N1*.
  3776. * N2 = POSITION + 1 OF LAST CHARACTER IN STRING, .LE. 9.
  3777. * A2 = ADDRESS OF WORD CONTAINING *N2*.
  3778. *
  3779. * USES A - 1, 2, 3, 4, 6, 7.
  3780. * B - 2, 3, 4, 5, 6, 7.
  3781. * X - 1, 2, 3, 4, 6, 7.
  3782.  
  3783.  
  3784. SLS10 SX6 B5-B1
  3785. LX6 24
  3786. SX1 A1 LINE ADDRESS OF BEGINNING OF STRING
  3787. SX7 B2
  3788. BX6 X1+X6
  3789. SX4 A3 FORM POINTER TO END OF STRING
  3790. SA6 FBW
  3791. LX7 24
  3792. SB4 B6-B2
  3793. SA2 TCHM+B4 SET MASK
  3794. IX7 X7+X4
  3795. BX3 X2*X3
  3796. NZ X3,SLS12 IF NOT END OF LINE
  3797. NG X3,SLS12 IF WORD OF SEMI-COLONS
  3798. NE B4,B1,SLS11 IF END OF LINE
  3799. SA3 A3+1 NEXT WORD IN LINE
  3800. NZ X3,SLS12 IF NOT ZERO WORD
  3801. NG X3,SLS12 IF NOT END OF LINE
  3802. SLS11 MX1 1
  3803. BX7 X1+X7
  3804. SLS12 SB7 B0+
  3805. SA7 LBW
  3806.  
  3807. SLS SUBR ENTRY/EXIT
  3808. ZR X1,SLS1 IF SEARCH BEGINS AT START OF LINE
  3809. SX1 LBW-LBA
  3810. SLS1 SA4 X2 FIRST STRING CHARACTER
  3811. AX2 24
  3812. SA3 X1+LBA BEGINNING SEARCH ADDRESS
  3813. SB7 X2
  3814. NG X3,SLSX IF POINTER MARKED END OF LINE
  3815. BX6 X1 ZERO INDICATES NO PREVIOUS WORD
  3816. SA1 X3
  3817. SB6 10
  3818. AX3 24
  3819. SB5 X3 POSITION OF ELEMENT IN WORD (0-9)
  3820. LX2 B1,X3
  3821. LX3 2 FORM SHIFT COUNT
  3822. IX2 X3+X2 CHARACTER POSITION * 6
  3823. SB4 X2 SHIFT COUNT FOR FIRST WORD
  3824. LX1 B4,X1 POSITION FIRST CHARACTER
  3825. BX7 -X4 COMPLEMENT OF FIRST STRING CHARACTER
  3826. MX4 -6
  3827. EQ SLS3
  3828.  
  3829. SLS2 MX3 -12
  3830. BX2 -X3*X1 CHECK END OF LINE BYTE
  3831. SB5 B0+
  3832. ZR X2,SLSX IF END OF LINE
  3833. BX6 X1 SAVE PREVIOUS WORD (FOR ASCII)
  3834. SA1 A1+B1
  3835.  
  3836. * LOOP TO LOCATE FIRST STRING CHARACTER IN LINE.
  3837.  
  3838. SLS3 EQ B5,B6,SLS2 IF LAST CHARACTER IN WORD
  3839. LX1 6
  3840. SB5 B5+B1
  3841. BX2 -X4*X1 ISOLATE CHARACTER
  3842. IX3 X2+X7
  3843. NZ X3,SLS3 IF NO MATCH
  3844. NZ X2,SLS5 IF SEARCH CHARACTER NOT A *00*
  3845. NE B5,B6,SLS4 IF COLON NOT AT END OF WORD
  3846. SA2 A1+1 GET NEXT SEARCH WORD
  3847. NZ X2,SLS5 IF NOT ZERO WORD
  3848. PL X2,SLSX IF END OF LINE
  3849. EQ SLS5
  3850.  
  3851. SLS4 SX2 B6-B5
  3852. SA2 X2+TCHM GET MASK
  3853. BX2 X2*X1 INITIALIZE REMAINING CHARACTERS
  3854. ZR X2,SLSX IF END OF LINE
  3855.  
  3856. * CODE TO CHECK PREVIOUS CHARACTER FOR ASCII ESCAPE
  3857. * CHARACTER EXECUTED ONLY IF IN ASCII MODE.
  3858.  
  3859. SLSA BSS 0
  3860. SLS5 EQ SLS7
  3861. * EQ B5,B1,SLS6 (ASCII MODE)
  3862. * BX6 X1 (ASCII MODE)
  3863. * LX6 54 (ASCII MODE)
  3864. SLS6 ZR X6,SLS7 IF NO PREVIOUS WORD
  3865. BX2 -X4*X6 ISOLATE PREVIOUS CHARACTER
  3866. SX3 X2-76B
  3867. ZR X3,SLS3 IF 76B ESCAPE CODE
  3868. SX3 X2-74B
  3869. ZR X3,SLS3 IF 74B ESCAPE CODE
  3870. SLS7 SB3 B0
  3871. SA2 A4
  3872. SA3 A1
  3873. SB2 B5
  3874. BX3 X1
  3875. EQ B2,B6,SLS9 IF CHARACTER LAST IN WORD
  3876.  
  3877. * LOOP CHECKING REMAINDER OF PHRASE.
  3878.  
  3879. SLS8 SB3 B3+B1 COUNT CHARACTERS FOUND
  3880. EQ B3,B7,SLS10 IF SEACH COMPLETE
  3881. LX3 6
  3882. SA2 A2+B1 NEXT STRING ELEMENT
  3883. BX6 -X4*X3
  3884. SB2 B2+B1 ADVANCE CHARACTER POINTER
  3885. BX6 X6-X2
  3886. NZ X6,SLS3 IF NO MATCH
  3887. EQ B2,B6,SLS9 IF AT END OF WORD
  3888. NZ X2,SLS8 IF SEARCH CHARACTER NOT A *00*
  3889. SB4 A2
  3890. SX2 B6-B2
  3891. SA2 X2+TCHM GET MASK
  3892. BX2 X2*X3 INITIALIZE REMAINING CHARACTERS
  3893. ZR X2,SLSX IF END OF LINE
  3894. SA2 B4+
  3895. EQ SLS8
  3896.  
  3897. SLS9 SB2 B0
  3898. SA3 A3+B1
  3899. NZ X2,SLS8 IF SEARCH CHARACTER NOT A *00*
  3900. NZ X3,SLS8 IF NOT ZERO WORD
  3901. PL X3,SLSX IF END OF LINE
  3902. EQ SLS8
  3903.  
  3904. * ASCII MODE CODE REPLACES SLSA.
  3905.  
  3906. SLSB EQ B5,B1,SLS6 IF FIRST CHARACTER IN WORD
  3907. BX6 X1
  3908. LX6 54 POSITION CURRENT CHARACTER
  3909. TCHM SPACE 4
  3910. ** TCHM - TABLE OF CHARACTER MASKS.
  3911.  
  3912.  
  3913. TCHM BSS 0
  3914. DATA 0
  3915. DATA 77000000000000000000B
  3916. DATA 77770000000000000000B
  3917. DATA 77777700000000000000B
  3918. DATA 77777777000000000000B
  3919. DATA 77777777770000000000B
  3920. DATA 77777777777700000000B
  3921. DATA 77777777777777000000B
  3922. DATA 77777777777777770000B
  3923. DATA 77777777777777777700B
  3924. DATA 77777777777777777777B
  3925. SLT SPACE 4,9
  3926. ** SLT - SET LINE TERMINATOR.
  3927. *
  3928. * ENTRY (X1) = END OF LINE POINTER WORD.
  3929. *
  3930. * EXIT (X6) = LAST WORD IN LINE.
  3931. * (B6) = NUMBER OF BLANKS ADDED OR REMOVED (NEGATIVE).
  3932. *
  3933. * USES A - 3, 4, 6, 7.
  3934. * B - 2, 3.
  3935. * X - 1, 3, 4, 6, 7.
  3936.  
  3937.  
  3938. SLT3 SX7 B2+B1 SET END OF LINE ADDRESS
  3939. SA6 B2
  3940. SA7 LBL
  3941.  
  3942. SLT SUBR ENTRY/EXIT
  3943. NG X1,SLTX IF END OF LINE SET
  3944. RJ BLK CHECK FOR COLON AT END OF LINE
  3945. SA4 X1
  3946. AX1 24
  3947. SB2 A4 SET LWA
  3948. SA3 X1+TCHM
  3949. LX1 59-0
  3950. BX6 X3*X4
  3951. PL X1,SLT3 IF EOL ON BYTE BOUNDARY
  3952. CX7 X3
  3953. SX1 1R *100B
  3954. SB3 X7-54
  3955. AX4 B3,X1 POSITION BLANK CHARACTER
  3956. BX7 X6-X4
  3957. SA3 A3-B1 CHECK FOR ODD CHARACTER BLANK
  3958. BX1 -X3*X7
  3959. NZ X1,SLT2 IF NOT BLANK
  3960. NZ X3,SLT1 IF PRECEDING CHARACTER IN SAME WORD
  3961. SA1 B2-B1
  3962. BX7 X1
  3963. SA3 TCHM+10
  3964. SLT1 SA3 A3-B1 CHECK PRECEDING CHARACTER FOR *00*
  3965. BX1 -X3*X7
  3966. ZR X1,SLT2 IF *00*
  3967. LX4 6
  3968. SB3 B1
  3969. SB6 B6-2
  3970. SLT2 LX4 54 POSITION BLANK CHARACTER
  3971. BX6 X6-X4
  3972. SB6 B6+1
  3973. NZ B3,SLT3 IF NOT ON WORD BOUNDARY
  3974. SB2 B2+1
  3975. SA6 A4
  3976. BX6 X6-X6 CLEAR END OF LINE
  3977. EQ SLT3
  3978. SML SPACE 4,11
  3979. ** SML - SEARCH MODIFIED LINE.
  3980. *
  3981. * ENTRY (X6) = STRING POINTER ADDRESS.
  3982. * (X1) - SEE *SLS*.
  3983. *
  3984. * EXIT (X7) " 0 IF STRING FOUND.
  3985. *
  3986. * USES A - 1, 2.
  3987. * B - NONE.
  3988. * X - 0, 1, 2, 6.
  3989. *
  3990. * CALLS SLS, SLT, SFS.
  3991.  
  3992.  
  3993. SML1 SA1 SLP SET LINE TERMINATOR
  3994. RJ SLT
  3995. BX6 X0 SEARCH FILE FOR STRING
  3996. RJ SFS
  3997.  
  3998. SML SUBR ENTRY/EXIT
  3999. BX0 X6
  4000. SA2 X6 SEARCH LINE FOR STRING
  4001. RJ SLS
  4002. NZ B7,SML1 IF NOT IN CURRENT LINE
  4003. EQ SMLX
  4004. SRO SPACE 4,15
  4005. ** SRO - SEARCH READ ONLY.
  4006. *
  4007. * ENTRY (X0) = 0 SEARCH BEFORE READ.
  4008. * " 0 READ BEFORE SEARCH.
  4009. * (X6) = STRING POINTER ADDRESS.
  4010. *
  4011. * EXIT (X7) " 0 IF STRING FOUND.
  4012. * = 0 IF EOF.
  4013. * (B2) = NUMBER OF LINES READ.
  4014. * (B4) = NUMBER OF LINES ADVANCED IN CURRENT READ FILE.
  4015. *
  4016. * USES A - 2, 3, 4, 6.
  4017. * B - 2, 6, 7.
  4018. * X - 0, 2, 3, 4, 5, 6, 7.
  4019. *
  4020. * CALLS RDC=, SLS.
  4021.  
  4022.  
  4023. SRO4 SX6 X0+
  4024. SA6 SROC SAVE PREVIOUS LINE ADVANCE
  4025. CEPF SRO2,4
  4026. SX0 0
  4027.  
  4028. SRO SUBR ENTRY/EXIT
  4029. ZR X6,SRO1 IF STRING POINTER SET PREVIOUSLY
  4030. SA6 SROA SAVE STRING POINTER
  4031. SRO1 SB2 X0
  4032. BX0 X0-X0
  4033. SX6 B0+
  4034. SA6 SROC CLEAR PREVIOUS LINE ADVANCE
  4035. ZR B2,SRO3 IF SEARCH BEFORE READ
  4036. SRO2 SB7 LBUFL SET LINE LENGTH
  4037. SA3 LBA
  4038. READC X5,X3,B7
  4039. NZ X1,SRO4 IF NO DATA TRANSFERED
  4040. SA0 B6
  4041. SX0 X0+B1 ADVANCE LINE COUNT
  4042. SRO3 SA2 SROA GET STRING POINTER
  4043. SA2 X2+
  4044. RJ SLS SEARCH LINE FOR STRING
  4045. NZ B7,SRO2 IF STRING NOT FOUND
  4046. SA2 SROC GET PREVIOUS LINE ADVANCE
  4047. IX2 X0-X2
  4048. SB4 X2 LINE ADVANCE ON CURRENT READ FILE
  4049. SB2 X0
  4050. BX0 X0-X0
  4051. ZR B2,SROX IF FILE NOT ADVANCED
  4052. SX6 A0+
  4053. SA6 LBL
  4054. EQ SROX RETURN
  4055.  
  4056.  
  4057. SROA CON 0 STRING POINTER
  4058.  
  4059.  
  4060. SROC CON 0 PREVIOUS LINE ADVANCE
  4061. SVR SPACE 4
  4062. ** SVR - SAVE WORKING REGISTERS.
  4063. *
  4064. * EXIT FOLLOWING REGISTERS SAVED.
  4065. * X - 0, 1, 2, 6.
  4066.  
  4067.  
  4068. SVR SUBR ENTRY/EXIT
  4069. SA6 SVRA X6
  4070. BX7 X1 X1
  4071. SA7 A6+B1
  4072. BX6 X0 X0
  4073. SA6 A7+B1
  4074. BX7 X2 X2
  4075. SA7 A6+B1
  4076. EQ SVRX
  4077.  
  4078. SVRA BSS 4 REGISTER SAVE AREA
  4079. WNL SPACE 4,19
  4080. ** WNL - WRITE NEW ALIGNED LINE.
  4081. *
  4082. * NEW ALIGNED LINE WRITTEN FROM CHARACTER BUFFER,
  4083. * IF NON-BLANK.
  4084. *
  4085. * ENTRY (B5) = CURRENT CHARACTER ADDRESS IN NEW LINE.
  4086. * (B6) = CURRENT CHARACTER ADDRESS IN OLD LINE.
  4087. * (X0) = LWA+1 LAST COMPLETE WORD IN NEW LINE.
  4088. * (X0) = 0, IF NEW LINE WIDTH .LT. WORD SIZE.
  4089. * (X3) = 0, IF ENTIRE NEW LINE TO BE FLUSHED.
  4090. *
  4091. * EXIT (B4) = MAXIMUM LWA+1 NEW LINE.
  4092. * (B5) = FWA NEW LINE BUFFER.
  4093. * (B6) = CURRENT CHARACTER ADDRESS IN OLD LINE.
  4094. *
  4095. * USES A - 0, 1, 3, 7.
  4096. * X - 0, 1, 3, 4, 7.
  4097. * B - 2, 4, 5, 6.
  4098. *
  4099. * CALLS WTS=.
  4100.  
  4101.  
  4102. WNL SUBR ENTRY/EXIT
  4103. SA1 STRA
  4104. SX7 1R
  4105. IX4 X1-X7
  4106. SB2 A1
  4107. NZ X4,WNL1 IF FIRST CHARACTER NOT BLANK
  4108. SB2 B2+5
  4109. WNL1 LE B5,B2,WNLX IF NEW LINE ALREADY FLUSHED
  4110. ZR X3,WNL2 IF ENTIRE LINE TO BE FLUSHED
  4111. SA1 B6 GET NEXT CHARACTER IN OLD LINE
  4112. IX1 X1-X7
  4113. ZR X1,WNL2 IF NEXT CHARACTER BLANK
  4114. NZ X0,WNL3 IF AT LEAST ONE COMPLETE WORD IN NEW LINE
  4115. WNL2 SX0 B5+
  4116. SA0 B6+
  4117. WNL3 SA1 X0-1
  4118. NZ X1,WNL4 IF LAST CHARACTER NOT COLON
  4119. SA7 X0+
  4120. SX0 X0+1
  4121. WNL4 WRITES A5,STRA,X0-STRA
  4122. SB5 STRA
  4123. SA3 WDTH
  4124. SB4 X3+B5
  4125. SB6 A0
  4126. EQ WNLX
  4127. END TITLE END COMMAND PROCESSOR.
  4128. *** END - PROCESS *END* COMMAND.
  4129.  
  4130.  
  4131. END BSS 0
  4132. SA1 EOFTF
  4133. SX2 A5+
  4134. ZR X1,END2 IF POSITIONED AT EOF
  4135. WRITEC X2,LBUF
  4136. END1 READW X5,LBUF,CBUFL
  4137. SB7 B6-LBUF SET NUMBER WORDS TO WRITE
  4138. BX0 X1
  4139. SX2 A5 WRITE FILE FET ADDRESS
  4140. WRITEW X2,LBUF,B7
  4141. ZR X0,END1 IF COPY INCOMPLETE
  4142. CEPF END1,4
  4143. END2 WRITER X2,R FLUSH BUFFER
  4144. SA3 DAFF
  4145. ZR X3,END7 IF DIRECT ACCESS FILE
  4146. RENAME X2,TFILE RENAME FINAL COPY
  4147. END3 REWIND X2
  4148. SB3 S
  4149. SB4 M LAST FILE TO BE RETURNED
  4150. END4 SX3 A5-B3
  4151. ZR X3,END5 IF FILE CONTAINING FINAL COPY
  4152. RETURN B3
  4153. END5 SB3 B3+FETL
  4154. LE B3,B4,END4 IF NOT ALL FILES RETURNED
  4155. END6 WRITEC O,(=C* END TEXT EDITING.*)
  4156. WRITER X2 END TEXT EDITING
  4157. ENDRUN
  4158.  
  4159. END7 SX4 X2-F
  4160. ZR X4,END3 IF FINAL COPY PERMANENT
  4161. REWIND F
  4162. SA0 X2
  4163. REWIND A5
  4164. READ X2 MAKE FINAL COPY PERMANENT
  4165. END8 READW A5,LBUF,CBUFL
  4166. SB7 B6-LBUF
  4167. BX0 X1
  4168. SX2 A0
  4169. WRITEW X2,LBUF,B7
  4170. ZR X0,END8 IF COPY NOT COMPLETE
  4171. WRITER X2,R
  4172. SA5 X2
  4173. EQ END3 RETURN SCRATCH FILES
  4174. TITLE COMMON DECKS.
  4175. *CALL COMCUSB
  4176. *CALL COMCSYS
  4177. *CALL COMCCIO
  4178. *CALL COMCRDS
  4179. *CALL COMCLFM
  4180. *CALL COMCRDW
  4181. *CALL COMCRDC
  4182. *CALL COMCSFN
  4183. *CALL COMCWTW
  4184. *CALL COMCWTS
  4185. *CALL COMCWTC
  4186. *CALL COMCCDD
  4187. *CALL COMCPFM
  4188. IDENT SPACE 4
  4189. IDENT FORCE LITERALS
  4190. PRS TITLE PRESET.
  4191. EDIT BSS 0
  4192. PRS SB1 1
  4193. PRS1 SB2 CCDR UNPACK COMMAND
  4194. SB6 CCBL
  4195. RJ USB
  4196. SX2 1R9+1 SET DELIMITER CHECK
  4197. PRS2 SA1 B6 ADVANCE CHARACTER
  4198. SB6 B6+B1
  4199. IX3 X1-X2 CHECK FOR END OF PROGRAM NAME\
  4200. ZR X1,ERR IF TERMINATION
  4201. NG X3,PRS2 IF NOT END OF PROGRAM NAME
  4202. SB3 X1-1R.
  4203. SB4 X1-1R)
  4204. SX1 X1-1R
  4205. ZR B3,PRS3 IF NO ARGUMENTS
  4206. ZR B4,PRS3 IF NO ARGUMENTS
  4207. ZR X1,PRS2 IF SPACE (IGNORE)
  4208. SB3 TARG SET ARGUMENT TABLE ADDRESS
  4209. SB2 TARGL SET ARGUMENT TABLE LENGTH
  4210. SB4 PRSD SET STRING BUFFER ADDRESS
  4211. RJ CPA CONVERT POSITIONAL ARGUMENTS
  4212. NG B5,ERR IF ERROR IN CONVERSION
  4213. PL X1,PRS3 IF NO ARGUMENTS PROCESSED
  4214. SX6 B5 SET UP PARAMETER CRACKING
  4215. SB6 PRSD
  4216. SA6 USBC
  4217. RJ ARM CRACK PARAMETERS
  4218. NZ X1,ERR IF ERROR IN PARAMETERS
  4219. MX0 42 CHECK FOR RESERVED FILE NAMES
  4220. SA3 TFILE
  4221. BX7 X3
  4222. SA7 F
  4223. BX4 X3*X0
  4224. SA3 A7
  4225. RJ CRN
  4226. ZR X7,ERR1 IF FILE NAME RESERVED
  4227. SA3 I
  4228. BX4 X3*X0
  4229. RJ CRN
  4230. ZR X7,ERR1 IF FILE NAME RESERVED
  4231. SA3 O
  4232. BX4 X3*X0
  4233. RJ CRN
  4234. ZR X7,ERR1 IF FILE NAME RESERVED
  4235. PRS3 SX2 I SET TERMINAL FILE
  4236. RJ STF
  4237. SA6 EOFIF SET FILE STATUS
  4238. SA6 JOTY
  4239. BX5 X6
  4240. ZR X6,PRS4 IF INTERACTIVE JOB
  4241. READ X2 INITIAL DIRECTIVE READ
  4242. EQ PRS5 EVICT SCRATCH FILES
  4243.  
  4244. PRS4 DISTC ON,TINT SET TERMINAL CONTROLS
  4245. PRS5 EVICT S
  4246. EVICT SC
  4247. EVICT B
  4248. EVICT M
  4249. EVICT T
  4250. SA3 O SET OUTPUT FET POINTER
  4251. MX0 42
  4252. SX2 A3
  4253. BX3 X0*X3
  4254. BX6 X3+X2
  4255. SX7 1R SET NON-ZERO WORD PAD BEFORE LINE BUFFERS
  4256. SA6 ARGR
  4257. SA7 LBUF-1
  4258. SA7 TBUF-1
  4259. SA4 ASC CHECK EDIT MODE
  4260. ZR X4,PRS8 IF NO MODE PARAMETER PRESENT
  4261. SA1 MARG-1 CHECK MODE PARAMETER
  4262. MX0 42
  4263. BX4 X4*X0
  4264. PRS6 SA1 A1+B1 CHECK NEXT TABLE ITEM
  4265. SB2 X1
  4266. ZR X1,ERR IF ITEM NOT IN TABLE
  4267. BX6 X1*X0
  4268. IX7 X6-X4 COMPARE TABLE ITEM TO MODE
  4269. NZ X7,PRS6 IF NO MATCH
  4270. BX0 X5 SET INTERACTIVE I/O
  4271. EQ B2,B0,PRS7 IF *NORMAL* OPTION
  4272.  
  4273. * PROCESS *ASCII* OPTION.
  4274.  
  4275. SX6 -76B SET ASCII INDICATOR TO ASCII
  4276. SA6 ASC
  4277. SA1 SLSB PRESET ASCII CODE
  4278. SA2 ANCB
  4279. BX6 X1
  4280. LX7 X2
  4281. SA6 SLSA
  4282. SA7 ANCA
  4283. NZ X0,PRS8 IF NOT INTERACTIVE I/O
  4284. CSET ASCII
  4285. EQ PRS8
  4286.  
  4287. * PROCESS *NORMAL* OPTION.
  4288.  
  4289. PRS7 SX6 B0+ SET ASCII INDICATOR TO NORMAL
  4290. SA6 ASC
  4291. NZ X0,PRS8 IF NOT INTERACTIVE I/O
  4292. CSET NORMAL
  4293. PRS8 SX3 B1 CHECK EDIT FILE
  4294. SA4 TFILE
  4295. IX4 X4-X3
  4296. NZ X4,PRS11 IF EDIT FILE SPECIFIED
  4297.  
  4298. NZ X5,ERR IF NOT INTERACTIVE JOB
  4299. WRITEC O,PRSA * ENTER TEXT FILE NAME.*
  4300. READ I GET EDIT FILE NAME
  4301. SA0 LBUF
  4302. READS X2,A0,-30
  4303. NZ X1,ERR IF EOF (CR) ON INPUT
  4304. SB2 A0-B1
  4305. BX6 X6-X6 CLEAR ACCUMULATOR
  4306. SB5 60
  4307. SB3 7
  4308.  
  4309. * ASSEMBLE FILE NAME.
  4310.  
  4311. PRS9 RJ ANC ASSEMBLE NEXT CHARACTER
  4312. EQ B2,B6,PRS10 IF END OF INPUT
  4313. SX1 X2-1R
  4314. ZR X1,PRS9 IF BLANK CHARACTER
  4315. ZR X4,ERR IF NOT ALPHANUMERIC CHARACTER
  4316. SX1 X4-1R+
  4317. PL X1,ERR IF NOT ALPHANUMERIC CHARACTER
  4318. SX1 X3-74B
  4319. ZR X1,ERR IF 74B ESCAPE CODE
  4320. SB3 B3-1
  4321. NG B3,ERR IF FILE NAME TOO LONG
  4322. SB5 B5-6
  4323. LX1 B5,X4
  4324. BX6 X6+X1 ADD CHARACTER TO ACCUMULATOR
  4325. EQ PRS9
  4326.  
  4327. PRS10 BX4 X6 CHECK FILE NAME
  4328. ZR X4,PRS9 IF NO FILE NAME
  4329. SA3 B0
  4330. RJ CRN CHECK FOR RESERVED FILE NAME
  4331. ZR X7,ERR1 IF FILE NAME RESERVED
  4332. SX5 B1
  4333. BX7 X4+X5
  4334. SA7 TFILE
  4335. SA7 F SET FILE NAME IN FET
  4336. PRS11 SA1 F SET FILE NAME IN *FILINFO* BLOCK
  4337. MX0 42
  4338. BX1 X0*X1
  4339. SA2 FINB
  4340. BX6 X1+X2
  4341. MX0 -6
  4342. SA6 A2
  4343. FILINFO A2 GET FILE INFORMATION
  4344. SA1 FINB+1 CHECK FILE TYPE
  4345. BX6 -X0*X1
  4346. LX1 59-7 CHECK FILE MODE
  4347. SX6 X6-4 INITIALIZE DIRECT ACCESS FILE FLAG
  4348. SA6 DAFF
  4349. ZR X1,PRS11.2 IF FILE NOT FOUND
  4350. SA3 JOTY CHECK FOR INTERACTIVE JOB
  4351. NZ X3,PRS11.2 IF NOT TERMINAL INPUT
  4352. NG X1,PRS11.2 IF EDIT FILE IN WRITE MODE
  4353. WRITEC O,PRSE *EDIT FILE NOT IN WRITE MODE.*
  4354. WRITEC O,PRSF *DO YOU WISH TO CONTINUE*
  4355. PRS11.1 SB6 LBUF FWA WORKING BUFFER
  4356. RJ PUR PROCESS USER RESPONSE
  4357. RJ CTI CHECK TERMINAL INTERRUPTS
  4358. NZ X3,END6 IF TERMINAL INTERRUPT
  4359. ZR X4,END6 IF *NO* RESPONSE
  4360. PL X4,PRS11.2 IF *YES* RESPONSE
  4361. WRITEC O,PCCD REQUEST *YES* OR *NO* RESPONSE
  4362. EQ PRS11.1 PROCESS USER RESPONSE
  4363.  
  4364. PRS11.2 REWIND F
  4365. READ X2
  4366. READC X2,LBUF,LBUFL
  4367. SX7 B1
  4368. SX6 B6
  4369. NZ X1,PRS12 IF EDIT FILE EMPTY
  4370. SA7 EOFTF
  4371. SA6 LBL
  4372. PRS12 SA5 SC
  4373. SA7 F+5
  4374. SX5 F
  4375. RJ CTI CHECK TERMINAL INTERRUPT
  4376. NZ X3,END6 IF INTERRUPTED
  4377. WRITEC O,PRSB * BEGIN TEXT EDITING.*
  4378. JP MAIN BEGIN TEXT EDITING
  4379. ERR SPACE 4
  4380. ** ERR - ISSUE COMMAND ERROR MESSAGE.
  4381. *
  4382. * ENTRY (B6) = ERROR MESSAGE ADDRESS, IF ENTRY AT *ERR1*.
  4383.  
  4384.  
  4385. ERR SB6 PRSC * COMMAND ERROR.*
  4386. ERR1 MESSAGE B6,3 ISSUE ERROR MESSAGE
  4387. ABORT
  4388. TARG SPACE 4
  4389. ** TARG - TABLE OF ARGUMENTS.
  4390.  
  4391.  
  4392. TARG BSS 0
  4393. FN ARG ST,TFILE,400B,0
  4394. M ARG ST,ASC,0,1
  4395. I ARG ST,I,,0
  4396. L ARG ST,O,,0
  4397. ARG
  4398. TARGL EQU *-TARG-1 ARGUMENT TABLE LENGTH
  4399.  
  4400.  
  4401. ST CON 1 DEFAULT FET STATUS
  4402. MARG SPACE 4
  4403. ** MARG - TABLE OF MODE ARGUMENTS.
  4404.  
  4405.  
  4406. MARG BSS 0
  4407. VFD 42/0LASCII,18/1
  4408. VFD 42/0LAS,18/1
  4409. VFD 42/0LNORMAL,18/0
  4410. VFD 42/0LN,18/0
  4411. CON 0
  4412. SPACE 4,10
  4413. FINB BSS 0 *FILINFO* PARAMETER BLOCK
  4414. VFD 42/0,6/5,12/1
  4415. BSSZ 4
  4416. SPACE 4
  4417. ** COMMON DECKS.
  4418.  
  4419.  
  4420. *CALL COMCARM
  4421. *CALL COMCCPA
  4422. *CALL COMCPOP
  4423. *CALL COMCSTF
  4424. PRSA SPACE 4
  4425. ** PRESET MESSAGES.
  4426.  
  4427.  
  4428. PRSA DATA C* ENTER TEXT FILE NAME."CB"*
  4429. PRSB DATA C* BEGIN TEXT EDITING.*
  4430. PRSC DATA C* COMMAND ERROR.*
  4431. PRSE DATA C* EDIT FILE NOT IN WRITE MODE.*
  4432. PRSF DATA C* DO YOU WISH TO CONTINUE"CB"*
  4433.  
  4434. * COMMAND STRING BUFFER.
  4435.  
  4436. PRSD EQU *
  4437. * BSS 200
  4438. BUFFERS TITLE BUFFERS.
  4439. CMDB EQU PRS
  4440. STRB EQU CMDB+CMDBL
  4441. STRA EQU STRB+1
  4442. IFLT CMDBL+STRBL+2,FBUFL
  4443. LBUF EQU CMDB+FBUFL
  4444. ELSE 1
  4445. LBUF EQU STRA+STRBL+1
  4446. TBUF EQU LBUF+LBUFL+1
  4447. IFLT LBUFL*3,CBUFL
  4448. OBUF EQU LBUF+CBUFL
  4449. ELSE 1
  4450. OBUF EQU TBUF+2*LBUFL
  4451. IBUF EQU OBUF+OBUFL
  4452. MBUF EQU IBUF+IBUFL
  4453. BBUF EQU MBUF+MBUFL
  4454. FBUF EQU BBUF+BBUFL
  4455. SBUF EQU FBUF+FBUFL
  4456. SCBUF EQU SBUF+FBUFL
  4457. USBB EQU SCBUF+FBUFL
  4458. RFL= EQU USBB+CCBL+4
  4459. ALFL EQU USBB+USBBL+4
  4460. END
cdc/nos2.source/opl871/edit.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator