Logo: Geos Online Print Archiv
G.O.P.A. - Geos Online Print Archiv
19.04.2024 Archiv  #  Recherche  #  Links  #  Kontakt  #  Gästebuch  #  Impressum

Index
Register
Login

Die Anzeige des Archivs erfolgt grafisch. Ändern

Programmieren mit IZL

Autor: Dirk Haase; Autoreninfo anzeigen

Teil 1 und 2

 izl

Inhalt

- Allgemeine Hinweise
- IZL im Internet
- Kontakt (am Ende des Artikel)
- Programmbeispiele

   - WECHSEL.IZL - 8 Wechseltasten (ein/aus), Datenausgabe als Dezimalwert
   - TASTEN.IZL - Datenausgabe als Dezimalwert
   - 8EINGANG.IZL - Optische Auswertung
   - E-BINAER.IZL - Auswertung in Dualzahl
   - T-SENSOR.IZL - Grafische Auswertung, Beispiel für Temperatursensor
   - DATUM-K.IZL - Datum wird bei jedem Klick aktualisiert
   - DATUM-D.IZL - Datum wird bei Aktivierung ständig aktualisiert
   - UMSCHALT.IZL - Umschalten zwischen mehreren Screens, Tasten- und Rahmengrössen
   - CAT4GEOS.IZL - Ansteuerung des Kurzwellenempfängers YAESU FRG-100
   - CSV-AUSG.IZL - Ausgabe von Daten in eine CSV-Datei (kommagetrennte Werte)
   - ANZEIGE.IZL - grafische Auswertung eines Wertes in Form eines Zeigerinstrumentes
   - DATUMN.IZL - Korrektur der Beispiele (DATUMK und DATUMD) aus Teil 1
   - DATEIAUS.IZL - Datenübernahme und Verarbeitung aus ASCII-Datei
   - INDICATO.IZL - Indikatorfeld für verschiedene Funktionen & Randbemerkung
   - SOUND.IZL - Abspielen der GEOS-Systemklänge von Max Mansour.
   - RAHMEN.IZL - feste Rahmengrössen für verschiedene Systeme
   - PLATFORM.IZL - ermitteln auf welcher Plattform IZL läuft, deutsche Sonderzeichen korrekt in IZL darstellen

IZL im Internet

Seit dem 18.08.1996 gibt es im Internet ein weiteres Archiv mit IZL-Beispielen und vielen anderen Dingen rund um IZL. Auch das IZL-Magazin ist dort zu finden. Die Adresse lautet:

ftp://members.aol.com/geoizl/

Das Inhaltsverzeichnis nennt sich CONTENT.TXT für die englischsprachigen User und INHALT.TXT für die deutschsprachigen.

Allgemeine Hinweise

Die folgenden Beispiele beziehen sich auf IZL, Version 2.0. Verwendet wurde die aktualisierte Ausgabe vom 05.12.1995.

Um IZL 2.0 problemlos nutzen zu können, ist eine Anpassung in den Voreinstellungen notwendig: Im Bereich International / Zahlen: 1000er ","; Dezimalstelle "."; Listenzeichen "," einstellen.

Viele der folgenden Beispiele habe ich direkt für meine Steuerprogramme für den Kurzwellenempfänger YAESU FRG-100 bzw. andere serielle Baugruppen entwickelt. Sie lassen sich aber sicher auch für andere Zwecke einsetzen. Alle Daten befinden sich im Verzeichnis BEISPIEL. Auf den folgenden Seiten befindet sich eine Beschreibung zu Programmen selbst, ihrem Zweck und eine kurze Beschreibung der enthaltenen Funktionen, damit sollte es möglich sein, das Programm und seine Funktion zu verstehen. Weitere Erklärungen befinden sich auch innerhalb des Programmes selbst. Auch habe ich gleich den Verwendungszweck angegeben.

Mit dieser Sammlung von Beispielen will ich es den IZL-Einsteigern erleichtern zu ersten Erfolgen zu kommen. Die Beispiele erwecken vielleicht nicht gleich den Eindruck der allgemeinen Verwendbarkeit, aber ich habe es an mir selbst gemerkt, das man aus dokumentierten und funktionierenden Beispielen mehr lernt als eine Programmieranleitung vermitteln kann. Diese ist natürlich weiterhin notwendig.

Dateneingabe

nach oben

WECHSEL.IZL - 8 Wechseltasten (ein/aus), Datenausgabe als Dezimalwert.

Dieses Beispiel basiert auf einem Teilprogramm, welches aus DEMO.IZL (im Lieferumfang von IZL 2.0) entnommen und um die Auswertung der gedrückten Tasten erweitert wurde. Die 8 Tasten stellen jeweils einen Wert in der 8-Bit Reihe dar, also hat die 1. Taste den Wert 128 und die 8. den Wert 1. (128 / 64 / 32 / 16 / 8 / 4 / 2 / 1 ) Diese Folge kann beliebig an die eigenen Ansprüche angepasst werden. In meinem Fall war die 8-Bit Reihe erforderlich, damit die an der seriellen Schnittstelle Auswerteschaltung genau mitgeteilt werden konnte, welcher Ausgang zu schalten ist, um Z.B. eine Lampe ein bzw. auszuschalten. Die Ausgabe des Dezimalwertes in dem Textfeld erfolgt nur zur Überprüfung der Funktion.

wechsel

Erklärung am Beispiel der 1. Taste:

button bout1, ftasten;

char_size 2,1;

display btn1;


invokes bout;

end;

function bout;
if btn1 = "";
  btn1 = char(195);
else;

  btn1 = "";
end_if;
put bout1, btn1;

end_if;
# Definition der Taste "bout1" innerhalb
# des Rahmens "ftasten".
# Festlegen der Grösse auf 2 Zeichen Breite
# und 1 Zeichen Höhe.
# Anzeige der Zeichenvariablen btn1. Diese
# wird im Variablen-Bereich mit btn1="";
# festgelegt, d.h. sie ist leer.
# Wird diese Taste gedrückt, ruft IZL die
# Funktion bout auf.
# Beendet die Tastendefinition

