D - BASIC: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
 
(48 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== Vorwort ==
== Vorwort ==


D-BASIC ist die Abkürzung für <b>D</b>ruckvorlagen <b>B</b>eginners <b>A</b>ll purpose <b>S</b>ymbolic <b>I</b>nstruction <b>C</b>ode. BASIC wurde in den Jahren 1963-1965 am Dartmouth College in Hanover (USA) entwickelt, und gehörte zu den am weitesten verbreiteten Programmiersprachen auf kleinen Rechnern bis 1985. D-BASIC ist ein BASIC-Dialekt, der benutzt wird, um bei der Ausgabe von Druckvorlagen noch mehr Flexibilität zu erhalten.
BASIC ist die Abkürzung für <b>B</b>eginners <b>A</b>ll purpose <b>S</b>ymbolic <b>I</b>nstruction <b>C</b>ode. BASIC wurde in den Jahren 1963-1965 am Dartmouth College in Hanover (USA) entwickelt, und gehörte zu den am weitesten verbreiteten Programmiersprachen auf kleinen Rechnern bis 1985.  
 
D-BASIC entstand in Anlehnung an diese erfolgreiche Programmiersprache und steht für <b>D</b>ruckvorlagen-BASIC.
 
== D - BASIC ==
 
Bei der Anpassung des OrgaMon an Anforderungen des Anwenders kommt man mit statischen Parametern oft nicht weiter. An diesen Stellen hilft eine freie Programmier-Möglichkeit am besten weiter. Der End-Anwender des OrgaMon hat selbst Zugriff auf diese Programmierung und kann individuelle Anforderungen an den OrgaMon selbst realisieren. Inerhalb des OrgaMon wird D-BASIC breit eingesetzt:
 
* Druckvorlagen: die Drucker-Ausgabe (Druckvorlagen, also html-Generatoren) mit Hilfe von [[Kasse3#Druckstücke|Druckvorlagen]] / [[Label_Druck|Etiketten]] für noch mehr Flexibilität.
* OLAP: erhöht die Flexibilität bei der Ermittlung einer [[basic|OLAP-Abfrage Dimension]] Add-On für SQL-Statements
* Vor Beleg-Buchungen, um z.B. Marketing-Aktionen automatisiert zu steuern
* Nimmt Buchungserweiterungen bei Verträgen und [[Belege#BerechneBeleg-1.txt|Belegen]] vor
* In der Tagwache und dem Tagesabschluss (via OLAP)
 
=== Historie ===
 
D-BASIC hat bereits eine lange Geschichte und war bereits in der "RAGAL" Software integriert, ein Vorgänger des OrgaMon.
 
* 12.12.1991 erste Version fürs RAGAL.
* 11.04.1992 "PRN" und "NUL" eingeführt
* 16.02.1993 Erweiterung für TÜV Hannover "CALL"
* 01.01.1995 Integration ins AA2 / AA3
* 16.12.2003 Basic32 ist nun ein Objekt / Portierung Turbo-Pascal -> Delphi
* 12.12.2006 Erweitert um PREIS ( ) Funktion (erstmalige Anbindung an eCommerce)
* 19.07.2010 Integration ins OLAP
* 09.07.2014 Integration in die Beleg-Buchung / Portierung Delphi -> FreePascal


== BASIC Einführung ==
== BASIC Einführung ==
=== Lektion 1: REM, PRINT, LET, VAL ===
  <i>
  <b>REM</b>  ist die Abkürzung für Remark und bedeutet Kommentar. Hier können Sie also
        Ihr Programm kommentieren, alle Eingaben hinter dem REM-Bezeichner werden
        ignoriert.
  <b>PRINT</b> ("Drucke!") Gibt Texte oder Zahlen auf dem Drucker (oder Bildschirm) aus.
  <b>LET</b> ("Es sei") wird benutzt, um Zwischenergebnisse in einer Variable
        zwischenzuspeichern. Variable sind Schubladen, die Sie mit Namen
        versehen können. Dort werden Werte gespeichert bis Sie diese wieder
        verwenden. In diesem Fall geschieht das sofort in der nächsten Zeile.
  <b>VAL</b> ("Wert") wandelt das wissenschaftliche Zahlenformat (3.4982398E+02)
        in ein besser lesbares Format um, dazu müssen die Anzahl der
        Vorkommastellen und die Anzahl der Nachkommastellen angegeben werden.
  </i>
    
    
   REM mein erstes Programm:
   REM mein erstes Programm:
   PRINT "2"+"2"
   PRINT "2"+"2"


  REM ist die Abkürzung für Remark und bedeutet Kommentar. Hier können Sie also
  Ihr Programm kommentieren, alle Eingaben hinter dem REM-Bezeichner werden
  ignoriert.


  PRINT ("Drucke!") Gibt Texte oder Zahlen auf dem Drucker (oder Bildschirm) aus.


   Wenn Sie nun Ihr Programm starten (d.h. <F4>-drucken oder <F5>-Layout) erhalten
   Wenn Sie nun Ihr Programm starten (d.h. <F4>-drucken oder <F5>-Layout) erhalten
Zeile 26: Zeile 67:
   PRINT VAL(ERGEBNIS,"2","1")
   PRINT VAL(ERGEBNIS,"2","1")


  LET ("Es sei") wird benutzt, um Zwischenergebnisse in einer Variable
        zwischenzuspeichern. Variable sind Schubladen, die Sie mit Namen
        versehen können. Dort werden Werte gespeichert bis Sie diese wieder
        verwenden. In diesem Fall geschieht das sofort in der nächsten Zeile.
  VAL ("Wert") wandelt das wissenschaftliche Zahlenformat (3.4982398E+02)
        in ein besser lesbares Format um, dazu müssen die Anzahl der
        Vorkommastellen und die Anzahl der Nachkommastellen angegeben werden.


   Nach dieser kleinen Änderung sieht die Ausgabe schon besser aus:
   Nach dieser kleinen Änderung sieht die Ausgabe schon besser aus:
   4,0
   4,0
   2 und 2 zu addieren ist uns jedoch zu wenig. Jetzt soll der Benutzer bestimmen,
   2 und 2 zu addieren ist uns jedoch zu wenig. Jetzt soll der Benutzer bestimmen,
   welche Werte eingegeben werden sollen. Die Benutzereingabe erfolgt durch den
   welche Werte eingegeben werden sollen.  
  INPUT-Befehl.
 
=== Lektion 2: INPUT ===
 
  <i>
  <b>INPUT</b>  ("Eingabe") stoppt den Programmablauf, und fordert den Benutzer auf, eine
              Eingabe zu tätigen.
  </i>
 
 
 
Die Benutzereingabe erfolgt durch den INPUT-Befehl.


   INPUT "Geben Sie die erste Zahl ein:",XWERT
   INPUT "Geben Sie die erste Zahl ein:",XWERT
Zeile 45: Zeile 89:
   PRINT VAL(ERGEBNIS,"2","1")
   PRINT VAL(ERGEBNIS,"2","1")


  INPUT ("Eingabe") stoppt den Programmablauf, und fordert den Benutzer auf, eine
=== Lektion 3: IF, GOTO, Sprungmarke ===
  Eingabe zu tätigen.


  Das erste "sinnvolle" Programm errechnet den Durchschnittlichen Verbrauch Ihres
Da es im D-Basic keine Zeilen-Nummern gibt, müssen Sprungziele durch sogenannte Sprungmarken markiert werden. Dies geschieht einfach durch Strings, die am Anfang der Zeile angegeben sind.
  KFZ; z.B. nach einer Urlaubsreise.


  LET A="0"
  "Start-Loop"
  PRINT "HALLO Nummer " & VAL(A,"2","0")
  LET A=A+"1"
  IF A="10" THEN "Ende"
  GOTO "Start-Loop"
  "Ende"
  PRINT "Fertig"
Das erste "sinnvolle" Programm errechnet den Durchschnittlichen Verbrauch Ihres KFZ; z.B. nach einer Urlaubsreise.
   "Start"
   "Start"
   INPUT "KM-Stand (Tank leer, frisch getankt)",KM0
   INPUT "KM-Stand (Tank leer, frisch getankt)",KM0
   IF KM0="0" THEN "Ende"
   IF KM0="0" THEN "Ende"
 
   INPUT "KM-Stand (Tank wieder leer)",KM1
   INPUT "KM-Stand (Tank wieder leer)",KM1
   IF KM1="0" THEN "Ende"
   IF KM1="0" THEN "Ende"
 
   INPUT "Liter-Sprit",L
   INPUT "Liter-Sprit",L
   IF L="0" THEN "Ende"
   IF L="0" THEN "Ende"
 
   INPUT "Liter-Preis",PREIS
   INPUT "Liter-Preis",PREIS
   IF PREIS="0" THEN "Ende"
   IF PREIS="0" THEN "Ende"
 
   LET KM=KM1-KM0
   LET KM=KM1-KM0
   LET VERBRAUCH100=(L/KM)*"100"
   LET VERBRAUCH100=(L/KM)*"100"
   LET KOSTENKM=(L*PREIS)/KM
   LET KOSTENKM=(L*PREIS)/KM
 
   PRINT "gefahrene kM            : " & VAL(KM,"6","2")
   PRINT "gefahrene kM            : " & VAL(KM,"6","2")
   PRINT "Benzinkosten pro kM      : " & VAL(KOSTENKM,"6","2") & " DM"
   PRINT "Benzinkosten pro kM      : " & VAL(KOSTENKM,"6","2") & " DM"
Zeile 74: Zeile 127:
   "Ende"
   "Ende"


  "Sprungmarke" "Start" und "Ende" sind sogenannte Sprungmarken, d.h. an diesen
"Start" und "Ende" sind sogenannte Sprungmarken, d.h. an diesen Stellen können Sie die Programmausführung wiederholen oder fortsetzen. Sie können also mit Hilfe des GOTO-Befehls im Programm die Ausführung des Programmes an diesen benannten Stellen fortsetzen. Dabei kann man zurück und vorspringen.
  Stellen können Sie die Programmausführung wiederholen oder fortsetzen. Sie
 
  können also mit Hilfe des GOTO-Befehls im Programm beliebig hin- und herspringen.
=== Lektion 4: GOSUB, RETURN ===
 
GOTO springt an eine andere Stelle des Codes. Erst mal dort angelangt weiß BASIC nicht mehr von woher es gesprungen kam. GOSUB merkt sich das und kann die Arbeit an alter Stelle wieder aufnehmen. Dadurch lassen sich Code-Teile anspringen, die mehrfach von unterschiedlichen Stellen des Programmes immer wieder benutzt werden.
 
  LET A="10"
  GOSUB "Ausgabe"
  LET A="102"
  GOSUB "Ausgabe"
  GOTO "Ende"
  "Ausgabe"
  PRINT "Mein Wert ist " & VAL(A,"10","5")
  RETURN
  "Ende"


== Reservierte BASIC-Bezeichner ==
== Reservierte BASIC-Bezeichner ==
Zeile 91: Zeile 156:
   '['      Alias und Variablen Begrenzer
   '['      Alias und Variablen Begrenzer
   ']'      Alias und Variablen Begrenzer
   ']'      Alias und Variablen Begrenzer
   ';'      f�r PRINT ohne Zeilenumbruch
   ';'      für PRINT ohne Zeilenumbruch
   ','      Komma zur Parameter-Abtrennung
   ','      Komma zur Parameter-Abtrennung
   '>'      Gr��er-Operator Strings/Zahlen
   '>'      Größer-Operator Strings/Zahlen
   '<'      Kleiner-Operator Strings/Zahlen
   '<'      Kleiner-Operator Strings/Zahlen
   'IF'      Bedingte Abfrage mit GOTO oder GOSUB-Sprung
   'IF'      Bedingte Abfrage mit GOTO oder GOSUB-Sprung
Zeile 118: Zeile 183:
   'RETURN'  Rücksprung aus einer Subroutine
   'RETURN'  Rücksprung aus einer Subroutine
   'END'    Beendet das BASIC-Programm
   'END'    Beendet das BASIC-Programm
  'ABORT'  Bricht das BASIC-Programm ohne Druck ab
   'ROUND'  Runden von Zahlenwerten
   'ROUND'  Runden von Zahlenwerten
   'DEBUG'  Aktiviert den Debuggermodus
   'DEBUG'  Aktiviert den Debuggermodus
Zeile 139: Zeile 205:
   X        Offset X der ersten Druckposition
   X        Offset X der ersten Druckposition
   Y        Offset Y der ersten Druckposition
   Y        Offset Y der ersten Druckposition
 
   ZEILE    Aktuelle Zeilennummer des D-BASIC Scripts (Wird nur im Debug-Modus gesetzt!)
== Besondere Tasten und Symbole ==
 
   '[' Beginn eines Datenbankfeldes
  ']' Ende des Datenbankfeldes
  '#' am Ende der Zeile, verbindet diese Zeile mit der nächsten, ohne einen
      Zeilenumbruch zu erzeugen.


== Unterschiede zum normalen BASIC ==
== Unterschiede zum normalen BASIC ==


D-BASIC hat einigen Balast abgeworfen, die ältere BASIC-Varianten mit sich tragen müssen. Dadurch ist es jedoch nur in gewissem Umfang kompatibel zu anderen BASIC-Dialekten. So gibt es keine Zeilen-Nummern mehr. Es muß mit Labels gearbeitet werden.
D-BASIC hat einigen Balast abgeworfen, die ältere BASIC-Varianten mit sich tragen müssen. Dadurch ist es jedoch nur in gewissem Umfang kompatibel zu anderen BASIC-Dialekten.  


=== Labels ===
* So gibt es keine Zeilen-Nummern mehr
 
* Es muß mit Sprungmarken gearbeitet werden
Da es im D-Basic keine Zeilen-Nummern gibt, m�ssen Sprungziele durch sogenannte Labels markiert werden. Dies geschieht einfach durch Strings, die am Anfang der Zeile angegeben sind.
* Die Variable müssen kein "$" am Anfang haben
 
* Arrays bzw. das DIM Statement wird nicht unterstützt
  LET A="0"
* Datenbank Integration mit '[' DATENBANK-FELDNAME ']'
  "Start-Loop"
* Programmzeilen können mit '#' am Ende mit der nächsten Zeile verbunden werden
  PRINT "HALLO Nummer " & VAL(A,"2","0")
  LET A=A+"1"
  IF A="10" THEN "Ende"
  GOTO "Start-Loop"
  "Ende"
  PRINT "Fertig"


=== Daten-Typen ===
=== Daten-Typen ===


   Der gr��te Unterschied zu Standard-BASIC ist, da� es keine verscheidenen
   Der größte Unterschied zu Standard-BASIC ist, dass keine verscheidenen
   Daten-Typen mehr gibt, sondern nur noch den Datentyp String. Sie k�nnen
   Daten-Typen mehr gibt, sondern nur noch den Datentyp String. Sie können
   dennoch mit Zahlen arbeiten oder mit logischen Ausdr�cken, beachten Sie
   dennoch mit Zahlen arbeiten oder mit logischen Ausdrücken, beachten Sie
   jedoch, da� alle konstanten Werte immer als String geschrieben werden m�ssen:
   jedoch, dass alle konstanten Werte immer als String geschrieben werden müssen:


   1.2 mu� als "1.2"  oder "1,2" geschrieben werden
   1.2 muss als "1.2"  oder "1,2" geschrieben werden
   TRUE mu� als "Y"    geschrieben werden
   TRUE muss als "Y"    geschrieben werden
   FALSE mu� als "N"    geschrieben werden
   FALSE muss als "N"    geschrieben werden


=== Variablen-Namen ===
=== Variablen-Namen ===


   Variable sind beliebige Kombinationen aus Buchstaben und Zahlen, jedoch darf
   Variable sind beliebige Kombinationen aus Buchstaben und Zahlen, jedoch darf
   kein BASIC-Schl�sselwort (GOTO, IF, PRINT) in der Varibale enthalten sein.
   kein BASIC-Schlüsselwort (GOTO, IF, PRINT) in der Variable enthalten sein.


   REM Fehlerhafte Variable!!!
   REM Fehlerhafte Variable!!!
   LET GOTO3="2837"
   LET GOTO3="2837"
   IF PRINTIT THEN GOSUB "DruckeZeile"
   IF PRINTIT THEN GOSUB "DruckeZeile"
  Arrays bzw. das DIM Statement wird nicht unterst�tzt.


== Basic Syntax ==
== Basic Syntax ==


   Im folgenden wird der komplette Basic-Syntax beschrieben, nach welchem alle
   Im folgenden wird der komplette Basic-Syntax beschrieben, nach welchem alle
   BASIC-Programme aufgel�st werden.
   BASIC-Programme aufgelöst werden.


   EOLId ist das Ende einer Zeile.
   EOLId ist das Ende einer Zeile.
Zeile 200: Zeile 252:
   REM (c)by Heinz Spotlum, PEUS SYSTEMS
   REM (c)by Heinz Spotlum, PEUS SYSTEMS
   LET X="10"*"120."+B
   LET X="10"*"120."+B
   REM    ^^ das hier ggf. �ndern!
   REM    ^^ das hier ggf. Ändern!


   ReturnId EOLId -> eps
   ReturnId EOLId -> eps
  LET A="10"
 
  GOSUB "Ausgabe"
  LET A="102"
  GOSUB "Ausgabe"
  GOTO "Ende"
  "Ausgabe"
  PRINT "Mein Wert ist " & VAL(A,"10","5")
  RETURN
  "Ende"
   ENDId EOLId -> eps
   ENDId EOLId -> eps
   REM Jetzt endet die Programm-Ausf�hrung
   REM Jetzt endet die Programm-Ausführung
   REM In der n�chsten Zeile
   REM In der nächsten Zeile
   END
   END


Zeile 355: Zeile 399:
   InputId Sid kommaid Sid -> eps
   InputId Sid kommaid Sid -> eps
   LET A="Anton M�ller"
   LET A="Anton Müller"
   INPUT "Geben Sie Ihren Namen ein",A
   INPUT "Geben Sie Ihren Namen ein",A
   PRINT "Ihr Eingabe ist " & A
   PRINT "Ihr Eingabe ist " & A
Zeile 379: Zeile 423:
   FOPEN sid -> eps
   FOPEN sid -> eps
   FOPEN "C:\autoexec.bat"
   FOPEN "C:\autoexec.bat"
   REM Die Datei AUTOEXEC.BAT wird ge�ffnet
   REM Die Datei AUTOEXEC.BAT wird geöffnet
   REM sie kann mit FINPUT eingelesen werden
   REM sie kann mit FINPUT eingelesen werden
   REM Erfolg der Aktion steht in [LISTE-ENDE]
   REM Erfolg der Aktion steht in [LISTE-ENDE]
Zeile 385: Zeile 429:
   FCREATE sid -> eps
   FCREATE sid -> eps
   FCREATE "TEST.TXT"
   FCREATE "TEST.TXT"
   FPRINT "Name;Stra�e;Ort"
   FPRINT "Name;Straße;Ort"
   "Schleife"
   "Schleife"
   FPRINT [K.Name] & ";" ;
   FPRINT [K.Name] & ";" ;
   FPRINT [K.Stra�e] & ";" ;
   FPRINT [K.Straße] & ";" ;
   FPRINT [K.Ort]  
   FPRINT [K.Ort]  
   FCLOSE
   FCLOSE
   FPRINT sid [ ";" ] -> eps
   FPRINT sid [ ";" ] -> eps
   REM Ausgabe von Strings erfolgen in ge�ffnete
   REM Ausgabe von Strings erfolgen in geöffnete
   REM Dateien (FCREATE).
   REM Dateien (FCREATE).
   REM um die Ausgabe ordnungsgem�� abzuschlie�en
   REM um die Ausgabe ordnungsgemäß abzuschließen
   REM nach dem letzten FPRINT- Befehl ein FCLOSE
   REM nach dem letzten FPRINT- Befehl ein FCLOSE
   REM folgen
   REM folgen
Zeile 421: Zeile 465:
   REM Die aktuelle Datei wird sortiert
   REM Die aktuelle Datei wird sortiert
   REM Die Datei darf nicht "offen" sein.
   REM Die Datei darf nicht "offen" sein.
   REM ggf. zuvor mir FCLOSE schlie�en
   REM ggf. zuvor mir FCLOSE schließen


   SYSTEM sid -> eps
   SYSTEM sid -> eps
   Verl��t das Programm, um ein anderes DOS-Programm auszuf�hren. Oder auch einen
   Verlässt das Programm, um ein anderes DOS-Programm auszuführen. Oder auch einen
   Batch-File. Damit k�nnen andere Hilfsprogramme gerufen werden.
   Batch-File. Damit können andere Hilfsprogramme gerufen werden.


   REM *********************************************
   REM *********************************************
Zeile 438: Zeile 482:
   SYSTEM "SEND C:\PEUS\MYFAX.TXT"
   SYSTEM "SEND C:\PEUS\MYFAX.TXT"
=== Fehler-Meldungen und ihre Behebung ===
== Fehler-Meldungen und ihre Behebung ==


   zuviele Objekte pro Zeile
   zuviele Objekte pro Zeile
Zeile 445: Zeile 489:


   ] erwartet
   ] erwartet
   Ihre Druckvariable mu� immer mit "[" und "]" umschlossen werden.
   Ihre Druckvariable muss immer mit "[" und "]" umschlossen werden.


   " erwartet
   " erwartet
Zeile 451: Zeile 495:


   Sprungmarke zu lang
   Sprungmarke zu lang
   Verk�rzen Sie den symbolischen Bezeichner Ihrer Sprungmarke.
   Verkürzen Sie den symbolischen Bezeichner Ihrer Sprungmarke.


   Sprungmarke bereits vergeben
   Sprungmarke bereits vergeben
   Benutzen Sie einen anderen eindeutigen Namen f�r Ihre Sprung-Marke.
   Benutzen Sie einen anderen eindeutigen Namen für Ihre Sprung-Marke.


   Zu viele Labels
   Zu viele Labels
   Ihr Programm hat zuviele Sprung-Marken und ist somit f�r das ASR-BASIC zu komplex.
   Ihr Programm hat zuviele Sprung-Marken und ist somit für das ASR-BASIC zu komplex.
   Wenden Sie sich an den Software-Hersteller.
   Wenden Sie sich an den Software-Hersteller.


   Zu tiefe GOSUB-Verschachtelung oder Rekursion
   Zu tiefe GOSUB-Verschachtelung oder Rekursion
   Vermutlich wird st�ndig mit GOSUB ein Programm-Teil aufgerufen, ohne da� dieser
   Vermutlich wird ständig mit GOSUB ein Programm-Teil aufgerufen, ohne dass dieser
   mit RETURN ordnungsgem�� verlassen wird. Unter Umst�nden wird mit GOTO direkt
   mit RETURN ordnungsgemäß verlassen wird. Unter Umständen wird mit GOTO direkt
   das Unterprogramm verlassen. Zur Einkreisung des Fehlers leistet der Debugger
   das Unterprogramm verlassen. Zur Einkreisung des Fehlers leistet der Debugger
   gute Dienste.
   gute Dienste.
Zeile 468: Zeile 512:
   RETURN ohne vorherigen GOSUB-Aufruf
   RETURN ohne vorherigen GOSUB-Aufruf
   Ein Unterprogramm wurde versehentlich mit GOTO anstatt mit GOSUB angesprungen,
   Ein Unterprogramm wurde versehentlich mit GOTO anstatt mit GOSUB angesprungen,
   das GOTO liefert keine Information wohin der R�cksprung zu erfolgen hat.
   das GOTO liefert keine Information wohin der Rücksprung zu erfolgen hat.


   Sprungmarke unbekannt
   Sprungmarke unbekannt
Zeile 474: Zeile 518:
   definiert ist.
   definiert ist.


   Anweisung unverst�ndlich
   Anweisung unverständlich
   Die Basic-Syntax wurde nicht eingehalten. Sehen Sie sich die Beispiele an, wie
   Die Basic-Syntax wurde nicht eingehalten. Sehen Sie sich die Beispiele an, wie
   Befehle verwendnet werden. Im Besonderen kann eine Klammerung falsch sein.
   Befehle verwendnet werden. Im Besonderen kann eine Klammerung falsch sein.
Zeile 486: Zeile 530:


   Abbruch durch Tastendruck
   Abbruch durch Tastendruck
   Ihr Programm wurde durch Tasten-Druck unterbrochen. Es mu� ggf. nochmals
   Ihr Programm wurde durch Tasten-Druck unterbrochen. Es muss ggf. nochmals
   gestartet werden.
   gestartet werden.


   Bitte g�ltige Variable angeben
   Bitte gültige Variable angeben
   Es wurde zwar der Name einer Variable angegeben, jedoch ist diese nicht als
   Es wurde zwar der Name einer Variable angegeben, jedoch ist diese nicht als
   Variable zugelassen. So kann z.B. X7 nicht als Variablen-Name verwendet werden.
   Variable zugelassen. So kann z.B. X7 nicht als Variablen-Name verwendet werden.


   Division durch "0"
   Division durch "0"
   Pr�fen Sie bei Divisionen zun�chst den Divisor auf Identit�t mit "0" ab.
   Prüfen Sie bei Divisionen zunächst den Divisor auf Identität mit "0" ab.


   Variable ergibt keine Zahl
   Variable ergibt keine Zahl
   Es wurde versucht mit einem String zu rechnen, der keinen g�ltigen Zahlenwert
   Es wurde versucht mit einem String zu rechnen, der keinen gültigen Zahlenwert
   ergibt.
   ergibt.


   Bitte [ENDE-BASIC] einf�gen
   Bitte [ENDE-BASIC] einfügen
   Es fehlt in Ihrem Programm das [ENDE-BASIC] Satement. Am Ende Ihres Textes
   Es fehlt in Ihrem Programm das [ENDE-BASIC] Satement. Am Ende Ihres Textes
   sollte sich das Programm im normalen Ausgabe - Modus befinden.
   sollte sich das Programm im normalen Ausgabe - Modus befinden.


   PRN ohne NUL
   PRN ohne NUL
   Es wurde versucht den Drucker zu aktivieren, ohne da� er zuvor ausgeschaltet war.
   Es wurde versucht den Drucker zu aktivieren, ohne dass er zuvor ausgeschaltet war.


   NUL bereits eingeschaltet
   NUL bereits eingeschaltet
Zeile 512: Zeile 556:


   Alias-Name ist zu lang
   Alias-Name ist zu lang
   Ihr Alias Name f�r eine Variable ist zu lang, und sollte verk�rzt werden.
   Ihr Alias Name für eine Variable ist zu lang, und sollte verkürzt werden.
 
== Debugging ==
 
* Versetzen Sie den OrgaMon in den Diagnosemodus, nun entstehen 2 Dateien
** Fehler-Protokoll .\Diagnose\D-BASIC-ERROR-*.log.txt
** Ausgabe (PRINT) .\Diagnose\D-BASIC-RUN-*.log.txt


== Tipps für Programmierer ==
== Tipps für Programmierer ==


   Bei BASIC-Programmen hat der Programmierer alle M�glichkeiten ein Programm
   Bei BASIC-Programmen hat der Programmierer alle Möglichkeiten ein Programm
   undurchsichtig zu gestalten. BASIC wird jedoch dennoch eingesetzt, da die
   undurchsichtig zu gestalten. BASIC wird jedoch dennoch eingesetzt, da die
   Sprache recht einfach und sicher funktioniert und sich im Nu kleine Programme
   Sprache recht einfach und sicher funktioniert und sich im Nu kleine Programme
   erstellen lassen. Beachten Sie jedoch einige goldene Regeln der BASIC-Welt.
   erstellen lassen. Beachten Sie jedoch einige goldene Regeln der BASIC-Welt.


   1. In den ersten Zeilen des Programms sollte eine Liste aller Variable gef�hrt
   1. In den ersten Zeilen des Programms sollte eine Liste aller Variable geführt
     werden, die das Programm verwendet. Dadurch stellen Sie sicher, da� Sub-Module
     werden, die das Programm verwendet. Dadurch stellen Sie sicher, dass Sub-Module
     Ihre wichtigen Werte nicht �berschreiben d�rfen.
     Ihre wichtigen Werte nicht überschreiben dürfen.


   REM Variablen, und ihre Verwendung
   REM Variablen, und ihre Verwendung
Zeile 531: Zeile 581:
   REM Z = Laufvariable, freie Verwendung
   REM Z = Laufvariable, freie Verwendung


   2. Benutzen Sie f�r Labels nicht einfach die Namen "Start", "Stop" oder
   2. Benutzen Sie für Labels nicht einfach die Namen "Start", "Stop" oder
     "Schleife", sondern versehen Sie die Namen mit einem Kontext-Hinweis:
     "Schleife", sondern versehen Sie die Namen mit einem Kontext-Hinweis:
     "O2.Start", oder "Druck.Ende" usf.
     "O2.Start", oder "Druck.Ende" usf.


   3. Bedenken Sie immer, da� Ihre BASIC-Software nur dann nicht von Ihrem
   3. Bedenken Sie immer, dass Ihre BASIC-Software nur dann nicht von Ihrem
     Nachfolger gel�scht wird, wenn sie lesbar und einfach geschrieben ist.
     Nachfolger gelöscht wird, wenn sie lesbar und einfach geschrieben ist.
     Vermeiden Sie wildes Hin- und Herspringen. Machen Sie einen PASCAL-Kurs um
     Vermeiden Sie wildes Hin- und Herspringen. Machen Sie einen PASCAL-Kurs um
     dann BASIC zu programmieren.
     dann BASIC zu programmieren.
Zeile 542: Zeile 592:
== Datenbank-Anbindung mit Kontext-Tabellen ==
== Datenbank-Anbindung mit Kontext-Tabellen ==


   Um auch Listen ausdrucken zu k�nnen stehen Ihnen besondere Druckvariable zur
   Um auch Listen ausdrucken zu können stehen Ihnen besondere Druckvariable zur
   Verf�gung. Mit Hilfe dieser Varibale k�nnen Sie z.B. in einer KFZ-Datenbank
   Verfügung. Mit Hilfe dieser Varibale können Sie z.B. in einer KFZ-Datenbank
   von Fahrzeug zu Fahrzeug bl�ttern, bis das Datenbankende erreicht ist.
   von Fahrzeug zu Fahrzeug blättern, bis das Datenbankende erreicht ist.


   [??.ERSTER] bl�ttert zum ersten Datensatz
   [??.ERSTER] blättert zum ersten Datensatz
   [??.N�CHSTER] bl�ttert zum n�chsten Datensatz
   [??.N�CHSTER] blättert zum nächsten Datensatz
   [LISTE-ENDE] zeigt an, da� das Ende der Datenbank erreicht ist.
   [LISTE-ENDE] zeigt an, dass das Ende der Datenbank erreicht ist.
   Programmbeispiel zur KFZ-Listenausgabe.
   Programmbeispiel zur KFZ-Listenausgabe.


Zeile 554: Zeile 604:
   PRINT [GW.ERSTER]
   PRINT [GW.ERSTER]


   "n�chstes KFZ"
   "nächstes KFZ"
   IF [LISTE-ENDE] THEN "Ende"
   IF [LISTE-ENDE] THEN "Ende"
   PRINT [GW.Marke/Typ] & [GW.Modell]
   PRINT [GW.Marke/Typ] & [GW.Modell]
   PRINT [GW.N�CHSTER];
   PRINT [GW.NÄCHSTER];
   GOTO "n�chstes KFZ"
   GOTO "nächstes KFZ"
   "Ende"
   "Ende"
   PRINT "Ende der Liste erreicht"
   PRINT "Ende der Liste erreicht"
   [ENDE-BASIC]
   [ENDE-BASIC]


   Datenbank Anbindung �ber freies SQL
   Datenbank Anbindung über freies SQL


   a) Beispiel: Ermitteln der Programmversion
   a) Beispiel: Ermitteln der Programmversion

Aktuelle Version vom 23. Januar 2024, 15:15 Uhr

Vorwort

BASIC ist die Abkürzung für Beginners All purpose Symbolic Instruction Code. BASIC wurde in den Jahren 1963-1965 am Dartmouth College in Hanover (USA) entwickelt, und gehörte zu den am weitesten verbreiteten Programmiersprachen auf kleinen Rechnern bis 1985.

D-BASIC entstand in Anlehnung an diese erfolgreiche Programmiersprache und steht für Druckvorlagen-BASIC.

D - BASIC

Bei der Anpassung des OrgaMon an Anforderungen des Anwenders kommt man mit statischen Parametern oft nicht weiter. An diesen Stellen hilft eine freie Programmier-Möglichkeit am besten weiter. Der End-Anwender des OrgaMon hat selbst Zugriff auf diese Programmierung und kann individuelle Anforderungen an den OrgaMon selbst realisieren. Inerhalb des OrgaMon wird D-BASIC breit eingesetzt:

  • Druckvorlagen: die Drucker-Ausgabe (Druckvorlagen, also html-Generatoren) mit Hilfe von Druckvorlagen / Etiketten für noch mehr Flexibilität.
  • OLAP: erhöht die Flexibilität bei der Ermittlung einer OLAP-Abfrage Dimension Add-On für SQL-Statements
  • Vor Beleg-Buchungen, um z.B. Marketing-Aktionen automatisiert zu steuern
  • Nimmt Buchungserweiterungen bei Verträgen und Belegen vor
  • In der Tagwache und dem Tagesabschluss (via OLAP)

Historie

D-BASIC hat bereits eine lange Geschichte und war bereits in der "RAGAL" Software integriert, ein Vorgänger des OrgaMon.

  • 12.12.1991 erste Version fürs RAGAL.
  • 11.04.1992 "PRN" und "NUL" eingeführt
  • 16.02.1993 Erweiterung für TÜV Hannover "CALL"
  • 01.01.1995 Integration ins AA2 / AA3
  • 16.12.2003 Basic32 ist nun ein Objekt / Portierung Turbo-Pascal -> Delphi
  • 12.12.2006 Erweitert um PREIS ( ) Funktion (erstmalige Anbindung an eCommerce)
  • 19.07.2010 Integration ins OLAP
  • 09.07.2014 Integration in die Beleg-Buchung / Portierung Delphi -> FreePascal

BASIC Einführung

Lektion 1: REM, PRINT, LET, VAL

 
 REM  ist die Abkürzung für Remark und bedeutet Kommentar. Hier können Sie also
       Ihr Programm kommentieren, alle Eingaben hinter dem REM-Bezeichner werden
       ignoriert.

 PRINT	("Drucke!") Gibt Texte oder Zahlen auf dem Drucker (oder Bildschirm) aus.

 LET	("Es sei") wird benutzt, um Zwischenergebnisse in einer Variable
       zwischenzuspeichern. Variable sind Schubladen, die Sie mit Namen
       versehen können. Dort werden Werte gespeichert bis Sie diese wieder
       verwenden. In diesem Fall geschieht das sofort in der nächsten Zeile.

 VAL	("Wert") wandelt das wissenschaftliche Zahlenformat (3.4982398E+02)
       in ein besser lesbares Format um, dazu müssen die Anzahl der
       Vorkommastellen und die Anzahl der Nachkommastellen angegeben werden.
 


 REM mein erstes Programm:
 PRINT "2"+"2"


 Wenn Sie nun Ihr Programm starten (d.h. <F4>-drucken oder <F5>-Layout) erhalten
 Sie die Ausgabe
 4.0000000000E+00
 Die ist zwar genau richtig, dennoch haben Sie sicher ein schlichteres Ergebnis
 erwartet, z.B. einfach nur 4,0. Wir verfeinern also unser Programm:
 REM mein erstes Programm:
 LET ERGEBNIS="2"+"2"
 PRINT VAL(ERGEBNIS,"2","1")


 Nach dieser kleinen Änderung sieht die Ausgabe schon besser aus:
  4,0
 2 und 2 zu addieren ist uns jedoch zu wenig. Jetzt soll der Benutzer bestimmen,
 welche Werte eingegeben werden sollen. 

Lektion 2: INPUT

 
 INPUT   ("Eingabe") stoppt den Programmablauf, und fordert den Benutzer auf, eine
             Eingabe zu tätigen.
 


Die Benutzereingabe erfolgt durch den INPUT-Befehl.
 INPUT "Geben Sie die erste Zahl ein:",XWERT
 INPUT "Geben Sie die zweite Zahl ein:",YWERT
 LET ERGEBNIS=XWERT+YWERT
 PRINT VAL(ERGEBNIS,"2","1")

Lektion 3: IF, GOTO, Sprungmarke

Da es im D-Basic keine Zeilen-Nummern gibt, müssen Sprungziele durch sogenannte Sprungmarken markiert werden. Dies geschieht einfach durch Strings, die am Anfang der Zeile angegeben sind.

 LET A="0"
 "Start-Loop"
 PRINT "HALLO Nummer " & VAL(A,"2","0")
 LET A=A+"1"
 IF A="10" THEN "Ende"
 GOTO "Start-Loop"
 "Ende"
 PRINT "Fertig"

Das erste "sinnvolle" Programm errechnet den Durchschnittlichen Verbrauch Ihres KFZ; z.B. nach einer Urlaubsreise.

 "Start"
 INPUT "KM-Stand (Tank leer, frisch getankt)",KM0
 IF KM0="0" THEN "Ende"

 INPUT "KM-Stand (Tank wieder leer)",KM1
 IF KM1="0" THEN "Ende"

 INPUT "Liter-Sprit",L
 IF L="0" THEN "Ende"

 INPUT "Liter-Preis",PREIS
 IF PREIS="0" THEN "Ende"

 LET KM=KM1-KM0
 LET VERBRAUCH100=(L/KM)*"100"
 LET KOSTENKM=(L*PREIS)/KM

 PRINT "gefahrene kM             : " & VAL(KM,"6","2")
 PRINT "Benzinkosten pro kM      : " & VAL(KOSTENKM,"6","2") & " DM"
 PRINT "Verbrauch pro 100 kM     : " & VAL(VERBRAUCH100,"6","2") & " DM"
 GOTO "Start"
 "Ende"

"Start" und "Ende" sind sogenannte Sprungmarken, d.h. an diesen Stellen können Sie die Programmausführung wiederholen oder fortsetzen. Sie können also mit Hilfe des GOTO-Befehls im Programm die Ausführung des Programmes an diesen benannten Stellen fortsetzen. Dabei kann man zurück und vorspringen.

Lektion 4: GOSUB, RETURN

GOTO springt an eine andere Stelle des Codes. Erst mal dort angelangt weiß BASIC nicht mehr von woher es gesprungen kam. GOSUB merkt sich das und kann die Arbeit an alter Stelle wieder aufnehmen. Dadurch lassen sich Code-Teile anspringen, die mehrfach von unterschiedlichen Stellen des Programmes immer wieder benutzt werden.

 LET A="10"
 GOSUB "Ausgabe"
 LET A="102"
 GOSUB "Ausgabe"
 GOTO "Ende"
 "Ausgabe"
 PRINT "Mein Wert ist " & VAL(A,"10","5")
 RETURN
 "Ende"

Reservierte BASIC-Bezeichner

  '&'       String Addierung
  '+'       Zahlen Addition
  '-'       Zahlen Subtraktion
  '*'       Zahlen Multiplikation
  '/'       Zahlen Division
  '='       Zahlen und String Identität
  '('       Klammerung von Formeln und Funktionen
  ')'       Klammerung von Formeln und Funktionen
  '"'       String Begrenzer
  '['       Alias und Variablen Begrenzer
  ']'       Alias und Variablen Begrenzer
  ';'       für PRINT ohne Zeilenumbruch
  ','       Komma zur Parameter-Abtrennung
  '>'       Größer-Operator Strings/Zahlen
  '<'       Kleiner-Operator Strings/Zahlen
  'IF'      Bedingte Abfrage mit GOTO oder GOSUB-Sprung
  'OR'      logisches ODER Verknüpfung
  'LET'     Variablen Zuweisung
  'REM'     Einleitung eines Kommentars
  'AND'     logische UND Verknüpfung
  'NOT'     logische NICHT Negierung
  'LEN'     String-Länge bestimmen
  'MID'     Sub-String ausschneiden
  'VAL'     Wert aus einen String bilden
  'POS'     Position eines Sub-Strings bestimmen
  'SQL'     Ermittle das Ergebnis eines SQL Statements.
            Es kann nur ein einzelne Zelle ermittelt werden
  'THEN'    IF Statement Begrenzung
  'FILL'    Wiederholung eines Strings
  'GOTO'    Sprung-Anweisung
  'PRINT'   String-Ausgabe auf Drucker
            ";" am Ende -> kein Zeilenumbruch
            "<x>","<y>","<Bild-Dateiname>" gibt eine Grafik aus
  'GOSUB'   Aufruf einer Subroutine
  'INPUT'   Eingabe über Bildschirm
  'ALIAS'   einer Variable einen extern sichtbaren Namen geben
  'RETURN'  Rücksprung aus einer Subroutine
  'END'     Beendet das BASIC-Programm
  'ABORT'   Bricht das BASIC-Programm ohne Druck ab
  'ROUND'   Runden von Zahlenwerten
  'DEBUG'   Aktiviert den Debuggermodus
  'FOPEN'   öffnet die Text-Datei
  'FCREATE' erzeugt eine neue Text-Datei
  'FPRINT'  Ausgabe eines Strings in eine Datei
  'FINPUT'  Auslesen einer Datei
  'FCLOSE'  Schließen einer Text-Datei
  'FSORT'   Sortieren einer Text-Datei
  'SYSTEM'  Ein DOS-Programm wird aufrufen
  'DEVICE'  Wählt das Ausgabegerät aus (den Drucker)
            Wählt das Ausgabe-Formular aus
  'MOVE'    Setzt die Druckposition (x,y)
  'FONT'    Setzt die Druckschrift (Fontname,Grösse,Attribute[italic,bold,underline])

Besondere Variable

 TITEL     Titel des Dokumentes im Druckspooler
 ANZAHL    Anzahl der Druckexemplare (mit "MENGE" der Warenbewegung initialisiert)
 FORMULAR  Druckausgabe Formular das verwendet werden soll
 X         Offset X der ersten Druckposition
 Y         Offset Y der ersten Druckposition
 ZEILE     Aktuelle Zeilennummer des D-BASIC Scripts (Wird nur im Debug-Modus gesetzt!)

Unterschiede zum normalen BASIC

D-BASIC hat einigen Balast abgeworfen, die ältere BASIC-Varianten mit sich tragen müssen. Dadurch ist es jedoch nur in gewissem Umfang kompatibel zu anderen BASIC-Dialekten.

  • So gibt es keine Zeilen-Nummern mehr
  • Es muß mit Sprungmarken gearbeitet werden
  • Die Variable müssen kein "$" am Anfang haben
  • Arrays bzw. das DIM Statement wird nicht unterstützt
  • Datenbank Integration mit '[' DATENBANK-FELDNAME ']'
  • Programmzeilen können mit '#' am Ende mit der nächsten Zeile verbunden werden

Daten-Typen

 Der größte Unterschied zu Standard-BASIC ist, dass keine verscheidenen
 Daten-Typen mehr gibt, sondern nur noch den Datentyp String. Sie können
 dennoch mit Zahlen arbeiten oder mit logischen Ausdrücken, beachten Sie
 jedoch, dass alle konstanten Werte immer als String geschrieben werden müssen:
 1.2	muss als	"1.2"   oder "1,2" geschrieben werden
 TRUE	muss als	"Y"     geschrieben werden
 FALSE	muss als	"N"     geschrieben werden

Variablen-Namen

 Variable sind beliebige Kombinationen aus Buchstaben und Zahlen, jedoch darf
 kein BASIC-Schlüsselwort (GOTO, IF, PRINT) in der Variable enthalten sein.
 REM Fehlerhafte Variable!!!
 LET GOTO3="2837"
 IF PRINTIT THEN GOSUB "DruckeZeile"

Basic Syntax

 Im folgenden wird der komplette Basic-Syntax beschrieben, nach welchem alle
 BASIC-Programme aufgelöst werden.
 EOLId	ist das Ende einer Zeile.
 Sid	ist ein String.
 eps	ist der Hinweis, das keine weitere Bearbeitung erfolgt (Epsilon ist die
 Leeren Anweisung).
 RemId EOLId -> eps
 REM Jetzt wird gerechnet
 REM (c)by Heinz Spotlum, PEUS SYSTEMS
 LET X="10"*"120."+B
 REM    ^^ das hier ggf. Ändern!
 ReturnId EOLId -> eps


 ENDId EOLId -> eps
 REM Jetzt endet die Programm-Ausführung
 REM In der nächsten Zeile
 END
 lenId BraOpenId sId BraCloseId -> sId
 LET A="Sepp"
 PRINT A & " ist " & VAL(LEN(A),"3","0") & " Zeichen lang!"
 BraOpenId sId BraCloseId -> sId
 IF ("X") THEN "Funktioniert"
 sId concatid sId -> sId
 LET A=" Sehr " & "geehrter" & " Herr " & [NAME]
 midId BraOpenId sId kommaId sId kommaId sId BraCloseId -> sId
 PRINT MID("Thomas Gottschalk","12","6")
 REM liefert "schalk"
 valId BraOpenId sId kommaId sId kommaId sId BraCloseId -> sId
 REM Formatierte Ausgabe eines Wertes und Rundung
 PRINT VAL("1,2","4","3")
 REM liefert ___1,000
 posId BraOpenId sId kommaId sId BraCloseId -> sId
 REM Position eines Strings in einem Sub-String
 PRINT POS("rot","Schrottplatz")
 REM liefert "4"
 fillId BraOpenId sId kommaId sId BraCloseId -> sId
 REM mehrfach Addierung eines Strings
 PRINT FILL("X","10")
 REM ergibt "XXXXXXXXXX"
 NotId sId -> sId
 IF NOT("X") THEN "Computer spinnt!"
 sId andId sId -> sId
 IF (A AND NOT(B)) THEN "ok"
 sId orId sId -> sId
 IF (A OR NOT(B)) THEN "kann sein"
 sId MalId sId -> sId
 PRINT "10"*"120"
 REM ergibt "1.200"
 sId DivId sId -> sId
 PRINT "102"/"1.23434"
 REM ergibt "78,23"
 sId PlusId sId -> sId
 PRINT "102"+"300"
 REM ergibt "402"
 sId MinusId sId -> sId
 PRINT "3"-"1"
 REM ergibt "2"
 letid sId eqId sId EOLId -> eps
 LET A="Zeige Hilfe"
 AliasId Sid eqId Sid EOLId -> eps
 LET A="10"
 ALIAS A="Aussen"
 IF [Aussen]="10" THEN "WeltInOrdnung"
 sId EqId sId -> sId
 LET A= ([Druck]=[InnenDruck])
 IF A THEN "Druck ausgeglichen"
 sId GreaterId sId -> sId
 IF "10">"3" THEN "WeltInOrdnung"
 sId LessId sId -> sId
 IF "10"<"123" THEN "WeltInOrdnung"
 ifId sId thenId sid EOLId -> eps
 "Hallo"
 IF "X" THEN "Hallo"
 REM klassische Endlos-Schleife
 ifId sId thenId Gosubid sid EOLId -> eps
 IF TESTEKURZ THEN GOSUB "Test"
 REM Sprung mit GOSUB, anstatt GOTO
 printId sId SemiId EOLId -> eps
 REM Druckausgabe ohne Zeilen-Umbruch
 PRINT ABC;
 PRINT DEFG
 REM ergibt "ABCDEFG" auf dem Drucker
 printId sId EOLId -> eps
 REM Druckausgabe mit Zeilen-Umbruch
 PRINT "Hallo Welt"
 PRINT "hier ist die 2. Zeile"
 REM ergibt 
 REM Hallo Welt
 REM 2. Zeilen
 printId EOLId -> eps
 REM nur Zeilen-Vorschub
 PRINT
 REM ergibt eine leere Zeile
 gotoId sId EOLId -> eps
 "Hallo"
 PRINT "Hallo"
 GOTO "Hallo"
 gosubId sId EOLId -> eps
 GOTO "Start"
 "HilfsProgramm"
 PRINT "Hier bin ich jetzt"
 RETURN
 "Start"
 GOSUB "HilfsProgramm"
 PRINT "und jetzt wieder hier"
 GOSUB "HilfsProgramm"
 PRINT "und jetzt wieder da"
 sId EOLId -> eps
 "Start"
 REM ^ Dies ist die Sprung-Marke Start
 nulid EOLId -> eps
 REM NUL unterbricht die Druckausgabe
 NUL
 PRINT "XYZ"
 PRN
 PRINT "ABC"
 REM ergibt nur "ABC"
 prnId EOLId -> eps
 REM PRN schaltet die Druckausgabe wieder ein
 NUL
 PRINT "XYZ"
 PRN
 PRINT "ABC"
 REM ergibt nur "ABC"
 InputId Sid kommaid Sid -> eps
 LET A="Anton Müller"
 INPUT "Geben Sie Ihren Namen ein",A
 PRINT "Ihr Eingabe ist " & A
 LET J="J"
 INPUT "Ist das ok?",J
 IF (J="J") OR (J="j") THEN "Drucken"
 GOTO "Ende"
 "Drucken"
 PRINT "Hallo "& A
 "Ende"
 RoundId BraOpenId sId BraCloseIdSid -> Sid
 LET A=DRUCK/"1283.2736"
 LET DRUCK=ROUND(DRUCK*"10")
 REM             ^^ runden auf 1. Nachkommastelle
 PRINT VAL(DRUCK,"10","2")
 DEBUGId -> eps
 DEBUG
 REM ^^^^^Ab hier soll das Programm kontrolliert werden
 PRINT VAL("2.3","10","2")
 FOPEN sid -> eps
 FOPEN "C:\autoexec.bat"
 REM Die Datei AUTOEXEC.BAT wird geöffnet
 REM sie kann mit FINPUT eingelesen werden
 REM Erfolg der Aktion steht in [LISTE-ENDE]
 FCREATE sid -> eps
 FCREATE "TEST.TXT"
 FPRINT "Name;Straße;Ort"
 "Schleife"
 FPRINT [K.Name] & ";" ;
 FPRINT [K.Straße] & ";" ;
 FPRINT [K.Ort] 
 FCLOSE
 FPRINT sid [ ";" ] -> eps
 REM Ausgabe von Strings erfolgen in geöffnete
 REM Dateien (FCREATE).
 REM um die Ausgabe ordnungsgemäß abzuschließen
 REM nach dem letzten FPRINT- Befehl ein FCLOSE
 REM folgen
 FINPUT sid -> eps
 FOPEN "C:\AUTOEXEC.BAT"
 REM Die aktuelle Text-Datei (FOPEN) wird
 REM ausgelesen!
 "Einlesen"
 FINPUT INPSTR
 IF [LISTE-ENDE] THEN "Ende"
 PRINT INPSTR
 GOTO "Einlesen"
 "Ende"
 FCLOSE
 FCLOSE -> eps
 FCLOSE
 REM Die aktuelle Text-Datei wird geschlossen
 REM nach Eingabe (FINPUT) und Ausgabe (FOUTPUT)
 REM notwendig!
 FSORT sid -> eps
 FSORT "KUNDE.STR"
 REM Die aktuelle Datei wird sortiert
 REM Die Datei darf nicht "offen" sein.
 REM ggf. zuvor mir FCLOSE schließen
 SYSTEM sid -> eps
 Verlässt das Programm, um ein anderes DOS-Programm auszuführen. Oder auch einen
 Batch-File. Damit können andere Hilfsprogramme gerufen werden.
 REM *********************************************
 REM Ein FAX senden
 REM *********************************************
 FCREATE "MYFAX.TXT"
 FPRINT "Hallo Hubi, wie gehts Dir?"
 FPRINT "Bitte ruf mal an:"
 FPRINT [K.Name]
 FPRINT [K.Ort]
 FCLOSE
 SYSTEM "SEND C:\PEUS\MYFAX.TXT"

Fehler-Meldungen und ihre Behebung

 zuviele Objekte pro Zeile
 Ihre Berechnungs-Formel ist zu lang oder hat zu viele Klammern bzw Einzel-Objekte.
 Zerlegen Sie die Zeile in mehrere Teil-Schritte.
 ] erwartet
 Ihre Druckvariable muss immer mit "[" und "]" umschlossen werden.
 " erwartet
 Ihr String-Bezeichner endet nicht mit ".
 Sprungmarke zu lang
 Verkürzen Sie den symbolischen Bezeichner Ihrer Sprungmarke.
 Sprungmarke bereits vergeben
 Benutzen Sie einen anderen eindeutigen Namen für Ihre Sprung-Marke.
 Zu viele Labels
 Ihr Programm hat zuviele Sprung-Marken und ist somit für das ASR-BASIC zu komplex.
 Wenden Sie sich an den Software-Hersteller.
 Zu tiefe GOSUB-Verschachtelung oder Rekursion
 Vermutlich wird ständig mit GOSUB ein Programm-Teil aufgerufen, ohne dass dieser
 mit RETURN ordnungsgemäß verlassen wird. Unter Umständen wird mit GOTO direkt
 das Unterprogramm verlassen. Zur Einkreisung des Fehlers leistet der Debugger
 gute Dienste.
 RETURN ohne vorherigen GOSUB-Aufruf
 Ein Unterprogramm wurde versehentlich mit GOTO anstatt mit GOSUB angesprungen,
 das GOTO liefert keine Information wohin der Rücksprung zu erfolgen hat.
 Sprungmarke unbekannt
 Mit GOTO oder GOSUB oder IF .. THEN " " wird ein Label angesprungen, das nicht
 definiert ist.
 Anweisung unverständlich
 Die Basic-Syntax wurde nicht eingehalten. Sehen Sie sich die Beispiele an, wie
 Befehle verwendnet werden. Im Besonderen kann eine Klammerung falsch sein.
 Variable erwartet
 Die Basic-Syntax erwartet an dieser Stelle eine Variable, und keinen konstanten
 Ausdruck. Benutzen Sie die Variable A bis Z.
 Sprungmarke falsch formuliert
 eine Sprungmarke kann nicht angelegt werden.
 Abbruch durch Tastendruck
 Ihr Programm wurde durch Tasten-Druck unterbrochen. Es muss ggf. nochmals
 gestartet werden.
 Bitte gültige Variable angeben
 Es wurde zwar der Name einer Variable angegeben, jedoch ist diese nicht als
 Variable zugelassen. So kann z.B. X7 nicht als Variablen-Name verwendet werden.
 Division durch "0"
 Prüfen Sie bei Divisionen zunächst den Divisor auf Identität mit "0" ab.
 Variable ergibt keine Zahl
 Es wurde versucht mit einem String zu rechnen, der keinen gültigen Zahlenwert
 ergibt.
 Bitte [ENDE-BASIC] einfügen
 Es fehlt in Ihrem Programm das [ENDE-BASIC] Satement. Am Ende Ihres Textes
 sollte sich das Programm im normalen Ausgabe - Modus befinden.
 PRN ohne NUL
 Es wurde versucht den Drucker zu aktivieren, ohne dass er zuvor ausgeschaltet war.
 NUL bereits eingeschaltet
 Es wurde versucht den Drucker auszuschalten, obwohl zuvor der Drucker bereits
 deaktiviert war.
 Alias-Name ist zu lang
 Ihr Alias Name für eine Variable ist zu lang, und sollte verkürzt werden.

