|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 3712 (0xe80) Types: TextFile Names: »SUBRDEMO.MAC«
└─⟦539d5b860⟧ Bits:30004106 SuperSort vers. 1.60 └─ ⟦this⟧ »SUBRDEMO.MAC«
;SUBRDEMO.MAC 9/11/78 A MAIN PROGRAM THAT USES SUPER-SORT SUBROUTINE ; REVISED 3/04/79 (CHANGES IN COMMENTS ONLY) ; ;TO LOAD: L80 SUBRDEMO,SORLIB/S/E ; WORLEN EQU 4000 ;WORK AREA ARRAY LENGTH BOOT EQU 0 ;WHERE TO GO TO EXIT TO SYSTEM BDOS EQU 6 ;SYSTEM ENTRY POINT = TOP OF TPA = A PLACE TO PUT STACK ; EXT SORSUB ;SORT SUBROUTINE EXT SORMSG ;PRINT ERROR MESSAGE FOR SORT, IF ANY EXT INLMSG ;TYPE FOLLOWING TEXT TO NULL OR THRU CHAR WITH HI ORDER ;BIT ON (THIS SUBR IS IN SORLIB) ; CSEG ; GO: ;SET STACK POINTER LHLD BDOS SPHL ;USE TOP OF TRANSIENT PROGRAM AREA AS STACK ;SIGN ON CALL INLMSG ;SUBR TYPES FOLLOWING TEXT DB 'THIS PROGRAM USES THE SUPERSORT SUBROUTINE TO SORT FILE A,',X'0D',X'0A' DB 'MERGE IT WITH FILES B AND C, AND PUT THE RESULT ON FILE D.DAT,' DB X'0D',X'0A','USING FIELD #1, RIGHT-ADJUSTED, AS THE KEY',X'0D',X'8A' ;CALL SORT SUBROUTINE - SORSUB (PARAMS, WORK, LENGTH, STATUS, COLTAB) ;WHERE ARGUMENTS ARE PASSED PER FORTRAN CONVENTIONS LXI H,SORPAR ;HL POINTS PARAM ARRAY: FIRST ARG LXI D,WORK ;DE POINTS WORK AREA: SECOND ARGUMENT LXI B,PTRBLK ;BC POINTS TO POINTERS TO ADDITIONAL ARGUMENTS CALL SORSUB ;DO THE SORT, RETURN ERROR CODE IN A AND HL, FLAGS SET ;AT THIS POINT COULD JNZ TO AN ERROR ROUTINE, IF DESIRED CALL SORMSG ;PRINT ERROR MESSAGE, INCLUDING FILE NAMES, ETC, OR ;PRINT NOTHING IF NO ERROR (SORT SUBR PRINTED "SORT ;COMPLETE" IF SUCCESSFUL JMP BOOT ;EXIT PROGRAM, REBOOTING SYSTEM AND RETURNING TO CCP PAGE ; ;BLOCK OF POINTERS TO SORT SUBROUTINE ARGUMENTS 3, 4, AND 5 PTRBLK: DW KWLEN ;POINTER TO WORK AREA LENGTH: THIRD ARGUMENT DW SSTAT ;POINTER TO PLACE FOR SORT TO RETURN STATUS: 4TH ARG ;POINTER TO COLATING SEQUENCE TABLE: 5TH ARG: WOULD GO HERE IF USED ; KWLEN: DW WORLEN ;SORT WORK AREA LENGTH (THIRD ARG) SSTAT: DS 2 ;PLACE FOR SORT TO RETURN STATUS (FOURTH ARG). NOTE: ;SSTAT ISN'T REFERENCED IN THIS PROGRAM, SINCE STATUS ;IS ALSO RETURNED IN REGISTERS, BUT IT IS DEFINED ;BECUASE SORT STORES IN ANYWAY. ; ;WORK AREA ARRAY (SECOND ARGUMENT TO SORT SUBROUTINE) WORK: DS WORLEN ;LENGTH SET BY EQUATE AT BEGINNING OF PROGRAM PAGE ; ;SORT SUBROUTINE PARAMETER ARRAY (FIRST ARGUMENT TO SORT SUBROUTINE) SORPAR: ;FIXED POSITION PARAMETERS DW 80 ;INPUT FILE RECORD LENGTH DW 0 ;OUTPUT FILE RECORD LENGTH: 0 MEANS SAME AS INPUT DW 0,0 ;UNUSED (RESERVED) DB 1,0 ;INPUT FILE CR-DELIMITED, NO EOF OPTIONS. DB 0,'D DAT' ;OUTPUT FILE: CURRENT DRIVE, NAME "D.DAT" DW 0 ;NO OUTPUT DISKETTE CHANGE (X'8000' TO CHANGE DISKETTE) DB 1,0 ;OUTPUT FILE CR-DELIMITED, NO SPECIAL EOF OPTIONS DB 0 ;PUT WORK FILE ON CURRENT DRIVE DB 0,0,0 ;NOT R-OUTPUT, NOT KR-OUTPUT, NOT TAGSORT DB 0 ;UNUSED (RESERVED, SHOULD BE 0) DB 0,0,0 ;NOT K-OUTPUT, NOT KP-OUTPUT, NOT P-OUTPUT DB 0,0 ;NO XIT1, XIT2 ROUTINES DB 2 ;PRINT LEVEL 2 DB 0 ;UNUSED (RESERVED) ;SORT INPUT FILES DW 1 ;NUMBER OF FILES DB 0,'A ' ;NAME A, BLANK TYPE, CURRENT DRIVE DW 0 ;RESERVED, SHOULD BE 0 DW 0,0 ;START, END RECORD: DO ENTIRE FILE DW -1 ;ENDS INPUT FILES ;MERGE-ONLY INPUT FILES, IN SIMILAR FORMAT DW 2 DB 0,'B ' DW 0,0,0 ;UNUSED (RESERVED) DB 0,'C ' DW 0,0,0 DW -1 ;KEY FIELDS DW 1 ;ONLY 1 KEY (OF A POSSIBLE 32) DW 1 ;FIELD 1 DW 20 ;MAX LENGTH DW X'41' ;FLAG BIT 6 SAYS RIGHT-JUSTIFY, FLAG BIT 0.. ;.. INDICATES COMMA-DELIMITED-FIELD, NOT COLUMNAR FIELD DW -1 ;TERMINATES KEYS ;RECORD SELECT INFO DW 0 ;SAY NO SELECT CRITERIA DW -1 ;TERMINATE SELECT INFO ; END GO ;START ADDRESS «eof»