amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > DosList Namen ? [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2008-01-24, 17:56 h

Der_Wanderer
Posts: 1229
User
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


[ - Answer - Quote - Direct link - ]

2008-01-24, 18:10 h

thomas
Posts: 7721
User
@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/

[ - Answer - Quote - Direct link - ]

2008-01-24, 18:14 h

Der_Wanderer
Posts: 1229
User
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


[ - Answer - Quote - Direct link - ]

2008-01-24, 18:21 h

ZeroG
Posts: 1488
User
@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.

[ - Answer - Quote - Direct link - ]

2008-01-24, 18:25 h

thomas
Posts: 7721
User
@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/

[ - Answer - Quote - Direct link - ]

2008-01-26, 17:56 h

Der_Wanderer
Posts: 1229
User
@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


[ - Answer - Quote - Direct link - ]

2008-01-26, 21:23 h

Holger
Posts: 8116
User
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.

[ - Answer - Quote - Direct link - ]

2008-01-27, 19:36 h

gni
Posts: 1106
User
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.

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > DosList Namen ? [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2025 by amiga-news.de - all rights reserved.
.