home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1988
/
02
/
download.pas
next >
Wrap
Pascal/Delphi Source File
|
1987-10-29
|
8KB
|
159 lines
(* ----------------------------------------------------------------------- *)
(* 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.