Programmstruktur

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Version vom 7. Juni 2013, 10:59 Uhr von Georg (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ == Programmstruktur eines Xbase Programms == Generell gibt es keine zwingende Struktur, wie sie z.B. von COBOL her bekannt ist. Es gibt jedoch bestimmte Abh…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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)