cdc:nos2.source:opl871:sort
Table of Contents
SORT
Table Of Contents
- [00010] SORT - FILE SORT ROUTINE
- [00012] FILE SORT ROUTINE
- [00087] MAIN PROGRAM.
- [00157] SUBROUTINES.
- [00159] GLT - GENERATE LINE NUMBER TABLE.
- [00254] MER - MERGE LAST SORTED SEGMENT WITH NEW INPUT USING DATA
- [00393] ELK - END OF LINE CHECK
- [00462] PRESET.
Source Code
- SORT.txt
- IDENT SORT,FETS,SORT
- ABS
- SST
- ENTRY SORT
- ENTRY MFL=
- ENTRY SSM=
- SYSCOM B1 DEFINE (B1) = 1
- *COMMENT SORT - FILE SORT ROUTINE.
- COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
- TITLE SORT - FILE SORT ROUTINE
- SPACE 4
- *** SORT - FILE SORT ROUTINE
- * W.T. SACKETT 71/03/01.
- *
- * SORT READS THE INPUT FILE IN SEGMENTS, SORTS THEM AND MERGES
- * RESULT WITH THE PREVIOUSLY SORTED PORTION OF THE FILE.
- * THE SORT IS BASED ON THE FIRST *NC* (DEFAULT = 5) CHARACTERS
- * OF THE LINE NUMBER FOR EACH LINE. THE LINE NUMBER ENTERED
- * LAST BEING THE CORRECTION LINE, REPLACING ANY LINES HAVING
- * THE SAME LINE NUMBER. A LINE NUMBER FOLLOWED BY AN EMPTY
- * LINE IS CONSIDERED A LINE DELETE.
- * NOTES 1) LINE NUMBER, ONE BLANK, CARRAIGE RETURN IS ALSO
- * CONSIDERED A LINE DELETE. 2) A LINE NUMBER HAVING MORE THAN
- * *NC* CHARACTERS IS NOT CHECKED FOR LINE DELETE SO TO DELETE
- * SUCH LINES TYPE ONLY *NC* CHARACTERS THEN CARRAIGE RETURN.
- * 3) DIRECT ACCESS FILES MAY BE SORTED.
- SPACE 4
- *** COMMAND CALL.
- *
- * SORT,I. I = NAME OF INPUT FILE TO BE SORTED.
- *
- * OR, SORT,I,NC=N. IN WHICH CASE THE SORT IS DONE ONLY ON
- * THE FIRST N ( .LE. 10 ) CHARACTERS OF THE LINE NUMBER.
- * IF NO NC PARAMETER IS SPECIFIED N IS ASSUMED TO BE 5.
- SPACE 4
- *** DAYFILE MESSAGES.
- *
- * * NO LINE NUMBER ON SORT FILE.* = SOME LINE ON INPUT FILE
- * IS MISSING A LINE NUMBER. CAN ALSO MEAN A LINE WAS TOO LONG,
- * (160 CHARACTER MAX LINE SIZE). SORT FILE IS NOT REWRITTEN.
- *
- * * INCORRECT SORT PARAMETER.* = SORT COMMAND IS INCORRECT.
- *
- * * EMPTY SORT INPUT FILE.*
- *
- * * INCORRECT WRITE ON READ ONLY FILE.* (CIO ERROR 03) = DIRECT
- * ACCESS INPUT FILE WAS NOT ATTACHED IN WRITE MODE.
- *
- * * RESERVED FILE NAME.* - FILE NAME SPECIFIED ON *SORT*
- * CONTROL CARD IS RESERVED FOR USE BY THE EDITOR (ZZZZZG0,
- * ZZZZZG1).
- SPACE 4,10
- *CALL COMCMAC
- *CALL COMCCMD
- *CALL COMSREM
- SPACE 4,10
- ORG 110B
- FETS BSS 0
- ** ASSEMBLY CONSTANTS.
- DAF CON 0 FILE TYPE FLAG (0 = DIRECT ACCESS)
- ELAD CON 0 ADDRESS OF PARTIAL LINE
- ELCH CON 0 NUMBER OF WORDS IN PARTIAL LINE
- LS CON -1 LAST LINE NUMBER ON MERGE FILE (ZZZZZG1)
- NC CON 5 NUMBER OF DIGITS TO SORT ON
- NMZZZG1 VFD 42/0LZZZZZG1,18/15B
- BUFL EQU 2001B LENGTH OF SCRATCH *CIO* BUFFERS
- WL EQU VXLL/5+1 WORKING BUFFER LENGTH
- SPACE 4
- ** FET DEFINITIONS.
- ZZZZZG1 RFILEB G1BUF,BUFL,(FET=7)
- ZZZZZG0 RFILEB G0BUF,BUFL,(FET=7)
- I RFILEB IBUF,1,(FET=7)
- RPB SPACE 4,10
- * *REPRIEVE* PARAMETER BLOCK.
- RPB BSS 0
- VFD 36/0,12/RPBL,12/0
- VFD 30/0,30/PIT
- BSSZ 7
- BSSZ 16 EXCHANGE PACKAGE
- RPBL EQU *-RPB
- TITLE MAIN PROGRAM.
- SPACE 4
- SORT SB1 1
- RJ PRS PRESET SORT
- EQ SOR2 READ FILE
- SOR1 WRITE ZZZZZG0 FLUSH SORTED DATA
- SA3 I+1
- SX6 X3
- SA6 A3+B1 RESET IN AND OUT TO FIRST
- SA6 A6+B1
- SA3 ELCH
- ZR X3,SOR2 IF NO PARTIAL LINE IN LAST SEGMENT
- SA4 ELAD MOVE PARTIAL LINE TO START OF INPUT BUFFER
- WRITEW I,X4,X3
- SOR2 READEI I,R NEXT SEGMENT FROM INPUT
- RECALL ZZZZZG0
- SA1 X2
- LX1 59-20 CHECK IF NAME IS ZZZZZG1
- PL X1,SOR3 IF ZZZZZG0 ALREADY HAS ITS OWN FNT NAME
- SA4 ZZZZZG0+6
- RENAME ZZZZZG0,ZZZZZG1
- RECALL ZZZZZG0
- BX6 X4 RESTORE RANDOM ADDRESS
- SA6 A4+
- SOR3 RJ ELK CHECK END OF BUFFER FOR END OF LINE
- SA1 I+2 READ *IN*
- SA2 A1+B1 READ *OUT*
- BX3 X2-X1
- NZ X3,SOR4 IF DATA READ
- SA4 GLTA
- ZR X4,ERR1 IF EMPTY FILE
- EQ SOR5 CHECK FOR EOI
- SOR4 RJ GLT GENERATE LINE NUMBER TABLE
- RJ MER MERGE ZZZZZG1 AND I TO ZZZZZG0
- SOR5 SA1 I
- LX1 59-9
- PL X1,SOR1 IF NOT *EOI* ON INPUT FILE
- WRITER ZZZZZG0,R
- SA1 DAF
- ZR X1,SOR6 IF INPUT FILE WAS DIRECT ACCESS
- SA4 X2+6
- RENAME X2,I
- RECALL X2
- BX6 X4 RESTORE RANDOM ADDRESS
- SA6 A4
- EQ SOR8 END
- SOR6 REWIND X2,R COPY ZZZZZG0 TO INPUT
- READEI X2
- SA0 PRS FWA OF WORKING BUFFER
- REWIND I,R
- SOR7 READW ZZZZZG0,PRS,BUFL-1
- SB7 B6-PRS NUMBER OF WORDS TRANSFERRED
- SX2 I
- BX5 X1
- WRITEW X2,A0,B7
- PL X5,SOR7 IF COPY NOT COMPLETE
- WRITER X2 EMPTY BUFFER
- SOR8 MESSAGE =0,1 CLEAR *MS1W* MESSAGE
- RETURN ZZZZZG1
- ENDRUN
- ERR MESSAGE (=C* NO LINE NUMBER ON SORT FILE.*),,R
- EQ ERR2 ABORT
- ERR1 MESSAGE (=C* EMPTY SORT INPUT FILE.*),,R
- ERR2 REWIND I
- ABORT
- TITLE SUBROUTINES.
- GLT SPACE 4
- ** GLT - GENERATE LINE NUMBER TABLE.
- *
- *T 1/ ,40/ CONVERTED NUMBER ,18/ BUFFER ADDRESS ,1/D
- * D = NULL (DELETE) LINE FLAG (SET FOR DELETE)
- *
- * MAIN LOOP IS IN STACK ON 6600.
- *
- * ENTRY (X1) = *IN*.
- * (X2) = *OUT*.
- *
- * EXIT (X0) = FWA OF LINE NUMBER TABLE.
- * (GLTA) = 1.
- *
- * USES A - 2, 3, 4, 6, 7.
- * B - ALL.
- * X - ALL.
- *
- * CALLS SST.
- GLT SUBR ENTRY/EXIT
- SX6 B1
- SA6 GLTA SET DATA READ FLAG
- SB7 X1 SET STARTING ADDRESS OF LINE NUMBERS
- SA2 X2 GET FIRST LINE
- MX5 48
- BX3 X3-X3
- SA4 NC NUMBER OF DIGITS TO SORT ON
- BX6 X6-X6
- SB4 -1R+ (B4) = -1R+
- SB5 X4+B1
- NX7,B3 X3 INITIALIZE (X7)=0, (B3)=48
- BX1 X2
- SB6 B3-B5 (B6) = 48-*NC*-1
- MX0 54
- SB5 -1R0 (B5) = -1R0
- SA7 B7+ PRESET LINE NUMBER TABLE BUFFER ADDRESS
- GLT1 IX6 X6+X3 ACCUMULATE LINE NUMBER
- LX1 6
- BX3 -X0*X1 GET NEXT CHARACTER
- SX7 X3+B4 CHECK IF NOT ALPHANUMERIC
- BX1 X0*X1 CLEAR CHARACTER BEING PROCESSED
- SX3 X3+B5 CHECK IF ALPHABETIC
- LX6 4 NOTE - LINE NUMBER CONVERTED TO HEXADECIMAL
- BX7 -X7+X3
- SB3 B3-B1 COUNT CHARACTER
- PL X7,GLT1 LOOP IF NUMERIC
- LX6 18-4
- LT B3,B6,GLT4 IF OVER MAX NUMBER OF DIGITS TO SORT
- ZR X1,GLT5 IF POSSIBLE NULL LINE
- GLT2 SX7 A2 SET BUFFER ADDRESS
- BX6 X6+X7 BUILD TABLE ENTRY
- LX7 X6,B1
- SA7 A7+B1 STORE LINE NUMBER TABLE ENTRY
- GLT3 BX6 -X5*X2
- SA2 A2+B1 READ NEXT WORD
- NZ X6,GLT3 IF NOT END OF LINE
- BX1 X2
- NX3,B3 X6 RE-INITIALIZE (X3)=0, (B3)=48
- NZ X2,GLT1 LOOP TO END OF BUFFER
- SX0 B7+B1 SET ADDRESS OF LINE NUMBER TABLE
- SB2 A2
- SA6 A7+B1 SET TERMINATOR
- SX1 A6-B7 SET TABLE LENGTH
- NE B2,B7,ERR IF END OF BUFFER NOT REACHED
- RJ SST= SORT TABLE
- EQ GLTX EXIT
- GLT4 AX6 4 PROCESS ONLY *NC* DIGITS
- SB3 B3+B1
- LT B3,B6,GLT4 IF STILL NOT LESS THAN *NC* DIGITS
- MX7 42
- BX6 X7*X6 MASK OFF EXCESS DIGITS
- EQ GLT2 LOOP
- GLT5 SX7 X3+1R0
- SX1 X3+1R0-1R LAST CHARACTER BLANK CONSIDERED A DELETE
- ZR X7,GLT6 IF PROBABLE DELETE LINE
- NZ X1,GLT2 IF NOT DELETE
- GLT6 SB2 B3-38
- GE B2,B1,GLT7 IF LINE NUMBER LESS THAN 9 DIGITS
- SA3 A2+B1
- ZR X3,GLT7 IF LINE DELETE
- LX3 6
- PL B2,GLT2 IF 9 DIGITS
- SX7 1R PROCESS 10 DIGIT LINE NUMBERS
- BX7 X3-X7
- NZ X7,GLT2 IF NOT DELETE
- GLT7 MX1 1 SET DELETE FLAG
- BX6 X6+X1
- EQ GLT2 LOOP
- GLTA CON 0 DATA READ FLAG
- EJECT
- SPACE 4
- ** MER - MERGE LAST SORTED SEGMENT WITH NEW INPUT USING DATA
- * FROM LINE NUMBER TABLE TO WRITE TO ZZZZZG0.
- *
- * ENTRY (X0) = FIRST WORD ADDRESS OF LINE NUMBER TABLE.
- * (LS) = -1 ON FIRST ENTRY SO NO MERGE IS DONE AFTER
- * PROCESSING THE FIRST LINE NUMBER TABLE.
- *
- * USES ALL REGISTERS
- MER SUBR ENTRY/EXIT
- * GET M, LINE NUMBER FROM GLT TABLE FOR FILE TO BE MERGED,
- * AND CHECK FOR ZERO LINE NUMBERS OR LINES WITHOUT NUMBERS.
- SA5 X0 FIRST ENTRY IN LINE NUMBER TABLE
- MX0 41
- SA1 LS LAST LINE NUMBER ON FILE PREVIOUSLY SORTED
- BX6 X0*X5
- NZ X6,MER2 IF NO ZERO LINE NUMBERS
- SA2 A5
- MER1 LX2 59-0
- SA3 X2 GET LINE FROM INPUT BUFFER
- AX3 54
- SA2 A2+B1 GET NEXT LINE NUMBER TABLE ENTRY
- SX4 X3-1R0
- NZ X4,ERR IF NO LINE NUMBER ON LINE
- BX6 X0*X2
- ZR X6,MER1 IF LINE NUMBER = 0
- SA5 A2-B1 RESET A5
- MER2 LX5 59-0
- SA0 X5 (A0) = BUFFER ADDRESS OF LINE M
- PL X5,MER3 IF NOT NULL LINE
- SA0 -1 LINE DELETE FLAG
- MX7 1
- BX5 X7-X5 WIPE OUT SIGN EXTENSION
- MER3 AX5 18 (X5) = M, LINE NUMBER FOR MERGE FILE
- IX4 X1-X5
- NG X4,MERA IF LINE NUMBER > LAST LINE NUMBER
- SA3 NMZZZG1
- WRITER ZZZZZG0 EMPTY ZZZZZG0 BUFFER
- REWIND X2,R
- BX6 X3
- SA6 X2 ZZZZZG0 FNT NAME ZZZZZG1
- SA3 ZZZZZG1+B1 SET IN=OUT=FIRST FOR ZZZZZG1
- SX6 X3
- SA6 A3+B1
- SA6 A6+B1
- READ A3-B1 READ ZZZZZG1
- * GET LINE NUMBER, S, FROM ZZZZZG1 AND WRITE LINE TO WS
- MER4 READC ZZZZZG1,WS
- NZ X1,MER12 IF EOR ON ZZZZZG1
- SA2 WS GET LINE
- MX0 0
- SB3 B0
- SA4 NC
- SB5 -1R+
- MX7 54 LINE NUMBER MASK
- SB6 X4
- MER5 LX2 6
- BX3 -X7*X2 NEXT CHARACTER
- SB3 B3+B1 COUNT CHARACTER
- BX0 X0+X1 ACCUMULATE LINE NUMBER
- SX1 X3-1R0
- SX3 X3+B5
- BX3 -X3+X1 CHECK IF NUMERIC
- BX2 X7*X2 CLEAR CHARACTER BEING PROCESSED
- LX0 4 MULTIPLY BY 16( TO PUT IN GLT FORM)
- PL X3,MER5 GET REST OF LINE NUMBER
- MER6 AX0 4 PROCESS ONLY *NC* DIGITS
- SB3 B3-B1
- GT B3,B6,MER6 IF STILL MORE THAN *NC* CHARACTERS
- MER7 IX4 X5-X0 M - S
- NG X4,MER8 IF M>S
- ZR X4,MER4 M = S SO READ NEXT S
- SA3 LS LAST LINE NUMBER ON LAST SORTED SEGMENT
- IX4 X3-X5
- NG X4,MER11 IF M>LS
- WRITEC ZZZZZG0,WS TRANSFER LINE S OF ZZZZZG1 TO ZZZZZG0
- EQ MER4
- * CHECK LINE NUMBER AND MERGE.
- MER8 SB7 A0 BUFFER ADDRESS FOR MERGE FILE
- BX4 X5
- SA5 A5+B1 GET NEXT M
- LX5 59-0
- ZR X5,MER10 IF END OF LINE NUMBER TABLE
- SA0 X5 BUFFER ADDRESS
- PL X5,MER9 IF NO LINE DELETE
- SA0 -B1 LINE DELETE FLAG
- MX7 1 REMOVE SIGN EXTENSION
- BX5 X7-X5
- MER9 AX5 18 NEXT M TO X5
- BX2 X5-X4 CHECK IF SAME LINE NUMBERS
- ZR X2,MER8 IF SAME, DELETE EARLIER LINE
- NG B7,MER7 IF LINE DELETE REQUIRED
- WRITEC ZZZZZG0,B7 TRANSFER LINE M TO ZZZZZG0
- EQ MER7 CHECK NEXT LINE
- * DUMP REST OF ZZZZZG1 TO ZZZZZG0.
- MER10 NG B7,MER11 IF NULL LINE
- WRITEC ZZZZZG0,B7 WRITE LAST LINE OF LINE NUMBER TABLE
- MER11 WRITEC ZZZZZG0,WS WRITE NEXT LINE FROM ZZZZZG1
- READC ZZZZZG1,WS
- ZR X1,MER11 IF NOT EOR ON SORTED SEGMENT
- * DUMP OF LINE NUMBER TABLE TO ZZZZZG0.
- MER12 ZR X5,MER14 IF END OF LINE NUMBER TABLE
- MERA SB7 A0
- BX0 X5 CHECK MERGE
- SA5 A5+B1 NEXT LINE FROM LINE NUMBER TABLE
- LX5 59-0
- SA0 X5 BUFFER ADDRESS
- PL X5,MER13 IF NO LINE DELETE
- SA0 -B1 LINE DELETE FLAG
- MX7 1 REMOVE SIGN EXTENSION
- BX5 X7-X5
- MER13 AX5 18 NEXT M TO X5
- BX3 X5-X0
- ZR X3,MER12 IF SAME LINE NUMBER
- NG B7,MER12 IF LINE DELETE
- WRITEC ZZZZZG0,B7 TRANSFER LINE M TO ZZZZZG0
- EQ MER12 DUMP REST OF TABLE
- * EXIT.
- MER14 BX6 X0
- SA3 LS LAST LINE NUMBER FROM PREVIOUS SEGMENT
- IX4 X6-X3
- NG X4,MERX IF LAST LINE MERGED < LS
- SA6 A3
- EQ MERX EXIT
- EJECT
- SPACE 4
- ** ELK - END OF LINE CHECK
- *
- * WHEN MERGING THE LAST READ MAY HAVE LEFT A PARTIAL LINE IN
- * THE INPUT BUFFER. ELK SAVES THE PARTIAL LINE IN WE.
- *
- * EXIT (ELCH) = NUMBER OF WORDS IN PARTIAL LINE.
- * (ELAD) = ADDRESS OF BEGINNING OF PARTIAL LINE.
- ELK2 BX7 X4
- SA7 A4 RESET *IN* IN I
- SX7 A6
- BX6 X5
- SA6 ELCH
- SA7 ELAD STORE ADDRESS OF PARTIAL LINE
- ELK SUBR ENTRY/EXIT
- SA2 I
- LX2 59-9 CHECK IF LAST READ
- NG X2,ELKX IF LAST READ
- SB4 WE+WL
- SA4 A2+2 IN
- MX2 -12
- MX5 0
- ELK1 SA3 X4-1 GET LINE FROM BUFFER
- BX6 -X2*X3
- ZR X6,ELK2 IF END OF LIN FOUND
- BX6 X3
- SA6 B4-B1 STORE FROM BOTTOM UP
- SB4 B4-B1
- SX5 X5+B1 NUMBER OF WORDS TRANSFERRED
- SX6 B4-WE-1
- SX4 X4-1
- PL X6,ELK1 GET REST OF LINE
- EQ ERR IF LINE TOO LONG - ERROR EXIT
- PIT SPACE 4,10
- ** PIT PROCESS TERMINAL INTERRUPTS.
- *
- * ENTRY TERMINAL INTERRUPT SENSED.
- *
- * EXIT TERMINAL INTERRUPT IGNORED.
- *
- * MACROS REPRIEVE.
- PIT BSS 0
- REPRIEVE RPB,RESUME,200B RESUME PROCESSING
- SPACE 4
- * COMMON DECKS.
- *CALL COMCSST
- *CALL COMCLFM
- *CALL COMCCIO
- *CALL COMCSYS
- *CALL COMCRDC
- *CALL COMCWTC
- *CALL COMCRDW
- *CALL COMCWTW
- SPACE 4
- USE BUFFERS
- WS EQU * WORKING STORAGE FOR ZZZZZG0 AND ZZZZZG1
- WE EQU *+WL PARTIAL LINE BUFFER
- G1BUF EQU WE+WL BUFFER FOR ZZZZZG1
- G0BUF EQU G1BUF+BUFL BUFFER FOR ZZZZZG0
- IBUF EQU G0BUF+BUFL BUFFER FOR I
- MFL= EQU 14000B SORT NOMINAL FL
- SSM= EQU 0 SUPRESS MEMORY CLEAR
- TITLE PRESET.
- PRS SPACE 4
- ** PRESET.
- *
- * ENTRY (A0) = FIELD LENGTH.
- * ARGR = ADDRESS OF INPUT FILE NAME LEFT JUST ZERO FILL
- *
- * EXIT FETS INITIALIZED.
- PRS SUBR ENTRY/EXIT
- REPRIEVE RPB,SET,200B SET *REPRIEVE* PROCESSING
- SA0 A0-100B ADJUST FL TO ALLOW FOR *CLB=* DATA
- SA1 ARGR SET SORT FILE NAME
- MX5 42
- BX1 X5*X1 MASK OFF FILE NAME
- SA3 =7LZZZZZG0
- BX7 X3-X1
- ZR X7,PRS4 IF MATCHES SCRATCH FILE NAME ZZZZZG0
- SA3 =7LZZZZZG1
- BX7 X3-X1
- ZR X7,PRS4 IF MATCHES SCRATCH FILE NAME ZZZZZG1
- PRS1 SA3 =7LZZZZZG0
- SX5 B1
- BX7 X3+X5
- SA7 ZZZZZG1 ZZZZZG1 ALWAYS HAS FNT NAME OF ZZZZZG0
- SX1 MFL= ENSURE FIELD LENGTH FOR LOCAL FILE TESTING
- SX4 A0 FIELD LENGTH
- IX6 X4-X1
- PL X6,PRS2 IF SUFFICIENT MEMORY AVAILABLE
- SX4 X1+
- MEMORY ,,,X1 INSURE SPACE FOR BUFFERS
- PRS2 SA3 I+2 IN
- IX7 X4-X3
- AX2 X7,B1 SET LIMIT = REMAINING FIELD LENGTH/2
- IX7 X2+X3
- SA1 ARGR STORE FILE NAME IN INPUT FET
- BX6 X1+X5
- SA6 I
- SA7 A6+4 INPUT LIMIT
- SA4 ACTR
- SB4 X4
- REWIND A6 REWIND INPUT FILE
- STATUS X2,P CHECK FILE TYPE
- SA1 I+5
- MX0 -6
- BX7 X7-X7
- AX1 6
- BX2 -X0*X1
- SA7 I+6 CLEAR RANDOM INDEX
- SX6 X2-PMFT
- SA6 DAF DIRECT ACCESS FILE FLAG
- RETURN ZZZZZG0
- EQ B4,B1,PRSX IF ONE PARAMETER
- SA3 ARGR+B1 CHECK NEXT ARGUMENT
- LX3 12
- SA5 A3+B1 GET NUMBER OF DIGITS
- SX2 X3-3R=NC
- NZ X2,PRS3 IF NOT NUMBER OF DIGITS PARAMETER
- SB7 -1 SET DECIMAL CONVERSION
- RJ DXB CONVERT DISPLAY TO BINARY
- NZ X4,PRS3 IF ERROR ENCOUNTERED
- SA6 NC NUMBER OF DIGITS TO SORT ON
- ZR X6,PRS3 IF NC = 0
- SX4 X6-11
- PL X4,PRS3 IF NC GREATER THAN 10 DIGITS
- EQ PRSX RETURN
- PRS3 MESSAGE (=C* INCORRECT SORT PARAMETER.*),,R
- ABORT
- PRS4 MESSAGE (=C* RESERVED FILE NAME.*),,R
- ABORT
- SPACE 4
- * PRESET COMMON DECKS.
- *CALL COMCDXB
- SPACE 4
- END
cdc/nos2.source/opl871/sort.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator