home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / ZCPR33 / Z3-33 / Z33TRC11.LBR / RCPX.ZZ0 / RCPX.Z80
Text File  |  2000-06-30  |  6KB  |  245 lines

  1. ; Program:    RCPX
  2. ; Version:    1.0
  3. ; Author:    Cameron W. Cotrill
  4. ; Date:     Sept 17, 1987
  5. ; Derivation:    NONE
  6. ;
  7. ; Remove routine for Z33TRCP.  This can be extended to cover removal
  8. ; of other Plu*Perfect RSX's if desired.  Error handler hooks are
  9. ; included.  If all goes well, no screen output is done.
  10. ;
  11. ; RCPX has 2 options:
  12. ;    // will display help as any normal ZCPR utility.
  13. ;    N will supress error handler if Z33TRCP not present.  This
  14. ;    option will find most use in aliases to invoke memory hungry
  15. ;    programs.
  16. ;
  17. ; RCPX is copyright 1987 by Cameron W. Cotrill.  All rights reserved.
  18. ; End-user distribution and duplication permitted for non-commercial
  19. ; purposes only without prior written permission from the author.
  20. ; Permission to use routines from RCPX in other programs subject to
  21. ; the above mentioned distribution and duplication restrictions is
  22. ; automatically granted provided the source of the routines is noted
  23. ; in both the source code and documentation and the copyright notice
  24. ; is retained.
  25. ;
  26. VERMAJ    EQU    1        ; Major version number
  27. VERMIN    EQU    0        ; Minor version number
  28.  
  29. OS$BASE    EQU    0        ; Base address of system
  30. BDOS    EQU    OS$BASE+5
  31. FCB1    EQU    OS$BASE+5CH
  32. CR    EQU    0DH
  33. LF    EQU    0AH
  34.  
  35.     CSEG
  36. RCPX:
  37.     JP    START
  38.     DB    'Z3ENV'        ; Normal type 3 env header
  39.     DB    3
  40. ENVADR:
  41.     DW    0
  42.     DW    RCPX
  43. ;
  44. START:
  45.     LD    (OLDSP),SP
  46.     LD    SP,STACK    ; Set up program stack
  47.     LD    A,(FCB1+1)
  48.     CP    '/'
  49.     JR    Z,HELP        ; See if help 
  50.     CALL    CKRSX        ; See if we really have a plu*perfect rsx
  51.     JR    NZ,TSTERR    ; No rsx, then error
  52.     LD    DE,TRCPNAME    ; Ok, see if it's the rsx we want
  53.     CALL    RSXNCP        ; Compare rsx id to target
  54.     JP    NZ,TSTERR    ; Not it - error
  55.     CALL    RSXDEL        ; Else try removal
  56.     CALL    NC,RSXERR    ; If won't remove
  57. RCPX1:
  58.     LD    SP,(OLDSP)    ; Restore user stack
  59.     RET            ; And return
  60. ;
  61. TSTERR:
  62.     LD    A,(FCB1+1)
  63.     CP    'N'        ; See if not present error supressed
  64.     CALL    NZ,RSXERR    ; If not, trip the error handler
  65.     JR    RCPX1        ; And exit
  66. ;
  67. HELP:
  68.     LD    DE,HELPM
  69.     LD    C,9
  70.     CALL    BDOS        ; Give help
  71.     JR    RCPX1
  72. ;
  73. HELPM:
  74.     DB    'RCPX V',VERMAJ+'0','.',VERMIN+'0',CR,LF
  75.     DB    'Copyright (C) 1987  Cameron W. Cotrill',CR,LF,LF
  76.     DB    'Removes Z33TRCP temporary RCP buffer from memory.  Syntax:',CR,LF
  77.     DB    '  RCPX N - N option supresses error report if Z33TRCP not present',CR,LF
  78.     DB    LF,'$'
  79. ;
  80. TRCPNAME:
  81.     DB    'Z33TRCP',0
  82. ;
  83.     DSEG
  84. OLDSP:
  85.     DW    0
  86.     DS    10H
  87. STACK:
  88.     PAGE
  89. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  90. ; ROUTINE:    CKRSX
  91. ; FUNCTION:    Check if Plu*Perfect type RSX present
  92. ; CALL PARAMS:    NONE
  93. ; RETURNS:    Z flag clear if no RSX, Z flag set if RSX present
  94. ;        HL = Base address of RSX header
  95. ; ALTERS:    AF,HL
  96. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  97. ;
  98.     CSEG
  99. CKRSX:
  100.     PUSH    BC
  101.     PUSH    DE
  102.     LD    HL,(OS$BASE+6)    ; Where is bdos pointing?
  103.     PUSH    HL        ; Save alleged rsx pointer
  104.     LD    A,0C3H        ; Jump opcode
  105.     LD    DE,3
  106.     LD    B,E
  107. CKRSX1:
  108.     CP    (HL)        ; Is jump?
  109.     JR    NZ,NOTRSX    ; No, then can't be pps rsx
  110.     ADD    HL,DE
  111.     DJNZ    CKRSX1        ; Keep checking
  112. ;
  113.     INC    HL
  114.     INC    HL
  115.     LD    E,(HL)
  116.     INC    HL
  117.     LD    D,(HL)        ; Get what should be pointer to rsx
  118.     INC    HL
  119.     EX    (SP),HL        ; Stash current pointer and get base addr
  120.     AND    A
  121.     SBC    HL,DE
  122.     JR    NZ,NOTRSX    ; If protect addr doesn't match rsx base
  123.     EX    DE,HL        ; Match so put in hl
  124.     EX    (SP),HL        ; Pointer in hl, rsx base on stack
  125.     INC    HL
  126.     INC    HL
  127.     CP    (HL)        ; This should be a jump also
  128. NOTRSX:
  129.     POP    HL        ; Restore base pointer
  130.     POP    DE
  131.     POP    BC
  132.     RET
  133.     PAGE
  134. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  135. ; ROUTINE:    RSXNCP
  136. ; FUNCTION:    Check if RSX matches the one we want
  137. ; CALL PARAMS:    DE = ID string to match (? matches any char except 
  138. ;             null).  Must be 0 terminated.
  139. ;        HL = Pointer to rsx header
  140. ; RETURNS:    Z flag clear if match, Z flag set if no match
  141. ; ALTERS:    AF
  142. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  143. ;
  144.     CSEG
  145. RSXNCP:
  146.     PUSH    BC
  147.     PUSH    DE
  148.     PUSH    HL
  149.     LD    BC,13        ; Offset to name pointer
  150.     ADD    HL,BC
  151.     LD    A,(HL)
  152.     INC    HL
  153.     LD    H,(HL)
  154.     LD    L,A        ; Fetch name pointer
  155. RSXNC1:
  156.     LD    A,(DE)        ; Get compare char
  157.     AND    A
  158.     JR    Z,RSXNCX    ; All matched
  159.     INC    (HL)
  160.     DEC    (HL)        ; Test if end of target
  161.     JR    Z,RSXNC3    ; Yes, then strings don't match
  162.     CP    '?'        ; Do we care what target is?
  163.     JR    Z,RSXNC2    ; If not
  164.     CP    (HL)        ; Test match
  165. RSXNC2:
  166.     INC    HL
  167.     INC    DE        ; Bump pointers
  168.     JR    Z,RSXNC1    ; And loop if matched
  169. RSXNC3:
  170.     XOR    A        ; No match so insure z flag clear
  171.     DEC    A
  172. RSXNCX:
  173.     POP    HL
  174.     POP    DE
  175.     POP    BC
  176.     RET
  177.     PAGE
  178. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  179. ; ROUTINE:    RSXDEL
  180. ; FUNCTION:    Remove lowest Plu*Perfect type RSX
  181. ; CALL PARAMS:    NONE
  182. ; RETURNS:    C flag clear if error, C flag set if remove OK
  183. ; ALTERS:    AF
  184. ; NOTES:    Be real sure an RSX is there before calling this.
  185. ;        otherwise, program leaps to the great beyond.
  186. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  187. ;
  188.     CSEG
  189. RSXDEL:
  190.     PUSH    BC
  191.     PUSH    DE
  192.     PUSH    HL
  193.     LD    HL,(OS$BASE+6)
  194.     LD    DE,6        ; Point to remove entry
  195.     ADD    HL,DE
  196.     LD    DE,RSXDE1
  197.     PUSH    DE        ; Return address
  198.     JP    (HL)        ; 'call' remove
  199. RSXDE1:
  200.     POP    HL
  201.     POP    DE
  202.     POP    BC
  203.     RET
  204. ;
  205.     PAGE
  206. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  207. ; ROUTINE:    RSXERR
  208. ; FUNCTION:    SET Z33 RSX REMOVAL ERROR
  209. ; CALL PARAMS:    NONE
  210. ; RETURNS:    NONE
  211. ; ALTERS:    NONE
  212. ; NOTE:     IT DOESN'T HURT TO CALL THIS ROUTINE EVEN IF
  213. ;        THE RSX IS SMART ENOUGH TO DO THIS ITSELF.
  214. ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  215. ;
  216.     CSEG
  217. RSXERR:
  218.     PUSH    AF
  219.     PUSH    BC
  220.     PUSH    HL
  221.     LD    HL,(ENVADR)
  222.     LD    A,H
  223.     OR    L
  224.     JR    Z,RSXERX    ; Exit if no env
  225.     LD    BC,22H        ; Offset to message buffer pointer
  226.     ADD    HL,BC
  227.     LD    A,(HL)
  228.     INC    HL
  229.     LD    H,(HL)
  230.     LD    L,A        ; Message pointer in hl
  231.     LD    (HL),21        ; Set rsx load error
  232.     INC    HL
  233.     INC    HL
  234.     INC    HL        ; Point to zcpr33 command status flags
  235.     LD    A,1110B        ; Transient, error, ecp flags set
  236.     OR    (HL)
  237.     LD    (HL),A
  238. RSXERX:
  239.     POP    HL
  240.     POP    BC
  241.     POP    AF
  242.     RET
  243. ;
  244.     END
  245.