Table of Contents

CONDC

Table Of Contents

  • [00023] CONDC1 CPU-TUTOR CONDENSOR
  • [00024] ENTRY
  • [00090] EXT
  • [00108] -NXTLINE- MAIN LOOP
  • [00221] STANDARD COMMAND WORD STORAGE EXITS
  • [00290] NO ARGUMENT STANDARD READIN
  • [00322] ONE ARGUMENT STANDARD READINS
  • [00383] TWO ARGUMENT STANDARD READINS
  • [00441] ONE OR TWO ARGUMENT STANDARD READINS
  • [00559] THREE ARGUMENT STANDARD READINS
  • [00606] READIN OF SYSTEM COMMANDS
  • [00676] SCANNER ROUTINE
  • [00752] CASE-SENSITIVE SCANNER ROUTINE
  • [00833] -DEBLANK- STRIP LEADING SPACES
  • [00860] CHECK FOR EXACT TAG MATCH
  • [00889] -COLONCK- CHECK FOR COLON AS NEXT SEPARATOR
  • [00926] CONDENS
  • [01017] -AT- COMMAND
  • [01117] UNAMX
  • [01239] -SLIDE- AND -ALTFONT-
  • [01289] FINIS
  • [01324] CHAR, END, AND MODE
  • [01364] -BACKGND- -FOREGND-
  • [01435] SHOWA, SHOWO, AND SHOWH CONDENSE
  • [01486] TEMPORARY KLUDGE FORM OF -GROUP-
  • [01543] -ANSV- COMMAND READ-IN
  • [01571] PUTV
  • [01599] OK,NO,IGNORE,STORAGE,GETCHAR
  • [01637] CHARSET LINESET MICRO
  • [01724] PPTMESS - ISSUE *PPT* ERROR MESSAGE.
  • [01772] CONDENSOR OVERLAY CALLS
  • [01820] -NXTNAM-
  • [01923] -ACCFILE- GET ACCOUNT AND FILE NAMES
  • [02197] TERM
  • [02263] GENERAL SUBROUTINES FOR PROCESSING VARIABLES
  • [02678] ABORTCON–ABORT CONDENSE
  • [02743] TUTOR COMMAND STATISTICS
  • [02794] WRITECS - WRITE NEXT BLOCK OF BINARY TO ECS
  • [03234] -APACK-
  • [03291] -GETARGS-
  • [03372] -DUMP- COMMAND
  • [03403] TABC
  • [03404] CENTRAL SUBOV TABLE
  • [03507] CENTRAL CONDENSE COMMAND NAME TABLE
  • [03658] READ-IN JUMP TABLE

Source Code

