Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 9902 → Rev 9903

/programs/develop/cedit/CEDIT
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/programs/develop/cedit/SRC/API.ob07
File deleted
\ No newline at end of file
/programs/develop/cedit/SRC/RTL.ob07
File deleted
\ No newline at end of file
/programs/develop/cedit/SRC/CEdit.ob07
28,10 → 28,10
RW, Ini, EB := EditBox, Tabs, Toolbar, SB := StatusBar;
 
CONST
HEADER = "CEdit (22-feb-2023)";
HEADER = "CEdit (24-feb-2023)";
 
ShellFilter = "";
EditFilter = "SH|INC|TXT|ASM|OB07|C|CPP|H|PAS|PP|LUA|INI|JSON";
EditFilter = "sh|inc|txt|asm|ob07|c|cpp|h|pas|pp|lua|ini|json";
 
fontWidth = K.fontWidth;
fontHeight = K.fontHeight;
745,8 → 745,8
BEGIN
n1 := name1;
n2 := name2;
U.upcase(n1);
U.upcase(n2)
U.lowcase8(n1);
U.lowcase8(n2)
RETURN n1 = n2
END nameEq;
 
/programs/develop/cedit/SRC/ChangeLog.ob07
21,6 → 21,10
 
IMPORT List, Lines, API, SYSTEM;
 
CONST
boolItemSize = 8;
fillMap = {0..boolItemSize-1};
 
TYPE
tIntItem = POINTER TO RECORD (List.tItem)
cnt: INTEGER;
28,9 → 32,13
END;
 
tBoolItem = POINTER TO RECORD (List.tItem)
map: SET;
data: ARRAY boolItemSize OF
RECORD
line: Lines.tLine;
adr: INTEGER;
val, save: BOOLEAN
END
END;
 
tUntypedPtr = POINTER TO RECORD (List.tItem)
114,8 → 122,12
SYSTEM.PUT(item(tIntItem).adr[i], item(tIntItem).val[i])
END
ELSIF item IS tBoolItem THEN
SYSTEM.PUT(item(tBoolItem).adr, item(tBoolItem).val)
FOR i := 0 TO boolItemSize - 1 DO
IF i IN item(tBoolItem).map THEN
SYSTEM.PUT(item(tBoolItem).data[i].adr, item(tBoolItem).data[i].val)
END
END
END
END redo;
 
 
139,7 → 151,7
item: List.tItem;
boolItem: tBoolItem;
cur: List.tItem;
del: BOOLEAN;
i: INTEGER;
BEGIN
item := CL.Log.first;
WHILE item # NIL DO
154,12 → 166,15
WHILE cur # NIL DO
IF cur IS tBoolItem THEN
boolItem := cur(tBoolItem);
del := boolItem.save & boolItem.line.modified
ELSE
del := FALSE
FOR i := 0 TO boolItemSize - 1 DO
IF (i IN boolItem.map) & boolItem.data[i].save &
boolItem.data[i].line.modified THEN
EXCL(boolItem.map, i)
END
END
END;
cur := cur.prev;
IF del THEN
IF boolItem.map = {} THEN
List.delete(CL.Log, boolItem);
DISPOSE(boolItem)
END
192,38 → 207,24
END changeWord;
 
 
PROCEDURE changeBool (line: Lines.tLine; VAR v: BOOLEAN; x: BOOLEAN);
VAR
item: tBoolItem;
BEGIN
NEW(item);
item.line := line;
item.adr := SYSTEM.ADR(v);
item.val := x;
item.save := FALSE;
IF ~CL.isLast THEN
clear(CL.guard)
END;
List.append(CL.Log, item)
END changeBool;
 
 
PROCEDURE delSaved*;
VAR
boolItem: tBoolItem;
cur: List.tItem;
del: BOOLEAN;
i: INTEGER;
BEGIN
cur := CL.guard.next;
WHILE cur # NIL DO
IF cur IS tBoolItem THEN
boolItem := cur(tBoolItem);
del := boolItem.save
ELSE
del := FALSE
FOR i := 0 TO boolItemSize - 1 DO
IF (i IN boolItem.map) & boolItem.data[i].save THEN
EXCL(boolItem.map, i)
END
END
END;
cur := cur.next;
IF del THEN
IF boolItem.map = {} THEN
List.delete(CL.Log, boolItem);
DISPOSE(boolItem)
END
235,19 → 236,21
VAR
boolItem: tBoolItem;
cur: List.tItem;
del: BOOLEAN;
i: INTEGER;
BEGIN
cur := CL.guard.prev;
WHILE (cur # NIL) & ~(cur IS tGuard) DO
IF cur IS tBoolItem THEN
boolItem := cur(tBoolItem);
del := boolItem.save
ELSE
del := FALSE
FOR i := 0 TO boolItemSize - 1 DO
IF (i IN boolItem.map) & boolItem.data[i].save THEN
SYSTEM.PUT(boolItem.data[i].adr, ~boolItem.data[i].val);
EXCL(boolItem.map, i)
END
END
END;
cur := cur.prev;
IF del THEN
SYSTEM.PUT(boolItem.adr, ~boolItem.val);
IF boolItem.map = {} THEN
List.delete(CL.Log, boolItem);
DISPOSE(boolItem)
END
255,16 → 258,61
END delCurSaved;
 
 
PROCEDURE changeBool2 (line: Lines.tLine; VAR v: BOOLEAN; x: BOOLEAN);
PROCEDURE _changeBool (fn2: BOOLEAN; line: Lines.tLine; VAR v: BOOLEAN; x: BOOLEAN);
VAR
item: tBoolItem;
cur: List.tItem;
i: INTEGER;
BEGIN
IF fn2 THEN
cur := CL.guard.prev
ELSE
IF ~CL.isLast THEN
clear(CL.guard)
END;
cur := CL.Log.last
END;
 
WHILE (cur # NIL) & ~(cur IS tGuard) &
(~(cur IS tBoolItem) OR (cur(tBoolItem).map = fillMap)) DO
cur := cur.prev
END;
IF (cur IS tBoolItem) & (cur(tBoolItem).map # fillMap) THEN
item := cur(tBoolItem)
ELSE
NEW(item);
item.line := line;
item.adr := SYSTEM.ADR(v);
item.val := x;
item.save := TRUE;
item.map := {};
IF fn2 THEN
List.insert(CL.Log, CL.guard.prev, item)
ELSE
List.append(CL.Log, item)
END
END;
 
i := 0;
WHILE i < boolItemSize DO
IF ~(i IN item.map) THEN
item.data[i].line := line;
item.data[i].adr := SYSTEM.ADR(v);
item.data[i].val := x;
item.data[i].save := fn2;
INCL(item.map, i);
i := boolItemSize
END;
INC(i)
END
END _changeBool;
 
 
PROCEDURE changeBool (line: Lines.tLine; VAR v: BOOLEAN; x: BOOLEAN);
BEGIN
_changeBool(FALSE, line, v, x)
END changeBool;
 
 
PROCEDURE changeBool2 (line: Lines.tLine; VAR v: BOOLEAN; x: BOOLEAN);
BEGIN
_changeBool(TRUE, line, v, x)
END changeBool2;
 
 
/programs/develop/cedit/SRC/Languages.ob07
141,7 → 141,7
REPEAT
INC(pos);
c := Lines.getChar(line, pos);
IF Utils.cap(c) THEN END;
IF Utils.upper(c) THEN END;
IF Utils.isHex(c) THEN
INC(k)
ELSE
166,7 → 166,7
REPEAT
INC(pos);
c := Lines.getChar(line, pos);
IF Utils.cap(c) THEN END;
IF Utils.upper(c) THEN END;
IF Utils.isHex(c) THEN
INC(k)
ELSE
457,7 → 457,7
key[2] := CHR(ORD("1") + i);
getStr(lang_name, key, s);
IF ~(lang IN csLang) THEN
Utils.upcase(s)
Utils.lowcase8(s)
END;
IF lang = langOberon THEN
k := LENGTH(s);
465,7 → 465,7
FOR j := 0 TO k - 1 DO
s[j + k + 1] := s[j];
w := WCHR(ORD(s[j]));
IF Utils.low(w) THEN
IF Utils.lower(w) THEN
s[j + k + 1] := CHR(ORD(w) MOD 256)
END
END;
508,8 → 508,7
WHILE fileExt[i].lang # lang DO
INC(i)
END;
COPY(fileExt[i].ext, ext);
Utils.lowcase(ext)
COPY(fileExt[i].ext, ext)
END getExt;
 
 
525,17 → 524,17
loadKW(langFasm, KW[langFasm], Delim[langFasm], getStr, "lang_Fasm");
loadKW(langJSON, 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;
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;
 
 
/programs/develop/cedit/SRC/Search.ob07
22,6 → 22,8
IMPORT
CB := Clipboard, List, Utils, SYSTEM;
 
CONST
itemSize = 64;
 
TYPE
tBuffer* = CB.tBuffer;
29,7 → 31,8
tIdxTable = ARRAY 65536, 2 OF INTEGER;
 
tPos* = POINTER TO RECORD (List.tItem)
pos*: INTEGER
cnt*: INTEGER;
pos*: ARRAY itemSize OF INTEGER
END;
 
VAR
52,7 → 55,7
i := cnt;
WHILE i > 0 DO
SYSTEM.GET(pChar, c);
IF ~cs & Utils.cap(c) THEN
IF ~cs & Utils.lower(c) THEN
SYSTEM.PUT(pChar, c)
END;
INC(table[ORD(c), 1]);
94,6 → 97,24
END index;
 
 
PROCEDURE next* (VAR item: tPos; VAR i: INTEGER): INTEGER;
VAR
res: INTEGER;
BEGIN
IF (item # NIL) & (i >= item.cnt) THEN
item := item.next(tPos);
i := 0;
END;
IF (item # NIL ) & (i < item.cnt) THEN
res := item.pos[i];
INC(i)
ELSE
res := -1
END
RETURN res
END next;
 
 
PROCEDURE find* (text: tBuffer; s: ARRAY OF WCHAR; whole: BOOLEAN; list: List.tList);
VAR
k, pos, n, x, prev_item_pos: INTEGER;
122,9 → 143,14
END;
IF ~flag & (x >= prev_item_pos) THEN
prev_item_pos := x + n;
item := list.last(tPos);
IF (item = NIL) OR (item.cnt = itemSize) THEN
NEW(item);
item.pos := x;
item.cnt := 0;
List.append(list, item)
END;
item.pos[item.cnt] := x;
INC(item.cnt)
END
END;
INC(pos, SYSTEM.SIZE(INTEGER));
/programs/develop/cedit/SRC/Tabs.ob07
1,5 → 1,5
(*
Copyright 2021, 2022 Anton Krotov
Copyright 2021-2023 Anton Krotov
 
This file is part of CEdit.
 
31,12 → 31,14
curTabHeight = 26;
scrWidth = 15;
btnCloseColor* = 0EF999FH;
modifColor = 0FF0000H;
strLen = 30;
 
TYPE
 
tItem = POINTER TO RECORD (List.tItem)
 
val: RW.tFileName;
val: ARRAY strLen + 1 OF CHAR;
modified: BOOLEAN
 
END;
91,7 → 93,7
 
K.DrawText866bk(x + K.fontWidth + K.fontWidth DIV 2, y + (height - K.fontHeight) DIV 2, textColor, color, s);
IF modified THEN
K.DrawText866bk(x + K.fontWidth DIV 2, y + (height - K.fontHeight) DIV 2, textColor, color, "*")
K.DrawText866bk(x + K.fontWidth DIV 2, y + (height - K.fontHeight) DIV 2, modifColor, color, "*")
END;
K.CreateButton(id + ORD({30}) + btnID, x + 1, y - 1, width - 1, height - 1, 0, "");
left := x + width - btnCloseSize - 5;
184,14 → 186,30
END draw;
 
 
PROCEDURE setText (item: tItem; s: ARRAY OF CHAR);
VAR
i: INTEGER;
BEGIN
IF LENGTH(s) > strLen THEN
FOR i := 0 TO strLen - 4 DO
item.val[i] := s[i]
END;
item.val[strLen - 3] := 0X;
U.append8(item.val, "...")
ELSE
COPY(s, item.val)
END
END setText;
 
 
PROCEDURE add* (t: tTabs; s: ARRAY OF CHAR);
VAR
item: tItem;
BEGIN
NEW(item);
item.val := s;
setText(item, s);
item.modified := FALSE;
List.append(t.strings, item);
List.append(t.strings, item)
END add;
 
 
212,7 → 230,7
item: List.tItem;
BEGIN
item := List.getItem(t.strings, n);
item(tItem).val := s
setText(item(tItem), s)
END rename;
 
 
/programs/develop/cedit/SRC/Text.ob07
119,7 → 119,7
BEGIN
text.fileName := name;
U.getFileName(name, ext, ".");
U.upcase(ext);
U.lowcase8(ext);
setLang(text, Lang.getLang(ext))
END setName;
 
352,20 → 352,20
END PrintComment;
 
 
PROCEDURE cap (c: WCHAR): WCHAR;
PROCEDURE upper (c: WCHAR): WCHAR;
BEGIN
IF U.cap(c) THEN END
IF U.upper(c) THEN END
RETURN c
END cap;
END upper;
 
 
PROCEDURE UL (c: WCHAR): BOOLEAN;
RETURN (cap(c) = "U") OR (cap(c) = "L")
RETURN (upper(c) = "U") OR (upper(c) = "L")
END UL;
 
 
PROCEDURE FL (c: WCHAR): BOOLEAN;
RETURN (cap(c) = "F") OR (cap(c) = "L")
RETURN (upper(c) = "F") OR (upper(c) = "L")
END FL;
 
 
384,7 → 384,7
DEC(i);
lexLen := getString(line, first, i - first + 1, s);
IF ~cs THEN
U.upcase16(s)
U.lowcase(s)
END;
IF Lang.isKey(s, text.lang, 1) THEN
color := colors.key1
451,16 → 451,16
k := i;
INC(i);
c := Lines.getChar(line, i);
IF (cap(c) = "X") & (Lines.getChar(line, i - 1) = "0") THEN
IF (upper(c) = "X") & (Lines.getChar(line, i - 1) = "0") THEN
INC(i);
hex := TRUE
END;
 
WHILE U.isHex(cap(Lines.getChar(line, i))) DO
WHILE U.isHex(upper(Lines.getChar(line, i))) DO
INC(i)
END;
 
IF (cap(Lines.getChar(line, i)) = "H") & ~hex THEN
IF (upper(Lines.getChar(line, i)) = "H") & ~hex THEN
INC(i)
END;
 
508,11 → 508,11
DEC(i);
c := Lines.getChar(line, i)
END;
IF (cap(c) = "X") & (Lines.getChar(line, i - 1) = "0") THEN
IF (upper(c) = "X") & (Lines.getChar(line, i - 1) = "0") THEN
REPEAT
INC(i);
c := Lines.getChar(line, i)
UNTIL ~U.isHex(cap(c));
UNTIL ~U.isHex(upper(c));
IF UL(c) THEN
INC(i)
END
531,7 → 531,7
INC(i)
END;
c := Lines.getChar(line, i);
IF cap(c) = "E" THEN
IF upper(c) = "E" THEN
INC(i);
c := Lines.getChar(line, i);
IF (c = "+") OR (c = "-") THEN
672,7 → 672,7
cond := 0
ELSIF U.isDigit(c) THEN
k := i;
IF (c = "0") & (cap(Lines.getChar(line, i + 1)) = "X") THEN
IF (c = "0") & (upper(Lines.getChar(line, i + 1)) = "X") THEN
isDgt := U.isHex;
hex := TRUE;
INC(i, 2)
680,7 → 680,7
isDgt := U.isDigit;
hex := FALSE
END;
WHILE isDgt(cap(Lines.getChar(line, i))) DO
WHILE isDgt(upper(Lines.getChar(line, i))) DO
INC(i)
END;
IF Lines.getChar(line, i) = "." THEN
688,16 → 688,16
IF Lines.getChar(line, i) = "." THEN
DEC(i)
END;
WHILE isDgt(cap(Lines.getChar(line, i))) DO
WHILE isDgt(upper(Lines.getChar(line, i))) DO
INC(i)
END
END;
IF (cap(Lines.getChar(line, i)) = "E") OR hex & (cap(Lines.getChar(line, i)) = "P") THEN
IF (upper(Lines.getChar(line, i)) = "E") OR hex & (upper(Lines.getChar(line, i)) = "P") THEN
INC(i);
IF (Lines.getChar(line, i) = "-") OR (Lines.getChar(line, i) = "+") THEN
INC(i)
END;
WHILE isDgt(cap(Lines.getChar(line, i))) DO
WHILE isDgt(upper(Lines.getChar(line, i))) DO
INC(i)
END
END;
771,7 → 771,7
END;
k := i;
INC(i);
WHILE U.isHex(cap(Lines.getChar(line, i))) DO
WHILE U.isHex(upper(Lines.getChar(line, i))) DO
INC(i)
END;
DEC(i);
790,7 → 790,7
WHILE U.isDigit(Lines.getChar(line, i)) DO
INC(i)
END;
IF cap(Lines.getChar(line, i)) = "E" THEN
IF upper(Lines.getChar(line, i)) = "E" THEN
INC(i);
IF (Lines.getChar(line, i) = "-") OR (Lines.getChar(line, i) = "+") THEN
INC(i)
906,7 → 906,7
text.cs := cs;
text.searchText := s;
IF ~cs THEN
U.upcase16(text.searchText)
U.lowcase(text.searchText)
END;
IF text.searchText # "" THEN
plainText := plain(text);
1787,9 → 1787,9
END;
 
IF upper THEN
func := U.cap
func := U.upper
ELSE
func := U.low
func := U.lower
END;
 
IF Lines.convert(line, i + 1, text.cursor.X - 1, func) THEN
1815,9 → 1815,9
cnt := selEnd.Y - selBeg.Y;
 
IF upper THEN
func := U.cap
func := U.upper
ELSE
func := U.low
func := U.lower
END;
 
IF cnt = 0 THEN
2293,13 → 2293,13
 
PROCEDURE draw* (text: tText);
VAR
y, n, cnt, i, x: INTEGER;
y, n, cnt, i, x, pos: INTEGER;
line, firstLine, lastLine: tLine;
selBeg, selEnd: tPoint;
s: ARRAY 12 OF WCHAR;
backColor, numWidth, xNum, wNum: INTEGER;
guard: tGuard;
p: Search.tPos;
guard: tGuard;
BEGIN
IF text.comments THEN
Comments(text)
2413,23 → 2413,26
ELSE
lastLine := getLine2(text, MIN(text.scroll.Y + textsize.Y + 1, text.count) - 1)
END;
 
i := 0;
p := text.foundList.first(Search.tPos);
WHILE p # NIL DO
pos := Search.next(p, i);
WHILE pos # -1 DO
y := padding.top + inter DIV 2;
IF text.smallMove THEN
y := y + charHeight*(text.cursor.Y - text.scroll.Y)
END;
IF (firstLine.pos <= p.pos) & (p.pos <= lastLine.pos + lastLine.length) THEN
IF (firstLine.pos <= pos) & (pos <= lastLine.pos + lastLine.length) THEN
line := firstLine;
WHILE (line.pos <= p.pos) & (line # lastLine) DO
WHILE (line.pos <= pos) & (line # lastLine) DO
NextLine(line);
INC(y, charHeight)
END;
IF (line # lastLine) & (line # firstLine) OR (line = lastLine) & (line.pos > p.pos) THEN
IF (line # lastLine) & (line # firstLine) OR (line = lastLine) & (line.pos > pos) THEN
PrevLine(line);
DEC(y, charHeight)
END;
x := (p.pos - line.pos - text.scroll.X)*charWidth + padding.left;
x := (pos - line.pos - text.scroll.X)*charWidth + padding.left;
n := LENGTH(text.searchText)*charWidth;
WHILE n > 0 DO
IF x >= padding.left THEN
2439,7 → 2442,7
DEC(n)
END
END;
p := p.next(Search.tPos)
pos := Search.next(p, i)
END
END;
 
2609,40 → 2612,41
PROCEDURE findNext* (text: tText; prev: BOOLEAN): BOOLEAN;
VAR
cursorPos, x, y, X, Y, Len: INTEGER;
p: Search.tPos;
line: tLine;
res: BOOLEAN;
pos, i, pos0: INTEGER;
p: Search.tPos;
BEGIN
X := text.cursor.X;
Y := text.cursor.Y;
text.cursor.X := MIN(text.cursor.X, text.curLine.length);
cursorPos := text.curLine.pos + text.cursor.X - ORD(prev) - ORD(~prev & (text.foundSel = 0));
pos0 := -1;
i := 0;
p := text.foundList.first(Search.tPos);
WHILE (p # NIL) & (p.pos <= cursorPos) DO
p := p.next(Search.tPos)
pos := Search.next(p, i);
WHILE (pos # -1) & (pos <= cursorPos) DO
pos0 := pos;
pos := Search.next(p, i)
END;
IF prev THEN
IF p = NIL THEN
p := text.foundList.last(Search.tPos)
ELSE
p := p.prev(Search.tPos)
END
pos := pos0
END;
res := p # NIL;
res := pos # -1;
IF res THEN
y := 0;
line := text.first(tLine);
WHILE (line.pos <= p.pos) & (line.next # NIL) DO
WHILE (line.pos <= pos) & (line.next # NIL) DO
NextLine(line);
INC(y)
END;
IF (line.next # NIL) OR (line.pos > p.pos) THEN
IF (line.next # NIL) OR (line.pos > pos) THEN
PrevLine(line);
DEC(y)
END;
resetSelect(text);
searchScroll(text, y);
x := p.pos - line.pos;
x := pos - line.pos;
Len := LENGTH(text.searchText);
IF x + Len > text.scroll.X + textsize.X THEN
text.scroll.X := MAX(x + Len - textsize.X + 3, 0)
2688,9 → 2692,9
 
PROCEDURE replaceAll* (text: tText; s: ARRAY OF WCHAR; n: INTEGER): INTEGER;
VAR
line: tLine;
y, k, d, pos, y0, i, c: INTEGER;
p: Search.tPos;
line: tLine;
y, k, d, pos, y0: INTEGER;
BEGIN
resetSelect(text);
SetPos(text, 0, 0);
2699,9 → 2703,11
y0 := -1;
k := 0;
d := LENGTH(s) - n;
c := 0;
i := 0;
p := text.foundList.first(Search.tPos);
WHILE p # NIL DO
pos := p.pos;
pos := Search.next(p, i);
WHILE pos # -1 DO
WHILE (line.pos <= pos) & (line.next # NIL) DO
NextLine(line);
INC(y)
2719,9 → 2725,10
SetPos(text, pos - line.pos + k, y);
text.foundSel := n;
replace(text, s, n);
p := p.next(Search.tPos)
INC(c);
pos := Search.next(p, i)
END
RETURN text.foundList.count
RETURN c
END replaceAll;
 
 
/programs/develop/cedit/SRC/Utils.ob07
1,5 → 1,5
(*
Copyright 2021, 2022 Anton Krotov
Copyright 2021-2023 Anton Krotov
 
This file is part of CEdit.
 
152,21 → 152,22
 
 
PROCEDURE isLetter* (ch: WCHAR): BOOLEAN;
RETURN ("a" <= ch) & (ch <= "z") OR ("A" <= ch) & (ch <= "Z")
RETURN ("a" <= ch) & (ch <= "z") OR ("A" <= ch) & (ch <= "Z") OR
(* cyrillic *)
(430X <= ch) & (ch <= 44FX) OR (410X <= ch) & (ch <= 42FX) OR
(ch = 491X) OR (ch = 490X) OR (450X <= ch) & (ch <= 45FX) OR
(400X <= ch) & (ch <= 40FX)
END isLetter;
 
 
PROCEDURE cap* (VAR ch: WCHAR): BOOLEAN;
PROCEDURE upper* (VAR ch: WCHAR): BOOLEAN;
VAR
res: BOOLEAN;
BEGIN
IF ("a" <= ch) & (ch <= "z") THEN
ch := WCHR(ORD(ch) - (ORD("z") - ORD("Z")));
res := TRUE
ELSIF (430H <= ORD(ch)) & (ORD(ch) <= 44FH) THEN
IF ("a" <= ch) & (ch <= "z") OR (430X <= ch) & (ch <= 44FX) THEN
ch := WCHR(ORD(ch) - 20H);
res := TRUE
ELSIF (450H <= ORD(ch)) & (ORD(ch) <= 45FH) THEN
ELSIF (450X <= ch) & (ch <= 45FX) THEN
ch := WCHR(ORD(ch) - 50H);
res := TRUE
ELSIF ch = 491X THEN
176,84 → 177,54
res := FALSE
END
RETURN res
END cap;
END upper;
 
 
PROCEDURE cap8 (VAR ch: CHAR): BOOLEAN;
PROCEDURE lower* (VAR ch: WCHAR): BOOLEAN;
VAR
res: BOOLEAN;
BEGIN
IF ("a" <= ch) & (ch <= "z") THEN
ch := CHR(ORD(ch) - (ORD("z") - ORD("Z")));
IF ("A" <= ch) & (ch <= "Z") OR (410X <= ch) & (ch <= 42FX) THEN
ch := WCHR(ORD(ch) + 20H);
res := TRUE
ELSIF (400X <= ch) & (ch <= 40FX) THEN
ch := WCHR(ORD(ch) + 50H);
res := TRUE
ELSIF ch = 490X THEN
ch := 491X;
res := TRUE
ELSE
res := FALSE
END
RETURN res
END cap8;
END lower;
 
 
PROCEDURE upcase* (VAR s: ARRAY OF CHAR);
PROCEDURE lowcase* (VAR s: ARRAY OF WCHAR);
VAR
i: INTEGER;
BEGIN
i := LENGTH(s) - 1;
WHILE i >= 0 DO
IF cap8(s[i]) THEN
IF lower(s[i]) THEN
END;
DEC(i)
END
END upcase;
END lowcase;
 
 
PROCEDURE upcase16* (VAR s: ARRAY OF WCHAR);
PROCEDURE lowcase8* (VAR s: ARRAY OF CHAR);
VAR
i: INTEGER;
BEGIN
i := LENGTH(s) - 1;
WHILE i >= 0 DO
IF cap(s[i]) THEN
END;
DEC(i)
END
END upcase16;
 
 
PROCEDURE low* (VAR ch: WCHAR): BOOLEAN;
VAR
res: BOOLEAN;
BEGIN
IF ("A" <= ch) & (ch <= "Z") THEN
ch := WCHR(ORD(ch) + (ORD("z") - ORD("Z")));
res := TRUE
ELSIF (410H <= ORD(ch)) & (ORD(ch) <= 42FH) THEN
ch := WCHR(ORD(ch) + 20H);
res := TRUE
ELSIF (400H <= ORD(ch)) & (ORD(ch) <= 40FH) THEN
ch := WCHR(ORD(ch) + 50H);
res := TRUE
ELSIF ch = 490X THEN
ch := 491X;
res := TRUE
ELSE
res := FALSE
END
RETURN res
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)
s[i] := CHR(ORD(s[i]) + 20H)
END;
DEC(i)
END
END lowcase;
END lowcase8;
 
 
PROCEDURE str2int* (s: ARRAY OF WCHAR; VAR val: INTEGER): BOOLEAN;
336,19 → 307,6
END lg10;
 
 
PROCEDURE sgn* (x: INTEGER): INTEGER;
BEGIN
IF x > 0 THEN
x := 1
ELSIF x < 0 THEN
x := -1
ELSE
x := 0
END
RETURN x
END sgn;
 
 
PROCEDURE between* (a, b, c: INTEGER): BOOLEAN;
RETURN (a <= b) & (b <= c)
END between;