|
@@ -1239,8 +1239,207 @@ BEGIN
|
|
|
END
|
|
END
|
|
|
END EdMove;
|
|
END EdMove;
|
|
|
|
|
|
|
|
|
|
+(* --- syntax highlighting + keyword upcasing ---------------------------- *)
|
|
|
|
|
+
|
|
|
|
|
+PROCEDURE Eq (a, b : ARRAY OF CHAR) : BOOLEAN;
|
|
|
|
|
+ VAR i : INTEGER;
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ i := 0;
|
|
|
|
|
+ WHILE (i <= VAL(INTEGER, HIGH(a))) AND (i <= VAL(INTEGER, HIGH(b))) AND
|
|
|
|
|
+ (a[i] # 0C) AND (b[i] # 0C) AND (a[i] = b[i]) DO
|
|
|
|
|
+ i := i + 1
|
|
|
|
|
+ END;
|
|
|
|
|
+ RETURN a[i] = b[i]
|
|
|
|
|
+END Eq;
|
|
|
|
|
+
|
|
|
|
|
+PROCEDURE IsIdentChar (c : CHAR) : BOOLEAN;
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ RETURN ((c >= 'A') AND (c <= 'Z')) OR ((c >= 'a') AND (c <= 'z')) OR
|
|
|
|
|
+ ((c >= '0') AND (c <= '9')) OR (c = '_')
|
|
|
|
|
+END IsIdentChar;
|
|
|
|
|
+
|
|
|
|
|
+PROCEDURE UpcaseCopy (VAR dest : ARRAY OF CHAR; s : ARRAY OF CHAR);
|
|
|
|
|
+ VAR i : INTEGER; c : CHAR;
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ i := 0;
|
|
|
|
|
+ WHILE (i <= VAL(INTEGER, HIGH(s))) AND (i < VAL(INTEGER, HIGH(dest))) AND (s[i] # 0C) DO
|
|
|
|
|
+ c := s[i];
|
|
|
|
|
+ IF (c >= 'a') AND (c <= 'z') THEN c := CHR(ORD(c) - 32) END;
|
|
|
|
|
+ dest[i] := c;
|
|
|
|
|
+ i := i + 1
|
|
|
|
|
+ END;
|
|
|
|
|
+ dest[i] := 0C
|
|
|
|
|
+END UpcaseCopy;
|
|
|
|
|
+
|
|
|
|
|
+PROCEDURE IsKeywordM2 (w : ARRAY OF CHAR) : BOOLEAN;
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ RETURN Eq(w,"AND") OR Eq(w,"ARRAY") OR Eq(w,"BEGIN") OR Eq(w,"BY") OR
|
|
|
|
|
+ Eq(w,"CASE") OR Eq(w,"CONST") OR Eq(w,"DEFINITION") OR Eq(w,"DIV") OR
|
|
|
|
|
+ Eq(w,"DO") OR Eq(w,"ELSE") OR Eq(w,"ELSIF") OR Eq(w,"END") OR
|
|
|
|
|
+ Eq(w,"EXIT") OR Eq(w,"EXPORT") OR Eq(w,"FOR") OR Eq(w,"FROM") OR
|
|
|
|
|
+ Eq(w,"IF") OR Eq(w,"IMPLEMENTATION") OR Eq(w,"IMPORT") OR Eq(w,"IN") OR
|
|
|
|
|
+ Eq(w,"LOOP") OR Eq(w,"MOD") OR Eq(w,"MODULE") OR Eq(w,"NOT") OR
|
|
|
|
|
+ Eq(w,"OF") OR Eq(w,"OR") OR Eq(w,"POINTER") OR Eq(w,"PROCEDURE") OR
|
|
|
|
|
+ Eq(w,"QUALIFIED") OR Eq(w,"RECORD") OR Eq(w,"REPEAT") OR Eq(w,"RETURN") OR
|
|
|
|
|
+ Eq(w,"SET") OR Eq(w,"THEN") OR Eq(w,"TO") OR Eq(w,"TYPE") OR
|
|
|
|
|
+ Eq(w,"UNTIL") OR Eq(w,"VAR") OR Eq(w,"WHILE") OR Eq(w,"WITH")
|
|
|
|
|
+END IsKeywordM2;
|
|
|
|
|
+
|
|
|
|
|
+PROCEDURE IsKeywordOberon (w : ARRAY OF CHAR) : BOOLEAN;
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ RETURN Eq(w,"ARRAY") OR Eq(w,"BEGIN") OR Eq(w,"BY") OR Eq(w,"CASE") OR
|
|
|
|
|
+ Eq(w,"CONST") OR Eq(w,"DIV") OR Eq(w,"DO") OR Eq(w,"ELSE") OR
|
|
|
|
|
+ Eq(w,"ELSIF") OR Eq(w,"END") OR Eq(w,"FALSE") OR Eq(w,"FOR") OR
|
|
|
|
|
+ Eq(w,"IF") OR Eq(w,"IMPORT") OR Eq(w,"IN") OR Eq(w,"IS") OR
|
|
|
|
|
+ Eq(w,"MOD") OR Eq(w,"MODULE") OR Eq(w,"NIL") OR Eq(w,"OF") OR
|
|
|
|
|
+ Eq(w,"OR") OR Eq(w,"POINTER") OR Eq(w,"PROCEDURE") OR Eq(w,"RECORD") OR
|
|
|
|
|
+ Eq(w,"REPEAT") OR Eq(w,"RETURN") OR Eq(w,"THEN") OR Eq(w,"TO") OR
|
|
|
|
|
+ Eq(w,"TRUE") OR Eq(w,"TYPE") OR Eq(w,"UNTIL") OR Eq(w,"VAR") OR
|
|
|
|
|
+ Eq(w,"WHILE") OR Eq(w,"WITH")
|
|
|
|
|
+END IsKeywordOberon;
|
|
|
|
|
+
|
|
|
|
|
+PROCEDURE IsKeywordPascal (w : ARRAY OF CHAR) : BOOLEAN;
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ RETURN Eq(w,"AND") OR Eq(w,"ARRAY") OR Eq(w,"BEGIN") OR Eq(w,"CASE") OR
|
|
|
|
|
+ Eq(w,"CONST") OR Eq(w,"DIV") OR Eq(w,"DO") OR Eq(w,"DOWNTO") OR
|
|
|
|
|
+ Eq(w,"ELSE") OR Eq(w,"END") OR Eq(w,"FILE") OR Eq(w,"FOR") OR
|
|
|
|
|
+ Eq(w,"FUNCTION") OR Eq(w,"GOTO") OR Eq(w,"IF") OR Eq(w,"IN") OR
|
|
|
|
|
+ Eq(w,"LABEL") OR Eq(w,"MOD") OR Eq(w,"NIL") OR Eq(w,"NOT") OR
|
|
|
|
|
+ Eq(w,"OF") OR Eq(w,"OR") OR Eq(w,"PACKED") OR Eq(w,"PROCEDURE") OR
|
|
|
|
|
+ Eq(w,"PROGRAM") OR Eq(w,"RECORD") OR Eq(w,"REPEAT") OR Eq(w,"SET") OR
|
|
|
|
|
+ Eq(w,"THEN") OR Eq(w,"TO") OR Eq(w,"TYPE") OR Eq(w,"UNTIL") OR
|
|
|
|
|
+ Eq(w,"VAR") OR Eq(w,"WHILE") OR Eq(w,"WITH")
|
|
|
|
|
+END IsKeywordPascal;
|
|
|
|
|
+
|
|
|
|
|
+PROCEDURE IsKeywordLang (lang : INTEGER; w : ARRAY OF CHAR) : BOOLEAN;
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ IF lang = langModula2 THEN RETURN IsKeywordM2(w) END;
|
|
|
|
|
+ IF lang = langOberon THEN RETURN IsKeywordOberon(w) END;
|
|
|
|
|
+ IF lang = langPascal THEN RETURN IsKeywordPascal(w) END;
|
|
|
|
|
+ RETURN FALSE
|
|
|
|
|
+END IsKeywordLang;
|
|
|
|
|
+
|
|
|
|
|
+PROCEDURE HiPut (v : ViewPtr; c : INTEGER; ch : CHAR; attr : Attr;
|
|
|
|
|
+ x0, y0, w : INTEGER; draw : BOOLEAN);
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ IF draw AND (c >= v^.ed^.left) AND (c - v^.ed^.left < w) THEN
|
|
|
|
|
+ DrawCh(x0 + (c - v^.ed^.left), y0, VAL(CARDINAL, ORD(ch)), attr)
|
|
|
|
|
+ END
|
|
|
|
|
+END HiPut;
|
|
|
|
|
+
|
|
|
|
|
+PROCEDURE DrawLineHi (v : ViewPtr; ln : INTEGER; x0, y0, w : INTEGER;
|
|
|
|
|
+ draw : BOOLEAN; VAR state : INTEGER);
|
|
|
|
|
+ VAR ed : EditorDataPtr; lang, i, j, n : INTEGER; ch, q : CHAR; done : BOOLEAN;
|
|
|
|
|
+ kw, str, com, num : Attr; word : ARRAY [0..63] OF CHAR;
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ ed := v^.ed;
|
|
|
|
|
+ lang := ed^.lang;
|
|
|
|
|
+ kw := A(White, Cyan, FALSE);
|
|
|
|
|
+ str := A(Red, Cyan, FALSE);
|
|
|
|
|
+ com := A(DarkGray, Cyan, FALSE);
|
|
|
|
|
+ num := A(Red, Cyan, FALSE);
|
|
|
|
|
+ i := 0;
|
|
|
|
|
+ WHILE i < ed^.len[ln] DO
|
|
|
|
|
+ ch := ed^.line[ln][i];
|
|
|
|
|
+ IF state > 0 THEN
|
|
|
|
|
+ (* inside a (* ... *) comment (nestable for M2/Oberon) *)
|
|
|
|
|
+ IF (ch = '(') AND (i + 1 < ed^.len[ln]) AND
|
|
|
|
|
+ (ed^.line[ln][i + 1] = '*') THEN
|
|
|
|
|
+ HiPut(v, i, ch, com, x0, y0, w, draw);
|
|
|
|
|
+ HiPut(v, i + 1, '*', com, x0, y0, w, draw);
|
|
|
|
|
+ state := state + 1; i := i + 2
|
|
|
|
|
+ ELSIF (ch = '*') AND (i + 1 < ed^.len[ln]) AND
|
|
|
|
|
+ (ed^.line[ln][i + 1] = ')') THEN
|
|
|
|
|
+ HiPut(v, i, ch, com, x0, y0, w, draw);
|
|
|
|
|
+ HiPut(v, i + 1, ')', com, x0, y0, w, draw);
|
|
|
|
|
+ state := state - 1; i := i + 2
|
|
|
|
|
+ ELSE
|
|
|
|
|
+ HiPut(v, i, ch, com, x0, y0, w, draw); i := i + 1
|
|
|
|
|
+ END
|
|
|
|
|
+ ELSIF state < 0 THEN
|
|
|
|
|
+ (* inside a Pascal { ... } comment *)
|
|
|
|
|
+ HiPut(v, i, ch, com, x0, y0, w, draw);
|
|
|
|
|
+ IF ch = '}' THEN state := 0 END;
|
|
|
|
|
+ i := i + 1
|
|
|
|
|
+ ELSIF (ch = '(') AND (i + 1 < ed^.len[ln]) AND
|
|
|
|
|
+ (ed^.line[ln][i + 1] = '*') THEN
|
|
|
|
|
+ HiPut(v, i, '(', com, x0, y0, w, draw);
|
|
|
|
|
+ HiPut(v, i + 1, '*', com, x0, y0, w, draw);
|
|
|
|
|
+ state := 1; i := i + 2
|
|
|
|
|
+ ELSIF (lang = langPascal) AND (ch = '{') THEN
|
|
|
|
|
+ HiPut(v, i, ch, com, x0, y0, w, draw);
|
|
|
|
|
+ state := -1; i := i + 1
|
|
|
|
|
+ ELSIF (ch = '/') AND (i + 1 < ed^.len[ln]) AND
|
|
|
|
|
+ (ed^.line[ln][i + 1] = '/') AND (lang # langNone) THEN
|
|
|
|
|
+ WHILE i < ed^.len[ln] DO
|
|
|
|
|
+ HiPut(v, i, ed^.line[ln][i], com, x0, y0, w, draw); i := i + 1
|
|
|
|
|
+ END
|
|
|
|
|
+ ELSIF (ch = CHR(39)) OR (ch = CHR(34)) THEN
|
|
|
|
|
+ q := ch;
|
|
|
|
|
+ HiPut(v, i, ch, str, x0, y0, w, draw); i := i + 1;
|
|
|
|
|
+ done := FALSE;
|
|
|
|
|
+ WHILE (i < ed^.len[ln]) AND (NOT done) DO
|
|
|
|
|
+ HiPut(v, i, ed^.line[ln][i], str, x0, y0, w, draw);
|
|
|
|
|
+ IF ed^.line[ln][i] = q THEN
|
|
|
|
|
+ IF (i + 1 < ed^.len[ln]) AND (ed^.line[ln][i + 1] = q) THEN
|
|
|
|
|
+ i := i + 1;
|
|
|
|
|
+ HiPut(v, i, q, str, x0, y0, w, draw)
|
|
|
|
|
+ ELSE
|
|
|
|
|
+ done := TRUE
|
|
|
|
|
+ END
|
|
|
|
|
+ END;
|
|
|
|
|
+ i := i + 1
|
|
|
|
|
+ END
|
|
|
|
|
+ ELSIF (ch >= '0') AND (ch <= '9') THEN
|
|
|
|
|
+ WHILE (i < ed^.len[ln]) AND (ed^.line[ln][i] >= '0') AND
|
|
|
|
|
+ (ed^.line[ln][i] <= '9') DO
|
|
|
|
|
+ HiPut(v, i, ed^.line[ln][i], num, x0, y0, w, draw); i := i + 1
|
|
|
|
|
+ END
|
|
|
|
|
+ ELSIF IsIdentChar(ch) THEN
|
|
|
|
|
+ n := 0;
|
|
|
|
|
+ WHILE (i < ed^.len[ln]) AND IsIdentChar(ed^.line[ln][i]) AND (n < 63) DO
|
|
|
|
|
+ word[n] := ed^.line[ln][i];
|
|
|
|
|
+ n := n + 1; i := i + 1
|
|
|
|
|
+ END;
|
|
|
|
|
+ word[n] := 0C;
|
|
|
|
|
+ UpcaseCopy(word, word);
|
|
|
|
|
+ FOR j := i - n TO i - 1 DO
|
|
|
|
|
+ IF IsKeywordLang(lang, word) THEN
|
|
|
|
|
+ HiPut(v, j, ed^.line[ln][j], kw, x0, y0, w, draw)
|
|
|
|
|
+ ELSE
|
|
|
|
|
+ HiPut(v, j, ed^.line[ln][j], A(Black, Cyan, FALSE), x0, y0, w, draw)
|
|
|
|
|
+ END
|
|
|
|
|
+ END
|
|
|
|
|
+ ELSE
|
|
|
|
|
+ HiPut(v, i, ch, A(Black, Cyan, FALSE), x0, y0, w, draw);
|
|
|
|
|
+ i := i + 1
|
|
|
|
|
+ END
|
|
|
|
|
+ END
|
|
|
|
|
+END DrawLineHi;
|
|
|
|
|
+
|
|
|
|
|
+PROCEDURE EdUpcaseWord (data : EditorDataPtr);
|
|
|
|
|
+ VAR ln, i, n, k : INTEGER; w, up : ARRAY [0..63] OF CHAR;
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ IF (data = NIL) OR ((data^.lang # langModula2) AND (data^.lang # langOberon)) THEN
|
|
|
|
|
+ RETURN
|
|
|
|
|
+ END;
|
|
|
|
|
+ EdEnsure(data);
|
|
|
|
|
+ ln := data^.cy;
|
|
|
|
|
+ i := data^.cx;
|
|
|
|
|
+ WHILE (i > 0) AND IsIdentChar(data^.line[ln][i - 1]) DO i := i - 1 END;
|
|
|
|
|
+ n := data^.cx - i;
|
|
|
|
|
+ IF (n <= 0) OR (n > 63) THEN RETURN END;
|
|
|
|
|
+ FOR k := 0 TO n - 1 DO w[k] := data^.line[ln][i + k] END;
|
|
|
|
|
+ w[n] := 0C;
|
|
|
|
|
+ UpcaseCopy(up, w);
|
|
|
|
|
+ IF IsKeywordLang(data^.lang, up) AND (NOT Eq(w, up)) THEN
|
|
|
|
|
+ FOR k := 0 TO n - 1 DO data^.line[ln][i + k] := up[k] END;
|
|
|
|
|
+ data^.dirty := TRUE
|
|
|
|
|
+ END
|
|
|
|
|
+END EdUpcaseWord;
|
|
|
|
|
+
|
|
|
PROCEDURE DrawEditor (v : ViewPtr);
|
|
PROCEDURE DrawEditor (v : ViewPtr);
|
|
|
- VAR x0, y0, w, h, vis, r, ln, c : INTEGER;
|
|
|
|
|
|
|
+ VAR x0, y0, w, h, vis, r, ln, c, hstate, l : INTEGER;
|
|
|
ed : EditorDataPtr; s, t : ARRAY [0..95] OF CHAR;
|
|
ed : EditorDataPtr; s, t : ARRAY [0..95] OF CHAR;
|
|
|
BEGIN
|
|
BEGIN
|
|
|
DrawBox(v^.rect, SingleFrame, A(White, Cyan, FALSE));
|
|
DrawBox(v^.rect, SingleFrame, A(White, Cyan, FALSE));
|
|
@@ -1258,16 +1457,26 @@ BEGIN
|
|
|
IF ed^.cx >= ed^.left + w THEN ed^.left := ed^.cx - w + 1 END;
|
|
IF ed^.cx >= ed^.left + w THEN ed^.left := ed^.cx - w + 1 END;
|
|
|
IF ed^.top < 0 THEN ed^.top := 0 END;
|
|
IF ed^.top < 0 THEN ed^.top := 0 END;
|
|
|
IF ed^.left < 0 THEN ed^.left := 0 END;
|
|
IF ed^.left < 0 THEN ed^.left := 0 END;
|
|
|
|
|
+ hstate := 0;
|
|
|
|
|
+ IF ed^.lang # langNone THEN
|
|
|
|
|
+ FOR l := 0 TO ed^.top - 1 DO
|
|
|
|
|
+ IF l < ed^.count THEN DrawLineHi(v, l, x0, y0, w, FALSE, hstate) END
|
|
|
|
|
+ END
|
|
|
|
|
+ END;
|
|
|
FOR r := 0 TO vis - 1 DO
|
|
FOR r := 0 TO vis - 1 DO
|
|
|
Fill(x0, y0 + r, w, 1, VAL(CARDINAL, ORD(' ')), A(Black, Cyan, FALSE));
|
|
Fill(x0, y0 + r, w, 1, VAL(CARDINAL, ORD(' ')), A(Black, Cyan, FALSE));
|
|
|
ln := ed^.top + r;
|
|
ln := ed^.top + r;
|
|
|
IF ln < ed^.count THEN
|
|
IF ln < ed^.count THEN
|
|
|
- c := 0;
|
|
|
|
|
- WHILE (c < w) AND (ed^.left + c < ed^.len[ln]) DO
|
|
|
|
|
- DrawCh(x0 + c, y0 + r,
|
|
|
|
|
- VAL(CARDINAL, ORD(ed^.line[ln][ed^.left + c])),
|
|
|
|
|
- A(Black, Cyan, FALSE));
|
|
|
|
|
- c := c + 1
|
|
|
|
|
|
|
+ IF ed^.lang = langNone THEN
|
|
|
|
|
+ c := 0;
|
|
|
|
|
+ WHILE (c < w) AND (ed^.left + c < ed^.len[ln]) DO
|
|
|
|
|
+ DrawCh(x0 + c, y0 + r,
|
|
|
|
|
+ VAL(CARDINAL, ORD(ed^.line[ln][ed^.left + c])),
|
|
|
|
|
+ A(Black, Cyan, FALSE));
|
|
|
|
|
+ c := c + 1
|
|
|
|
|
+ END
|
|
|
|
|
+ ELSE
|
|
|
|
|
+ DrawLineHi(v, ln, x0, y0 + r, w, TRUE, hstate)
|
|
|
END
|
|
END
|
|
|
END
|
|
END
|
|
|
END;
|
|
END;
|
|
@@ -1296,7 +1505,7 @@ BEGIN
|
|
|
EdClrLine(data^.line[0]);
|
|
EdClrLine(data^.line[0]);
|
|
|
data^.len[0] := 0;
|
|
data^.len[0] := 0;
|
|
|
data^.cx := 0; data^.cy := 0; data^.top := 0; data^.left := 0;
|
|
data^.cx := 0; data^.cy := 0; data^.top := 0; data^.left := 0;
|
|
|
- data^.ins := TRUE; data^.dirty := FALSE
|
|
|
|
|
|
|
+ data^.ins := TRUE; data^.dirty := FALSE; data^.lang := langNone
|
|
|
END
|
|
END
|
|
|
END EditorInit;
|
|
END EditorInit;
|
|
|
|
|
|
|
@@ -1305,7 +1514,11 @@ PROCEDURE EditorAddLine (data : EditorDataPtr; s : ARRAY OF CHAR);
|
|
|
BEGIN
|
|
BEGIN
|
|
|
IF data = NIL THEN RETURN END;
|
|
IF data = NIL THEN RETURN END;
|
|
|
IF data^.count >= EDMAXLINES THEN RETURN END;
|
|
IF data^.count >= EDMAXLINES THEN RETURN END;
|
|
|
- i := data^.count;
|
|
|
|
|
|
|
+ IF (data^.count = 1) AND (data^.len[0] = 0) THEN
|
|
|
|
|
+ i := 0; data^.count := 0
|
|
|
|
|
+ ELSE
|
|
|
|
|
+ i := data^.count
|
|
|
|
|
+ END;
|
|
|
n := TextLen(s);
|
|
n := TextLen(s);
|
|
|
IF n > EDMAXCOL - 1 THEN n := EDMAXCOL - 1 END;
|
|
IF n > EDMAXCOL - 1 THEN n := EDMAXCOL - 1 END;
|
|
|
CopyText(data^.line[i], s);
|
|
CopyText(data^.line[i], s);
|
|
@@ -1370,6 +1583,11 @@ BEGIN
|
|
|
RETURN data^.dirty
|
|
RETURN data^.dirty
|
|
|
END EditorDirty;
|
|
END EditorDirty;
|
|
|
|
|
|
|
|
|
|
+PROCEDURE EditorSetLanguage (data : EditorDataPtr; lang : INTEGER);
|
|
|
|
|
+BEGIN
|
|
|
|
|
+ IF data # NIL THEN data^.lang := lang END
|
|
|
|
|
+END EditorSetLanguage;
|
|
|
|
|
+
|
|
|
PROCEDURE DrawView(v : ViewPtr);
|
|
PROCEDURE DrawView(v : ViewPtr);
|
|
|
VAR c : ViewPtr;
|
|
VAR c : ViewPtr;
|
|
|
BEGIN
|
|
BEGIN
|
|
@@ -1773,12 +1991,19 @@ BEGIN
|
|
|
END
|
|
END
|
|
|
ELSIF v^.kind = VEditor THEN
|
|
ELSIF v^.kind = VEditor THEN
|
|
|
IF v^.ed # NIL THEN
|
|
IF v^.ed # NIL THEN
|
|
|
- IF e.key = kChar THEN EdInsertChar(v^.ed, e.ch)
|
|
|
|
|
- ELSIF e.key = kEnter THEN EdNewLine(v^.ed)
|
|
|
|
|
|
|
+ IF e.key = kChar THEN
|
|
|
|
|
+ IF NOT IsIdentChar(CHR(e.ch)) THEN EdUpcaseWord(v^.ed) END;
|
|
|
|
|
+ EdInsertChar(v^.ed, e.ch)
|
|
|
|
|
+ ELSIF e.key = kSpace THEN
|
|
|
|
|
+ EdUpcaseWord(v^.ed);
|
|
|
|
|
+ EdInsertChar(v^.ed, VAL(CARDINAL, ORD(' ')))
|
|
|
|
|
+ ELSIF e.key = kEnter THEN
|
|
|
|
|
+ EdUpcaseWord(v^.ed); EdNewLine(v^.ed)
|
|
|
ELSIF e.key = kBack THEN EdBackspace(v^.ed)
|
|
ELSIF e.key = kBack THEN EdBackspace(v^.ed)
|
|
|
ELSIF e.key = kDel THEN EdDelete(v^.ed)
|
|
ELSIF e.key = kDel THEN EdDelete(v^.ed)
|
|
|
ELSIF e.key = kIns THEN v^.ed^.ins := NOT v^.ed^.ins
|
|
ELSIF e.key = kIns THEN v^.ed^.ins := NOT v^.ed^.ins
|
|
|
ELSIF e.key = kTab THEN
|
|
ELSIF e.key = kTab THEN
|
|
|
|
|
+ EdUpcaseWord(v^.ed);
|
|
|
EdInsertChar(v^.ed, VAL(CARDINAL, ORD(' ')));
|
|
EdInsertChar(v^.ed, VAL(CARDINAL, ORD(' ')));
|
|
|
WHILE (v^.ed^.cx MOD 4) # 0 DO
|
|
WHILE (v^.ed^.cx MOD 4) # 0 DO
|
|
|
EdInsertChar(v^.ed, VAL(CARDINAL, ORD(' ')))
|
|
EdInsertChar(v^.ed, VAL(CARDINAL, ORD(' ')))
|