home *** CD-ROM | disk | FTP | other *** search
-
-
- Objekt-Name: Version
-
- $VER: Version 2.92 (95.01.04 18:44:23)
-
- Copyright 1993-95 bei Lutz Hanke
-
-
-
-
- Inhalt
- ------
- 1 Was ist Version 39
- 2 Rechtslage 46
- 2.1 Autor 75
- 2.2 Programm Umfang 89
- 2.3 System Voraussetzung / Start 98
- 3 Anleitung 108
- 3.1 Option: <> 136
- 3.2 Option: <NAME> 146
- 3.3 Option: <VERSION> 156
- 3.4 Option: <REVISION> 165
- 3.5 Option: <FULL> 174
- 3.6 Option: <HELP> 196
- 4 Intern Struktur 204
- 5 Extern Struktur für Data 231
- 6 Extern Struktur für Programme 247
- 6.1 DataTab Macros 323
- 7 Bugs (Fehler) 369
- 8 Danksagung 376
- 9 History 383
-
-
-
-
-
-
- 1 Was ist Version
- -----------------
- Version ist als Ersatz für den Workbench Versions Befehl gedacht.
-
-
-
-
- 2 Rechtslage
- ------------
- Das vorliegende Programm-Paket ist Freeware. Alle Rechte liegen bei mir,
- dem Programmierer. Eine kommerzielle Nutzung ist nicht gestattet.
-
- Das Programm darf unter folgenden Bedingungen, auf PD-, Shareware- Serien
- oder Netzwerken vertrieben werden.
-
- - Es müssen die unter "Programm Umfang" genannte Dateien in
- unveränderter Form und Inhalt immer mit kopiert werden.
-
- - Weiterhin ist das Packen gestattet, wenn der Originalzustand wieder
- hergestellt werden kann (z.B. LHA, ZOO, PP).
-
- - Den Vertriebspreis lege ich nicht fest, da es immer neue Medien gibt,
- und damit auch andere Herstellungskosten. Wer mehr als den Shareware
- Beitrag bezahlt ist selbst Schuld.
-
- Zum Schluß möchte ich noch darauf hinweisen, daß ich für die korrekte
- Funktion keine Garantie übernehme. Es ist daher immer möglich, daß eine
- Fehlfunktion auftritt. Ich lehne daher jegliche Verantwortung für
- derartige oder andere Folgen ausdrücklich ab. Dies gilt auch für
- Folgeschäden, Personenschäden oder andere Nebenwirkungen. Bitte teilen
- Sie mir eventuell auftretende Fehler mit, damit diese umgehend behoben
- werden können.
-
-
-
-
- 2.1 Autor
- ---------
- Da ich selbst die ganze Angelegenheit "verbrochen" habe, so können Sie
- sich auch direkt bei mir registrieren, updaten oder beschweren. Meine
- Adresse ist folgende:
-
- Lutz Hanke
- Dorfstr. 43
- 01825 Breitenau
- Germany
-
-
-
-
- 2.2 Programm Umfang
- -------------------
-
- Version/Version ----- das Programm an sich.
- Version/Version.dok - das, was Sie gerade lesen. Eine Anleitung zu Version.
-
-
-
-
- 2.3 System Voraussetzung / Start
- --------------------------------
- Benötigt wird eine Amiga mit mindestens OS 2.0 . Ältere Kickstarts werden
- nicht mehr unterstützt, und führen lediglich zu einem Retuncode 20.
-
- Der Start ist nur von die Shell möglich.
-
-
-
-
- 3 Anleitung
- -----------
- Version arbeitet fast genau so wie der Workbench Versions Befehl. Deshalb
- kann der Original Befehl durch "Version" voll ersetzt werden.
-
- Das Programm habe ich aus dem Frust heraus geschrieben. Sobald ich eine
- Library umbenannt habe, z.B. um diese als 1.3 und 2.0 Version zu
- kennzeichnen, kommt von dem Original Versions Befehl: "Version not
- found". Dieser prüft vor dem suchen erst einmal den Typ (z.B. *.library
- *.device). Sobald aber der Name umbenannt wurde (z.B. *.device_2.0), war
- das Ergebnis negativ, so daß nur noch nach dem String "$VER:" gesucht
- wurde. Da dies selten zu einem Erfolg führte, hatte ich das nachsehen.
-
- Mein Programm geht nun folgendermaßen vor:
-
- 1. Durchsuchen der intern Library-List, Device-List. Falls Sie jedoch
- extern z.B. eine Library testen wollen, die eventuell schon geladen
- wurde, so geben Sie einfach den vollständigen Pfad an.
-
- 2. Test ob File so zu laden ist
-
- 3. suche in Libs: devs: l: locale:languages
-
- 4. wenn nicht gefunden -> ende
-
-
-
-
- 3.1 Option: <>
- ---------------
- Ohne Option, so wird die Kickstart und die Workbench Version ermittelt.
- Desweiteren werden die $Kickstart und $Workbench Variablen gesetzt.
-
- Ausgabeformat: Kickstart 40.62, Workbench 40.35
-
-
-
-
- 3.2 Option: <NAME>
- -------------------
- Als Name ist das zu testende Objekt anzugeben. Dies kann sowohl intern,
- als auch extern vorhanden sein.
-
- Ausgabeformat: req.library 2.7
-
-
-
-
- 3.3 Option: <VERSION>
- ----------------------
- Nach dem Argument ist ein numerischer Wert anzugeben. Dieser wird dann
- mit der ermittelten Version verglichen. Ist die angegebene Version höher,
- als die des Objektes so wird der Returncode auf Warn gesetzt.
-
-
-
-
- 3.4 Option: <REVISION>
- -----------------------
- Gilt das gesagte, wie bei der Option <Version>. Warnung: der Wert 5.8 ist
- GLEICH dem Wert 5.008 !! Das gilt für mein Programm und für das Original
- Programm. Wer kann helfen?
-
-
-
-
- 3.5 Option: <FULL>
- -------------------
- Gibt die volle Information zu diesem Objekt aus.
-
- Ausgabeformat:
-
- req.library 2.7 Typ: Library, Found: Intern
- ReqLibrary 2.7 (Mon May 25 1992)
-
- Typ - gibt den Objekt Typ an. Am häufigsten sind Librarys, Devices und
- Files. Alle anderen müßten selbsterklärend sein.
-
- Found - hier wird angegeben, wo das Object gefunden wurde Intern/Extern.
-
- ID - ist ein fast beliebiger Text, der nähere Informationen des
- Programmierers enthält. WARNUNG: bei Files und (libs ohne Init)
- wird die ID analysiert. Dazu muß die ID den Commodore Richtlinien
- entsprechen ( siehe unten ).
-
-
-
-
- 3.6 Option: <HELP>
- -------------------
- Und nun eine letzte Option. Wird Help angegeben, so erhalten sie
- Informationen über das Programm, Version und Copyright.
-
-
-
-
- 4 Intern Struktur
- -----------------
-
- Wurde nun das Objekt intern gefunden, so wende ich folgende Struktur an:
-
- $00.l Zeiger auf nächstes Objekt
- $04.l Zeiger auf vorheriges Objekt
- $08.b Node Typ
- $09.b füll Byte
- $0a.l Zeiger auf Modul Name (wird verwendet)
- $0e.b Flags
- $0f.b füll Byte
- $10.w negative Size
- $12.w positive Size
- $14.w Version (wird verwendet)
- $16.w Revision (wird verwendet)
- $18.l Zeiger auf ID String (wird verwendet)
- $1c.l sum
- $20.w opencnt (Anzahl der Tasks die, die Lib benutzen)
- $22 Struct end
-
- Das Include File ist "exec/nodes.i". Da sind dann auch alle NT Typen
- definiert.
-
-
-
-
- 5 Extern Struktur für Data
- --------------------------
- Findet Version das Objekt extern, so wird es etwas komplizierter. Zu erst
- werden 10 kB des Objektes in den RAM geladen. Danach wird getestet, ob es
- ein Programm ist, oder ein Data File. Bei einem Datafile kommt folgende
- Struktur zur Anwendung.
-
- "$VER: name 1.11 xyz"
-
- Gesucht wird nach "$VER:" danach kommt der Name OHNE Leerzeichen. Nach
- der Versions / Revisions Angabe kann man beliebigen Kommentar verwenden
- (z.B. Datumsangabe, Copyright, ...)
-
-
-
-
- 6 Extern Struktur für Programme
- -------------------------------
- Für Librarys, Devices und Handler kommt eine andere Struktur zur
- Anwendung. Diese Struktur muß im ERSTEN Hunk stehen, und darf NICHT über
- mehrere Hunks verteilt werden, wie es teilweise vorkommt. Wird die
- folgende Struktur nicht gefunden, oder trat ein Fehler auf, so wird
- einfach die Data Struktur verwendet.
-
- Hunk_Anfang: ; für versehentlichen direkten Start
- moveq #-1,d0 ; Returncode (nicht ausführbar)
- rts ; und wieder zurück
-
- Resident: ; Library Install Werte
- dc.w $4AFC ; RTC_MATCHWORD, Identifikation (ID)
- dc.l Resident ; Zeiger auf residenten Teil
- dc.l CodeEnd ; Resident Teil ende, nicht lib ende !!
- dc.b $80 ; RTF_AUTOINIT
- dc.b Version ; Lib Version, wird vom System NICHT geprüft !
- dc.b $09 ; ID für lib, siehe Node struct
- dc.b Priority
- dc.l LibName ; Zeiger auf den eigenen Namen
- dc.l IDString ; Zeiger IDString
- dc.l Init ; Zeiger auf weitere Struktur der Lib
-
- LibName dc.b "my.library",0
-
- IDString dc.b "my.library 1.67 (14-Oct-91) Kommentar",0
- ; Der IDString sollte ungefähr das obige aussehen haben. Der
- Original Workbench Befehl analysiert den String ! Deshalb muß nach
- dem Namen direkt die Version im obigen Format folgen !
-
- CodeEnd ; ende des residenten Teiles, nicht der library!!
-
-
- Init dc.l Lib_Size ; Größe der lib-Struktur
- dc.l FuncTab ; Zeiger auf libroutinen Tabelle
- dc.l DataTab ; Zeiger auf Tabelle für Init oder "0" für
- ; keine. Wird "0" angegeben, müssen die Werte
- ; in der Initroutine von Hand gesetzt werden !
- dc.l InitRoutine ; Zeiger auf eigene Initroutine der Lib
-
-
- FuncTab ; Lib Routinen Tabelle, sind basisadressen
- dc.l Open ; Pflicht System
- dc.l Close ; Pflicht System
- dc.l Expunge ; Pflicht System
- dc.l Nil ; Pflicht System, nicht benutzt
- dc.l SetVBI ; eigene Routinen Offsets
- dc.l InitVBOBs
- dc.l AutoScaleOn
- dc.l AutoScaleOff
- dc.l FreeJoy
- dc.l SetColors
- dc.l -1 ; Kennzeichen für Ende
-
-
- DataTab ; Wenn nicht von Hand, dann hier alles ablegen
- INITBYTE LN_TYPE,NT_LIBRARY
- INITLONG LN_NAME,LibName
- INITBYTE LIB_FLAGS,LIBF_SUMUSED!LIBF_CHANGED
- INITWORD LIB_VERSION,Version
- INITWORD LIB_REVISION,Revision
- INITLONG LIB_IDSTRING,IDString
- dc.l 0 ; Abschluß der Data Tabelle
-
- ; Die Macros sind im Include File exec/libraries.i gespeichert. Der
- erste Wert gibt den Offset an der zweite den Wert an.
-
-
- Hier folgen jetzt weitere Routinen, und die eigentlichen Library
- Funktionen. Die Macros sind im nächsten Kapitel erklärt.
-
-
-
-
-
- 6.1 DataTab Macros
- ------------------
- Es gibt drei verschiedene Datentypen Byte, Word und LongWord. Die
- entsprechenden Macros sind INITBYTE, INITWORD und INITLONG. Das
- eigentliche (UR)macro ist INITSTRUCT. Hier nun die Struktur, die aus
- INITSTRUCT entsteht.
-
- INITSTRUCT Size,Offset,Anzahl,Wert
-
- Befehls Byte %00 00 0000, Wert
- | | |
- | | Anzahl der Befehlsausführungen, zählt bis -1
- | |
- | Daten Size:
- | 00 = longword, beginnt auf wordgrenze
- | 01 = word, beginnt auf wordgrenze
- | 10 = byte
- | 11 = verboten
- |
- Befehl:
- 00 = Daten nach dem Befehls Byte in die Struktur übertragen
- (beginnen auf wordgrenze bei .w & .l)
- 01 = Daten der angegebenen Länge entsprechend oft übertragen
- 10 = Wert nach dem Befehls Byte ist ein BYTE-Offset (zählt
- ab Struktur Anfang), die Daten danach werden in die
- Struktur übertragen, entsprechend dem low-nibble.
- 11 = Wert nach dem Befehls Byte ist ein 24 Bit Offset (3
- Byte), sonst wie "10"
-
-
- Um die Sache etwas zu vereinfachen, gibt es drei weitere Macros. Dahinter
- steht, was daraus generiert wird.
-
- INITBYTE Offset,Wert %11100000 $000000 $00 $00
- Befehl Offset Wert fill
-
- INITWORD Offset,Wert %11010000 $000000 $0000
- Befehl Offset Wert
-
- INITLONG Offset,Wert %11000000 $000000 $00000000
- Befehl Offset Wert
-
-
-
-
-
- 7 Bugs (Fehler)
- ---------------
- Keine bekannt.
-
-
-
-
- 8 Danksagung
- ------------
- Gibt es keine.
-
-
-
-
- 9 History
- ---------
- 20.03.93 Beginn.
- 20.04.93 2.00 Versionsbefehl von OS2.1 gedebugt, daraus ergaben sich diverse
- Änderungen meines Programms.
- 30.04.93 teste auf falsche offsets, da sonst Adresserror bei falschen Werten
- 28.12.94 2.92 überarbeitung, jetzt wird die Version nicht nur von
- Programmen, sondern auch von anderen Dateien ermittelt. Wird
- bei Prog eine falsche Struktur gefunden, so wird nicht mehr
- abgebrochen, sondern nach "$VER:" gesucht.
-
-
-
-
-
-
- © 1992-95 by Lutz Hanke
-
-