home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / clarion / readdir.zip / READDIR.ASM < prev    next >
Assembly Source File  |  1989-12-19  |  4KB  |  160 lines

  1.     PAGE    60,120
  2. ;----------------------------------------------------------------------------;
  3. ;
  4. ;   LEM MODULE: READDIR.ASM
  5. ;
  6. ;----------------------------------------------------------------------------;
  7. _TEXT    SEGMENT PUBLIC BYTE 'CODE'
  8. _TEXT    ENDS
  9. _DATA    SEGMENT PUBLIC BYTE 'DATA'
  10. _DATA    ENDS
  11. _BSS    SEGMENT PUBLIC BYTE 'BSS'
  12. _BSS    ENDS
  13. _END    SEGMENT PUBLIC BYTE 'LEMEND'
  14. _END    ENDS
  15. DGROUP    GROUP    _TEXT,_DATA,_BSS,_END
  16.  
  17.  
  18. ; L.E.M.  equates
  19. TSTRING EQU    0            ;String
  20. TSHORT    EQU    1            ;Signed word (16 bits)
  21. TLONG    EQU    2            ;Signed double word (32 bits)
  22. TREAL    EQU    4            ;Double precision float (8087)
  23. PROCEDURE    EQU    0        ;L.E.M. procedure
  24. FUNCTION    EQU    1        ;L.E.M. function
  25. NAMELTH = 0                ;Define NAMELTH for macro
  26.  
  27.  
  28. ;----------------------------------------------------------------------------;
  29. ; L.E.M.  macro
  30. ;    ROUTINE 'ROUTINE NAME', ROUTINE_PROC_LABEL, ROUTINE_TYPE,
  31. ;            NUMBER_OF_PARAMETERS
  32. ;----------------------------------------------------------------------------;
  33.  
  34.  
  35. ROUTINE MACRO    RNAME, RPROC, RTYPE, RPARMS
  36.     LOCAL    LBLSTRT
  37. LBLSTRT DB    &RNAME
  38. NAMELTH =    $-LBLSTRT        ;;Padd name with nulls to 13 bytes
  39.     IF NAMELTH GT 12
  40.       .ERR
  41.       %OUT routine name too long
  42.     ELSE
  43.       DB    13-NAMELTH DUP (0)    ;;Rest of name area
  44.       DW    &RPROC            ;;Offset within binary module
  45.       DB    &RTYPE            ;;Routine type = PROCEDURE or FUNCTION
  46.       DB    &RPARMS            ;;Number of parameters
  47.     ENDIF
  48.     ENDM                ;;End of macro
  49.  
  50.  
  51. ;----------------------------------------------------------------------------;
  52. ; L.E.M.  macro
  53. ;    PARAMETER LABEL_OF_PARAMETER, TYPE_OF_PARAMETER
  54. ;----------------------------------------------------------------------------;
  55.  
  56. PARAMETER    MACRO    PLBL, PTYPE
  57.     DB    &PTYPE            ;;Type = STRING, SHORT, LONG, or REAL
  58. &PLBL    DD    0            ;;Address of PARAMETER data
  59. &PLBL&L DW    0            ;;Length of PARAMETER data
  60.     ENDM
  61.  
  62.  
  63.     EXTRN    FINDFIRSTC:NEAR
  64.     EXTRN    FINDNEXTC:NEAR
  65.  
  66. ;------------------------------------------
  67.  
  68. _TEXT    SEGMENT PUBLIC BYTE 'CODE'
  69.     ASSUME CS:DGROUP,DS:DGROUP
  70.  
  71.     DB    'BIO'
  72.     PUBLIC    LIBVEC
  73. LIBVEC    DD    0
  74.     DW    DGROUP:BINEND
  75.     DB     2            ;NUMBER OF ROUTINES
  76.  
  77.  
  78. ;------------------------------------------
  79.  
  80.     ROUTINE        'FINDFIRST', ASM_FINDFIRST, PROCEDURE, 2
  81.     PARAMETER    ASM_FINDFIRST1,TSTRING
  82.     PARAMETER    ASM_FINDFIRST2,TSTRING
  83.  
  84. ;------------------------------------------
  85.  
  86.     ROUTINE        'FINDNEXT', ASM_FINDNEXT, PROCEDURE, 1
  87.     PARAMETER    ASM_FINDNEXT1,TSTRING
  88.  
  89. ;------------------------------------------
  90.  
  91.     PUBLIC    _errno
  92. _errno    DW    0
  93.  
  94.  
  95. ;------------------------------------------
  96.  
  97. ;    Calling your 'Pascal' function as follows
  98. ; findfirstc( (char *) a, (int) a_len, (char *) b );
  99.  
  100. ASM_FINDFIRST    PROC    FAR
  101.     LES    BX,ASM_FINDFIRST1
  102.     PUSH    ES
  103.     PUSH    BX
  104.     MOV    AX,ASM_FINDFIRST1L
  105.     PUSH    AX
  106.  
  107.     LES    BX,ASM_FINDFIRST2
  108.     PUSH    ES
  109.     PUSH    BX
  110.  
  111.     CALL    FINDFIRSTC            ;Calling your 'Pascal' function!!!
  112.  
  113.     RET
  114. ASM_FINDFIRST    ENDP
  115.  
  116.  
  117. ;------------------------------------------
  118.  
  119. ;    Calling your 'Pascal' function as follows
  120. ; findnextc( (char *) a );
  121.  
  122. ASM_FINDNEXT    PROC    FAR
  123.     LES    BX,ASM_FINDNEXT1
  124.     PUSH    ES
  125.     PUSH    BX
  126.  
  127.     CALL    FINDNEXTC            ;Calling your 'Pascal' function!!!
  128.  
  129.     RET
  130. ASM_FINDNEXT    ENDP
  131.  
  132. ;----------------------------------------------------------------------------;
  133. ; setclaerr(int error_code)
  134. ; Set error returned by ERROR() and ERRORCODE()
  135. ;----------------------------------------------------------------------------;
  136.  
  137.     PUBLIC    _setclaerr
  138. _setclaerr PROC NEAR
  139.     PUSH    BP
  140.     MOV    BP,SP
  141.     PUSH    ES        ;Save used registers
  142.     PUSH    DI
  143.     MOV    AH,0FFh        ;Get address of GLOBERR
  144.     MOV    AL,29
  145.     CALL    DWORD PTR LIBVEC
  146.     MOV    AX,4[BP]    ;Get error code
  147.     MOV    ES:[DI],AX    ;Set GLOBERR
  148.     POP    DI        ;Restore used registers
  149.     POP    ES
  150.     POP    BP
  151.     RET            ;Return to caller in L.E.M.
  152. _setclaerr ENDP
  153.  
  154. _TEXT    ENDS
  155.  
  156. _END    SEGMENT PUBLIC BYTE 'LEMEND'
  157. BINEND    DB    0
  158. _END    ENDS
  159.     END
  160.