home *** CD-ROM | disk | FTP | other *** search
- Programm DTPDEMO;
-
- (*****************************************************************************
- * Quellprogramm: DTPDEMO.PAS *
- * Beschreibung: Händler- und Endbenutzerdemonstration des *
- * Deutschen Pascals/i86 Version 1.0 *
- * Programmierer: Dirk Benthien *
- * Datum: Mai 1987 *
- * Version *
- * Distribution: 1.0 *
- * Arbeitdatei: 1.037 *
- * *
- * Compilierung: *
- * a) DTPINTF DTPDEMO (Festplattenversion) *
- * oder b) DTP1 DTPDEMO *
- * DTP2 DTPDEMO *
- * LINK DTPDEMO,,,DTPSTD+DTPINT *
- * *
- * Eingabe/Ausgabe: Datei mit Namen DTPDEMO.DAT *
- * Benutzerinteraktion (con i/o) *
- * *
- * Empfehlung: Farbmonitor, aber nicht notwendig *
- * *
- * *
- * *
- * (C) Copyright 1987 by BCI - Benthien Consulting International *
- * West Germany and USA *
- * *
- * Einschränkung des Copyrights: *
- * ----------------------------- *
- * Dieses Programm darf als Quellprogramm wie auch als exekutierbare *
- * Version frei kopiert und verwendet werden. Es ist aber ausdrücklich *
- * verboten, Quell- oder Objektprogramm in gleichgültig welcher Weise zu *
- * zu verändern, und in den Umlauf zu bringen. Den registrierten Benutzern *
- * des Deutschen Pascals wird das Recht eingeräumt, die in diesem Programm *
- * enthaltenen Routinen in Ihren eigenen Programmen zu verwenden. *
- *****************************************************************************)
-
- Konstante
- Meldg0 = ' ';
- Meldg1 = '+++ bci software mitteilung +++ bci software mitteilung +++ bci software mittei';
- Meldg2 = 'Programm Zins; ';
- Meldg3 = ' Variable ';
- Meldg4 = ' gegenwärtig : Gleit; ';
- Meldg5 = ' zukünftig : Gleit; ';
- Meldg6 = ' Jahre : Gleit; ';
- Meldg7 = ' Zinsfuß : Gleit; ';
- Meldg9 = ' Funktion Zinseszins (gegenwärtig, Zinsfuß, Jahre, : Gleit) : Gleit; ';
- Meldg10 = ' Anfang ';
- Meldg11 = ' Zinseszins := gegenwärtig*exp(ln(1+Zinsfuß)*Jahre); ';
- Meldg12 = ' Ende; ';
- Meldg14 = ' Anfang ';
- Meldg15 = ' schreibezl(''Einfache Zinseszinsrechnung: Bitte Betrag, Zinsfuß ''); ';
- Meldg16 = ' schreibezl(''und Jahre getrennt durch Leerzeichen eingeben: ''); ';
- Meldg17 = ' lieszl(gegenwärtig, Zinsfuß, Jahre); ';
- Meldg18 = ' Zinsfuß := Zinsfuß/100; ';
- Meldg19 = ' zukünftig := Zinseszins (gegenwärtig, Zinsfuß, Jahre); ';
- Meldg20 = ' schreibezl(''Der Endbetrag ist gleich '', zukünftig) ';
- Meldg21 = ' Ende. ';
- Meldg22 = 'Deutsches Pascal/i86';
- Meldg23 = 'Zusammenfassung der Vorteile des neuen Programmentwicklungssystems';
- Meldg24 = 'Erforderliche Systemausstattung';
- Meldg25 = 'Lieferumfang und Preis';
-
- Adr0 = 'Exklusiv Distributor';
- Adr1 = 'D M V';
- Adr2 = 'Daten & Medien Verlagsges. mbH';
- Adr3 = 'Fuldaer Str. 6, 3440 Eschwege';
-
- (**************************************************************************
- * Typenvereinbarungen *
- * ------------------- *
- * *
- * === Kommandos === *
- * Interessant ist hier die Definition der Kommandos als Kontrollkonstruct *
- * zur Steuerung der Ablauffolge der einzelnen Screens. Eine völlig andere *
- * Reihenfolge kann durch andere Anordnung der Elemente erzielt werden. *
- * Wichtig: Alle Elemente müssen ultimativ zu Prozeduren oder Funktionen *
- * führen (siehe Hauptprogramm). Hier ist auch eine Fehlerquelle für den *
- * unvorsichtigen Programmierer, es kann so eine nicht existente Routine *
- * angesprungen werden, was kein Compiler beim Compilieren erkennen kann, *
- * und zur Laufzeit zum "halting state" führt. *
- * *
- * === Register === *
- * Abbildung der Register der 8088 CPU als Byte (low, high) bzw. *
- * "Redefinition" des ganzen Registers als Integer *
- **************************************************************************)
-
-
- Typus
- Byte = 0..255;
- Farben = ( schwarz, blau, grün, metallic,
- rot, violet, braun, grau,
- hellschwarz, hellblau, hellgrün, silber,
- hellrot, hellviolet, gelb, weiß );
- Folge80 = Folge(80);
- Kommandos = ( K_Hallo, K_Mitteilung, K_Prg1_deutsch,
- K_Prg1_Wörter, K_Prg1_englisch, K_Prg1_gemischt,
- K_Prg1_Umlaut, K_Bibliotheken, K_Vorteile,
- K_System, K_Lieferung );
- Null_Länge = Folge(0);
- Rahmenart = ( einfach, doppelt);
- Register =
- Satz
- falls integer von { 4 Datenregister mit je 16 bits }
- 0: (al,ah, { = Wort => ax,bx,cx,dx) bzw. }
- bl,bh, { = 2 Bytes => al,ah,bl,bh,... }
- cl,ch, { wobei al => Register A, low byte }
- dl,dh : Byte); { und ah => Register A, high byte}
- 1: (ax,bx,
- cx,dx : Integer);
- Ende;
-
- Variable
- Ausgabezeile : Folge80;
- Adresse : Bereich[0..3] von Folge80;
- Eingabe : Zeichen;
- Folgenlänge : Integer;
- i,j : Integer;
- Kommando, Letztes_Kmd : Kommandos;
- Meldung : Bereich[0..100] von Folge80;
- Mode : Integer;
- Spalte, Zeile : Integer;
-
-
- (**************************************************************************
- * vorvereinbarte Referenzen von Prozeduren/Funktionen *
- ***************************************************************************)
-
- Prozedur farbig ( Ausgabetext : Folge80;
- Farbe : Farben;
- Spalte, Zeile : Integer ); Referenz;
- Prozedur farbig_warte ( Ausgabetext : Folge80;
- Farbe : Farben;
- Spalte, Zeile : Integer;
- sek : Integer ); Referenz;
- Prozedur Haken ( Zeile : Integer ); Referenz;
- Prozedur Linie ( Spaltelinks,
- Zeile,
- Spalterechts : Integer;
- Art : Rahmenart;
- Farbe : Farben ); Referenz;
- Prozedur Mitte ( Ausgabetext : Folge80;
- Farbe : Farben;
- Zeile : Integer ); Referenz;
- Prozedur Pause; Referenz;
- Prozedur Programm_ausgabe; Referenz;
- Prozedur Rahmen ( Spaltelinks,
- Zeileoben,
- Spalterechts,
- Zeileunten : Integer;
- Art : Rahmenart;
- Farbe : Farben ); Referenz;
- Prozedur schreibe_attr( Zeichencode,
- Seite, Farbe : Byte ); Referenz;
- Prozedur tausche ( Eins, Zwei : Integer ); Referenz;
- Prozedur warte ( sek : Integer ); Referenz;
-
- (**************************************************************************
- * externe Referenzen von Prozeduren/Funktionen *
- ***************************************************************************)
-
- Funktion Länge ( Variable i : Null_Länge ): Integer; extern;
- Prozedur pos ( Spalte, Zeile : Integer ); extern;
- Prozedur rufeBIOS ( Var X : Register ); extern;
- Prozedur rufeDOS ( Var X : Register ); extern;
-
-
- Prozedur Bibliotheken;
- Anfang
- Vorschub;
- farbig( Meldg22, gelb, 3,0 );
- farbig( ' schließt eine komplette Sammlung von Prozedur- und', weiß, 23,0 );
- farbig( ' Funktionenbibliotheken ein... natürlich ohne Aufpreis!', weiß, 12,1);
- Rahmen( 0, 3, 56, 5, einfach, metallic );
- Rahmen( 4, 6, 60, 9, einfach, blau );
- Rahmen( 8, 10, 65, 13, einfach, gelb );
- Rahmen( 13, 14, 71, 18, doppelt, rot );
- Rahmen( 17, 19, 78, 22, doppelt, grün );
- farbig( ' Standardbibliothek ', weiß, 3, 3);
- farbig_warte( '... enthält die üblichen Allzweckroutinen', grau, 3,4,1 );
- farbig( ' Integerbibliothek ', weiß, 7, 6);
- farbig( '... für das superkompakte Programm.', grau, 7,7 );
- farbig_warte( 'Ideal für Systemprogrammierung!', grau, 11, 8, 1 );
- farbig( ' Gleitpunktbibliothek ', weiß, 11, 10);
- farbig( '... umfangreiche Sammlung äußerst leistungstarker', grau, 11, 11);
- farbig_warte( 'mathematischer Routinen (64 bits Präzision)', grau, 15, 12, 1);
- farbig( ' 8087/80287-Bibliothek ', weiß, 16,14 );
- farbig( '... nutzt vorhandenen 8087- bzw. 80287-Arithmetik-', grau, 16, 15 );
- farbig( 'koprozessor für höchste Präzision und extrem', grau, 20, 16);
- farbig_warte( 'schnelle Verarbeitungsgeschwindigkeit', grau, 20, 17, 1);
- farbig( ' BCD-Bibliothek ', weiß, 20, 19 );
- farbig( '... binär-codierte Dezimalzahlen für absolute Genauigkeit.', grau, 20, 20 );
- farbig_warte( 'Hervorragend in der Finanzmathematik einzusetzen!', grau, 24, 21, 3);
- Pause;
- falls Eingabe gleich
- 'e' : Eingabe := 'E';
- 'v', 'V': Kommando := Vorwert(K_Bibliotheken);
- andernfalls
- Kommando := Nachwert(K_Bibliotheken);
- Ende;
- Ende; { Bibliotheken }
-
- Prozedur Danke;
- Anfang
- Vorschub;
- mitte( 'Die Mannschaft von', grau, 0);
- mitte( 'B C I', metallic, 1);
- mitte( 'Benthien Consulting International', metallic, 2);
- mitte( 'dankt Ihnen für Ihre Aufmerksamkeit, und hofft daß unsere kleine Show', grau, 3);
- mitte( 'Spaß gemacht hat und alle Ihre Fragen bezüglich unseres Compilers', grau, 4 );
- mitte( Meldg22, gelb, 6);
- mitte( 'beantworten konnte.', grau, 8);
- mitte( 'Bitte wenden Sie sich im Falle von weiteren Fragen oder Bestellungen an:', grau, 9);
- mitte( Adresse[0], gelb, 11 );
- mitte( Adresse[1], gelb, 12 );
- mitte( Adresse[2], gelb, 13 );
- mitte( Adresse[3], gelb, 14 );
- pos (1,23);
- Ende; { Danke }
-
- (**************************************************************************
- * Prozedur Dialograhmen gibt Text in korrekt bemessenem Rahmen aus, *
- * allerdings ohne den schon auf dem Bildschirm vorhandenen Text zu retten.*
- * Wäre aber nicht so schwierig... *
- * Haben wir hier nicht gemacht, weil der Text auch so paßt... *
- ***************************************************************************)
-
- Prozedur Dialograhmen (Ausgabetext : Folge80); { gibt Text in Dialog- }
- Variable { rahmen aus }
- Anzahl : Integer;
- Spaltelinks : Integer;
- Spalterechts : Integer;
- Zeile : Integer;
-
- Anfang
- Anzahl := Länge( Ausgabetext );
- Spaltelinks := 39 - (Anzahl div 2);
- Spalterechts := 80 - Spaltelinks;
- Zeile := 20;
- für i := 20 hinauf 23 tue
- Anfang
- pos( 0,i );
- schreibe( Meldg0 ); {evt. vorhandenen}
- Ende; {Text löschen }
- farbig( '╓', rot, Spaltelinks, Zeile); {Rahmen bauen }
- für i := Spaltelinks + 1 hinauf Spalterechts - 1 tue
- farbig( '─', rot, i, Zeile);
- farbig( '╖', rot, Spalterechts, Zeile);
- farbig( '║', rot, Spalterechts, Zeile + 1);
- farbig( '╜', rot, Spalterechts, Zeile + 2);
- für i := Spalterechts - 1 hinab Spaltelinks + 1 tue
- farbig( '─', rot, i, Zeile + 2);
- farbig( '╙', rot, Spaltelinks, Zeile + 2);
- farbig( '║', rot, Spaltelinks, Zeile + 1);
- farbig( Ausgabetext, grau, Spaltelinks + 2, Zeile + 1 );
- Ende; { Dialograhmen }
-
-
- Prozedur farbig; { diese Funktion schreibt Text }
- Variable { in gewünschter Farbe an be- }
- Anzahl : Integer; { timmter Position auf den }
- Reg : Register; { auf den Bildschirm }
-
- Anfang
- Anzahl := Länge( Ausgabetext );
- pos( Spalte, Zeile );
- (* Setze Attribute *)
- Reg.ah := 09h; { es handelt sich hier um }
- Reg.al := 20h; { mächtige BIOS-Routinen }
- Reg.bh := 00h;
- Reg.bl := ord(Farbe);
- Reg.cx := Anzahl;
- rufebios ( Reg );
- schreibe( Ausgabetext );
- Ende; { farbig }
-
-
- Prozedur farbig_warte; { diese Funktion ruft }
- { "farbig" und wartet }
- Anfang { bis spezifizierte }
- farbig( Ausgabetext, Farbe, Spalte, Zeile ); { Anzahl Sekunden }
- warte( sek ); { verstrichen ist... }
- Ende; { farbig_warte } { ..bewirkt drastische}
- { Verlangsamung des }
- { Programms }
- Prozedur Hallo;
- Typus
- ZeilenInhalt = Folge(57);
- Variable
- Farbe : Integer;
- Hallo : Bereich[1..6] von Zeileninhalt;
- Hallozeile : Integer;
- Seite : Byte;
-
- Anfang
- Vorschub;
- Kommando := Nachwert(K_Hallo);
- Seite := 0;
- Spalte := 10;
- Zeile := 10;
- Hallozeile := 1;
- Hallo[1] := '▓ ▓ ▓▓▓▓▓▓ ▓ ▓ ▓▓▓▓▓▓ ▓▓ ▓▓▓▓ ';
- Hallo[2] := '▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓';
- Hallo[3] := '▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓';
- Hallo[4] := '▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓ ▓ ▓ ▓ ▓ ▓▓▓';
- Hallo[5] := '▓ ▓ ▓ ▓ ▓ ▓ ▓ ▓ ';
- Hallo[6] := '▓ ▓ ▓ ▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓ ▓ ▓';
-
- für i := 1 hinauf 12 tue
- Anfang
- falls i gleich
- 1, 5, 9 : Farbe := 01h; {blau}
- 2, 6, 10 : Farbe := 0Eh; {gelb}
- 3, 7, 11 : Farbe := 04h; {cyan}
- 4, 8, 12 : Farbe := 03h; {rot }
- Ende;
-
- für j := 1 hinauf 57 tue
- Anfang
- pos (Spalte, Zeile);
- für Hallozeile := 1 hinauf 6 tue { schreibe 1 Spalte }
- Anfang { aller Zeilen }
- schreibe_attr( ord(hallo[Hallozeile][j]), Seite, Farbe);
- Zeile := Zeile + 1;
- pos (Spalte, Zeile);
- Ende;
- Zeile := 10;
- Spalte := Spalte + 1;
- Ende;
- Spalte := 10;
- Ende;
- Ende; {Hallo}
-
-
- Prozedur Haken;
- Anfang
- farbig( '√', rot, 3, Zeile );
- Ende; { Haken }
-
-
- Prozedur Initialisieren;
- Variable
- Buchstabe : Zeichen;
- Satznummer : Integer;
-
- Anfang
- Meldung[0] := Meldg0;
- Meldung[1] := Meldg1;
- Meldung[2] := Meldg2;
- Meldung[3] := Meldg3;
- Meldung[4] := Meldg4;
- Meldung[5] := Meldg5;
- Meldung[6] := Meldg6;
- Meldung[7] := Meldg7;
- Meldung[8] := Meldg0;
- Meldung[9] := Meldg9;
- Meldung[10] := Meldg10;
- Meldung[11] := Meldg11;
- Meldung[12] := Meldg12;
- Meldung[13] := Meldg0;
- Meldung[14] := Meldg14;
- Meldung[15] := Meldg15;
- Meldung[16] := Meldg16;
- Meldung[17] := Meldg17;
- Meldung[18] := Meldg18;
- Meldung[19] := Meldg19;
- Meldung[20] := Meldg20;
- Meldung[21] := Meldg21;
-
- Adresse[0] := Adr0;
- Adresse[1] := Adr1;
- Adresse[2] := Adr2;
- Adresse[3] := Adr3;
-
- Ende; { Initialisieren }
-
-
- Prozedur Lieferung;
- Anfang
- Vorschub;
- Rahmen( 0, 0, 79, 3, einfach, metallic );
- Linie( 0, 22, 79, doppelt, metallic );
- mitte( Meldg25, grau, 1 );
- mitte( Meldg22, gelb, 2 );
- farbig_warte( 'Lieferumfang', gelb, 0, 5, 1 );
- Haken( 7 );
- farbig_warte( 'Mehrphasiger, zweisprachiger und hochoptimierender Pascalcompiler', grau, 6, 7, 1 );
- Haken( 9 );
- farbig_warte( 'Quellprogrammlistengenerator integriert in Compiler', grau, 6, 9, 1 );
- Haken( 11 );
- farbig_warte( 'Deutsches Handbuch mit ca. 200 Seiten, 119 Abbildungen/Syntaxgraphen', grau, 6, 11, 1 );
- Haken( 13 );
- farbig_warte( 'Über 100 ausführbare Programmbeispiele zum Testen und Studieren', grau, 6, 13, 1);
- Haken( 15 );
- farbig_warte( 'Leistungsfähiger Spezialprogrammeditor mit ca. 40 Funktionen', grau, 6, 15, 1);
- farbig_warte( 'Unverbindliche Preisempfehlung', gelb, 0, 17, 1);
- Haken( 19 );
- farbig_warte( 'DM 249.50 inklusive MwSt, Verpackung, Porto frei Haus', grau, 6, 19, 1);
- Haken( 21 );
- farbig_warte( 'DM 218.86 ohne MwSt. Händler- und Schulpreise auf Anfrage', grau, 6, 21, 1);
- Pause;
- Eingabe := 'E';
-
- (* falls Eingabe gleich { falls weitere Kommandos }
- (* 'e' : Eingabe := 'E'; { folgen, muß dieser Code }
- (* 'v', 'V': Kommando := Vorwert(K_Lieferung) { aktiviert werden }
- (* andernfalls
- Kommando := Nachwert(K_Lieferung);
- Ende;
- *)
- Ende; { Lieferung}
-
-
- Prozedur Linie;
- Variable
- Linienelement : Zeichen;
-
- Anfang
- wenn Art = einfach
- dann Linienelement := '─'
- sonst Linienelement := '═';
- für Spalte := Spaltelinks hinauf Spalterechts tue
- farbig( '─', Farbe, Spalte, Zeile );
- Ende; { Linie }
-
-
- Prozedur Mitte;
- Anfang
- Spalte := (80 - Länge( Ausgabetext )) div 2;
- farbig( Ausgabetext, Farbe, Spalte, Zeile);
- Ende; { Mitte }
-
- Prozedur Mitteilung;
- Anfang
- Vorschub;
- für i := 1 hinauf 4 tue { Zeilen auf Screen }
- Anfang
- falls i gleich
- 1 : Zeile := 0;
- 2 : Zeile := 2;
- 3 : Zeile := 20;
- 4 : Zeile := 22;
- Ende;
- für Spalte := 0 hinauf 79 tue
- Anfang
- pos( Spalte, Zeile );
- schreibe( '─' );
- Ende;
- Ende; { Ende Zeilen auf Screen }
-
- farbig( Meldg1, weiß, 1, 1 ); { bci software mitteilung }
- farbig( Meldg1, weiß, 1,21 );
- pos( 0,24 );
- warte ( 2 );
-
- farbig_warte( 'Sehr geehrte Programmiererinnen und Programmierer!', weiß, 0,4,1 );
- farbig_warte( 'Wir möchten Ihnen unseren "zwei in einem" Compiler vorstellen:', weiß, 0,6,1 );
- farbig_warte( 'D E U T S C H E S P A S C A L / i86', gelb, 22,8, 2 );
- Haken( 10 );
- farbig_warte( '100% Standardpascal (englisch)', weiß, 6,10,1 );
- Haken( 11 );
- farbig_warte( '100% deutsches Pascal', weiß, 6,11,1 );
- Haken( 12 );
- farbig_warte( 'jede beliebige deutsch/englische Mischung', weiß, 6,12,1 );
- pos( 0,14 );
- schreibezl('Das Konzept eines zweisprachigen Compilers ist eine absolute Weltneuheit');
- schreibezl('aus dem Hause BCI. Wir kommen damit dem Wunsche vieler deutschsprachigen');
- schreibezl('Programmierer und Programmiererinnen entgegen, äußerst lesbare und wart-');
- schreibezl('bare Programme in Ihrer Muttersprache zu schreiben. Auf den nächsten Seiten');
- schreibe('informieren wir Sie über das sehr leistungsstarke ');
- farbig('Deutsche Pascal/i86.', gelb, 50,18 );
-
- Pause;
- falls Eingabe gleich
- 'e' : Eingabe := 'E';
- 'v', 'V': Kommando := Vorwert(K_Mitteilung);
- andernfalls
- Kommando := Nachwert(K_Mitteilung);
- Ende;
- Ende;
-
- Prozedur Pause;
- Anfang
- farbig( 'Bitte' , grau, 0,23 );
- farbig( 'v' , gelb, 6,23 );
- farbig( 'orherige oder' , grau, 7,23 );
- farbig( 'n' , gelb, 21,23 );
- farbig( 'ächste Seite oder' , grau, 22,23 );
- farbig( 'E' , gelb, 40,23 );
- farbig( 'nde + Eingabetaste <', grau, 41,23 );
- farbig( Ascii(17) , grau, 60,23 );
- farbig( '─┘ betätigen! ' , grau, 61,23 );
- lieszl(Eingabe);
- Ende; { Pause }
-
- Prozedur Prg1_deutsch;
- Anfang
- wenn letztes_Kmd <> K_Prg1_Wörter
- dann Vorschub;
- Programm_Ausgabe;
- Dialograhmen( 'Hier sehen Sie ein in Deutschem Pascal geschriebenes Beispiel.');
- Pause;
- falls Eingabe gleich
- 'e' : Eingabe := 'E';
- 'v', 'V': Kommando := Vorwert(K_Prg1_deutsch);
- andernfalls
- Kommando := Nachwert(K_Prg1_deutsch);
- Ende;
- Ende;
-
- Prozedur Prg1_englisch;
- Anfang
- Dialograhmen( 'Außerdem kann Standardpascal zu 100% verarbeitet werden!' );
- farbig_warte( 'program ', gelb, 0, 0, 1 );
- farbig_warte( 'variable', gelb, 2, 1, 1 );
- farbig_warte( 'function', gelb, 2, 7, 1 );
- farbig ( 'begin ', gelb, 4, 8 );
- farbig_warte( 'begin ', gelb, 2,12, 1 );
- farbig ( 'end ', gelb, 4,10 );
- farbig_warte( 'end ', gelb, 2,19, 1 );
- farbig ( 'writeln ', gelb, 4,13 );
- farbig ( 'writeln ', gelb, 4,14 );
- farbig_warte( 'writeln ', gelb, 4,18, 1 );
- farbig_warte( 'readln', gelb, 4,15, 1 );
- Pause;
- letztes_Kmd := K_Prg1_englisch;
- falls Eingabe gleich
- 'e' : Eingabe := 'E';
- 'v', 'V': Kommando := Vorwert(K_Prg1_englisch);
- andernfalls
- Kommando := Nachwert(K_Prg1_englisch);
- Ende;
- Ende;
-
- Prozedur Prg1_gemischt;
- Anfang
- Dialograhmen( 'Sogar absolut jede Sprachmischung wird mühelos verkraftet!' );
- farbig_warte( 'Programm', hellgrün, 0, 0, 1 );
- farbig_warte( 'variable', gelb, 2, 1, 1 );
- farbig_warte( 'function', gelb, 2, 7, 1 );
- farbig ( 'Anfang', hellgrün, 4, 8 );
- farbig_warte( 'begin ', gelb, 2,12, 1 );
- farbig ( 'end ', gelb, 4,10 );
- farbig_warte( 'Ende', hellgrün, 2,19, 1 );
- farbig ( 'schreibezl', hellgrün, 4,13 );
- farbig ( 'writeln ', gelb, 4,14 );
- farbig_warte( 'writeln ', gelb, 4,18, 1 );
- farbig_warte( 'lieszl', hellgrün, 4,15, 1 );
- Pause;
- letztes_Kmd := K_Prg1_gemischt;
- falls Eingabe gleich
- 'e' : Eingabe := 'E';
- 'v', 'V': Kommando := Vorwert(K_Prg1_gemischt);
- andernfalls
- Kommando := Nachwert(K_Prg1_gemischt);
- Ende;
- Ende;
-
- Prozedur Prg1_Umlaut;
- Anfang
- Programm_Ausgabe;
- Dialograhmen( 'Natürlich können Sie alle Umlaute und "ß" überall verwenden!');
- farbig_warte( 'ä', metallic, 10, 2, 1 );
- farbig_warte( 'ü', metallic, 7, 3, 1 );
- farbig_warte( 'ß', metallic, 10, 5, 1 );
- farbig_warte( 'ä', metallic, 29, 7, 1 );
- farbig_warte( 'ß', metallic, 42, 7, 1 );
- farbig_warte( 'ä', metallic, 26, 9, 1 );
- farbig_warte( 'ß', metallic, 47, 9, 1 );
- farbig_warte( 'ß', metallic, 65,13, 1 );
- farbig_warte( 'ä', metallic, 17,15, 1 );
- farbig_warte( 'ß', metallic, 30,15, 1 );
- farbig_warte( 'ß', metallic, 10,16, 1 );
- farbig_warte( 'ß', metallic, 21,16, 1 );
- farbig_warte( 'ü', metallic, 7,17, 1 );
- farbig_warte( 'ä', metallic, 35,17, 1 );
- farbig_warte( 'ß', metallic, 48,17, 1 );
- farbig_warte( 'ü', metallic, 47,18, 1 );
- Pause;
- falls Eingabe gleich
- 'e' : Eingabe := 'E';
- 'v', 'V': Kommando := Vorwert(K_Prg1_Umlaut);
- andernfalls
- Kommando := Nachwert(K_Prg1_Umlaut);
- Ende;
- Ende;
-
- Prozedur Prg1_Wörter;
- Anfang
- Dialograhmen( 'Alle reservierten Wörter können auf deutsch programmiert werden!' );
- farbig_warte( 'Programm', hellgrün, 0, 0, 1 );
- farbig_warte( 'Variable', hellgrün, 2, 1, 1 );
- farbig_warte( 'Funktion', hellgrün, 2, 7, 1 );
- farbig ( 'Anfang', hellgrün, 4, 8 );
- farbig_warte( 'Anfang', hellgrün, 2,12, 1 );
- farbig ( 'Ende', hellgrün, 4,10 );
- farbig_warte( 'Ende', hellgrün, 2,19, 1 );
- farbig ( 'schreibezl', hellgrün, 4,13 );
- farbig ( 'schreibezl', hellgrün, 4,14 );
- farbig_warte( 'schreibezl', hellgrün, 4,18, 1 );
- farbig_warte( 'lieszl', hellgrün, 4,15, 1 );
- Pause;
- letztes_Kmd := K_Prg1_Wörter;
- falls Eingabe gleich
- 'e' : Eingabe := 'E';
- 'v', 'V': Kommando := Vorwert(K_Prg1_Wörter);
- andernfalls
- Kommando := Nachwert(K_Prg1_Wörter);
- Ende;
- Ende;
-
- Prozedur Programm_Ausgabe;
- Anfang
- für i := 2 hinauf 21 tue
- Anfang
- farbig( Meldung[i], grau, 0,i-2 );
- Ende;
- Ende;
-
- Prozedur Rahmen;
- Anfang
- wenn Zeileoben > Zeileunten
- dann tausche( Zeileoben, Zeileunten );
- wenn Spaltelinks > Spalterechts
- dann tausche( Spaltelinks, Spalterechts );
- wenn Art = einfach
- dann
- Anfang
- farbig( '┌', Farbe, Spaltelinks, Zeileoben );
- für Spalte := Spaltelinks+1 hinauf Spalterechts tue
- farbig( '─', Farbe, Spalte, Zeileoben );
- farbig( '┐', Farbe, Spalterechts, Zeileoben );
- für Zeile := Zeileoben+1 hinauf Zeileunten tue
- farbig( '│', Farbe, Spalterechts, Zeile );
- farbig( '┘', Farbe, Spalterechts, Zeileunten );
- für Spalte := Spalterechts-1 hinab Spaltelinks tue
- farbig( '─', Farbe, Spalte, Zeileunten );
- farbig( '└', Farbe, Spaltelinks, Zeileunten );
- für Zeile := Zeileunten-1 hinab Zeileoben+1 tue
- farbig( '│', Farbe, Spaltelinks, Zeile );
- Ende
- sonst
- Anfang
- farbig( '╔', Farbe, Spaltelinks, Zeileoben );
- für Spalte := Spaltelinks+1 hinauf Spalterechts tue
- farbig( '═', Farbe, Spalte, Zeileoben );
- farbig( '╗', Farbe, Spalterechts, Zeileoben );
- für Zeile := Zeileoben+1 hinauf Zeileunten tue
- farbig( '║', Farbe, Spalterechts, Zeile );
- farbig( '╝', Farbe, Spalterechts, Zeileunten );
- für Spalte := Spalterechts-1 hinab Spaltelinks tue
- farbig( '═', Farbe, Spalte, Zeileunten );
- farbig( '╚', Farbe, Spaltelinks, Zeileunten );
- für Zeile := Zeileunten-1 hinab Zeileoben+1 tue
- farbig( '║', Farbe, Spaltelinks, Zeile );
- Ende
- Ende;
-
- Prozedur schreibe_attr;
- Variable
- Reg : Register;
- Anfang
- Reg.ah := 09h;
- Reg.al := Zeichencode;
- Reg.bh := Seite;
- Reg.bl := Farbe;
- Reg.cx := 01h;
- rufeBIOS ( Reg );
- Ende;
-
- Prozedur System;
- Anfang
- Vorschub;
- Rahmen( 0, 0, 79, 3, einfach, metallic );
- Linie( 0, 22, 79, doppelt, metallic );
- mitte( Meldg24, grau, 1 );
- mitte( Meldg22, gelb, 2 );
- farbig_warte( 'Mindestanforderungen an das Entwicklungssystem', gelb, 0, 5, 1 );
- Haken( 7 );
- farbig_warte( 'IBM PC, PC/XT, PC/AT oder kompatible', grau, 6, 7, 1 );
- Haken( 9 );
- farbig_warte( '256 KB Hauptspeicher', grau, 6, 9, 1 );
- Haken( 11 );
- farbig_warte( 'MS-DOS oder PC-DOS Version 2.0 oder höher', grau, 6, 11, 1 );
- Haken( 13 );
- farbig_warte( '2 Wechselplatten mit je 360 KB oder 1 Floppy mit 360 KB plus 1 Festplatte', grau, 6, 13, 1);
- Haken( 15 );
- farbig_warte( 'Farbiger oder monochromer Bildschirm (Grafik nicht erforderlich)', grau, 6, 15, 1);
- farbig_warte( 'Nicht notwendige, aber einsetzbare Ausrüstung', gelb, 0, 17, 1);
- Haken( 19 );
- farbig_warte( '8087/80287-Arithmetikkoprozessor', grau, 6, 19, 1);
- Haken( 21 );
- farbig_warte( 'Bibliotheksverwaltungsprogramm LIB.EXE', grau, 6, 21, 1);
-
- Pause;
- letztes_Kmd := K_Prg1_Wörter;
- falls Eingabe gleich
- 'e' : Eingabe := 'E';
- 'v', 'V': Kommando := Vorwert(K_System);
- andernfalls
- Kommando := Nachwert(K_System);
- Ende;
- Ende;
-
- Prozedur Tausche;
- Variable
- Zwischenspeicher : Integer;
-
- Anfang
- Zwischenspeicher := Eins;
- Eins := Zwei;
- Zwei := Zwischenspeicher;
- Ende;
-
- Prozedur Vorteile;
- Anfang
- Vorschub;
- Rahmen( 0, 0, 79, 3, einfach, metallic );
- Linie( 0, 22, 79, doppelt, metallic );
- mitte( Meldg23, grau, 1 );
- mitte( Meldg22, gelb, 2 );
- farbig_warte( 'Optimale Ünterstützung in der Entwicklungsphase ', gelb, 0, 5, 1 );
- Haken( 7 );
- farbig_warte( 'Zweisprachige Quellprogramme', grau, 6, 7, 1 );
- Haken( 9 );
- farbig_warte( 'adressiert volle 640 KB Hauptspeicher', grau, 6, 9, 1 );
- Haken( 11 );
- farbig ( 'alle Bibliotheken', grau, 6, 11 );
- farbig ( 'ohne', gelb, 24, 11 );
- farbig_warte( 'Aufpreis', grau, 29, 11, 1 );
- Haken( 13 );
- farbig_warte( 'komplette, deutsche Umgebung: Handbuch, Fehler- und Systemmeldungen', grau, 6, 13, 1);
- Haken( 15 );
- farbig_warte( 'hervorragende Ünterstützung für den Anfänger (über 100 Programmbeispiele)', grau, 6, 15, 1);
- farbig_warte( 'Optimale exekutierbare Programme', gelb, 0, 17, 1);
- Haken( 19 );
- farbig_warte( 'Erzeugung hochoptimierter Programme', grau, 6, 19, 1);
- Haken( 21 );
- farbig_warte( 'Superkompakte und daher extrem schnelle Programme', grau, 6, 21, 1);
-
- Pause;
- falls Eingabe gleich
- 'e' : Eingabe := 'E';
- 'v', 'V': Kommando := Vorwert(K_Vorteile);
- andernfalls
- Kommando := Nachwert(K_Vorteile);
- Ende;
- Ende;
-
- Prozedur Warte;
- Variable
- Reg : Register;
- Sekunde : Integer;
- Anfang
- Reg.ah := 2Ch;
- rufeDOS( Reg );
- Sekunde := Reg.dh + sek;
- Sekunde := Sekunde mod 60;
- solange Sekunde <> Reg.dh tue
- Anfang
- Reg.ah := 2Ch;
- rufeDOS( Reg );
- Ende;
- Ende;
-
- Anfang { Hauptprogramm }
- letztes_Kmd := K_Hallo;
- Vorschub;
- Initialisieren;
- Kommando := K_Hallo;
- Eingabe := 'x';
- solange Eingabe <> 'E' tue
- Anfang
- falls Kommando gleich
- K_Bibliotheken : Bibliotheken;
- K_Hallo : Hallo;
- K_Lieferung : Lieferung
- K_Mitteilung : Mitteilung;
- K_Prg1_deutsch : Prg1_deutsch;
- K_Prg1_englisch : Prg1_englisch;
- K_Prg1_gemischt : Prg1_gemischt;
- K_Prg1_Umlaut : Prg1_Umlaut;
- K_Prg1_Wörter : Prg1_Wörter;
- K_Vorteile : Vorteile;
- K_System : System
- andernfalls
- Eingabe := 'E';
- Ende;
- Ende;
- Danke;
- Ende. { Hauptprogramm }I