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 / SIMTEL / CPMUG / CPMUG025.ARK / MYMAC.LIB < prev    next >
Text File  |  1984-04-29  |  6KB  |  282 lines

  1. ; ==========================================
  2. ; : M Y M A C  -  RCM MACRO LIBRARY        :
  3. ; :    VERSION 2.0      7/10/78            :
  4. ; :        R. C. Minnick                   :
  5. ; :          Box 306                       :
  6. ; :      Ouray, Colorado 81427             :
  7. ; ==========================================
  8. ;
  9. ; *********************
  10. ; *   F I N D P A R   *   -   FIND NEXT PARAMETER
  11. ; *********************
  12. ; FIND NEXT PARM IN TBUFF.  IF BEYOND THE PARM
  13. ; FIELD, RETURN CY=1.  IF WITHIN, RETURN HL POINTING
  14. ; TO FIRST CHAR OF PARM, & BC=PARM LENGTH (B=0 ALWAYS).
  15. ; (NOTE THAT SCAN CAN BE MADE ONLY ONCE)
  16. ;
  17. FINDPAR    MACRO
  18.     LOCAL    OVER,LOCL,LOCH,PTR,LENG
  19.     JMP    OVER
  20. ;; LOCATE FIRST CHAR LSS 30H. CALL WITH HL
  21. ;; POINTING 1 BELOW FIELD & WITH B=REMAINING LENGTH
  22. ;; FOR ENTIRE PARM FIELD.
  23. LOCL:    XRA    A    ;; CLEAR CY
  24.     INX    H    ;;PTR
  25.     DCR    B    ;;LENGTH
  26.     JNZ    $+5    ;;STILL IN FIELD
  27.     STC
  28.     RET        ;;BEYOND FIELD
  29.     MOV    A,M    ;;DATUM
  30.     CPI    30H
  31.     JNC    LOCL
  32.     XRA    A    ;;CLEAR CY
  33.     RET        ;;HL POINTS TO FIRST CHAR LSS 30H
  34. ;; LOCATE FIRST CHAR GEQ 30H.  CALL WITH HL
  35. ;; POINTING 1 BELOW FIELD & WITH B=REMAINING LENGTH
  36. ;; FOR ENTIRE PARM FIELD.
  37. LOCH:    XRA    A    ;;CLEAR CY
  38.     INX    H    ;;PTR
  39.     DCR    B    ;;LENGTH
  40.     JNZ    $+5    ;;STILL IN FIELD
  41.     STC
  42.     RET        ;;BEYOND FIELD
  43.     MOV    A,M    ;;DATUM
  44.     CPI    30H
  45.     JC    LOCH
  46.     RET        ;;HL POINTS TO FIRST DATUM GEQ 30H
  47. ;; LOAD 1+REMAINING STRING LENGTH TO B & CURRENT PTR TO HL
  48. ;;
  49. PTR:    DW    80H    ;;CURRENT PTR
  50. LENG:    DS    1    ;;CURRENT STRING LENGTH
  51. ;;
  52. @FINDP:    LDA    LENG    ;;LOAD REGISTERS
  53.     MOV    B,A
  54.     LHLD    PTR
  55.     CALL    LOCL    ;;NEXT LSS 30H
  56.     RC        ;;BEYOND PARM FIELD
  57.     CALL    LOCH    ;;NEXT GEQ 30H
  58.     RC        ;;BEYOND PARM FIELD
  59.     SHLD    PTR    ;;SAVE PTR
  60.     MOV    A,B
  61.     STA    LENG    ;;SAVE PRESENT STR LENGTH
  62.     PUSH    H    ;;SAVE
  63.     CALL    LOCL    ;;NOW HL PTS TO END+1, CURRENT PARM
  64.     MOV    A,L
  65.     POP    H
  66.     SUB    L    ;;A=LENGTH, CURRENT PARM
  67.     MOV    C,A
  68.     MVI    B,0
  69.     XRA    A    ;;CLEAR CY
  70.     RET
  71. ;;
  72. OVER:    LDA    80H
  73.     INR    A
  74.     STA    LENG    ;;SET UP ORIG LENGTH+1
  75. ;;
  76. FINDPAR    MACRO
  77.     CALL    @FINDP
  78.     ENDM
  79.     FINDPAR
  80.     ENDM
  81. ;
  82. ;======================================================
  83. ;
  84. ; *****************
  85. ; *   M F I L E   *  -  MATCH FILE
  86. ; *****************
  87. ;
  88. ; COMPARE STRING AGAINST SEQUENTIAL INPUT FILE STARTING AT FILE'S
  89. ; PRESENT POSITION.  NOTE: MUST USE FILE MACRO PRIOR TO
  90. ; USING MFILE MACRO.
  91. ;
  92. ; MFILE FILEID,'LITERAL STRING'
  93. ; MFILE FILEID,STRINGPOINTER,STRINGLENGTH
  94. ; MFILE FILEID
  95. ;
  96. ; (IN LAST, ASSUME HL=STRINGPOINTER & C=STRINGLENGTH LOADED)
  97. ;
  98. ; RETURNS ZF=1 FOR MATCH, WITH SEQUENTIAL FILE POSITIONED
  99. ; SO NEXT GET FINDS THE NEXT CHARACTER AFTER STRING.
  100. ; RETURNS ZF=0 IF EOF REACHED WITH NO MATCH.
  101. ;
  102. MFILE    MACRO    FILEID,STRING,LENGTH
  103.     LOCAL    MLOOP,FAIL,GOOD,EOFI,OVERSUB
  104.     JMP    OVERSUB
  105. ;; FILE MATCH SUBROUTINE.  HL=RUNNING PTR, C=RUNNING LENGTH
  106. @MFILE:    PUSH    B
  107.     PUSH    H    ;;SAVES
  108. MLOOP:    INR    C    ;;IN CASE C=0
  109.     DCR    C
  110.     JZ    GOOD    ;;COMPLETE MATCH FOUND
  111.     PUSH    B
  112.     PUSH    H
  113. @MFSRX:    CALL    GET&FILEID    ;;SET UP BY FILE MACRO
  114.     POP    H
  115.     POP    B
  116.     CPI    1AH
  117.     JZ    EOFI    ;;EOF DETECTED
  118.     SUB    M
  119.     JNZ    FAIL    ;;CURRENT MATCH FAILED
  120.     INX    H    ;;THIS CHAR MATCHES
  121.     DCR    C    ;;REMAINING COUNT
  122.     JMP    MLOOP    ;;CONTINUE MATCHING THIS STRING
  123. FAIL:    POP    H
  124.     POP    B
  125.     JMP    @MFILE    ;;START MATCHING ALL OVER
  126. GOOD:    XRA    A
  127.     POP    H
  128.     POP    B
  129.     RET
  130. EOFI:    MVI    A,0FFH
  131.     ORA    A
  132.     POP    H
  133.     POP    B
  134.     RET
  135. ;;
  136. OVERSUB:
  137. MFILE    MACRO    ?INF,?STR,?LEN
  138.     LOCAL    LITSTR,ENDLIT
  139.     LXI    H,GET&?INF
  140.     SHLD    @MFSRX+1    ;;SET UP PROPER CALL
  141.     IF    NUL ?STR&?LEN
  142.     CALL    @MFILE
  143.     ELSE
  144.     IF    NUL ?LEN    ;;TEST FOR LITERAL
  145.     MVI    C,ENDLIT-LITSTR    ;;LIT STR LENGTH
  146.     LXI    H,LITSTR    ;;BASE OF LIT STR
  147.     CALL    @MFILE
  148.     JMP    ENDLIT
  149. LITSTR:    DB    ?STR
  150. ENDLIT:
  151.     ELSE
  152.     IF    NOT NUL ?STR
  153.     LXI    H,?STR
  154.     ENDIF
  155.     MVI    C,?LEN
  156.     CALL    @MFILE
  157.     ENDIF
  158.     ENDIF
  159.     ENDM
  160.     MFILE    FILEID,STRING,LENGTH
  161.     ENDM
  162. ;
  163. ;================================================================
  164. ;
  165. ; ***********************
  166. ; *   A D D N A M       *   ADD TO NAME MACRO
  167. ; ***********************
  168. ;
  169. ; ADD TO NAME.  INTO NAME POSITION 3-8 INSERTS FIELD REFERENCED
  170. ; BY POINTER FIELDAD, AND OF LENGTH LEN.
  171. ;
  172. ; REQUIRES MACRO.LIB 
  173. ;
  174. ADDNAM    MACRO    FILEID,FIELDAD,LEN
  175. ;; CREATE COPY OF OLD FCB, 16 BYTES HIGHER
  176.     MOVE    FCB&FILEID,FCB&FILEID+16,16
  177. ;; INSERT FIELD INTO NEW FCB
  178.     MOVE    FIELDAD,FCB&FILEID+19,LEN
  179. ;; ERASE POSSIBLE OLD FILE
  180.     LXI    D,FCB&FILEID+16
  181.     MVI    C,19
  182.     CALL    5
  183. ;; DO RENAME
  184.     LXI    D,FCB&FILEID
  185.     MVI    C,23
  186.     CALL    5
  187.     ENDM
  188. ;
  189. ;===============================================================
  190. ;
  191. ; ***********************
  192. ; *   G E T S T R       *  GET STRING FROM SEQUENTIAL FILE
  193. ; ***********************
  194. ;
  195. ; GET STRING FROM SEQUENTIAL FILE NAMED FILEID, AND PUT IT
  196. ; IN RAM STARTING AT PTR.  STRING IS OF LENGTH LENG
  197. ;
  198. ; SYNTAX:      GETSTR    FILEID,PTR,LENG
  199. ;
  200. GETSTR    MACRO    FILEID,PTR,LENG
  201.     LOCAL    OVER
  202.     JMP    OVER
  203. @GETSR:    INR    C
  204.     DCR    C    ;;IN CASE C=0
  205.     RZ        ;;DONE
  206.     PUSH    H
  207.     PUSH    B
  208. @GTSRX:    CALL    GET&FILEID
  209.     POP    B
  210.     POP    H
  211.     MOV    M,A    ;;STORE
  212.     INX    H
  213.     DCR    C
  214.     JMP    @GETSR
  215. OVER:
  216. GETSTR    MACRO    ?FID,?STR,?LEN
  217.     LXI    H,PUT&?FID
  218.     SHLD    @GTSRX+1    ;;SET UP PROPER CALL
  219.     LXI    H,?STR
  220.     MVI    C,?LEN
  221.     CALL    @GETSR
  222.     ENDM
  223.     GETSTR    FILEID,PTR,LENG
  224.     ENDM
  225. ;
  226. ;================================================================
  227. ;
  228. ; **********************
  229. ; *   P U T S T R      *  PUT STRING TO SEQUENTIAL FILE
  230. ; **********************
  231. ;
  232. ; HL=POINTER TO STRING, C=STRING LENGTH
  233. ; SYNTAX:
  234. ;
  235. ; PUTSTR    FILEID,'LITERAL STRING'
  236. ; PUTSTR    FILEID,POINTER,LENGTH
  237. ; PUTSTR    FILEID
  238. ;
  239. PUTSTR    MACRO    FILEID,PTR,LENG
  240.     LOCAL    OVER
  241.     JMP    OVER
  242. @PUTSR:    INR    C
  243.     DCR    C    ;;IN CASE C=0
  244.     RZ        ;;DONE
  245.     MOV    A,M    ;;DATUM
  246.     PUSH    H
  247.     PUSH    B
  248. @PTSRX:    CALL    PUT&FILEID
  249.     POP    B
  250.     POP    H
  251.     INX    H
  252.     DCR    C
  253.     JMP    @PUTSR
  254. OVER:
  255. PUTSTR    MACRO    ?FID,?STR,?LEN
  256.     LOCAL    LITSTR,ENDLIT
  257.     LXI    H,PUT&?FID
  258.     SHLD    @PTSRX+1    ;;SETUP PROPER CALL
  259.     IF    NUL ?STR&?LEN    ;;EVERYTHING LOADED
  260.     CALL    @PUTSR
  261.     ELSE
  262.     IF    NUL ?LEN    ;;LITERAL
  263.     MVI    C,ENDLIT-LITSTR
  264.     LXI    H,LITSTR
  265.     CALL    @PUTSR
  266.     JMP    ENDLIT
  267. LITSTR:    DB    ?STR
  268. ENDLIT:
  269.     ELSE
  270.     IF    NOT NUL ?STR
  271.     LXI    H,?STR
  272.     ENDIF
  273.     MVI    C,?LEN
  274.     CALL    @PUTSR
  275.     ENDIF
  276.     ENDIF
  277.     ENDM
  278.     PUTSTR    FILEID,PTR,LENG
  279.     ENDM
  280. ;
  281. ;===============================================================
  282.