home *** CD-ROM | disk | FTP | other *** search
-
- ;-----------------------------
- ; RUTINAS PARA HACER DE INTERFASE
- ; CON CLIPPER
- ; por Fernando García Tornero
- ;
- ; Obtencion del tamaño de
- ; un directorio
- ;
- ; LLAMADA
- ; Size_Dir = 0
- ; DO WHILE .T.
- ; ret = TamDir("PATH" +CHR(0))
- ; IF ret = -1
- ; EXIT
- ; ENDIF
- ; Size_Dir = Size_Dir + ret
- ; ENDDO
- ;
- ;
- ; versión 1.0 (8-6-88)
- ;-----------------------------
-
- INCLUDE extenda.mac
-
-
-
- ;-------------------------------------------------------------
- DGROUP GROUP DATASG
- DATASG SEGMENT PUBLIC 'DATA'
- ;-------------------------------------------------------------
-
-
-
- __DTA Label word
- __reservados db 21 dup(?)
- __atributo db ?
- __hora dw ?
- __fecha dw ?
- __tam_l dw ?
- __tam_h dw ?
- __nombre db 13 dup(?)
-
- ; ATRIBUTOS
- ; 01 solo lectura
- ; 02 oculto
- ; 04 del sistema
- ; 08 etiqueta de volumen
- ; 10 subdirectorio
- ; 20 bit de archivo
-
- __Seg_DTA dw ?
- __Ofs_DTA dw ?
- __FLAG db 0
-
- DATASG ENDS
-
-
- CODIGO SEGMENT BYTE 'CODE'
- assume CS:CODIGO, DS:DGROUP
-
-
-
- PUBLIC TamDir
- TamDir PROC FAR
- ;--------------------------------------------------
- push bp
- mov bp,sp
- push ds
- push es
- ;--------------------------------------------------
- cmp __FLAG, 1
- jne first
- jmp next
- first: mov __FLAG, 1
- GET_PCOUNT
- cmp ax,1 ; un parametro?
- jz td1 ; si seguir
- jmp error ; tamaño = -1
- ;--------------------------------------------------
- td1: GET_PTYPE 1
- cmp ax,CHARACTER ; de tipo caracter
- jz td2 ; si seguir
- jmp error ; tamaño = -1
- ;--------------------------------------------------
-
- td2: mov ah,2Fh ; obtener DTA actual
- int 21h ; se devuelve en ES:BX
- mov __Seg_DTA, es
- mov __Ofs_DTA, bx
- mov dx, OFFSET DGROUP:__DTA
- mov ah, 1Ah ; fijar DTA
- int 21h
-
- GET_CHAR 1 ; devuelve segmento y offset en AX:BX
- push ds
- mov ds, ax
- mov dx, bx
- mov cx, 27h ; atributos de busqueda
- mov ah, 4Eh
- int 21h
- pop ds
- jc err
- jmp salir
- next: mov ah, 4Fh
- int 21h
- jc err
- jmp salir
-
- ;--------------------------------------------------
- err: push ds
- mov dx, __Ofs_DTA
- mov ax, __Seg_DTA
- mov ds, ax
- mov ah, 1Ah
- int 21h
- pop ds
-
- error: mov __tam_h, -1
- mov __tam_l, -1
- mov __FLAG, 0
-
- salir: mov dx, __tam_h
- mov ax, __tam_l
- pop es
- pop ds
- pop bp
- RET_LONG dx,ax
- ret
- TamDir ENDP
-
- CODIGO ENDS
-
- END