•  Back 
  •  Inhalt 
  •  Index 
  •  Tree View 
  •  Cross references 
  •  Hilfe 
  •  Show info about hypertext 
  •  View a new file 
Topic       : Dokumentation zum Library-Maker
Author      : Karsten Lüdersen @ HH
Version     : MKlib.hyp 2.49
Subject     : Programmieren/Basic
Nodes       : 162
Index Size  : 5558
HCP-Version : 4
Compiled on : Atari
@charset    : atarist
@lang       : 
@default    : 
@help       : Hilfe
@options    : +g -i +y +z -t4 -d24
@width      : 75
View Ref-FileTips für die Library-Programmierung
Erste Hilfe
Anforderungen an die Struktur von Libraries                  Library-Maker

Falls der Library-Maker eine Library übersetzt und der Basic-Editor sie
ohne Fehlermeldung einlädt und auch der Compiler das Programm klaglos
übersetzt und das Programm (im Interpreter oder Compiler) trotzdem abstürzt
oder sonstwie merkwürdig verhält lesen Sie bitte auf jeden Fall die Seite
Erste Hilfe.

Damit aus einer Basic-Datei eine Library erzeugt werden kann muß der
Quelltext bestimmte Voraussetzungen erfüllen:

1. Eine Library darf nur aus Prozeduren und Funktionen bestehen.
Außerhalb von Prozeduren und Funktionen darf es nur Kommentare und 
"Einklappklammern" geben. Zusätzlich ist ab der Version 2.49 der Befehl 
COMPILER erlaubt, wenn danach eines der beiden Steuerworte "LIB_MAKER OFF" 
oder LIB_MAKER ON" folgt.

2. Die erste Prozedur gibt der Library ihren Namen. Sie sollte deshalb
im wesentlichen einen Copyrightvermerk haben, etwa in dieser Form:

DEF PROC Libraryname: PRINT "Copyright der Library": END_PROC

Ab der Version 2.45 des Library-Maker darf die Prozedur eingerückt
sein. Es dürfen auch Kommentarzeilen oder Einklappklammern davor
stehen. Es muß aber eine Prozedur sein. Eine Funktion führt zu einer
Fehlermeldung.

3. Der Quelltext muß eine Prozedur mit dem Namen Exported_Symbols
haben. Sinnvoll ist es, sie gleich als zweite in den Quelltext
aufzunehmen. Sie enthält durch mindestens einmaliges Vorkommen die
Namen aller Prozeduren, Funktionen, Variablen, Felder und Labels, die
auch von außerhalb der Library aufrufbar sein sollen. Während es bei
Prozeduren und Funktionen sinnvoll sein kann, großzügig mit der
globalen Verfügbarkeit zu sein, sollten Sie mit globalen Variablen und
Feldern vorsichtig umgehen. Je weniger, desto besser. So können
versehentliche "Datenlecks", die später zu schwer nachvollziehbaren
Fehlern führen, am einfachsten vermieden werden.

Labels sollten in dieser Prozedur gar nicht auftauchen. Falls Sie
wirklich meinen, daß dies unumgänglich ist, müssen sie mit GOTO bzw.
GOSUB aufgerufen werden.

4. Prozeduren und/oder Funktionen dürfen nicht verschachtelt sein. In
jeder Zeile darf es nur genau eine Prozedur/Funktion geben.

5. Strukturbefehle müssen in der richtigen Reihenfolge erscheinen.
Also erst FOR und später NEXT, erst REPEAT, dann UNTIL usw.

6. Strukturen müssen eindeutige Ein- und Ausgänge haben, also zu jedem
FOR genau ein NEXT etc. Diese müssen sich auch in der selben Prozedur
bzw. Funktion befinden.

7. IF-Konstruktionen müssen auch "ordentlich" sein, also bei
mehrzeiligem IF muß ein ENDIF vorhanden sein und es muß sich hinter dem IF 
befinden.

8. Für SELECT-Strukturen gilt auch entsprechendes, der Library-Maker
prüft diese aber nicht. D.h. eine Library mit einer fehlerhaften
SELECT-Struktur wird ohne Fehlermeldung übersetzt. Beim Hinzulinken zu
Programmen wird diese Library aber zu Fehlern führen, die dann nur
schwer zu finden sind. Erst recht für AnwenderInnen der Library, die
den Quelltext nicht besitzen ...

9. Nie mit GOTO oder GOSUB von einer Prozedur in eine andere springen.
Wenn die andere Prozedur ansonsten nicht aufgerufen wird, so wird sie
auch nicht in das Compilat übernommen. Der Sprungbefehl mit GOTO bzw.
GOSUB führt dann in's Nirwana. Und guter Programmierstil ist das schon gar
nicht ...

10. Alles an Programmcode, was für eine Prozedur oder Funktion
benötigt wird, muß in dieser selbst enthalten sein. In Libraries
müssen deshalb z.B. DATA-Zeilen innerhalb der Prozedur stehen, in der
sich auch der READ-Befehl befindet. Alternativ dazu können DATA-Zeilen
auch in einer Pseudo-Prozedur stehen, die von der Prozedur mit dem
READ-Befehl durch ein "IF 0 THEN Pseudoprozedur" scheinbar aufgerufen
wird. Von dieser Alternative wird aber abgeraten!

11. Ein einzeiliges IF ist ein einzeiliges IF. Ein einzeiliges IF ist
eine IF-Konstruktion, in der der THEN-Zweig in der selben Zeile steht.
Hinter einem einzeiligen IF darf keine Struktur beginnen (z.B. eine
Schleife oder eine weitere IF-Struktur), die über mehrere Zeilen geht.
Meines Wissens ist so etwas auch im Basic völlig undefiniert.

12. MEMORY_BLOCK ist in Libraries nicht möglich.

13. Einzeilige Funktionen müssen am Ende der Zeile ein END_FN haben.