# Auswertefunktion (gekürzt auf Taste 1)
# Wenn die Variable btn1 = "" ist,
# dann wird ihr das Zeichen 195 zugewiesen.
# ist sie nicht leer, beinhaltet sie also
# das Zeichen 195,
# wird ihr "" zugewiesen.
# Ende der IF-Verknüpfung.
# Übergibt die Variable btn1 an die Taste
# bout1 - dies erzeugt den Wechseleffekt.
# Ende der 2. IF-Definition.


 

Die Auswertung für den Zahlenwert geschieht in ähnlicher Weise, nur das dort der numerischen Variable o1 ein Zahlenwert zugewiesen wird. Am Ende der Auswertungsroutine "bout" werden diese Zwischenwerte (o1 bis o8) zusammengerechnet und in einem Textfeld unterhalb der Tastenzeile ausgegeben.

Dateneingabe

nach oben

TASTEN.IZL - direkte Datenausgabe als Dezimalwert.

tasten In diesem Beispiel wird das Zusammenspiel der Funktionen "button" und "startup" dargestellt. Wo man sonst vielleicht jede Taste einzeln definiert hat, so reichen hier ein paar Zeilen IZL-Code. Dies ist auch in dem Zusammenhang sehr wichtig, das die Anzahl der in IZL möglichen Objekte und Funktionen begrenzt sind. Ich verwende dieses Beispiel in meiner Empfängeransteuerung als Möglichkeit des direkten Aufrufes eines Speicherplatzes. Hinweis: die Funktion "startup" wird automatisch beim Start des IZL-Programmes aufgerufen und ausgeführt. Innerhalb der Rahmendefinition wird der Zeilenumbruch auf 8 Zeichen festgelegt.
 

 

 

 

 

button btn[size], fgesamt;
char_size 2,1;

invokes anzeige;

end;

function startup;
while i

  put btn[i],i;



  i=i+1;

end_while;


hide btn[0];


end;

text tmem;
char_size 3,1;
end;

function anzeige;
amem = string(invokersub,0);


put tmem, amem;

end;
# Tastendefinition im Rahmen "fgesamt"
# Festlegen der Grösse auf 2 Zeichen
# Breite und 1 Zeichen Höhe.
# Beim drücken der Taste wird die
# Funktion "anzeige" aufgerufen.
# Ende des Tastendefinition

# Definition der Funktion "startup"
# Wenn "i" kleiner als der Wert der
# Variable "size" wird die folgende
# Funktion ausgeführt.
# Ausgabe des Wertes "i" an die Taste
# "i". Damit wird jeder Taste ein
# genauer Wert zugewiesen und dieser
# auf der Taste dargestellt.
# Der Wert der Variable "i" wird um 1
# erhöht.
# Ende der Unterfunktion "while".
# Sprung zum Beginn der Funktion
# "while" solange, bis "i" = "size".
# "Versteckt" die Taste mit dem Wert
# 0, das es in meinem Fall keinen
# Speicherplatz 0 gibt.
# Ende der "startup"-Funktion.

# Definition des Textfeldes "tmem"
# Grösse: 3 x 1 Zeichen
# Ende der Definition von "tmem"

# Funktion "anzeige"
# "amem" ist des zur Zeichenkette
# umgewandelten Wertes der gedrückten
# Taste.
# Gibt "amem" über das Textfeld "tmem"
# aus.
# Ende der Funktionsdefinition.


Datenauswertung

nach oben

8EINGANG.IZL - Optische Auswertung.

Dieses Beispiel soll die Möglichkeit der grafischen Auswertung eines Dezimalwertes verdeutlichen. Der Wert wird innerhalb des Zahlenfeldes eingegeben und nach einem Klick auf die Taste "testen" ausgewertet und dargestellt. Auch dieses Programm ist auch auf die 8-Bit Reihe ausgelegt, so dass Werte bis maximal 255 eingegeben werden können. Ist der Wert grösser, gibt es eine Fehlermeldung.

8eingang

Beispiel für 8. Ausgabefeld:

value vinput;
display a;
end;

text itext8, fausgabe;

char_size 2,1;
end;

function idisplay;
put itext8, e8;



end;

function itest;

get vinput, a;

if a >= 128;
 a=a-128;
 e8 = "X";
end_if;
# Werteingabe
# Beim Programmstart wird 0 angezeigt.
# Ende des Zahlenfelddefinition

# Definition des Textfeldes "itext8" im
# Rahmen "fausgabe".
# Feldgrösse: 2 x 1 Zeichen
# Ende der Definition.

# Ausgabefunktion
# Weist dem Textfeld "itext8" die
# Zeichenkettenvariable "e8" zu. Da diese
# in der Variablendefinition mit e8 =""
# festgelegt wurde, bleibt das Feld leer.
# Ende der Definition.

# Funktion "itest". Diese wird bei einem
# Klick auf "testen" ausgeführt.
# Wert "vinput" an Variable "a" übergeben

# Ist Wert "a" grösser oder gleich 128,
# wird von "a" 128 abgezogen und der
# Variablen e8 das Zeichen "X" zugewiesen.
# Ende der IF-Funktion.

   # Auf diese Weise werden alle Werte der 8-Bit Reihe abgearbeitet.
   # Am Ende ist a = 0, da alle Vergleichsoperationen abgearbeitet.
 

 

call idisplay;

e8="";


end;
# ruft Funktion "idisplay auf".
# Funktionsbeschreibung siehe weiter oben.
# Zeichenkettenvariable "e8" wird auf ""
# gesetzt, damit es beim nächsten Aufruf
# der Funktion nicht zu Fehlern kommt.
# Ende der Funktion "itest".


Datenauswertung

nach oben

E-BINAER.IZL - Auswertung in Dualzahl.

Der Aufbau dieses Beispiels ist fast gleich dem von 8EINGANG.IZL (siehe dort). Allerdings wird hier der eingegebene Wert nicht grafisch mit "X" dargestellt, sondern im Binär-Code, also entweder hat die "Auswertungsstelle" den Wert 0 oder 1 an. Sollte ein Wert grösser 255 eingegeben werden, so werden alle 8 Stellen auf 8 gesetzt.