Debugging

  • Versetzen Sie den OrgaMon in den Diagnosemodus, nun entstehen 2 Dateien
    • Fehler-Protokoll .\Diagnose\D-BASIC-ERROR-*.log.txt
    • Ausgabe (PRINT) .\Diagnose\D-BASIC-RUN-*.log.txt

Tipps für Programmierer

 Bei BASIC-Programmen hat der Programmierer alle Möglichkeiten ein Programm
 undurchsichtig zu gestalten. BASIC wird jedoch dennoch eingesetzt, da die
 Sprache recht einfach und sicher funktioniert und sich im Nu kleine Programme
 erstellen lassen. Beachten Sie jedoch einige goldene Regeln der BASIC-Welt.
 1. In den ersten Zeilen des Programms sollte eine Liste aller Variable geführt
    werden, die das Programm verwendet. Dadurch stellen Sie sicher, dass Sub-Module
    Ihre wichtigen Werte nicht überschreiben dürfen.
 REM Variablen, und ihre Verwendung
 REM A = Druck
 REM B = Betriebs-Status
 REM C = privat von Modul "O2" nicht verwenden, usf.
 REM Z = Laufvariable, freie Verwendung
 2. Benutzen Sie für Labels nicht einfach die Namen "Start", "Stop" oder
    "Schleife", sondern versehen Sie die Namen mit einem Kontext-Hinweis:
    "O2.Start", oder "Druck.Ende" usf.
 3. Bedenken Sie immer, dass Ihre BASIC-Software nur dann nicht von Ihrem
    Nachfolger gelöscht wird, wenn sie lesbar und einfach geschrieben ist.
    Vermeiden Sie wildes Hin- und Herspringen. Machen Sie einen PASCAL-Kurs um
    dann BASIC zu programmieren.