CONDC.txt
  1. CONDC
  2. * /--- FILE TYPE = E
  3. * /--- BLOCK INIT 00 000 81/08/05 21.27
  4. IDENT CONDC
  5. LCC OVERLAY(1,0,O=OVERLAY)
  6.  
  7. CST
  8. *
  9. *
  10. * CALL EITHER INITIAL ENTRY OR MTUTOR FINISH
  11. *
  12. CONDC LEVEL LEVEL0
  13.  
  14. + EQ INITC INITIAL ENTRY
  15. + EQ =XCONDFIN FINISH UP AFTER MICROTUTOR
  16.  
  17. INITC X INITOV ENDS UP JUMPING TO NXTLINE
  18.  
  19.  
  20. END CONDC
  21. * /--- BLOCK ENTRY 00 000 81/07/16 09.27
  22. IDENT CONDC1
  23. TITLE CONDC1 CPU-TUTOR CONDENSOR
  24. TITLE ENTRY
  25.  
  26. CST
  27. *
  28. * ENTRY POINTS
  29. *
  30. ENTRY SEPCMAS
  31. ENTRY VARDO
  32. ENTRY VARDO1
  33. ENTRY VARDO2
  34. ENTRY VARDOR
  35. ENTRY PUTDO2
  36. ENTRY SYSTEST
  37. ENTRY VARFIN
  38. ENTRY VARFINM
  39. ENTRY MRKLAST
  40. ENTRY VARFINS
  41. ENTRY VARDOC
  42. ENTRY VARDOCL
  43. ENTRY VARFEM
  44. ENTRY VARLEX
  45. ENTRY VARONE
  46. ENTRY NOARG
  47. ENTRY VARSEP
  48. ENTRY CSTO
  49. ENTRY NXTLINE
  50. ENTRY NXTC
  51. ENTRY SHOWAGO
  52. ENTRY ATGO
  53. ENTRY PAUSE2
  54. ENTRY ONETWO1,NOTAG
  55. * FOLLOWING FOR PACK OVERLAY
  56. ENTRY CONV2,BRVAR,CONUL4
  57. ENTRY CONV3
  58. ENTRY RGIN
  59. * /--- BLOCK ENTRY 00 000 81/07/16 01.47
  60. * ENTRIES FOR TABC
  61. ENTRY SONE2IN,SEEDC,MASTORC,CALCCIN,OKIN
  62. ENTRY AFONTC,ONEARG,PUTVC,ONEPUT,ONESTOR
  63. ENTRY ANSUIN,ANSVIN,ONE2C,ONE2IN,ONE2IN0
  64. ENTRY SYSONEP,SYSONES,CKPTC,OUTPTIN,SYSTRI
  65. ENTRY SYSTWO,ATIN,FORGNDI,AUDIOC,TEXTIN
  66. ENTRY TWOARG,GETCHRC,SAYCIN,BCKGNDI,BLOCKIN
  67. ENTRY BLOCKIN,GETMKC,USEEC,RECRDIN,SHOWHC
  68. ENTRY PERMIN,SSTARIN,GROUPIN,TERMC,PLAYC
  69. ENTRY PPTRUNC,CHECKIN,CHARIN,CHARTST
  70. ENTRY NOIN,PPTADDC,NAMEC,PPTOUTC,CODOUTC
  71. ENTRY COLLCTC,ENDIN,TERMOPC,TWOSTOR,LLISTIN
  72. ENTRY WRGUIN,CREATEC,EXTC,COMPARC,SLIDEC
  73. ENTRY SLISTIN,SAYLGIN,CSETIN,MDBITIN,CONDNIN
  74. ENTRY ONE0,ERASEC,SHOWAIN,SYSLOIN,ONETWO
  75. ENTRY WRTNSIN,SAYIN,REMOVLC,IGIN,SHOWOC
  76. ENTRY HASHIN
  77.  
  78. * EXTERNALS FOR TABC
  79. EXT OVRLAYS
  80. EXT ERASEC=
  81. EXT BACKG=
  82. EXT WRONGV=
  83. EXT ANSV=
  84. EXT OK=
  85. EXT FINIS=
  86. EXT HOLFIN
  87. EXT COMNAMS
  88. EXT COMINFO
  89. * /--- BLOCK EXT 00 000 81/07/16 04.07
  90. TITLE EXT
  91. *
  92. * EXTERNAL SYMBOLS
  93. *
  94. EXT KEYTYPE
  95. EXT ERRORC
  96. EXT ABORTC
  97. EXT GETLINE ROUTINE TO GET NEXT LINE OF TUTOR CODE
  98. *
  99. * EXTERNS IN COND
  100. EXT OLDCMND
  101. EXT CLINES
  102. * /--- BLOCK VARS 00 000 81/07/14 14.31
  103. ENTRY COMCONT
  104. *
  105. COMCONT VFD 60/8L BLANK FOR CONTINUED COMMAND
  106. COMCONF VFD 60/8L\ \ FOR RUSSIAN (1-FONT,7-SPACES)
  107. * /--- BLOCK NXTLINE 00 000 81/07/17 15.04
  108. TITLE -NXTLINE- MAIN LOOP
  109. *
  110. NXTLINE BSS 0 PROCESS NEXT LINE OF LESSON
  111. *///
  112. SA1 TMPCMNM HE WHO TRIES TO TRASH MY CELL
  113. SA2 TMPTRAP WILL JUST BE TOLD TO GO TO HELL
  114. BX1 X1-X2 IF THINGS DONT JIVE,
  115. ZR X1,NLTMPOK THE BOMB WILL DROP
  116. PS BY MEANS OF THIS HERE PROGRAM STOP
  117. TMPTRAP DATA 8L*TEMPCOM
  118. NLTMPOK BSS 0
  119. *///
  120. SA1 TSCOMFG
  121. PL X1,NXTLIN JUMP IF STAT OFF
  122. RJ PSTCMS1 TAKE COMMAND STATISTICS
  123. NXTLIN RJ GETLINE GET NEXT LINE--*WORDPT*=1ST TAG CHAR ADDR.
  124. NXTC SA2 COMMAND X2 = CURRENT COMMAND NAME
  125. SA3 COMCONT SEE IF IT IS A BLANK (CONTINUED COMMAND)
  126. SA4 COMCONF SEE IF A FONT CONTINUED
  127. BX3 X2-X3
  128. BX4 X2-X4
  129. + ZR X3,*+1 SEE IF CONTINUED COMMAND
  130. NZ X4,NXTCOM NOT EQUAL MEANS NEW COMMAND
  131. SA2 OLDCMND GET PREVIOUS COMMAND NAME
  132. NXTCOM SA1 CLINES COMMANDS PROCESSED THIS LESSON
  133. SX6 X1+1 INCREMENT COUNT
  134. SA6 A1
  135. *
  136. LIST X,G
  137. *
  138. *CALL MACROS
  139. *
  140. ADR MICRO 1,,/A0/ A0 = START OF HASH TABLE
  141. COM MICRO 1,,/B2/ B2 = START OF COMNAMS FOR FIND
  142. SA0 COMINFO COMINFO IS HASH TABLE
  143. *
  144. * HASH THE COMMAND NAME
  145. *
  146. HASH X2,X0,A1 X2 = CURRENT COMMAND (HOLERITH)
  147. *
  148. * FIND COMMAND IN NAME TABLE
  149. *
  150. SB2 COMNAMS
  151. FIND X2,X0,NXTCOMA,B1,X5,B5,B3,B4,A1
  152. *
  153. LIST *
  154. *
  155. * TREAT POSSIBLE STATEMENT LABEL EXACTLY LIKE -CALC-
  156. *
  157. SA5 LABINFO X5 = LABEL INFO
  158. UX5,B5 X5 B5 = INDEX FOR STATISTICS
  159. LX5 16 POSITION PROPERLY
  160. EQ NXTCOMB
  161. * COMMAND NAME WAS FOUND
  162. NXTCOMA BX6 X2
  163. SA6 OLDCMND SAVE COMMAND NAME
  164. LX5 16 BIT SET IF COMMAND MAY NOT BE INDENTED
  165. * /--- BLOCK NXTLINE2 00 000 81/07/13 20.33
  166. * X5 HOLDS COMMAND INFO
  167. * B5 HOLDS NAME TABLE INDEX (FOR STATISTICS)
  168. *
  169. * CHECK IF THIS COMMAND CAN BE INDENTED
  170. NXTCOMB SA1 INDENT INDENT COUNT FOR THIS LINE
  171. SA2 PISTACK POINTER TO TOP OF INDENT STACK
  172. ZR X1,NXTCOMC OK IF NOT INDENTED
  173. NG X5,NOINDT ERROR IF CAN'7T HAVE INDENTING
  174. * VERIFY THAT THIS COMMAND IS INDENTED PROPERLY
  175. NXTCOMC LX5 -1 BIT SET IF COMMAND DOES ITS OWN VERIFYING
  176. IX2 X2-X1 COMPARE INDENT AND STACK LEVELS
  177. ZR X2,NXTCOMF JUMP IF INDENTING IS CORRECT
  178. NG X5,NXTCOMF JUMP IF SPECIAL COMMAND
  179. RJ =XCHKIND OUTPUT ERROR MESSAGES AND FIX THE STACK UP
  180. * CHECK IF NEED TO TERMINATE THE CALC
  181. NXTCOMF LX5 -1 BIT SET IF CALC-TYPE COMMAND
  182. SA1 =XCALCACT
  183. ZR X1,NXTCOMG JUMP IF NO CALC IS ACTIVE
  184. NG X5,NXTCOMG JUMP IF CALC-TYPE COMMAND
  185. RJ =XENDCALC TERMINATE CALC (SAVES X5,B5)
  186. NXTCOMG LX5 34 POSITION COMMAND INFO
  187. UX5,B1 X5 COMMAND NUMBER TO B1
  188. SX6 B1
  189. SB1 X5 B1 = JUMP ADDRESS
  190. SA6 COMNUM SAVE COMMAND NUMBER IN COMNUM
  191. SA1 TSCOMFG
  192. ZR X1,NXTCOMH IF NO STATISTICS
  193. SX6 B5
  194. SA6 SCOMNUM SAVE COMMAND NUMBER FOR STAT
  195. MX6 59
  196. SA6 A1 SET COMMAND STAT FLAG TO -1(ON)
  197. SA2 SYSCLOK
  198. BX6 X2
  199. SA6 SCOMBEG SAVE BEGIN COMMAND CONDENSING TIME
  200. *
  201. NXTCOMH NG B1,NXTCOMI IF OVERLAY CALL
  202. JP B1
  203. *
  204. * LOAD AND EXECUTE OVERLAY
  205. *
  206. NXTCOMI MX7 0 CLEAR OVERLAY STACK POINTER
  207. SA7 =XOVRSTAK
  208. SX7 B1
  209. MX2 -8
  210. BX6 -X2*X7 (X6)=OVERLAY ARGUMENT
  211. SA6 OVARG1
  212. AX7 9
  213. BX7 -X2*X7 (X7)=OVERLAY NUMBER
  214. SX7 X7+OVRLAYS RESTORE PROPER VALUE
  215. CALL EXECOV0 EXECUTE OVERLAY
  216. EQ ERRORC FOR THOSE WHO RETURN ON ERRORS
  217. *
  218. ENTRY LABINFO
  219. LABINFO DATA 0 HOLDS INFO FOR STATEMENT LABEL
  220. * /--- BLOCK STANDARDS 00 000 80/12/26 14.26
  221. TITLE STANDARD COMMAND WORD STORAGE EXITS
  222. *
  223. *
  224. * THE -CALCODE- ENTRY POINT ASSUMES THAT THE
  225. * -GETVAR- OR -PUTVAR- CODE IS IN X1. THIS CODE
  226. * IS MOVED TO THE TOP *XCODEL* BITS AND ADDED TO
  227. * THE COMMAND CODE NUMBER, WITH THE RESULT STORED
  228. * AS THE COMMAND WORD.
  229. *
  230. ENTRY CALCODE
  231. *
  232. CALCODE MX0 -XCODEL ONLY WANT -GETVAR- CODE
  233. BX6 -X0*X1
  234. LX6 -XCODEL LEFT-ADJUST -GETVAR- CODE
  235. *
  236. *
  237. *
  238. * THE -PUTCODE- ENTRY POINT ADDS THE COMMAND CODE
  239. * NUMBER TO THE CONTENTS OF REGISTER X6 AND STORES
  240. * THE RESULT AS THE COMMAND WORD.
  241. *
  242. ENTRY PUTCODE
  243. *
  244. PUTCODE SA1 COMNUM X1 = COMMAND NUMBER
  245. BX6 X6+X1 ADD REMAINDER OF COMMAND WORD
  246. *
  247. *
  248. * THE -ALTCODE- ENTRY POINT PROVIDES AN EXIT
  249. * BRANCH ADDRESS FOR USE BY COMMANDS THAT EMPLOY AN
  250. * ALTERNATE COMMAND CODE NUMBER. THE COMPLETED
  251. * COMMAND WORD IS ASSUMED TO BE IN X6.
  252. *
  253. ENTRY ALTCODE
  254. *
  255. ALTCODE SA1 ICX X1 = CURRENT CODES INDEX
  256. SX7 X1-1 DECREMENT CODES COUNT
  257. SA7 A1
  258. SA6 INFO+X7 STORE COMMAND WORD
  259. EQ NXTLINE
  260. *
  261. *
  262. * THE -ALTCOD1- ENTRY POINT IS THE SAME AS
  263. * THE -ALTCODE- ENTRY POINT, EXCEPT IT ASSUMES
  264. * A CALL TO -GETLINE- HAS ALREADY BEEN DONE
  265. *
  266. ENTRY ALTCOD1
  267. ALTCOD1 SA1 ICX X1 = CURRENT CODES INDEX
  268. SX7 X1-1 DECREMENT CODES COUNT
  269. SA7 A1
  270. SA6 INFO+X7 STORE COMMAND WORD
  271. EQ NXTC
  272. *
  273. *
  274. * THE PUTTWO ENTRY POINT ASSUMES TWO -GETVAR-
  275. * CODES IN X1 AND X2. THEY ARE MOVED UP AND
  276. * COMBINED WITH THE COMMAND NUMBER TO FORM
  277. * THE COMMAND WORD.
  278. *
  279. ENTRY PUTTWO
  280. *
  281. PUTTWO MX0 -XCODEL
  282. BX6 -X0*X1
  283. LX6 -XCODEL LEFT POSITION FIRST CODE
  284. BX2 -X0*X2
  285. LX2 -2*XCODEL
  286. BX6 X6+X2 .OR. IN SECOND CODE
  287. EQ PUTCODE
  288. *
  289. * /--- BLOCK STANDARDS 00 000 80/12/26 14.26
  290. TITLE NO ARGUMENT STANDARD READIN
  291. *
  292. * THE FOLLOWING IS A STANDARD READIN FOR
  293. * COMMANDS WITH EXACTLY NO ARGUMENTS.
  294. *
  295. ENTRY SYSNO
  296. *
  297. SYSNO RJ SYSTEST
  298. NOARG RJ NOTAG BE SURE THERE IS NO TAG
  299. SX6 0 COMMAND NUMBER ONLY
  300. EQ PUTCODE --- GO TO STORE COMMAND
  301. *
  302. *
  303. * 'ROUTINE TO CHECK THERE IS NO TAG (OR ONLY
  304. * SPACES IN THE TAG). 'EXITS TO ERRORC OTHERWISE.
  305. *
  306. NOTAG EQ *
  307. SA1 TAGCNT
  308. ZR X1,NOTAG --- OK IF NO TAG AT ALL
  309. *
  310. * ONLY ALLOW SPACES TO FOLLOW COMMAND
  311. *
  312. SA1 WORDPT PICK UP POINTER TO TAG
  313. SA1 X1 GET FIRST CHARACTER OF TAG
  314. NOTAG1 SX2 X1-1R IF SPACE THEN IGNORE
  315. NZ X2,NOTAG2 NON-SPACE, NEXT CHECK IF EOL
  316. SA1 A1+1 GET NEXT CHARACTER
  317. EQ NOTAG1 LOOP TILL NOT A SPACE
  318. *
  319. NOTAG2 ZR X1,NOTAG --- OK IF EOL
  320. EQ ERR2MNY --- OTHERWISE AN ERROR
  321. * /--- BLOCK ONEARG 00 000 77/09/03 11.49
  322. TITLE ONE ARGUMENT STANDARD READINS
  323. *
  324. * THE FOLLOWING IS A STANDARD READIN FOR
  325. * COMMANDS WITH EXACTLY ONE ARGUMENT.
  326. *
  327. ENTRY SYSONE
  328. *
  329. SYSONE RJ SYSTEST CHECK IF REAL SYSTEM LESSON
  330. *
  331. ONEARG CALL COMPILE COMPILE -GETVAR- CODE
  332. SA2 LASTKEY
  333. NZ X2,ERR2MNY ONLY ALLOW ONE ARGUMENT
  334. EQ CALCODE
  335. *
  336. *
  337. * SAME AS -ONEARG- BUT CHECKS STOREABILITY
  338. *
  339. SYSONES RJ SYSTEST SEE IF SYSTEM LESSON
  340. ONESTOR CALL COMPILE COMPILE -GETVAR- CODE
  341. NZ B1,ERRSTOR MUST BE STOREABLE
  342. SA2 LASTKEY
  343. NZ X2,ERR2MNY ONLY ALLOW ONE ARGUMENT
  344. EQ CALCODE
  345. *
  346. *
  347. * THIS IS A GENERAL ONE-ARGUMENT, STOREABLE READIN
  348. * FOR USE BY A COMMAND DOING A FPUTVAR OR NPUTVAR
  349. * AT EXECUTION TIME.
  350. *
  351. ONEPUT CALL PUTCOMP COMPILE -PUTVAR- CODE
  352. SA2 LASTKEY
  353. NZ X2,ERR2MNY ALLOW ONLY ONE ARGUMENT
  354. EQ CALCODE
  355. *
  356. *
  357. * THIS IS A STANDARD READIN FOR COMMANDS THAT MAY
  358. * HAVE NONE OR EXACTLY ONE ARGUMENT. IF NO TAG,
  359. * THE SIGN BIT OF THE COMMAND WORD IS SET.
  360. *
  361. * USED BY
  362. * -CHECK-
  363. * -EXIT-
  364. * -SCORE-
  365. * -ROTATE-
  366. * -PAINT-
  367. *
  368. ** PAUSE2 ALSO USED BY -ERASE-, -POLAR-, -TIME-,
  369. ** -EDIT- AND -ONE2IN0-.
  370. CHECKIN RJ SYSTEST ONLY SYSTEM LESSONS CAN USE
  371. ONE0 SA1 TAGCNT SEE IF BLANK TAG
  372. NZ X1,ONEARG IF NOT, TREAT NORMALLY
  373. PAUSE2 MX6 1 SIGN BIT NEGATIVE FOR BLANK TAG
  374. *(NO GETVAR CODE SETS THE SIGN BIT OF THE COMMAND WORD.)
  375. EQ PUTCODE NOW ADD COMMAND CODE AND STORE
  376. *
  377. ENTRY TWOBITS
  378. * SET TOP 2 BITS OF COMMAND WORD.
  379. * USED BY ERASE AND COMMONX.
  380. TWOBITS MX6 2
  381. EQ PUTCODE ADD COMMAND CODE AND STORE
  382. * /--- BLOCK TWOARG 00 000 80/07/12 03.59
  383. TITLE TWO ARGUMENT STANDARD READINS
  384. *
  385. * THE FOLLOWING IS A STANDARD READIN FOR
  386. * COMMANDS WITH EXACTLY TWO ARGUMENTS.
  387. *
  388. SYSTWO RJ SYSTEST FOR 2 ARG SYSTEM COMMANDS
  389. TWOARG RJ TWODO GET TWO ARGS
  390. EQ PUTTWO COMPLETE COMMAND WORD
  391. *
  392. *
  393. *
  394. * TWO ARGUMENTS, FIRST MUST BE STOREABLE
  395. *
  396. * USED BY -COLLECT-, -TEXT-, -OUTPUTT-, -TEKTRON-
  397. *
  398. ENTRY COLLCTC
  399. *
  400. OUTPTIN RJ SYSTEST
  401. COLLCTC RJ TWODO GET TWO ARGS
  402. NG X1,ERRSTOR FIRST ARG MUST BE STOREABLE
  403. EQ PUTTWO COMPLETE COMMAND WORD
  404. *
  405. *
  406. *
  407. * TWO ARGUMENTS, SECOND MUST BE STOREABLE
  408. *
  409. * USED BY -GETMARK- AND -SYSLOC-
  410. *
  411. SYSLOIN RJ SYSTEST FOR SYSTEM COMMANDS
  412. GETMKC RJ TWODO GET TWO ARGS
  413. NG X2,ERRSTOR SECOND ARG MUST BE STOREABLE
  414. EQ PUTTWO COMPLETE COMMAND WORD
  415. *
  416. *
  417. * TWO ARGUMENTS -- BOTH MUST BE STOREABLE
  418. *
  419. * USED BY -RECNAME- (155)
  420. *
  421. TWOSTOR RJ TWODO GET TWO ARGS
  422. NG X1,ERRSTOR FIRST ARG MUST BE STOREABLE
  423. NG X2,ERRSTOR SECOND ARG MUST BE STOREABLE
  424. EQ PUTTWO COMPLETE COMMAND WORD
  425. *
  426. *
  427. *
  428. * COMPILE ARGUMENTS, CHECK FOR EXACTLY TWO
  429. * EXIT WITH GETVAR WORDS IN X1,X2
  430. *
  431. TWODO EQ *
  432. RJ VARDO COMMA SEPARATED VARIABLES
  433. SA1 VARBUF GET NO. OF VARIABLES
  434. SX2 X1-2
  435. NG X2,ERR2FEW
  436. NZ X2,ERR2MNY MUST BE TWO TAGS
  437. SA1 VARBUF+1 GET FIRST CODE
  438. SA2 VARBUF+2 GET SECOND CODE
  439. EQ TWODO
  440. * /--- BLOCK ONETWO 00 000 76/07/17 05.45
  441. TITLE ONE OR TWO ARGUMENT STANDARD READINS
  442. *
  443. * THE FOLLOWING IS A STANDARD READIN FOR
  444. * COMMANDS WITH ONE OR TWO ARGUMENTS.
  445. * IF THERE ARE TWO ARGUMENTS, THE FOLLOWING
  446. * COMMAND NUMBER IS USED.
  447. *
  448. * 'CURRENTLY USED BY THE FOLLOWING COMMANDS --
  449. *
  450. * -ARROW- (CODE=11 OR 12)
  451. * -DOT- (CODE=44 OR 45)
  452. *
  453. SONETWO CALL SYSTEST
  454. ONETWO RJ VARDO COMMA SEPARATED VARIABLES
  455. ONETWO1 SA1 VARBUF+1 *** FROM ARROWC
  456. MX0 -XCODEL
  457. BX6 -X0*X1 GET 1ST -GETVAR- CODE
  458. LX6 -XCODEL PLACE IN FIRST POSITION
  459. SA1 VARBUF X1 = NUMBER OF VARIABLES
  460. SX1 X1-2
  461. NG X1,PUTCODE DONE IF ONE TAG--CODE IN X6
  462. NZ X1,ERR2MNY ERROR IF MORE THAN 2 TAGS
  463. SA2 VARBUF+2 GET SECOND -GETVAR- CODE
  464. ONETWOA BX2 -X0*X2 *** FROM PERMIN
  465. LX2 -2*XCODEL
  466. BX6 X6+X2 PLACE IN SECOND POSITION
  467. SA1 COMNUM
  468. SX1 X1+1 ADVANCE TO NEXT COMMAND
  469. BX6 X6+X1
  470. EQ ALTCODE AND STORE COMMAND WORD
  471. *
  472. *
  473. * SAME AS -ONETWO- BUT SECOND ARG MUST BE STOREABLE
  474. *
  475. * 'CURRENTLY USED BY THE FOLLOWING COMMANDS --
  476. *
  477. * -SETPERM- (CODE=60 OR 61)
  478. * -REMOVE- (CODE=64 OR 65)
  479. *
  480. PERMIN RJ VARDO COMMA SEPARATED VARIABLES
  481. SA1 VARBUF+1 GET FIRST -GETVAR- CODE
  482. MX0 -XCODEL
  483. BX6 -X0*X1
  484. LX6 -XCODEL PLACE IN FIRST POSITION
  485. SA1 VARBUF X1 = NUMBER OF VARIABLES
  486. SX1 X1-2
  487. NG X1,PUTCODE DONE IF ONE TAG--CODE IN X6
  488. NZ X1,ERR2MNY ERROR IF MORE THAN 2 TAGS
  489. SA2 VARBUF+2 GET SECOND -GETVAR- CODE
  490. NG X2,ERRSTOR MUST BE STOREABLE
  491. EQ ONETWOA FINISH PROCESSING
  492. EJECT
  493. * /--- BLOCK ONETWO 00 000 77/09/10 18.29
  494. *
  495. * THE FOLLOWING IS A STANDARD READIN FOR
  496. * COMMANDS WITH ONE OR TWO ARGUMENTS.
  497. * IF THERE IS ONLY ONE ARGUMENT, THE TOP
  498. * BIT OF THE SECOND TAG FIELD IS SET.
  499. *
  500. SONE2IN RJ SYSTEST
  501. ONE2IN MX6 1 SET UP FLAG FOR 2ND ARG
  502. LX6 XCODEL
  503. SA6 VARBUF+2
  504. RJ VARDO
  505. SA1 VARBUF PICK NUMBER OF ARGS FOUND
  506. ZR X1,ERR2FEW
  507. SX2 X1-3
  508. PL X2,ERR2MNY
  509. EQ VARFIN
  510. *
  511. * THE FOLLOWING IS A STANDARD READIN FOR
  512. * COMMANDS WITH NONE, ONE, OR TWO ARGUMENTS.
  513. * IF NO ARGUMENTS, THE SIGN BIT OF THE COMMAND
  514. * WORD IS SET. IF ONLY ONE ARG, THE SIGN BIT
  515. * OF THE SECOND TAG FIELD IS SET.
  516. *
  517. * -RORIGIN- -GORIGIN- -RAT- -RATNM- -SIZE-
  518. * -PPTRUN- -PPTADDR-
  519. *
  520. ENTRY SYS012
  521. SYS012 RJ SYSTEST CHECK FOR SYSTEM LESSON
  522. ONE2IN0 SA1 TAGCNT
  523. ZR X1,PAUSE2
  524. EQ ONE2IN
  525. *
  526. * THE FOLLOWING IS A STANDARD READIN FOR
  527. * COMMANDS WITH NONE, ONE, OR TWO ARGUMENTS.
  528. * IF NO ARGUMENTS, THE SIGN BIT OF THE COMMAND
  529. * WORD IS SET. IF ONLY ONE ARG, THE SECOND
  530. * IS CODED AS 0 (GETVAR CODE=0, GETVAR RETURNS 0).
  531. *
  532. * -ERASE- (CODE=36)
  533. * -POLAR- (CODE=187)
  534. * -TIME- (CODE=257)
  535. *
  536. * ERASEIN SA1 TAGCNT X1 = CHARS IN TAG
  537. * ZR X1,PAUSE2 IF BLANK TAG, SET SIGN BIT
  538. * EQ SCALIN 1OR2 ARGS (2D=0 IF OMITTED)
  539. *
  540. * /--- BLOCK ONE2C 00 000 80/08/04 10.29
  541. *
  542. * FOLLOWING IS A STANDARD READING FOR COMMANDS
  543. * WITH NONE, ONE OR TWO ARGUMENTS
  544. * IF NONE, SIGN BIT OF COMMAND WORD IS SET
  545. * IF ONLY ONE, SECOND ARGUMENT FIELD IS ZEROED
  546. * USED BY -ERASE- -POLAR- -TIME-
  547. *
  548. ONE2C SA1 TAGCNT
  549. ZR X1,PAUSE2 IF BLANK TAG, SET SIGN BIT
  550. RJ VARDO COMPILE ARGUMENTS
  551. SA1 VARBUF GET NUMBER COMPILED
  552. SX2 X1-2
  553. ZR X2,VARFIN IF TWO, GO COMPILE THEM
  554. PL X2,ERR2MNY ERROR IF MORE THAN 2
  555. SA1 VARBUF+1 GET FIRST ARG
  556. EQ CALCODE GO PACK UP ONE ARG, 2D=0
  557. *
  558. * /--- BLOCK TRIARG 00 000 79/12/15 01.18
  559. TITLE THREE ARGUMENT STANDARD READINS
  560. *
  561. * THE FOLLOWING IS A STANDARD READIN FOR
  562. * COMMANDS WITH EXACTLY THREE ARGUMENTS.
  563. *
  564. ENTRY STRIARG
  565. STRIARG RJ SYSTEST SYSTEM LESSONS ONLY
  566. TRIARG RJ VARDO COMMA SEPARATED VARIABLES
  567. SX1 3 MUST BE EXACTLY 3 ARGUMENTS
  568. EQ VARFIN PACK AND STORE TAGFIELDS
  569. *
  570. *
  571. * -TRIARGS- CHECK FIRST ARG STOREABLE
  572. *
  573. SYSTRI CALL SYSTEST SYSTEM LESSONS ONLY
  574. TRIARGS RJ VARDO COMMA SEPARATED VARIABLES
  575. SA1 VARBUF+1 FIRST TAG MUST BE STOREABLE
  576. NG X1,ERRSTOR
  577. SX1 3
  578. EQ VARFIN
  579. *
  580. *
  581. * SAME AS -TRIARGS- BUT FIRST AND SECOND ARGS
  582. * MUST BE STOREABLE.
  583. *
  584. * CURRENTLY USED BY -BLOCK- COMMAND (CODE=102)
  585. *
  586. BLOCKIN RJ VARDO COMMA SEPARATED VARIABLES
  587. SA1 VARBUF+1 FIRST TAG MUST BE STOREABLE
  588. NG X1,ERRSTOR
  589. SA1 VARBUF+2 SECOND TAG MUST BE STOREABLE
  590. NG X1,ERRSTOR
  591. SX1 3
  592. EQ VARFIN
  593. *
  594. *
  595. *
  596. * SAME AS -TRIARG- BUT THIRD ARG MUST BE STOREABLE
  597. *
  598. * USED BY -COMPARE- COMMAND
  599. *
  600. COMPARC RJ VARDO COMMA SEPARATED VARIABLES
  601. SA1 VARBUF+3 THIRD ARG MUST BE STOREABLE
  602. NG X1,ERRSTOR
  603. SX1 3
  604. EQ VARFIN
  605. * /--- BLOCK SYSIN 00 000 80/02/02 01.18
  606. TITLE READIN OF SYSTEM COMMANDS
  607. *
  608. *
  609. * SYSTEM COMMAND WITH ONE NAME AS ARGUMENT
  610. *
  611. SYSONEN CALL SYSTEST SEE IF SYSTEM LESSON
  612. CALL COMPNAM
  613. EQ CALCODE
  614. *
  615. *
  616. * COMMANDS WITH ONE ACCOUNT';FILE NAME AS TAG
  617. *
  618. ENTRY ONEFILE,SYSONEF
  619. *
  620. SYSONEF CALL SYSTEST SEE IF SYSTEM LESSON
  621. ONEFILE CALL ACCFILF GET FILE NAME
  622. ZR X1,ERR2FEW ERROR IF BLANK TAG
  623. SX1 2 2 ARGUMENTS LEGAL
  624. SA2 LASTKEY
  625. ZR X2,VARFIN
  626. EQ ERR2MNY ERROR IF EXTRA ARGUMENTS
  627. *
  628. *
  629. * COMMANDS WITH ONE ACCOUNT';FILE NAME AS TAG
  630. * WHICH ALSO ALLOW A BLANK TAG
  631. *
  632. ENTRY ONEFILB
  633. *
  634. ONEFILB CALL ACCFILF GET FILE NAME
  635. ZR X1,PAUSE2 EXIT IF BLANK TAG
  636. SX1 2 2 ARGUMENTS LEGAL
  637. SA2 LASTKEY
  638. ZR X2,VARFIN
  639. EQ ERR2MNY ERROR IF EXTRA ARGUMENTS
  640. *
  641. *
  642. * SPECIAL FOR SETPACK--POSSIBLE BLANK TAG
  643. *
  644. SYSONEP RJ SYSTEST SEE IF SYSTEM LESSON
  645. SA1 TAGCNT BLANK TAG CHECK
  646. ZR X1,CALCODE JUST USE THE 0
  647. CALL COMPILE
  648. EQ CALCODE
  649. *
  650. * CREATE COMMAND
  651. *
  652. CREATEC RJ SYSTEST
  653. CALL VARDO1 GET FIRST ARG
  654. CALL VARDO2 GET SECOND ARG
  655. CALL NXTNAM GET THIRD ARG, IF ONE
  656. MX3 0 CLEAR THIRD TAG FLAG
  657. ZR X6,CCRT0 IF NO THIRD TAG
  658. *
  659. * THIRD TAG (IF ONE) MUST BE STRING '7NPDWRITE'7
  660. *
  661. SA1 =8LNPDWRITE
  662. BX2 X1-X6
  663. NZ X2,ERRORC THIRD TAG WAS GARBAGE
  664. *
  665. MX3 1 SET TOP BIT OF GVAR IF THIRDARG
  666. LX3 XCODEL
  667. *
  668. CCRT0 SA1 VARBUF+1 GET FIRST GVAR CODE
  669. BX1 X1+X3 AND MERGE WITH THIRD ARG FLAG
  670. *
  671. SA2 VARBUF+2 AND GET SECOND ARG
  672. EQ PUTTWO COMPLETE COMMAND WORD
  673. *
  674. *
  675. * /--- BLOCK SCANNER 00 000 75/10/30 02.14
  676. TITLE SCANNER ROUTINE
  677. * FINDS RECOGNIZED WORDS IN TAG FIELD AND SETS CORRESPONDING
  678. * BITS IN X6, X0 RETURNED ZERO IF ALL OK.
  679. * THIS ROUTINE SCANS ALL THE WAY TO THE END-OF-LINE,
  680. * WITH THE IDENTIFIED WORDS ENTERED IN THE BIT TABLE IN X6
  681. *
  682. * CALLING ROUTINE MUST HAVE SET UP FOLLOWING
  683. * B1=FIRST OF LIST OF RECOGNIZED WORDS
  684. * B2=SCRATCH LOCATION AT END OF SAID LIST
  685. * X5=MASK TO BE APPLIED TO TABLE WORDS
  686. *
  687. ENTRY SCANNER
  688. *
  689. *
  690. SCANNER EQ * FOR RETURN JUMP ENTRY
  691. * /--- BLOCK SCANNER 00 000 75/10/30 03.16
  692. SB7 1 STORE A CONSTANT ONE
  693. SB4 B2-B1 PUT THE LIST LNTH IN B4
  694. MX0 0 CLEAR ERROR FLAG
  695. MX6 0 CLEAR ALL BITS IN WORDS FOUND
  696. MX4 1 SET UP FOR SHIFT BIT
  697. SB6 60 SET UP FOR FIRST OF 60 WORDS
  698. SA1 TAG-1 INITIALIZE TO BEFORE FIRST CH
  699. *
  700. SCA MX7 0 CLEAR WORD ACCUMULATOR
  701. SB5 60 INITIALIZE SHIFT FOR END
  702. SCANL SA1 A1+B7 GET NEXT CHARACTER
  703. ZR X1,SCANNER TEST FOR END OF LINE
  704. SX2 X1-1R+ ACCEPT LETTERS AND NUMBERS ONLY
  705. NG X2,SCBUILD
  706. SX2 X1-1R TEST FOR SPACES
  707. ZR X2,SCANL
  708. SX2 X1-1R, TEST OF COMMA
  709. ZR X2,SCANL
  710. EQ SCERR ANYTHING ELSE AN ERROR
  711. *
  712. SCBUILD LX7 6 SHIFT WORD A BUILDING
  713. BX7 X7+X1 ADD THIS NEW CHARACTER IN
  714. SB5 B5-6 DECREMENT END SHIFT COUNT
  715. NG B5,SCERR TEST FOR OVER 10 CHARACTERS
  716. SA1 A1+B7 GET NEXT CHARACTER
  717. *
  718. ZR X1,SCBLD1 TEST FOR END OF LINE
  719. SX2 X1-1R+ TEST FOR LETTERS AND NUMBERS
  720. NG X2,SCBUILD THEN BUILD UP WORD
  721. SX2 X1-1R, TEST FOR COMMA PUNC
  722. ZR X2,SCBLD1
  723. SX2 X1-1R SPACES ALSO PUNCTUATION
  724. NZ X2,SCERR ANYTHING ELSE AN ERROR
  725. SCBLD1 LX7 B5,X7 SHIFT WORD INTO TOP-NOTCH SHAPE
  726. BX7 X5*X7 APPLY MASK TO GUARANTEE HIT
  727. SA7 B2 STORE IN END SCRATCH WORD
  728. SA3 B1-B7 SET A3 TO POINT TO START OF SEARCH WORD LST
  729. *
  730. SCNLOOP SA3 A3+B7 GET NEXT WORD
  731. BX3 X5*X3 MASK IT
  732. BX3 X3-X7
  733. NZ X3,SCNLOOP SEE IF FOUND MATCH
  734. *
  735. SB5 A3-B1 HOW FAR INTO LIST
  736. EQ B5,B4,SCERR TEST FOR NO FIND
  737. SB5 B6-B5 SET UP SHIFT
  738. LX3 B5,X4 MOVE BIT SETTER
  739. BX6 X6+X3 SET AN X6 BIT
  740. ZR X1,SCANNER SEE IF DONE
  741. EQ SCA
  742. *
  743. SCERR MX0 59 SET ERROR FLAG
  744. ZR X1,SCANNER TEST IF DONE
  745. SX2 X1-1R, SEE IF AT COMMA
  746. ZR X2,SCA ON TO NEXT WORD
  747. SX2 X1-1R SPACE ALSO PUNC
  748. ZR X2,SCA
  749. SA1 A1+B7 GET NEXT CHARACTER
  750. EQ SCERR LOOP OVER ALL ELSE
  751. * /--- BLOCK CSSCAN 00 000 75/10/04 11.47
  752. TITLE CASE-SENSITIVE SCANNER ROUTINE
  753. * FINDS RECOGNIZED WORDS IN TAG FIELD AND SETS CORRESPONDING
  754. * BITS IN X6, X0 RETURNED ZERO IF ALL OK.
  755. * THIS ROUTINE SCANS ALL THE WAY TO THE END-OF-LINE,
  756. * WITH THE IDENTIFIED WORDS ENTERED IN THE BIT TABLE IN X6
  757. *
  758. * CALLING ROUTINE MUST HAVE SET UP FOLLOWING
  759. * B1=FIRST OF LIST OF RECOGNIZED WORDS
  760. * B2=SCRATCH LOCATION AT END OF SAID LIST
  761. * X5=MASK TO BE APPLIED TO TABLE WORDS
  762. *
  763. ENTRY CSSCAN
  764. *
  765. *
  766. CSSCAN EQ * FOR RETURN JUMP ENTRY
  767. * /--- BLOCK CSSCAN 00 000 75/10/04 12.07
  768. SB7 1 STORE A CONSTANT ONE
  769. SB4 B2-B1 PUT THE LIST LNTH IN B4
  770. MX0 0 CLEAR ERROR FLAG
  771. MX6 0 CLEAR ALL BITS IN WORDS FOUND
  772. MX4 1 SET UP FOR SHIFT BIT
  773. SB6 60 SET UP FOR FIRST OF 60 WORDS
  774. SA1 TAG-1 INITIALIZE TO BEFORE FIRST CH
  775. *
  776. CSA MX7 0 CLEAR WORD ACCUMULATOR
  777. SB5 60 INITIALIZE SHIFT FOR END
  778. CSCANL SA1 A1+B7 GET NEXT CHARACTER
  779. ZR X1,CSSCAN TEST FOR END OF LINE
  780. SX2 X1-KUP
  781. ZR X2,CSBUILD OK IF UPPER CASE
  782. SX2 X1-1R+ ACCEPT LETTERS AND NUMBERS ONLY
  783. NG X2,CSBUILD
  784. SX2 X1-1R TEST FOR SPACES
  785. ZR X2,CSCANL
  786. SX2 X1-1R, TEST OF COMMA
  787. ZR X2,CSCANL
  788. EQ CSERR ANYTHING ELSE AN ERROR
  789. *
  790. CSBUILD LX7 6 SHIFT WORD A BUILDING
  791. BX7 X7+X1 ADD THIS NEW CHARACTER IN
  792. SB5 B5-6 DECREMENT END SHIFT COUNT
  793. NG B5,CSERR TEST FOR OVER 10 CHARACTERS
  794. SA1 A1+B7 GET NEXT CHARACTER
  795. *
  796. ZR X1,CSBLD1 TEST FOR END OF LINE
  797. SX2 X1-KUP
  798. ZR X2,CSBUILD OK IF UPPER CASE
  799. SX2 X1-1R+ TEST FOR LETTERS AND NUMBERS
  800. NG X2,CSBUILD THEN BUILD UP WORD
  801. SX2 X1-1R, TEST FOR COMMA PUNC
  802. ZR X2,CSBLD1
  803. SX2 X1-1R SPACES ALSO PUNCTUATION
  804. NZ X2,CSERR ANYTHING ELSE AN ERROR
  805. CSBLD1 LX7 B5,X7 SHIFT WORD INTO TOP-NOTCH SHAPE
  806. BX7 X5*X7 APPLY MASK TO GUARANTEE HIT
  807. SA7 B2 STORE IN END SCRATCH WORD
  808. SA3 B1-B7 SET A3 TO POINT TO START OF SEARCH WORD LST
  809. *
  810. * /--- BLOCK CSSCAN 00 000 75/10/04 12.04
  811. CSNLOOP SA3 A3+B7 GET NEXT WORD
  812. BX3 X5*X3 MASK IT
  813. BX3 X3-X7
  814. NZ X3,CSNLOOP SEE IF FOUND MATCH
  815. *
  816. SB5 A3-B1 HOW FAR INTO LIST
  817. EQ B5,B4,CSERR TEST FOR NO FIND
  818. SB5 B6-B5 SET UP SHIFT
  819. LX3 B5,X4 MOVE BIT SETTER
  820. BX6 X6+X3 SET AN X6 BIT
  821. ZR X1,CSSCAN SEE IF DONE
  822. EQ CSA
  823. *
  824. CSERR MX0 59 SET ERROR FLAG
  825. ZR X1,CSSCAN TEST IF DONE
  826. SX2 X1-1R, SEE IF AT COMMA
  827. ZR X2,CSA ON TO NEXT WORD
  828. SX2 X1-1R SPACE ALSO PUNC
  829. ZR X2,CSA
  830. SA1 A1+B7 GET NEXT CHARACTER
  831. EQ CSERR LOOP OVER ALL ELSE
  832. * /--- BLOCK DEBLANK 00 000 80/10/02 03.23
  833. TITLE -DEBLANK- STRIP LEADING SPACES
  834. *
  835. * -DEBLANK-
  836. *
  837. * MOVE CHARACTER POINTER PAST SPACE CHARACTERS
  838. *
  839. * ON ENTRY -- *WORDPT* SET
  840. *
  841. * ON EXIT -- *WORDPT* SET TO FIRST NON-BLANK CHAR
  842. * A1 = *WORDPT*
  843. * X1 = CONTENTS OF *WORDPT*
  844. * X2 = FIRST NON-BLANK CHAR
  845. *
  846. * USES -- (A1,A2,A6) (X1,X2,X3,X6)
  847. *
  848.  
  849. DEBLANK EQ *
  850. SA1 WORDPT X1 = CHAR POINTER
  851. DOBLP SA2 X1 X2 = THIS CHARACTER
  852. SX3 X2-1R IS IT A SPACE
  853. NZ X3,DEBLANK -- EXIT IF NOT
  854. SX1 X1+1
  855. BX6 X1 ADVANCE CHAR POINTER
  856. SA6 A1
  857. EQ DOBLP AND LOOK AT NEXT CHAR
  858. *
  859. * /--- BLOCK TAGXACT 00 000 76/09/13 13.33
  860. TITLE CHECK FOR EXACT TAG MATCH
  861. *
  862. ENTRY TAGXACT
  863. *
  864. * CHECKS WHETHER TAG CONSISTS SOLELY AND EXACTLY OF A
  865. * SPECIFIED CHARACTER STRING. ENTER WITH COMPARISON
  866. * STRING LEFT-ADJUSTED AND ZERO-FILLED IN X1. (MAY BE UP
  867. * TO 9 CHARACTERS.)
  868. * ON EXIT, X1 = -1 IF MATCH, 0 IF NO MATCH.
  869. *
  870. * ALTERS A2, X0,X1,X2,X3,X4
  871. *
  872. TAGXACT EQ *
  873. SA2 TAG GET FIRST CHAR OF TAG
  874. MX0 -6 MASK FOR BOTTOM CHAR
  875. TXLOOP LX1 6 POSITION NEXT CHARACTER
  876. BX3 -X0*X1 CHAR FROM STRING IN X3
  877. BX4 X2-X3 COMPARE WITH CHAR FROM TAG
  878. NZ X4,TXNO FAILS IF NO MATCH
  879. ZR X3,TXYES DONE IF 00 CHARACTER
  880. SA2 A2+1 GET NEXT TAG CHARACTER
  881. EQ TXLOOP
  882. *
  883. TXNO MX1 0 NO MATCH
  884. EQ TAGXACT
  885. *
  886. TXYES MX1 -1 MATCH
  887. EQ TAGXACT
  888. *
  889. TITLE -COLONCK- CHECK FOR COLON AS NEXT SEPARATOR
  890. *
  891. *
  892. * -COLONCK-
  893. *
  894. * CHECKS WHETHER SEPARATOR FOLLOWING NEXT ARGUMENT
  895. * IS A COLON AND, IF SO, CONVERTS IT TO A SEMICOLON
  896. * FOLLOWED BY A BLANK.
  897. *
  898. * ENTER *WORDPT* SET
  899. *
  900. * EXIT (X6) = 0 IF NEXT SEPARATOR IS A COLON
  901. * (X6) .NE. 0 IF SOME OTHER SEPARATOR
  902. *
  903. * USES ALL
  904. *
  905. * CALLS PSCAN
  906. *
  907.  
  908. ENTRY COLONCK
  909.  
  910. COLONCK EQ *
  911. SA1 WORDPT GET POINTER TO NEXT CHARACTER
  912. SX0 0 NO SPECIAL TERMINATOR
  913. CALL PSCAN FIND END OF NEXT ARGUMENT
  914. SX6 X1-KSEMIC SEE IF ENDED ON SEMICOLON
  915. NZ X6,COLONCK EXIT IF NOT A SEMICOLON
  916. SA3 B1-1 (X3) = PREVIOUS CHARACTER
  917. SX6 X3-KUP SEE IF SHIFT CODE
  918. NZ X6,COLONCK EXIT IF NOT A COLON
  919. SX7 KSEMIC
  920. SA7 A3+ CHANGE SHIFT TO SEMICOLON
  921. SX7 1R
  922. SA7 A3+1 CHANGE SEMICOLON TO BLANK
  923. EQ COLONCK
  924. * /--- BLOCK CONDENS 00 000 81/07/10 01.03
  925. *
  926. TITLE CONDENS
  927. * CONDENS ACCOUNT';LESSON,KEYWORDS
  928. *
  929. CONDNIN CALL SYSTEST SYSTEM LESSONS ONLY
  930. CALL ACCFILF GET ACCOUNT';FILE NAMES
  931. ZR X1,ERR2FEW ERROR IF BLANK TAG
  932. SX6 0
  933. SA6 CONDMAP PRESET TO NO KEY WORDS
  934. SA1 LASTKEY
  935. CONDKW ZR X1,COND1 JUMP IF NO KEY WORDS
  936. *
  937. RJ =XNXTNAME
  938. ZR X6,=XERRNAME IF NO KEY WORD THERE
  939. *
  940. SB1 B0 POINT TO FIRST KEY WORD
  941. SB2 CKWEND-CKW NUMBER OF KEY WORDS
  942. CKWLP SA1 CKW+B1 X1 = NEXT KEY WORD
  943. IX1 X6-X1
  944. ZR X1,CONDMP IF MATCHED KEY WORD
  945. *
  946. SB1 B1+1
  947. NE B1,B2,CKWLP IF STILL MORE TO SEARCH
  948. *
  949. EQ =XERRNAME UNRECOGNIZED KEYWORD
  950. *
  951. CONDMP SA1 CONDMAP TURN ON CONDENSOR OPTION BIT
  952. SX2 1
  953. LX2 B1
  954. BX6 X1+X2
  955. SA6 A1
  956. SA1 WORDPT
  957. SA1 X1 X1 = NEXT CHARACTER
  958. EQ CONDKW LOOP BACK FOR MORE KEYWORDS
  959. *
  960. COND1 SX1 3 3 ARGUMENTS LEGAL
  961. SX6 X1+
  962. SA6 VARBUF
  963. EQ VARFIN
  964. *
  965. CONDMAP EQU VARBUF+3 KEYWORD BITMAP IS 3RD ARGUMENT
  966. *
  967. *
  968. *
  969. * -MASTOR- COMMAND
  970. *
  971. MASTORC CALL SYSTST1 SPECIAL SYSTEM LESSONS ONLY
  972. EQ ONESTOR
  973. *
  974. *
  975. * -SYSTEST- SYSTEM LESSON CHECK
  976. *
  977. ENTRY SYSTEST
  978. SYSTEST EQ *
  979. SA1 SYSFLG CHECK IF SYSTEM LESSON
  980. LX1 ZSLDSHF
  981. NG X1,SYSTEST IF YES
  982. EQ ERRORC ERROR IF NOT
  983. *
  984. *
  985. * CHECK IF LESSON CAN WRITE ECS/CM
  986. *
  987. ENTRY SYSTST1
  988. SYSTST1 EQ *
  989. CALL SYSTEST CHECK IF SYSTEM LESSON
  990. SA1 SYSFLG
  991. LX1 ZWLDSHF
  992. NG X1,SYSTST1
  993. EQ ERRORC
  994. *
  995. *
  996. * /--- BLOCK +ERASE 00 000 80/10/02 02.52
  997. *
  998. * -ERASE- (CODE=36)
  999. *
  1000. * -ERASE BLANK- SETS TOP BIT,
  1001. * -ERASE N1,N2- RETURNS 2ARG, -ERASE N1- 2D IS 0
  1002. * -ERASE ABORT- SETS TOP TWO BITS
  1003. *
  1004. ERASEC SA1 TAG FIRST TAG CHAR
  1005. ZR X1,PAUSE2 BLANKTAG(F.S.ERASE) SETS TOPBIT
  1006. *
  1007. * CHECK FOR -ABORT-
  1008. *
  1009. SA1 ERABORT
  1010. RJ TAGXACT SEE IF ',ABORT', TAG
  1011. NG X1,TWOBITS IF ABORT, SET TOP 2 BITS
  1012. EQ ONE2C --- ELSE SET UP ARGS
  1013. *
  1014. ERABORT DATA 5LABORT
  1015. *
  1016. * /--- BLOCK AT, COMMA 00 000 76/07/30 23.42
  1017. TITLE -AT- COMMAND
  1018. *
  1019. * -AT- COMMAND
  1020. *
  1021. ATIN RJ ATGO
  1022. EQ PUTCODE
  1023. *
  1024. ATGO EQ * ENTRY/EXIT LINE
  1025. CALL VARDO DECODE ONE OR TWO VARIABLES
  1026. SA2 VARBUF
  1027. SX2 X2-1 CHECK FOR 1 VARIABLE
  1028. NZ X2,ONETWOB
  1029. MX0 -XCODEL
  1030. SA1 VARBUF+1 LOAD -GETVAR- CODE
  1031. BX1 -X0*X1
  1032. MX0 -XCODEAL MASK FOR ADDRESS PORTION
  1033. BX2 X0*X1 MUST BE SHORT LITERAL
  1034. NZ X2,ONETWOB
  1035. CALL RCTOXY CONVERT TO FINE GRID
  1036. MX0 -9
  1037. BX1 X6+X7 MERGE X AND Y POSITIONS
  1038. BX1 X0*X1
  1039. NZ X1,ERRXYTG ERROR IF ILLEGAL POSITION
  1040. LX6 60-10
  1041. LX7 60-10-9
  1042. MX1 1
  1043. BX6 X6+X1 MERGE SIGN BIT AND X POSITION
  1044. BX6 X6+X7 ATTACH Y POSITION
  1045. EQ ATGO RETURN TO STORE COMMAND WORD
  1046. *
  1047. ONETWOB SB1 -1 CONSTANT
  1048. SA1 VARBUF ONETWOB CALLED FROM TWO PLACES IN ATGO
  1049. SA2 A1-B1 VARBUF+1
  1050. MX0 60-XCODEL TO PICK UP LOWEST 20 BITS
  1051. BX6 -X0*X2
  1052. LX6 60-XCODEL SHIFT INTO PLACE
  1053. SX1 X1+B1
  1054. ZR X1,ATGO ONE ARG--TO (PUTCODE)
  1055. SX1 X1+B1 N-2
  1056. NZ X1,ERRTAGS NEITHER 1 OR 2
  1057. SA2 A2-B1 VARBUF+2
  1058. BX2 -X0*X2
  1059. LX2 60-2*XCODEL
  1060. BX6 X6+X2
  1061. SA1 COMNUM
  1062. SX7 X1+1
  1063. SA7 A1
  1064. EQ ATGO NOT SUBROUTINED, AS ONLY ATGO
  1065. * USES THIS CODE...
  1066. * /--- BLOCK ARROW 00 000 80/12/26 14.29
  1067. *
  1068. ENTRY NOINDT
  1069. NOINDT SB1 76 UNIT, ENTRY, ARROW, ENDARROW
  1070. EQ =XERR MAY NOT BE INDENTED
  1071. *
  1072. * 'ROUTINE TO SET PROPER OFFSET INTO ARROW COMMAND.
  1073. *
  1074. *
  1075. ENTRY SETARO
  1076. *
  1077. SETARO EQ *
  1078. SA1 LOCARO X1 = LOCATION OF ARROW COMMAND
  1079. ZR X1,SETARO5 IF NO PRECEDING -ARROW-
  1080. *
  1081. SA2 LVARL X2 = LOCAL VAR STACK LENGTH
  1082. SX2 X2-1
  1083. NG X2,SETARO3 IF NO LOCALS IN LESSON
  1084. *
  1085. SX2 X2+1 RESTORE X2 IN CASE NO ERROR
  1086. ZR B1,NOEARRO IF MISSING -ENDARROW-
  1087. *
  1088. SETARO3 BX7 X2 LVARL.LT.0 IF -LVARS- ILLEGAL
  1089. SA7 A2
  1090. SA2 INFO+X1 X2 = ARROW COMMAND WORD
  1091. SX6 INFOLTH
  1092. SA3 ICX INDEX TO COMMAND BEFORE THIS
  1093. IX6 X6-X3 RELATIVE COMMAND BIAS
  1094. LX6 XCMNDL
  1095. BX6 X2+X6 ADD POINTER TO ARROW COMMAND
  1096. SA6 A2 RESTORE
  1097. MX7 0
  1098. SA7 A1 CLEAR ARROW LOCATION
  1099. EQ SETARO --- EXIT
  1100. SETARO5 ZR B1,SETARO IF NO -ARROW-/-ENDARROW-
  1101. *
  1102. SA2 LVARL
  1103. SX2 X2-1
  1104. NG X2,SETARO IF NO LOCALS IN LESSON
  1105. *
  1106. SB1 771 MISSING -ARROW-
  1107. RJ =XRJERR
  1108. EQ SETARO
  1109. *
  1110. NOEARRO MX7 0 MISSING -ENDARROW-
  1111. SA7 A1
  1112. SB1 772 MISSING -ENDARROW-
  1113. RJ =XRJERR
  1114. EQ SETARO
  1115. * /--- BLOCK UNAMX 00 000 80/12/26 14.30
  1116. *
  1117. TITLE UNAMX
  1118. *
  1119. *
  1120. * -UNAMX-
  1121. * SUBROUTINE TO FIND UNIT OR ADD TO *UNAM* TABLE
  1122. * ENTER WITH UNIT NAME IN X6
  1123. *
  1124. * RETURNS WITH NAME IN X1 AND UNIT NUMBER IN X6
  1125. *
  1126. *
  1127. ENTRY UNAMX
  1128. UNAMX EQ *
  1129. SA3 UNUMIN LENGTH OF TABLE
  1130. SX5 X3-IEUNUM NUMBER OF UNITS
  1131. SB5 UNAME+IEUNUM SET BASE ADDRESS FOR SEARCH
  1132. SB3 48
  1133. SB4 X5 SAVE
  1134. SB6 B5 SAVE
  1135. MX7 12
  1136. MX0 59 *** USED BOTH AS MASK AND -1
  1137. SB1 1
  1138. EQ ULOOK
  1139. *
  1140. UBEFORE SB5 A1+B1 RAISE BASE ADDRESS
  1141. NZ X4,ULOOK JUMP IF ODD LENGTH TABLE
  1142. IX5 X5+X0 ELSE SUBTRACT 1 FROM LENGTH
  1143. ULOOK ZR X5,UNOTIN JUMP IF NOT IN TABLE
  1144. BX4 -X0*X5 SAVE BOTTOM BIT
  1145. AX5 1 NARROW SEARCH
  1146. SA1 X5+B5 LOAD ENTRY
  1147. BX2 -X7*X1 CLEAR TOP 12 BITS
  1148. IX2 X2-X6
  1149. NG X2,UBEFORE JUMP IF BEFORE WHERE NAME WOULD BE
  1150. NZ X2,ULOOK JUMP IF AFTER
  1151. AX6 B3,X1 X6 = UNIT NUMBER
  1152. EQ UNAMX
  1153. *
  1154. UNOTIN BX1 X6 X1 = UNIT NAME
  1155. SX7 X3+B1
  1156. SX0 X7-UTABLTH
  1157. PL X0,ERR2MNU ERROR EXIT IF BUFFER FULL
  1158. SA7 A3 ELSE ADD 1 TO LENGTH
  1159. BX6 X3 X6 = UNIT NUMBER
  1160. SA3 LVARL
  1161. NZ X3,UNOTIN1 IF LVARL ALREADY SET
  1162. *
  1163. MX2 6 X2 = MASK FOR TOP CHARACTER
  1164. LX2 60-12
  1165. BX2 X1*X2 X2 = TOP CHARACTER
  1166. ZR X2,UNOTIN1 IF PSEUDO UNIT
  1167. *
  1168. MX7 -1 FLAG -LVARS- ILLEGAL NOW
  1169. SA7 A3
  1170. * /--- BLOCK UNAMX 00 000 80/12/26 14.31
  1171. UNOTIN1 BSS 0
  1172. *
  1173. * SAVE LINE AND BLOCK OF WHERE FIRST REFERENCE OCCURRED
  1174. SA0 UUTEMP
  1175. SA2 LINENUM
  1176. LX7 X2,B3 LEFT SHIFT 48
  1177. SA2 BLKNUM
  1178. BX7 X7+X2 COMBINE BLOCK AND LINE NUMBERS
  1179. LX7 36 POSITION
  1180. SA7 A0
  1181. SA2 AFUREF FIRST UNIT REFERENCE BUFFER
  1182. IX0 X2+X6 ADD UNIT NUMBER
  1183. WE 1
  1184. RJ =XECSPRTY
  1185. *
  1186. SA2 ATEMPEC ADDRESS OF TEMPORARY ECS BUFFER
  1187. BX0 X2
  1188. SA0 B5 WHERE ENTRY SHOULD GO IN TABLE
  1189. SB7 B5-B6
  1190. SB4 B4-B7 NUMBER OF UNITS AFTER IN TABLE
  1191. + WE B4 WRITE REST OF TABLE
  1192. RJ =XECSPRTY
  1193. SA0 A0+B1 RAISE ADDRESS
  1194. LX7 X6,B3 POSITION UNIT NUMBER
  1195. BX7 X7+X1 ADD UNIT NAME
  1196. SA7 B5 PUT THIS WORD IN NAME TABLE
  1197. + RE B4 AND READ REST OF TABLE BACK
  1198. RJ =XECSPRTY
  1199. *
  1200. MX7 1
  1201. BX7 X7+X1 ADD UNIT NAME
  1202. SA7 ULOC+X6 SET ULOC TO SHOW UNIT NOT IN
  1203. *
  1204. BX7 X1 GET UNIT NAME
  1205. SA7 UUTEMP
  1206. SA0 A7 FORM NON-ALPHABETIZED TABLE
  1207. SA2 AUNAME GET ADDRESS OF TABLE IN ECS
  1208. IX0 X2+X6 NOW HAVE UNIT ENTRY
  1209. + WE 1 WRITE OUT UNIT NAME
  1210. RJ ECSPRTY
  1211. EQ UNAMX
  1212. *
  1213. UUTEMP BSS 1
  1214. *
  1215. * DONE--PACK UP COMMAND WORD
  1216. *
  1217. * -WRITEC- COMMAND EXITS HERE WITH X6 SET
  1218. *
  1219. CONUL4 SA1 BRVAR X1 = -GETVAR- CODE, LEFT-ADJUSTED
  1220. SA2 CONV2 X2 = START OF UNIT TABLE
  1221. SA3 CONV3 X3 = NUMBER OF ENTRIES IN TABLE
  1222. SA4 INX INCREMENT EXTRA STORAGE POINTER
  1223. SX7 X4+1
  1224. SA7 A4
  1225. LX2 XCMNDL+12 POSITION TABLE START
  1226. LX3 XCMNDL POSITION NUMBER OF ENTRIES
  1227. BX6 X6+X1
  1228. BX6 X6+X2
  1229. BX6 X6+X3
  1230. EQ ALTCODE --- EXIT TO STORE COMPLETED COMMAND WORD
  1231. *
  1232. *
  1233. BRVAR BSS 1
  1234. CONV2 BSS 1 START OF TABLE OF CONDITIONAL UNITS
  1235. CONV3 BSS 1 COUNT OF UNITS IN TABLE
  1236. CONV4 BSS 1 SHIFT FOR NEXT UNIT PACK
  1237. *
  1238. * /--- BLOCK SLIDE 00 000 79/08/06 01.09
  1239. TITLE -SLIDE- AND -ALTFONT-
  1240. *
  1241. * -SLIDE- COMMAND
  1242. *
  1243. *
  1244. SLIDEC SB1 FSSLIDE -SLIDE- PUBLISH ERROR
  1245. RJ =XPUBERRS
  1246. CALL COMPSYM,SLDCON,1
  1247. EQ CALCODE
  1248. *
  1249. SLDCON VFD 42/7LNOSLIDE,18/1400B
  1250. *
  1251. *
  1252. *
  1253. * -ALTFONT- COMMAND
  1254. *
  1255. *
  1256. AFONTC CALL COMPSYM,ALTNMS,4
  1257. EQ CALCODE
  1258. *
  1259. ALTNMS VFD 42/6LNORMAL,18/0
  1260. + VFD 42/3LALT,18/1
  1261. ONOFF VFD 42/2LON,18/1
  1262. + VFD 42/3LOFF,18/0
  1263. UPDATE VFD 42/6LUPDATE,18/2
  1264. *
  1265. *
  1266. *
  1267. * -CHECKPT- COMMAND
  1268. *
  1269. *
  1270. CKPTC CALL COMPSYM,ONOFF,2
  1271. EQ CALCODE
  1272. *
  1273. *
  1274. * -WRITENS- COMMAND
  1275. *
  1276. WRTNSIN CALL SYSTEST
  1277. CALL COMPSYM,ONOFF,3
  1278. EQ CALCODE
  1279. *
  1280. *
  1281. * /--- BLOCK CALCCIN 00 000 79/12/15 01.18
  1282. *
  1283. * -CALCC- (CODE=34)
  1284. *
  1285. *
  1286. CALCCIN RJ VARDO1 GET FIRST VARIABLE
  1287. X COVL3,13 EXECUTE OVERLAY
  1288. * /--- BLOCK FINIS 00 000 81/07/20 21.38
  1289. TITLE FINIS
  1290. *
  1291. * FINIS (CODE=50)
  1292. *
  1293. * END OF LESSON PROCESSING
  1294. *
  1295. *
  1296. FINISC X JOINOV,6
  1297. * RETURNS TO EXECUTE CONDFIN
  1298. *
  1299. *
  1300. * SET TERM, DEFINE AND COMMON ENTRIES IN THE ULOC
  1301. * TABLE AND WRITE THE EXTERNAL, UNAM AND ULOC TABLES
  1302. * TO THE END OF THE LESSON BINARY. ALSO SETS
  1303. * *CONDPRM* UP WITH THE CONDENSE PARAMETERS AND
  1304. * SEARCHES FOR UNDEFINED UNITS
  1305. *
  1306. ENTRY CONDFIN
  1307. CONDFIN EXEC CFINOV (IN COVLAY1)
  1308.  
  1309. ENTRY MTINIT
  1310. MTINIT BSS 0
  1311. SA1 CMPF SEE IF CMP LESSON
  1312. ZR X1,MTINIT1 IF NOT CMP DONT NOTIFY
  1313.  
  1314. * NOTIFY EXECUTOR WE ARE CONDENSING A CMP LESSON
  1315.  
  1316. SX6 P.CMP PLATO REQUEST CODE FOR CMP
  1317. SA1 APLACOM (X1) = PLATO COMUNICATION AREA
  1318. SX0 PLREQF
  1319. IX0 X0+X1
  1320. WX6 X0 WRITE REQUEST
  1321.  
  1322. MTINIT1 EXEC JOINOV,7 FINISH UP, JUMP TO MTLOAD
  1323. * /--- BLOCK CHAR 00 000 78/07/18 21.51
  1324. TITLE CHAR, END, AND MODE
  1325. * -CHAR- (CODE=47)
  1326. *
  1327. * THE TAG SPECIFIES THE CHARACTER NUMBER (0-127) AND THE
  1328. * 8 DATA WORDS OF 16 BITS EACH COMPOSING THE CHARACTER.
  1329. *
  1330. CHARIN RJ VARDOC CONTINUED COMMA SEPARATED VARIABLES
  1331. SX1 9 9 VARIABLES REQUIRED
  1332. EQ VARFIN PACK UP VARIABLES AND STORE
  1333. *
  1334. *
  1335. *
  1336. * -END- COMMAND (CODE=49)
  1337. *
  1338. ENDIN SA1 TAG X1 = 1ST CHAR OF TAG
  1339. MX6 0 0 FOR SIMPLE END
  1340. ZR X1,PUTCODE JUMP IF NO ARGUMENT (SIMPLE END COMMAND)
  1341. *
  1342. CALL NXTNAME GET TAG *****
  1343. BX1 X6 GET TAG INTO X1
  1344. MX6 0
  1345. SA2 =4LHELP
  1346. BX2 X2-X1 CHECK FOR -HELP-
  1347. ZR X2,PUTCODE SAME AS BLANK TAG
  1348. SA2 =6LLESSON
  1349. BX2 X2-X1 CHECK FOR -LESSON-
  1350. NZ X2,ERRNAME JUMP IF NOT LEGAL TAG
  1351. MX6 1 SET SIGN BIT IF END LESSON
  1352. EQ PUTCODE
  1353. *
  1354. *
  1355. * -MODE- (CODES=51 AND 52)
  1356. *
  1357. * THE LEGAL TAGS ARE THE WORDS -WRITE-,
  1358. * -REWRITE-, -ERASE-, AND -X-.
  1359. *
  1360. *
  1361. * MODEIN SX7 0
  1362. * SA7 JDORMD SET FOR -MODE- COMMAND
  1363. * EQ JUDGEST --- USE ROUTINE SHARED WITH -JUDGE- COMMAN
  1364. TITLE -BACKGND- -FOREGND-
  1365. *
  1366. *
  1367. *
  1368. * -BACKGND- -FOREGND-
  1369. * SPECIFY BACKGROUND OR FOREGROUND PROCESSING MODE
  1370. *
  1371. *
  1372. FORGNDI MX6 0 CLEAR BACKGROUND BIT
  1373. EQ BCKG10
  1374. *
  1375. BCKGNDI MX6 1 SET BACKGROUND BIT
  1376. *
  1377. BCKG10 SX7 BACKG= SET COMMAND CODE
  1378. SA7 COMNUM
  1379. EQ PUTCODE
  1380. *
  1381. *
  1382. * /--- BLOCK SEED/HASH 00 000 86/05/27 13.54
  1383. *
  1384. * -SEED- COMMAND READ-IN
  1385. * SPECIFIES VARIABLE TO BE USED AS SEED FOR
  1386. * RANDOM NUMBER GENERATOR; BLANK TAG FOR STANDARD
  1387. * SYSTEM SEED WORD.
  1388. *
  1389. SEEDC SA1 TAGCNT
  1390. ZR X1,PAUSE2 SET SIGN BIT IF NO TAG
  1391. EQ ONESTOR ELSE ONE STOREABLE ARG
  1392. *
  1393. *
  1394. * -HASH- COMMAND READ-IN
  1395. * FORMAT IS'; HASH INPUT<,OUTPUT,PRIME>
  1396. * IF *OUTPUT* IS OMITED, *INPUT* MUST BE STOREABLE.
  1397. * *OUTPUT* MUST BE STOREABLE IF SPECIFIED.
  1398. * *PRIME* IS EITHER KEYWORD <PASSWORD> OR SYMBOL.
  1399. *
  1400. HASHIN RJ VARDO1 INIT AND GET FIRST TAG
  1401. SA1 LASTKEY CHECK FOR MORE TAGS
  1402. NZ X1,HASH2 -- IF MORE TAGS
  1403. NG X6,ERRSTOR -- IF ONLY TAG, MUST BE STORABL
  1404. EQ MRKLAST -- ELSE OK, EXIT
  1405. HASH2 BSS 0
  1406. RJ VARDO2 GET SECOND TAG
  1407. NG X6,ERRSTOR -- MUST BE STOREABLE
  1408. SA1 LASTKEY CHECK FOR OPTIONAL TAG
  1409. ZR X1,MRKLAST -- 2-TAG FORMAT, EXIT
  1410. SA1 SYSFLG CHECK FOR SYSTEM LESSON
  1411. LX1 ZSLDSHF
  1412. PL X1,HASH3 -- NOT A SYSTEM LESSON
  1413. RJ NXTNAMP GET THE NEXT TOKEN
  1414. SA2 HASHKEY LITERAL STRING *PASSWORD*
  1415. MX1 48 MASK TO 8 CHARACTERS
  1416. BX2 X2-X6 COMPARE
  1417. BX2 X1*X2
  1418. NZ X2,HASH3 -- NOT *PASSWORD* KEYWORD
  1419. SA1 VARBUF+2 RETRIEVE SECOND VAR CODE
  1420. MX6 1 SET 2ND OF TOP TWO BITS TO
  1421. LX6 XCODEL-1 INDICATE *PASSWORD* KEYWORD
  1422. BX6 X1+X6
  1423. SA6 A1 REWRITE WORD IN VARBUF
  1424. EQ MRKLAST -- EXIT
  1425. HASH3 BSS 0
  1426. RJ VARDO2 GET THIRD TAG
  1427. SA1 LASTKEY
  1428. NZ X1,ERR2MNY -- TOO MANY ARGUMENTS
  1429. EQ MRKLAST -- EXIT
  1430. *
  1431. HASHKEY DATA 8LPASSWORD KEYWORD FOR SIGNON PASSWORDS
  1432. *
  1433. *
  1434. * /--- BLOCK SHOWA,O,H 00 000 78/09/02 00.28
  1435. TITLE SHOWA, SHOWO, AND SHOWH CONDENSE
  1436. *
  1437. EXT ARAYFLG
  1438. *
  1439. *
  1440. SHOWAIN SB1 FSSHOWA -SHOWA- TEXT
  1441. RJ =XPUBTEXT
  1442. SX7 10 SET DEFAULT
  1443. RJ SHOWAGO
  1444. EQ PUTCODE
  1445. *
  1446. SHOWOC SX7 21 DEFAULT=21
  1447. RJ SHOWAGO
  1448. MX0 1
  1449. BX6 -X0*X6 CLEAR LITERAL FLAG FOR SHOWO
  1450. EQ PUTCODE
  1451. *
  1452. SHOWHC SX7 16 DEFAULT=16
  1453. RJ SHOWAGO
  1454. MX0 1
  1455. BX6 -X0*X6 CLEAR LITERAL FLAG FOR SHOWH
  1456. EQ PUTCODE
  1457. *
  1458. SHOWAGO EQ * ENTRY/EXIT LINE
  1459. SX6 1
  1460. SA6 ARAYFLG ALLOW -SHOW ARRAY-
  1461. SA7 OPTAO SAVE DEFAULT
  1462. RJ VARDO
  1463. SB1 -1
  1464. SA1 VARBUF
  1465. SA2 A1-B1 VARBUF+1
  1466. BX3 X2 CHECK FOR LITERALS
  1467. MX0 61-XCODEL+XFBIT MASK OUT I/F BIT
  1468. BX2 -X0*X2
  1469. LX2 60-XCODEL SHIFT INTO PLACE
  1470. MX0 1
  1471. BX0 X0*X3 PRESERVE STOREABLILITY FLAG
  1472. BX2 X0+X2 FLAG BY SETTING SIGN BIT
  1473. SX1 X1+B1 NUMBER OF ARGS -1
  1474. SA3 OPTAO
  1475. ZR X1,SHOWA2
  1476. SX1 X1+B1
  1477. NZ X1,ERR2MNY MUST BE ONE OR TWO ARGS
  1478. SA3 A2-B1 VARBUF+2
  1479. MX0 60-XCODEL
  1480. BX3 -X0*X3
  1481. SHOWA2 LX3 60-2*XCODEL
  1482. BX6 X2+X3
  1483. EQ SHOWAGO
  1484. OPTAO EQU VARBUF+3 NO MORE THAN TWO ARGUMENTS
  1485. * /--- BLOCK GROUP TEMP 00 000 83/06/13 11.03
  1486. TITLE TEMPORARY KLUDGE FORM OF -GROUP-
  1487. *
  1488. GROUPIN SB1 FSGROUP -GROUP- PUBLISH WARNING
  1489. RJ =XPUBWARN
  1490. RJ NXTNAMP GET FIRST WORD IN TAG
  1491. SA1 INDENT INDENT COUNT FOR THIS LINE
  1492. SA2 PISTACK POINTER TO TOP OF INDENT STACK
  1493. IX2 X2-X1 COMPARE INDENT AND STACK LEVELS
  1494. ZR X2,ONESTOR CONDENSE AS -COURSE- COMMAND
  1495. CALL CHKIND OUTPUT ERROR MESSAGES AND FIX THE STACK UP
  1496. EQ ONESTOR CONTINUE CONDENSE
  1497. *
  1498. *
  1499. REMOVLC SB1 FSREMOV -REMOVL- PUBLISH ERROR
  1500. RJ =XPUBERRS
  1501. EQ ONEARG
  1502. *
  1503. NAMEC SB1 FSNAME -NAME- PUBLISH WARNING
  1504. RJ =XPUBWARN
  1505. EQ ONESTOR
  1506. *
  1507. PLAYC SB1 FSPLAY -PLAY- PUBLISH ERROR
  1508. RJ =XPUBERRS
  1509. EQ TRIARG
  1510. *
  1511. RECRDIN SB1 FSRECOR -RECORD- PUBLISH ERROR
  1512. RJ =XPUBERRS
  1513. EQ TRIARG
  1514. *
  1515. CODOUTC SB1 FSCODEO -CODEOUT- PUBLISH ERROR
  1516. RJ =XPUBERRS
  1517. EQ ONEARG
  1518. *
  1519. AUDIOC SB1 FSAUDIO -AUDIO- PUBLISH ERROR
  1520. RJ =XPUBERRS
  1521. EQ ONEARG
  1522. *
  1523. EXTC SB1 FSEXT -EXT- PUBLISH ERROR
  1524. RJ =XPUBERRS
  1525. EQ ONE2IN
  1526. *
  1527. TEXTIN SB1 FSTEXT -TEXT- TEXT
  1528. RJ =XPUBTEXT
  1529. *
  1530. * PROCESS VARIABLE (2 OR 3) TAGS
  1531. *
  1532. + RJ VARDO
  1533. SA1 VARBUF+1 CHECK FIRST ARG
  1534. NG X1,ERRSTOR MUST BE STOREABLE LOCATION
  1535. SA1 VARBUF GET NUMBER OF ARGS
  1536. SX2 X1-2 2 ARGS IS OK
  1537. ZR X2,MRKLAST
  1538. SX2 X1-3 3 ARGS IS OK
  1539. ZR X2,MRKLAST
  1540. EQ ERRTAGS WRONG NUMBER OF TAGS
  1541. *
  1542. * /--- BLOCK ANSV 00 000 79/01/05 02.19
  1543. TITLE -ANSV- COMMAND READ-IN
  1544. *
  1545. *
  1546. *
  1547. * -ANSV- COMMAND READ-IN
  1548. *
  1549. * FORMAT OF COMMAND WORD -
  1550. * TOP *XCODEL* BITS = -GETVAR- CODE FOR ANSWER
  1551. * NEXT *XCODEL* BITS = -GETVAR- CODE FOR TOLERANCE
  1552. * NEXT 1 BIT = 0/1 FOR ABS/PERCENT TOLERANCE
  1553. * NEXT XX BITS = UNUSED BY -ANSV-
  1554. * (FOR -ANSU-, THESE BITS ARE A POINTER+1 TO
  1555. * THE DIMENSION ARRAY. POINTER HAS 1 ADDED TO
  1556. * IT TO INSURE IT BE NZ, TO DISTINGUISH ANSU.)
  1557. * LAST *XCMNDL* BITS = COMMAND CODE NUMBER
  1558. *
  1559. *
  1560. EXT COMPILU COMPILE UNIT DIMENSIONS
  1561. WRGUIN SX6 WRONGV= WRONGU SAME COMND NUM AS WRONGV
  1562. EQ ANSVIN0
  1563. *
  1564. ANSUIN SX6 ANSV= ANSU SAME COMMAND NUM AS ANSV
  1565. EQ ANSVIN0
  1566. *
  1567. ANSVIN MX6 0
  1568. ANSVIN0 SA6 OVARG2 NZ FOR -ANSU-/-WRONGU-
  1569. X COVL3,4
  1570. * /--- BLOCK PUTV 00 000 81/07/08 03.30
  1571. TITLE PUTV
  1572. * -PUTV- (CODE=210)
  1573. *
  1574. * 1ST TAG ENTRY = STARTING VARIABLE FOR CHAR
  1575. * STRING TO SEARCH FOR, 2ND TAG ENTRY = NUMBER
  1576. * OF CHARS, 3RD TAG ENTRY = STARTING VARIABLE
  1577. * FOR REPLACEMENT CHAR STRING, 4TH TAG ENTRY =
  1578. * NUMBER OF CHARS IN IT.
  1579. * FIRST AND THIRD TAGS MUST BE VARIABLES
  1580. *
  1581. PUTVC RJ VARDO COMMA SEPARATED VARIABLES
  1582. SA1 VARBUF+1
  1583. NG X1,ERRSTOR IF FIRST TAG NOT A VARIABLE
  1584. SA1 VARBUF+3
  1585. NG X1,ERRSTOR IF THIRD TAG NOT A VARIABLE
  1586. SX1 4 MUST BE 4 VARIABLES
  1587. EQ VARFIN
  1588. *
  1589. *
  1590. SSTARIN SX6 FINIS=
  1591. SA6 COMNUM SET TO *FINIS* COMMAND NUMBER
  1592. SA1 HOLFIN
  1593. BX6 X1
  1594. SA6 COMMAND
  1595. EQ FINISC TREAT LIKE *FINIS*
  1596. *
  1597. *
  1598. * /--- BLOCK OK 00 000 79/12/15 01.18
  1599. TITLE OK,NO,IGNORE,STORAGE,GETCHAR
  1600. * -OK- (CODE=127)
  1601. *
  1602. OKIN SX6 1 SET TO -OK- CODE
  1603. *
  1604. OKINN SX1 OK= NUMBER OF -OK- COMMAND
  1605. LX6 XCMNDL UP OVER COMMAND CODE
  1606. BX6 X1+X6 COMBINE COMMAND CODE WITH SPECIFIER
  1607. SA1 TAG
  1608. ZR X1,ALTCODE JUMP IF BLANK TAG
  1609. EQ ERR2MNY ELSE ERROR
  1610. *
  1611. * THE -NO- AND -IGNORE- COMMANDS USE THE SAME
  1612. * COMMAND CODE NUMBER AS THE -OK- COMMAND.
  1613. *
  1614. NOIN SX6 2 SET TO -NO- CODE
  1615. EQ OKINN
  1616. *
  1617. IGIN SX6 3 SET TO -IGNORE- CODE
  1618. EQ OKINN
  1619.  
  1620. * -REGSTATE- COMMAND.
  1621.  
  1622. RGIN RJ SYSTEST CHECK IF SYSTEM LESSON
  1623. SX6 4 SET TO -REGSTATE- CODE
  1624. EQ OKINN
  1625. *
  1626. *
  1627. * -GETCHAR- COMMAND
  1628. *
  1629. GETCHRC CALL SYSTEST SYSTEM LESSONS ONLY
  1630. CALL FILEBLK GET ACCOUNT, FILE, BLOCK
  1631. CALL VARDOR GET LAST ARGUMENT
  1632. SA1 VARBUF+4
  1633. NG X1,ERRSTOR 4TH ARGUMENT MUST BE STOREABLE
  1634. SX1 4 4 ARGUMENTS LEGAL
  1635. EQ VARFIN
  1636. * /--- BLOCK CSETIN 00 000 80/02/02 01.18
  1637. TITLE CHARSET LINESET MICRO
  1638. *
  1639. *
  1640. *
  1641. * ROUTINE FOR COMMANDS WITH TAGS THAT SPECIFY
  1642. * A LESSON AND BLOCK NAME ONLY, AND ALSO ALLOW
  1643. * BLANK TAGS.
  1644. *
  1645. * USED BY CHARSET, LINESET, MICRO
  1646. *
  1647. *
  1648. CSETIN BSS 0
  1649. CALL FILEBLK GET LESSON AND BLOCK NAME
  1650. ZR X1,PAUSE2 IF BLANK TAG
  1651. SA2 LASTKEY
  1652. ZR X2,VARFIN IF END OF LINE
  1653. EQ ERR2MNY ERROR IF MORE THAN 2 ARGUMENTS
  1654. *
  1655. *
  1656. *
  1657. * ROUTINE FOR COMMANDS WITH TAGS THAT SPECIFY
  1658. * A LESSON AND BLOCK NAME ONLY. BLANK TAGS
  1659. * ARE NOT ALLOWED.
  1660. *
  1661. * USED BY CHARTST
  1662. *
  1663. *
  1664. CHARTST CALL FILEBLK GET LESSON AND BLOCK NAME
  1665. ZR X1,ERR2FEW ERROR IF BLANK TAG
  1666. SA2 LASTKEY
  1667. ZR X2,VARFIN IF END OF LINE
  1668. EQ ERR2MNY ERROR IF MORE THAN 2 ARGUMENTS
  1669. *
  1670. * /--- BLOCK CSETIN 00 000 80/02/02 01.18
  1671. *
  1672. *
  1673. * -LESLIST- AND -SYSLIST- COMMANDS
  1674. *
  1675. * FIRST TWO ARGUMENTS SPECIFY LESSON AND BLOCK NAME
  1676. * OPTIONAL THIRD ARGUMENT SPECIFIES CODEWORD
  1677. *
  1678. SLISTIN CALL SYSTEST -SYSLIST- COMMAND
  1679. *
  1680. LLISTIN BSS 0 LESLIST, SYSLIST
  1681. CALL FILEBLK GET LESSON AND BLOCK NAME
  1682. ZR X1,PAUSE2 IF BLANK TAG
  1683. SA2 LASTKEY
  1684. ZR X2,MRKLAST IF ONLY 2 ARGUMENTS
  1685. CALL VARDO2 GET CODEWORD ARGUMENT
  1686. SA2 LASTKEY
  1687. ZR X2,MRKLAST
  1688. EQ ERR2MNY ERROR IF MORE THAN 3 ARGUMENTS
  1689. *
  1690. * -USE- *** WARNING *** THIS IS ONLY
  1691. * FOR DISCARDING BAD -USE- COMMANDS
  1692. *
  1693. * THE ACTUAL PROCESSING FOR -USE- IS DONE IN
  1694. * GETLINE,USEC
  1695. *
  1696. USEEC EQ NXTLINE IGNORE BAD -USE- COMMAND
  1697. *
  1698. *
  1699. * /--- BLOCK PPT 00 000 79/12/15 01.18
  1700.  
  1701. * THE CONDENSE ROUTINES FOR OTHER *PPT* TYPE COM-
  1702. * MANDS ARE IN OVERLAY *PPTC*.
  1703.  
  1704. * -MODESET- AND -BITSOUT-
  1705.  
  1706. MDBITIN RJ PPTMESS
  1707. EQ ONEARG
  1708.  
  1709. * -PPTOUT-
  1710.  
  1711. PPTOUTC RJ PPTMESS
  1712. X COV4A,7 EXECUTE OVERLAY
  1713.  
  1714. * -PPTADDR-
  1715.  
  1716. PPTADDC RJ PPTMESS
  1717. EQ ONE2IN0
  1718.  
  1719. * -PPTRUN-
  1720.  
  1721. PPTRUNC RJ PPTMESS
  1722. EQ ONE2IN0
  1723.  
  1724. ** PPTMESS - ISSUE *PPT* ERROR MESSAGE.
  1725. *
  1726. * THE FIRST CHECK FOR ACCESS TO *PPT* COMMANDS IS
  1727. * IN THE INITIALIZATION ROUTINES IN *COVLAY2*. THE
  1728. * *PPTACC* FLAG IS SET AT THAT TIME.
  1729. *
  1730. * IF ACCESS IS ALLOWED, A WARNING MESSAGE IS ISSUED
  1731. * AT THE FIRST OCCURANCE OF A PROGRAMMABLE TERMINAL
  1732. * COMMAND, UNLESS THE LESSON HAS THE *SYS* OR *PPT*
  1733. * ATTRIBUTE MARKED IN DECK *SYSLESS*.
  1734. *
  1735. * ENTRY (PPTACC) = -1 IF LESSON CAN USE PPT COMDS;
  1736. * = 0 OTHERWISE.
  1737. * (PPTMF) = 0 IF PPT WARNING MESSAGE HAS NOT
  1738. * BEEN ISSUED YET;
  1739. * = -1 OTHERWISE.
  1740. * (SYSFLG) = WORD WITH *PPT* ATTRIBUTE BIT.
  1741. *
  1742. * ERROR TO *ERRORC* IF (PPTACC) = 0.
  1743. *
  1744. * CALLS RJERR.
  1745.  
  1746. ENTRY PPTMESS
  1747. PPTMESS PS
  1748. SA1 PPTACC CHECK PPT ACCESS FLAG
  1749. PL X1,ERRORC IF NOT ALLOWED
  1750.  
  1751. SA1 PPTMF
  1752. NZ X1,PPTMESS IF PPT MESSAGE ALREADY ISSUED
  1753.  
  1754. MX6 -1
  1755. SA6 A1
  1756.  
  1757. * NOTE - LESSONS WITH THE *SYS* ATTRIBUTE ALWAYS
  1758. * HAVE THE *PPT* ATTRIBUTE, SO ONLY THE *PPT* BIT
  1759. * NEEDS TO BE CHECKED.
  1760.  
  1761. SA1 SYSFLG
  1762. LX1 ZPPTSHF SHIFT *PPT* BIT INTO POSITION
  1763. NG X1,PPTMESS IF LESSON HAS *PPT* ATTRIBUTE
  1764. SB1 767
  1765. RJ =XRJERR ISSUE THE PPT WARNING MESSAGE
  1766. EQ PPTMESS
  1767.  
  1768. ENTRY PPTACC,PPTMF
  1769. PPTACC BSS 1 *PPT* COMMAND ACCESS FLAG
  1770. PPTMF BSS 1 *PPT* WARNING MESSAGE FLAG
  1771. * /--- BLOCK OVERLAYS 00 000 79/12/15 01.18
  1772. TITLE CONDENSOR OVERLAY CALLS
  1773. *
  1774. * -SAY-
  1775. *
  1776. SAYIN SB1 FSSAY -SAY- PUBLISH ERROR
  1777. RJ =XPUBERRS
  1778. .SAYCMD IFNE SAYASSM,0
  1779. SA1 SAYFLAG
  1780. SX6 2 TO SET OVARG1 IN PCIN100
  1781. SAYIN1 SA3 SAYFLAG COLLECT OLD VALUE FROM SAYFLAG
  1782. SX7 1 PUT A 1 IN X7
  1783. BX3 X3+X7 LOGICAL SUM SAYFLAG W/ BIT0 SET
  1784. SX7 X3 ONLY 6,7 CAN WRITE CM
  1785. SA7 A1 NEW VALUE OUT TO SAYFLAG
  1786. SA6 OVARG1
  1787. X PACKOV USE -PACK- SUBCONDENSOR
  1788. EQ ERRORC
  1789. .SAYCMD ELSE
  1790. SAYIN1 EQ =XNXTLINE IGNORE THIS COMMAND
  1791. .SAYCMD ENDIF
  1792. *
  1793. SAYCIN SB1 FSSAY -SAY- PUBLISH ERROR
  1794. RJ =XPUBERRS
  1795. .SAYCMD IFNE SAYASSM,0
  1796. SA1 SAYFLAG
  1797. SX6 3 TO SET OVARG1 IN PCIN100
  1798. .SAYCMD ENDIF
  1799. EQ SAYIN1
  1800. *
  1801. * -SAYLANG-
  1802. *
  1803. .SAYCMD IFNE SAYASSM,0
  1804. SAYLGIN SX6 1 SAYLANG
  1805. SA1 SAYFLAG COLLECT CURRENT VALUE IN X1
  1806. SX7 2 MARK PRESENCE
  1807. BX7 X1+X7 MERGE LOGICALLY
  1808. SA7 A1 SHIP BACK OUT INTO SAYFLAG
  1809. SA1 TAG SEE IF BLANK TAG
  1810. NZ X1,TAGOVIN
  1811. MX6 0 BLANK SAYLANG
  1812. EQ PUTCODE
  1813. *
  1814. TAGOVIN SA6 OVARG1
  1815. X TAGOV
  1816. .SAYCMD ELSE
  1817. SAYLGIN EQ SAYIN1
  1818. .SAYCMD ENDIF
  1819. * /--- BLOCK NXTNAM 00 000 80/12/26 14.34
  1820. TITLE -NXTNAM-
  1821. *
  1822. * -NXTNAM-
  1823. *
  1824. * ON EXIT,
  1825. * X6 = NEXT TAG ENTRY (ZERO-FILLED)
  1826. * X1 = SEPARATOR CHARACTER
  1827. * X2 = SEPARATOR TYPE CODE (SEE LEX)
  1828. *
  1829. * WORDPT WILL POINT TO NEXT CHARACTER AFTER TAG
  1830. *
  1831. * ERROR CONDITIONS';
  1832. * MORE THAN 10 CHARACTERS--X1 IS SET TO
  1833. * 11TH CHAR, X2 IS SET TO KEYTYPE OR
  1834. * ELSE IS SET TO 0 (BLANK AND BACKSPACE).
  1835. *
  1836. ENTRY NXTNAM
  1837. *
  1838. NXTNAM EQ *
  1839. CALL NXTNAMP GET NEXT TAG W/O WORDPT UPDATE
  1840. SX7 B1 B1 HAS UPDATED WORDPT ADDRESS
  1841. SA7 WORDPT UPDATE WORDPT
  1842. EQ NXTNAM --- EXIT
  1843. *
  1844. *
  1845. * -NXTNAMP-
  1846. *
  1847. * OBTAINS THE NEXT TAG (OR 10 CHARACTERS, WHICHEVER
  1848. * COMES FIRST) WITHOUT UPDATING THE CURRENT LINE
  1849. * POINTER, WORDPT.
  1850. *
  1851. * ON EXIT,
  1852. * B1 = POINTER TO NEXT CHARACTER AFTER TAG
  1853. * X6 = NEXT TAG ENTRY (ZERO-FILLED)
  1854. * X1 = SEPARATOR CHARACTER
  1855. * X2 = SEPARATOR TYPE CODE (SEE LEX)
  1856. * B7 = POINTER TO FIRST CHAR OF NEXT TAG (IF THERE)
  1857. *
  1858. * ERROR CONDITIONS';
  1859. * MORE THAN 10 CHARACTERS--X1 IS SET TO
  1860. * 11TH CHAR, X2 IS SET TO KEYTYPE OR
  1861. * ELSE IS SET TO 0 (BLANK AND BACKSPACE).
  1862. *
  1863. ENTRY NXTNAMP
  1864. *
  1865. NXTNAMP EQ *
  1866. SA1 WORDPT POINTER TO NEXT CHAR
  1867. MX6 0
  1868. SB1 X1
  1869. SB2 60 INITIALIZE SHIFT
  1870. SB7 1 CONSTANT
  1871. *
  1872. SKPSP SA1 B1 SKIP LEADING SPACES
  1873. SX2 X1-1R CODE FOR SPACE
  1874. NZ X2,NNLOOP JUMP IF NOT A SPACE
  1875. SB1 B1+1
  1876. EQ SKPSP
  1877. *
  1878. NNLOOP SA1 B1 LOAD NEXT CHARACTER
  1879. SB1 B1+B7
  1880. SX2 X1-1R ALLOW EMBEDDED SPACES
  1881. ZR X2,NLL2
  1882. SX2 X1-KBKSP
  1883. ZR X2,NLL2
  1884. SA2 X1+KEYTYPE GET CHARACTER TYPE
  1885. SX3 X2-1
  1886. PL X3,NNDONE JUMP IF SEPARATOR
  1887. * /--- BLOCK NXTNAM 00 000 80/12/26 14.34
  1888. *
  1889. NLL2 SB2 B2-6
  1890. NG B2,NBADN EXIT IF NAME TOO BIG
  1891. LX1 X1,B2 POSITION CHAR
  1892. BX6 X6+X1 ADD TO WORD BUILDING
  1893. EQ NNLOOP
  1894. *
  1895. NNDONE SB7 B1 FOR ROUTINES WHICH NEED EOL
  1896. NZ X1,NXTNAMP --- EXIT IF NOT END-OF-LINE
  1897. SB1 B1-1 BACKUP BEFORE END-OF-LINE
  1898. EQ NXTNAMP --- EXIT
  1899. *
  1900. NBADN MX6 0 RETURN A 0 NAME
  1901. EQ NNDONE
  1902. *
  1903. *
  1904. * -NXTNAME-
  1905. * GETS NEXT NAME IN X6, SEPARATOR CODE/TYPE IN X1,X2
  1906. * REMOVES EXTRA SPACES FROM END OF NXTNAM
  1907. *
  1908. ENTRY NXTNAME
  1909. NXTNAME EQ *
  1910. RJ NXTNAM SEE ABOVE
  1911. LT B2,B0,NXTNAME EXIT IF TOO LONG
  1912. NXTNAM2 MX7 -6 MASK FOR 1 CHAR
  1913. LX7 X7,B2 SHIFT TO LAST CHAR POSITION
  1914. SX3 1R SPACE
  1915. LX3 X3,B2 ALSO SHIFT
  1916. BX0 -X7*X6 EXTRACT CHAR
  1917. IX3 X3-X0 TEST FOR SPACE
  1918. NZ X3,NXTNAME EXIT IF NOT
  1919. BX6 X7*X6 CLEAR OUT SPACE
  1920. SB2 B2+6 SHIFT FOR PREVIOUS CHAR
  1921. EQ NXTNAM2 TRY AGAIN
  1922. * /--- BLOCK FILEACC 00 000 80/12/26 10.44
  1923. TITLE -ACCFILE- GET ACCOUNT AND FILE NAMES
  1924. *
  1925. * -ACCFILE-
  1926. *
  1927. * ROUTINE TO GET ACCOUNT AND FILE ARGUMENTS.
  1928. * ENTER'; B1 = ADDRESS OF TWO-WORD BUFFER WHERE
  1929. * GETVAR CODES WILL BE STORED
  1930. * B2 INDICATES HOW TAGS SHOULD BE INTERPRETED
  1931. * = -1 IF ONLY LITERALS ALLOWED (FOR CONDENSE-TIME COMMANDS)
  1932. * 0 IF NAMES INTERPRETED AS LITERALS
  1933. * 1 IF NORMAL TUTOR EXPRESSIONS
  1934. *
  1935. * RETURN INFORMATION CONSISTS OF EITHER GETVAR CODES
  1936. * (IF B2 = 0 OR 1) OR ACTUAL NAMES (IF B2 = -1). ACCOUNT
  1937. * IS STORED IN THE FIRST WORD OF THE RETURN BUFFER, FILE
  1938. * IN THE SECOND WORD. ZEROES ARE RETURNED FOR BLANK
  1939. * ARGUMENTS.
  1940. *
  1941. * EXIT'; X1 = NUMBER OF EXPLICIT ARGUMENTS FOUND
  1942. * 0 IF BLANK TAG
  1943. * 1 IF FILE NAME ONLY
  1944. * 2 IF ACCOUNT';FILE OR LESLIST REFERENCE
  1945. *
  1946. * WARNING -- THE -RECORDS- AND -ATTACHF- COMMANDS
  1947. * HAVE THEIR OWN ROUTINES FOR CONDENSING FILE NAMES.
  1948. *
  1949. * /--- BLOCK FILEACC 00 000 80/12/26 10.45
  1950. *
  1951. ENTRY ACCFILE
  1952. ACCFILE EQ *
  1953. SX6 B1
  1954. SA6 ACFOUT SAVE ADDRESS OF RETURN BUFFER
  1955. SX6 B2
  1956. SA6 ACFLIT SAVE LITERALS FLAG
  1957. *
  1958. * SKIP LEADING SPACES
  1959. *
  1960. SB1 1 SET UP INCREMENT FOR LOOPS
  1961. SA1 WORDPT X1 = ADDRESS OF NEXT CHARACTER
  1962. SX6 X1-1
  1963. ACF10 SX6 X6+B1 POINT TO NEXT CHARACTER
  1964. SA2 X6 (X2) = NEXT CHARACTER
  1965. SX0 X2-1R CHECK FOR BLANK
  1966. ZR X0,ACF10 LOOP TO SKIP LEADING SPACES
  1967. *
  1968. ZR X2,ACF45 JUMP IF END OF LINE
  1969. SA3 X2+KEYTYPE
  1970. SX0 X3-OPCOMMA CHECK FOR SEPARATOR
  1971. ZR X0,ACF40 JUMP IF SEPARATOR
  1972.  
  1973. * LOG EXTERNAL REFERENCE FOR -CONDENS- COMMAND
  1974.  
  1975. SA6 WORDPT SAVE CHARACTER POINTER
  1976. SB2 TAG POINTER TO START OF LINE
  1977. SB1 X6
  1978. SB1 B1-B2 (B1) = RELATIVE CHAR POSITION
  1979. SB2 CEXTS CODE FOR EXTERNAL REFERENCE
  1980. CALL PLOGLIN LOG THIS LINE
  1981.  
  1982. SA3 ACFLIT RETRIEVE LITERALS FLAG
  1983. NG X3,ACF20 SKIP LESLIST CHECK IF LITERALS ONLY
  1984. SA1 WORDPT RETRIEVE POINTER
  1985. SA2 X1+ (X2) = CURRENT CHARACTER
  1986. SX0 X2-KLT CHECK FOR LESLIST BRACKET
  1987. ZR X0,ACFLL JUMP IF LESLIST REFERENCE
  1988. *
  1989. * CHECK FOR COLON (INDICATES ACCOUNT ARG IS PRESENT)
  1990. *
  1991. ACF20 CALL COLONCK
  1992. NZ X6,ACF30 IF ACCOUNT NOT SPECIFIED
  1993. *
  1994. *////// TEMPORARY -- ACCOUNT NAME LEGAL ONLY IN SYSTEM LESSONS
  1995. SA1 SYSFLG
  1996. LX1 ZSLDSHF
  1997. PL X1,ERRNAME ERROR IF NOT SYSTEM LESSON
  1998. *////// END TEMPORARY
  1999. RJ ACFNAM COMPILE ACCOUNT NAME
  2000. RJ ACCFILC CONVERT SPECIAL ACCOUNT NAMES
  2001. SA1 ACFOUT X1 = ADDRESS OF RETURN BUFFER
  2002. SA6 X1 STORE ACCOUNT GETVAR CODE
  2003. *
  2004. RJ ACFNAM COMPILE FILE NAME
  2005. SA1 ACFOUT ADDRESS OF RETURN BUFFER
  2006. SA6 X1+1 STORE FILE IN SECOND WORD
  2007. *
  2008. SX1 2 2 ARGUMENTS FOUND
  2009. EQ ACCFILE
  2010. * /--- BLOCK FILEACC 00 000 80/12/26 10.46
  2011. *
  2012. * ACCOUNT NAME BLANK
  2013. *
  2014. ACF30 RJ ACFNAM GET FILE NAME
  2015. SA1 ACFOUT ADDRESS OF RETURN BUFFER
  2016. SA6 X1+1 STORE IN SECOND WORD
  2017. MX6 0 SET ACCOUNT NAME TO ZERO
  2018. RJ ACCFILC CONVERT ACCOUNT NAME
  2019. SA6 X1
  2020. *
  2021. SX1 1 1 ARGUMENT FOUND
  2022. EQ ACCFILE
  2023. *
  2024. * ACCOUNT AND FILE BOTH BLANK
  2025. *
  2026. ACF40 SX6 X6+1 ADVANCE PAST SEPARATOR
  2027. SA6 WORDPT
  2028. ACF45 BX6 X2 GET LAST CHARACTER EXAMINED
  2029. SA6 LASTKEY UPDATE *LASTKEY*
  2030. SA1 ACFOUT ADDRESS OF RETURN BUFFER
  2031. MX6 0
  2032. SA6 X1 STORE TWO ZERO CODES
  2033. SA6 X1+1
  2034. SX1 0 NO ARGUMENTS
  2035. EQ ACCFILE
  2036. *
  2037. * LESLIST REFERENCE -- STORE LESLIST INDEX AS FIRST GETVAR
  2038. * CODE AND SPECIAL LESLIST INDICATOR AS SECOND GETVAR CODE
  2039. *
  2040. ACFLL SX1 X1+1 ADVANCE PAST LEFT BRACKET
  2041. BX6 X1
  2042. SA6 WORDPT
  2043. SX0 KGT SCAN FOR RIGHT BRACKET
  2044. CALL PSCAN
  2045. SX0 X1-KGT
  2046. NZ X0,ERRTERM ERROR IF NO RIGHT BRACKET
  2047. SX6 1R
  2048. SA6 B1 BLANK OUT RIGHT BRACKET
  2049. CALL COMPILE COMPILE LESLIST INDEX
  2050. BX6 X1
  2051. SA1 ACFOUT ADDRESS OF RETURN BUFFER
  2052. SA6 X1 STORE GETVAR CODE FOR INDEX
  2053. SA1 ACFLLC X1 = SPECIAL LESLIST INDICATOR
  2054. BX6 X1
  2055. SA6 A6+1
  2056. *
  2057. SX1 2 PRETEND 2 ARGUMENTS FOUND
  2058. EQ ACCFILE
  2059. *
  2060. *
  2061. ACFLLC VFD 60/LLCODE SPECIAL GETVAR CODE FOR LESLISTS
  2062. ACFOUT BSS 1 SAVED ADDRESS OF RETURN BUFFER
  2063. ACFLIT BSS 1 LITERALS FLAG
  2064. *
  2065. * /--- BLOCK FILEACC 00 000 80/12/26 10.47
  2066. *
  2067. *
  2068. * ROUTINE CALLED BY -ACCFILE- TO COMPILE A NAME
  2069. * CALLS NXTNAM, COMPNAM, OR COMPILE BASED ON THE
  2070. * VALUE OF THE LITERALS FLAG. NAME OR GETVAR CODE
  2071. * IS RETURNED IN X6.
  2072. *
  2073. ACFNAM EQ *
  2074. SA1 ACFLIT RETRIEVE LITERALS FLAG
  2075. NG X1,ACFNAM1 JUMP IF LITERALS ONLY
  2076. ZR X1,ACFNAM2 JUMP IF LITERAL OR EXPRESSION
  2077. *
  2078. CALL COMPILE NORMAL EXPRESSION
  2079. BX6 X1
  2080. EQ ACFNAM
  2081. *
  2082. ACFNAM1 CALL NXTNAM LITERALS ONLY (RETURN NAME)
  2083. EQ ACFNAM
  2084. *
  2085. ACFNAM2 SX6 0 ZERO FILL NAME
  2086. SA6 IFILL
  2087. CALL COMPNAM LITERAL OR EXPRESSION
  2088. BX6 X1
  2089. EQ ACFNAM
  2090. *
  2091. * /--- BLOCK FILEACC 00 000 80/12/26 10.47
  2092. *
  2093. *
  2094. * -ACCFILC-
  2095. *
  2096. * CONVERTS SPECIAL ACCOUNT NAMES TO A USEABLE FORM.
  2097. * KEYWORD *'LESSON* IS CONVERTED TO THE ACCOUNT OF THE
  2098. * CURRENT LESSON. KEYWORD *'OLD* IS CONVERTED TO A
  2099. * NULL ACCOUNT NAME WITH THE ORIGINAL FILE FLAG SET.
  2100. * ACCOUNT NAMES LONGER THAN 7 CHARACTERS ARE CONVERTED
  2101. * TO ZERO.
  2102. *
  2103. * CONVERSIONS ARE DONE ONLY IF *ACCFILE* IS CALLED
  2104. * IN LITERALS-ONLY MODE.
  2105. *
  2106. * ENTER'; X6 = ACCOUNT SPECIFIED BY USER
  2107. * EXIT'; X6 = CONVERTED ACCOUNT NAME
  2108. *
  2109. * A SIMILAR ROUTINE BY THE SAME NAME EXISTS IN EXEC1.
  2110. *
  2111. ACCFILC EQ *
  2112. SA2 ACFLIT GET LITERALS FLAG
  2113. PL X2,ACCFILC EXIT IF GENERATING GETVAR CODES
  2114. *
  2115. ZR X6,ACFOLD FOR NOW, ZERO MEANS OLD-STYLE
  2116. SA2 AKOLD KEYWORD OLD
  2117. IX2 X6-X2
  2118. ZR X2,ACFOLD
  2119. *
  2120. SA2 AKLESS KEYWORD LESSON
  2121. IX2 X6-X2
  2122. ZR X2,ACFLES
  2123. *
  2124. MX2 -18
  2125. BX2 -X2*X6 LOOK AT LOWER 18 BITS
  2126. ZR X2,ACCFILC OKAY IF LOW 18 BITS ZERO
  2127. SX6 0 DO NOT ALLOW MORE THAN 7 CHARS
  2128. EQ ACCFILC
  2129. *
  2130. ACFOLD MX6 1
  2131. LX6 18 SET ORIGINAL FILE FLAG
  2132. EQ ACCFILC
  2133. *
  2134. ACFLES SA1 ACCOUNT ACCOUNT OF CURRENT LESSON
  2135. BX6 X1
  2136. EQ ACCFILC
  2137. *
  2138. *
  2139. AKOLD DATA 0L'OLD FOR OLD-STYLE FILE REFERENCES
  2140. AKLESS DATA 0L'LESSON FOR ACCOUNT OF CURRENT LESSON
  2141. *
  2142. * /--- BLOCK FILEACC 00 000 80/12/26 10.48
  2143. *
  2144. *
  2145. * -ACCFILF-
  2146. *
  2147. * ROUTINE TO GET ACCOUNT AND FILE NAMES FROM FIRST
  2148. * TWO ARGUMENTS OF A COMMAND. INITIALIZES *VARBUF*
  2149. * AND STORES GETVAR CODES IN FIRST TWO WORDS.
  2150. *
  2151. ENTRY ACCFILF
  2152. ACCFILF EQ *
  2153. SX6 2 2 ARGUMENTS
  2154. SA6 VARBUF
  2155. CALL ACCFILE,VARBUF+1,0
  2156. EQ ACCFILF
  2157. *
  2158. *
  2159. * -FILEBLK-
  2160. *
  2161. * ROUTINE TO GET ACCOUNT, FILE, AND BLOCK NAMES
  2162. * FROM FIRST 3 ARGUMENTS OF A COMMAND. INITIALIZES
  2163. * *VARBUF* AND STORES GETVAR CODES IN FIRST THREE
  2164. * WORDS.
  2165. *
  2166. * EXIT'; X1 = NUMBER OF ARGUMENTS
  2167. * 0 IF BLANK TAG
  2168. * 3 IF NON-BLANK
  2169. *
  2170. ENTRY FILEBLK
  2171. FILEBLK EQ *
  2172. CALL ACCFILE,VARBUF+1,0
  2173. SA2 LASTKEY CHECK FOR END OF LINE
  2174. ZR X2,FBEOL JUMP IF SO
  2175. *
  2176. CALL COMPNAM COMPILE BLOCK NAME
  2177. *
  2178. FILEB1 BX6 X1
  2179. SA6 VARBUF+3 STORE GETVAR CODE
  2180. SX1 3 INDICATE 3 ARGUMENTS
  2181. BX6 X1
  2182. SA6 VARBUF
  2183. EQ FILEBLK
  2184. *
  2185. FBEOL ZR X1,FILEBLK EXIT IF BLANK TAG (X1 SET BY ACCFILE)
  2186. SX1 X1-2 SEE IF 2 ARGUMENTS FOUND IN ACCFILE
  2187. ZR X1,ERR2FEW ERROR IF SO
  2188. *
  2189. * IF ONLY ONE ARGUMENT IT MUST BE BLOCK NAME
  2190. *
  2191. SA1 VARBUF+2 GET FILE CODE RETURNED BY ACCFILE
  2192. MX6 0
  2193. SA6 A1 ZERO FILE NAME ARGUMENT
  2194. EQ FILEB1
  2195. *
  2196. * /--- BLOCK TERM 00 000 76/07/17 06.20
  2197. TITLE TERM
  2198. * TERM (NOT AN EXECUTABLE COMMAND--BUILDS TABLE)
  2199. *
  2200. * TERM KEEPS TABLE BACKWARDS IN ECS (TERMBUF)
  2201. *
  2202. NOWTERM BSS 1
  2203. TERMFLG BSS 1 TOP BIT = 1 IF TERMOP
  2204. *
  2205. *
  2206. TERMOPC MX6 1 TOP BIT FLAG FOR TERMOP
  2207. EQ TERMC1
  2208. *
  2209. TERMC MX6 0 CLEAR TOP BIT FLAG FOR TERM
  2210. *
  2211. TERMC1 SA6 TERMFLG
  2212. SB1 FSTERM -TERM- IS PUBLISH ERROR
  2213. RJ =XPUBERRS
  2214. *
  2215. SA1 TAGCNT X1 = TAG LENGTH
  2216. SB1 X1-9
  2217. PL B1,ERRNAME --- ERROR IF MORE THAN 8 CHARS
  2218. SB1 1 B1 = CONSTANT 1
  2219. SA5 TERMS PRESENT NUMBER OF TERMS TO X5
  2220. * BOUNDS CHECK TO BE MADE HERE IF DIFFERENT BUFFER USED
  2221. SX7 X5+B1
  2222. SX6 X7-MAXTERM
  2223. PL X6,TERMERR --- ERROR IF TOO MANY TERMS
  2224. SA7 A5 STORE NEW TABLE LENGTH
  2225. MX6 0 PRE-CLEAR TERM NAME
  2226. ZR X1,TERMC2 CATCH-ALL TERM IF NO TAG
  2227. SB2 0
  2228. *
  2229. TERMLP SA1 TAG+B2 LOAD CHAR
  2230. LX6 6
  2231. BX6 X6+X1 ADD ON CHAR
  2232. SB2 B2+B1
  2233. NZ X1,TERMLP
  2234. SB3 10
  2235. TLLP LX6 6
  2236. SB2 B2+B1
  2237. NE B2,B3,TLLP LEFT JUSTIFY TERM
  2238. *
  2239. * SET UP UNIT NUMBER TO BRANCH TO WHEN TERM USED.
  2240. *
  2241. TERMC2 SA1 UNUMON
  2242. BX6 X6+X1 ADD ON UNIT NUM
  2243. LX6 -12 12 UNIT BITS TO TOP
  2244. SA2 TERMFLG TOP BIT FLAG FOR TERMOP
  2245. BX6 X6+X2
  2246. SA6 NOWTERM PREPARE FOR SINGLE ECS WRITE
  2247. SA2 TERMEND ADDRESS OF END OF BUFFER
  2248. IX0 X2-X5
  2249. SA0 A6
  2250. + WE 1 WRITE OUT SINGLE TERM
  2251. RJ ECSPRTY
  2252. EQ NXTLINE
  2253. *
  2254. *
  2255. TERMERR SX6 1 FLAG ERROR MESSAGE PRESENT
  2256. SA6 TFORMOK
  2257. SA1 =10LTOO MANY
  2258. BX6 X1
  2259. SA6 CERROR1
  2260. SB1 51 TOO MANY
  2261. EQ =XERR
  2262. * /--- BLOCK VARDO 00 000 79/12/15 01.18
  2263. TITLE GENERAL SUBROUTINES FOR PROCESSING VARIABLES
  2264. * - - - - SUBROUTINE TO HANDLE MULTIPLE VARIABLES - - - - - - - - - - -
  2265. * USES STANDARD LEXICAL SEPARATORS
  2266. *
  2267. * VARBUF(0) RETURNED WITH NUMBER OF VARIABLES
  2268. * VARBUF(N) RETURNED WITH -GETVAR- CODE FOR NTH VARIABLE
  2269. *
  2270. * ****NOTE**** WORDPT IS ASSUMED TO POINT TO
  2271. * THE CHAR TO PROCESS FIRST.
  2272. *
  2273. * THE SUBROUTINE VARFIN WILL HANDLE THE PACKING UP OF THESE VARS
  2274. *
  2275. * 60-BIT CODE FOR EACH VAR IS CONSTRUCTED AS FOLLOWS--
  2276. * (1) TOP BIT -- SET IF EXPRESSION CANNOT BE STORED INTO
  2277. * (2) LOWER 20 BITS -- CODE COMPILE RETURNS (-GETVAR- CODE)
  2278. *
  2279. VARDO EQ *
  2280. SX6 0
  2281. SA6 VARBUF ZERO VARBUF(0) TO NO VARS PRESENT
  2282. VARDOL RJ VARDO2 COMPILE NEXT VAR TO VARBUF ARRAY
  2283. SA1 LASTKEY
  2284. NZ X1,VARDOL CONTINUE IF NOT E-O-L
  2285. EQ VARDO
  2286. *
  2287. *
  2288. *
  2289. * - - - - SUBROUTINE TO GET REMAINING VARIABLES - - - - - - - - - - -
  2290. * SAME AS VARDO BUT ASSUMES THAT ONE OR MORE
  2291. * ARGUMENTS HAVE ALREADY BEEN COMPILED INTO VARBUF.
  2292. *
  2293. VARDOR EQ *
  2294. VARDOR1 SA1 LASTKEY
  2295. ZR X1,VARDOR EXIT IF END OF LINE
  2296. RJ VARDO2 COMPILE NEXT ARGUMENT
  2297. EQ VARDOR1
  2298. *
  2299. * /--- BLOCK VARDOC 00 000 79/01/18 04.20
  2300. *
  2301. *
  2302. *
  2303. * - - - - SUBROUTINE FOR CONTINUED READ OF MULTIPLE VARIABLES - - - - -
  2304. * USES STANDARD LEXICAL SEPARATORS
  2305. *
  2306. VARDOC EQ *
  2307. SX6 0
  2308. SA6 VARBUF ZERO VARBUF(0) TO NO VARS PRESENT
  2309. VARDOCL SA1 WORDPT X1 = POINTER TO NEXT CHARACTER OF TAG
  2310. SA2 X1
  2311. ZR X2,VARDOCN JUMP IF AT END-OF-LINE
  2312. RJ VARDO2 GET CODE FOR NEXT VARIABLE
  2313. EQ VARDOCL
  2314. VARDOCN SA1 NEXTCOM CHECK FOR CONTINUATION
  2315. SA2 COMCONT
  2316. BX3 X1-X2
  2317. NZ X3,VARDOC --- EXIT IF NOT CONTINUED
  2318. RJ GETLINE READ IN NEXT LINE
  2319. EQ VARDOCL
  2320. *
  2321. *
  2322. *
  2323. * - - - - SUBROUTINE TO GET FIRST VARIABLE - - - - - - - - - - - - - - -
  2324. * USES STANDARD LEXICAL SEPARATORS
  2325. *
  2326. VARDO1 EQ *
  2327. SX6 0
  2328. SA6 VARBUF ZERO VARBUF(0) TO NO VARS PRESENT
  2329. RJ VARDO2 GET CODE FOR STORAGE VARIABLE
  2330. EQ VARDO1 RETURN
  2331. *
  2332. *
  2333. *
  2334. * - - - - SUBROUTINE TO GET NEXT VARIABLE - - - - - - - - - - - - - - -
  2335. * USES STANDARD LEXICAL SEPARATORS
  2336. *
  2337. ENTRY VARDO2
  2338. VARDO2 EQ *
  2339. RJ COMPILE GET CODE FOR STRING IN X1 AND B1
  2340. RJ VARDO2A
  2341. EQ VARDO2
  2342. *
  2343. VARDO2A EQ *
  2344. SA2 VARBUF X2 HOLDS CURRENT NO. OF ARGUMENTS
  2345. SX7 X2+1 X7 HOLDS NEW NO. OF ARGUMENTS
  2346. SX2 X7-VARBUFL SUBTRACT OFF SIZE OF VARBUF
  2347. PL X2,ERR2MNY EXIT IF READINBF FULL
  2348. ZR B1,VARDO2E JUMP IF VAR IS STOREABLE
  2349. MX0 1
  2350. BX1 X1+X0 SET TOP BIT OF CODE IF NOT STOREABLE
  2351. VARDO2E SA7 A2 STORE NEW VAR COUNT IN VARBUF(0)
  2352. BX6 X1 MOVE -GETVAR- CODE TO X6
  2353. SB6 A2 MOVE ADR OF VARBUF
  2354. SA6 B6+X7 STORE IN NEXT LOC OF VARBUF
  2355. EQ VARDO2A
  2356. *
  2357. PUTDO2 EQ *
  2358. RJ PUTCOMP
  2359. RJ VARDO2A
  2360. EQ PUTDO2
  2361. *
  2362. * /--- BLOCK VARFIN 00 000 77/01/24 20.50
  2363. *
  2364. * - - - - ROUTINE TO HANDLE PACKING OF VARBUF VARS - - - - - - - - - - -
  2365. *
  2366. * ON ENTRY, SET X1 TO THE NUMBER OF VARS LEGAL FOR THIS COMMAND
  2367. *
  2368. * THE COMMAND WORD IS AS FOLLOWS --
  2369. * 20 BITS -- FIRST VAR
  2370. * 20 BITS -- SECOND VAR
  2371. * 11 BITS -- EXTRA STORAGE POINTER
  2372. * 9 BITS -- COMMAND NUMBER
  2373. *
  2374. * THE REMAINING VARS (IF ANY) ARE PACKED THREE PER
  2375. * WORD IN EXTRA STORAGE
  2376. *
  2377. VARFIN SA2 VARBUF X2 HOLDS NO. OF 20 BIT PACKAGES
  2378. SA4 VARBUF+1 A4 HOLDS ADR. OF FIRST 20 BIT PACKAGE
  2379. RJ VARFINS
  2380. EQ NXTLINE
  2381. *
  2382. * THE MAIN SUBROUTINE
  2383. * ****NOTE**** OTHER THINGS ENTER HERE WITH X1,X2, AND A4 SET
  2384. VARFINS EQ *
  2385. SB2 X2 B2 HOLDS VAR COUNT
  2386. BX2 X1-X2
  2387. NZ X2,ERRTAGS ERROR IF NOT CORRECT NO. OF VARS
  2388. SB5 1 UNIVERSAL INCREMENT CONSTANT TO B5
  2389. MX0 60-XCODEL X0 HOLDS 40 BIT MASK
  2390. BX3 -X0*X4 CLEAR TOP BITS OF FIRST VAR
  2391. SA4 A4+B5 GET SECOND VAR
  2392. BX4 -X0*X4
  2393. LX3 60-XCODEL POSITION FIRST VAR
  2394. LX4 60-2*XCODEL POSITION SECOND VAR
  2395. BX6 X3+X4
  2396. SB4 B5+B5 B4 HOLDS COUNT OF TWO
  2397. SA2 INX NEXT FREE LOC OF EXTRA STORAGE
  2398. LX2 XCMNDL POSITION LEFT OF COMMAND CODE
  2399. BX6 X6+X2 X2 HOLDS POINTER TO NEXT EXTRA STORAGE WORD
  2400. RJ CSTO STORE COMMAND WORD (USES A1,B1,X1,A6,B6,X6)
  2401. VARFINT SB2 B2-3 DECREMENT VAR COUNT
  2402. LT B2,VARFINS DONE IF LESS THAN THREE VARS
  2403. VARFINL SA4 A4+B5 A4 STILL POINTS TO PREVIOUS VAR
  2404. BX4 -X0*X4 X0 STILL HOLDS 40 BIT MASK
  2405. LX6 XCODEL SHIFT PREVIOUS VAR(S) UP
  2406. BX6 X0*X6
  2407. BX6 X6+X4 X6 HOLDS PACKED UP VARS
  2408. SB4 B4-B5 DECREMENT BY ONE FOR END TEST
  2409. PL B4,VARFINL JUMP IF THIS WORD NOT FULL YET
  2410. SA2 INX GET EXTRA STORAGE POINTER
  2411. SA6 INFO+X2 STORE EXTRA STORAGE WORD
  2412. SB4 B5+B5
  2413. SX7 X2+B5
  2414. SA7 INX UPDATE EXTRA STORAGE POINTER
  2415. EQ VARFINT
  2416. *
  2417. *
  2418. *
  2419. * - - - - ROUTINE TO PACK UP VARS WITH A CHAR COUNT - - - - - - - - - -
  2420. *
  2421. * INSERTS AN ADDITIONAL FIRST 20 BIT PACKAGE CONTAINING
  2422. * VARBUF(0) (I.E. THE NO. OF VARS).
  2423. *
  2424. VARFINM SA4 VARBUF A4 HOLDS ADR OF FIRST 20 BIT PACKAGE
  2425. SX2 X4+1 X2 HOLDS COUNT OF 20 BIT PACKAGES
  2426. SX1 X2 ALLOW ANY NUMBER OF VARIABLES
  2427. RJ VARFINS USE STANDARD VARFIN PROCESSOR
  2428. EQ NXTLINE
  2429. * /--- BLOCK MRKLAST 00 000 76/11/17 21.32
  2430. *
  2431. *
  2432. * - - - - ROUTINE TO PACK UP VARS WITH LAST ONE MARKED - - - - - -
  2433. *
  2434. * MARKS THE LAST 20 BIT PACKAGE BY SETTING THE TOP
  2435. * BIT OF THE GETVAR CODE. ANY NUMBER OF ARGUMENTS
  2436. * ARE LEGAL (NO CHECKING IS DONE). SHOULD BE USED
  2437. * FOR COMMANDS WITH OPTIONAL TAGS. CHECKING FOR NUMBER
  2438. * OF VALID ARGUMENTS SHOULD BE DONE IN THE READIN.
  2439. *
  2440. MRKLAST SA1 VARBUF
  2441. SA2 VARBUF+X1 GET LAST ARGUMENT
  2442. MX3 1
  2443. LX3 XCODEL TOP BIT OF GETVAR CODE
  2444. BX6 X3+X2
  2445. SA6 A2 LAST ARGUMENT MARKED
  2446. EQ VARFIN FINISH WITH X1 = NO. ARGS VALID
  2447. *
  2448. *
  2449. * /--- BLOCK VARLEX 00 000 76/11/17 17.16
  2450. EJECT
  2451. * - - - - SUBROUTINE TO DO NON-STANDARD LEXICAL SEARCH FOR VARS - - - -
  2452. *
  2453. * VARSEP AND VARONE MUST BE SET AS IN VARONE
  2454. * VARONET RETURNED WITH ADDRESS OF ENDING SEP
  2455. * VARONES HOLDS THE SEPARATOR FOUND (0 IF E-O-L)
  2456. *
  2457. VARLEX EQ *
  2458. SA2 WORDPT X2 HOLDS ADR OF CHAR NOW WORKING ON
  2459. SB2 1 B2 HOLDS INCREMENT OF ONE
  2460. SX2 X2-1 DECREMENT CHAR POINTER INITIALLY
  2461. VARONEL SX2 X2+B2 INCREMENT X2 TO NEXT CHAR
  2462. SA1 X2 X1 HOLDS NEXT CHAR
  2463. ZR X1,VARONEG JUMP IF E-O-L
  2464. VARSEP DATA 0 ****ARGUMENT****, CHECKS IF X1 HOLDS SEP.
  2465. VARONED NZ X1,VARONEL NOT A SEP., CONTINUE SEARCHING
  2466. SA1 X2 SEPARATOR TO X1
  2467. VARONEG SX7 X1
  2468. SA7 VARONES SAVE ENDING SEPARATOR IN VARONES
  2469. SX7 X2 MOVE ADR OF SEPARATOR
  2470. SA7 VARONET SAVE ADR OF ENDING SEPARATOR IN VARONET
  2471. EQ VARLEX
  2472. *
  2473. *
  2474. *
  2475. * - - - - SUBROUTINE TO COMPILE A SINGLE VAR AFTER USING -VARLEX - - -
  2476. *
  2477. * TO INITIALIZE --
  2478. * 1. SET VARBUF(0) TO NO. OF VARS ALREADY IN READINBF
  2479. * 2. SET VARSEP TO INDICATE THE SEPARATOR(S) DESIRED
  2480. * 3. SET WORDPT TO THE ADR OF THE FIRST CHAR IN STRING
  2481. *
  2482. * EACH CALL OF VARONE DOES THE FOLLOWING --
  2483. * 1. INCREMENTS VARBUF(0) BY ONE
  2484. * 2. USES VARSEP TO DETERMINE THE END OF THE NEXT STRING
  2485. * (VARSEP MUST BE A WORD OF INSTRUCTIONS WHICH SETS
  2486. * X1 TO ZERO IF THE CONTENTS OF X1 IS A TERMINATOR)
  2487. * (ZERO IS AN AUTOMATIC TERMINATOR)
  2488. * (A1,B1,X1,A6,B6,X6 ARE THE ONLY REGISTERS WHICH
  2489. * VARSEP MAY DESTROY)
  2490. * 3. SENDS THAT STRING TO COMPILE FOR CODING
  2491. * 4. UPDATES WORDPT TO ADDRESS OF CHAR FOLLOWING TERMINATOR
  2492. * 5. STORES -GETVAR- CODE IN VARBUF(VARBUF(0))
  2493. * 6. RETURNS LASTKEY WITH TERMINATOR
  2494. *
  2495. VARONE EQ *
  2496. SA1 VARONET ADDRESS OF ENDING CHAR
  2497. SX7 1R, COMMA IS END-OF-LINE FOR COMPILE
  2498. SA7 X1
  2499. RJ VARDO2
  2500. SA2 VARONET X2 HOLDS ADDRESS OF ENDING SEPARATOR
  2501. SA1 VARONES X1 HOLDS ENDING SEPARATOR
  2502. BX7 X1
  2503. SA7 X2 RESTORE ORIGINAL CHAR
  2504. SA7 LASTKEY ALSO PUT INTO LASTKEY
  2505. EQ VARONE
  2506. *
  2507. VARONES BSS 1 TEMP STORAGE FOR LASTKEY
  2508. VARONET BSS 1 TEMP STORAGE FOR POINTER TO SEPARATOR
  2509. *
  2510. *
  2511. *
  2512. *
  2513. * - - - - VARIOUS VALUES FOR VARSEP FOLLOW - - - - - - - - - - - - - - -
  2514. * /--- BLOCK VARFEM 00 000 76/07/17 06.21
  2515. *
  2516. SEPCMAS RJ SEPCMAS1 COMMA OR ASSIGNMENT ARROW WILL TERMINATE
  2517. SEPCMAS1 EQ *
  2518. SX1 X1-1R,
  2519. ZR X1,SEPCMAS1 EXIT IF CHAR IS COMMA
  2520. SX1 X1+1R,-KASSIGN
  2521. EQ SEPCMAS1
  2522. *
  2523. *
  2524. *
  2525. * - - - - SUBROUTINE TO STORE COMMAND WORD - - - - - - - - - - - - - - -
  2526. *
  2527. * WILL ONLY DESTROY (A1,B1,X1,A6,B6,X6)
  2528. *
  2529. * ASSUMES X6 TO HOLD COMMAND WORD, LOWER 10 BITS ZERO
  2530. *
  2531. * ATTACHES COMNUM TO X6 AND DECREMENTS ICX
  2532. * STORES X6 IN INFO(ICX)
  2533. *
  2534. CSTO EQ *
  2535. SA1 COMNUM GET COMMAND NUMBER
  2536. BX6 X6+X1
  2537. SA1 ICX POINTS TO PREVIOUS COMMAND WORD
  2538. SA6 INFO-1+X1 STORE IN NEXT OPEN SPACE
  2539. SX6 X1-1
  2540. SA6 A1 STORE NEW COMMAND POINTER VALUE
  2541. EQ CSTO
  2542. *
  2543. * ROUTINE TO DO FOR EMBEDDABLE COMMANDS WHAT
  2544. * VARFIN DOES FOR NORMAL COMMANDS
  2545. * NOTE THAT ON ENTRY, X1=NUMBER OF ARGUMENTS DESIRED
  2546. *
  2547. *
  2548. VARFEM EQ * ENTRY/EXIT LINE
  2549. SA2 VARBUF X2 HOLDS NO. OF 20 BIT PACKAGES
  2550. SB5 1 UNIVERSAL INCREMENT CONSTANT TO B5
  2551. SA4 A2+B5 A4 HOLDS ADR. OF FIRST 20 BIT PACKAGE
  2552. SB2 X2 B2 HOLDS VAR COUNT
  2553. BX2 X1-X2
  2554. NZ X2,ERRTAGS ERROR IF NOT CORRECT NO. OF VARS
  2555. MX0 60-XCODEL X0 HOLDS 40 BIT MASK
  2556. BX3 -X0*X4 CLEAR TOP BITS OF FIRST VAR
  2557. SA4 A4+B5 GET SECOND VAR
  2558. BX4 -X0*X4
  2559. LX3 60-XCODEL POSITION FIRST VAR
  2560. LX4 60-2*XCODEL POSITION SECOND VAR
  2561. BX6 X3+X4
  2562. SB4 B5+B5 B4 HOLDS COUNT OF TWO
  2563. SA2 INX NEXT FREE LOC OF EXTRA STORAGE
  2564. LX2 XCMNDL POSITION LEFT OF COMMAND CODE
  2565. BX6 X6+X2 X2 HOLDS POINTER TO NEXT EXTRA STORAGE WORD
  2566. * COMMAND WORD STORED BY CALL-OR
  2567. VARFEMT SB2 B2-3 DECREMENT VAR COUNT
  2568. LT B2,VARFEM DONE IF LESS THAN THREE VARS
  2569. VARFEML SA4 A4+B5 A4 STILL POINTS TO PREVIOUS VAR
  2570. BX4 -X0*X4 X0 STILL HOLDS 40 BIT MASK
  2571. LX7 XCODEL SHIFT PREVIOUS VAR(S) UP
  2572. BX7 X0*X7
  2573. BX7 X7+X4 X7 HOLDS PACKED UP VARS
  2574. SB4 B4-B5 DECREMENT BY ONE FOR END TEST
  2575. PL B4,VARFEML JUMP IF THIS WORD NOT FULL YET
  2576. SA2 INX GET EXTRA STORAGE POINTER
  2577. SA7 INFO+X2 STORE EXTRA STORAGE WORD
  2578. SB4 B5+B5
  2579. SX7 X2+B5
  2580. SA7 INX UPDATE EXTRA STORAGE POINTER
  2581. EQ VARFEMT
  2582. * /--- BLOCK NEWERROR 00 000 80/09/14 14.57
  2583. *
  2584. * NEW STANDARD ERROR EXITS FOR ALL CONDENSE ROUTINES
  2585. *
  2586. ENTRY ERRTAGS,ERRNAME,ERRSTOR
  2587. ENTRY ERRXYTG,ERR2MNY,ERR2FEW,ERR2MNU
  2588. ENTRY ERRTERM,ERRUARG,ERRVTYP
  2589. ENTRY ERROBS,ERROUTR,ERRCNTD
  2590. ENTRY ERRXORQ,ERRBAL,FIPERR
  2591. *
  2592. ERROBS SB1 0 OBSOLETE COMMAND
  2593. EQ =XERR
  2594. ERRTAGS SB1 2 WRONG NUMBER TAG FIELDS
  2595. EQ =XERR
  2596. ERRNAME SB1 3 UNRECOGNIZABLE NAME OR TOO LONG
  2597. EQ =XERR
  2598. ERRSTOR SB1 4 ERROR IN TYPE OF STORE VARIABLE
  2599. EQ =XERR
  2600. ERRXYTG SB1 5 ERROR IN COARSE/FINE XY TAG
  2601. EQ =XERR
  2602. ERR2MNY SB1 6 TOO MANY TAGS FOR COMMAND FORM
  2603. EQ =XERR
  2604. ERR2FEW SB1 7 NOT ENOUGH TAGS FOR COMMANDFORM
  2605. EQ =XERR
  2606. ERRTERM SB1 8 WRONG TERMINATOR TYPE ,FOR; ETC
  2607. EQ =XERR
  2608. ERRUARG SB1 9 UNIT ARGUMENTS DONT MATCH
  2609. EQ =XERR
  2610. ERRVTYP SB1 10 WRONG VARIABLE TYPE, IE
  2611. EQ =XERR VC NOT V OR V NOT N
  2612. *
  2613. FIPERR SB1 44 BAD FILE INFO PACKET
  2614. EQ =XERR
  2615. *
  2616. ERRXORQ SB1 72
  2617. EQ =XERR
  2618. ERROUTR SB1 79 ILLEGAL REF TO ROUTER (OR NONE)
  2619. EQ =XERR
  2620. ERRCNTD SB1 80 COMND NOT (OR SHOULD BE) CONTD.
  2621. EQ =XERR
  2622. ERRBAL SB1 84 UNBALANCED PARENS OR QUOTES
  2623. EQ =XERR
  2624. ERR2MNU SB1 105 TOO MANY UNIT NAMES (OVER 400)
  2625. EQ =XERR
  2626. *
  2627. *
  2628. * /--- BLOCK ULONG 00 000 75/10/09 10.23
  2629. *
  2630. *
  2631. * -ULONG-
  2632. * CHECK FOR UNIT TOO LONG - GIVE WARNING
  2633. *
  2634. ENTRY ULONG
  2635. ULONG EQ *
  2636. SA1 INX EXTRA STORAGE POINTER
  2637. SA2 ICX COMMAND STORAGE POINTER
  2638. IX1 X1-X2 CHECK FOR UNIT TOO LONG
  2639. PL X1,LNGUNIT FATAL ERROR EXIT
  2640. * SX1 X1+25
  2641. SX1 X1+10 UNITLTH-10 = WARNING LIMIT
  2642. NG X1,ULONG
  2643. SA1 UNUMON SEE IF IN IEU
  2644. SX1 X1-IEUNUM
  2645. ZR X1,LNGUNIT JUST ABORT
  2646. CALL UNNAM GET CURRENT UNIT NAME
  2647. NG X1,LNGUNIT ABORT IF BAD UNIT NAME
  2648. LX6 12
  2649. BX5 X6 UERRSET PRESERVES -X5-
  2650. CALL UERRSET SET EDIT CONNECTION TO GO TO UNIT COMMAND
  2651. SB1 900 *WARNING* UNIT ALMOST TOO LONG
  2652. BX2 X5 SAVE UNIT NAME
  2653. MX1 -1 DON'7T SAVE COMMAND NAME
  2654. SB2 X1 NO BAD LINE TO SAVE
  2655. RJ =XRJERR2 STORE ERROR INFO
  2656. EQ ULONG
  2657. *
  2658. *
  2659. * -MISAY-
  2660. * CHECK FOR MISSING -SAYLANG- IF SAY(S) PRESENT
  2661. *
  2662. ENTRY MISAY
  2663. MISAY EQ *
  2664. .SAYCMD IFNE SAYASSM,0
  2665. SA3 SAYFLAG PUT VALUE OF SAYFLAG IN X3
  2666. ZR X3,MISAY IF NO SAY(LANG) COMNDS, RETURN
  2667. SX3 X3-1 AREN'7T INTERESTED IF SAY THERE
  2668. NZ X3,MISAY MUST HAVE BEEN A SAYLANG
  2669. SB1 117 ',MISSING SAYLANG COMMAND',
  2670. SB2 -1
  2671. SX1 B0
  2672. SX2 B0
  2673. RJ =XRJERR2 STORE ERROR INFORMATION
  2674. .SAYCMD ENDIF
  2675. EQ MISAY
  2676. *
  2677. * /--- BLOCK ABORTCON 00 000 81/06/15 11.44
  2678. TITLE ABORTCON--ABORT CONDENSE
  2679. *
  2680. *
  2681. * TAG TOO LONG--PRESUMABLY NOT A SOURCE FILE
  2682. *
  2683. ENTRY BADTAG
  2684. *
  2685. BADTAG SX6 14
  2686. EQ ABORTCON
  2687. *
  2688. *
  2689. * UNIT NAME TABLE FULL BUT IEU ONLY REAL ONE
  2690. *
  2691. ENTRY BADIEU
  2692. BADIEU SX6 42
  2693. EQ ABORTCON
  2694. *
  2695. *
  2696. * OBSOLETE LESSON -- MUST BE CONVERTED FIRST
  2697. *
  2698. ENTRY OBSFILE
  2699. OBSFILE SX6 29 ERROR CODE
  2700. SA6 IOBUFF
  2701. EQ ABORT3
  2702. *
  2703. * UNIT TOO LONG TO CONDENSE
  2704. *
  2705. ENTRY LNGUNIT
  2706. *
  2707. LNGUNIT SX6 6
  2708. EQ ABORTCON
  2709. *
  2710. *
  2711. * TOO MANY BLOCKS BEING -USE-D
  2712. *
  2713. ENTRY TMNYUSE
  2714. TMNYUSE SX6 30
  2715. EQ ABORTCON
  2716. *
  2717. * ABORT CONDENSE
  2718. *
  2719. ABORTCON SA6 IOBUFF
  2720. * FIND THE UNIT NAME
  2721. CALL UNNAM
  2722. LX6 12
  2723. SA6 IOBUFF+1 STORE EXTRA INFORMATION
  2724. ABORT2 SA3 ACLSTAT
  2725. SX1 ABTCLES
  2726. IX0 X1+X3 ECS ADDR OF STAT WORD
  2727. SA0 SCONTMP
  2728. + RE 1
  2729. RJ =XECSPRTY
  2730. SA1 A0
  2731. SX2 1
  2732. IX6 X1+X2 INC NUMBER OF ABORTED CONDENSING
  2733. SA6 A1
  2734. + WE 1 WRITE BACK IN ECS
  2735. RJ =XECSPRTY
  2736. SA1 TSCOMFG COMMAND STATISTICS
  2737. PL X1,ABORT3
  2738. BX6 X2 TURN OFF FLAG TEMP
  2739. SA6 A1 DONT INCLUDE IN STATISTICS
  2740. ABORT3 RJ =XABORTC
  2741. EQ =XCONDENS
  2742. * /--- BLOCK TUTOR COMM 00 000 80/12/26 14.07
  2743. TITLE TUTOR COMMAND STATISTICS
  2744. * ENTER THIS SUBROUTINE ONLY WHEN TSCOMFG IS -1, TO RECORD
  2745. * STATISTICS ON EACH TUTOR COMMAND, ITS CONDENSING TIME AND
  2746. * FREQUENCY COUNT.
  2747. * ALL STATISTICS ARE KEPT IN ECS BANK CNDSTAT.
  2748. * THE ROUTINE ASSUMES THAT THE COMMAND NUMBER IS IN SCOMNUM AND
  2749. * CONDENSING BEGIN TIME (MSEC.) IN SCOMBEG.
  2750. * TSCOMFG IS SET TO 1 UPON EXIT FROM THIS ROUTINE.
  2751. *
  2752. *
  2753. ENTRY PSTCMS1
  2754. *
  2755. PSTCMS1 EQ *
  2756. SX6 1
  2757. SA6 TSCOMFG RESET FLAG TO 1
  2758. SA3 ACDSTAT ADDR OF CNDSTAT IN ECS
  2759. SX1 SCOMNDN
  2760. IX0 X1+X3
  2761. SA0 SCONTMP
  2762. + RE 2 REAC TOTAL COUNT AND TOTAL TIME FROM ECS
  2763. RJ =XECSPRTY
  2764. SA1 A0 TOTAL COUNT
  2765. IX6 X1+X6
  2766. SA6 A1 INCREMENT TOTAL COUNT
  2767. SA1 SYSCLOK
  2768. SA2 SCOMBEG
  2769. IX2 X1-X2 CURRENT TIME - BEGIN TIME
  2770. SA1 A0+1 TOTAL TIME
  2771. IX6 X1+X2
  2772. SA6 A1 UPDATE TOTAL TIME
  2773. + WE 2 WRITE BACK ECS,TOTAL COUNT AND TIME
  2774. RJ =XECSPRTY
  2775. SX1 SCOMNDS COMMAND NUMBER
  2776. IX0 X1+X3
  2777. SA1 SCOMNUM
  2778. IX0 X0+X1 ECS LOC OF STATISTICS WORD FOR THIS COMMAND
  2779. + RE 1 READ FROM ECS
  2780. RJ =XECSPRTY
  2781. SA1 A0 LOAD COMMAND STATISTICS WORD
  2782. IX2 X1+X2 ADD TO PROCESS TIME
  2783. MX3 1
  2784. LX3 31
  2785. IX6 X2+X3 INC ITS COMMAND COUNT BY 1
  2786. SA6 A1
  2787. + WE 1 WRITE BACK IN ECS
  2788. RJ =XECSPRTY
  2789. EQ PSTCMS1
  2790. *
  2791. * /--- BLOCK WRITECS 00 000 85/03/25 11.54
  2792. *
  2793. SPACE 5,11
  2794. ** WRITECS - WRITE NEXT BLOCK OF BINARY TO ECS
  2795. *
  2796. * ENTRY - (X0) - ECS ADDRESS TO WRITE TO
  2797. * (A0) - CM ADDRESS TO WRITE FROM
  2798. * (X2) - NUMBER OF WORDS TO WRITE
  2799. *
  2800. * EXIT - (X0) - NEXT ECS ADDRESS TO WRITE TO
  2801. *
  2802. * MUST SAVE CONTENTS OF A - 0,1,6
  2803. * X - 1,3,4,6
  2804. * B - NONE
  2805. *
  2806. * (USED IN *UWRITE*/COVLAY4)
  2807.  
  2808. ENTRY WRITECS
  2809.  
  2810. WRITECS EQ *
  2811. WECS1 SA5 CONBUFF (X5) = ADDRESS OF CONDEN BUFFER
  2812. IX7 X0-X5
  2813. SA5 CBLTH (X5) = LENGTH OF BUFFER
  2814. IX7 X7-X5
  2815. IX7 X7+X2
  2816. PL X7,WECS2 IF OVERFLOWING BUFFER
  2817. SB7 X2 SET LENGTH OF WRITE
  2818. WE B7
  2819. RJ ECSPRTY
  2820. IX0 X0+X2 INCREMENT ECS ADDRESS
  2821. EQ WRITECS
  2822.  
  2823. * RATHER THAN ALLOCATE MAX SIZE BUFFER FOR BINARY,
  2824. * WE TRY ROUGHLY 1/4 THEN 1/2 THEN FULL SIZE.
  2825.  
  2826. WECS2 SX7 X5-CBLTH2 CHECK FOR 1/2 SIZE
  2827. PL X7,WECS2.1 -- .GE. 1/2 SIZE
  2828. SX7 CBLTH2 ELSE FIRST PASS, TRY 1/2
  2829. EQ WECS2.3
  2830.  
  2831. WECS2.1 NZ X7,WECS2.2 -- ALREADY AT MAX SIZE, ERROR
  2832. SX7 CBINMAX ELSE, TRY MAX SIZE
  2833. EQ WECS2.3
  2834.  
  2835. WECS2.2 SX6 15 THIRD PASS - *BINARY TOO BIG*
  2836. EQ ABORTCON
  2837.  
  2838. * /--- BLOCK WRITECS 00 000 85/03/25 11.48
  2839.  
  2840. * REQUEST A LARGER CONDENSE BUFFER
  2841.  
  2842. WECS2.3 BSS 0
  2843. SA7 CBLTH STORE DESIRED BUFFER LENGTH
  2844.  
  2845. SB7 1
  2846. SX7 A0 SAVE A0
  2847. SA7 WECSA
  2848. BX7 X0 SAVE X0
  2849. SA7 A7+B7
  2850. SX7 A6 SAVE A6
  2851. SA7 A7+B7
  2852. SA6 A7+B7 SAVE X6
  2853. SX7 A1 SAVE A1
  2854. BX6 X1 SAVE X1
  2855. SA7 A6+B7
  2856. SA6 A7+B7
  2857. BX6 X3 SAVE X3
  2858. BX7 X4 SAVE X4
  2859. SA6 A6+B7
  2860. SA7 A6+B7
  2861. * MUST SAVE X2 BECAUSE *SYSTEM* MACRO IN *S=WAIT* USES
  2862. * THAT REGISTER. CONTAINS LENGTH OF EM WRITE.
  2863. BX6 X2
  2864. SA6 A7+B7
  2865.  
  2866. * SET THE RETRY COUNTER.
  2867.  
  2868. SX6 3
  2869. WECS2.5 SA6 WECSD
  2870.  
  2871. * BUILD THE REQUEST.
  2872.  
  2873. MX6 1 MOVE LESSON REQUEST = 1
  2874. SA5 CONBUFF (X5) = ORIGINAL BUFFER ADDRESS
  2875. SA1 CBLTH
  2876. BX7 X1 (X7) = REQUESTED BUFFER LENGTH
  2877. SA1 CONDN BIAS TO THIS CONDENSORS WORD
  2878. SX0 X1+COECRQ
  2879. LX5 24
  2880. LX6 -11
  2881. BX7 X7+X6
  2882. BX7 X7+X5
  2883. SA7 WECSB SET REQUEST WORD
  2884. SA0 A7
  2885. SA1 WECSC INCREMENT ECS MOVE COUNT
  2886. SX6 X1+B7
  2887. SA6 A1
  2888. WE 1
  2889. RJ ECSPRTY
  2890.  
  2891. WECS3 SX7 B1 SAVE B1 OVER S=WAIT
  2892. CALL S=WAIT,15 WAIT A BIT
  2893. SB1 X7 RESTORE B1
  2894. RE 1
  2895. RJ ECSPRTY
  2896. SA5 A0
  2897. PL X5,WECS3 IF NOT COMPLETE
  2898.  
  2899. * /--- BLOCK WRITECS 00 000 85/03/25 11.50
  2900.  
  2901. * CHECK IF MOVE ACTUALLY OCCURRED.
  2902.  
  2903. MX7 -24
  2904. BX7 -X7*X5 (X7) = NEW EM ADDRESS
  2905. NZ X7,WECS5 IF MOVE OCCURRED
  2906.  
  2907. * UPDATE RETRY COUNTER.
  2908.  
  2909. SA1 WECSD
  2910. SX6 X1-1
  2911. PL X6,WECS2.5 IF SHOULD TRY AGAIN
  2912.  
  2913. * UNABLE TO GET THE LARGER BINARY BUFFER.
  2914. * ABORT THIS CONDENSE.
  2915.  
  2916. CALL S=MSG,(=C* EM REQUEST FAILURE.*)
  2917. SX6 3 NO ECS AVAILABLE
  2918. EQ ABORTCON
  2919.  
  2920. WECS5 SA5 CONBUFF
  2921. IX0 X7-X5 (X0) = DISTANCE OF MOVE
  2922. SA7 A5
  2923. SA5 WECSA RESTORE A0
  2924. SB7 1
  2925. SA0 X5
  2926. SA5 A5+B7 UPDATE X0 TO NEW ADDRESS
  2927. IX0 X5+X0
  2928. SA5 A5+B7 RESTORE A6
  2929. SA1 X5
  2930. BX6 X1
  2931. SA6 A1
  2932. SA5 A5+B7 RESTORE X6
  2933. BX6 X5
  2934. SA5 A5+B7 RESTORE A1
  2935. SA1 X5
  2936. SA5 A5+B7 RESTORE X1
  2937. BX1 X5
  2938. SA5 A5+B7
  2939. BX3 X5
  2940. SA5 A5+B7
  2941. BX4 X5
  2942. SA5 A5+B7
  2943. BX2 X5
  2944. EQ WECS1 WRITE AGAIN
  2945.  
  2946. WECSA BSS 9 SAVE AREA (A0,X0,A6,X6,A1,X1,X3,X4,X2)
  2947. WECSB DATA 0 ECS REQUEST WORD
  2948. ENTRY WECSC
  2949. WECSC DATA 0 NUMBER OF TIMES MOVE REQUESTED
  2950. WECSD BSS 1 MOVE EM RETRY COUNTER
  2951. *
  2952. * /--- BLOCK PUBERRS 00 000 80/12/26 14.13
  2953. *
  2954. *
  2955. * -PUBERRS-
  2956. *
  2957. * STORE ERROR ORDINAL,LESSON,BLOCK,LINE
  2958. * IN USERS STORAGE
  2959. *
  2960. * ON ENTRY B1 = PUBLISH ERROR NUMBER
  2961. * ON EXIT PUBLISH ERROR IS LOGGED
  2962. *
  2963. * USES ALL REGISTERS
  2964. *
  2965. ENTRY PUBERRS
  2966. PUBERRS EQ *
  2967. SB2 CPUBE B2 = BUFFER NUMBER
  2968. RJ =XPLOGLIN
  2969. EQ PUBERRS
  2970. *
  2971. * -PUBWARN-
  2972. *
  2973. * STORE ERROR ORDINAL,LESSON,BLOCK,LINE
  2974. * IN USERS STORAGE
  2975. *
  2976. * ON ENTRY B1 = PUBLISH WARNING NUMBER
  2977. * ON EXIT PUBLISH WARNING IS LOGGED
  2978. *
  2979. * USES ALL REGISTERS
  2980. *
  2981. ENTRY PUBWARN
  2982. PUBWARN EQ *
  2983. SB2 CPUBW B2 = BUFFER NUMBER
  2984. RJ =XPLOGLIN
  2985. EQ PUBWARN
  2986. *
  2987. *
  2988. * -PUBTEXT-
  2989. *
  2990. * STORE TEXT ORDINAL,LESSON,BLOCK,LINE
  2991. * IN USERS STORAGE
  2992. *
  2993. * ON ENTRY B1 = TEXT COMMAND NUMBER
  2994. * ON EXIT TEXT POSITION IS LOGGED
  2995. *
  2996. * USES ALL REGISTERS
  2997. *
  2998. ENTRY PUBTEXT
  2999. PUBTEXT EQ *
  3000. SB2 CTEXT B2 = BUFFER NUMBER
  3001. RJ =XPLOGLIN
  3002. EQ PUBTEXT
  3003. *
  3004. *
  3005. *
  3006. * -PLOGLIN-
  3007. *
  3008. * LOG ERROR/FILE/BLOCK/LINE NUMBER IN STORAGE BUFFER
  3009. *
  3010. * ON ENTRY B1 = PUBLISH ERROR TYPE
  3011. * B2 = BUFFER NUMBER
  3012. *
  3013. PLOGLIN EQ *
  3014. SA1 COPTS+B2 X1 = PUBLISH ERROR RETURN FLAG
  3015. ZR X1,PLOGLIN
  3016. *
  3017. SX6 B1 LOG TYPE
  3018. SA6 TEMP
  3019. SA0 A6
  3020. SB1 B2 B1 = BUFFER NUMBER
  3021. RJ APNDSTO APPEND CM(A0) TO BUFFER B1
  3022. RJ =XLOGLINE LOG FILE/LOGICAL BLOCK/LINE
  3023. EQ PLOGLIN
  3024. *
  3025. * /--- BLOCK UNITLOC 00 000 81/07/28 03.42
  3026. *
  3027. * -UNITLOC-
  3028. *
  3029. * APPEND UNIT NAME/FILE/BLOCK/LINE TO CUNTS BUFFER
  3030. *
  3031. * ON ENTRY, X6 = UNIT NUMBER
  3032. * ON EXIT, X6 IS PRESERVED
  3033. *
  3034. ENTRY UNITLOC
  3035. UNITLOC EQ *
  3036. SA1 COPTS+CUNTS
  3037. ZR X1,UNITLOC IF -UNITS- OPTION NOT SELECTED
  3038. *
  3039. SA6 SVX6 SAVE X6
  3040. RJ =XUNNAMX6 X6 = UNIT NAME
  3041. NG X1,*+40000B KILL CONDENSOR IF BAD UNIT NUM
  3042. SA6 TEMP
  3043. SA0 A6
  3044. SB1 CUNTS
  3045. RJ =XAPNDSTO APPEND UNIT NAME
  3046. RJ =XLOGLINE APPEND FILE/BLOCK/LINE
  3047. SA1 SVX6
  3048. BX6 X1 RESTORE X6
  3049. EQ UNITLOC
  3050. *
  3051. SVX6 BSS 1 SAVE X6 FROM UNIT CONDENSOR
  3052. *
  3053. TEMP BSS 1
  3054. *
  3055. *
  3056. * -LOGLINE-
  3057. *
  3058. * LOG FILE/BLOCK/LINE NUMBER IN STORAGE BUFFER
  3059. *
  3060. * ON ENTRY
  3061. * B1 = BUFFER NUMBER
  3062. *
  3063. ENTRY LOGLINE
  3064. LOGLINE EQ *
  3065. SA0 TACCT ACCOUNT OF TAG
  3066. RJ APNDSTO
  3067. SA0 TFILE FILE OF TAG
  3068. RJ APNDSTO
  3069. SA1 TBLOCK BLOCK OF TAG
  3070. SA2 TLINE LINE OF TAG
  3071. LX1 18 18BLOCK/18LINE
  3072. BX6 X1+X2
  3073. SA6 TEMP
  3074. SA0 A6
  3075. RJ APNDSTO
  3076. EQ LOGLINE
  3077. *
  3078. * /--- BLOCK APNDSTO 00 000 80/12/26 14.11
  3079. *
  3080. * -APNDSTO-
  3081. *
  3082. * APPEND A WORD TO BUFFER IN USER STORAGE
  3083. *
  3084. * ON ENTRY
  3085. * B1 = BUFFER ORDINAL
  3086. * A0 = CM ADDRESS OF WORD TO APPEND
  3087. *
  3088. * ON EXIT
  3089. *
  3090. * B1 IS PRESERVED
  3091. *
  3092. * IF THE BUFFER FOR THE ORDINAL IN B1 DOES NOT EXIST
  3093. * THE BUFFER IS CREATED. THE DATA STRUCTURE IS';
  3094. *
  3095. * S1 = 6UNUSED/18OVFLMAP/18OVFLCOUNT/18BUFFCOUNT
  3096. * S2 TO S(S1+1) = 24UNUSED/18BUFFORDINAL/18BUFFLEN
  3097. * S(S1+2) TO S(LSTORAG) = CONTENTS OF BUFFERS
  3098. *
  3099. ENTRY APNDSTO
  3100. APNDSTO EQ *
  3101. SX6 A0 SAVE A0
  3102. SA6 SAVEA0
  3103. SB7 B1 B7 = BUFFER ORDINAL
  3104. SB2 B0 B2 = LENGTH ALL BUFFERS
  3105. SB3 B0 B3 = LENGTH UP TO BUFFER B7
  3106. SB4 B0 B4 = INDEX TO BUFFER B7 POINTER
  3107. SB5 B0 B5 = BUFFER POINTER INDEX
  3108. SA1 CSTOADR X1 = ECS ADDRESS OF STORAGE
  3109. ZR X1,APNDSTO INTEGRITY CHECK
  3110. *
  3111. RX2 X1
  3112. SB6 X2 B6 = NUMBER OF BUFFERS
  3113. APND10 SB5 B5+1
  3114. GT B5,B6,APND20 IF ALL BUFFER POINTERS SCANNED
  3115. *
  3116. SX2 B5 X2 = BUFFER POINTER
  3117. IX2 X2+X1
  3118. RX2 X2
  3119. SX3 X2 X3 = BUFFER LENGTH
  3120. SB2 B2+X3 B2 = TOTAL LENGTH
  3121. AX2 18
  3122. SB1 X2 B1 = ORDINAL OF THIS BUFFER
  3123. NE B1,B7,APND10 IF NOT LOOKING FOR THIS BUFFER
  3124. *
  3125. SB4 B5
  3126. SB3 B2
  3127. EQ APND10
  3128. *
  3129. APND20 NZ B4,APND30 IF BUFFER ALREADY EXISTS
  3130. *
  3131. BX7 X1 X7 = ADDR OF STORAGE
  3132. SX2 B5
  3133. IX1 X1+X2 X1 = SOURCE OF MOVE
  3134. BX6 X1 SAVE X1
  3135. SX2 1
  3136. IX2 X2+X1 X2 = DESTINATION OF MOVE
  3137. SX3 B2 X3 = LENGTH OF MOVE
  3138. SA4 CSTOLWA X4 = LWA+1 OF BUFFER
  3139. RJ =XOPENECS OPEN BUFFER IN ECS
  3140. NG X5,APND40 IF NO ROOM TO APPEND WORD
  3141. *
  3142. BX1 X6 RESTORE X1
  3143. SX6 B7 X6 = BUFFER ORDINAL
  3144. LX6 18
  3145. WX6 X1 ADD NEW BUFFER POINTER
  3146. SB3 B2 POINT TO END OF LAST BUFFER
  3147. SB4 B5
  3148. * /--- BLOCK APNDSTO 00 000 81/07/08 01.17
  3149. BX1 X7 RESTORE X1
  3150. RX2 X1 X2 = CURRENT NUMBER OF BUFFERS
  3151. SX3 1
  3152. IX6 X2+X3 INCREMENT NUMBER OF BUFFERS
  3153. SB6 X6 B6 = NUMBER OF BUFFERS
  3154. WX6 X1
  3155. APND30 SX2 B6+1
  3156. SX2 X2+B3 STORAGE LOC FOR NEW ENTRY
  3157. IX1 X1+X2 X1 = ADDR FOR NEW WORD
  3158. BX7 X1 SAVE X1
  3159. SX2 1
  3160. IX2 X2+X1 X2 = NEXT BUFFER ADDRES
  3161. SB1 B2-B3
  3162. SX3 B1 X3 = LENGTH OF FOLLOWING SPACE
  3163. SA4 CSTOLWA X4 = LWA+1 OF STORAGE
  3164. RJ =XOPENECS
  3165. NG X5,APND40 IF NO MORE ROOM
  3166. *
  3167. SA1 SAVEA0 RESTORE A0
  3168. SA0 X1
  3169. BX0 X7
  3170. WE 1
  3171. RJ ECSPRTY
  3172. SA1 CSTOADR INCREMENT BUFFER LENGTH
  3173. SX2 B4
  3174. IX0 X1+X2
  3175. RX1 X0
  3176. SX2 1
  3177. IX6 X1+X2
  3178. WX6 X0
  3179. SB1 B7 RESTORE B1
  3180. EQ APNDSTO
  3181. *
  3182. APND40 SA1 CSTOADR MARK BUFFER OVERFLOW
  3183. RX2 X1 X2 = S1
  3184. SX3 1
  3185. LX3 18
  3186. IX6 X3+X2 INCREMENT OVERFLOW COUNT
  3187. LX3 18
  3188. LX3 B7
  3189. BX6 X3+X6 MARK BUFFER(B7) OVERFLOW
  3190. WX6 X1
  3191. SB1 B7 RESTORE B1
  3192. EQ APNDSTO
  3193. *
  3194. SAVEA0 BSS 1
  3195. * /--- BLOCK TAGSAVE 00 000 73/11/10 23.19
  3196. *
  3197. *
  3198. *
  3199. * -TAGSAVE- -TAGREST-
  3200. * SAVE AND RESTORE *TAGCNT* AND *TAG* BUFFER
  3201. *
  3202. *
  3203. ENTRY TAGSAVE
  3204. TAGSAVE EQ *
  3205. SA1 TAGCNT LENGTH OF TAG
  3206. SB1 X1
  3207. BX6 X1 SAVE
  3208. SA6 SAVTLTH
  3209. SA1 ATAGECS
  3210. BX0 X1 ECS TAG SAVE AREA
  3211. SA0 TAG
  3212. + WE B1 WRITE TAG TO ECS
  3213. RJ ECSPRTY
  3214. EQ TAGSAVE
  3215. *
  3216. *
  3217. ENTRY TAGREST
  3218. TAGREST EQ *
  3219. SA1 SAVTLTH RESTORE TAG LENGTH
  3220. BX6 X1
  3221. SA6 TAGCNT
  3222. SB1 X1
  3223. SA1 ATAGECS ECS ADDRESS OF SAVED TAG
  3224. BX0 X1
  3225. SA0 TAG
  3226. + RE B1 READ BACK INTO *TAG* BUFFER
  3227. RJ ECSPRTY
  3228. EQ TAGREST
  3229. *
  3230. SAVTLTH BSS 1
  3231. *
  3232. *
  3233. * /--- BLOCK APACK 00 000 73/00/00 00.00
  3234. TITLE -APACK-
  3235. *
  3236. *
  3237. * -APACK-
  3238. * PACKS UP NUMBER OF ARGUMENTS, UNIT NUMBER AND
  3239. * -GETVAR- CODES FOR ARGUMENTS
  3240. *
  3241. * ENTER WITH UNIT NUMBER IN X6
  3242. * RETURNS WITH X6 = CODE FOR UNIT WITH ARGUMENTS
  3243. *
  3244. *
  3245. ENTRY APACK
  3246. APACK EQ *
  3247. SA1 VARBUF NUMBER OF ARGUMENTS
  3248. ZR X1,APACK
  3249. SB1 X1
  3250. LX1 10
  3251. BX6 X1+X6 COMBINE WITH UNIT NUMBER
  3252. LX6 40 POSITION FIRST 20 BIT CODE
  3253. SA4 INX
  3254. SX7 X4 UNIT EXTRA STORAGE POINTER
  3255. MX0 -XCODEL
  3256. SB2 20 INITIALIZE SHIFT COUNT
  3257. *
  3258. APLP SB1 B1-1 DECREMENT ARGUMENT COUNT
  3259. NG B1,APLP1
  3260. SA1 A1+1 LOAD NEXT -GETVAR- CODE
  3261. BX1 -X0*X1
  3262. LX1 X1,B2 POSITION -GETVAR- CODE
  3263. BX6 X1+X6
  3264. SB2 B2-20 DECREMENT SHIFT COUNT
  3265. PL B2,APLP
  3266. *
  3267. APLP1 SA6 X7+INFO STORE COMPLETED WORD
  3268. SX7 X7+1
  3269. SB2 40 RE-INITIALIZE SHIFT COUNT
  3270. MX6 0
  3271. PL B1,APLP
  3272. SX6 4000B CODE FOR UNIT WITH ARGUMENTS
  3273. BX6 X4+X6
  3274. SA7 INX UPDATE EXTRA STORAGE POINTER
  3275. EQ APACK
  3276. *
  3277. *
  3278. ENTRY AUNUM
  3279. ENTRY UARGS,ENDPNT,UNITFLG
  3280. *
  3281. UARGS BSS 1
  3282. UNITFLG BSS 1 SPECIAL FLAG FOR -UNIT- COMMAND
  3283. ENTRY ENDPNT REFERENCED IN JOINOV
  3284. ENDPNT BSS 1 POINTER TO END OF ARGUMENTS
  3285. *
  3286. AUNUM BSS 1
  3287. ENTRY ARGKEY
  3288. ARGKEY BSS 1 TERMINATOR KEY FOR ARGS
  3289. *
  3290. * /--- BLOCK GETARGS 00 000 80/03/28 00.20
  3291. TITLE -GETARGS-
  3292. *
  3293. * -GETARGS-
  3294. * PROCESS ARGUMENTS OF UNIT
  3295. *
  3296. * ENTER WITH *VARBUF* INITIALIZED TO ZERO
  3297. *
  3298. * ON EXIT --
  3299. * *VARBUF(0)* = NUMBER OF ARGUMENTS
  3300. * *VARBUF(N)* = -GETVAR- CODES
  3301. *
  3302. ENTRY GETARGS
  3303. GETARGS EQ *
  3304. *
  3305. GETLP SA1 WORDPT POINTER TO NEXT CHARACTER
  3306. SA1 X1
  3307. *
  3308. GET0 SX2 X1-1R CHECK FOR SPACE
  3309. NZ X2,GET1
  3310. SA1 A1+1 GET NEXT CHARACTER
  3311. EQ GET0
  3312. *
  3313. GET1 SA2 X1+KEYTYPE GET CHARACTER TYPE
  3314. SX3 X2-EOL
  3315. ZR X3,GET2 JUMP IF END-OF-LINE
  3316. SX3 X2-OPCOMMA
  3317. NZ X3,GET3 GO COMPILE IF NOT COMMA
  3318. SA1 A1+1 ADVANCE CHARACTER POINTER
  3319. *
  3320. GET2 SX7 A1
  3321. SA7 WORDPT UPDATE *WORDPT*
  3322. SX7 X1
  3323. SA7 LASTKEY AND *LASTKEY*
  3324. SA1 UNITFLG
  3325. NZ X1,ERRSTOR ERROR IF -UNIT- OR -ARGS-
  3326. MX1 1
  3327. LX1 20 SET UP SPECIAL 20 BIT CODE
  3328. MX7 1
  3329. BX7 X1+X7 TOP BIT FOR NON-STOREABLE
  3330. SA1 VARBUF
  3331. SX6 X1+1 ADVANCE *VARBUF* POINTER
  3332. SA6 A1
  3333. SA7 X6+VARBUF STORE SPECIAL CODE
  3334. EQ GET4
  3335. *
  3336. GET3 SX7 A1 UPDATE *WORDPT*
  3337. SA7 WORDPT
  3338. SA1 UNITFLG SEE IF -UNIT- COMMAND
  3339. ZR X1,GET3A
  3340. CALL PUTDO2 EVALUATE VARIABLE
  3341. EQ GET4
  3342. *
  3343. GET3A CALL VARDO2 EVALUATE NEXT ARGUMENT
  3344. GET4 SA1 VARBUF GET ARGUMENT COUNT
  3345. SX1 X1-UARGMAX-1
  3346. PL X1,ERRUARG ERROR IF TOO MANY ARGUMENTS
  3347. SA1 WORDPT
  3348. SA2 ENDPNT SEE IF AT END OF ARGUMENTS YET
  3349. IX1 X1-X2
  3350. PL X1,GETARGS IF AT END OF ARGUMENTS
  3351. *
  3352. SA2 LASTKEY
  3353. SX2 X2-1R;
  3354. NZ X2,GETLP IF NICE DELIMITER
  3355. *
  3356. SA1 BDLIM
  3357. BX7 X1
  3358. SA7 CERROR1 STORE MESSAGE
  3359. SB1 99 ORDINAL FOR BAD DELIMITER ERROR
  3360. SA1 CMNDTMP SAVED COMMAND NAME
  3361. ZR X1,=XERR IF NONE SAVED, NORMAL ERROR
  3362. *
  3363. RJ =XRJERR
  3364. MX6 0 NO ARGUMENTS
  3365. SA6 VARBUF
  3366. EQ GETARGS
  3367. *
  3368. BDLIM DATA 10LBAD DELIM
  3369. ENTRY CMNDTMP
  3370. CMNDTMP DATA 0 SAVE CMND NAME FOR UNIT ARGS
  3371. * /--- BLOCK DUMP 00 000 79/12/10 11.40
  3372. TITLE -DUMP- COMMAND
  3373. *
  3374. *
  3375. * -DUMP- COMMAND
  3376. * BOMB CONDENSOR
  3377. *
  3378. ENTRY DUMPIN
  3379. DUMPIN CALL SYSTEST MUST BE SYSTEM LESSON
  3380. MX6 0
  3381. SA6 ITEMP
  3382. SA6 ITEMP+1
  3383. SA1 APLACOM
  3384. SX0 1
  3385. IX0 X1+X0
  3386. SA0 ITEMP
  3387. + WE 2
  3388. RJ ECSPRTY
  3389. BX0 X1
  3390. SA0 =3 3 = ABNORMAL TERMINATION
  3391. + WE 1
  3392. RJ ECSPRTY
  3393. SA1 -1
  3394. *
  3395. *
  3396. * /--- BLOCK END 00 000 81/07/17 12.12
  3397. *
  3398. *
  3399. *
  3400. END
  3401. * /--- BLOCK TABC 00 000 81/07/14 00.08
  3402. IDENT TABC
  3403. TITLE TABC
  3404. TITLE CENTRAL SUBOV TABLE
  3405.  
  3406. CST
  3407. * /--- BLOCK ENTRY 00 000 81/07/10 00.54
  3408. * ENTRIES FOR CONDC
  3409. ENTRY OK=,ANSV=,FINIS=,BACKG=
  3410. ENTRY HOLFIN,WRONGV=
  3411. * /--- BLOCK COVLAY 00 000 81/07/14 00.04
  3412. *
  3413. *
  3414. ENTRY OVRLAYS FOR OFFSET IN COMMAND TABLE
  3415. OVRLAYS BSS 0
  3416. *
  3417. * COVLAY1
  3418. *
  3419. SUBOV ENABOV
  3420. SUBOV PAUSOV
  3421. SUBOV DABSOV
  3422. SUBOV CFINOV
  3423. SUBOV JMPFOV -JUMPOUT- AND -FROM-
  3424. SUBOV CDATAOV VARIOUS DATA COMMANDS
  3425. SUBOV READDOV -READD-
  3426. * SUBOV NOTEOV
  3427. SUBOV NNOTEOV
  3428. SUBOV INTLOKV
  3429. SUBOV ATCHOV -ATTACH- AND -DETACH- COMMANDS
  3430. SUBOV KERMCOV KERMIT PROTOCOL
  3431. *
  3432. * GRAFSC
  3433. *
  3434. SUBOV GRAFOV
  3435. *
  3436. * ANSIN
  3437. *
  3438. SUBOV ANSOV
  3439. *
  3440. * DEFINE
  3441. *
  3442. SUBOV DEFOV
  3443. SUBOV SEGOV
  3444. *
  3445. * COVLAY2
  3446. *
  3447. SUBOV LIBCOV LIBCALL/CALL COMMANDS
  3448. SUBOV WRITCOV -WRITEC-
  3449. SUBOV INITOV INITS FOR EACH CONDENSE
  3450. SUBOV LISTOV LESLIST ORIENTED COMMANDS
  3451. SUBOV CHGOV -CHANGE- COMMAND
  3452. SUBOV DRAWOV -DRAW-
  3453. SUBOV PUTOV -PUT- AND -PUTD-
  3454. SUBOV COMMOV -COMMON- -STORAGE- -ROUTVAR-
  3455. SUBOV SORTOV -SORT-
  3456. SUBOV TRQCOV -TALKREQ-
  3457. SUBOV FONTCOV -FONT-
  3458. *
  3459. * ANSWIN
  3460. *
  3461. SUBOV ANSWOV
  3462. *
  3463. * TOUCHOV
  3464. *
  3465. SUBOV TOUCHOV -TOUCH-
  3466. *
  3467. *
  3468. * COVLAY3
  3469. *
  3470. SUBOV PACKOV -PACK-
  3471. SUBOV SETROV SETRESV
  3472. SUBOV SUBMOV -SUBMITM-
  3473. SUBOV FINDSOV -FINDS-
  3474. SUBOV INSRTOV -INSERTS-/-DELETES-
  3475. SUBOV COVL3
  3476. SUBOV TSLINKC
  3477. SUBOV IPCC IPC / CHARACNV COMMANDS
  3478. SUBOV NSETOV NAMESET COMMAND READINS
  3479. SUBOV COVL3B VARIOUS COMMAND READINS
  3480. SUBOV KEYWDOV -ATTACHF-
  3481. *
  3482. * RECORDC
  3483. SUBOV RECOV RECORDS COMMAND
  3484. *
  3485. * SITEC
  3486. SUBOV SITEOV -SITE- COMMANDS
  3487. SUBOV STATIOV -STATION- COMMANDS
  3488. SUBOV NSITEOV -NSITE/SUBSITE/NSTAT- COMMANDS
  3489. *
  3490. * PPTC
  3491. SUBOV PPTOV -PPT- COMMANDS
  3492. SUBOV MTUTOV CPU MICROTUTOR COMMANDS
  3493. *
  3494. * COVLAY4
  3495. SUBOV COV4 ASSORTED COMMANDS
  3496. SUBOV COV4A MORE ASSORTED COMMANDS
  3497. SUBOV JOINOV
  3498. SUBOV ACCOV ACCESS COMMAND OVERLAYS
  3499. SUBOV COV4B
  3500. *
  3501. * CWRITE
  3502. SUBOV CWRTOV
  3503. *
  3504. * TAGOV
  3505. SUBOV TAGOV
  3506. * /--- BLOCK COMNDS 00 000 81/07/13 20.32
  3507. TITLE CENTRAL CONDENSE COMMAND NAME TABLE
  3508. *
  3509. * THE FOLLOWING TABLE CONTAINS AN ORDERED LIST OF
  3510. * ALL THE LEGAL TUTOR COMMANDS.
  3511. *
  3512. *
  3513. * EXAMPLE OF CONSTRUCTION OF JUMP TABLE --
  3514. *JUMP MACRO 8LSTORE,STORE,2,ONEPUT,01110,STOREJ
  3515. * NAME,DISPLAY NAME,TYPE,CONDENSOR,CONTINGENCIES,EXECUTOR
  3516. *
  3517. *
  3518. * FOR COMMANDS WITH ONLY ONE BRANCH, THE BRANCH
  3519. * IS EXPLICITLY GIVEN IN THE BOTTOM 18 BITS OF THE
  3520. * TABLE ENTRY.
  3521. *
  3522. JUMP MACRO NAME,NAM,TYPE,JUMP1,CONTG,JUMP2
  3523. VFD 60/NAME
  3524. JMP1 RMT
  3525. + VFD 12/0,13/0,5/TYPE,12/0,18/=X_JUMP1
  3526. JMP1 RMT
  3527. NN SET NN+1 COUNTER FOR COMMAND NUMBER
  3528. MM SET MM+1 COUNTER FOR REAL COMMANDS
  3529. ENDM
  3530. *
  3531. * JUMP1 AND ARG1 PERTAIN TO CONDENSE ROUTINE
  3532. * AND JUMP2 AND ARG2 TO THE EXECUTION ROUTINE.
  3533. * 'IN EACH CASE, IF JUMP IS ',CM', THEN ARG GIVES
  3534. * THE CENTRAL MEMORY ADDRESS OF THE PROCESSING
  3535. * ROUTINE; OTHERWISE, JUMP IS THE OVERLAY NUMBER
  3536. * AND ARG CONTAINS ANY ARGUMENT TO BE PASSED IT.
  3537. *
  3538. JUMPOV MACRO NAME,NAM,TYPE,JUMP1,ARG1,CONTG,JUMP2,ARG2
  3539. VFD 60/NAME
  3540. NAM MICRO 3,8, NAME_=
  3541. "NAM" EQU NN
  3542. JMP1 RMT
  3543. IFC EQ,*JUMP1*CM*
  3544. VFD 12/0,13/0,5/TYPE,12/0,18/=X_ARG1
  3545. ELSE
  3546. + VFD 12/0,13/0,5/TYPE,12/0
  3547. VFD 1/1,8/JUMP1-OVRLAYS,1/0,8/ARG1
  3548. ENDIF
  3549. JMP1 RMT
  3550. NN SET NN+1 COUNTER FOR COMMAND NUMBER
  3551. MM SET MM+1 COUNTER FOR REAL COMMANDS
  3552. ENDM
  3553. *
  3554. * JUMPD PERMITS REFERENCING THIS COMMAND NUMBER
  3555. *
  3556. JUMPD MACRO NAME,NAM,TYPE,JUMP1,CONTG,JUMP2
  3557. VFD 60/NAME
  3558. NAM MICRO 3,8, NAME_=
  3559. "NAM" EQU NN
  3560. JMP1 RMT
  3561. + VFD 12/0,13/0,5/TYPE,12/0,18/=X_JUMP1
  3562. JMP1 RMT
  3563. NN SET NN+1 COUNTER FOR COMMAND NUMBER
  3564. MM SET MM+1 COUNTER FOR REAL COMMANDS
  3565. ENDM
  3566. * /--- BLOCK COMNDS 00 000 81/07/14 10.58
  3567. *
  3568. * JUMP* HOLDS A COMMAND NUMBER SLOT OPEN BUT THE COMMAND
  3569. * NAME CANNOT ACTUALLY BE MATCHED (E.G., GOTOC)
  3570. *
  3571. JUMP* MACRO NAME,NAM,TYPE,JUMP1,CONTG,JUMP2
  3572. NM MICRO 3,5,/NAME /
  3573. VFD 6/0,54/5L"NM"
  3574. JMP1 RMT
  3575. + VFD 60/0
  3576. JMP1 RMT
  3577. NN SET NN+1 COUNTER FOR COMMAND NUMBER
  3578. ENDM
  3579. *
  3580. * JUMPD* IS COMBINATION OF JUMPD AND JUMP*
  3581. *
  3582. JUMPD* MACRO NAME,NAM,TYPE,JUMP1,CONTG,JUMP2
  3583. NM MICRO 3,5,/NAME /
  3584. VFD 6/0,54/5L"NM"
  3585. NAM MICRO 3,8, NAME_=
  3586. "NAM" EQU NN
  3587. JMP1 RMT
  3588. + VFD 60/0
  3589. JMP1 RMT
  3590. NN SET NN+1 COUNTER FOR COMMAND NUMBER
  3591. ENDM
  3592. *
  3593. * END THE JUMP TABLE
  3594. *
  3595. JUMPF MACRO
  3596. LIST -L
  3597. DUP 512-NN
  3598. JUMP* UNUSED,UNUSED,1,ERRORC,11111,ERRORX
  3599. ENDD
  3600. LIST *
  3601. ENDM
  3602. *
  3603. * USED FOR NON-EXECUTABLE COMMANDS WHICH ARE IN CM
  3604. *
  3605. JUMPI MACRO NAME,TYPE,JUMP1
  3606. VFD 60/NAME
  3607. JMP1 RMT
  3608. + VFD 12/0,13/0,5/TYPE,12/0,18/=X_JUMP1
  3609. JMP1 RMT
  3610. NN SET NN+1 COUNTER FOR COMMAND NUMBER
  3611. MM SET MM+1 COUNTER FOR REAL COMMANDS
  3612. ENDM
  3613. *
  3614. * USED FOR NON-EXECUTABLE COMMANDS IN OVERLAYS
  3615. *
  3616. JUMPIO MACRO NAME,TYPE,JUMP1,ARG1
  3617. VFD 60/NAME
  3618. JMP1 RMT
  3619. + VFD 12/0,13/0,5/TYPE,12/0
  3620. VFD 1/1,8/JUMP1-OVRLAYS,1/0,8/ARG1
  3621. JMP1 RMT
  3622. NN SET NN+1
  3623. MM SET MM+1
  3624. ENDM
  3625. *
  3626. * /--- BLOCK COMNDS 00 000 81/07/14 00.07
  3627. ENTRY COMNAMS
  3628. *
  3629. COMNAMS BSS 0
  3630. *
  3631. NOREF NN,MM
  3632. NN SET 0 COMMAND NUMBER COUNTER
  3633. MM SET 0 REAL COMMAND COUNTER
  3634. *
  3635. LIST X,G
  3636. *
  3637. *CALL COMNDS
  3638. *
  3639. LIST *
  3640. *
  3641. *
  3642. ***** END OF TABLE OF REAL COMMANDS *********
  3643. *
  3644. *
  3645. ENTRY COMNAML,COMINFL
  3646. COMNAML EQU *-COMNAMS LENGTH OF NAME TABLE
  3647. COMINFL EQU 513 LENGTH OF INFO TABLE (2&N+1)
  3648. *
  3649. 2 ERRNG CMNDMAX-COMNAML FOR PECULIAR ERROR TEST..
  3650. * DUE TO ECS TABLE FOR TRUE COMMAND TABLE BEING IN
  3651. * EXECUTER CONTROL POINT...WHICH SEE...THIS WILL
  3652. * AUTOMATICALLY GIVE AN ERROR WHEN THE BUFFER IS
  3653. * TOO SMALL FOR CONDENSOR CONTROL POINT.
  3654. 2 ERRNG COMINFL-1-MM LEAVE ONE FREE WORD AT END OF COMINFO
  3655. 2 ERRNG COMNAML-COMINFL ASSUME COMNAML IS NOT SMALLER
  3656. *
  3657. *
  3658. TITLE READ-IN JUMP TABLE
  3659. * FORMAT OF INFO TABLE WORDS (COMINFO)
  3660. * 12 BITS -- LINK TO NEXT WORD WITH THIS HASH NUMBER
  3661. * 1 BIT -- SET IF THIS IS FIRST WORD OF HASH CHAIN
  3662. * 1 BIT -- SET IF THIS IS AN ELSE-TYPE COMMAND
  3663. * 1 BIT -- SET IF THIS IS A CALC-TYPE COMMAND
  3664. * 1 BIT -- SET IF INDENTING IS ALLOWED AFTER THIS COMMAND
  3665. * 1 BIT -- SET IF THIS COMMAND MAY NOT BE INDENTED
  3666. * 1 BIT -- FLAG FOR CONTINUED COMMAND
  3667. * 12 BITS -- INDEX TO NAME TABLE FOR THIS COMMAND
  3668. * 18 BITS -- ADDRESS OF CONDENSE ROUTINE
  3669. * -- FOR OVERLAYED COMMANDS, THIS FIELD
  3670. * CONTAINS THE OVERLAY NUMBER AND AN
  3671. * ARGUMENT FOR THE OVERLAY.
  3672. * 12 BITS -- COMMAND NUMBER FOR THIS COMMAND
  3673. * THE COMMAND NUMBER AND INDEX TO NAME TABLE FIELDS
  3674. * ARE INITIALIZED IN FILE DEFCCOM.
  3675. SPACE 1
  3676. ENTRY COMINFO
  3677. COMINFO BSS 0
  3678. LOC 0 DEFINE COMMAND NAMES
  3679. LIST M,G
  3680. JMP1 HERE
  3681. LIST *
  3682. LOC *O RETURN TO ORIGIN COUNTER
  3683. * /--- BLOCK COMNDS 00 000 81/07/14 00.07
  3684. *
  3685. *
  3686. DATOT= EQU DATAOUT= NO 8 CHAR EXTERNAL SYMBOLS
  3687. IFERR= EQU IFERROR=
  3688. ZAT= EQU AT=+1 FOR EMBEDDED AT (LOADER PROB)
  3689. SHOWS= EQU SHOW=
  3690. BACKG= EQU BACKGND=
  3691. ARHDA= EQU ARHEADA=
  3692. *
  3693. ENTRY BRKCMD
  3694. ENTRY CALCNAM
  3695. ENTRY HOLDEFN
  3696. ENTRY USENAM
  3697. ENTRY UNITNAM,UNITPNM,ENTRYNM
  3698. ENTRY STPSNAM
  3699. ENTRY STRTNAM
  3700. ENTRY STOPNAM
  3701. ENTRY MTUTNAM
  3702. ENTRY DATAON=,IEUEND=
  3703. ENTRY PAUSE=
  3704. ENTRY KERMIT=
  3705. ENTRY WRITE0=
  3706. ENTRY WRITE1=
  3707. ENTRY WRITE2=
  3708. ENTRY WRITE3=
  3709. ENTRY WRITE4=
  3710. ENTRY WRITEC=
  3711. ENTRY SHOW=
  3712. ENTRY SHOWS=
  3713. ENTRY SHOWT=
  3714. ENTRY SHOWA=
  3715. ENTRY SHOWO=
  3716. ENTRY SHOWH=
  3717. ENTRY SHOWE=
  3718. ENTRY SHOWZ=
  3719. ENTRY SHOWK=
  3720. ENTRY HIDDEN=
  3721. ENTRY ZAT=
  3722. ENTRY ATNM=
  3723. ENTRY SIZE=
  3724. ENTRY ROTATE=
  3725. ENTRY STORE=
  3726. ENTRY ARHDA= $$ ARHEADA= IS TOO LONG
  3727. ENTRY UNITOP=
  3728. ENTRY ARGS=,CALC=
  3729. ENTRY DO=,DOJ=,DOC=,JOIN=,JOINC=,JDO=
  3730. *
  3731. * FOLLOWING FOR PUT OVERLAY
  3732. ENTRY PUT=
  3733. ENTRY MISCON= NEEDED TO SEPARATE CONCEPT/MISCON IN ANSIN
  3734. * FOR -DATAOUT- OVERLAY
  3735. ENTRY DATOT=
  3736. * FOR -IFERROR- OVERLAY
  3737. ENTRY IFERR=
  3738. ENTRY DOR=
  3739. ENTRY JOINR=
  3740. ENTRY STOP1=
  3741. ENTRY COLOR=
  3742. END