e-Binaer

Datenauswertung

nach oben

T-SENSOR.IZL - Grafische Auswertung, Beispiel für Temperatursensor.

t-Sensor Das hier vorgestellte Programm soll die Grafische Auswertung von Werten am Beispiel eines Temperatursensors demonstrieren. Leider sind die Möglichkeiten dazu in IZL nicht immer im gewünschten Masse verfügbar. Weiterhin ist zu beachten, das die konkrete Festlegung von Skalen nur bedingt anwendbar ist, da Abweichungen zwischen der Farb- und der Schwarz/Weiss-Darstellung auftreten. So werden eventuell 2 Versionen benötigt.

Die Werte in das Zahlenfeld am unteren Rand eingegeben und mit einem Klick auf die Taste "Temperatursensor" zur Darstellung gebracht.

 

 

 

 

Erläuterungen zum Programm siehe nächste Seite.
 

 

graphic g1,f_temp;


pixel_size 10, 200;

end;

value vtemp1;

display vtemp;


end;

label ltemp0;

display "- 0 " & char(251) & "C";

position 80,235;

end;

function temp;


get vtemp1, vtemp2;
vtemp = 200 - (vtemp2 * 3);





set g1, fill_color, "red";
fill g1, rectangle, 10, 200;

set g1, fill_color, "white";
fill g1, rectangle, 10, vtemp;
# Definition des
# Grafikelementes für die
# Darstellung des Thermometers.
# Grösse: 10 Pixel Breite und
# 200 Pixel Höhe.
# Ende der Definition.

# Zahlenfeld "vtemp1" zur
# Werteingabe
# Darstellung des
# Temperaturwertes. Beim
# Start = 0.
# Ende der Definition.

# Label für den Skalenpunkt
# 0°C mit Anstrich.
# Definition der darzustellenden
# Zeichen.
# Darstellung an Position
# x = 80 und y = 235.
#
# Funktion "temp". Diese dient
# zur Auswertung und
# Darstellung der Temperatur.
# Wert an Variable übergeben
# Wert "drehen" - für korrekte
# Säulendarstellung und
# Vergrösserung des Wertes um
# Faktor 3 zur besseren
# Darstellung.

# setzt die Füllfarbe auf rot
# füllt das Grafikobjekt "g1"
# komplett rot aus.
# setzt die Füllfarbe auf weiss
# füllt den nicht benötigten
# Bereich mit weiss.


# Mit diesen beiden Funktionen wird zum einen die vorherige
# Darstellung komplett überschrieben und zum anderen der Eindruck
# eines richtigen Thermometers vermittelt.

Datenauswertung

nach oben

DATUM-K.IZL - Datum und Uhrzeit werden bei jedem Klick aktualisiert.

Dieses Programm zeigt die Auswertung und Darstellung der Zeit mit Hilfe von IZL. Das Datum und die Uhrzeit werden bei jedem Klick auf die Taste "Auffrischen" abgerufen und dargestellt. Verwendungszweck soll ein Logbuch sein, welches alle aktuellen Daten aus dem Kurzwellenempfänger ausliest (Frequenz, Betriebsart...) und zusammen mit dem Datum und der Uhrzeit in einer Datei auf der Festplatte speichert. Leider werden die Werte, sollten sie aus einer einzelnen Ziffer bestehen, nicht mit einer führenden Null angezeigt, so dass die Anzeige etwas "seltsam" aussieht. Nach dem Start des Programmes wird anstatt der aktuellen Zeit (was mit einer Zuweisung innerhalb der "startup"-Funktion möglich wäre) 00.00.00 - 00:00:00 angezeigt.

datum

  variables;

showtime= "00.00.00 - 00:00:00";

end;

label l1, ftime; display ""; end;
label lakt, ftime;

display showtime;
end;
label l2, ftime; display ""; end;

button akt, ftime;
display "Auffrischen";
end;

function akt;
# Beginn der
# Variablendefinition.
# Variable "showtime" wird
# gesetzt.
# Ende der Variablendefinition.

# fügt eine Leerzeile ein
# Labeldefinition für Datum und
# Zeit.
# Anzeige von Datum und Zeit.
# Ende der Definition.
# fügt eine Leerzeile ein

# Tastendefinition
# Tastenbeschriftung
# Ende der Definition.

# Zuweisungsfunktion


showtime=DAY(NOW())&"."&MONTH(NOW())&"."&YEAR(NOW())&" - "&HOUR(NOW())& ":"&MINUTE(NOW())& ":" & SECOND (NOW());

# Die Datums und Zeitvariable "showtime" setzt sich aus den
# Einzelfunktionen DAY, MONTH und YEAR für das Datum und aus HOUR,
# MINUTE und SECOND für die Zeit zusammen. NOW liefert dafür die
# aktuellen Werte.
 

put lakt, showtime;



end;
# übergibt die Daten für
# Datum und Zeit an das Label
# "lakt" und stellt somit die
# aktuellen Werte dar.
# Ende der Funktion.

 

Datenauswertung

nach oben

DATUM-D.IZL - Datum wird bei Aktivierung ständig aktualisiert

Das Programm arbeitet ähnlich DATUM-K.IZL, nur wird hier nach einem Klick auf "Start" die Zeit ständig aktualisiert., genauer gesagt, 1 x pro Sekunde. Dies wird durch den Einsatz der TIMER-Funktion erreicht.

datum_d

label d1, ftime; display ""; end;

label nowtime, ftime;

display showtime;
end;

label d2, ftime; display ""; end;

button refrshtime, ftime;
display "Start";
end;

function refrshtime;
 
# fügt eine Leerzeile ein

# definiert das Label für das
# Datum und die Zeit
# zeigt Datum und Zeit an
# Ende der Definition

# fügt eine Leerzeile ein

# Startbutton zum Aufruf der
# Zuweisungs- und
# Aktualisierungsfunktion.