Datenbank-Anbindung mit Kontext-Tabellen

 Um auch Listen ausdrucken zu können stehen Ihnen besondere Druckvariable zur
 Verfügung. Mit Hilfe dieser Varibale können Sie z.B. in einer KFZ-Datenbank
 von Fahrzeug zu Fahrzeug blättern, bis das Datenbankende erreicht ist.
 [??.ERSTER]	blättert zum ersten Datensatz
 [??.N�CHSTER]	blättert zum nächsten Datensatz
 [LISTE-ENDE]	zeigt an, dass das Ende der Datenbank erreicht ist.
 Programmbeispiel zur KFZ-Listenausgabe.
 [START-BASIC]
 PRINT [GW.ERSTER]
 "nächstes KFZ"
 IF [LISTE-ENDE] THEN "Ende"
 PRINT [GW.Marke/Typ] & [GW.Modell]
 PRINT [GW.NÄCHSTER];
 GOTO "nächstes KFZ"
 "Ende"
 PRINT "Ende der Liste erreicht"
 [ENDE-BASIC]
 Datenbank Anbindung über freies SQL
 a) Beispiel: Ermitteln der Programmversion
 LET V1 = SQL( "SELECT MAX(RID) FROM REVISION" )
 LET V1 = MID (V1,"1","1") & "." & MID (V1,"2","3")
 PRINT "OrgaMon Rev. " & V1
 b) Verlags/Lieferantnamen ermitteln
 PRINT SQL ( "select SUCHBEGRIFF from PERSON where RID=" & [ARTIKEL.VERLAG_R] )