home *** CD-ROM | disk | FTP | other *** search
- UNIT MEMOERG;
- { Hilfsprozeduren zum Programm MEMO }
-
- INTERFACE
-
- USES crt,dos;
-
- CONST grundfarbe : byte = 31;
- abfragefarbe : byte = 79;
- buchstabenfarbe : byte = 29;
- eingabefarbe : byte = 32;
- kartenfarbe : byte = 96;
- aktkartenfarbe : byte = 111;
- hilfefarbe : byte = 95;
- hintergrundfarbe: byte = 112;
-
- TYPE s80 = string[80];
- s25 = string[25];
- bildschirm = Array [1..25,1..80] of RECORD
- ch : char;
- attr: byte;
- END;
-
- VAR screen : ^bildschirm;
- s_mem : bildschirm;
- regs : registers;
-
- PROCEDURE Farbe (att : byte);
- PROCEDURE Escape;
- PROCEDURE GetCode (VAR code: integer);
- PROCEDURE Beep;
- PROCEDURE c_off;
- PROCEDURE c_on;
- PROCEDURE Wrtxy (x,y: byte; s: s80);
- PROCEDURE Farbexy (x,y,attr: byte);
- PROCEDURE Upper (var s: s25);
- PROCEDURE ReadStr(x,y: byte; VAR s: s25; VAR neu: boolean);
- FUNCTION Kleiner (x,y: word) : word;
- PROCEDURE Rahmen (x1,y1,x2,y2,art:integer;
- strich,schatten:boolean);
- PROCEDURE Hilfe;
-
- IMPLEMENTATION
-
- PROCEDURE Farbe (att : byte);
- BEGIN textattr := att; END;
-
- PROCEDURE Escape;
- VAR ch: char;
- BEGIN REPEAT ch := readkey; UNTIL ch = #27; END;
-
- PROCEDURE GetCode (VAR code: integer);
- VAR ch : char;
- BEGIN
- ch := readkey;
- IF ch = #0 Then code := (ord(readkey)+1000)
- ELSE code := ord(ch);
- END;
-
- PROCEDURE Beep;
- BEGIN sound (1000); delay (100); nosound; END;
-
- PROCEDURE c_off; { Cursor aus }
- BEGIN
- regs.ax := 1 shl 8; regs.cx := 48 shl 8;
- intr ($10,regs);
- END;
-
- PROCEDURE c_on; { Cursor ein }
- BEGIN
- regs.ax := 1 shl 8; regs.cx := 12 shl 8 + 13;
- intr($10,regs);
- END;
-
- PROCEDURE Wrtxy (x,y: byte; s: s80);
- VAR i: byte;
- BEGIN
- For i := 1 to length(s) DO
- screen^[y,x-1+i].ch := s[i];
- END;
-
- PROCEDURE Farbexy (x,y,attr: byte);
- BEGIN screen^[y,x].attr := attr; END;
-
- PROCEDURE Upper (var s: s25);
- VAR i: byte;
- BEGIN
- For i := 1 to length(s) DO BEGIN
- CASE s[i] of
- 'ä' : s[i] := 'Ä';
- 'ö' : s[i] := 'Ö';
- 'ü' : s[i] := 'Ü';
- ELSE s[i] := upcase(s[i]);
- END;
- END;
- END;
-
- PROCEDURE ReadStr(x,y: byte; VAR s: s25; VAR neu: boolean);
- VAR pos,i : byte; s0: s25; taste: integer;
- BEGIN
- s0 := s; pos := length(s)+1; gotoxy (x,y);
- IF s <> '' Then write (s);
- For i := length(s)+1 to 25 do write (chr(250));
- REPEAT
- gotoxy (x+pos-1,y); getcode (taste);
- CASE taste of
- 32..255:IF length(s) < 25 Then BEGIN
- insert (chr(taste),s,pos);
- write (copy (s,pos,25)); inc(pos);
- END;
- 8 : IF pos > 1 Then BEGIN
- dec(pos); delete (s,pos,1);
- write (chr(taste));
- write (copy(s,pos,25));
- For i := length(s) to 24 do write(chr(95));
- END ELSE beep;
- 1083 : IF pos <= length(s) Then BEGIN
- delete(s,pos,1); write (copy(s,pos,25));
- For i := length(s) to 24 do write(chr(95));
- END ELSE beep;
- 1075 : IF pos > 1 Then dec(pos) Else beep;
- 1077 : IF pos <= length(s) Then inc(pos) Else beep;
- 1071 : pos := 1;
- 1079 : pos := length(s)+1;
- 13,27 :;
- END;
- UNTIL (taste = 13) or (taste= 27);
- IF taste = 27 Then neu := false
- ELSE BEGIN
- upper (s);
- IF s = s0 Then neu := false ELSE neu := true;
- END;
- END;
-
- FUNCTION Kleiner (x,y: word) : word;
- BEGIN IF x < y Then kleiner := x ELSE kleiner := y; END;
-
- PROCEDURE Rahmen (x1,y1,x2,y2,art:integer;
- strich,schatten:boolean);
- VAR i: byte; k: string[9];
- BEGIN
- window (x1,y1,x2,y2); clrscr; window (1,1,80,25);
- CASE art of
- 1: k := '┌┐└┘─│├┤┬';
- 2: k := '╔╗╚╝═║╟╢╤';
- END;
- wrtxy (x1,y1,k[1]);
- For i := x1+1 to x2-1 DO wrtxy (i,y1,k[5]);
- wrtxy (x2,y1,k[2]); wrtxy (x1,y2,k[3]);
- For i := x1+1 to x2-1 DO wrtxy (i,y2,k[5]);
- wrtxy (x2,y2,k[4]);
- For i := y1+1 to y2-1 DO
- BEGIN wrtxy (x1,i,k[6]); wrtxy (x2,i,k[6]); END;
- IF strich Then BEGIN
- wrtxy (x1,y1+2,k[7]);
- For i := x1+1 to x2-1 DO wrtxy (i,y1+2,chr(196));
- wrtxy (x2,y1+2,k[8]); wrtxy (x2-4,y1,k[9]);
- wrtxy (x2-4,y1+1,chr(179)); wrtxy (x2-4,y1+2,chr(193));
- END;
- IF schatten Then
- BEGIN
- For i := x1+2 to x2+2 do screen^[y2+1,i].attr := 8;
- For i := y1+1 to y2 do screen^[i,x2+1].attr := 8;
- For i := y1+1 to y2 do screen^[i,x2+2].attr := 8;
- END;
- END;
-
- PROCEDURE Hilfe;
- LABEL bild1,bild2,bild3,bild4,ausgang;
- VAR taste: integer;
- BEGIN
- s_mem := screen^; farbe (hilfefarbe);
- rahmen (15,3,67,21,2,false,true);
- window (16,4,66,20); wrtxy (36,3,' Hilfe ');
- bild1:
- clrscr;
- wrtxy (17,4,'<E> Neue Karteikarte eingeben:');
- wrtxy (21,5,'Geben Sie zuerst das Stichwort ein, unter');
- wrtxy (21,6,'dem die Karte abgespeichert werden soll.');
- wrtxy (21,7,'Schließen Sie mit <Return> ab, und geben');
- wrtxy (21,8,'dann den Text ein.');
- wrtxy (21,9,'Die aktiven Editiertasten sind jeweils in');
- wrtxy (21,10,'der unteren Bildschirmzeile dargestellt.');
- wrtxy (21,11,'Mit <INS> kann der Insert-Modus aus- bzw.');
- wrtxy (21,12,'wieder eingeschaltet werden.');
- wrtxy (21,13,'<F2> speichert die Karte ab, <ESC> beendet');
- wrtxy (21,14,'ohne Abspeichern.');
- wrtxy (17,16,'<B> Karteikarte bearbeiten:');
- wrtxy (21,17,'Mit dieser Funktion kann eine vorhandene');
- wrtxy (21,18,'Karte bearbeitet werden.');
- wrtxy (21,19,'Es gelten dabei die gleichen Regeln, wie');
- wrtxy (21,20,'bei einer Neueingabe.');
- wrtxy (50,21,'═════ PgDn/ESC ');
- Getcode (taste);
- CASE taste of
- 1081 : goto bild2;
- 27 : goto ausgang;
- Else goto bild1;
- END;
- bild2:
- clrscr;
- wrtxy (17,5,'<L> Karteikarte löschen:');
- wrtxy (21,6,'Sie können entweder die vorderste Karte');
- wrtxy (21,7,'löschen oder alle markierten Karteikarten.');
- wrtxy (21,8,'Geben Sie auf die Nachfrage entweder A');
- wrtxy (21,9,'(Aktuelle Karte) oder M (Markierte Karten)');
- wrtxy (21,10,'ein. ESC bricht die Funktion ab.');
- wrtxy (17,12,'<M> Karteikarte markieren:');
- wrtxy (21,13,'Wenn Sie <M> betätigen, wird jeweils die');
- wrtxy (21,14,'aktuelle Karteikarte markiert');
- wrtxy (21,15,'(erkennbar an einem Häkchen "√").');
- wrtxy (21,16,'Die Markierungen sind wichtig für die');
- wrtxy (21,17,'Lösch- bzw. Druckfunktion.');
- wrtxy (50,21,' PgUp/PgDn/ESC ');
- Getcode (taste);
- CASE taste of
- 1081 : goto bild3;
- 1073 : goto bild1;
- 27 : goto ausgang;
- Else goto bild2;
- END;
- bild3:
- clrscr;
- wrtxy (17,4,'<S> Karteikarte suchen:');
- wrtxy (21,5,'Geben Sie dazu das Stichwort ein, unter');
- wrtxy (21,6,'dem Sie die Karte gespeichert haben.');
- wrtxy (21,7,'Die Karte, die dem gesuchten Begriff am');
- wrtxy (21,8,'nächsten kommt, wird dann angezeigt.');
- wrtxy (17,10,'<D> Neue Datei einlesen:');
- wrtxy (21,11,'Obwohl vom Programm her "Memo.dat" als');
- wrtxy (21,12,'Standarddatei vorgegeben ist, können Sie');
- wrtxy (21,13,'mit dieser Funktion eine neue Datei ein-');
- wrtxy (21,14,'lesen bzw. anlegen.');
- wrtxy (21,15,'Wenn Sie nur einen Dateinamen angeben, wird');
- wrtxy (21,16,'die Datei im aktuellen Verzeichnis angelegt');
- wrtxy (21,17,', sonst in dem genannten Verzeichnis.');
- wrtxy (21,18,'Geben Sie auf die Frage nach dem Dateinamen');
- wrtxy (21,19,'nur <Return> ein, wird die Funktion abge-');
- wrtxy (21,20,'brochen.');
- wrtxy (50,21,' PgUp/PgDn/ESC ');
- Getcode (taste);
- CASE taste of
- 1081 : goto bild4;
- 1073 : goto bild2;
- 27 : goto ausgang;
- Else goto bild3;
- END;
- bild4:
- clrscr;
- wrtxy (17,5,'<P> Karteikarten ausdrucken:');
- wrtxy (21,6,'Sie haben dabei die Wahl, entweder alle');
- wrtxy (21,7,'Karten oder nur die markierten zu drucken.');
- wrtxy (21,8,'Geben Sie auf Nachfrage entweder A (Alle)');
- wrtxy (21,9,'oder M (Markierte) ein.');
- wrtxy (21,10,'ESC bricht die Funktion ab.');
- wrtxy (17,12,'INS Mit <Insert> können Sie alle Kartei-');
- wrtxy (21,13,'karten markieren.');
- wrtxy (17,15,'DEL Alle Markierungen werden gelöscht.');
- wrtxy (17,17,'F10 beendet MEMO.');
- wrtxy (50,21,'═════ PgUp/ESC ');
- Getcode (taste);
- CASE taste of
- 1073 : goto bild3;
- 27 : goto ausgang;
- Else goto bild4;
- END;
- ausgang:
- window (1,1,80,25);
- screen^ := s_mem; farbe (grundfarbe);
- END;
-
- { --------------- Initialisierungsteil -------------- }
- { - ermittelt die Grafikkarte, und setzt die Farben - }
-
- BEGIN
- IF mem[$40:$49] = 7 Then
- BEGIN
- screen := ptr($B000,0);
- grundfarbe := 112;
- abfragefarbe := 15;
- buchstabenfarbe := 15;
- eingabefarbe := 15;
- kartenfarbe := 112;
- aktkartenfarbe := 112;
- hilfefarbe := 15;
- hintergrundfarbe:= 7;
- END
- ELSE screen := ptr($B800,0);
- END.