# Zuweisungs- und
# Aktualisierungsfunktion.

showtime=DAY(NOW())&"."& MONTH(NOW())& "."&YEAR(NOW()) &" - " & HOUR(NOW())& ":"& MINUTE(NOW())& ":" & SECOND (NOW());

# Die Datums und Zeitvariable "showtime" setzt sich aus den
# Einzelfunktionen DAY, MONTH und YEAR für das Datum und aus HOUR,
# MINUTE und SECOND für die Zeit zusammen. NOW liefert dafür die
# aktuellen Werte.
 

put nowtime, showtime;





timer refrshtime, 60;






end;
# übergibt die Daten für
# Datum und Zeit an die
# Variable "showtime" und
# stellt somit die aktuellen
# Werte dar.

# Timer-Funktion: die Funktion
# "refrstime" wird nach 60/60
# Sekunden = 1 Sekunde
# aufgerufen. Dadurch werden
# die Werte für Datum und Zeit
# ständig aktualisiert.

# Ende der Funktionsdefinition

 

Mehrere Screens und anderes

nach oben

UMSCHALT.IZL

Dieses Beispiel soll die Umschaltmöglichkeit zwischen verschiedenen Screens demonstrieren. Dies ist z.B. sehr sinnvoll, wenn man nicht alles auf einen Screen bekommt, weil nur ein begrenzter Platz zur Verfügung steht. Weiterhin zeigt dieses IZL-Programm, wie man die Grösse von Rahmen und Tasten beeinflussen, oder Menüeinträge aus- bzw. einblendet.
 

menu_item fs1;

display "Zum Screen 1";
hidden;



end;

frame f1;
pixel_size 250,300;
vertical;


center_h;


box;

end;

button fs2, f1;
display "Zum Screen 2";
char_size 20, 10;

end;

button fs3, f1;
display "Zum Screen 3";
pixel_size 100, 100;

end;

label lt2e, f2; display "den Men"&char(159)&"eintrag UMSCHALT.";





function fs1;

hide f2;


hide f3;
show f1;
hide fs1;
show fs2;
show fs3;
end;
# Beginn der Definition für einen
# Menüeintrag
# Beschriftung des Menüeintrages
# Menüeintrag wird "unsichtbar"
# gemacht, da er in diesem Fall
# nicht benötigt wird (Screen 1
# wird ja schon angezeigt.)
# Ende der Menüpunktdefinition.

# Rahmendefiniton
# Rahmengrösse: x=250 und y=300
# alle Objekte innerhalb dieses
# Rahmens werden senkrecht unter-
# einander angeordnet und
# mittig zentriert - die
# Zentrierung orientiert sich am
# "breitesten" Objekt.
# Der Rahmen wird grafisch
# dargestellt.
# Ende der Rahmendefinition.

# Taste innerhalb des Rahmens "f1"
# Beschriftung der Taste
# Grösse der Taste in Zeichen:
# x=20 und y = 10
# Ende der Tastendefinition

# Tastendefinition
# Beschriftung der Taste
# Grössendefinition der Taste in
# Pixel: x=100, y=100.
# Ende der Tastendefinition

# Text innerhalb des Rahmens "f2". Besonderheit hierbei ist der
# Umlaut im Wort "Menüeintrag". Durch Benutzung der char()-
# Funktion lassen sich die Geos-Sonderzeichen darstellen. Genauer
# Code sie GW Ensemble Handbuch C.2 und C.3.

# Funktion für Menüeintrag und
# Taste "fs2".
# "verstecken der nicht
# benötigten Rahmen und Menü-
# einträge.



# Zeigen der notwendigen Rahmen und
# Menüeinträge.
 


Die serielle Schnittstelle

nach oben

CAT4GEOS.IZL - Ansteuerung des Kurzwellenempfängers YAESU FRG-100

Das folgende Programm habe ich speziell für den Kurzwellenempfänger YAESU FRG-100 entwickelt. Es enthält einige der bisher genannten Beispiele. Die ScreenDumps sollen nur zur Demonstration dienen, was mit IZL möglich ist. Die einzelnen Funktionen (Ansteuerung der seriellen Schnittstelle, Frequenzumrechnung, Wandlung Hexadezimal in Dezimal) sind auf diesen speziellen Einsatzzweck zugeschnitten und werden deshalb nicht näher erläutert. Einige wenige Erläuterungen befinden sich innerhalb der IZL-Datei. Sollte es spezielle Fragen zu diesem Programm oder dessen Anpassung an andere Typen geben, so werde ich gerne weitere Erklärungen abgeben. Kontaktadressen sie am Anfang des Dokumentes.

 cat4geos

Datenausgabe

nach oben

CSV-AUSG.IZL - Ausgabe von Daten in eine CSV-Datei (kommagetrennte Werte)csv_ausgabe

Dieses Programm soll die Möglichkeit der Ausgabe von Daten in ein Datei aufzeigen. In diesem Fall erfolgt die Ausgabe in eine CSV-Datei, dabei sind die einzelnen Daten durch ein Komma voneinander getrennt. Für eine spätere Auswertung, kann die Datei z.B. in GeoCalc importiert werden. Allerdings ist zu beachten, das in den Eingabefeldern selbst kein Komma enthalten ist, da ansonsten der spätere Import nicht fehlerfrei funktioniert.

Wenn das Programm geladen wird, wird die Ausgabedatei (LOGBUCH.CSV) automatisch geöffnet. Die Daten selbst können innerhalb der Eingabemaske eingegeben werden. Durch einen Klick auf die Taste [Daten speichern] werden diese in der Datei abgelegt. Für die nächste Eingabe können die Eingabefelder durch einen Klick auf [Eingabefelder leeren] geleert werden. Um die Datei auch betrachten oder importieren zu können, wenn das Programm selbst noch geöffnet ist, muss die Datei geschlossen werden: [Logbuch schliessen], ein erneutes öffnen ist mit [Logbuch öffnen] möglich.

