User Tools

Site Tools


plato:source:plaopl:cwrite

CWRITE

Table Of Contents

  • [00007] OVERLAYS FOR COMMAND READINS
  • [00008] CWRITE

Source Code

CWRITE.txt
  1. CWRITE
  2. * /--- FILE TYPE = E
  3. * /--- BLOCK CWRITE 00 000 81/07/13 01.08
  4. IDENT CWRITE
  5. LCC OVERLAY(1,1)
  6. *
  7. TITLE OVERLAYS FOR COMMAND READINS
  8. TITLE CWRITE
  9. *
  10. *
  11. CST
  12. *
  13. *
  14. CWRITE$ OVFILE
  15. *
  16. CWRTOV OVRLAY
  17. QUAL
  18. SB1 FSWRITE LOG -WRITE- TEXT
  19. RJ =XPUBTEXT
  20. SA1 OVARG1 GET OVERLAY ARGUMENT
  21. SB1 X1
  22. JP B1+*+1
  23. *
  24. + EQ NWRITE
  25. + EQ NEXACTC
  26. + EQ NWRTCIN
  27. *+ EQ DISIN
  28. *
  29. *
  30. * /--- BLOCK TWRITIN 00 000 85/01/21 10.48
  31. *
  32. *
  33. * NEW WRITE ROUTINES FOR CONDENSE
  34. *
  35. * PROPERLY RECORDS X AND Y INCREMENTS
  36. * FOR BACKSPACE, SUB, SUP, RAISE, LOWER
  37. * CR, ETC.
  38. *
  39. *
  40. * SHARES THE CHARACTER DEFINITION TABLE WITH
  41. * FORMAT (THIS IS THE ONLY TABLE WHICH DEFINES
  42. * ALL OF THE OPERATIONS)
  43.  
  44.  
  45.  
  46. EXT ERRORC
  47. EXT PUTCODE,GETLINE
  48. EXT WRITE0=
  49. EXT WRITE1=
  50. EXT WRITE2=
  51. EXT WRITE3=
  52. EXT WRITE4=
  53. EXT WRITEC=
  54. EXT ZAT= GET AROUND LOADER PROBLEM
  55. AT= EQU ZAT=-1 GET AROUND LOADER PROBLEM
  56. EXT LNGUNIT
  57. EXT ERRTAGS,ERRNAME,ERRSTOR
  58. EXT ERRXYTG,ERR2MNY,ERR2FEW
  59. EXT ERRTERM,ERRUARG,ERRVTYP
  60. EXT ERROUTR,ERRCNTD,ERRXORQ
  61. EXT ERRBAL
  62. EXT CONV2
  63.  
  64.  
  65.  
  66.  
  67. UNUSED= EQU ERRORC FOR UNDEFINED OPERATIONS
  68. XTEXT TITLE GET EXTERNAL TEXTS
  69. *
  70. *
  71. BSS 0
  72. *
  73. XLLL SET *L
  74. *
  75. *CALL CHRDEF
  76. *CALL CHARS2
  77. ENTER SPACE 3
  78. *** GENERATE LOCAL SUBROUTINE ENTRY
  79. *
  80. PURGMAC ENTER
  81.  
  82. MACRO ENTER,NAME
  83. ENT. IFC EQ,*NAME**
  84. 2 ERR LABEL FIELD BLANK, MACRO CALL IGNORED
  85. ENT. ELSE
  86. NAME SPACE 0
  87. DATA 0L_NAME
  88. NAME DATA 0
  89. EXITNAM= SET NAME
  90. ENT. ENDIF
  91. ENDM
  92. EXIT SPACE 4
  93. *** GENERATE EXIT CODE
  94.  
  95. PURGMAC EXIT
  96.  
  97. MACRO EXIT,A,BB
  98. EXT1 IFC EQ,*A**
  99. EXT1 IFC EQ,*BB**
  100. EQ EXITNAM=
  101. EXT1 ELSE
  102. EXT2 IFC NE,*A**
  103. EQ A
  104. EXT2 ELSE
  105. EQ BB
  106. EXT2 ENDIF
  107. EXT1 ENDIF
  108. ENDM
  109. *
  110. LOC XLLL+400B
  111. *
  112. *
  113. * /--- BLOCK LOCAL MAC 00 000 85/01/21 10.46
  114. PLNTCODE TITLE LOCAL MACROS
  115. *** PLNTCODE - PLANT COMMANDS IN WRITCBUF
  116. *
  117. *
  118. PLNTCODE MACRO
  119. SA1 WRKPNT
  120. SA2 INWC
  121. IX7 X2-X1
  122. PL X7,LNGUNIT
  123. SX7 X1-1
  124. SA7 A1
  125. SA6 X1+WRITCBUF
  126. ENDM
  127. CHRACTN SPACE 5
  128. *** CHRACTN - ACTION FOR PLOTABLE CHARACTER
  129. *
  130. *
  131. CHRACTN MACRO
  132. PACKCHR X5
  133. ENDM
  134.  
  135.  
  136. PACKCHR SPACE 5
  137. **** PACKCHR - PACKS AND STORES CHARACTERS
  138. *
  139. *
  140. PACKCHR MACRO XN
  141. LOCAL NN
  142. SB4 B4+B1 COUNT
  143. LX7 6
  144. BX7 XN+X7
  145. SB7 B7-B1
  146. * SENSE ASSEMBLY FULL
  147. NZ B7,NN
  148. SA7 A7+B1
  149. MX7 0
  150. SB7 10
  151. NN BSS 0
  152. ENDM
  153. BKSPCHR SPACE 5
  154. *** BKSPCHR - REMOVE ONE CHARACTER FROM PACKED STRING
  155. *
  156. *
  157. BKSPCHR MACRO
  158. LOCAL NN
  159. * TEST ASSEMBLY EMPTY
  160. SX1 B7-10
  161. NZ X1,NN
  162. * BACK UP ASSEMBLY
  163. SA1 A7-B1
  164. BX7 X1
  165. SA7 A1
  166. SA1 A1+B1
  167. BX7 X1
  168. SB7 B0
  169. * BACK SPACE ASSEMBLY
  170. NN MX1 -6
  171. BX7 X1*X7
  172. LX7 -6
  173. SB4 B4-B1
  174. * /--- BLOCK LOCAL MAC 00 000 78/03/20 11.50
  175. SB7 B7+B1
  176. ENDM
  177. NEXTCHR SPACE 5
  178. *** NEXTCHR - FETCHS NEXT CHAR AND SETS UP X2 WITH THE ACTION
  179. *
  180. *
  181. NEXTCHR MACRO EXIT
  182. SA5 A5+B1
  183. ZR X5,EXIT
  184. * CHECK CHARACTER
  185. SB2 X5+B5
  186. ZR B2,EXIT
  187. BX2 X0+X5
  188. SA2 X2+OUTABLE
  189. ENDM
  190. TESTMEM SPACE 5
  191. *** MEMTEST - TEST FOR SPECIAL MEMORY
  192. *
  193. *
  194. TESTMEM MACRO JUMP
  195. SX1 B2-6
  196. PL X1,JUMP
  197. ENDM
  198. TSTX SPACE 5
  199. *** TSTX DEFINE DO NOTHING MACROS
  200. * UNCOVER
  201. *
  202. *
  203. TSTX MACRO
  204. BSS 0
  205. ENDM
  206.  
  207.  
  208. UNCOVER OPSYN TSTX
  209. RECOVER SPACE 5
  210. *** RECOVER - FOR PACKER
  211. *
  212. *
  213. RECOVER MACRO
  214. EQ CHAR
  215. ENDM
  216. AUTOBKSP SPACE 5
  217. *** AUTOBKSP - AUTOMATIC BACKSPACE
  218. *
  219. *
  220. AUTOBKSP MACRO
  221. PL X0,CHAR NO ACCESS
  222. DEACC
  223. EQ CHAR
  224. ENDM
  225. RAISER SPACE 4
  226. *** RAISER - DO RAISER OPERATIONS
  227. *
  228. *
  229. RAISER MACRO
  230. SX0 X0 CLEAR ACCESS FLAG
  231. EQ CHAR
  232. ENDM
  233. SPECIAL SPACE 5
  234. *** SPECIAL - DO SPECIAL CHARACTER OPERATIONS
  235. *
  236. *
  237. SPECIAL MACRO
  238. LOCAL LL,MM
  239. SX1 X2-RMGACTN CHECK FOR RIGHT MARGIN
  240. NZ X1,LL
  241. SX5 1R1 CHANGE TO SIMPLE BACKWARD
  242. EQ MM AND PACK IT AWAY
  243. LL SX1 X2-ORIACTN CHECK FOR ENTER ORIENTAL
  244. NZ X1,MM
  245. SA2 A2
  246. LX2 18
  247. UX2,B0 X2 HORIZ/VERT CHAR
  248. LX2 18
  249. SX1 X2-1R- MINUS SIGN = VERTICAL
  250. NZ X1,MM
  251. SX5 1R% SWITCH TO VERTICAL
  252. MM PACKCHR X5
  253. ENDM
  254. CRINC SPACE 5
  255. **** CRINC - PROCESS REGISTERS FOR CR*S
  256. *
  257. *
  258. CRINC MACRO
  259. MX3 0
  260. MX0 0
  261. YINC -YCHRINC
  262. ENDM
  263. WCR SPACE 5
  264. *** WCR - SPECIAL CR ACTION MACRO
  265. *
  266. *
  267. WCR MACRO
  268. CRINC
  269. SB3 -B1
  270. ENDM
  271. CR SPACE 5
  272. *** CR - PROCESS CR TO MARGIN
  273. *
  274. *
  275. CR MACRO
  276. WCR
  277. EQ CHAR
  278. ENDM
  279. ALCR SPACE 5
  280. *** ALCR - PROCESS CR TO BORDER
  281. *
  282. *
  283. ALCR MACRO
  284. CRINC
  285. SB3 B1
  286. EQ CHAR
  287. ENDM
  288. BKSP SPACE 5
  289. *** BKSP - PROCESS BACKSPACE
  290. *
  291. *
  292.  
  293.  
  294. PURGMAC BKSP
  295.  
  296.  
  297. BKSP MACRO
  298. XINC -XCHRINC
  299. EQ CHAR
  300. * /--- BLOCK LOCAL MAC 00 000 78/03/20 11.50
  301. ENDM
  302. TSTCNT SPACE 5
  303. *** MACRO TO TEST FOR A CONTINUATION
  304. *
  305. *
  306. * NO CONTINUATION EXIT TO EXIT
  307. *
  308. *
  309. TSTCNT MACRO EXIT
  310. SA1 NEXTCOM GET NEXT COMMAND
  311. * /--- BLOCK LOCAL MAC 00 000 78/03/14 23.54
  312. SA2 K8S
  313. BX1 X1-X2 TEST CONTINUATION
  314. NZ X1,EXIT
  315. ENDM
  316. PLNTELMT SPACE 5
  317. *** MACRO TO PLANT ELEMENT IN TABLE
  318. *
  319. *
  320.  
  321. PLNTELMT MACRO
  322. * COMBINE COMMAND TYPE AND PARAMETERS
  323. BX6 X6+X7
  324. * TEST FOR UNIT TOO LONG
  325. SA1 INWC
  326. SA2 WRKPNT
  327. IX7 X1-X2
  328. PL X7,LNGUNIT
  329. * INCREMENT POINTER AND PLANT ITEM
  330. SX7 X1+B1
  331. SA7 A1
  332. SA6 X1+WRITCBUF
  333. ENDM
  334. EMBED0 SPACE 5
  335. *** DO EMBEDDING OPERATION
  336. *
  337. *
  338. EMBED0 MACRO
  339. SX0 X0
  340. EQ PACKER
  341. ENDM
  342. ACOMMA SPACE 4
  343. *** ACOMMA - DO UNIVERSAL DELIMINATOR OPS
  344. *
  345. PURGMAC ACOMMA
  346. *
  347. ACOMMA MACRO
  348. SA1 CSET=
  349. BX0 X1
  350. SX1 B5-77B CHECK ACTIVE
  351. ZR X1,PACKER IF ACTIVE
  352. XINC XCHRINC
  353. EQ CHAR3 JUST CONTINUE
  354. ENDM
  355. EMBED1 SPACE 5
  356. *** DO EMBEDDING OPERATION
  357. *
  358. *
  359. EMBED1 MACRO
  360. XINC XCHRINC
  361. EQ CHAR3
  362. ENDM
  363. PLNTCR SPACE 5
  364. *** PLNTCR - DO END OF LINE CARRIAGE RETURN ACTION
  365. *
  366. *
  367. PLNTCR MACRO
  368. WCR
  369. SX1 KCR
  370. PACKCHR X1
  371. RJ WGETLINE
  372. SA5 TAG-1
  373. ENDM
  374. PLNTWRD SPACE 5
  375. *** PLNTWRD - PLANT WORD IN FORWARD EXPANDING
  376. * TABLE
  377. *
  378. * X6 - CONTAINS THE ITEM
  379. *
  380. * CHECKS FOR TABLE OVERLFOW
  381. *
  382. *
  383.  
  384.  
  385. PLNTWRD MACRO T
  386. LOCAL NN
  387. * GET TABLE DESCRIPTOR
  388. SA1 L.T
  389. UX2,B2 L.T
  390. SA6 X2+B2
  391. SB2 B2+1
  392. PX7 X2,B2
  393. SA7 A2
  394. * CHECK FOR OVERFLOW ON NEXT ITEM
  395. NG B2,NN
  396. RJ LGETSPC
  397. NN BSS 0
  398. ENDM
  399. PLNTCOD SPACE 5
  400. *** PLNTCOD - PLANT CODE IN BACKWARD EXPANDING
  401. * TABLE
  402. *
  403. * X6 - CONTAINS ITEM
  404. *
  405. *
  406.  
  407.  
  408. PLNTCOD MACRO T
  409. LOCAL NN
  410. * GET TABLE DESCRIPTOR
  411. SA2 O.T
  412. UX2,B2 X2
  413. * UPDATE TABLE PARAMETERS
  414. SB2 B2-1
  415. SA6 X2,B2
  416. PX7 X2,B2
  417. SA7 A2
  418. * CHECK FOR TABLE UNDERFLOW ON NEXT ITEM
  419. * /--- BLOCK LOCAL MAC 00 000 76/07/24 11.34
  420. NZ B2,NN
  421. RJ OGETSPC
  422. NN BSS 0
  423. ENDM
  424. FORWRD SPACE 4
  425. *** FORWRD - PROCESS FORWARD STRING
  426. *
  427. *
  428.  
  429. PURGMAC FORWRD
  430.  
  431. FORWRD MACRO
  432. SB6 B0 MARK FORWARD
  433. EQ /FORWRD/CHAR
  434. ENDM
  435. BACKWRD SPACE 4
  436. *** BACKWRD - PROCESS BACKWARD STRING
  437. *
  438. *
  439.  
  440. PURGMAC BACKWRD
  441.  
  442. BACKWRD MACRO
  443. SB6 1 MARK BACKWARD
  444. EQ /BCKWRD/CHAR
  445. ENDM
  446. RMARG SPACE 4
  447. *** PROCESS SET TO RIGHT MARGIN
  448. *
  449. *
  450.  
  451.  
  452. PURGMAC RMARG
  453.  
  454. RMARG MACRO
  455. * SX3 512-XCHRINC
  456. ENDM
  457.  
  458. * /--- BLOCK WRITE 00 000 77/04/24 23.20
  459. NWRITE TITLE NEW WRITEC COMMAND
  460. *** NEW WRITE COMMAND WHICH ALLOWS EMBEDDING
  461. *
  462. *
  463. * SPECIAL EMBEDDING CHARACTER IS ACCESS 0
  464. *
  465. LIST M,G
  466. *
  467. NWRITE BSS 0
  468. SA5 TAG-1 SET UP FOR PACKER
  469. SB5 7777B SET TO IMPOSSIBLE CHARACTER
  470. SB1 1 SET UNIVERSAL CONSTANT
  471. RJ ECSINTL DO PRESETS
  472. WRT1 SB6 B0 CLEAR LEFT WRITING
  473. RJ PACKER
  474. NZ X5,WRT3 PROCESS ^0 ^1
  475. TSTCNT WRT2 SENSE END OF STATEMENT
  476. PLNTCR
  477. EQ WRT1 AND CONTINUE WITH COMMAND
  478.  
  479. WRT2 RJ ECSFINAL FINISH UP WRITE COMMAND
  480. SA7 COMNUM SET UP COMMAND TYPE
  481. EQ PUTCODE
  482.  
  483. WRT3 SX1 X5-1R, SENSE SPECIAL WRITEC TERMINATOR
  484. ZR X1,WRT1 JUST CONTINUE
  485. SA1 A5+B1 TRY FOR MODE CHANGE
  486. SX1 X1-1RM
  487. ZR X1,WRT4 YES EMBED MODE IN STRING
  488. RJ EMBEDER FINISH UP IN EMBED
  489. SA7 COMNUM
  490. EQ PUTCODE
  491.  
  492. WRT4 RJ CPMODE
  493. EQ WRT1
  494. * /--- BLOCK EXACTC 00 000 77/04/24 21.48
  495. EXACTC TITLE NEW EXACTC COMMAND FOR LEFT WRITTING
  496. *** NEW EXACTC COMMAND. PROPERLY HANDLES LEFT
  497. * WRITTING AND INCLUDES UNIVERSAL SEPARATOR
  498. *
  499. NEXACTC BSS 0
  500. CALL COMPILE GET NGETVAR CODE
  501. SB1 1 SET UNIVERSAL CONSTANT
  502. BX6 X1 SAVE NGETVAR CODE
  503. LX6 -XCODEL POSITION FOR COMMAND
  504. SA6 =XBRVAR SET UP FOR EXIT PROCESS
  505. MX7 0 CLEAR STORAGE POINTER
  506. SA7 WRKPNT RELATIVE ELEMENT IDENT ADR
  507. SA7 WORK CLEAR FIRST LOCATION
  508. SA7 CONV3 CLEAR NUMBER OF ITEMS
  509. SA1 INX PRESENT INFO POINTER
  510. SX6 INFO SET UP A7 FOR PACKER
  511. IX6 X1+X6 FIRST TEXT LOCATION
  512. SA6 ORGA7 PRESET FOR LENGTH CHECKS
  513. SA1 X6-1 BACK UP ONE
  514. BX7 X1
  515. SA7 A1 AND SET UP A7
  516. SA1 LASTKEY GET EXPRESSION TERMINATIOR
  517. BX1 -X1 SET UP TERMINATOR
  518. SB5 X1 IN B5
  519. SA2 WORDPT GET FIRST TAG CHARACTER
  520. SA2 X2
  521. SA5 A2-B1 SET UP A5 FOR PACKER
  522. SB6 B0 CLEAR LEFT WRITING
  523. ZR X1,XCLN ELEMENTS START ON NEXT LINE
  524. SX1 X1+1R, SENSE SPECIAL EMBED
  525. NZ X1,NEXC1
  526. SA1 A5-B1 TRY FOR ACCESS
  527. SX1 X1-ACCESS
  528. NZ X1,NEXC1
  529. SB5 77B
  530. NEXC1 ZR X2,XCLN START WITH NEXT LINE
  531. EQ XCLN1
  532. XCLN SPACE 4
  533. *** PROCESS EXACTC ITEMS
  534. *
  535. * ELEMENT TERMINATES ONLY AT SPECIAL CHARACTER
  536. *
  537. *
  538. XCLN TSTCNT ERRCNTD MUST BE CONTINUATION
  539. CALL WGETLINE
  540. SA5 TAG-1 SET UP FOR PACKER
  541. XCLN1 RJ EXCINTL INITIALIZE BUFFERS
  542. XCLN2 RJ PACKER PACK UP ELEMENT
  543. SX1 X5+B5 CHECK FOR TERMINATOR
  544. ZR X1,XCLN3 IF END OF ELEMENT
  545. ZR X5,XCLN3 IF END OF LINE
  546. SX1 X5-1R, TRY FOR SPECIAL SEPARATOR
  547. NZ X1,XCLN2 CONTINUE PACKING
  548. SX1 B5-77B CHECK IF ACTIVE
  549. NZ X1,XCLN2 IF NOT ACTIVE
  550. RJ BKSPCHR REMOVE SEPARATOR
  551. RJ BKSPCHR
  552.  
  553. XCLN3 RJ EXCFINL FINALIZE ENTRY
  554. SA5 A5 CHECK FOR END OF LINE
  555. ZR X5,XCLN4 IF END OF LINE
  556. SA1 A5+B1 ELEMENT MAY END WITH SEPARATOR
  557. NZ X1,XCLN1 IF MORE ELEMENTS TO DO
  558.  
  559. XCLN4 TSTCNT EXFINAL CHECK FOR CONTINUATION
  560. CALL WGETLINE GET NEXT LINE
  561. SA5 TAG-1 INITIALIZE FOR PACKER
  562. EQ XCLN1
  563. * /--- BLOCK EXACTC 00 000 76/08/13 04.32
  564. EXCFINL SPACE 4
  565. *** PROCESS EXIT FROM COMMAND
  566. *
  567. *
  568.  
  569.  
  570. EXFINAL SA1 CONV3 GET NUMBER OF ELEMENTS
  571. ZR X1,ERR2FEW --- EXIT IF NO ITEMS
  572. SX1 X1-1 0 TO N-1
  573. AX1 1 NUMBER OF WORDS
  574. SB2 X1 COUNT OF WORDS
  575. SX2 INFO
  576. SX2 INFO-1 CALCULATE TABLE BIAS
  577. SX6 A7 MARK TABLE ORIGIN
  578. IX6 X6-X2 RELATIVE LOCATION
  579. SA6 CONV2
  580. SA1 WORK-1 PRESET TO BEG OF ITEMS -1
  581. EXCFN1 SA1 A1+B1 FETCH ITEM
  582. BX7 X1
  583. SA7 A7+B1 PLANT IT
  584. SB2 B2-B1 DECREMENT COUNT
  585. PL B2,EXCFN1 LOOP
  586.  
  587. EXCFN2 SX6 INFO GET RELATIVE OF LAST WORD USED
  588. SX2 A7
  589. IX6 X2-X6
  590. SA6 INX UPDATE INFO POINTER
  591. SA4 COMNUM GET COMMAND NUMBER
  592. BX6 X4 FOR STANDARD PROCESS
  593. EQ =XCONUL4 --- EXIT VIA CONDITNL BRANCH
  594. * /--- BLOCK NEW WRITEC 00 000 77/04/24 21.48
  595. NWRTCIN TITLE PROCESS WRITEC COMMAND
  596. *** PROCESS WRITEC COMMAND
  597. *
  598. * SET UP TABLE AND DISTINGUISH COMMAND FORMAT
  599. *
  600. *
  601. NWRTCIN BSS 0
  602. RJ =XCOMPILE GET NGETVAR CODE
  603. SB1 1 SET UNIVERSAL CONSTANT
  604. BX6 X1 SAVE NGETVAR CODE
  605. MX7 0 CLEAR STORAGE POINTER
  606. SA6 WCOMND
  607. SA7 INWC
  608. SX6 WRCBLTH-1 SET UP COMMAND POINTER
  609. SA6 WRKPNT
  610. SA1 LASTKEY GET EXPRESSION TERMINATIOR
  611. BX1 -X1 SET UP TERMINATOR
  612. SB5 X1 IN B5
  613. SA2 WORDPT GET FIRST TAG CHARACTER
  614. SA2 X2
  615. SA5 A2-B1 SET UP A5 FOR PACKER
  616. SB6 B0 CLEAR LEFT WRITING
  617. ZR X1,WCLN ELEMENTS START ON NEXT LINE
  618. SX1 X1+1R, SENSE SPECIAL EMBED
  619. NZ X1,NWRT1
  620. SA1 A5-B1 TRY FOR ACCESS
  621. SX1 X1-ACCESS
  622. NZ X1,NWRT1
  623. SB5 77B
  624. NWRT1 ZR X2,WCLN START WITH NEXT LINE
  625. EQ WCLN1
  626. WCLN SPACE 5
  627. *** PROCESS SPECIAL WRITEC
  628. *
  629. * ELEMENT TERMINATES ONLY AT SPECIAL CHARACTER
  630. * /--- BLOCK NEW WRIT6C 00 000 76/07/25 09.16
  631. * END OF LINE GENERATES CR
  632. *
  633. *
  634. WCLN TSTCNT ERRCNTD MUST BE CONTINUATION
  635. RJ WGETLINE
  636. SA5 TAG-1 SET UP FOR PACKER
  637. WCLN1 RJ ECSINTL INITIALIZE REGS
  638. WCLN2 RJ PACKER
  639. SX1 X5+B5 CHECK FOR TERMINATOR
  640. ZR X1,WCLN3
  641. NZ X5,WCLN6 PROCESS ^0
  642. TSTCNT WCLN3 NO CONTINUATION IS ALSO END
  643. PLNTCR
  644. EQ WCLN2 CONTINUE WITH ELEMENT
  645.  
  646. WCLN3 ZR B4,WCLN5 SENSE NO CHAR
  647. RJ ECSFINAL FINISH UP ELEMENT
  648. WCLN3A PLNTELMT PLANT IT
  649. SA5 A5 CHECK FOR END OF LINE
  650. ZR X5,WCLN4 JUMP ON EOL
  651. SA1 A5+B1 LAST ITEM MIGHT END WITH COMMA OR SEMICOLON
  652. NZ X1,WCLN1 JUMP IF NOT EOL
  653. WCLN4 TSTCNT WCFIN CONTINUATION TEST
  654. RJ WGETLINE
  655. SA5 TAG-1
  656. EQ WCLN1
  657.  
  658. WCLN5 SX6 0 NULL WRITE OPERATION
  659. SX7 WRITE0=
  660. EQ WCLN3A AND PLANT ELEMENT
  661.  
  662. WCLN6 SX1 X5-1R, SENSE SPECIAL WRITEC TERMINATOR
  663. ZR X1,WCLN7 AND CONTINUE
  664. SA1 A5+B1 TRY FOR MODE CHANGE
  665. SX1 X1-1RM
  666. ZR X1,WCLN8 YES EMBED MODE IN STRING
  667. RJ EMBEDER FINISH UP IN EMBED
  668. EQ WCLN3A AND PLANT ELEMENT
  669.  
  670. WCLN7 SX1 B5-77B CHECK SPECIAL TERMINATOR ACTIVE
  671. NZ X1,WCLN2 IF NOT JUST CONTINUE
  672. RJ BKSPCHR
  673. RJ BKSPCHR
  674. EQ WCLN3 END ELEMENT
  675.  
  676. WCLN8 RJ CPMODE
  677. EQ WCLN2
  678. WCFIN SPACE 5
  679. *** PROCESS END ACTIONS
  680. *
  681. *
  682. * FIX UP COMMAND WORD
  683. *
  684. *
  685. WCFIN SA1 WCOMND GET NGETVAR CODE
  686. SA2 INX AND PRESENT STORAGE POINTER(INFO)
  687. SA3 INWC AND PRESENT STORAGE POINTER(WRITCBUF)
  688. SA4 ATEMPEC ADDRESS OF ECS BUFFER
  689. BX0 X4 ECS TEMP BUFFER
  690. SB2 X3 NUMBER OF ELEMENTS TO TRANSFER
  691. SA0 WRITCBUF TO INFO BUFFER
  692. WE B2 TRANSFER ELEMENTS
  693. RJ =XECSPRTY
  694. SA0 X2+INFO
  695. SX6 X2+B2 BUMP INX
  696. SA6 A2
  697. RE B2
  698. RJ ECSPRTY
  699. SX3 X3-1 RANGE IS O-(N-1)
  700. * /--- BLOCK PROCESS EM 00 000 76/07/22 02.46
  701. LX3 -24 POSITION RANGE
  702. SB2 X2 STORAGE BIAS TO B2
  703. PX3 B2,X3 PACK BIAS AND RANGE
  704. BX6 X1+X3 PACK NGETVAR CODE
  705. LX6 -XCODEL FINAL POSITIONING
  706. SX7 WRITEC=
  707. SA7 COMNUM
  708. EQ PUTCODE PLANT IT
  709. EMBEDER TITLE PROCESS EMBEDDED COMMANDS
  710. *** PROCESS EMBEDDED COMMANDS
  711. *
  712. *
  713. * EXIT WITH DATA IN X6, AND COMMAND TYPE IN X7
  714. *
  715. *
  716. EMBEDER ENTER
  717. RJ EINTL DO INITIALIZATIONS
  718. EMBD1 RJ BKSPCHR DUMP ^0
  719. RJ BKSPCHR
  720. ZR B4,EMBD2 IGNOR NULL WRITES
  721. RJ ECSFINAL FINISH UP WRITE
  722. BX6 X6+X7 COMBINE DATA AND COMMAND TYPE
  723. PLNTCODE
  724. EMBD2 SX6 A5+B1 SET UP FOR EMBEDDOR
  725. SA6 WORDPT
  726. SX6 B5 SAVE TERMINATING CHAR
  727. SA6 WSAVEREG
  728. SX6 B6
  729. SA6 A6+B1
  730. CALL EMBED
  731. SB1 1
  732. SA1 WSAVEREG
  733. SB5 X1 RESTORE TERMINATOR
  734. SA1 A1+B1
  735. SB6 X1
  736. SA1 COMNUM GET COMMAND TYPE
  737. BX6 X1+X6 COMBINE WITH DATA
  738. PLNTCODE
  739. SA1 WORDPT SET UP A5
  740. SA5 X1 GET LAST CHAR
  741. SX2 X5+B5 END OF ELEMENT TEST
  742. ZR X2,EMBD7
  743. ZR X5,EMBD4 END OF LINE TEST
  744. SA5 A5-B1 FOR PACKER
  745. RJ ECSINTL INITIALIZE FOR ADDITIONAL WRITE
  746. EMBD3 RJ PACKER PROCESS WRITE
  747. SX1 X5+B5 END OF ELEMENT TEST
  748. ZR X1,EMBD6
  749. ZR X5,EMBD5 END OF LINE TEST
  750. SX1 X5-1R, SENSE SPECIAL WRITEC TERMINATOR
  751. ZR X1,EMBD8 BACKUP AND QUIT
  752. SA1 A5+B1 TRY FOR MODE CHANGE
  753. SX1 X1-1RM
  754. ZR X1,EMBD9 YES EMBED MODE IN STRING
  755. EQ EMBD1 PROCESS EMBEDDED ELEMENT
  756. *
  757. * POSSIBLE END OF ELEMENT
  758. *
  759. EMBD4 TSTCNT EMBD7
  760. RJ ECSINTL INITIAL FOR NEXT WRITE
  761. SA1 COMNUM CHECK FOR -AT- COMMAND
  762. SX2 AT=
  763. IX2 X1-X2
  764. ZR X2,EMBD4A NO CR FOR AT
  765. SX2 X2-1 CHECK FOR AT*
  766. ZR X2,EMBD4A
  767. PLNTCR
  768. EQ EMBD3
  769.  
  770. EMBD4A RJ WGETLINE
  771. SA5 TAG-1
  772. EQ EMBD3 PROCESS NEXT WRITE SEGMENT
  773. *
  774. * POSSIBLE END OF WRITE
  775. * /--- BLOCK PROCESS MO 00 000 76/07/25 09.26
  776. *
  777. EMBD5 TSTCNT EMBD6
  778. PLNTCR
  779. EQ EMBD3 CONTINUE WITH WRITE
  780. *
  781. *
  782. EMBD6 ZR B4,EMBD7 IGNOR NULL WRITES
  783. RJ ECSFINAL FINISH WRITE
  784. BX6 X6+X7
  785. PLNTCODE
  786. EMBD7 RJ EFINAL FINISH UP EMBEDDED COMMANDS
  787. EXIT
  788.  
  789. EMBD8 SX1 B5-77B CHECK FOR SPECIAL ACTIVE
  790. NZ X1,EMBD3
  791. RJ BKSPCHR
  792. RJ BKSPCHR
  793. EQ EMBD6
  794.  
  795. EMBD9 RJ CPMODE
  796. EQ EMBD3 CONTINUE TO PACK
  797. CPMODE TITLE PROCESS MODE CHANGE
  798. *** PROCESS EMBEDED MODE CHANGES
  799. * CONVERT TO SPECIAL ACCESS KEYS
  800. *
  801. *
  802.  
  803.  
  804. CPMODE ENTER ENTRY/EXIT
  805. RJ BKSPCHR REMOVE EMBED ACCESS
  806. RJ BKSPCHR REMOVE EMBED 0
  807. SA1 A5+2 CHECK FORMAT
  808. SX2 X1-1R,
  809. NZ X2,ERRTERM
  810. SA1 A5+4
  811. SX2 X1-ACCESS
  812. NZ X2,ERRTERM
  813. SA1 A5+5
  814. SX2 X1-1R1 CHECK ENDING
  815. NZ X2,ERRTERM
  816. SA1 A5+3 GET TYPE
  817. SB2 1R2
  818. SX2 X1-1RE
  819. ZR X2,PMD1
  820. SB2 1R3
  821. SX2 X1-1RW
  822. ZR X2,PMD1
  823. SB2 1R4
  824. SX2 X1-1RR
  825. NZ X2,ERRNAME
  826. PMD1 SX5 KUP PLANT SHIFT CODE
  827. PACKCHR X5
  828. SX5 B2
  829. PACKCHR X5 PACK UP SPECIAL ACCESS
  830. SA5 A5+5
  831. EXIT
  832. * /--- BLOCK PACKER 00 000 76/08/09 03.48
  833. PACKER TITLE PACK UP LINE INTO BUFFER
  834. * ROUTINE TO PACK CHARACTER STRING INTO A BUFFER
  835. *
  836. PACKER ENTER EXIT/ENTRY
  837.  
  838.  
  839. ZR B6,/FORWRD/CHAR IF NORMAL WRITING
  840. NG B6,/BCKWRD/CHAR IF LEFT WRITING BUT NOT NEW
  841. SX5 KUP SET UP FOR LEFT WRITING
  842. PACKCHR X5
  843. SX5 1R1
  844. PACKCHR X5
  845. EQ /BCKWRD/CHAR IF LEFT WRITING
  846.  
  847. QUAL FORWRD
  848.  
  849. * LIST M,X,S
  850. CHARACTR PACKER SPECIAL SCANNING MACRO
  851.  
  852.  
  853. PURGMAC XINC
  854.  
  855. XINC MACRO ARG
  856. LOCAL L
  857. L EQU ARG
  858. SX3 X3-L
  859. ENDM
  860.  
  861. QUAL BCKWRD
  862.  
  863. CHARACTR PACKER
  864.  
  865. QUAL
  866.  
  867. ** DEFINE RMARG AND ORIENTV ACTIONS
  868.  
  869. RMGACTN EQU /BCKWRD/RMGACTN
  870. ORVACTN EQU /BCKWRD/ORIACTN
  871.  
  872.  
  873. LIST *
  874. * /--- BLOCK PACKER 00 000 76/08/11 17.25
  875. ECSINTL SPACE 5
  876. **** ECSINTL - INITIALIZE WORK BUFFER FOR ECS EXTRA
  877. * STORAGE USED
  878. *
  879. * INITIALIZE ALSO VARIOUS REGS
  880. *
  881.  
  882.  
  883. PURGMAC XINC
  884.  
  885. XINC MACRO ARG
  886. LOCAL L
  887. L EQU ARG
  888. SX3 X3+L
  889. ENDM
  890.  
  891. ECSINTL ENTER
  892. SA2 WORK-1 PRESET A7/X7
  893. BX7 X2
  894. SA7 A2
  895. MX7 0
  896. SB7 10
  897. SB3 B0 CLEAR CR FALG
  898. SB4 B0 CLEAR CHARACTER COUNT
  899. MX0 0 CLEAR TO NORMAL FONT
  900. MX3 0 CLEAR X
  901. MX4 0 CLEAR Y
  902. PX4 X4
  903. EXIT
  904. ECSFINAL SPACE 5
  905. * /--- BLOCK ECSFINAL 00 000 77/03/31 14.54
  906. *
  907. **** ECSFINAL - WRITE INTO LAST OF ECS BUFFER THE
  908. * INFO DATA, AND SET UP COMMAND WORD
  909. * WITH LENGTH AND BIAS IN X6
  910. * LENGTH AS A PACKED EXPONENT
  911. * BIAS AS THE NEXT 16 BITS
  912. * XINC AS THE NEXT 10 BITS
  913. * YINC AS THE NEXT 10 BITS
  914. *
  915. * EXIT WITH COMMAND TYPE IN X7
  916. *
  917. *
  918. ECSFINAL ENTER
  919. *
  920. *PT SAVING A5,B5,B6 PROBABLY NOT NEEDED (2/28/77)
  921. SX6 A5 SAVE A5
  922. SA6 WSAVEREG
  923. SX6 B5 AND B5
  924. SA6 A6+1
  925. SX6 B6 AND B6
  926. SA6 A6+B1
  927. *
  928. * FIRST CLEAN UP X7
  929. *
  930. NZ B4,ECSF1 SENSE NO CHARS
  931. SX1 1R
  932. PACKCHR X1 PACK SPACE
  933. XINC XCHRINC
  934.  
  935. ECSF1 RJ FIX.X7 POSITION X7
  936.  
  937. *
  938. * NOW PLANT IN ECS
  939. *
  940. ECSF2 SA0 WORK CM BUFFER
  941. SB2 A0-B1 LENGTH CAOC
  942. SB2 A7-B2 LENGTH TO B2
  943. *
  944. SA2 ECSARGS NUMBER OF ECS ARGS
  945. SX1 B2
  946. IX7 X1+X2 INCREMENT NUMBER OF ARGS
  947. SX1 X7-ECSRESL
  948. PL X1,LNGUNIT SEE IF TOO MANY ECS ARGS
  949. SA7 A2 WRITE OUT NEW LENGTH
  950. SA1 ECSRESB ADDRESS OF ECS ARGS BUFFER
  951. IX0 X1+X2 ADDRESS AT WHICH TO INSERT
  952. + WE B2 WRITE OUT
  953. RJ ECSPRTY
  954. *
  955. SB1 1 RESET UNIVERSAL CON
  956. SA1 WSAVEREG RESET A5/B5
  957. SA5 X1
  958. SA1 A1+B1
  959. SB5 X1
  960. SA1 A1+B1
  961. SB6 X1
  962. *
  963. * CONSTRUCT COMMAND WORD
  964. *
  965. SX1 B4-3777B CHECK IF TOO MANY CHARACTERS
  966. PL X1,ERRLNG
  967. BX6 X2 GET OFFSET INTO ECS ARGS
  968. LX6 -12-16 POSITION FOR COMMAND WORD
  969. SB4 B4-1777B OFFSET NUMBER OF CHARS
  970. PX6 X6,B4 PACK NUMBER OF CHARS
  971. MX0 -10 SET UP COMMAND WORD
  972. BX3 -X0*X3 TRUNCATE TO 9 BITS PLUS SIGN
  973. UX4,B2 X4 RECOVER TEMP BIAS
  974. SX1 B2
  975. IX4 X4-X1
  976. BX4 -X0*X4 YYY TRUNCATE
  977. LX3 22
  978. LX4 12 POSITION YYY
  979. BX6 X3+X6 MERGE
  980. BX6 X4+X6
  981. SX1 B6 MARK DIRECTION
  982. LX1 11
  983. BX6 X1+X6
  984. *
  985. * SET TYPE OF COMMAND
  986. *
  987. NZ B3,ECSF3 SENSE CR
  988. * /--- BLOCK PROCESS10 00 000 77/03/29 20.59
  989. *
  990. SX7 WRITE1= NO CR
  991. EXIT
  992.  
  993. ECSF3 NG B3,ECSF4 SENSE CR TO MARGIN
  994. SX7 WRITE2= SET UP CR TO BORDER
  995. EXIT
  996.  
  997. ECSF4 SX7 WRITE3=
  998. EXIT
  999. *
  1000. BKSPCHR SPACE 5
  1001. *** ROUTINE TO BKSP A CHAR
  1002. *
  1003. *
  1004. BKSPCHR ENTER
  1005. BKSPCHR
  1006. EXIT
  1007. EINTL SPACE 5
  1008. *** INITIALIZE FOR EMBEDDING
  1009. *
  1010. *
  1011. EINTL ENTER
  1012. SX6 WRCBLTH-1 SET UP COMMAND POINTER
  1013. SA6 WRKPNT
  1014. EXIT
  1015. EFINAL SPACE 5
  1016. *** EFINAL - FINAL ACTIONS FOR EMBEDDING
  1017. *
  1018. *
  1019. EFINAL ENTER
  1020. *
  1021. *PT PROBABLY DO NOT NEED THESE SAVES (2/28/77)
  1022. SX6 A5 SAVE A5
  1023. SA6 WSAVEREG
  1024. SX6 B5 AND B5
  1025. SA6 A6+1
  1026. SX6 B6
  1027. SA6 A6+B1
  1028. *
  1029. * SET UP FOR ECS WRITE
  1030. *
  1031. SA1 WRKPNT CALC COMMAND LENGTH
  1032. BX2 -X1
  1033. SB4 X2+WRCBLTH-1 LENGTH
  1034. SA0 X1+WRITCBUF+1 ECS
  1035. *
  1036. SA1 ECSRESB START OF ECS ARGS
  1037. SA2 ECSARGS NUMBER OF ECS ARGS
  1038. IX0 X1+X2 ADDRESS TO INSERT MORE
  1039. SX1 B4
  1040. IX7 X2+X1 NEW NUMBER OF ECS ARGS
  1041. SA7 A2 UPDATE NEW LENGTH
  1042. SX1 X7-ECSRESL
  1043. PL X1,LNGUNIT SEE IF TOO MANY ARGS
  1044. + WE B4 WRITE OUT
  1045. RJ ECSPRTY
  1046. *
  1047. SB1 1 RESET UNIVERSAL CON
  1048. SA1 WSAVEREG RESET A5/B5
  1049. SA5 X1
  1050. SA1 A1+B1
  1051. SB5 X1
  1052. SA1 A1+B1
  1053. SB6 X1
  1054. *
  1055. *
  1056. * CALC COMMAND BIAS
  1057. *
  1058. BX6 X2 GET OFFSET IN ECS ARGS
  1059. LX6 -12-16
  1060. PX6 X6,B4 BIAS AND LENGTH
  1061. SX7 WRITE4= COMMAND TYPE
  1062. EXIT
  1063. * /--- BLOCK WGETLINE 00 000 77/03/31 15.06
  1064. WGETLINE SPACE 5
  1065. **** WGETLINE
  1066. *
  1067. * EXIT WITH B6 = 0
  1068. *
  1069. WGETLINE ENTER
  1070. SX6 B3 SAVE B3,B4,B5,B7,A7,X0,X3,X4,X7
  1071. SA6 WSAVEREG
  1072. SX6 B4
  1073. LX6 18
  1074. SX1 B7
  1075. BX6 X1+X6
  1076. LX6 18
  1077. SX1 A7
  1078. BX6 X1+X6
  1079. SA6 A6+B1
  1080. SA7 A6+B1
  1081. BX6 X0
  1082. SA6 A7+B1
  1083. BX6 X3
  1084. SA6 A6+B1
  1085. BX6 X4
  1086. SA6 A6+B1
  1087. SX6 B5
  1088. SA6 A6+B1
  1089. *
  1090. * * * END TEST AT EVERY LINE TO STAY IN WORK BUFFER
  1091. *
  1092. SX2 B4-3777B CHECK IF TOO MANY
  1093. PL X2,ERRLNG
  1094. *
  1095. * * *
  1096. *
  1097. RJ GETLINE
  1098. SB1 1
  1099. SA1 WSAVEREG RESTORE REGS
  1100. SB3 X1
  1101. SA1 A1+B1
  1102. SA2 X1
  1103. BX7 X2
  1104. SA7 X1
  1105. AX1 18
  1106. SB7 X1
  1107. AX1 18
  1108. SB4 X1
  1109. SA1 A1+B1
  1110. BX7 X1
  1111. SA1 A1+B1
  1112. BX0 X1
  1113. SA1 A1+B1
  1114. BX3 X1
  1115. SA1 A1+B1
  1116. BX4 X1
  1117. SA1 A1+B1
  1118. SB5 X1
  1119.  
  1120.  
  1121. SB6 B0
  1122. *
  1123. EXIT
  1124. *
  1125. *
  1126. WRKPNT DATA 0 COMMAND POINTER IN WRITCBUF
  1127. INWC DATA 0 STORAGE POINTER IN WRITCBUF
  1128. WCOMND DATA 0 TEMP STORAGE FOR WRITEC COMMAND
  1129. WSAVEREG BSSZ 7
  1130. CSET= DATA 0 IN CONDENSE ALWAYS USE READ ONLY FONT
  1131.  
  1132.  
  1133. * /--- BLOCK EXACTSUBS 00 000 76/08/13 03.05
  1134. EXCSUBS TITLE VARIOUS SUBROUTINES FOR EXACTC
  1135. *** INITIALIZE FOR AN ELEMENT
  1136. *
  1137. * SETS UP FOR PACKER
  1138. *
  1139. *
  1140.  
  1141.  
  1142. EXCINTL ENTER EXIT/ENTRY
  1143. MX7 0 CLEAR CHARACTER ACCUM
  1144. SB7 10 SET NUMBER OF CHARS REMAINING
  1145. SB4 B0 NUMBER OF CHARS IN ELEMENT = 0
  1146. SB3 B0
  1147. MX0 0 SET TO NORMAL FONT
  1148.  
  1149. * THE FOLOWING ARE SET FOR X/Y OPERATIONS
  1150.  
  1151. MX3 0
  1152. MX4 0
  1153. PX4 X4
  1154.  
  1155. EXIT
  1156. EXCFINL SPACE 4
  1157. *** CLEAN UP ELEMENT AND BUMP COUNTERS
  1158. *
  1159. *
  1160.  
  1161.  
  1162. EXCFINL ENTER
  1163.  
  1164. *
  1165. RJ FIX.X7 GO FIXUP X7
  1166.  
  1167. *
  1168. *
  1169. * NOW FORM THE ELEMENT IDENTIFIER
  1170. *
  1171. *
  1172. EXCF1 SA1 ORGA7
  1173. SX6 INFO
  1174. IX6 X1-X6 RELATIVE ADDRESS IN *INFO*
  1175. LX6 30-12
  1176. SX2 B4 TOTAL NUMBER OF CHARACTERS
  1177. LX2 30-12-12
  1178. BX6 X2+X6
  1179. SA1 WRKPNT CURRENT TABLE ADDRESS
  1180. SA2 WORK+X1
  1181. SA3 =XCONV3 CURRENT NUMBER OF ENTRIES
  1182. BX6 X2+X6
  1183. LX3 -1 TEST ODD/EVEN
  1184. NG X3,EXCF3 IF ODD
  1185. LX6 30 POSITION EVEN ENTRIES TO TOP
  1186. SA6 A2
  1187. EXCF2 LX3 1 RESTORE TRUE COUNT
  1188. SX6 X3+B1 AND BUMP IT
  1189. SA6 A3
  1190. SX6 A7+B1 SAVE POSSIBLE ORG FOR NEXT ELMT
  1191. SA6 ORGA7
  1192.  
  1193. EXIT
  1194.  
  1195. EXCF3 SA6 A2 PLANT COMPLETED WORD
  1196. SX6 X1+B1 BUMP NUMBER OF IDENTS
  1197. SA6 A1
  1198. MX6 0 CLEAR NEXT WORD
  1199. SA6 A2+B1
  1200. EQ EXCF2
  1201.  
  1202. ORGA7 DATA 0 RELATIVE ORIGIN OF ELEMENT
  1203. * /--- BLOCK FIX.X7 00 000 77/11/12 04.41
  1204. FIX.X7 SPACE 4
  1205. *** COMMON ACTIONS TO POSITION X7 FOR EXACTC/WRITEC
  1206. *
  1207. *
  1208.  
  1209.  
  1210. FIX.X7 ENTER
  1211.  
  1212. * FIX UP X7 IF NECESSARY
  1213. *
  1214. SX1 B7-10 TEST NUMBER OF REMAINING CHARS IN WORD
  1215. ZR X1,FIX.X7 IF NO CHARACTERS IN ACCUM
  1216. SX1 B7 CALCULATE SHIFT COUNT
  1217. LX1 1
  1218. SX1 X1+B7 X3
  1219. LX1 1 X6
  1220. SB7 X1
  1221. LX7 B7,X7 POSITON LAST WORD
  1222. SA7 A7+1 PLANT IT
  1223.  
  1224. EXIT
  1225. *
  1226. * TITLE DISPLAY CODE OUTPUT COMMAND
  1227. **** DISIN - PROCESS DISPLAY CODE OUTPUT
  1228. *
  1229. *
  1230. * DISIN CALL SYSTEST LIMIT TO SYSTEM PROGRAMS
  1231. * SX7 10 DEFAULT NUMBER OF CHARACTERS
  1232. * CALL SHOWAGO USE SHOWA DRIVER
  1233. * EQ =XPUTCODE
  1234. **
  1235. **
  1236. ******
  1237. PURGMAC SB1
  1238. ******
  1239. ERRLNG SB1 108 TOO MANY CHARS IN WRITE TAG
  1240. EQ =XERR
  1241. *
  1242. K8S DATA 8L SPACES
  1243. *
  1244. *
  1245. QUAL CWRTOV
  1246. ENDOV
  1247. *
  1248. * /--- BLOCK END 00 000 77/04/24 22.07
  1249. *
  1250. *
  1251. OVTABLE
  1252. *
  1253. *
  1254. END CWRITE$
plato/source/plaopl/cwrite.txt ยท Last modified: 2023/08/05 18:54 by Site Administrator