home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------------------------- *)
- (* DOWNLOAD.PAS *)
- (* Ein Prog. zum Definieren eigener Zeichensaetze mit einem Matrixdrucker *)
- (* verwendeter Drucker : STAR SG - 10 *)
- (* Modus : STAR - MODUS ( DIP - SWITCH 2-2 ON ! ) *)
- (* Programmiersprache : Turbo - Pascal 3.0 *)
- (* ----------------------------------------------------------------------- *)
- PROGRAM DOWN_LOAD_DEMO;
-
- (* Definiert die Sonderzeichen und schreibt diese in's RAM des Druckers *)
- PROCEDURE write_download_character;
- CONST
- zeichen_anzahl = 16;
- zeilen_anzahl = 11; (* Anzahl der Zeilen/Zeichen, Druckerabhaengig *)
- (* Hier werden die druckerspezifischen Steuerzeichen definiert.
- Dieser Teil muss an den jeweiligen Drucker angepasst werden.
- Die angegebenen Steuerzeichen beziehen sich auf den Matrix-
- drucker STAR SG - 10 im 'Star-Modus'. Die Zeichenfolge
- '#dez.-Zahl' ermoeglicht die Angabe von nicht druckbaren Zei-
- chen als CHARacter mittels ihres ASCII-Codes. Erlaubt Ihr
- Compiler dies nicht, muessen die Konstanten als Variablen
- deklariert und im Anweisungsteil initialisiert werden. *)
- defined_download_character = #27'*'#01;
- copies_rom_to_ram = #27'*'#00;
- download_character_on = #27'$'#01;
- download_character_off = #27'$'#00;
- (* Type-Definition fuer den Aufbau der Zeichen. Ist Druckerabhaengig
- und muss ggf. an andere Drucker angepasst werden. (s. Handbuch !) *)
- TYPE
- zeichen = RECORD
- kommentar : STRING[23];
- taste : CHAR;
- matrix : ARRAY[0 .. zeilen_anzahl] OF INTEGER;
- END;
-
- (* Im Array 'zeichen_satz' stehen die definierten Zeichen. Aus Kom-
- patibilitaetsgruenden wurde zunaechst der USA-Zeichensatz auf die
- entsprechenden Tasten gelegt. Nicht-Turboisten muessen das Array
- als Variable deklarieren und mittels Zuweisungen initialisieren: *)
- CONST
- zeichen_satz : ARRAY[1 .. zeichen_anzahl] OF zeichen =
- ((kommentar : 'Eckige Klammer auf';
- taste : '[';
- matrix : (139,0,254,0,130,0,130,0,0,0,0,0)),
- (kommentar : 'Eckige Klammer zu';
- taste : ']';
- matrix : (139,0,130,0,130,0,254,0,0,0,0,0)),
- (kommentar : 'Klammeraffe';
- taste : '@';
- matrix : (139,124,0,130,16,170,0,170,0,122,0,0)),
- (kommentar : 'Schraegstrich';
- taste : '\';
- matrix : (139,0,128,64,32,16,8,4,2,0,0,0)),
- (kommentar : 'Geschweifte Klammer auf';
- taste : '{';
- matrix : (139,0,16,0,108,130,0,130,0,0,0,0)),
- (kommentar :'Geschweifte Klammer zu';
- taste : '}';
- matrix : (139,130,0,130,108,0,16,0,0,0,0,0)),
- (kommentar : 'Senkrechter Strich';
- taste : '|';
- matrix : (139,0,0,0,0,0,255,0,0,0,0,0)),
- (kommentar : 'Tilde';
- taste : '~';
- matrix : (139,64,128,0,128,64,32,0,32,64,0,0)),
- (kommentar : 'Alpha';
- taste : 'a';
- matrix : (139,28,0,34,0,34,20,8,20,34,0,0)),
- (kommentar : 'Beta';
- taste : 'b';
- matrix : (11,127,128,0,128,18,128,106,4,0,0,0)),
- (kommentar : 'Gamma';
- taste : 'c';
- matrix : (11,35,20,9,20,35,0,0,0,0,0,0)),
- (kommentar : 'Delta';
- taste : 'd';
- matrix : (139,6,1,8,33,88,1,78,0,32,0,0)),
- (kommentar : 'Omega';
- taste : 'O';
- matrix : (139,49,72,135,0,128,0,135,72,49,0,0)),
- (kommentar : 'Telefon';
- taste : 'T';
- matrix : (139,206,16,194,32,130,32,130,32,194,16,206)),
- (kommentar : 'Logisch und';
- taste : '&';
- matrix : (139,0,2,4,8,16,32,16,8,4,2,0)),
- (kommentar : 'Vollkreis';
- taste : '0';
- matrix : (139,56,68,186,68,186,68,186,68,56,0,0)));
- (* Nach Aendern der Konstanten zeichen_anzahl koennen hier weitere
- Tasten mit Sonderzeichen problemlos wie o.a. belegt werden. *)
- VAR
- i, k : INTEGER;
- b1, b2 : BYTE;
- c : CHAR;
-
- BEGIN (* write_download_character *)
- Write(Lst,copies_rom_to_ram); (* Drucker soll kopieren von ROM n. RAM *)
- WriteLn('Folgende Tasten werden mit Sonderzeichen belegt :'); WriteLn;
- FOR k := 1 TO zeichen_anzahl DO BEGIN
- (* Der folgende Drucksteuerbefehl muss jedesmal gegeben werden, da
- in der FOR-Schleife jeweils nur ein Zeichen definiert wird ! *)
- Write(Lst,defined_download_character);
- WITH zeichen_satz[k] DO BEGIN
- (* Der folgende Drucksteuerbefehl muss 2 mal gegeben werden. Der
- Drucker verlangt die Angabe von Taste .. bis Taste. Bei nur
- eine Zeichen, muss die gleiche Taste also 2 mal zum Drucker *)
- Write(Lst,taste,taste);
- Write(' ',taste); (* Bildschirmausgabe, kann entfallen *)
- Write(' : ',kommentar,'':35-Length(kommentar));
- (* Hier wird endlich das Zeichen Punktweise definiert! *)
- FOR i := 0 TO zeilen_anzahl DO Write(Lst,Chr(matrix[i]));
- END;
- END;
- (* -------------------------------------------------------------------
- Das Folgende ist lediglich eine Testausgabe, die beim Definieren
- neuer Zeichen aufgerufen werden kann, indem man das Kommentar-
- endezeichen an das Ende dieses Textes setzt ------------------->
- Write(lst,download_character_on);
- FOR i := 1 TO zeichen_anzahl DO Write(lst,zeichen_satz[i].taste:4);
- Write(lst,download_character_off); Writeln(lst);
-
- --------------------------------------------------------------------
- ^-- und hier, d.h. an den Anfang obiger Zeile ein Kommentaranfang-
- zeichen einfuegt ! *)
- END;
- (* ----------------------------------------------------------------------- *)
- (* Demonstration von Sonderzeichen: *)
- PROCEDURE adresse;
- (* Die nachfolgenden Konstanten sind z.T. 2 mal definiert worden,
- weil es sich bei der Prozedur 'adresse' lediglich um eine Demon-
- stration handelt ! *)
- CONST
- expandet_print_on = #27'W'#01; (* Schaltet Breitdruck ein *)
- expandet_print_off = #27'W'#00; (* " " aus *)
- download_character_on = #27'$'#01;
- download_character_off = #27'$'#00;
- deutscher_zeichensatz = #27'7'#2;
- fettschrift = #27'E'#27'G';
-
- Name = 'Lieschen Mueller ';
- Strasse = ' Um Bruch 72 z';
- Ort = ' 4711 Luemmeln';
- Telefon = ' 01234 - 5678';
-
- BEGIN
- Write(Lst,deutscher_zeichensatz); Write(Lst,expandet_print_on);
- Write(Lst,fettschrift); Write(Lst,Name);
- Write(Lst,expandet_print_off); Write(Lst,Strasse);
- WriteLn(Lst); Write(Lst,download_character_on);
- Write(Lst,'T':9); (* Hier ensteht ein Telefonsymbol !! *)
- Write(Lst,download_character_off); Write(Lst,Telefon);
- Write(Lst,Ort); WriteLn(Lst);
- END;
- (* ----------------------------------------------------------------------- *)
- BEGIN (* DOWN_LOAD_DEMO *)
- write_download_character; adresse;
- END.