Erweiterungen sind dahingehend möglich, das z.B. das Datum und die Zeit automatisch eingesetzt werden oder diese beiden Werte beim speichern selbst aktualisiert werden. Für mein CAT4GEOS werden die anderen Werte (ausser Sender und Bemerkungen) automatisch aus dem Kurzwellenempfänger ausgelesen, ausgewertet und dargestellt.

frame finput;
display "Eingabemaske";

label lbl1, fd;
display "Datum";
end;
text tdat,fd;
char_size 30,1;
display "";
end;
# Rahmen für Eingabefelder
# dieser Text wird direkt auf dem Rahmen dargestellt und
# kennzeichnet die Eingabemaske
# Label zur Beschriftung des Eingabefeldes
# Beschriftung des Labels
#
# Definition eines Textfeldes fuer Eingabe
# Feldgrösse: 30 x 1 Zeichen
# Feld wird leer dargestellt
#
function slog;
seek_end thefile, 0;

get tdat, txt1;

ausgabe = txt1 & "," & txt2 & "," & txt3 & "," & txt4 & "," & txt5 & "," & txt6 & "," & txt7;
put thefile, ausgabe;

put thefile, CR;



end;
function fclear;
txt1 = "";
put tdat, txt1;

end;
# Ausgabefunktion in CSV-Datei
# setzt Schreibposition an das Dateiende

# Übergabe der Daten von Textfeld an die
# einzelnen Zeichenketten
# Zusammenfügen der einzelnen Zeichenketten zu einer einzigen.

# Ausgabe der zusammengefassten Zeichenkette
# in die Datei
# Ausgabe eines Zeichenumbruchs. Damit
# erhält jeder Datensatz eine eigene Zeile.
# Dies ist für den späteren Import der
# Daten wichtig.

# Funktion zum leeren der Eingabefelder
# Zeichenkette leeren
# Übergabe der Zeichenkette an Textfeld, wodurch
# dieses geleert wird
 


Wie im ScreenDump von GeoCalc zu sehen ist, gibt es derzeit noch Probleme mit den Umlauten. Inwieweit sich dieser Ausgabe / Import - Fehler vermeiden lässt, muss sich noch zeigen. Da der Import aber bei einem anderem Geos-Programm funktioniert...


 kw_logbuch

Datenauswertung

nach oben

ANZEIGE.IZL - grafische Auswertung eines Wertes in Form eines Zeigerinstrumentes

Viele Grössen wurden und werden mit Hilfe eines Zeigerinstrumentes angezeigt. Warum dann nicht auch mit IZL ? In meinem Fall soll die Signalstärke ausgewertet und dargestellt werden. Diese wird direkt über die serielle Schnittstelle aus dem Kurzwellenempfänger ausgelesen. Es sind Werte zwischen 0 und 255 möglich. Um das Beispiel allgemein nutzbarer zu machen, wird der Wert nicht über die serielle Schnittstelle ausgelesen, sondern kann direkt eingegeben werden. Nach einem Klick auf "Zeiger zeichnen" wird dieser Wert ausgewertet und dargestellt. Eine Überprüfung des Wertes erfolgt nur dahingehend, ob er kleiner als 1 ist (also 0), ist dies der Fall, wird der Wert auf 1 gesetzt. Ansonsten gibt es einen Konflikt mit der Parse-Library und eine Fehlermeldung. Denkbar wäre hier auch der Einsatz der Timer-Funktion um den Wert automatisch aktualisieren zu lassen. Zu beachten ist, das das Grafikfeld bei jeder neuen Darstellung immer komplett überschrieben wird. Dies ist notwendig, da es bisher keine Funktion gibt, das Grafikobjekt direkt zu löschen. Es werden immer wieder alle Objekte (Rechtecke, Kreise, Linien) dargestellt !

 anzeige

function ainhalt;

set ga, fill_color, "yellow";
fill ga, rectangle, 200,100;


set ga, pen, 0, 0;



function aazeiger;
call ainhalt;

get va, zwert;

zwert = (zwert/1.42)-90;







x1 = int(sin(radians(zwert)) * radius);
y1 = int(sin(radians(90 - zwert)) * radius);







set ga, pen, 100, 100;


draw ga, line, x1, -y1;



 
# Funktion zum zeichnen des
# Instrumentes
# Füllfarbe wird auf Gelb gesetzt
# zeichnen eines Rechteckes, damit
# wird das Grafikfeld fa komplett
# gefüllt
# Stiftposition auf 0,0 setzen. IZL nutzt als Ausgangspunkt nicht
# den Mittelpunkt des Kreises, sondern die linke, obere Ecke eines
# um den Kreis gezeichneten Quadrates. Von dem Kreis selbst wird
# in diesem Beispiel nur der obere Halbkreis verwendet.
# Wert auswerten und Zeiger darstellen
# Erneuerung des Instrumentes - damit werden
# vorhergehende Darstellungen überschrieben
# Wert der Eingabefeldes der Variable zwert
# zuweisen
# zwert für Anzeige anpassen: um den Wert von 255 korrekt über
# 180° zu verteilen, muss dieser verkleinert werden (: 1.42). Der
# Abzug der 90 liegt in der Art der Darstellung begründet. D.h.
# die 90 werden abgezogen werden abgezogen, damit der Zielpunkt
# für den Zeiger links unten liegt (im 4. Quadranten). Wird dies
# nicht gemacht, werden die Werte immer im 1. Quadranten
# dargestellt.

# Berechnung der x- und y-Koordinate für den Zeiger. Da in IZL für
# eine Linie nicht der Zielpunkt, sondern der Abstand in x- bzw.
# y-Richtung vom Ausgangspunkt genutzt wird, kommen hier die
# Formeln zur Berechnung der Länge der beiden fehlenden Seiten
# zum Einsatz. Die 3. Gerade entspricht dem Radius und der Winkel,
# welcher von den beiden fehlenden Seiten eingeschlossen wird,
# beträgt 90°. Um eine korrekte Darstellung zu ermöglichen, werden
# die Ergebnis auf eine Ganzzahl gerundet.

# Stiftposition auf 100,100 setzen.
# Dies ist der Mittelpunkt des Kreises.

