home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / xbase / library / clipper / sizedir / tamdir.asm next >
Encoding:
Assembly Source File  |  1988-06-08  |  3.1 KB  |  135 lines

  1.  
  2. ;-----------------------------
  3. ;  RUTINAS PARA HACER DE INTERFASE
  4. ;  CON CLIPPER
  5. ;  por Fernando García Tornero
  6. ;
  7. ;  Obtencion del tamaño de
  8. ;  un directorio
  9. ;
  10. ;  LLAMADA
  11. ;     Size_Dir = 0
  12. ;     DO WHILE .T.
  13. ;        ret = TamDir("PATH" +CHR(0))
  14. ;        IF ret = -1
  15. ;           EXIT
  16. ;        ENDIF
  17. ;        Size_Dir = Size_Dir + ret
  18. ;     ENDDO
  19. ;
  20. ;
  21. ;  versión 1.0   (8-6-88)
  22. ;-----------------------------
  23.  
  24.           INCLUDE extenda.mac
  25.  
  26.  
  27.  
  28. ;-------------------------------------------------------------
  29. DGROUP  GROUP   DATASG
  30. DATASG  SEGMENT PUBLIC  'DATA'
  31. ;-------------------------------------------------------------
  32.  
  33.  
  34.  
  35. __DTA Label word
  36. __reservados       db  21 dup(?)
  37. __atributo         db  ?
  38. __hora             dw  ?
  39. __fecha            dw  ?
  40. __tam_l            dw  ?
  41. __tam_h            dw  ?
  42. __nombre           db  13 dup(?)
  43.  
  44. ; ATRIBUTOS
  45. ; 01   solo lectura
  46. ; 02   oculto
  47. ; 04   del sistema
  48. ; 08   etiqueta de volumen
  49. ; 10   subdirectorio
  50. ; 20   bit de archivo
  51.  
  52. __Seg_DTA         dw  ?
  53. __Ofs_DTA         dw  ?
  54. __FLAG            db  0
  55.  
  56. DATASG   ENDS
  57.  
  58.  
  59. CODIGO SEGMENT  BYTE    'CODE'
  60.    assume CS:CODIGO, DS:DGROUP
  61.  
  62.  
  63.  
  64.         PUBLIC  TamDir
  65. TamDir  PROC    FAR
  66.         ;--------------------------------------------------
  67.         push    bp
  68.         mov     bp,sp
  69.         push    ds
  70.         push    es
  71.         ;--------------------------------------------------
  72.         cmp     __FLAG, 1
  73.         jne     first
  74.         jmp     next
  75. first:  mov     __FLAG, 1
  76.         GET_PCOUNT
  77.         cmp     ax,1          ; un parametro?
  78.         jz      td1           ; si seguir
  79.         jmp     error         ; tamaño = -1
  80.         ;--------------------------------------------------
  81. td1:    GET_PTYPE 1
  82.         cmp     ax,CHARACTER  ; de tipo caracter
  83.         jz      td2           ; si seguir
  84.         jmp     error         ; tamaño = -1
  85.         ;--------------------------------------------------
  86.  
  87. td2:    mov     ah,2Fh       ; obtener DTA actual
  88.         int     21h           ; se devuelve en ES:BX
  89.         mov     __Seg_DTA, es
  90.         mov     __Ofs_DTA, bx
  91.         mov     dx, OFFSET DGROUP:__DTA
  92.         mov     ah, 1Ah       ; fijar DTA
  93.         int     21h
  94.  
  95.         GET_CHAR 1            ; devuelve segmento y offset en AX:BX
  96.         push    ds
  97.         mov     ds, ax
  98.         mov     dx, bx
  99.         mov     cx, 27h        ; atributos de busqueda
  100.         mov     ah, 4Eh
  101.         int     21h
  102.         pop     ds
  103.         jc      err
  104.         jmp     salir
  105. next:   mov     ah, 4Fh
  106.         int     21h
  107.         jc      err
  108.         jmp     salir
  109.  
  110.        ;--------------------------------------------------
  111. err:    push    ds
  112.         mov     dx, __Ofs_DTA
  113.         mov     ax, __Seg_DTA
  114.         mov     ds, ax
  115.         mov     ah, 1Ah
  116.         int     21h
  117.         pop     ds
  118.  
  119. error:  mov     __tam_h, -1
  120.         mov     __tam_l, -1
  121.         mov     __FLAG, 0
  122.  
  123. salir:  mov     dx, __tam_h
  124.         mov     ax, __tam_l
  125.         pop     es
  126.         pop     ds
  127.         pop     bp
  128.         RET_LONG dx,ax
  129.         ret
  130. TamDir  ENDP
  131.  
  132. CODIGO  ENDS
  133.  
  134.         END
  135.