goooofy
Anmeldungsdatum: 12.09.2005 Beiträge: 69
|
Verfasst am: 11.08.2006, 12:33 Titel: Umwandeln langer Dateinamen unter Windows NT |
|
|
Hallo,
kann mir jemand erklären, weshalb die folgende Funktion zum Umwandeln langer Pfade/Dateinamen in Dos-kompatible unter ALLEN Windows-Versionen funktioniert, nur nicht unter NT 4.0? Hier wird immer ein Null-String zurückgegeben. Da der Code nicht von mir ist, wäre es nett, wenn ihr mir konkret sagen könntet, welche Werte ich wie verändern muss, damit es auch unter NT geht.
| Code: | FUNCTION lfn.l2s$ (longname$)
asm$ = ""
asm$ = asm$ + CHR$(&H55) 'PUSH BP
asm$ = asm$ + CHR$(&H89) + CHR$(&HE5) 'MOV BP,SP
asm$ = asm$ + CHR$(&H57) 'PUSH DI
asm$ = asm$ + CHR$(&H6) 'PUSH ES
asm$ = asm$ + CHR$(&H56) 'PUSH SI
asm$ = asm$ + CHR$(&H1E) 'PUSH DS
asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6) 'MOV BX,[BP+06]
asm$ = asm$ + CHR$(&H8B) + CHR$(&H3F) 'MOV DI,[BX]
asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8) 'MOV BX,[BP+08]
asm$ = asm$ + CHR$(&H8E) + CHR$(&H7) 'MOV ES,[BX]
asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA) 'MOV BX,[BP+0A]
asm$ = asm$ + CHR$(&H8B) + CHR$(&H37) 'MOV SI,[BX]
asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HC) 'MOV BX,[BP+0C]
asm$ = asm$ + CHR$(&H8E) + CHR$(&H1F) 'MOV DS,[BX]
asm$ = asm$ + CHR$(&HB8) + CHR$(&H60) + CHR$(&H71) 'MOV AX,7160
asm$ = asm$ + CHR$(&HB9) + CHR$(&H1) + CHR$(&H0) 'MOV CX,0001
asm$ = asm$ + CHR$(&HCD) + CHR$(&H21) 'INT 21
asm$ = asm$ + CHR$(&H1F) 'POP DS
asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA) 'MOV BX,[BP+0A]
asm$ = asm$ + CHR$(&H89) + CHR$(&H7) 'MOV [BX],AX
asm$ = asm$ + CHR$(&HB8) + CHR$(&H0) + CHR$(&H0) 'MOV AX,0000
asm$ = asm$ + CHR$(&H15) + CHR$(&H0) + CHR$(&H0) 'ADC AX,0000
asm$ = asm$ + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HC) 'MOV BX,[BP+0C]
asm$ = asm$ + CHR$(&H89) + CHR$(&H7) 'MOV [BX],AX
asm$ = asm$ + CHR$(&H5E) 'POP SI
asm$ = asm$ + CHR$(&H7) 'POP ES
asm$ = asm$ + CHR$(&H5F) 'POP DI
asm$ = asm$ + CHR$(&H5D) 'POP BP
asm$ = asm$ + CHR$(&HCA) + CHR$(&H12) + CHR$(&H0) 'RETF 0012
lfn.longname$ = longname$ + CHR$(0)
lfn.shortname$ = SPACE$(67)
lfn.longnameseg% = SSEG(lfn.longname$)
lfn.longnameoff% = SADD(lfn.longname$)
lfn.shortnameseg% = SSEG(lfn.shortname$)
lfn.shortnameoff% = SADD(lfn.shortname$)
DEF SEG = SSEG(asm$)
CALL absolute(dummy%, dummy%, dummy%, dummy%, dummy%, lfn.longnameseg%, lfn.longnameoff%, lfn.shortnameseg%, lfn.shortnameoff%, SADD(asm$))
DEF SEG
iserror% = lfn.longnameseg%
errorcode% = lfn.longnameoff%
IF iserror% THEN
errval = errorcode%
ELSE
errval = 0
shortname$ = ""
FOR i% = 1 TO 67
ch$ = MID$(lfn.shortname$, i%, 1)
IF ch$ <> CHR$(0) THEN
shortname$ = shortname$ + ch$
ELSE
EXIT FOR
END IF
NEXT
lfn.l2s$ = shortname$
END IF
END FUNCTION |
|
|