# zeichnen des Zeigers mit den berechneten Zielkoordinaten. -y1
# deshalb, weil der Ausgangspunkt für alles die linke, obere Ecke
# ist (0,0). Da sich der Zeiger vom Ausgangspunkt in Richtung
# dieses Punktes nach oben bewegt, wird hier ein negativer Wert
# benötigt.

 diagram

Datenauswertung

nach oben

DATUMN.IZL - Korrektur der Beispiele (DATUMK und DATUMD) aus Teil 1

Im Teil 1 des IZL-Magazins wurden 2 Beispiele zur Auswertung und Anzeige des Datums und der Zeit veröffentlicht. In diesen Beispielen besteht jedoch der Mangel, das die Zeitanzeige zwar korrekt erfolgt, die Darstellung aber zu wünschen übrig lässt, da die führenden Nullen nicht dargestellt wurden. Dies ist jetzt behoben.

datumN

function akt;

st1 = DAY(NOW());
st2 = MONTH(NOW());
st3 = YEAR(NOW());
st4 = HOUR(NOW());
st5 = MINUTE(NOW());
st6 = SECOND(NOW());

if length(st5) = 1;

st5 = "0" & st5;



end_if;

 


# Zuweisung für den Tag
# Zuweisung für den Monat
# Zuweisung für das Jahr
# Zuweisung für die Stunde
# Zuweisung für die Minute
# Zuweisung für die Sekunde

# ist die Länge der Zeichenkette = 1, dann
# ist die Zahl für die Minute einstellig.
# deshalb wird hier vor die einstellige
# Minute eine "0" angefügt und somit die
# Darstellung korrigiert.

# auf die selbe Weise wird auch die Sekunde modifiziert. Bei den
# anderen Werten erscheint meiner Meinung nach eine Änderung
# nicht notwendig.


Kleiner Tip am Rande:

Von vielen Leuten habe ich schon gehört, das es sie stört, das man mit IZL keine eigenständigen Programme erzeugen kann und immer einen Interpreter benötigt, um die Programme nutzen zu können. Dieses "Problem", lässt sich zwar nicht beseitigen, aber man kann dem Benutzer ein eigenständiges Programm "vorgaukeln". Dies geschieht durch eine Änderung oder Erweiterung der GEOS.INI:tip am rande

[fileManager]
filenameTokens = {
  C4G-DIRZ.IZT = "NWPS",255,"IZLP",16418
         *.IZT = "IZLP",16418,"IZLP",16418
{

"NWPS",255 kennzeichnet dabei den Iconnamen und seine ID, "IZLP", 16418 verknüpft die IZT-Datei mit dem IZL-Interpreter. *.IZT verknüpft alle restlichen IZT-Dateien mit dem Interpreter.
 

Verschiedenes

nach oben

INDICATO.IZL - Indikatorfeld für verschiedene Funktionen

Hin und wieder wird eine Anzeige benötigt, das gerade eine Funktion ausgeführt wird. Im folgenden Beispiel werden 2 Möglichkeiten aufgezeigt: die Beschriftung der Taste wird mit jedem anklicken geändert. Es wird immer die Funktion angezeigt, die beim nächsten Klick ausgeführt wird. Zur Verdeutlichung dieser Funktion und gleichzeitig als weiterer Indikator dient das Grafikfeld. Im Grundzustand ist das Feld grün, d.h. die Funktion ist derzeit nicht aktiviert. Klickt man nun auf die Taste [Ein], dann wird deren Beschriftung in [Aus] geändert und das Grafikfeld rot gefüllt, d.h. die Funktion ist gerade aktiv.

Das Beispiel wurde mit Hilfe des Trace-Mode von IZL aus dem Programm "Composer" von Holger Laux abgeschaut. Bei dem "Composer" handelt es sich um ein Programm, mit welchem *.SNG Dateien erzeugt, gespeichert, geladen und abgespielt werden können.

 indicato

variables;
btxt = "Ein";
end;

button btest, frame1;
display btxt;
char_size 3,1;
end;

graphic go, frame1;
pixel_size 30,20;
end;

function btest;
if btxt = "Ein";
 btxt = "Aus";
 set go, fill_color, "red";
else;
 btxt = "Ein";
 set go, fill_color, "green";
end_if;

put btest, btxt;
fill go, rectangle, 30, 20;
end;

# Text fuer Beschriftung der Taste


# Button zum auslösen der Funktion
# Beschriftung der Taste
# Grösse der Taste: 3 x 1 Zeichen


# Grafikobjekt go definieren
# Feldgrösse 30x20


# Funktion für Indikatorfeld
# wenn Beschriftung = "Ein"
# dann Beschriftung = "Aus"
# Füllfarbe auf rot setzen
# sonst, also btxt nicht "Ein"
# dann Beschriftung = "Ein"
# Füllfarbe auf grün setzen


# Übergabe der Beschriftung an Taste
# Grafikobjekt entsprechend füllen
 


Verschiedenes

nach oben

SOUND.IZL - Abspielen der GEOS-Systemklänge mit IZL Originalprogramm von Max Mansour.
sound
Das kleine Programm, welches im Original von Max Mansour stammt, demonstriert wie man die Systemklänge von GEOS unter IZL abspielen kann. Im Beispiel werden sie als einziges innerhalb einer Funktion abgespielt. Die eigentliche Anwendung liegt aber sicher in der Kombination mit anderen Befehlen. So bietet sich zB. an, den Fehlersound bei einer Fehleingabe abzuspielen oder den Mitteilungssound, wenn eine etwas länger dauernde Funktion beendet wurde.
 


 

function a;
play "error";

end;
# Beginn der Funktionsdefinition
# wird die Funktion aufgerufen, wird der Fehler-
# Sound abgespielt.
# Ende der Funktionsdefinition
Die einzelnen Möglichkeiten für die verschiedenen Klänge lauten:
Fehlermeldung
Warnung
Mitteilung
Keine Eingabe erlaubt
Tastenklick
Alarm
- "error"
- "warning"
- "notify"
- "no_input"
- "key_click"
- "alarm"

 

nach oben

RAHMEN.IZL - feste Rahmengrössen für verschiedene Systeme

Hin und wieder kommt es vor, das feste Rahmengrössen benötigt werden. Auch ist es sinnvoll, diese einzusetzen, wenn das IZL-Programm selbst über mehrere Bildschirme verteilt ist und der Rahmen immer die selbe Grösse haben soll und nicht ständig seine Grösse dem Inhalt (Tasten, Textfelder, Label...) anpasst. IZL bietet dafür den Befehl PIXEL_SIZE innerhalb der Rahmendefinition an.

OmniGo:
Zoomer:
Desktop:
233 x 183
250 x 284 - im Standartmodus
variabel
frame fomnigo;
display "OmniGo";
pixel_size 233, 183;
box;
end;
# Beginn der Rahmendefinition für OmniGo
# Anzeige von 'OmniGo' auf dem Rahmen
# festlegen der Rahmengrösse (x,y)
# Anzeige des Rahmens
# Ende der Rahmendefinition


Die Nutzung der display-Funktion innerhalb der Rahmendefinition erlaubt die einfache Beschriftung des Rahmens. Dies ist zwar auch mit der label-Funktion möglich, spart aber im Gegensatz zu dieser etwas Platz. rahmen
 

Verschiedenes
 

nach oben

PLATFORM.IZL - ermitteln auf welcher Plattform IZL läuft

Bei einigen Programmen oder einzelnen Funktionen davon ist es eventuell von Bedeutung zu wissen, auf welcher Plattform (Desktop, HP OmniGo oder CASIO Zoomer) IZL gerade läuft. Es dann zum Beispiel möglich dem Rahmen (siehe RAHMEN.IZL / Seite 15) schon beim Start die richtige Grösse zuzuweisen. Wichtig vielleicht auch bei der Benutzung von Farben, welche nur auf dem Desktop korrekt angezeigt werden. Im folgenden Programm wurde dies durch die Auswertung des Error-Codes welchen die COPY-Funktion liefert möglich. Siehe dazu auch in der Dokumentation von IZL, Bereiche IZL-Ausdrücke (Variablenbenutzung) und GEOS Fehlercodes.

function bcopy;
copy "a:\hp\phone.pdb", "b:\test.dat";
if ERROR_CODE = 0;
 put label1, "OmniGo";
 delete "b:\test.dat";
else;
 copy "a:\sdisk.exe", "b:\test.dat";
 if ERROR_CODE = 0;
  put label1, "Zoomer";
  delete "b:\test.dat";
 else;
  put label1, "Desktop";
 end_if;
end_if;
end;

Zuerst wird versucht die Datei PHONE.PDB aus dem Verzeichnis A:\HP nach B:\TEST.DAT zu kopieren. Die Datei wird dabei auch gleich umbenannt und eventuelle Verwechslungen mit existierenden Dokumenten zu verhindern. Laufwerk A: stellt beim HP OmniGo 100 und beim CASIO Zoomer das ROM-Laufwerk dar. Laufwerk B: ist das interne RAM-Laufwerk. War das kopieren erfolgreich wird der ERROR_CODE 0 übergeben, d.h. das die Funktion erfolgreich war. Da sowohl die Datei (PHONE.PDB) als auch das Verzeichnis (HP) nur auf dem OmniGo existieren, kann davon ausgegangen werden, das IZL auf dem OmniGo läuft. Deshalb wird mit Hilfe des Labels LABEL1 "OmniGo" auf den Bildschirm ausgegeben und die kopierte Datei gelöscht um wieder Platz zu schaffen. Für den Zoomer wird der selbe Ablauf mit der Datei SDISK.EXE durchgeführt. Wird das Programm auf dem Desktop gestartet, so wird auf diesem auf Laufwerk A: zugegriffen, dies lässt sich leider nicht vermeiden.

Wurden beide Bedingungen nicht erfüllt, also ERROR_CODE in beiden Fällen ungleich 0, wird "Desktop" über das Label Label1 ausgegeben, da dies zur Zeit die einzigste Alternative zu den beiden Geräten ist. Sollten in Zukunft weitere PDAs (wie der OmniGo oder Zoomer) auf den Markt kommen, sind natürlich weitere Anpassungen im Programm notwendig.

Deutsche Umlaute korrekt in IZL darstellen

  gewünschtes Zeichen   notwendiges Zeichen   Tastenkombination

        ß                      º               Umsch Strg Alt + 1
        ä                      è               Umsch + ` dann E
        ö                      Ü               Umsch + Ü
        ü                      ?               Strg Alt + F
        Ä                      Ç               Umsch Strg Alt + C
        Ö                      á               ´ dann A
        Ü                      å               Strg Alt + A

Um zum Beispiel das ä zu erhalten muss in der DOS-ASCII-Datei ein è eingegeben werden.

Datenauswertung
 

nach oben

DATEIAUS.IZL - Datenübernahme und Verarbeitung aus ASCII-Datei

dateiaus Dieses Programm demonstriert die Dateiauswahl mit (FILESEL), das einlesen und verarbeiten der Daten sowie deren Nutzung. Die Idee war das ich auf relativ einfache Weise schnellen Zugriff auf bestimmte Auswahlen an Frequenzen haben wollte (Amateurfunk, Auslandsrundfunk, Wetterfax usw.). Diese Frequenzen hätte ich zwar auch alle in dem Programm selbst unterbringen können, aber dann stösst man recht schnell an die Grenzen (IZL lässt nur eine bestimmte Anzahl von Variablen zu) und man müsste das Programm immer wieder neu complieren. Deshalb wählte ich den Weg über die externen Dateien. Vorbild war im wesentlichen TRIV.IZL bzw. TRIV_IZL.IZL von John Feras.

Im Gegensatz zu der Version die ich persönlich einsetze, erfolgt hier die Ausgabe der Daten nicht über die serielle Schnittstelle an den Kurzwellenempfänger, sondern diese werden auf dem Bildschirm unterhalb des Tastenfeldes dargestellt.

Zuerstmal der Aufbau der Datendatei:

Der Name der Datei ist beliebig, aus ihm sollte aber der Inhalt der Datei erkennbar sein (RUNDFUNK für Rundfunksender oder WETTER für Wetterfax), wichtig ist nur die Endung *.DAT. Diese kann aber auch bei Bedarf geändert werden. Siehe Programmerläuterungen. Die Datendatei besteht in meinem Fall aus 10 x 3 = 30 Feldern, welche alle in einer einzelnen Zeile untergebracht sind. Das heisst es können pro Datei 10 Sender mit ihrem Namen, ihrer Frequenz und ihrer Betriebsart untergebracht werden:

Radio àsterreich International
6155.55
3
<-- Sendername
<-- Frequenz
<-- Betriebsart

...

Der Sendername ist im Beispiel nicht richtig zu lesen, weil IZL keine Sonderzeichen direkt importieren kann. Das heisst, um das Ö richtig darzustellen muss es im GEOS-Code eingegeben werden und dieser unterscheidet sich vom ASCII-Code. Die Codes für die deutschen Sonderzeichen sind auf Seite 16 des IZL-Magazins zu finden. Diese habe ich wie folgt herausgefunden: in einer ASCII-Datei habe ich alle diese Zeichen in ihrer richtigen ASCII-Schreibweise untergebracht. Diese Datei wurde dann mit Hilfe des Programmes "TEXT2GEO" von Kolja Brix in die GEOS-Codes konvertiert und mit dieser Übersicht habe ich dann im Ensemble-Handbuch die dazugehörigen Tastenkombinationen herausgesucht.

label ff1, fileframe; display " "; end;
label ff2, fileframe;
display "Bitte Datendatei ausw"&char(138)&"hlen.";
end;

# Platzhalter und Erklärung zur Dateiauswahl

frame filelist, fileframe;   # Rahmen um Dateiauswahlfenster
vertical;                    # Inhalt wird untereinander,
center_h;                    # horizontal zentriert ausgerichtet
box;                         # Rahmen wird dargestellt
end;

filesel fselector, filelist; # Definition des Dateiauswahlfensters
invokes ok;                  # ruft Funktion ok auf
display "*.DAT";             # Dateibeschränkung auf *.DAT
end;

function fbart;              # Betriebsart Auswertung
if bart[invokersub] = 0;   ba = "LSB";  end_if;
if bart[invokersub] = 1;   ba = "USB";  end_if;
if bart[invokersub] = 2;   ba = "CW";   end_if;
if bart[invokersub] = 3;   ba = "AM";   end_if;
if bart[invokersub] = 4;   ba = "FM";   end_if;
if bart[invokersub] = 64;  ba = "AM/N"; end_if;
if bart[invokersub] = 128; ba = "CW/N"; end_if;
end;

# Auswertung mit Hilfe der internen Variable 'invokersub', d.h.
# wenn z.B. Taste 2 gedrückt wird, so wird die 2 der Variable
# zugewiesen: bart[2], diese wiederum enthält den Wert für die
# Betriebsart, welcher aus der Datendatei ausgelesen wurde und
# somit wird die Auswertung ermöglicht.

function fsend; # Funktion, bei Klick auf Sendetasten

dfrequenz = "Frequenz: "& frequenz[invokersub] &" kHz";
dbart = "Betriebsart: " & ba;

# "zusammensetzen" der Frequenz und Betriebsart für die
# Darstellung

put label7, dfrequenz;       # Übergabe der Strings an die
put label8, dbart;           # entsprechenden Label

play "notify";

# Spielen eines Hinweistones um das senden zu bestätigen

end;

function questopen;
hide fgesamt;
show fileframe;
end;

# Funktion um neue Datendatei zu wählen:
# der Rahmen fgesamt (inklusive des Tastenrahmens...) wird
# versteckt und dafür der Rahmen der Dateiauswahl und mit ihm auch
# sein Inhalt angezeigt
function ok;             # Funktion, wenn Datendatei gewählt wurde
hide fileframe;          # Dateiauswahl verstecken
show fgesamt;            # Rahmen für Sendertasten anzeigen
get fselector, filename; # Dateinamen von Dateiauswahl übernehmen
open thefile, filename;  # Datei öffnen

get thefile, field1;     # Zeile für Zeile aus Datei lesen und dem
get thefile, field2;     # jeweiligen Feld zuweisen

if length(field1) <> 0;  # Strings um 2 Zeichen kürzen
                         # (Zeilenumbruch wegschneiden)

field1 =  left(field1,  length(field1)-2);
end_if;

put btn[1],  field1;        # Übergabe der Strings an die Tasten
                            # (Sendernamen)
frequenz[1] =value(field2); # Frequenzzuweisung zu den Tasten
bart[1]= value(field3);     # Betriebsartzuweisung
end;

# Das auslesen der einzelnen Zeilen und die Übergabe an die
# einzelnen Fehler lässt sich sicher auch weniger umfangreich
# gestalten, damit es aber übersichtlich bleibt wurde jede
# Teilfunktion einzeln ausgeführt.

 dateiaus


 

 




Dieser Artikel ist Bestandteil von:

Ausgabe 2-1

! DGH - Info | Fehlermeldungen: Deutsch | Fehlermeldungen: Englisch | Geos ABC - Teil 1 | Geos ABC - Teil 2 | Geos ABC - Teil 3 | Geos Hardware | Geos INI - Teil 1 | Geos INI - Teil 2 | Geos INI - Teil 3 | Geos INI - Teil 4 | Kommerzielle Programme: Programme | Kommerzielle Programme: Spiele | Patche rund um Geoworks Ensemble | Programmieren mit IZL | Workshop: - Bindery | Workshop: - FAX 9000 - Hinweise zur Installation und Handhabung | Workshop: - FLI-Files | Workshop: - GeoComm und ZModem | Workshop: - Geos und Win95 | Workshop: - Helpeditor | Workshop: - Win95


Kurzlink hierhin: http://geos-printarchiv.de/3005


Letzte Änderung am 01.11.2019