From 5410543f49e6ba562fdfe6af83c2d62a68e6ecbe Mon Sep 17 00:00:00 2001 From: Anton Krotov Date: Sun, 3 Oct 2021 17:44:42 +0000 Subject: [PATCH] CEDIT: minor fixes, refactoring git-svn-id: svn://kolibrios.org@9210 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/cedit/CEDIT | Bin 35196 -> 35162 bytes programs/develop/cedit/SRC/CEdit.ob07 | 100 ++- programs/develop/cedit/SRC/EditBox.ob07 | 39 +- programs/develop/cedit/SRC/KolibriOS.ob07 | 35 +- programs/develop/cedit/SRC/Languages.ob07 | 46 +- programs/develop/cedit/SRC/Text.ob07 | 791 +++++++++++----------- programs/develop/cedit/SRC/Timer.ob07 | 2 +- programs/develop/cedit/SRC/Utils.ob07 | 19 +- programs/develop/cedit/SRC/scroll.ob07 | 81 +-- 9 files changed, 568 insertions(+), 545 deletions(-) diff --git a/programs/develop/cedit/CEDIT b/programs/develop/cedit/CEDIT index 127596be7cbd2889daac11dbb12d64144fe068d2..390a3bd888da1f96844e7b611468003b962e377c 100644 GIT binary patch literal 35162 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 literal 35196 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 DELAY THEN + T.getPos(text, pos1.Y, pos1.X); mouse(x, y); T.mouse(text, x, y); - repaint + T.getPos(text, pos2.Y, pos2.X); + IF (pos1.X # pos2.X) OR (pos1.Y # pos2.Y) THEN + repaint + END END END; diff --git a/programs/develop/cedit/SRC/EditBox.ob07 b/programs/develop/cedit/SRC/EditBox.ob07 index a171125c3a..a04488c9a7 100644 --- a/programs/develop/cedit/SRC/EditBox.ob07 +++ b/programs/develop/cedit/SRC/EditBox.ob07 @@ -28,7 +28,7 @@ CONST TYPE - tEditBox* = POINTER TO RECORD + tEditBox* = RECORD width*, left*, top*, @@ -39,7 +39,7 @@ TYPE text_color*, max: INTEGER; text*: INTEGER; - mouse_variable: tEditBox; + mouse_variable: INTEGER; flags*: SET; size, @@ -110,28 +110,21 @@ BEGIN END setValue; -PROCEDURE create* (tlx, tly, width, max_chars: INTEGER; editbox_interlock: tEditBox): tEditBox; -VAR - new_textbox: tEditBox; - +PROCEDURE create* (tlx, tly, width, max_chars: INTEGER; VAR editbox: tEditBox); BEGIN - NEW(new_textbox); - - new_textbox.width := width; - new_textbox.left := tlx; - new_textbox.top := tly; - new_textbox.color := 0FFFFFFH; - new_textbox.shift_color := 06A9480H; - new_textbox.focus_border_color := 0; - new_textbox.blur_border_color := 06A9480H; - new_textbox.text_color := 0; - new_textbox.max := max_chars; - new_textbox.text := KOSAPI.malloc(max_chars + 2); - ASSERT(new_textbox.text # 0); - new_textbox.mouse_variable := editbox_interlock; - new_textbox.flags := {} - - RETURN new_textbox + editbox.width := width; + editbox.left := tlx; + editbox.top := tly; + editbox.color := 0FFFFFFH; + editbox.shift_color := 06A9480H; + editbox.focus_border_color := 0; + editbox.blur_border_color := 06A9480H; + editbox.text_color := 30000000H; + editbox.max := max_chars; + editbox.text := KOSAPI.malloc(max_chars + 2); + ASSERT(editbox.text # 0); + editbox.mouse_variable := 0; + editbox.flags := {14} END create; diff --git a/programs/develop/cedit/SRC/KolibriOS.ob07 b/programs/develop/cedit/SRC/KolibriOS.ob07 index bafabe0cad..89650664c3 100644 --- a/programs/develop/cedit/SRC/KolibriOS.ob07 +++ b/programs/develop/cedit/SRC/KolibriOS.ob07 @@ -46,7 +46,7 @@ END GetName; PROCEDURE CreateWindow* (x, y, w, h, color, style, hcolor, hstyle: INTEGER; htext: ARRAY OF CHAR); BEGIN - KOSAPI.sysfunc6(0, x * 65536 + w, y * 65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), SYSTEM.ADR(htext[0])) + KOSAPI.sysfunc6(0, x*65536 + w, y*65536 + h, color + LSL(style, 24), hcolor + LSL(hstyle, 24), SYSTEM.ADR(htext[0])) END CreateWindow; @@ -142,25 +142,25 @@ END SetWinSize; PROCEDURE DrawText* (x, y, color: INTEGER; text: ARRAY OF WCHAR); BEGIN - KOSAPI.sysfunc6(4, x * 65536 + y, color + LSL(0A0H, 24), SYSTEM.ADR(text[0]), 0, 0) + KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0A0H, 24), SYSTEM.ADR(text[0]), 0, 0) END DrawText; PROCEDURE DrawText69* (x, y, color: INTEGER; text: ARRAY OF CHAR); BEGIN - KOSAPI.sysfunc6(4, x * 65536 + y, color + LSL(080H, 24), SYSTEM.ADR(text[0]), 0, 0) + KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(080H, 24), SYSTEM.ADR(text[0]), 0, 0) END DrawText69; PROCEDURE DrawText866* (x, y, color: INTEGER; text: ARRAY OF CHAR); BEGIN - KOSAPI.sysfunc6(4, x * 65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, winColor) + KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, winColor) END DrawText866; PROCEDURE DrawText866bk* (x, y, color, bkColor: INTEGER; text: ARRAY OF CHAR); BEGIN - KOSAPI.sysfunc6(4, x * 65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, bkColor) + KOSAPI.sysfunc6(4, x*65536 + y, color + LSL(0D0H, 24), SYSTEM.ADR(text[0]), 0, bkColor) END DrawText866bk; @@ -233,7 +233,14 @@ END ExitID; PROCEDURE CreateThread* (proc: INTEGER; stack: ARRAY OF INTEGER): INTEGER; - RETURN KOSAPI.sysfunc4(51, 1, proc, SYSTEM.ADR(stack[LEN(stack) - 2])) +VAR + tid: INTEGER; +BEGIN + tid := KOSAPI.sysfunc4(51, 1, proc, SYSTEM.ADR(stack[LEN(stack) - 2])); + IF tid = -1 THEN + tid := 0 + END + RETURN tid END CreateThread; @@ -323,18 +330,12 @@ BEGIN END SetIPC; -PROCEDURE SendIPC* (tid, msg: INTEGER); +PROCEDURE SendIPC* (tid: INTEGER; msg: ARRAY OF INTEGER); BEGIN - KOSAPI.sysfunc5(60, 2, tid, SYSTEM.ADR(msg), SYSTEM.SIZE(INTEGER)) + KOSAPI.sysfunc5(60, 2, tid, SYSTEM.ADR(msg[0]), SYSTEM.SIZE(INTEGER)*LEN(msg)) END SendIPC; -PROCEDURE PutPixel* (x, y, color: INTEGER); -BEGIN - KOSAPI.sysfunc4(1, x, y, color) -END PutPixel; - - PROCEDURE GetSystemColors*; VAR buf: ARRAY 10 OF INTEGER; @@ -384,4 +385,10 @@ BEGIN END mouse; +PROCEDURE SetCaption* (text: ARRAY OF CHAR); +BEGIN + KOSAPI.sysfunc4(71, 2, SYSTEM.ADR(text[0]), 0) +END SetCaption; + + END KolibriOS. \ No newline at end of file diff --git a/programs/develop/cedit/SRC/Languages.ob07 b/programs/develop/cedit/SRC/Languages.ob07 index f11a55f32e..ca5337dd71 100644 --- a/programs/develop/cedit/SRC/Languages.ob07 +++ b/programs/develop/cedit/SRC/Languages.ob07 @@ -19,7 +19,7 @@ MODULE Languages; -IMPORT Lines; +IMPORT Lines, Utils; CONST @@ -49,6 +49,8 @@ VAR currentLang: INTEGER; + fileExt: ARRAY 11 OF RECORD ext: ARRAY 8 OF CHAR; lang: INTEGER END; + PROCEDURE isCS* (lang: INTEGER): BOOLEAN; RETURN lang IN csLang @@ -395,6 +397,36 @@ BEGIN END setCurLang; +PROCEDURE getLang* (ext: ARRAY OF CHAR): INTEGER; +VAR + i: INTEGER; +BEGIN + i := 0; + WHILE (i < LEN(fileExt)) & (fileExt[i].ext # ext) DO + INC(i) + END; + IF i < LEN(fileExt) THEN + i := fileExt[i].lang + ELSE + i := langText + END + RETURN i +END getLang; + + +PROCEDURE getExt* (lang: INTEGER; VAR ext: ARRAY OF CHAR); +VAR + i: INTEGER; +BEGIN + i := 0; + WHILE fileExt[i].lang # lang DO + INC(i) + END; + COPY(fileExt[i].ext, ext); + Utils.lowcase(ext) +END getExt; + + PROCEDURE init* (getStr: procGetStr); BEGIN currentLang := langText; @@ -406,6 +438,18 @@ BEGIN loadKW(KW[langIni], Delim[langIni], getStr, "lang_Ini"); loadKW(KW[langFasm], Delim[langFasm], getStr, "lang_Fasm"); loadKW(KW[langJSON], Delim[langJSON], getStr, "lang_JSON"); + + fileExt[ 0].ext := "OB07"; fileExt[ 0].lang := langOberon; + fileExt[ 1].ext := "C"; fileExt[ 1].lang := langC; + fileExt[ 2].ext := "H"; fileExt[ 2].lang := langC; + fileExt[ 3].ext := "CPP"; fileExt[ 3].lang := langC; + fileExt[ 4].ext := "PAS"; fileExt[ 4].lang := langPascal; + fileExt[ 5].ext := "PP"; fileExt[ 5].lang := langPascal; + fileExt[ 6].ext := "ASM"; fileExt[ 6].lang := langFasm; + fileExt[ 7].ext := "LUA"; fileExt[ 7].lang := langLua; + fileExt[ 8].ext := "INI"; fileExt[ 8].lang := langIni; + fileExt[ 9].ext := "JSON"; fileExt[ 9].lang := langJSON; + fileExt[10].ext := "TXT"; fileExt[10].lang := langText; END init; diff --git a/programs/develop/cedit/SRC/Text.ob07 b/programs/develop/cedit/SRC/Text.ob07 index 47c1e744ef..5bbb27af12 100644 --- a/programs/develop/cedit/SRC/Text.ob07 +++ b/programs/develop/cedit/SRC/Text.ob07 @@ -46,8 +46,8 @@ CONST TYPE - tPoint = RECORD - X, Y: INTEGER + tPoint* = RECORD + X*, Y*: INTEGER END; pPoint = POINTER TO tPoint; @@ -67,22 +67,20 @@ TYPE scroll: tPoint; CurX: INTEGER; modified*: BOOLEAN; - edition*: tGuard; comments, numbers*, guard, search, cs, whole: BOOLEAN; curLine: tLine; - fileName*: RW.tFileName; lang*: INTEGER; - enc*: INTEGER; - eol*: INTEGER; + enc*, eol*: INTEGER; table: Search.IdxTable; foundList: List.tList; idxData: Search.tBuffer; foundSel: INTEGER; searchText: tString; chLog*: ChangeLog.tLog; - maxLength*: INTEGER + maxLength*: INTEGER; + fileName*: RW.tFileName END; tProcedure = PROCEDURE; @@ -104,34 +102,6 @@ VAR charWidth, charHeight: INTEGER; -PROCEDURE setName* (text: tText; name: RW.tFileName); -VAR - ext: RW.tFileName; -BEGIN - text.fileName := name; - U.getFileName(text.fileName, ext, "."); - U.upcase(ext); - IF ext = "OB07" THEN - text.lang := Lang.langOberon - ELSIF (ext = "C") OR (ext = "H") OR (ext = "CPP") THEN - text.lang := Lang.langC - ELSIF (ext = "PAS") OR (ext = "PP") THEN - text.lang := Lang.langPascal - ELSIF ext = "ASM" THEN - text.lang := Lang.langFasm - ELSIF ext = "LUA" THEN - text.lang := Lang.langLua - ELSIF ext = "INI" THEN - text.lang := Lang.langIni - ELSIF ext = "JSON" THEN - text.lang := Lang.langJSON - ELSE - text.lang := Lang.langText - END; - Lang.setCurLang(text.lang) -END setName; - - PROCEDURE setLang* (text: tText; lang: INTEGER); BEGIN text.lang := lang; @@ -140,6 +110,17 @@ BEGIN END setLang; +PROCEDURE setName* (text: tText; name: RW.tFileName); +VAR + ext: RW.tFileName; +BEGIN + text.fileName := name; + U.getFileName(name, ext, "."); + U.upcase(ext); + setLang(text, Lang.getLang(ext)) +END setName; + + PROCEDURE getPos* (text: tText; VAR x, y: INTEGER); BEGIN x := text.cursor.X + 1; @@ -422,387 +403,387 @@ BEGIN ELSIF (lang = Lang.langC) OR (lang = Lang.langJSON) THEN - IF depth = 0 THEN - IF c = "/" THEN - IF cond = 0 THEN - cond := 1 - ELSE - PrintLex(text, line, i - 1, n, y, colors.comment, backColor); - cond := 0; - i := n - END - ELSIF (c = "*") & (cond = 1) THEN - depth := 1; - INC(i); - PrintComment(text, line, depth, i, 2, y, backColor); - cond := 0 - ELSIF U.isLetter(c) OR (c = "_") OR (c = "'") OR (c = '"') THEN - k := i; - IF (c = "'") OR (c = '"') THEN - String(text, line, i, y, backColor); - ELSE - ident(text, i, i - ORD((lang = Lang.langC) & (i > 0) & (getChar(line, i - 1) = "#")), y, line, backColor, Lang.isCS(lang)) - END; - IF lang = Lang.langJSON THEN - WHILE Lines.isSpace(getChar(line, i + 1)) DO - INC(i) - END; - IF getChar(line, i + 1) = ":" THEN - PrintLex(text, line, k, i, y, colors.key1, backColor) + IF depth = 0 THEN + IF c = "/" THEN + IF cond = 0 THEN + cond := 1 + ELSE + PrintLex(text, line, i - 1, n, y, colors.comment, backColor); + cond := 0; + i := n END - END; - cond := 0 - ELSIF U.isDigit(c) THEN - k := i; - INC(i); - c := getChar(line, i); - IF c = "." THEN - DEC(i); - c := getChar(line, i) - END; - IF (cap(c) = "X") & (getChar(line, i - 1) = "0") THEN - REPEAT - INC(i); - c := getChar(line, i) - UNTIL ~U.isHex(cap(c)); - IF UL(c) THEN - INC(i) - END - ELSIF UL(c) THEN - INC(i) - ELSIF U.isDigit(c) THEN - REPEAT - INC(i) - UNTIL ~U.isDigit(getChar(line, i)); - c := getChar(line, i); - IF UL(c) THEN - INC(i) - ELSIF c = "." THEN - INC(i); - WHILE U.isDigit(getChar(line, i)) DO - INC(i) - END; - c := getChar(line, i); - IF cap(c) = "E" THEN - INC(i); - c := getChar(line, i); - IF (c = "+") OR (c = "-") THEN - INC(i) - END; - IF U.isDigit(getChar(line, i)) THEN - WHILE U.isDigit(getChar(line, i)) DO - INC(i) - END; - c := getChar(line, i); - IF FL(c) THEN - INC(i) - END - END - ELSIF FL(c) THEN - INC(i) - END - END - END; - DEC(i); - PrintLex(text, line, k, i, y, colors.num, backColor); - cond := 0 - ELSE - cond := 0 - END - ELSIF depth = 1 THEN - IF c = "*" THEN - cond := 1 - ELSIF (c = "/") & (cond = 1) THEN - cond := 0; - depth := 0 - ELSE - cond := 0 - END - END; + ELSIF (c = "*") & (cond = 1) THEN + depth := 1; + INC(i); + PrintComment(text, line, depth, i, 2, y, backColor); + cond := 0 + ELSIF U.isLetter(c) OR (c = "_") OR (c = "'") OR (c = '"') THEN + k := i; + IF (c = "'") OR (c = '"') THEN + String(text, line, i, y, backColor); + ELSE + ident(text, i, i - ORD((lang = Lang.langC) & (i > 0) & (getChar(line, i - 1) = "#")), y, line, backColor, Lang.isCS(lang)) + END; + IF lang = Lang.langJSON THEN + WHILE Lines.isSpace(getChar(line, i + 1)) DO + INC(i) + END; + IF getChar(line, i + 1) = ":" THEN + PrintLex(text, line, k, i, y, colors.key1, backColor) + END + END; + cond := 0 + ELSIF U.isDigit(c) THEN + k := i; + INC(i); + c := getChar(line, i); + IF c = "." THEN + DEC(i); + c := getChar(line, i) + END; + IF (cap(c) = "X") & (getChar(line, i - 1) = "0") THEN + REPEAT + INC(i); + c := getChar(line, i) + UNTIL ~U.isHex(cap(c)); + IF UL(c) THEN + INC(i) + END + ELSIF UL(c) THEN + INC(i) + ELSIF U.isDigit(c) THEN + REPEAT + INC(i) + UNTIL ~U.isDigit(getChar(line, i)); + c := getChar(line, i); + IF UL(c) THEN + INC(i) + ELSIF c = "." THEN + INC(i); + WHILE U.isDigit(getChar(line, i)) DO + INC(i) + END; + c := getChar(line, i); + IF cap(c) = "E" THEN + INC(i); + c := getChar(line, i); + IF (c = "+") OR (c = "-") THEN + INC(i) + END; + IF U.isDigit(getChar(line, i)) THEN + WHILE U.isDigit(getChar(line, i)) DO + INC(i) + END; + c := getChar(line, i); + IF FL(c) THEN + INC(i) + END + END + ELSIF FL(c) THEN + INC(i) + END + END + END; + DEC(i); + PrintLex(text, line, k, i, y, colors.num, backColor); + cond := 0 + ELSE + cond := 0 + END + ELSIF depth = 1 THEN + IF c = "*" THEN + cond := 1 + ELSIF (c = "/") & (cond = 1) THEN + cond := 0; + depth := 0 + ELSE + cond := 0 + END + END ELSIF lang = Lang.langOberon THEN - IF (depth = 0) & (c = "/") THEN - IF cond = 3 THEN - PrintLex(text, line, i - 1, n, y, colors.comment, backColor); - cond := 0; - i := n - ELSE - cond := 3 - END - ELSIF (depth = 0) & ((c = "'") OR (c = '"')) THEN - String(text, line, i, y, backColor); - cond := 0 - ELSIF (depth = 0) & U.isDigit(c) THEN - color := colors.num; - k := i; - INC(i); - WHILE U.isHex(getChar(line, i)) DO - INC(i) - END; - IF i <= n THEN - IF getChar(line, i) = "." THEN - INC(i); - IF getChar(line, i) = "." THEN - DEC(i) - END; - WHILE U.isDigit(getChar(line, i)) DO - INC(i) - END; - IF getChar(line, i) = "E" THEN - INC(i); - IF (getChar(line, i) = "+") OR (getChar(line, i) = "-") THEN - INC(i) - END; - WHILE U.isDigit(getChar(line, i)) DO - INC(i) - END - END - ELSIF getChar(line, i) = "H" THEN - INC(i) - ELSIF getChar(line, i) = "X" THEN - color := colors.string; - INC(i) - END - END; - DEC(i); - PrintLex(text, line, k, i, y, color, backColor); - cond := 0 - ELSIF (depth = 0) & (U.isLetter(c) OR (c = "_")) THEN - ident(text, i, i, y, line, backColor, Lang.isCS(lang)); - cond := 0 - ELSIF c = "(" THEN - cond := 1 - ELSIF c = "*" THEN - IF cond = 1 THEN - INC(depth); - INC(i); - PrintComment(text, line, depth, i, 2, y, backColor); - cond := 0 - ELSE - cond := 2 - END - ELSIF c = ")" THEN - IF cond = 2 THEN - IF depth > 0 THEN - DEC(depth) - END - END; - cond := 0 - ELSE - cond := 0 - END + IF (depth = 0) & (c = "/") THEN + IF cond = 3 THEN + PrintLex(text, line, i - 1, n, y, colors.comment, backColor); + cond := 0; + i := n + ELSE + cond := 3 + END + ELSIF (depth = 0) & ((c = "'") OR (c = '"')) THEN + String(text, line, i, y, backColor); + cond := 0 + ELSIF (depth = 0) & U.isDigit(c) THEN + color := colors.num; + k := i; + INC(i); + WHILE U.isHex(getChar(line, i)) DO + INC(i) + END; + IF i <= n THEN + IF getChar(line, i) = "." THEN + INC(i); + IF getChar(line, i) = "." THEN + DEC(i) + END; + WHILE U.isDigit(getChar(line, i)) DO + INC(i) + END; + IF getChar(line, i) = "E" THEN + INC(i); + IF (getChar(line, i) = "+") OR (getChar(line, i) = "-") THEN + INC(i) + END; + WHILE U.isDigit(getChar(line, i)) DO + INC(i) + END + END + ELSIF getChar(line, i) = "H" THEN + INC(i) + ELSIF getChar(line, i) = "X" THEN + color := colors.string; + INC(i) + END + END; + DEC(i); + PrintLex(text, line, k, i, y, color, backColor); + cond := 0 + ELSIF (depth = 0) & (U.isLetter(c) OR (c = "_")) THEN + ident(text, i, i, y, line, backColor, Lang.isCS(lang)); + cond := 0 + ELSIF c = "(" THEN + cond := 1 + ELSIF c = "*" THEN + IF cond = 1 THEN + INC(depth); + INC(i); + PrintComment(text, line, depth, i, 2, y, backColor); + cond := 0 + ELSE + cond := 2 + END + ELSIF c = ")" THEN + IF cond = 2 THEN + IF depth > 0 THEN + DEC(depth) + END + END; + cond := 0 + ELSE + cond := 0 + END ELSIF lang = Lang.langLua THEN - IF depth = 0 THEN - IF c = "-" THEN - IF cond = 1 THEN - IF Lang.LuaLong(line, i + 1) >= 0 THEN - depth := Lang.LuaLong(line, i + 1)*2 + 1; - INC(i); - PrintComment(text, line, depth, i, 2, y, backColor) - ELSE - PrintLex(text, line, i - 1, n, y, colors.comment, backColor); - i := n - END; - cond := 0 - ELSE - cond := 1 - END - ELSIF c = "[" THEN - cond := 0; - k := Lang.LuaLong(line, i); - IF k >= 0 THEN - depth := (k + 1)*2; - INC(i, 2); - PrintComment(text, line, depth, i, 2, y, backColor); - cond := 0 - END - ELSIF (c = "'") OR (c = '"') THEN - String(text, line, i, y, backColor); - cond := 0 - ELSIF U.isDigit(c) THEN - k := i; - IF (c = "0") & (cap(getChar(line, i + 1)) = "X") THEN - isDgt := U.isHex; - hex := TRUE; - INC(i, 2) - ELSE - isDgt := U.isDigit; - hex := FALSE - END; - WHILE isDgt(cap(getChar(line, i))) DO - INC(i) - END; - IF getChar(line, i) = "." THEN - INC(i); - IF getChar(line, i) = "." THEN - DEC(i) - END; - WHILE isDgt(cap(getChar(line, i))) DO - INC(i) - END - END; - IF (cap(getChar(line, i)) = "E") OR hex & (cap(getChar(line, i)) = "P") THEN - INC(i); - IF (getChar(line, i) = "-") OR (getChar(line, i) = "+") THEN - INC(i) - END; - WHILE isDgt(cap(getChar(line, i))) DO - INC(i) - END - END; - DEC(i); - PrintLex(text, line, k, i, y, colors.num, backColor); - cond := 0 - ELSIF U.isLetter(c) OR (c = "_") THEN - ident(text, i, i, y, line, backColor, Lang.isCS(lang)); - cond := 0 - ELSE - cond := 0 - END + IF depth = 0 THEN + IF c = "-" THEN + IF cond = 1 THEN + IF Lang.LuaLong(line, i + 1) >= 0 THEN + depth := Lang.LuaLong(line, i + 1)*2 + 1; + INC(i); + PrintComment(text, line, depth, i, 2, y, backColor) + ELSE + PrintLex(text, line, i - 1, n, y, colors.comment, backColor); + i := n + END; + cond := 0 + ELSE + cond := 1 + END + ELSIF c = "[" THEN + cond := 0; + k := Lang.LuaLong(line, i); + IF k >= 0 THEN + depth := (k + 1)*2; + INC(i, 2); + PrintComment(text, line, depth, i, 2, y, backColor); + cond := 0 + END + ELSIF (c = "'") OR (c = '"') THEN + String(text, line, i, y, backColor); + cond := 0 + ELSIF U.isDigit(c) THEN + k := i; + IF (c = "0") & (cap(getChar(line, i + 1)) = "X") THEN + isDgt := U.isHex; + hex := TRUE; + INC(i, 2) + ELSE + isDgt := U.isDigit; + hex := FALSE + END; + WHILE isDgt(cap(getChar(line, i))) DO + INC(i) + END; + IF getChar(line, i) = "." THEN + INC(i); + IF getChar(line, i) = "." THEN + DEC(i) + END; + WHILE isDgt(cap(getChar(line, i))) DO + INC(i) + END + END; + IF (cap(getChar(line, i)) = "E") OR hex & (cap(getChar(line, i)) = "P") THEN + INC(i); + IF (getChar(line, i) = "-") OR (getChar(line, i) = "+") THEN + INC(i) + END; + WHILE isDgt(cap(getChar(line, i))) DO + INC(i) + END + END; + DEC(i); + PrintLex(text, line, k, i, y, colors.num, backColor); + cond := 0 + ELSIF U.isLetter(c) OR (c = "_") THEN + ident(text, i, i, y, line, backColor, Lang.isCS(lang)); + cond := 0 + ELSE + cond := 0 + END - ELSIF depth > 0 THEN - IF (cond = 0) & (c = "]") THEN - cond := 1 - ELSIF (cond >= 1) & (c = "=") THEN - INC(cond) - ELSIF (cond >= 1) & (c = "]") & (cond * 2 - depth MOD 2 = depth) THEN - depth := 0; - cond := 0 - ELSE - cond := 0 - END - END + ELSIF depth > 0 THEN + IF (cond = 0) & (c = "]") THEN + cond := 1 + ELSIF (cond >= 1) & (c = "=") THEN + INC(cond) + ELSIF (cond >= 1) & (c = "]") & (cond * 2 - depth MOD 2 = depth) THEN + depth := 0; + cond := 0 + ELSE + cond := 0 + END + END ELSIF lang = Lang.langPascal THEN - IF depth = 0 THEN - IF c = "(" THEN - cond := 1 - ELSIF (c = "*") & (cond = 1) THEN - depth := 2; - INC(i); - PrintComment(text, line, depth, i, 2, y, backColor); - cond := 0 - ELSIF c = "/" THEN - IF cond = 2 THEN - PrintLex(text, line, i - 1, n, y, colors.comment, backColor); - cond := 0; - i := n - ELSE - cond := 2 - END - ELSIF c = "'" THEN - String(text, line, i, y, backColor); - cond := 0 - ELSIF c = "{" THEN - IF getChar(line, i + 1) = "$" THEN - depth := 3 - ELSE - depth := 1 - END; - INC(i); - PrintComment(text, line, depth, i, 1, y, backColor); - cond := 0 - ELSIF c = "#" THEN - k := i; - INC(i); - WHILE U.isDigit(getChar(line, i)) DO - INC(i) - END; - DEC(i); - PrintLex(text, line, k, i, y, colors.string, backColor); - cond := 0 - ELSIF c = "$" THEN - IF (i > 0 ) & (getChar(line, i - 1) = "#") THEN - color := colors.string - ELSE - color := colors.num - END; - k := i; - INC(i); - WHILE U.isHex(cap(getChar(line, i))) DO - INC(i) - END; - DEC(i); - PrintLex(text, line, k, i, y, color, backColor); - cond := 0 - ELSIF U.isDigit(c) THEN - k := i; - WHILE U.isDigit(getChar(line, i)) DO - INC(i) - END; - IF getChar(line, i) = "." THEN - INC(i); - IF getChar(line, i) = "." THEN - DEC(i) - END; - WHILE U.isDigit(getChar(line, i)) DO - INC(i) - END; - IF cap(getChar(line, i)) = "E" THEN - INC(i); - IF (getChar(line, i) = "-") OR (getChar(line, i) = "+") THEN - INC(i) - END; - WHILE U.isDigit(getChar(line, i)) DO - INC(i) - END - END - END; - DEC(i); - PrintLex(text, line, k, i, y, colors.num, backColor); - cond := 0 - ELSIF (U.isLetter(c) OR (c = "_")) THEN - ident(text, i, i, y, line, backColor, Lang.isCS(lang)); - cond := 0 - ELSE - cond := 0 - END - ELSIF depth IN {1, 3} THEN - IF c = "}" THEN - depth := 0 - END - ELSIF depth = 2 THEN - IF c = "*" THEN - cond := 1 - ELSIF (c = ")") & (cond = 1) THEN - depth := 0; - cond := 0 - ELSE - cond := 0 - END - END + IF depth = 0 THEN + IF c = "(" THEN + cond := 1 + ELSIF (c = "*") & (cond = 1) THEN + depth := 2; + INC(i); + PrintComment(text, line, depth, i, 2, y, backColor); + cond := 0 + ELSIF c = "/" THEN + IF cond = 2 THEN + PrintLex(text, line, i - 1, n, y, colors.comment, backColor); + cond := 0; + i := n + ELSE + cond := 2 + END + ELSIF c = "'" THEN + String(text, line, i, y, backColor); + cond := 0 + ELSIF c = "{" THEN + IF getChar(line, i + 1) = "$" THEN + depth := 3 + ELSE + depth := 1 + END; + INC(i); + PrintComment(text, line, depth, i, 1, y, backColor); + cond := 0 + ELSIF c = "#" THEN + k := i; + INC(i); + WHILE U.isDigit(getChar(line, i)) DO + INC(i) + END; + DEC(i); + PrintLex(text, line, k, i, y, colors.string, backColor); + cond := 0 + ELSIF c = "$" THEN + IF (i > 0 ) & (getChar(line, i - 1) = "#") THEN + color := colors.string + ELSE + color := colors.num + END; + k := i; + INC(i); + WHILE U.isHex(cap(getChar(line, i))) DO + INC(i) + END; + DEC(i); + PrintLex(text, line, k, i, y, color, backColor); + cond := 0 + ELSIF U.isDigit(c) THEN + k := i; + WHILE U.isDigit(getChar(line, i)) DO + INC(i) + END; + IF getChar(line, i) = "." THEN + INC(i); + IF getChar(line, i) = "." THEN + DEC(i) + END; + WHILE U.isDigit(getChar(line, i)) DO + INC(i) + END; + IF cap(getChar(line, i)) = "E" THEN + INC(i); + IF (getChar(line, i) = "-") OR (getChar(line, i) = "+") THEN + INC(i) + END; + WHILE U.isDigit(getChar(line, i)) DO + INC(i) + END + END + END; + DEC(i); + PrintLex(text, line, k, i, y, colors.num, backColor); + cond := 0 + ELSIF (U.isLetter(c) OR (c = "_")) THEN + ident(text, i, i, y, line, backColor, Lang.isCS(lang)); + cond := 0 + ELSE + cond := 0 + END + ELSIF depth IN {1, 3} THEN + IF c = "}" THEN + depth := 0 + END + ELSIF depth = 2 THEN + IF c = "*" THEN + cond := 1 + ELSIF (c = ")") & (cond = 1) THEN + depth := 0; + cond := 0 + ELSE + cond := 0 + END + END ELSIF lang = Lang.langIni THEN - IF depth = 0 THEN - IF (c = ";") OR (c = "#") THEN - PrintLex(text, line, i, n, y, colors.comment, backColor); - i := n - ELSIF c = '"' THEN - String(text, line, i, y, backColor) - ELSIF c = "[" THEN - depth := 1; - INC(i); - PrintComment(text, line, depth, i, 1, y, backColor) - ELSIF U.isDigit(c) THEN - k := i; - WHILE U.isDigit(getChar(line, i)) DO - INC(i) - END; - DEC(i); - PrintLex(text, line, k, i, y, colors.num, backColor) - ELSIF (U.isLetter(c) OR (c = "_")) THEN - ident(text, i, i, y, line, backColor, Lang.isCS(lang)) - END - ELSIF depth = 1 THEN - IF c = "]" THEN - depth := 0 - END - END + IF depth = 0 THEN + IF (c = ";") OR (c = "#") THEN + PrintLex(text, line, i, n, y, colors.comment, backColor); + i := n + ELSIF c = '"' THEN + String(text, line, i, y, backColor) + ELSIF c = "[" THEN + depth := 1; + INC(i); + PrintComment(text, line, depth, i, 1, y, backColor) + ELSIF U.isDigit(c) THEN + k := i; + WHILE U.isDigit(getChar(line, i)) DO + INC(i) + END; + DEC(i); + PrintLex(text, line, k, i, y, colors.num, backColor) + ELSIF (U.isLetter(c) OR (c = "_")) THEN + ident(text, i, i, y, line, backColor, Lang.isCS(lang)) + END + ELSIF depth = 1 THEN + IF c = "]" THEN + depth := 0 + END + END END; INC(i) @@ -2089,7 +2070,7 @@ BEGIN line := getLine(text, n); firstLine := line; cnt := 0; - WHILE (line # NIL) & (cnt <= textsize.Y) DO + WHILE (line # NIL) & (cnt < textsize.Y) DO backColor := colors.back; IF (line = text.curLine) & ~selected(text) THEN G.SetColor(canvas, colors.curline); @@ -2122,7 +2103,7 @@ BEGIN line := firstLine; SetColor(colors.numtext, colors.numback); y := padding.top + inter DIV 2; - n := MIN(text.scroll.Y + textsize.Y + 1, text.count); + n := MIN(text.scroll.Y + textsize.Y, text.count); FOR i := text.scroll.Y + 1 TO n DO IF text.numbers THEN IF (i MOD 10 = 0) OR (i - 1 = text.cursor.Y) OR line.label THEN @@ -2147,7 +2128,7 @@ BEGIN cnt := 0; line := firstLine; lastLine := line; - WHILE (line # NIL) & (cnt <= textsize.Y) DO + WHILE (line # NIL) & (cnt < textsize.Y) DO lastLine := line; NextLine(line); INC(cnt) diff --git a/programs/develop/cedit/SRC/Timer.ob07 b/programs/develop/cedit/SRC/Timer.ob07 index 125db9d5bf..b64b400744 100644 --- a/programs/develop/cedit/SRC/Timer.ob07 +++ b/programs/develop/cedit/SRC/Timer.ob07 @@ -50,7 +50,7 @@ BEGIN IF enabled THEN DEC(cnt, step); IF cnt <= 0 THEN - KOSAPI.sysfunc5(60, 2, mainTID, SYSTEM.ADR(msg[0]), msg[1]); + K.SendIPC(mainTID, msg); cnt := time END END diff --git a/programs/develop/cedit/SRC/Utils.ob07 b/programs/develop/cedit/SRC/Utils.ob07 index e4580d494b..72ea393f31 100644 --- a/programs/develop/cedit/SRC/Utils.ob07 +++ b/programs/develop/cedit/SRC/Utils.ob07 @@ -200,7 +200,7 @@ BEGIN IF cap8(s[i]) THEN END; DEC(i) - END; + END END upcase; @@ -240,6 +240,20 @@ BEGIN END low; +PROCEDURE lowcase* (VAR s: ARRAY OF CHAR); +VAR + i: INTEGER; +BEGIN + i := LENGTH(s) - 1; + WHILE i >= 0 DO + IF ("A" <= s[i]) & (s[i] <= "Z") THEN + s[i] := CHR(ORD(s[i]) + 32) + END; + DEC(i) + END +END lowcase; + + PROCEDURE str2int* (s: ARRAY OF WCHAR; VAR val: INTEGER): BOOLEAN; VAR i, temp: INTEGER; @@ -262,8 +276,7 @@ BEGIN IF isDigit(s[i]) THEN REPEAT - temp := temp * 10; - temp := temp + (ORD(s[i]) - ORD("0")); + temp := temp*10 + ORD(s[i]) - ORD("0"); INC(i) UNTIL ~isDigit(s[i]); IF neg THEN diff --git a/programs/develop/cedit/SRC/scroll.ob07 b/programs/develop/cedit/SRC/scroll.ob07 index 7eba6766cf..07ce6f21ea 100644 --- a/programs/develop/cedit/SRC/scroll.ob07 +++ b/programs/develop/cedit/SRC/scroll.ob07 @@ -296,21 +296,23 @@ PROCEDURE MouseMove (VAR scroll: tScroll; x, y: INTEGER); VAR c: INTEGER; BEGIN - IF scroll.Slider # -1 THEN - IF scroll.vertical THEN - c := y - scroll.top - ELSE - c := x - scroll.left - END; - setPos(scroll, scroll.pos0 + c - scroll.Slider); - paint(scroll) - END + IF scroll.vertical THEN + c := y - scroll.top + ELSE + c := x - scroll.left + END; + setPos(scroll, scroll.pos0 + c - scroll.Slider); + paint(scroll) END MouseMove; PROCEDURE SendIPC; +VAR + msg: ARRAY 2 OF INTEGER; BEGIN - K.SendIPC(K.ThreadID(), ScrollIPC) + msg[0] := ScrollIPC; + msg[1] := 8; + K.SendIPC(K.ThreadID(), msg) END SendIPC; @@ -342,33 +344,31 @@ PROCEDURE MouseDown (VAR scroll: tScroll; x, y: INTEGER); VAR c, size: INTEGER; BEGIN - IF ~scroll.mouse THEN - DEC(x, scroll.left); - DEC(y, scroll.top); - scroll.mouse := TRUE; - IF U.between(1, x, scroll.width - 2) & U.between(1, y, scroll.height - 2) THEN - IF scroll.vertical THEN - c := y; - size := scroll.height - ELSE - c := x; - size := scroll.width - END; - IF U.between(scroll.btnSize + scroll.pos - 1, c, scroll.btnSize + scroll.pos + scroll.sliderSize - 1) THEN - scroll.pos0 := scroll.pos; - scroll.Slider := c - ELSIF U.between(0, c, scroll.btnSize - 1) THEN - scroll.Dec := TRUE; - SendIPC - ELSIF U.between(size - scroll.btnSize, c, size - 1) THEN - scroll.Inc := TRUE; - SendIPC - ELSE - setPos(scroll, c - scroll.btnSize - scroll.sliderSize DIV 2); - scroll.pos0 := scroll.pos; - scroll.Slider := c; - paint(scroll) - END + DEC(x, scroll.left); + DEC(y, scroll.top); + scroll.mouse := TRUE; + IF U.between(1, x, scroll.width - 2) & U.between(1, y, scroll.height - 2) THEN + IF scroll.vertical THEN + c := y; + size := scroll.height + ELSE + c := x; + size := scroll.width + END; + IF U.between(scroll.btnSize + scroll.pos - 1, c, scroll.btnSize + scroll.pos + scroll.sliderSize - 1) THEN + scroll.pos0 := scroll.pos; + scroll.Slider := c + ELSIF U.between(0, c, scroll.btnSize - 1) THEN + scroll.Dec := TRUE; + SendIPC + ELSIF U.between(size - scroll.btnSize, c, size - 1) THEN + scroll.Inc := TRUE; + SendIPC + ELSE + setPos(scroll, c - scroll.btnSize - scroll.sliderSize DIV 2); + scroll.pos0 := scroll.pos; + scroll.Slider := c; + paint(scroll) END END END MouseDown; @@ -381,8 +381,11 @@ VAR BEGIN K.mouse(msState, x, y); IF 0 IN msState THEN - MouseDown(scroll, x, y); - MouseMove(scroll, x, y) + IF ~scroll.mouse THEN + MouseDown(scroll, x, y) + ELSIF scroll.Slider # -1 THEN + MouseMove(scroll, x, y) + END ELSIF scroll.mouse THEN MouseUp(scroll); paint(scroll)