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 / CPMUG036.ARK / MFACCESS.LIB < prev    next >
Text File  |  1984-04-29  |  2KB  |  133 lines

  1. ;
  2. ;    MUST BE ASSEMBLED BY "MAC"
  3. ;
  4. ;MULTI-FILE ACCESS SUBROUTINE.  ALLOWS PROCESSING
  5. ;OF MULTIPLE FILES (I.E. *.ASM) FROM DISK.  THIS
  6. ;ROUTINE BUILDS THE PROPER NAME IN THE FCB EACH
  7. ;TIME IT IS CALLED.  THIS COMMAND WOULD BE USED
  8. ;IN SUCH PROGRAMS AS MODEM TRANSFER, TAPE SAVE,
  9. ;ETC IN WHICH YOU WANT TO PROCESS SINGLE OR
  10. ;MULTIPLE FILES.
  11. ;
  12. ;JUST CALL "MFNAME" (Multiple File NAME) AND THE FCB
  13. ;WILL BE SET UP WITH THE NEXT NAME, READY TO
  14. ;DO NORMAL PROCESSING (OPEN, READ, ETC.)
  15. ;
  16. ;CARRY IS SET IF NO MORE NAMES CAN BE FOUND
  17. ;
  18. ;DEFINE DATA MOVE MACRO
  19. ;
  20. MOVE    MACRO    ?F,?T,?L,?I
  21.     IF    NOT NUL ?F
  22.     LXI    H,?F
  23.     ENDIF
  24.     IF    NOT NUL ?T
  25.     LXI    D,?T
  26.     ENDIF
  27.     IF    NOT NUL ?L
  28.     LXI    B,?L
  29.     ENDIF
  30.     IF    NOT NUL ?I
  31.     LOCAL    ?B,?Z
  32.     CALL    ?Z
  33. ?B    DB    ?I
  34. ?Z    POP    H    ;GET TO
  35.     LXI    B,?Z-?B
  36.     ENDIF
  37.     CALL    MOVER
  38. MF    SET    -1    ;;SHOW EXPANSION
  39.     ENDM
  40. ;
  41. ;DEFINE CP/M MACRO - CPM FNC,PARM
  42. ;
  43. CPM    MACRO    ?F,?P
  44.     PUSH    B
  45.     PUSH    D
  46.     PUSH    H
  47.     IF    NOT NUL ?F
  48.     MVI    C,?F
  49.     ENDIF
  50.     IF    NOT NUL ?P
  51.     LXI    D,?P
  52.     ENDIF
  53.     CALL    BDOS
  54.     POP    H
  55.     POP    D
  56.     POP    B
  57.     ENDM
  58. ;
  59. ;------------------------------------------------
  60. ;
  61. ;    MULTI-FILE ACCESS SUBROUTINE
  62. ;
  63. ;THE ROUTINE IS COMMENTED IN PSEUDO CODE,
  64. ;EACH PSEUDO CODE STATEMENT IS IN <<...>>
  65. ;
  66. MFNAME:
  67. ;<<INIT DMA ADDR, FCB>>
  68.  CPM STDMA,80H
  69.  XRA A ! STA FCBEXT
  70. ;<<IF FIRST TIME>>
  71.  LDA MFFLG1 ! ORA A ! JNZ MFN01
  72. ;  <<TURN OFF 1ST TIME SW>>
  73.  MVI A,1 ! STA MFFLG1
  74. ;  <<SAVE THE REQUESTED NAME>>
  75.  MOVE FCB,MFREQ,12 ;SAVE ORIG REQ
  76.  LDA FCB ! STA MFCUR ;SAVE DISK IN CURR FCB
  77. ;  <<SRCHF REQ NAME>>
  78.  MOVE MFREQ,FCB,12
  79.  CPM SRCHF,FCB
  80. ;<<ELSE>>
  81.  JMP MFN02
  82. MFN01:
  83. ;  <<SRCHF CURR NAME>>
  84.  MOVE MFCUR,FCB,12
  85.  CPM SRCHF,FCB
  86. ;  <<SRCHN REQ NAME>>
  87.  MOVE MFREQ,FCB,12
  88.  CPM SRCHN,FCB
  89. ;<<ENDIF>>
  90. MFN02:
  91. ;<<RETURN CARRY IF NOT FOUND>>
  92.  INR A ! STC ! RZ
  93. ;<<MOVE NAME FOUND TO CURR>>
  94.  DCR A ! ANI 3 ! ADD A
  95.  ADD A ! ADD A ! ADD A ! ADD A
  96.  ADI 81H ! MOV L,A ! MVI H,0
  97.  PUSH H ;SAVE NAME POINTER
  98.  MOVE ,MFCUR+1,11
  99. ;<<MOVE NAME FOUND TO FCB>>
  100.  POP H ! MOVE ,FCB+1,11
  101. ;<<SETUP FCB>>
  102.  XRA A ! STA FCBEXT
  103. ;<<RETURN>>
  104.  RET
  105. ;
  106. ;MULTI-FILE ACCESS WORK AREA
  107. ;
  108. MFFLG1    DB    0    ;1ST TIME SW
  109. MFREQ    DS    12    ;REQ NAME
  110. MFCUR    DS    12    ;CURR NAME
  111. ;------------------------------------------------
  112. ;
  113. ;MOVE SUBROUTINE
  114. ;
  115. MOVER    MOV    A,M
  116.     STAX    D
  117.     INX    H
  118.     INX    D
  119.     DCX    B
  120.     MOV    A,B
  121.     ORA    C
  122.     JNZ    MOVER
  123.     RET
  124. ;
  125. ;EQUATES USED BY MULTI-ACCESS SUBROUTINE
  126. ;
  127. SRCHF    EQU    17
  128. SRCHN    EQU    18
  129. BDOS    EQU    5
  130. FCB    EQU    5CH 
  131. FCBEXT    EQU    FCB+12
  132. FCBRNO    EQU    FCB+32
  133.