Programmstruktur
Programmstruktur eines Xbase Programms
Generell gibt es keine zwingende Struktur, wie sie z.B. von COBOL her bekannt ist. Es gibt jedoch bestimmte Abhängigkeiten, die beachtet werden sollten.
Ein Programm sollte etwa diese Struktur haben:
#DEFINE CRLF Chr(13)+Chr(10) #INCLUDE "AppEvent.ch" #INCLUDE "Xbp.ch" #PRAGMA Library("SQLXpp.LIB") STATIC lRunning FUNCTION Main(p1, p2) LOCAL nEvent, mp1, mp2, oXbp GenerateDialog() nEvent := xbe_None WHILE nEvent <> xbeP_Close nEvent := AppEvent(@mp1, @mp2, @oXbp) oXbp:handleEvent(nEvent, mp1, mp2) END RETURN(.T.) INIT PROCEDURE RUNME lRunning := .T. RETURN EXIT PROCEDURE RUNMETOO lRunning := .F. RETURN
Das Layout lässt sich so zusammenfassen:
- DEFINEs
- INCLUDEs
- PRAGMAs
- Programmquellen-weit sichtbare STATICs
- Programm-Code
- INIT PROCEDURE
- EXIT PROCEDURE
Gewisse Änderungen der Reihenfolge sind möglich, aber auch nur beschränkt. So kann eine programmquellen-weit sichtbare STATIC nur vor der ersten ausführbaren Anweisung deklariert werden. Die Reihenfolge von DEFINE, INCLUDE und PRAGMA ist beliebig und vom eigenen Stil (oder den Vorgaben des Auftraggebers) abhängig.
#DEFINE
Mit der Anweisung #DEFINE werden figurative Konstanten definiert, die zur vereinfachten Darstellung verwendet werden.
Ein klassisches Beispiel steht oben, zwei weitere Varianten:
#DEFINE TRUE .T. #DEFINE FALSE .F.
Für #DEFINE und #INCLUDE gilt, dass die dort definierten figurativen Konstanten erst ab der Position verwendet werden können, an der sie definiert wurden:
FUNCTION MAIN() Local cVar cVar := CRLF #DEFINE CRLF Chr(13)+Chr(10)
Dieser Programmcode wird bei der Zuweisung von CRLF an cVar scheitern, weil der Compiler CRLF erst ab der Deklaration in sein Verzeichnis aufnimmt und verwendet.
#INCLUDE
Mit der Anweisung #INCLUDE werden sogenannte Header-Dateien eingebunden, die ihrerseits aus normalem Programmcode bestehen können (Vorsicht, wenn ausführbarer Code verwendet wird und STATICs definiert werden sollen, die in der ganzen Programmquelle sichtbar sein sollen.
#PRAGMA
Mit der Anweisung #PRAGMA wird der Linker angewiesen, eine bestimmte Bibliothek einzubinden, die z.B. bestimmte Funktionen zur Verfügung stellt, die nicht in der Standard-Runtime enthalten sind. Auch Dritt-Anbieter Bibliotheken können auf diese Art und Weise eingebunden werden.
programmquellen-weit sichtbare STATIC
Funktionen
besondere Prozeduren
INIT PROCEDURE
EXIT PROCEDURE
(Arikelinarbeit)