home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / l / l040 / 13.ddi / RTLDOS.ZIP / EXPN.ASM < prev    next >
Encoding:
Assembly Source File  |  1992-10-28  |  1.8 KB  |  138 lines

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *    Turbo Pascal Runtime Library Version 5.5    *
  5. ; *    File Name Expansion Routine            *
  6. ; *                            *
  7. ; *    Copyright (C) 1988,89 Borland International    *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     TITLE    EXPN
  12.  
  13.     LOCALS    @@
  14.  
  15. CODE    SEGMENT    BYTE PUBLIC
  16.  
  17.     ASSUME    CS:CODE
  18.  
  19.     PUBLIC    FExpand
  20.  
  21. FExpand        PROC    FAR
  22.  
  23. ResultP        EQU    (DWORD PTR [BP+10])
  24. PathP        EQU    (DWORD PTR [BP+6])
  25.  
  26.     PUSH    BP
  27.     MOV    BP,SP
  28.     PUSH    DS
  29.     CLD
  30.     LDS    SI,PathP
  31.     LODSB
  32.     MOV    CL,AL
  33.     XOR    CH,CH
  34.     ADD    CX,SI
  35.     LES    DI,ResultP
  36.     INC    DI
  37.     LODSW
  38.     CMP    SI,CX
  39.     JA    @@1
  40.     CMP    AH,':'
  41.     JNE    @@1
  42.     CMP    AL,'a'
  43.     JB    @@2
  44.     CMP    AL,'z'
  45.     JA    @@2
  46.     SUB    AL,20H
  47.     JMP    SHORT @@2
  48. @@1:    DEC    SI
  49.     DEC    SI
  50.     MOV    AH,19H            ;Get current drive
  51.     INT    21H
  52.     ADD    AL,'A'
  53.     MOV    AH,':'
  54. @@2:    STOSW
  55.     CMP    SI,CX
  56.     JE    @@21
  57.     CMP    BYTE PTR [SI],'\'
  58.     JE    @@3
  59. @@21:    SUB    AL,'A'-1
  60.     MOV    DL,AL
  61.     MOV    AL,'\'
  62.     STOSB
  63.     PUSH    SI
  64.     PUSH    DS
  65.     MOV    AH,47H            ;Get current directory
  66.     MOV    SI,DI
  67.     PUSH    ES
  68.     POP    DS
  69.     INT    21H
  70.     POP    DS
  71.     POP    SI
  72.     JC    @@3
  73.     CMP    BYTE PTR ES:[DI],0
  74.     JE    @@3
  75.     PUSH    CX
  76.     MOV    CX,-1
  77.     XOR    AL,AL
  78.     REPNE    SCASB
  79.     DEC    DI
  80.     MOV    AL,'\'
  81.     STOSB
  82.     POP    CX
  83. @@3:    SUB    CX,SI
  84.     REP    MOVSB
  85.     XOR    AL,AL
  86.     STOSB
  87.     LDS    SI,ResultP
  88.     INC    SI
  89.     MOV    DI,SI
  90.     PUSH    DI
  91. @@4:    LODSB
  92.     OR    AL,AL
  93.     JE    @@6
  94.     CMP    AL,'\'
  95.     JE    @@6
  96.     CMP    AL,'a'
  97.     JB    @@5
  98.     CMP    AL,'z'
  99.     JA    @@5
  100.     SUB    AL,20H
  101. @@5:    STOSB
  102.     JMP    @@4
  103. @@6:    CMP    WORD PTR [DI-2],'.\'
  104.     JNE    @@7
  105.     DEC    DI
  106.     DEC    DI
  107.     JMP    SHORT @@9
  108. @@7:    CMP    WORD PTR [DI-2],'..'
  109.     JNE    @@9
  110.     CMP    BYTE PTR [DI-3],'\'
  111.     JNE    @@9
  112.     SUB    DI,3
  113.     CMP    BYTE PTR [DI-1],':'
  114.     JE    @@9
  115. @@8:    DEC    DI
  116.     CMP    BYTE PTR [DI],'\'
  117.     JNE    @@8
  118. @@9:    OR    AL,AL
  119.     JNE    @@5
  120.     CMP    BYTE PTR [DI-1],':'
  121.     JNE    @@10
  122.     MOV    AL,'\'
  123.     STOSB
  124. @@10:    MOV    AX,DI
  125.     POP    DI
  126.     SUB    AX,DI
  127.     DEC    DI
  128.     STOSB
  129.     POP    DS
  130.     POP    BP
  131.     RET    4
  132.  
  133. FExpand        ENDP
  134.  
  135. CODE    ENDS
  136.  
  137.     END
  138.