amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > DosList Namen ? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

24.01.2008, 17:56 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Ich scanne eine DosList durch:

code:
*doslist.DosList = LockDosList_(flags)
If *doslist
  Repeat
    *doslist = NextDosEntry_(*doslist,flags)
    If *doslist
      name.s = ???
    End If
  Until *doslist = 0
  UnLockDosList_(flags)
End If


Wie komme ich an den namen des Eintrags ?
Ziel ist es, wahlweise Device, Assign und Volumenamen (mit flags = LDF_DEVICES, LDF_...) zu finden.
Grundsätzlich werden diese auch gefunden, aber ich kann den Namen nicht extrahieren.

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

24.01.2008, 18:10 Uhr

thomas
Posts: 7680
Nutzer
@Der_Wanderer:

code:
BSTR        dol_Name;         /* BPTR to a BSTR formatted name string */


Deine Sprache kann/kenne ich nicht, deshalb mache ich Pseudo-Code:

code:
string_ptr = doslist->dol_Name * 4;
length = string_ptr[0];
name.s = substr(string_ptr,1,length);


Alle Indizes beginnen bei 0, also die 1 bei Substr bedeutet das zweite Zeichen (anders als bei Rexx).

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

24.01.2008, 18:14 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Ooooaahh! Einen Pointer multiplizieren, da rollt es mir ja die Zehennägel hoch!
Aber es funktioniert. Danke Thomas.
Sind die String 0 terminiert ?

BTW, die Sprache ist Amiblitz.
--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

24.01.2008, 18:21 Uhr

ZeroG
Posts: 1486
Nutzer
@Der_Wanderer:
Zitat:
Ooooaahh! Einen Pointer multiplizieren, da rollt es mir ja die Zehennägel hoch!
Man merkt halt das dos ursprünglich in BCPL geschrieben wurde.

Zitat:
Sind die String 0 terminiert ?
Nein, darum steht im ersten Byte des Strings die Länge.

[ - Antworten - Zitieren - Direktlink - ]

24.01.2008, 18:25 Uhr

thomas
Posts: 7680
Nutzer
@Der_Wanderer:
Zitat:
Einen Pointer multiplizieren, da rollt es mir ja die Zehennägel hoch!

BPTR (BCPL Pointer) zeigen auf Langwörter. Um daraus einen Byte-Pointer zu machen, muß man sie halt mit vier multiplizieren. Bei C gibt es dafür das Makro BADDR(), damit kann man die Multiplikation ganz gut verstecken.

Zitat:
Sind die String 0 terminiert ?

Nein. BCPL-Strings haben im ersten Byte die Länge und dahinter den Inhalt.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

26.01.2008, 17:56 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@thomas:
Danke für eure Hilfe.
BTW, die Strings scheinen unter OS3.9 zur Sicherheit auch 0-terminiert zu sein.
Aber keine Angst, ich verlasse mich nicht drauf, sondern mache es korrekt. Nur zur Info.

--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

26.01.2008, 21:23 Uhr

Holger
Posts: 8092
Nutzer
Zitat:
Original von Der_Wanderer:
BTW, die Strings scheinen unter OS3.9 zur Sicherheit auch 0-terminiert zu sein.

Mit Sicherheit hat das nicht viel zu tun, wie Du selbst gesehen hast, kommt man bei falscher Vorgehensweise eh nicht an die Strings. Und wenn man den Pointer korrekt multipliziert, den String aber dann als C-String interpretieren würde, hätte man das Längen-Byte mit im String und würde also auch Unsinn rausbekommen.

Der Grund liegt mehr darin, dass der BCPL-Code später durch C-Code ergänzt, bzw. komplett ersetzt wurde, und somit intern C-Routinen mit den Strings hantieren, von denen einige immer ein Null-Byte schreiben. Man kann aber nicht vorhersagen, wann z.B. ein strcopy und wann ein memcopy benutzt wurde, insbesondere, wenn die Einträge z.B. durch völlig unterschiedliche Dateisysteme erzeugt wurden. Insofern ist es schon ganz vorteilhaft, dass Du Dich nicht drauf verlassen möchtest. ;)

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

27.01.2008, 19:36 Uhr

gni
Posts: 1106
Nutzer
Zitat:
Holger:
Der Grund liegt mehr darin, dass der BCPL-Code später durch C-Code ergänzt, bzw. komplett ersetzt wurde, und somit intern C-Routinen mit den Strings hantieren, von denen einige immer ein Null-Byte schreiben.

dol_Name ist _immer_ NUL-terminiert (sogar unter pre-2.0)! Falls der String nicht NUL-terminiert wäre, dann wäre dies vermutlich ein Bug.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > DosList Namen ? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2022 by amiga-news.de - alle Rechte vorbehalten.
.