home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol049 / chain.asm < prev    next >
Assembly Source File  |  1985-02-09  |  5KB  |  247 lines

  1.     TITLE    'PL/1 CHAIN ROUTINE'
  2.     NAME    'PGMCHN'
  3. ;FILE        PL1CHAIN.ASM
  4. ;        * * * *  PL/1 PROGRAM CHAIN  * * * * 
  5. ;PURPOSE    THIS ROUTINE PROVIDES THE ABILITY FOR
  6. ;        A PROGRAM TO CHAIN TO ANOTHER PROGRAM
  7. ;        IN THE SPECIAL HDBS SETUP.
  8. ;PROGRAMMER    ROBERT M. WHITE
  9. ;DATE CODED    23 JUL 1980
  10. ;INPUT
  11. ;        PARM1 =  A CHARACTER VARIABLE THAT CONTAINS THE FILE
  12. ;            NAME OF THE PROGRAM TO BE CHAINED TO.  THE STRING
  13. ;            MUST BE FORMED AS IF IT WERE COMING FROM THE CON-
  14. ;            SOLE AND MUST END WITH A PROPER TERMINATOR.
  15. ;OUTPUT
  16. ;REMARKS
  17. ;EQUATES
  18. ;        * * *  MISCELLANEOUS  * * *
  19. BC    EQU    B        ;MULTIPLE REGISTERS
  20. DE    EQU    D
  21. HL    EQU    H
  22.  
  23. ;        * * *  CP/M EQUATES  * * *
  24. ;        * *  ADDRESS ASSIGNMENTS  * *
  25. CPMEXIT    EQU    0        ;WARM START BOOT LOCATION
  26. BDOS    EQU    5        ;BDOS ENTRY POINT
  27. TBUFF    EQU    0080H        ;DEFAULT BUFFER LOCATION
  28. TDDN    EQU    0004H        ;CURRENT DEFAULT DRIVE NUMBER
  29. TFCB    EQU    005CH        ;DEFAULT FCB LOCATION 1
  30. TFCB2    EQU    006CH        ;DEFAULT FCB LOCATION 2 ( MUST BE MOVED)
  31. TIOBYTE    EQU    0003H        ;INTEL STANDARD I/O BYTE
  32. TPABGN    EQU    0100H        ;TRANSIENT PROGRAM AREA BEGINNING
  33. ;
  34. ;        * FCB EQUATES *
  35. FCBET    EQU    0        ;FCB ENTRY TYPE - DISK DEVICE
  36. FCBFN    EQU    1        ;FILE NAME, 8 CHARS, PADDED WITH BALNKS
  37. FCBFT    EQU    9        ;FILE TYPE, 3 CHARS, PADDED WITH BLANKS
  38. FCBEX    EQU    12        ;FILE EXTENT (0 - 15)
  39. ;        13-14        ;*NOT USED*
  40. FCBRC    EQU    15        ;RECORD COUNT IN CURRENT EXTENT (0-128)
  41. FCBDM    EQU    16        ;DISK ALLOCATION MAP, USED BY CP/M
  42. ;                ;  EACH BYTE OF THE MAP CONTAINS THE CP/M
  43. ;                ;  GROUP NUMBER FOR THE ALLOCATED 1K OR
  44. ;                ;  IT CONTAINS ZERO FOR NOT USED.
  45. FCBNR    EQU    32        ;NEXT RECORD NUMBER TO READ OR WRITE
  46. ;                ;  THIS IS SET BY YOU PRIOR TO READING OR
  47. ;                ;  WRITING A RECORD.  IT IS AUTOMATICLY
  48. ;                ;  INCREMENTED UPON RETURN BY CP/M.
  49. FCBR0    EQU    33        ;RELATIVE RECORD NUMBER (3 - BYTES)
  50. FCBR1    EQU    34        ;   AS OF CP/M 2.0
  51. FCBR2    EQU    35
  52. FCBLE╬    EQ╒    4╕        ;FC┬ LENGTH (GUESSED)
  53. ;                ;NOTE --
  54. ;                ;    TO ACCESS A FILE DIRECTLY, YOU
  55. ;                ;    USE FCBNR AND FCBEX TO GET TO THE
  56. ;                ;    DESIRED RECORD.  IF FCBEX IS TO
  57. ;                ;    BE CHANGED THE FILE MUST BE CLOSED
  58. ;                ;    AND RE-OPENED. 
  59. ;                ;    FCBEX = RECORD#/128
  60. ;                ;    FCBNR = RECORD# MOD 128
  61.  
  62.  
  63. ;        DO INITIALIZATION.
  64. PGMCHN:    CSEG
  65.     PUBLIC    PGMCHN
  66.     LXI    SP,STACK    ;SET THE STACK.
  67.     MOV    E,M        ;GET STRING PTR.
  68.     INX    H
  69.     MOV    D,M
  70.     XCHG            ;SAVE IT.
  71.     SHLD    STRPTR
  72.  
  73. ;        INITIALIZE THE DEFAULT FCB.
  74.     LXI    D,TFCB
  75.     CALL    FCBINT
  76.  
  77. ;        BUILD DEFAULT FCB FROM INPUT STRING.
  78.     LXI    D,TFCB
  79.     LHLD    STRPTR
  80.     CALL    FCBMAK
  81.  
  82. ;        JUMP TO CHAIN ROUTINE.
  83.     JMP    0100H
  84.  
  85.  
  86.  
  87.  
  88. ;        * * *  INITIALIZE FCB  * * *
  89. ;PURPOSE
  90. ;        THIS ROUTINE ZEROES AN FCB.
  91. ;INPUT
  92. ;        DE => FCB
  93. ;OUTPUT
  94. ;        SAME AS INPUT
  95. ;
  96. ;
  97. ;        DO INITIALIZATION.
  98. FCBINT: DS    0
  99.     PUSH    DE        ;SAVE REGS.
  100.     PUSH    HL
  101. ;
  102. ;        ZERO ENTIRE FCB.
  103.     MVI    C,FCBLEN    ;SET LENGTH.
  104.     MOV    H,D        ;HL => FCB
  105.     MOV    L,E
  106.     MVI    M,0        ;ZERO FCB.
  107.     INX    HL
  108.     DCR    C
  109.     JNZ    $-4
  110. ;
  111. ;        BLANK NAME FIELDS.
  112.     MVI    C,FCBFT-FCBFN+3    ;SET LENGTH.
  113.     LXI    HL,FCBFN    ;HL => FCBFN
  114.     DAD    DE
  115.     MVI    M,' '        ;MOVE SPACES TO FCB.
  116.     INX    HL
  117.     DCR    C
  118.     JNZ    $-4
  119. ;
  120. ;        RETURN TO CALLER.
  121.     POP    HL        ;RESTORE REGS.
  122.     POP    DE
  123.     RET
  124. ;
  125. ;
  126. ;
  127. ;
  128. ;        * * *  MAKE AN FCB GIVEN FILE NAME  * * *
  129. ;PURPOSE
  130. ;        THIS ROUTINE BUILDS A FCB FILE NAME GIVEN A
  131. ;        STANDARD CP/M EXTERNAL FILE NAME OF THE FORM:
  132. ;            [D:]NNNNNNNN[.TTT]
  133. ;        WHERE D = OPTIONAL DISK DEVICE (A-Z)
  134. ;              NNNNNNNN = FILE NAME
  135. ;              TTT = OPTIONAL FILE TYPE
  136. ;INPUT
  137. ;        DE => FCB
  138. ;        HL => INPUT STRING
  139. ;OUTPUT
  140. ;        HL => NEXT CHAR AFTER INPUT STRING
  141. ;        CY:ON = ERROR ENCOUNTERED
  142. ;
  143. ;
  144. ;        DO INTIALIZATION.
  145. FCBMAK: DS    0
  146.     PUSH    BC        ;SAVE REGS.
  147.     PUSH    DE
  148. ;
  149. ;        CHECK FOR DISK CODE.
  150.     INX    HL        ;CHECK FOR ':'.
  151.     MOV    A,M
  152.     DCX    HL
  153.     CPI    ':'        ;':' PRESENT?
  154.     JNZ    MAK01        ;...NO.
  155. ;
  156. ;        SET DISK CODE.
  157.     MOV    A,M        ;GET IT.
  158.     SBI    'A'-1        ;MAKE 1-26 FOR 'A'-'Z'
  159.     JC    MAKEND        ;...ERROR.
  160.     CPI    26+1        ;RANGE CHECK.
  161.     CMC
  162.     JC    MAKEND
  163.     STAX    DE        ;PUT IT IN FCB.
  164.     INX    HL        ;BUMP PTR PAST DISK DRIVE.
  165.     INX    HL
  166.  
  167. ;        GET FILE NAME.
  168. MAK01:    DS    0
  169.     INX    DE        ;DE => FCBFN
  170.     MVI    C,8        ;SET FOR MAX OF 8 CHARS.
  171.     CALL    MAKNAM        ;GET IT.
  172. ;
  173. ;        GET OPTIONAL FILE TYPE.
  174.     MOV    A,M        ;GET NEXT CHAR.
  175.     INX    HL
  176.     CPI    '.'        ;PROPER SEPARATOR?
  177.     JNZ    MAKEND        ;...NO.
  178.     MVI    C,3        ;SET FOR MAX OF 3 CHARS.
  179.     CALL    MAKNAM        ;GET IT.
  180. ;
  181. ;        RETURN TO CALLER.
  182. MAKEND:    DS    0
  183.     POP    DE        ;RESTORE REGS.
  184.     POP    BC
  185.     RET
  186. ;
  187. ;        PROCESS THE NAME FIELD.
  188. MAKNAM:    DS    0
  189.     MOV    A,M        ;GET NEXT CHAR.
  190.     INX    HL        ;BUMP PTR.
  191.     CPI    '*'        ;FILL REST WITH '?'?
  192.     JZ    MAKNA2        ;...YES, DO IT.
  193.     CALL    MAKVAL        ;VALID CHAR?
  194.     JC    MAKNA4        ;...NO, STOP.
  195. MAKNA1: DS    0
  196.     STAX    DE        ;PUT CHAR IN FCB.
  197.     INX    DE        ;BUMP PTR.
  198.     DCR    C        ;DECR CNT.
  199.     JNZ    MAKNAM        ;LOOP FOR MAX CHARS.
  200.     CALL    MAKVAL        ;CHECK FOR TOO LONG.
  201.     CMC
  202.     RET
  203. MAKNA2:    DS    0        ;*** FILL REST WITH '?' ***
  204.     MVI    A,'?'
  205. MAKNA3:    DS    0
  206.     MVI    B,0
  207.     STAX    DE        ;PUT '?' IN FCB.
  208.     INX    DE
  209.     DCR    C
  210.     JNZ    $-3        ;LOOP FOR REST OF FIELD.
  211.     RET
  212. MAKNA4:    DS    0        ;*** SKIP FCB PTR TO END OF FIELD ***
  213.     MVI    A,' '        ;FILL REST WITH SPACES.
  214.     JMP    MAKNA3
  215. ;
  216. ;        VALIDATE NAME CHARACTER.
  217. MAKVAL:    DS    0
  218.     CPI    '#'
  219.     RZ
  220.     CPI    '$'
  221.     RZ
  222.     CPI    '%'
  223.     RZ
  224.     CPI    '?'
  225.     RZ
  226.     CPI    '0'    ;0-9
  227.     RC
  228.     CPI    '9'+1
  229.     CMC
  230.     RNC
  231.     CPI    'A'    ;A-Z
  232.     RC
  233.     CPI    'Z'+1
  234.     CMC
  235.     RNC
  236.     RET
  237.  
  238.  
  239. ;        * * *  PROGRAM CONSTANTS AND VARIABLES  * * *
  240.     DSEG
  241.     DS    32        ;PROGRAM STACK
  242. STACK:
  243. STRPTR: DW    0        ;INPUT STRING PTR
  244.  
  245. ;END        CHAIN.ASM
  246.     END
  247.