Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Umwandeln langer Dateinamen unter Windows NT

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
goooofy



Anmeldungsdatum: 12.09.2005
Beiträge: 69

BeitragVerfasst am: 11.08.2006, 13:33    Titel: Umwandeln langer Dateinamen unter Windows NT Antworten mit Zitat

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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz