|
Anhang
ASCII-Zeichensatz
| Nr |
Zn |
Nr |
Zn |
Nr |
Zn |
Nr |
Zn |
Nr |
Zn |
Nr |
Zn |
Nr |
Zn |
Nr |
Zn |
| |
|
60 |
< |
90 |
Z |
120 |
x |
150 |
û |
180 |
¦ |
210 |
Ê |
240 |
|
| |
|
61 |
= |
91 |
[ |
121 |
y |
151 |
ù |
181 |
Á |
211 |
Ë |
241 |
± |
| 32 |
|
62 |
> |
92 |
\ |
122 |
z |
152 |
ÿ |
182 |
 |
212 |
È |
242 |
= |
| 33 |
! |
63 |
? |
93 |
] |
123 |
{ |
153 |
Ö |
183 |
À |
213 |
i |
243 |
¾ |
| 34 |
" |
64 |
@ |
94 |
^ |
124 |
| |
154 |
Ü |
184 |
© |
214 |
Í |
244 |
¶ |
| 35 |
# |
65 |
A |
95 |
_ |
125 |
} |
155 |
ø |
185 |
¦ |
215 |
Î |
245 |
§ |
| 36 |
$ |
66 |
B |
96 |
` |
126 |
~ |
156 |
£ |
186 |
¦ |
216 |
Ï |
246 |
÷ |
| 37 |
% |
67 |
C |
97 |
a |
127 |
¦ |
157 |
Ø |
187 |
+ |
217 |
+ |
247 |
¸ |
| 38 |
& |
68 |
D |
98 |
b |
128 |
Ç |
158 |
× |
188 |
+ |
218 |
+ |
248 |
° |
| 39 |
' |
69 |
E |
99 |
c |
129 |
ü |
159 |
ƒ |
189 |
¢ |
219 |
¦ |
249 |
¨ |
| 40 |
( |
70 |
F |
100 |
d |
130 |
é |
160 |
á |
190 |
¥ |
220 |
_ |
250 |
· |
| 41 |
) |
71 |
G |
101 |
e |
131 |
â |
161 |
í |
191 |
+ |
221 |
¦ |
251 |
¹ |
| 42 |
* |
72 |
H |
102 |
f |
132 |
ä |
162 |
ó |
192 |
+ |
222 |
Ì |
252 |
³ |
| 43 |
+ |
73 |
I |
103 |
g |
133 |
à |
163 |
ú |
193 |
- |
223 |
¯ |
253 |
² |
| 44 |
, |
74 |
J |
104 |
h |
134 |
å |
164 |
ñ |
194 |
- |
224 |
Ó |
254 |
¦ |
| 45 |
- |
75 |
K |
105 |
i |
135 |
ç |
165 |
Ñ |
195 |
+ |
225 |
ß |
255 |
|
| 46 |
. |
76 |
L |
106 |
j |
136 |
ê |
166 |
ª |
196 |
- |
226 |
Ô |
|
|
| 47 |
/ |
77 |
M |
107 |
k |
137 |
ë |
167 |
º |
197 |
+ |
227 |
Ò |
|
|
| 48 |
0 |
78 |
N |
108 |
l |
138 |
è |
168 |
¿ |
198 |
+ |
228 |
õ |
|
|
| 49 |
1 |
79 |
O |
109 |
m |
139 |
ï |
169 |
® |
199 |
à |
229 |
Õ |
|
|
| 50 |
2 |
80 |
P |
110 |
n |
140 |
î |
170 |
¬ |
200 |
+ |
230 |
µ |
|
|
| 51 |
3 |
81 |
Q |
111 |
o |
141 |
ì |
171 |
½ |
201 |
+ |
231 |
þ |
|
|
| 52 |
4 |
82 |
R |
112 |
p |
142 |
Ä |
172 |
¼ |
202 |
- |
232 |
Þ |
|
|
| 53 |
5 |
83 |
S |
113 |
q |
143 |
Å |
173 |
¡ |
203 |
- |
233 |
Ú |
|
|
| 54 |
6 |
84 |
T |
114 |
r |
144 |
É |
174 |
« |
204 |
¦ |
234 |
Û |
|
|
| 55 |
7 |
85 |
U |
115 |
s |
145 |
æ |
175 |
» |
205 |
- |
235 |
Ù |
|
|
| 56 |
8 |
86 |
V |
116 |
t |
146 |
Æ |
176 |
¦ |
206 |
+ |
236 |
ý |
|
|
| 57 |
9 |
87 |
W |
117 |
u |
147 |
ô |
177 |
¦ |
207 |
¤ |
237 |
Ý |
|
|
| 58 |
: |
88 |
X |
118 |
v |
148 |
ö |
178 |
¦ |
207 |
ð |
238 |
¯ |
|
|
| 59 |
; |
89 |
Y |
119 |
w |
149 |
ò |
179 |
¦ |
209 |
Ð |
239 |
´ |
|
|
Die ersten 32 Zeichen sind als Steuerzeichen reserviert.
Das Zeichen mit der Ordnungszahl 32 ist das Leerzeichen.
Die hier aufgeführten DOS-Zeichen erhält man, indem man die Alt-Taste gedrückt hält und die Ordnungszahl über den Nummernblock der Tastatur eingibt.
Modul Display
| Funktionen |
Beschreibung, Beispiel |
S := Display.WhereX() S: INTEGER Z := Display.WhereY() Z: INTEGER |
Liefert die aktuelle Position bzgl. der x-Achse (Spalte) zurück. Liefert die aktuelle Position bzgl. der y-Achse (Zeile) zurück. |
B := Display.KeyPressed() B: BOOLEAN |
Der Wahrheitswert B (TRUE / FALSE) gibt an, ob eine Taste auf der Tastatur gedrückt wurde oder nicht. REPEAT UNTIL Display.Keypressed(); |
C := Display.ReadKey() C: CHAR |
Diese Funktion liefert als Ergebnis das
entsprechende ASCII-Zeichen der zuletzt
benutzten Taste.
Ist es kein ASCII-Zeichen (Funktionstasten), so wird der Wert auf Null gesetzt.
Ein nochmaliger Aufruf der Funktion legt den zugehörigen Tastaturcode in C ab. |
B := Display.IsCursorOn() B: BOOLEAN |
B wird auf TRUE gesetzt, wenn der Cursor eingeschaltet ist. |
B:=Display.IsColorSupported() B: BOOLEAN |
Sollte das System keine Farbausgaben unterstützen,
wird B auf FALSE gesetzt, d.h. alle Farbwerte sind automatisch 0. |
Display.SetWindowTitle(titel) titel: ARRAY ... OF CHAR |
Setzt im Display-Fenster den Titel auf den angegebenen Text. Display.SetWindowTitle(‚Mein Fenster'); |
Display.GotoXY(s,z) s,z: INTEGER |
Setzt den Cursor an die Position mit Spalte s und Zeile z. Display.GotoXY(10,3); |
Display.WriteChar(c) c: CHAR Display.WriteStr(text) text: ARRAY ... OF CHAR
Display.WriteSpaces(anz) anz: INTEGER Display.WriteInt(i,l) i: LONGINT
l: INTEGER Display.WriteReal(r,l) r: REAL l: INTEGER Display.WriteLn() |
Ausgabeanweisungen für die angegebenen Datentypen
ab der aktuellen Cursorposition. Für die Zahltypen bestimmt
der Parameter l die Länge der Ausgabe.
Display.WriteSpaces(anz) gibt anz Leerzeichen aus.
Setzt den Cursor in die neue Zeile. |
Display.WriteCharXY(s,z,c) c: CHAR Display.WriteStrXY(s,z,text)
text: ARRAY ... OF CHAR Display.WriteSpacesXY(s,z,anz) anz: INTEGER
Display.WriteIntXY(s,z,i,l) i: LONGINT l: INTEGER Display.WriteRealXY(s,z,r,l)
r: REAL l: INTEGER s, z: INTEGER |
Analog zu den oben genannten Anweisungen erfolgt
die Ausgabe an der Position mit Spalte s und Zeile z. |
Display.CursorOn() Display.CursorOff() |
Schaltet den Cursor ein bzw. aus. |
| Display.TerminalBell() |
Ein kurzer Ton wird ausgegeben. (Wenn es funktioniert!)
Einstellung des abgespielten Sounds unter
SYSTEMSTEUERUNG/SOUNDS UND MULTIMEDIA/HINWEIS
|
Display.EditStr(text,l,code) text: ARRAY ... OF CHAR l: INTEGER
code: CHAR |
Die angegebene Zeichenkette text wird ausgegeben
und kann im Anschluss verändert werden.
Der Wert l bestimmt die Anzahl der Zeichen,
die max. hinzugefügt werden können. |
Display.ReadChar(c) c: CHAR Display.ReadStr(text)
text: ARRAY ... OF CHAR Display.ReadInt(i) i: INTEGER Display.ReadLongInt(li)
li: LONGINT Display.ReadReal(r) r: REAL Display.ReadLongReal(lr) lr: LONGREAL |
Eingabeanweisungen für die angegebenen Datentypen ab der aktuellen Cursorposition. |
| Display.FlushKeyBuffer() |
Tastaturpuffer wird gelöscht.
Dies stellt sicher, dass der nächste Aufruf
von Display.ReadKey() keine vorher
benutzten Tasten auswertet. |
| Display.ClrScr() |
Löscht den Bildschirm in der aktuellen Hintergrundfarbe (Standard: weiß). |
Display.SetForeColor(rot,grün,blau) Display.SetBackColor(rot,grün,blau) rot,grün,blau: INTEGER |
Setzt die Vorder- bzw. Hintergrundfarbe durch Mischen der Farbanteile.
Der Wert für rot, grün, blau liegt jeweils zwischen 0 und 255. |
Display.GetForeColor(rot,grün,blau) Display.GetBackColor(rot,grün,blau) rot,grün,blau: INTEGER |
Ermittelt die aktuelle Vorder- bzw. Hintergrundfarbe. |
Download Sie können an dieser Stelle diese Tabelle mit dem Quelltext von testdisp.mod als Word-Document herunterladen.
MODULE farben;
IMPORT Display;
PROCEDURE ProgMain*;
VAR taste: CHAR; rot, gruen, blau : INTEGER;
BEGIN
rot := 0; gruen := 0; blau := 0;
Display.CursorOff();
Display.WriteStrXY(10,1,"Farbenmischen");
Display.WriteStrXY(10,2,"===================");
Display.WriteStrXY(5,4,"Verändern der Farbanteile mit r, R, g, G, b und B");
Display.WriteStrXY(5,5,"Programmende mit ESC!");
REPEAT
Display.SetBackColor(255,255,255); Display.SetForeColor(0,0,0);
Display.WriteStrXY(14,8,"rot gruen blau");
Display.SetBackColor(rot,0,0); Display.WriteStrXY( 14, 9," ");
Display.SetBackColor(0,gruen,0); Display.WriteStrXY(20, 9," ");
Display.SetBackColor(0,0,blau); Display.WriteStrXY(26,9," ");
Display.SetBackColor(255,255,255); Display.SetForeColor(0,0,0);
Display.WriteIntXY(14,10,rot,3);
Display.WriteIntXY(20,10,gruen,3);
Display.WriteIntXY(26,10,blau,3);
Display.WriteStrXY(14,12,".. und gemischt");
Display.SetBackColor(rot,gruen,blau);
Display.WriteStrXY(14,13," ");
taste:=Display.ReadKey();
CASE taste OF
'r','R': rot:=rot+5;
|'g','G': gruen:=gruen+5;
|'b','B': blau:=blau+5
ELSE
END;
UNTIL taste = CHR(27);
END ProgMain;
END farben.
Beispiellösungen zu Kapitel 2
Ein- und Ausgabe
MODULE aufgabe1;
IMPORT In, Out;
VAR a,b,c : INTEGER;
d : REAL;
e : CHAR;
PROCEDURE ProgMain*;
BEGIN
In.Prompt("ganze Zahl"); In.Int(a); Out.String("Variable a = "); Out.Int(a,5); Out.Ln;
In.Prompt("d"); In.Real(d); Out.String("Variable d = "); Out.Real(d,9); Out.Ln;
In.Prompt("e"); In.Char(e); Out.String("Variable e = "); Out.Char(e);
END ProgMain;
END aufgabe1.
Beispiellösungen zu Kapitel 5
4. Kryptogramm AU + AU = WEH
MODULE Krypto;
IMPORT In,Out;
PROCEDURE ProgMain*;
VAR A,U,W,E,H: INTEGER;
BEGIN
W:=1;
FOR A:=5 TO 9 DO
FOR U:=0 TO 9 DO
FOR E:=0 TO 9 DO
FOR H:=0 TO 9 DO
IF ((A#U) & (A#W) & (A#E) & (A#H) & (U#W) & (U#E) & (U#H)
& (W#E) & (W#H) & (E#H)) THEN
IF 20*A+2*U = 100*W+10*E+H THEN Out.String("Lösung: ");
Out.Int(A,3);Out.Int(U,3);Out.Int(W,3);
Out.Int(E,3);Out.Int(H,3);Out.Ln;
END;
END;
END;
END;
END;
END;
END ProgMain;
END Krypto.
Modul Strings
Prozedur
|
Beschreibung, Beispiel
|
P := Strings.Pos(zk1,zk,stelle) zk1, zk: StringT P, stelle: LONGINT
|
Stellt fest, ab welcher Position die Zeichenkette zk1 in zk vorkommt. Gesucht wird ab stelle (>=1). P := Strings.Pos("f","Erfurt",1); P bekommt den Wert 3. Falls die Suche nicht erfolgreich ist, hat P den Wert 0.
|
L := Strings.Length(zk) zk: StringT L: LONGINT
|
Ermittelt die Länge einer Zeichenkette zk. L := Strings.Length("Erfurt"); L erhält den Wert 6.
|
Z := Strings.Val(zk) zk: StringT Z: LONGINT
|
Die Zeichenkette zk wird in eine Zahl Z umgewandelt. Z := Strings.Val("0815"); Z hat danach den Wert 815. Führende Nullen werden entsprechend bearbeitet.
|
E := Strings.ValResult(zk) zk: StringT E: LONGINT
|
Diese Funktion prüft, ob die Umwandlung der Zeichenkette zk in eine Zahl erfolgreich ist. Dabei wird im Ergebnis E eine Zahl festgelegt, die mit den Konstanten Strings. ISSHORTINT Strings. ISINTEGER Strings. ISLONGINT Strings. ISOUTOFRANGE Strings. STRINGEMPTY Strings. STRINGILLEGAL verglichen werden kann. E := Strings.ValResult("0815"); E erhält den Wert ISINTEGER (2).
|
Strings.Copy(quelle, ziel, pos, anz) quelle, ziel: StringT pos, anz: LONGINT |
Kopiert aus der Zeichenkette quelle ab der Position pos die folgenden anz Zeichen in die Zeichenkette ziel. Strings.Copy("Erfurt",zk,1,2); zk speichert "Er".
|
Strings.Delete(quelle, pos, anz) quelle: StringT pos, anz: LONGINT
|
Löscht in der Zeichenkette quelle ab der Position pos eine Anzahl anz von Zeichen. zk:="Erfurt"; Strings.Delete(zk,1,2); zk speichert danach "furt".
|
Strings.Append(zk, zk1) zk, zk1: StringT
|
Fügt an die Zeichenkette zk die Zeichenkette zk1 an. zk wird also um zk1 erweitert. zk:="Er"; zk1:="furt"; Strings.Append(zk, zk1); zk ist jetzt "Erfurt".
|
Strings.Insert(zk1,zk,pos) zk, zk1: StringT pos: LONGINT
|
Fügt in die Zeichenkette zk die Zeichenkette zk1 an der Position pos ein. zk:="Ert"; zk1:="fur"; Strings.Insert(zk1, zk, 2); zk ist jetzt "Erfurt".
|
Strings.InsertChar(z,zk,pos) z: CHAR zk: StringT pos: LONGINT |
Analog Strings.Insert, bloß für ein einzelnes Zeichen z.
|
Strings.Str(zahl, zk) zahl: LONGINT zk: StringT
|
zahl wird in eine Zeichenkette zk umgewandelt. Ist die Zeichenkette zk nicht lang genug, besteht sie nur aus den Zeichen $. |
Strings.UpCase(zk) zk: StringT
|
Wandelt alle Kleinbuchstaben der Zeichenkette zk in Großbuchstaben um. Alle anderen Zeichen bleiben unverändert.
|
MODULE Text;
IMPORT In, Out, Strings;
VAR ort, vorort, gesamtort: ARRAY 50 OF CHAR;
plz: ARRAY 10 OF CHAR;
code :INTEGER;
stelle,leitzahl,laenge : LONGINT;
PROCEDURE ProgMain*;
BEGIN
In.Prompt("Ort");In.String(ort);
In.Prompt("PLZ");In.String(plz);
laenge:= Strings.Length(ort); Out.Int(laenge,10); Out.Ln;
stelle:= Strings.Pos('-',ort,1); Out.Int(stelle,10); Out.Ln;
Strings.Copy(ort,vorort,stelle+1,laenge+1-stelle); Out.String(vorort);Out.Ln;
Strings.Delete(ort,stelle,laenge+1-stelle); Out.String(ort); Out.Ln;
leitzahl:=Strings.Val(plz); code:=Strings.ValResult(plz); Out.Int(code,5);
Out.Ln;
IF ((code > Strings.ISLONGINT) OR (Strings.Length(plz) # 5))
THEN Out.String("Fehler in der Postleitzahl") END;
Strings.Append(gesamtort,plz); Out.String(gesamtort); Out.Ln;
Strings.Append(gesamtort,ort); Out.String(gesamtort); Out.Ln;
Strings.Append(gesamtort,vorort); Out.String(gesamtort); Out.Ln;
Strings.Insert(' ',gesamtort,6); Out.String(gesamtort); Out.Ln;
Strings.InsertChar('-',gesamtort,7+stelle); Out.String(gesamtort); Out.Ln;
END ProgMain;
END Text.
Download Sie können an dieser Stelle diese Tabelle mit dem Quelltext von Text.mod als Word-Document herunterladen.
Grafikanweisungen
Modul XYplane
Anweisungen |
Beschreibung
|
Konstanten:
draw
erase |
Zeichnen in der Vordergrundfarbe.
Zeichnen in der Hintergrundfarbe (Löschen).
|
Variablen:
W: INTEGER
H: INTEGER
X: INTEGER
Y: INTEGER |
Breite des aktuellen Zeichenfensters
Höhe des aktuellen Zeichenfensters
Horizontale Komponente der linken unteren Ecke
Vertikale Komponente der linken unteren Ecke
|
Prozeduren
XYplane.Open()
XYplane.Close()
XYplane.Dot(x, y, mode)
x, y, mode: INTEGER
XYplane.Clear() |
Diese Prozedur öffnet das Zeichenfenster und
muss vor anderen Anweisungen aufgerufen werden.
Diese Prozedur schließt das Zeichenfenster.
Setzt einen Punkt an den Koordinaten (x,y).
Für mode müssen draw oder erase gesetzt werden.
Diese Prozedur löscht das Zeichenfenster in der
Hintergrundfarbe.
|
Funktionen
XYplane.IsDot(x, y:INTEGER):BOOLEAN
XYplane. Key():CHAR |
Diese Funktionen ermitteln,
ob ein Punkt an den Koordinaten gesetzt ist.
Ermittelt den Tastaturcode der
aktuell gedrückten Taste (nur ASCII-Werte).
Wurde keine Taste benutzt,
wird OX zurückgegeben.
|
Grafikanweisungen
Modul ColorPlane
Anweisungen |
Beschreibung
|
Konstanten:
DRAW
(in Verbindung mit mode)
ERASE
(in Verbindung mit mode) |
Zeichnen in der Vordergrundfarbe.
Zeichnen in der Hintergrundfarbe (Löschen).
|
Prozeduren:
ColorPlane. Open()
Colorplane. Close ()
ColorPlane. Clear()
ColorPlane.Bar(x1, y1, x2, y2, mode)
x1, y1, x2, y2:INTEGER;
mode:INTEGER
ColorPlane.Box(x1, y1, x2, y2, mode)
x1, y1, x2, y2:INTEGER;
mode:INTEGER
ColorPlane. CursorOff()
ColorPlane. CursorOn()
on:=ColorPlane. IsCursorOn()
on: BOOLEAN
ColorPlane. Dot(x, y, mode)
x, y:INTEGER;
mode:INTEGER
ColorPlane. GetBackColor(r, g, b)
ColorPlane. GetForeColor(r, g, b)
ColorPlane. SetBackColor(r, g, b)
ColorPlane. SetForeColor(r, g, b)
r, g, b:INTEGER
ColorPlane. GetDot(x, y, r, g, b)
x, y:INTEGER; r, g, b:INTEGER
ColorPlane. Line(x1, y1, x2, y2, mode)
x1, y1, x2, y2, mode:INTEGER
|
Öffnet das Zeichenfenster.
Schließt das Zeichenfenster.
Löscht das Zeichenfenster.
Zeichnet ein gefülltes Rechteck
(x1,y1) Koord. der linken unteren Ecke
(x2,y2) Koord. der rechten oberen Ecke
mode gibt den Zeichenmodus an.
Zeichnet ein Rechteck analog Bar.
Schaltet den Cursor aus.
Schaltet den Cursor ein.
Diese Funktion liefert den Wert TRUE,
wenn der Cursor sichtbar ist.
Setzt im angegebenen Modus einen Punkt
an die Koordinaten (x,y).
Ermitteln der Hintergrundfarbe.
Ermitteln der Vordergrundfarbe.
Setzen der Hintergrundfarbe.
Setzen der Vordergrundfarbe.
0 <= r, g, b <= 255
Ermittelt die Farbwerte r, g, b
des Punktes mit den Koordinaten (x, y).
Zeichnet eine Strecke zwischen den
Punkten (x1,y1) und (x2,y2)
im entspr. Modus.
|
weitere Anweisungen:
ColorPlane. EditStr(zk, maxL, Code)
zk:ARRAY OF CHAR;
maxL:INTEGER;
Code:CHAR
ColorPlane. GotoXY(x, y:INTEGER)
ColorPlane. GetMouse(buttons, x, y)
buttons: SET;
x, y: INTEGER
p:= ColorPlane. KeyPressed()
p: BOOLEAN
l:=ColorPlane. ReadKey()
l: CHAR
ColorPlane. ReadStr(zk, maxL, Code)
zk: ARRAY OF CHAR;
maxL: INTEGER;
Code: CHAR
h:=ColorPlane. TextHeight()
h: INTEGER
l:=ColorPlane. TextWidth(zk)
zk:ARRAY OF CHAR
l: INTEGER
x:= ColorPlane. WhereX()
x: INTEGER
y:= ColorPlane. WhereY()
y: INTEGER
ColorPlane. WriteLn()
ColorPlane. WriteStr(zk)
zk: ARRAY OF CHAR
|
Gibt die Zeichenkette zk aus, die
im Anschluss editiert werden kann.
Setzt den Cursor an die Position (x, y).
Ermittelt die Position (x,y) des Mauszeigers
und gibt in buttons einen Wert zurück, der
anzeigt,welche Maustaste gedrückt wurde.
0 = linke Maustaste
1 = mittlere Maustaste
2 = rechte Maustaste
Diese Funktion liefert den Wert TRUE,
wenn eine Taste gedrückt wurde.
Liefert ein auf der Tastatur eingegebenes
Zeichen zurück.
Ist der Code 0, so liefert ein nochmaliger
Aufruf den Tastaurcode.
Liest die Zeichenkette zk mit der
max. Länge maxL ein.
In code wird bei erfolgreicher Auführung der
Wert der Konstante ENTER ansonsten
ESC abgelegt.
Liefert die Schriftgröße.
Liefert die Länge der Zeichenkette zk
in der aktuellen Schriftart.
Liefert die x-Koordinate der aktuellen
Cursorposition.
Liefert die y-Koordinate der aktuellen
Cursorposition.
Setzt den Cursor an den Anfang der nächsten
Textzeile.
Gibt ab der aktuellen Cursorposition
die Zeichenkette zk aus.
|
Beispiel:
MODULE Grafiktest;
IMPORT ColorPlane;
VAR i: INTEGER;
PROCEDURE Warte*(weile:INTEGER);
VAR i,j,h: INTEGER;
BEGIN
FOR i:=1 TO 32000 DO
FOR j:=1 TO weile DO
h:= i DIV j;
END;
END;
END Warte;
PROCEDURE ProgMain*;
BEGIN
ColorPlane.Open();
ColorPlane.SetForeColor(250,0,0);
ColorPlane.CursorOff();
FOR i:=0 TO 10 DO
ColorPlane.Box(100+5*i,100+5*i,500-5*i,500-5*i,1); END;
ColorPlane.Bar(250,250,350,350,1);
Warte(2000);
ColorPlane.SetForeColor(0,250,0);
FOR i:=0 TO 800 DO ColorPlane.Line(i,0, i,650,1); Warte(10); END;
Warte(2000);
ColorPlane.SetForeColor(0,0,250);
FOR i:=0 TO 800 DO ColorPlane.Line(400,0, i,650,1); Warte(10); END;
FOR i:=0 TO 800 DO ColorPlane.Line(400,650, i,0,1); Warte(10); END;
REPEAT UNTIL ColorPlane.KeyPressed();
END ProgMain;
END Grafiktest.
Download Sie können an dieser Stelle diese Tabellen mit dem Quelltext von Grafiktest.mod als Word-Document herunterladen.
Als Ergänzung mochte ich an dieser Stelle die Benutzung der Maus in einem Module erläutern. Wie in der Tabelle schon aufgeführt, dient dazu der Befehl ColorPlane.GetMouse. Das folgende Modul kann als Vorlage dienen:
MODULE maus;
IMPORT C:=ColorPlane, S:=Strings;
VAR mausx, mausy,i: INTEGER;
maustaste: SET;
zk1, zk2,zk3: ARRAY 25 OF CHAR;
PROCEDURE ProgMain*;
BEGIN
C.Open();
C.SetBackColor(250,0,0);
C. Clear();
REPEAT
C.GetMouse(maustaste, mausx, mausy);
C. GotoXY(200,200); C. WriteStr('Mausposition: ');
S.Str(mausx, zk1); C. WriteStr(zk1); C. WriteStr(' , ');
S.Str(mausy, zk2); C. WriteStr(zk2); C. WriteStr(' , ');
IF (0 IN maustaste) THEN zk3:='linke Maustaste ' ELSE
IF (1 IN maustaste) THEN zk3:='mittlere Maustaste ' ELSE
IF (2 IN maustaste) THEN zk3:='rechte Maustaste ' ELSE zk3:='keine Maustaste '; END;
END;
END;
C. WriteStr(zk3);
UNTIL C.KeyPressed();
END ProgMain;
END maus.
Modul File
| Anweisungen |
Beschreibung, Beispiel |
Konstanten:
MAXPATH
MAXFILENAME |
Max. Länge eines Dateinamens
(incl. Pfadangaben)
Max. Länge eines Dateinamens
|
Typen:
Handle
RetCodeT
|
Variablen vom Typ Handle stellen die
ordnungsgemäßeBenutzung einer Datei sicher.
Variablen von diesem Typ können
Fehlermeldungen aufnehmen
|
Prozeduren
Open(name,existenz,zugriff,modus,
fHandle,fehler);
name: ARRAY OF CHAR;
existenz: BOOLEAN;
zugriff, modus: INTEGER;
fHandle: Handle;
fehler: RetCodeT;
Close(fHandle);
fHandle: Handle;
GetErrorMessage(fehler,message);
fehler: RetCodeT;
message: ARRAY OF CHAR;
Pos(fhandle,pos,fehler);
fhandle: Handle;
pos: LONGINT;
fehler: RetCodeT;
Seek(fhandle,pos,fehler);
handle: Handle;
pos: LONGINT;
fehler: RetCodeT;
SeekRel(fhandle,pos,fehler);
fhandle: Handle;
pos: LONGINT;
fehler: RetCodeT;
Size(fhandle,laenge,fehler);
fhandle: Handle;
laenge: LONGINT;
fehler: RetCodeT
ReadChar(fhandle,zeichen,fehler);
fhandle: Handle;
zeichen: CHAR;
fehler :RetCodeT
WriteChar(fhandle,zeichen,fehler);
fhandle: Handle;
zeichen: CHAR;
fehler: RetCodeT
Truncate(fhandle,fehler);
fhandle: Handle;
fehler: RetCodeT;
ReadLn(fhandle,zk,fehler);
fhandle: Handle;
zk: ARRAY OF CHAR;
fehler: RetCodeT;
WriteLn(fhandle,zk,fehler);
fhandle: Handle;
zk: ARRAY OF CHAR;
fehler: RetCodeT;
ReadBlock(fhandle,data,n,gelesen,fehler);
fhandle: Handle;
data: ARRAY OF SYSTEM.BYTE;
n: LONGINT;
gelesen: LONGINT;
fehler: RetCodeT;
WriteBlock(fhandle,data,n,fehler);
fhandle: Handle;
data: ARRAY OF SYSTEM.BYTE;
n: LONGINT;
fehler: RetCodeT;
GetModifyDate(fhandle,datum,fehler);
fhandle: Handle;
datum: ARRAY OF CHAR;
fehler: RetCodeT;
GetCreationDate(fhandle,datum,fehler);
handle: Handle;
datum: ARRAY OF CHAR;
fehler: RetCodeT;
GetAccessDate(fhandle,datum,fehler);
fhandle: Handle;
datum: ARRAY OF CHAR;
fehler: RetCodeT;
SetModifyDate(fhandle,datum,fehler);
fhandle: Handle;
datum: ARRAY OF CHAR;
fehler: RetCodeT;
GetAttributes(name,attr,fehler);
name: ARRAY OF CHAR;
attr: SET;
fehler: RetCodeT;
SetAttributes(name,attr,fehler);
name: ARRAY OF CHAR;
attr: SET;
fehler: RetCodeT;
Rename(alt,neu,fehler);
alt, neu: ARRAY OF CHAR;
fehler: RetCodeT;
Delete(name,fehler);
name: ARRAY OF CHAR;
fehler: RetCodeT; |
Die Prozedur Open bereitet
eine Datei für die Benutzung
vor. Dazu muss der Dateiname ev. incl. Pfad
angeben werden.
existenz muss auf TRUE gesetzt werden,
wenn die Datei neu erstellt werden soll.
zugriff und modus siehe unten.
Bsp.:
File.Open('test.dat',TRUE,File.DENYNONE,
File.READWRITE,fHandle,fehler);
Schließt die Benutzung der aktuellen Datei ab.
Bsp.: File.Close(fHandle);
Liefert in message die zu fehler
gehörige Fehlermeldung.
Gibt die aktuelle Stelle der Bearbeitung
der Datei in pos an.
Setzt den Datei-Zeiger auf die
in pos angegebene Stelle.
Ist diese Stelle nicht möglich, wird der Zeiger
an das Dateiende gesetzt.
Verschiebt den Datei-Zeiger relativ zur
aktuellen Position um pos Stellen.
In laenge wird die Größe der
aktuellen Datei abgelegt.
In der aktuellen Datei wird das
nächste Zeichen gelesen.
In der aktuellen Datei wird das
nächste Zeichen geschrieben.
Die spezifizierte Datei wird bis zur aktuellen
Position des Zeigers gestutzt.
Mit size kann man also Dateien verkürzen.
Eine Zeile wird aus der Datei ausgelesen
bezogen auf die aktuelle Position
des Datei-Zeigers.
Eine Zeile wird in die Datei geschrieben
bezogen auf die aktuelle Position
des Datei-Zeigers.
Aus der spez. Datei soll ein Block
der Länge n Byte gelesen werden.
Das Ergebnis wird in data abgelegt.
(Der Datentyp spielt keine Rolle.)
Die Zahl der wirklich gelesenen Byte
ist in gelesen verzeichnet.
analog ReadBlock
datum nimmt die letzte Modifikation in der
Form "TT.MM.JJJJ HH:MM:SS" auf
(Länge: 20 Zeichen,
2 Leerzeichen zwischen Datum Uhrzeit).
datum gibt die Erstellungszeit an
(anlog GetModifyDate)
datum gibt die letzten Zugriff an
(anlog GetModifyDate)
Durch datum wird das Modifizierungsdatum
geändert.(anlog GetModifyDate)
Für die in name angegebenen Datei werden
die Attribute (s.u.) ermittelt.
Für die in name angegebenen Datei
werden die Attribute (s.u.) gesetzt.
Diese Prozedur benennt eine
Datei alt in neu um.
Löscht die in name angegebene Datei. |
Funktionen
AtEnd(fhandle): BOOLEAN;
fhandle: Handle;
Exist(name): BOOLEAN;
name: ARRAY OF CHAR; |
Diese Funktion liefert TRUE im Ergebnis,
wenn der Dateizeiger auf das Dateiende weist.
Liefert TRUE, falls die in name
angebene Datei existiert.
|
Datei-Attribute
ATTRREADONLY ATTRHIDDEN ATTRSYSTEM ATTRVOLUME ATTRDIR ATTRARCHIVE
ATTRNORMAL
ATTRTEMP
ATTRCOMPRESSED ATTROFFLINE |
Datei darf nur gelesen werden.
Es handelt sich um eine versteckte Datei.
Diese Datei ist eine Systemdatei.
Dient zur Festlegung eines Laufwerks.
Verweis auf ein Verzeichnis
Die Datei wurde seit der letzten
Sicherung verändert.
Datei ohne weitere Attribute
Datei wird zur temporären
Speicherung verwendet.
Datei ist komprimiert.
Datei darf aktuell nicht verwendet werden. |
Konstanten für den modus-Parameter
der open-Prozedur
READONLY
WRITEONLY READWRITE |
Die Datei soll nur gelesen werden.
Die Datei soll nur geschrieben werden.
Die Datei soll für Schreib- und
Leseoperationen benutzt werden. |
Konstanten für den zugriff-Parameter der open-Prozedur
DENYALL DENYNONE
DENYREAD
DENYWRITE |
Es ist kein simultaner Zugriff möglich.
Die Datei darf gleichzeitig von mehreren
Benutzern beschrieben und gelesen werden.
Die Datei darf gleichzeitig von mehreren
Benutzern gelesen werden.
Die Datei darf gleichzeitig von mehreren
Benutzern beschrieben werden. |
Error Codes
ACCESSDENIED
EOFREACHED FILENOTFOUND INVALIDHANDLE
NOERROR SHARINGVIOLATION
SHORTBUFFER
WRITEPROTECTED |
Der Zugriff wurde durch das Betriebssystem verweigert.
Dateiende wurde erreicht.
Datei wurde nicht gefunden.
Der Dateizeiger weist nicht auf eine
geöffnete Datei.
Die ausgeführte Operation war erfolgreich.
Die Datei wurde bereits geöffnet und darf
mit den gesetzten Dateiattributen kein
weiteres Mal benutzt werden.
Der Datenbuffer ist nicht groß genug für das Ergebnis.
Ein Schreibschutz verhinderte das erfolgreiche
Schreiben der Datei. |
MODULE datenbsp;
IMPORT C:=ColorPlane, F:=File;
TYPE tzk = ARRAY 30 OF CHAR;
VAR name, vorname, geschlecht, alter, pfadname: tzk;
i, deny, mode: INTEGER; create: BOOLEAN;
fehler: INTEGER; dathandle: F.Handle; x: CHAR;
code: CHAR;
PROCEDURE ProgMain*;
BEGIN
C.Open(); C.SetBackColor(187,187,187); C. Clear();
C. GotoXY(100,360); C. WriteStr('Beispiel für die Benutzung von File');
C. GotoXY(20,300); pfadname:='test.dat';
IF F.Exist(pfadname) THEN create:=FALSE ELSE create:=TRUE; END;
F.Open(pfadname, create, F.DENYNONE, F.READWRITE, dathandle, fehler);
C. GotoXY(20,250); C. WriteStr('Geben Sie bitte folgende Daten ein ');
C. GotoXY(20,200); C. WriteStr('Name: '); C.ReadStr(name,25,code); F.WriteLn(dathandle, name,fehler); C. GotoXY(20,150);
C. WriteStr('Vorname: '); C.ReadStr(vorname,25,code);
F.WriteLn(dathandle, vorname,fehler); C. GotoXY(20,100);
C. WriteStr('Geschlecht(m/w): '); C.ReadStr(geschlecht,25,code); F.WriteLn(dathandle, geschlecht,fehler); C. GotoXY(20,50);
C. WriteStr('Alter: '); C.ReadStr(alter,25,code);
F.WriteLn(dathandle, alter, fehler); F.Close(dathandle);
C.SetForeColor(0,0,250); C. GotoXY(10,50);
C. WriteStr('Weiter durch beliebige Taste. ');
REPEAT UNTIL C.KeyPressed(); C.Close();
C.Open(); C.SetBackColor(87,87,87);C. Clear();
C. GotoXY(100,360); C. WriteStr('Beispiel für die Benutzung von File ');
F.Open(pfadname, FALSE, F.DENYNONE, F.READONLY, dathandle, fehler);
C. GotoXY(20,250); C. WriteStr('Sie haben folgende Daten in test.dat gespeichert ');
F.ReadLn(dathandle, name, fehler); F.ReadLn(dathandle, vorname, fehler); F.ReadLn(dathandle, geschlecht, fehler);
F.ReadLn(dathandle, alter, fehler); F.Close(dathandle);
C. GotoXY(20,200); IF geschlecht='m' THEN C. WriteStr('Herr') ELSE
C. WriteStr('Frau '); END;
C. GotoXY(20,150); C. WriteStr(vorname);
C. WriteStr(' '); C. WriteStr(name);
C. GotoXY(20,100); C. WriteStr('Alter: '); C. WriteStr(alter);
C.SetForeColor(0,0,250); C. GotoXY(10,50); C. WriteStr('Weiter durch beliebige Taste. ');
REPEAT UNTIL C.KeyPressed(); C. Clear();
C.Close();
END ProgMain;
END datenbsp.
Download Sie können an dieser Stelle diese Tabelle mit dem Quelltext von datenbsp.mod als Word-Document herunterladen.
Erläuterung zu Mengen (Datentyp SET) hier.
Die Module Utils und Volume
| Prozedur |
Beschreibung |
Utils.GetDate(tag, monat, jahr, wtag)
tag, monat, jahr, wtag: INTEGER
|
Liefert das aktuelle Datum
(Systemzeit).
wtag kann die Werte 1 für Montag
bis 7 für Sonntag annehmen.
|
Utils. GetTime(sec, min, st)
sec, min, st: INTEGER
|
Liefert die aktuelle Zeit
(Systemzeit). |
Utils. GetDateStr(zk)
zk: ARRAY OF CHAR
|
Liefert das aktuelle Datum
(Systemzeit)
in der Form "dd.mm.yyyy"
als String. |
Utils. GetTimeStr(zk)
zk: ARRAY OF CHAR
|
Liefert die aktuelle Zeit (Systemzeit)
in der Form "HH.MM.SS" als String.
|
Volume. CurrentDirectory(dir,fehler)
dir: ARRAY OF CHAR;
fehler: RetCodeT
|
Das aktuelle Verzeichnis wird ermittelt.
|
Volume. ChangeDirectory(dir,fehler)
dir: ARRAY OF CHAR;
fehler: RetCodeT
|
Wechselt in das Verzeichnis,
das in dir abgelegt ist.
|
Volume. CreateDirectory(dir,fehler)
dir :ARRAY OF CHAR;
fehler: RetCodeT
|
Erstellt das in dir angegebene Verzeichnis.
dir darf nur den Verzeichnisnamen enthalten
und keinen ganzen Pfad.
|
Volume. FreeSpace(lw,kap,einheit,fehler)
lw: ARRAY OF CHAR;
kap: LONGINT;
einheit: LONGINT;
fehler: RetCodeT
|
Die Prozedur gibt die verfügbare freie
Kapazität kap des Laufwerks lw an.
Die einheit ist entweder 1 für die
Angabe in Byte oder 1024 für kByte.
|
Volume.TotalSpace(lw,kap,einheit,fehler)
lw: ARRAY OF CHAR;
kap: LONGINT;
einheit: LONGINT;
fehler: RetCodeT
|
Diese Prozedur gibt die Gesamtkapazität
analog FreeSpace an.
|
Download Sie können an dieser Stelle diese Tabelle als Word-Document herunterladen.
Projekte
Neu entstanden ist im Januar 2005 ein kleines Projekt zum Thema Lernspiele: MEMORY.
Dieses Modul erlaubt das Spielen einer Memory-Variante mit 18 Kartenpaaren. Neben den Beispielen wie physikalische Größen und Einheiten und einigen Englisch-Vokabeln, läßt sich auch ein eigenes Memory kreieren.
Anwendungen sind genügend im Unterricht zu finden: Römische Zahlen, Vokabeln, Chemische Formeln und Bezeichnungen, ... .
Download Sie können hier die Setup-Datei herunterladen,
die das Programm installiert.
Die Module sind in der Readme-Datei enthalten.
|