.TITLE FILE UTILITY SORT .MCALL .EXIT .PRINT .GTIM .CSIGEN .READW .MCALL .WRITW .GTLIN .TTYOUT .SRESET .CLOSE STACK: NOP .MACRO CONVRT VALUE, CHAR, ?AAA, ?BBB MOV #STACK,SP ;INIT STACK MOV CHAR,-(SP) ;SPACE TO STACK MOV VALUE,R3 ;READY NO. FOR DIVIDE AAA: CLR R2 ;CLEAR QUOT REG. DIV #10.,R2 ;DIVIDE ADD #60,R3 ;MAKE IT ASCII MOV R3,-(SP) ;PUSH DIGIT ONTO STACK MOV R2,R3 ;READY QUOT FOR DIVIDE BNE AAA ;IF NOT 0,GET NEXT DIGIT BBB: MOV (SP)+,R0 ;GET CHAR .TTYOUT ;OUTPUT IT CMP CHAR,R0 ;WAS IT A SPACE? BNE BBB ;IF NOT NEXT CHAR .ENDM ;ELSE END MACRO .MACRO EOL .TTYOUT #15 ;PRINT .TTYOUT #12 ;PRINT CLR CHRLIN ;RESET COUNTER INC LINCNT ;COUNT LINE .ENDM .MACRO INPUT Z, ?AAA, ?BBB, ?CCC, ?DDD, ?EEE MOV #IBUFF,R4 ;GET INPUT MOV Z,TEMP ;ALLOW FOR MULTI-NUMBER AAA: CLR R1 ;INIT NUMBER BBB: MOVB (R4)+,R2 ;GET CHAR BEQ DDD ;EXIT TST TEMP ;COMMA ALLOWED? BNE CCC ;NO CMPB R2,#', ;IS IT A COMMA? BNE CCC ;NO MOV R1,R0 ;STORE NUMBER INC TEMP ;DISABLE COMMA BR AAA ;SET UP FOR NEXT NUMBER CCC: SUB #60,R2 ;REMOVE ASCII BIAS BMI EEE ;<0,IT'S AN ERROR CMP #11,R2 ;>9 BMI EEE ;YES-IT'S AN ERROR MUL #12,R1 ;MULT SUM BY 10 BCS EEE ;CHECK CARRY ADD R2,R1 ;ADD DIGIT TO SUM BVC BBB ;NO OVERFLOW, CONTINUE EEE: MOV #-1,R1 ;ASSUME ERROR DDD: NOP ;EXIT .ENDM .MACRO RECORD Z MOV LENEL,R3 ;READY ELEMENT LEN FOR CALC. MUL Z,R3 ;FIND RECORD LOC.-OFFSET ADD #ARRAY,R3 ;ADD OFFSET .ENDM INPUT1: .GTLIN #IBUFF,#MSG001 ;ASK FOR FILES .CSIGEN #HAND,#EXT,#IBUFF ;ATTEMPT TO OPEN BCC INPUT2 ;OPEN WAS SUCCESSFUL .PRINT #ERR001 ;ERROR - .SRESET ;GET RID OF ANY FILES BR INPUT1 ; TRY AGAIN INPUT2: .GTLIN #IBUFF,#MSG002 ;# OF KEYS? INPUT #1 ;DECODE STRING TST R1 ;IS IT <1? BMI ERROR2 ;YES-NEGATIVE BEQ ERROR2 ;YES-ZERO CMP #16.,R1 ;IS IT >16? BPL INCHK2 ;NO ERROR2: .PRINT #ERR002 ;1-16 ALLOWED BR INPUT2 ;TRY AGAIN INCHK2: MOV R1,NUMKEY ;SAVE THE NUMBER MOV #,R5 ;PREPARE TO ACCEPT INPUT CLR KEYCNT ;INIT KEY COUNTER CLR LENEL ;LENGTH OF ELEMENT CLR LENTAG ;TAG STATUS ODD/EVEN INPUT3: .PRINT #MSG003 ;KEY MOV KEYCNT,R2 ;GET KEY# INC R2 ;ADJUST CONVRT R2,#40 ;OUTPUT IT EOL ;ADVANCE LINE INPUT4: .GTLIN #IBUFF,#MSG004 ;STARTING POSITION? INPUT #0 ;ACCEPT NUMBER TST R0 ;>0 BMI ERROR4 ;NO-NEGATIVE BNE INCHK3 ;YES ERROR4: .PRINT #ERR004 ;INVALID INPUT BR INPUT4 ;TRY AGAIN INCHK3: TST TEMP ;COMMA ENTERED? BEQ ERROR4 ;NO TST R1 ;CHECK NUM OF CHAR BMI ERROR4 ;NO-NEGATIVE BEQ ERROR4 ;NO-ZERO MOV R0,(R5)+ ;SAVE-START MOV R1,(R5)+ ;SAVE-LENGTH ADD R1,LENEL ;ADD # OF CHAR INC KEYCNT ;INCREASE KEY COUNT CMP KEYCNT,NUMKEY ;FINISHED? BPL INCHK5 ;YES JMP INPUT3 ;NO INCHK5: MOV LENEL,R3 ;CHECK FOR MOV R3,TAG ;LENGTH IN CHAR CLR R2 ;ODD NUMBER OF CHARACTERS DIV #2,R2 ;IN THE LENGTH OF THE SUB R3,LENTAG ;SET STATUS -1=ODD ADD R3,LENEL ;SORT ELEMENT ADD #4,LENEL ;BLOCK/ADDR OFFSET INPUT6: .GTLIN #IBUFF,#MSG006 ;ALPHA/ASCII ORDER CLR OPT2 ;ASCII ORDER CMP #"AS,IBUFF ;IS IT ASCII? BEQ IRECI ;YES-CONTINUE ON DEC OPT2 ;ALPHABETICAL ORDER CMP #"AL,IBUFF ;IS IT ALPHABETICAL? BNE INPUT6 ;ERROR-TRY AGAIN .PRINT #MSG007 ;BUILD TAG ARRAY IRECI: CLR BLOCK ;INIT BLK CNT CLR NUMREC ;INIT REC CNTR MOV #ARRAY,R1 ;GET TAG ARRAY MOV #IBUFF,R4 ;GET BLK POINTER CLR INPCNT ;CHAR PROCESSED-INPUT FILE .READW #SCR,#3,#IBUFF,#400,BLOCK ;READ BLOCK BCC IREC1 ;OK, SO FAR JMP END ;NOTHING TO SORT IREC1: CLR RECLEN ;RECORD LENGTH CLR EOR ;END-OF-RECORD STATUS CLR EOF ;END-OF-FILE STATUS CLR RECERR ;RECORD ERROR MOV #RBUFF,R5 ;GET REC POINTER MOV BLOCK,RECBLK ;SAVE BLOCK MOV R4,RECADR ;AND RECORD ADDRESS SUB #IBUFF,RECADR ;REMOVE OFFSET IREC2: CMP #512.,INPCNT ;END OF BLOCK BUFFER? BNE IREC4 ;NO-CONTINUE ON INC BLOCK ;GET BLK NUM MOV #IBUFF,R4 ;GET BLK POINTER .READW #SCR,#3,#IBUFF,#400,BLOCK ;READ BLOCK BCC IREC3 ;NO-EOF DEC EOF ;SET FLAG JMP IREC7 ;END OF FILE ENCOUNTERED IREC3: CLR INPCNT ;CHAR PROCESSED-INPUT FILE TST RECLEN ;PROCESSING RECORD? BEQ IREC1 ;NO,THEN SETUP FOR ONE IREC4: CMP #2048.,RECLEN ;END OF RECORD BUFFER? BNE IREC5 ;NO DEC RECERR ;AND FLAG THIS RECORD CLR RECLEN ;RE SET LENGTH MOV #RBUFF,R5 ;RESET REC POINTER AND FINISH IREC5: MOVB (R4)+,(R5)+ ;STORE CHAR INC INPCNT ;ACCEPT CHAR INC RECLEN ;ADD 1 TO REC LENGTH TST EOR ;PAST CHAR = CR? BEQ IREC6 ;NO-CHECK FOR IT CMPB -1(R5),#12 ;IS CHAR LF? BEQ IREC7 ;YES-EOR, PROCESS CLR EOR ;FALSE ALARM BR IREC2 ;GET NEXT CHAR IREC6: CMPB -1(R5),#15 ;IS CHAR CR? BNE IREC2 ;NO-GET NEXT ONE DEC EOR ;SET UP FOR END BR IREC2 ;GET NEXT CHAR IREC7: CLR KEYCNT ;INIT KEY COUNTER TST RECERR ;ERROR ON RECORD? BMI PREC9 ;YES-THEN SKIP TST RECLEN ;RECORD TO PROCESS? BNE PREC0 ;YES JMP SORT1 ;NO PREC0: MOV #RBUFF,R3 ;FIND RECORD START ADD RECLEN,R3 ;ADD RECORD LENGTH DEC R3 ;ADJUST MOV R3,EOR ;SAVE FOR POINTER MOV #,TEMP ;GET KEY INFO PREC1: INC KEYCNT ;GET KEY CMP NUMKEY,KEYCNT ;FINISHED? BMI PREC7 ;YES MOV TEMP,R2 ;GET KEY LOCATION MOV (R2)+,KEYPOS ;GET STARTING CHAR MOV (R2)+,KEYLEN ;GET KEY LENGTH MOV R2,TEMP ;SAVE KEY LOCATION CMP RECLEN,KEYPOS ;IS STARTING>EOR BMI PREC4 ;YES MOV #RBUFF,R5 ;FIND RECORD START ADD KEYPOS,R5 ;ADD BEGINNING CHAR DEC R5 ;ADJUST MOV KEYPOS,R3 ;GET START ADD KEYLEN,R3 ;ADD #CHAR DEC R3 ;ADJUST SUB RECLEN,R3 ;REMOVE RECORD LENGTH MOV R3,NUMFIL ;NUMBER SHORT MOV KEYLEN,R3 ;GET FIELD LENGTH PREC2: CMP EOR,R5 ;PAST EOR? BMI PREC5 ;YES-FILL WITH ZERO BYTES MOVB (R5)+,R2 ;STORE CHAR TST OPT2 ;ASCII? YES BEQ PREC3 ;SKIP CHECKER CMPB R2,#141 ;LESS THAN SMALL A BMI PREC3 ;YES-FINISH UP CMPB R2,#173 ;GREATER THAN SMALL Z BPL PREC3 ;YES-FINISH UP SUB #40,R2 ;ADJUST PREC3: MOVB R2,(R1)+ ;STORE IT SOB R3,PREC2 ;FINISHED? NO BR PREC1 ;NEXT FIELD PREC4: MOV KEYLEN,NUMFIL ;PAST EOR COMPLETELY! PREC5: MOV NUMFIL,R3 ;GET NUM OF ZERO BYTES PREC6: CLRB (R1)+ ;ZERO FILL SOB R3,PREC6 ;FINISHED? NO BR PREC1 ;NEXT FIELD PREC7: TST LENTAG ;ODD LENGTH TAG FIELD? BPL PREC8 ;NO! CLRB (R1)+ ;ZERO BYTE ADJUST PREC8: MOV RECBLK,(R1)+ ;SAVE BLOCK AND MOV RECADR,(R1)+ ;ADDRESS INC NUMREC ;INC NO. OF RECORDS PREC9: MOV R1,R3 ;GET LOCATION OF TAGS ADD LENEL,R3 ;ADD LENGTH OF ELEMENT CMP #EARRAY,R3 ;OUT OF MEMORY? BMI OUTMEM ;ERROR TST EOF ;END OF FILE? BMI SORT1 ;YES JMP IREC1 ;GET NEXT RECORD OUTMEM: .PRINT #ERR005 ;OUT OF MEMORY SORT1: CONVRT BLOCK,#40 ;PRINT BLOCK# .PRINT #MSG011 ;BLOCKS READ CONVRT NUMREC,#40 ;PRINT NUM OF RECS .PRINT #MSG012 ;RECORDS ACCEPTED .PRINT #MSG013 ;SORT IN PROGRESS CLR TIMB ;SET UP TIME CLR TIMB+2 ;KEEPERS .GTIM #SCR,#TIMB ;GET BEGINNING TIME OF SORT MOV NUMREC,X7 ;GET NUM TO SORT DEC X7 ;ADJUST MOV NUMREC,X8 ;SET UP LOOP MOV TAG,R0 ;NUM OF COMPARISIONS SHELL1: ASR X8 ;DIVIDE BY TWO BEQ S3 ;FINISHED? YES MOV X7,X5 ;FIND DISTANCE SUB X8,X5 ; BETWEEN RECORDS CLR X4 ;INIT COUNTER SHELL2: MOV X4,X ;GET FIRST REC SHELL3: RECORD X ;FIND XTH RECORD MOV R3,TR1 ;SAVE XTH RECORD MOV R3,R4 ;SET RECORD X POINTER MOV X,Y ;GET 2ND ADD X8,Y ; REC RECORD Y ;FIND YTH RECORD MOV R3,TR2 ;SAVE YTH RECORD MOV R3,R5 ;SET RECORD Y POINTER CLR R1 ;CLEAR CMP COUNTER S1: INC R1 ;INCREMENT CMP COUNTER CMP R0,R1 ;FINISHED? BMI SHELL4 ;YES,CHECK LEVEL CMPB (R5)+,(R4)+ ;CMP RECORDS BEQ S1 ;NO DIFFERENCE,CONTINUE BPL SHELL4 ;ALREADY IN ORDER MOV TR1,R4 ;RESET RECORD X POINTER MOV TR2,R5 ;RESET RECORD Y POINTER MOV LENEL,R1 ;INIT LENGTH COUNTER S2: MOVB (R4),R2 ;PUT PART OF X IN R2 MOVB (R5),(R4)+ ;PUT PART OF Y IN X MOVB R2,(R5)+ ;PUT R2 IN Y SOB R1,S2 ;SUB 1 AND BR IF # 0 SUB X8,X ;DEDUCT STEP BPL SHELL3 ;NOT OUT OF RANGE SHELL4: INC X4 ;CALC NEXT REC CMP X5,X4 ;FINISHED? BMI SHELL1 ;YES-GO TO NEXT LEVEL BR SHELL2 ;NO-CONTINUE ON S3: CLR TIME ;SET UP TIME CLR TIME+2 ;KEEPERS .GTIM #SCR,#TIME ;GET ENDING TIME OF SORT SUB TIMB,TIME ;SUB LOW WORD SBC TIME+2 ;SUB CARRY SUB TIMB+2,TIME+2 ;SUB HIGH WORD MOV TIME,R2 ;GET HIGH RESULT MOV TIME+2,R3 ;GET LOW RESULT DIV #3600.,R2 ;GET MINUTES MOV R2,MIN ;SAVE CLR R2 ;DIVIDE DIV #60.,R2 ;GET SECONDS MOV R2,SEC ;SAVE CLR R2 ;DIVIDE DIV #10.,R2 ;GET TENTHS MOV R2,TEN ;SAVE CONVRT MIN,#72 ;PRINT MINUTES CONVRT SEC,#56 ;PRINT SECONDS CONVRT TEN,#40 ;PRINT TENTHS .PRINT #MSG014 ;OUTPUT TIME MESSAGE INPUT7: .GTLIN #IBUFF,#MSG019 ;GET ORDER CLR OPTS ;SET UP FOR ASCENDING CMPB #'A,IBUFF ;IS CHAR A? BEQ INPUT8 ;YES,SORT DEC OPTS ;SET UP FOR DESCENDING CMPB #'D,IBUFF ;IS CHAR D? BNE INPUT7 ;ERROR TRY AGAIN INPUT8: .GTLIN #IBUFF,#MSG020 ;PRINT TO TERMINAL CLR OPT3 ;SETUP FOR TERMINAL CMPB #'Y,IBUFF ;YES ENTERED? BEQ INPUT9 ;YES-GET NUM OF CHARS DEC OPT3 ;SETUP FOR NON-TERMINAL CMPB #'N,IBUFF ;NO ENTERED? BEQ OUTPTS ;YES-GET READY BR INPUT8 ;ERROR TRY AGAIN INPUT9: .GTLIN #IBUFF,#MSG021 ;NUM CHAR PER LINE INPUT #1 ;ACCEPT NUMBER CMP R1,#1 ;LESS THAN 1? BMI ERROR9 ;YES,ITS AN ERROR CMP #132.,R1 ;GREATER THAN 132 BPL INCHK9 ;NO,CONTINUE ERROR9: .PRINT #ERR021 ;1-132 ALLOWED BR INPUT9 ;TRY AGAIN INCHK9: DEC R1 ;ADJUST MOV R1,CHRMAX ;SAVE NUMBER MOV R1,CHRCHK ;SET UP FORMAT ZONE SUB #13.,CHRCHK ;LIMITER OUTPTS: CLR OUTCNT ;CHAR PROCESSED-OUTPUT FILE CLR CHRLIN ;CHAR PER LINE CLR LINCNT ;LINE COUNT CLR WBLOCK ;OUTPUT FILE BLOCK MOV #-1,Y ;ELEMENT MOV #RBUFF,R5 ;OUTPUT POINTER TST OPTS ;CHECK OPTION BNE OUTPTI ;IS IT ASCENDING? JMP OUTPUT ;YES,OUTPUT RESULTS OUTPTI: MOV NUMREC,Y ;ELSE ITS DESCENDING AND JMP OUTPUT ;OUTPUT RESULTS OUTPTB: INC X ;FIND START OF NEXT REC RECORD X ;FETCH ADDRESS MOV -(R3),R4 ;RECORD ADDRESS MOV R4,INPCNT ;NUMBER OF CHARS UPTO RECORD ADD #IBUFF,R4 ;ADD OFFSET CLR EOR ;PROCESS NEW RECORD MOV -(R3),BLOCK ;BLOCK # .READW #SCR,#3,#IBUFF,#400,BLOCK ;READ BLOCK BCC OUTPT1 ;CONTINUE .PRINT #ERR008 ;FATAL ERROR JMP END ;QUIT OUTPT1: CMP #512.,INPCNT ;END OF BLOCK BNE OUTPT3 ;NO INC BLOCK ;YES .READW #SCR,#3,#IBUFF,#400,BLOCK ;READ BLOCK BCC OUTPT2 ;CONTINUE JMP OUTPUT ;AT EOF, SKIP TO NEXT REC OUTPT2: MOV #IBUFF,R4 ;RESET INPUT BUFFER CLR INPCNT ;RESET COUNTER OUTPT3: CMP #512.,OUTCNT ;END OF BLOCK BUFFER BNE OUTPT5 ;NO .WRITW #SCR,#0,#RBUFF,#400,WBLOCK ;WRITE BLOCK BCC OUTPT4 ;OK, GO ON WRITER: .PRINT #ERR009 ;FATAL ERROR JMP END ;QUIT OUTPT4: MOV #RBUFF,R5 ;RESET OUTPUT BUFFER INC WBLOCK ;ADVANCE TO NEXT BLOCK CLR OUTCNT ;RESET CHAR COUNTER OUTPT5: MOVB (R4)+,R1 ;STORE CHAR INC INPCNT ;ACCEPT CHAR TST EOR ;PAST CHAR = CR? BEQ OUTPT6 ;NO-CHECK FOR IT ADD #2,EOR ;QUEUE UP FOR END CMPB R1,#12 ;IS CHAR = LF? BEQ OUTPT7 ;YES CLR EOR ;FALSE ALARM OUTPT6: CMPB R1,#15 ;IS CHAR = CR? BNE OUTPT7 ;NO DEC EOR ;FLAG FOR END OUTPT7: MOVB R1,(R5)+ ;STORE CHAR IN OUTPUT INC OUTCNT ;ADJUST COUNTER TST OPT3 ;PRINT TO TERMINAL? BMI OUTPTE ;NO CMP CHRMAX,CHRLIN ;IS LINE TOO LONG? BPL OUTPT8 ;NO EOL ;ADVANCE LINE OUTPT8: CMP CHRCHK,CHRLIN ;CHECK FOR RANGE BPL OUTPT9 ;SKIP FORMATTER CMPB #40,R1 ;IS IT A SPACE? BNE OUTPT9 ;NO EOL ;ADVANCE LINE BR OUTPTE ;FINISHED? OUTPT9: CMPB R1,#40 ;IS CHAR = CONTROL BMI OUTPTE ;YES-IGN0RE IT .TTYOUT R1 ;PRINT CHAR INC CHRLIN ;ADJUST COUNTER OUTPTE: CMP EOR,#1 ;FINISHED? BEQ OUTPUT ;YES JMP OUTPT1 ;NO OUTPUT: TST OPTS ;WHICH FORMAT? BEQ OASC ;ASCENDING ODES: DEC Y ;GET NEXT RECORD BMI ODONE1 ;FINISHED? YES MOV Y,X ;LOCATE RECORD JMP OUTPTB ;PROCESS IT OASC: INC Y ;GET NEXT RECORD CMP Y,NUMREC ;FINISHED? BPL ODONE1 ;YES MOV Y,X ;LOCATE RECORD JMP OUTPTB ;PROCESS IT ODONE1: MOV #512.,R3 ;MAX CHAR SUB OUTCNT,R3 ;NUM TO PAD BEQ ODONE3 ;BLOCK FULL? ODONE2: CLRB (R5)+ ;ACTUAL PAD SOB R3,ODONE2 ;FINISHED? NO ODONE3: TST CHRLIN ;ANYTHING PRINTED? BEQ ODONE4 ;NO-DO NOT ADVANCE LINE EOL ;ADVANCE LINE ODONE4: TST OUTCNT ;ANYTHING IN BUFFER? BEQ ODONE6 ;NO-SKIP WRITE TO FILE .WRITW #SCR,#0,#RBUFF,#400,WBLOCK ;WRITE BLOCK BCC ODONE5 ;GO ON JMP WRITER ;ERROR ODONE5: INC WBLOCK ;GET BLOCK NUMBER ODONE6: CONVRT WBLOCK,#40 ;PRINT BLOCK# .PRINT #MSG015 ;BLOCKS WRITTEN - CONVRT LINCNT,#40 ;PRINT LINE COUNT .PRINT #MSG017 ;LINES PRINTED END: .CLOSE #0 ;CLOSE OUTPUT .CLOSE #3 ;CLOSE INPUT .SRESET ;RESET SOFTWARE .PRINT #MSG099 ;END .EXIT ;DONE!!! BLOCK: .BLKW 1 CHRCHK: .BLKW 1 CHRLIN: .BLKW 1 CHRMAX: .BLKW 1 EOR: .BLKW 1 EOF: .BLKW 1 EXT: .RAD50 /DATOUTOUTOUT/ INPCNT: .BLKW 1 KEYCNT: .BLKW 1 KEYLEN: .BLKW 1 KEYPOS: .BLKW 1 LENEL: .BLKW 1 LENTAG: .BLKW 1 LINCNT: .BLKW 1 MIN: .BLKW 1 NUMFIL: .BLKW 1 NUMKEY: .BLKW 33. NUMREC: .BLKW 1 OPT2: .BLKW 1 OPT3: .BLKW 1 OPTS: .BLKW 1 OUTCNT: .BLKW 1 RECADR: .BLKW 1 RECBLK: .BLKW 1 RECERR: .BLKW 1 RECLEN: .BLKW 1 SCR: .BLKW 5 SEC: .BLKW 1 TAG: .BLKW 1 TEMP: .BLKW 1 TEN: .BLKW 1 TIMB: .BLKW 2 TIME: .BLKW 2 TR1: .BLKW 1 TR2: .BLKW 1 WBLOCK: .BLKW 1 X: .BLKW 1 X4: .BLKW 1 X5: .BLKW 1 X7: .BLKW 1 X8: .BLKW 1 Y: .BLKW 1 .NLIST BIN ERR001: .ASCIZ /FILE ERROR, CHECK YOUR INPUT./ ERR002: .ASCIZ /1-16 KEYS ALLOWED/ ERR004: .ASCIZ /IMPROPER FORMAT/ ERR005: .ASCIZ /OUT-OF-MEMORY - DATA MAY BE LOST./ ERR008: .ASCIZ /FATAL READ ERROR ON INPUT FILE./ ERR009: .ASCIZ /FATAL WRITE ERROR ON OUTPUT FILE./ ERR021: .ASCIZ /1-132 CHARACTERS ALLOWED/ MSG001: .ASCII /OUTPUT FILE=INPUT FILE/<15><12>/*/<200> MSG002: .ASCII /INPUT: NUMBER OF SORT KEYS? /<200> MSG003: .ASCII /KEY /<200> MSG004: .ASCII / STARTING POSITION, LENGTH? /<200> MSG006: .ASCII /SORT: ALPHABETICAL OR ASCII ORDER? /<200> MSG007: .ASCIZ /TAG ARRAY BEING ASSEMBLED./ MSG011: .ASCII /BLOCKS READ - /<200> MSG012: .ASCIZ /RECORDS ACCEPTED/ MSG013: .ASCII /SORT IN PROGRESS - /<200> MSG014: .ASCIZ / TIME REQUIRED TO SORT DATA (MIN:SEC.TEN)/ MSG015: .ASCII /BLOCKS WRITTEN - /<200> MSG017: .ASCIZ /LINES OUTPUT/ MSG019: .ASCII /OUTPUT: ASCENDING OR DESCENDING ORDER? /<200> MSG020: .ASCII / PRINT RESULTS TO TERMINAL? /<200> MSG021: .ASCII / PAPER WIDTH? /<200> MSG099: .ASCIZ /DONE/ .EVEN IBUFF: .BLKW 400 RBUFF: .BLKW 1024. ARRAY: .BLKW 30000 EARRAY: .BLKW 1 HAND: .BLKW 1 .END INPUT1