goooofy
Anmeldungsdatum: 12.09.2005 Beiträge: 69
|
Verfasst am: 11.08.2006, 13: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 |
|
|