Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 9674 → Rev 9673

/programs/develop/cedit/CEDIT
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/programs/develop/cedit/CEDIT.INI
101,7 → 101,7
KW1 =
KW2 =
KW3 =
delim = {}[]<>=:,()&*/|+-\#
delim = {}[]<>:,()&*/|+-\#
 
[lang_JSON]
KW1 =
/programs/develop/cedit/SRC/CEdit.ob07
24,11 → 24,11
U := Utils, Lines, Menu, List,
G := Graph, T := Text, E := Encodings,
CB := Clipboard, Languages,
ChangeLog, Scroll, CheckBox, KOSAPI, SYSTEM,
ChangeLog, Scroll, CheckBox,
RW, Ini, EB := EditBox, Tabs, Toolbar, SB := StatusBar;
 
CONST
HEADER = "CEdit (28-jan-2022)";
HEADER = "CEdit (26-jan-2022)";
 
ShellFilter = "";
EditFilter = "SH|INC|TXT|ASM|OB07|C|CPP|H|PAS|PP|LUA|INI|JSON";
119,7 → 119,6
menuRunScript = 53;
menuDebug = 54;
menuDebugScript = 55;
menuFASM = 56;
 
menuUTF8BOM = 60;
menuUTF8 = 61;
126,8 → 125,6
menuCP866 = 62;
menuWin1251 = 63;
menuEOL = 140;
menuConv1251_866 = 64;
menuConv866_1251 = 65;
 
menuPipet = 70;
menuMagnify = 71;
416,8 → 413,8
Toolbar.enable(toolbar, btnRedo, ~ChangeLog.isLastGuard(text.edition));
Toolbar.enable(toolbar, btnUpper, T.selected(text));
Toolbar.enable(toolbar, btnLower, T.selected(text));
Toolbar.enable(toolbar, btnBuild, (buildScript # "") OR text.fasm);
Toolbar.enable(toolbar, btnRun, (runScript # "") OR text.fasm);
Toolbar.enable(toolbar, btnBuild, buildScript # "");
Toolbar.enable(toolbar, btnRun, runScript # "");
Toolbar.drawIcons(toolbar)
END
END repaint;
798,7 → 795,7
IF fileName # "" THEN
n := getFileNum(fileName);
IF n = -1 THEN
nov := T.open(fileName, 0, 0, err);
nov := T.open(fileName, err);
IF nov = NIL THEN
error("error opening file");
SwitchTab(curText);
1063,13 → 1060,9
Menu.option(menu, menuOberon, text.lang = Languages.langOberon);
Menu.option(menu, menuPascal, text.lang = Languages.langPascal);
ELSIF menu = menuProgram THEN
Menu.setEnabled(menu, menuBuild, (buildScript # "") OR text.fasm);
Menu.setEnabled(menu, menuDebug, (debugScript # "") OR text.fasm);
Menu.setEnabled(menu, menuRun, (runScript # "") OR text.fasm);
Menu.setEnabled(menu, menuBuildScript, ~text.fasm);
Menu.setEnabled(menu, menuDebugScript, ~text.fasm);
Menu.setEnabled(menu, menuRunScript, ~text.fasm);
Menu.check(menu, menuFASM, text.fasm)
Menu.setEnabled(menu, menuBuild, buildScript # "");
Menu.setEnabled(menu, menuDebug, debugScript # "");
Menu.setEnabled(menu, menuRun, runScript # "")
ELSIF menu = menuOptions THEN
Menu.check(menu, menuLineNumbers, T.lineNumbers);
Menu.check(menu, menuAutoIndents, T.autoIndents);
1113,64 → 1106,6
END setScript;
 
 
PROCEDURE FasmCompile (run, debug: BOOLEAN);
VAR
curFileName, ext, outfile, path, param: RW.tFileName;
BEGIN
curFileName := texts[curText].fileName;
U.getFileName(curFileName, param, U.SLASH);
U.getFileName(curFileName, ext, ".");
U.getPath(curFileName, path);
outfile := param;
IF (ext # "") & ((LENGTH(ext) + 1) < LENGTH(outfile)) THEN
outfile[LENGTH(outfile) - LENGTH(ext) - 1] := 0X
ELSE
U.append8(outfile, ".kex")
END;
U.append8(param, ",");
U.append8(param, outfile);
U.append8(param, ",");
U.append8(param, path);
U.append8(param, U.SLASH);
IF run THEN
U.append8(param, ",run")
ELSIF debug THEN
U.append8(param, ",dbg")
END;
K.Run("/sys/develop/fasm", param)
END FasmCompile;
 
 
PROCEDURE ProgramBuild;
BEGIN
IF ~text.fasm THEN
Script(buildScript)
ELSE
FasmCompile(FALSE, FALSE)
END
END ProgramBuild;
 
 
PROCEDURE ProgramRun;
BEGIN
IF ~text.fasm THEN
Script(runScript)
ELSE
FasmCompile(TRUE, FALSE)
END
END ProgramRun;
 
 
PROCEDURE ProgramDebug;
BEGIN
IF ~text.fasm THEN
Script(debugScript)
ELSE
FasmCompile(FALSE, TRUE)
END
END ProgramDebug;
 
 
PROCEDURE ClickMenu;
VAR
item: List.tItem;
1252,19 → 1187,17
|menuPascal:
T.setLang(text, Languages.langPascal)
|menuBuild:
ProgramBuild
Script(buildScript)
|menuBuildScript:
setScript(buildScript)
|menuRun:
ProgramRun
Script(runScript)
|menuRunScript:
setScript(runScript)
|menuDebug:
ProgramDebug
Script(debugScript)
|menuDebugScript:
setScript(debugScript)
|menuFASM:
text.fasm := ~text.fasm
|menuUTF8BOM:
T.setEnc(text, E.UTF8BOM)
|menuUTF8:
1279,10 → 1212,6
T.setEol(text, E.EOL_CRLF)
|menuCR:
T.setEol(text, E.EOL_CR)
|menuConv1251_866:
T.convert(text, E.cp866, E.W1251)
|menuConv866_1251:
T.convert(text, E.cp1251, E.CP866)
|menuPipet:
K.Run("/sys/develop/pipet", "")
|menuMagnify:
1417,9 → 1346,6
Menu.delimiter(menu);
Menu.AddMenuItem(menu, menuEOL, "EOL");
Menu.child(menu, subEOL);
Menu.delimiter(menu);
Menu.AddMenuItem(menu, menuConv1251_866, "convert 1251 >> 866");
Menu.AddMenuItem(menu, menuConv866_1251, "convert 866 >> 1251");
RETURN Menu.create(menu)
END CreateMenuEncoding;
 
1489,10 → 1415,8
Menu.AddMenuItem(menu, menuRun, "run F9");
Menu.AddMenuItem(menu, menuRunScript, "script");
Menu.delimiter(menu);
Menu.AddMenuItem(menu, menuDebug, "debug ctrl-F8");
Menu.AddMenuItem(menu, menuDebug, "debug");
Menu.AddMenuItem(menu, menuDebugScript, "script");
Menu.delimiter(menu);
Menu.AddMenuItem(menu, menuFASM, "Fasm");
RETURN Menu.create(menu)
END CreateMenuProgram;
 
1587,7 → 1511,6
Menu.AddShortcut(31 + CTRL, menuSave);
Menu.AddShortcut(49 + CTRL, menuNew);
Menu.AddShortcut(67 + CTRL, menuBuild);
Menu.AddShortcut(66 + CTRL, menuDebug);
Menu.AddShortcut(83 + CTRL, menuRemove);
Menu.AddShortcut(22 + CTRL, menuUpper);
Menu.AddShortcut(38 + CTRL, menuLower);
1647,17 → 1570,12
ELSE
T.gotoLabel(text, ~shift)
END
ELSIF keyCode = 66 THEN (* F8 *)
key := -1;
IF ctrl THEN
ProgramDebug
END
ELSIF keyCode = 67 THEN (* F9 *)
key := -1;
IF ctrl THEN
ProgramBuild
Script(buildScript)
ELSE
ProgramRun
Script(runScript)
END
ELSIF keyCode = 68 THEN (* F10 *)
IF shift THEN
1849,9 → 1767,9
|btnLower:
T.chCase(text, FALSE)
|btnBuild:
ProgramBuild
Script(buildScript)
|btnRun:
ProgramRun
Script(runScript)
|btnFindNext:
IF searchText # "" THEN
notFound := ~T.findNext(text, BKW.value);
2022,47 → 1940,6
END ScrollChange;
 
 
PROCEDURE docpack (VAR param: RW.tFileName);
VAR
i, size, errno: INTEGER;
ptr, ptr2: INTEGER;
s: ARRAY 32 OF WCHAR;
BEGIN
U.reverse8(param);
param[LENGTH(param) - 1] := 0X;
U.reverse8(param);
i := 0;
WHILE param[i] # 0X DO
s[i] := WCHR(ORD(param[i]));
INC(i)
END;
IF U.str2int(s, size) THEN
INC(size, 20);
ptr := KOSAPI.malloc(size);
IF ptr # 0 THEN
SYSTEM.PUT32(ptr, 0);
SYSTEM.PUT32(ptr + 4, 8);
KOSAPI.sysfunc4(60, 1, ptr, size);
K.SetEventsMask({6});
IF K.EventTimeout(200) = 7 THEN
SYSTEM.PUT32(ptr, 1);
SYSTEM.GET(ptr + 12, size);
ptr2 := KOSAPI.malloc(size);
IF ptr2 # 0 THEN
SYSTEM.MOVE(ptr + 16, ptr2, size);
text := T.open("", ptr2, size, errno);
IF text # NIL THEN
insert(0, text);
T.SetPos(text, 0, 0)
END
END
END;
ptr := KOSAPI.free(ptr)
END
END
END docpack;
 
 
PROCEDURE main;
VAR
fileName, filePath: RW.tFileName;
2165,13 → 2042,9
END;
FOR i := 1 TO Args.argc - 1 DO
Args.GetArg(i, fileName);
IF fileName[0] # "*" THEN
IF open(fileName) THEN
U.getPath(fileName, filePath)
END
ELSE
docpack(fileName)
END
END;
IF textsCount = 0 THEN
K.Exit
/programs/develop/cedit/SRC/RW.ob07
144,7 → 144,7
 
 
PROCEDURE getCharW1251 (file: tInput): INTEGER;
RETURN E.cp1251[getByte(file)]
RETURN E.cpW1251[getByte(file)]
END getCharW1251;
 
 
344,9 → 344,10
END createStrBuf;
 
 
PROCEDURE _loadFromMem (ptr, size: INTEGER; cp866: BOOLEAN; VAR enc, eol: INTEGER): tInput;
PROCEDURE load* (name: tFileName; VAR enc, eol: INTEGER): tInput;
VAR
res: tInput;
fsize: INTEGER;
BEGIN
NEW(res);
res.pos := 0;
353,8 → 354,13
res.CR := FALSE;
res.getChar := NIL;
res.clipbrd := FALSE;
res.buffer := ptr;
res.cnt := size;
fsize := File.FileSize(name);
IF fsize = 0 THEN
res.buffer := KOSAPI.malloc(4096);
res.cnt := 0
ELSE
res.buffer := File.Load(name, res.cnt)
END;
IF res.buffer = 0 THEN
DISPOSE(res)
ELSE
364,39 → 370,15
ELSIF enc = E.CP866 THEN
res.getChar := getCharCP866
ELSIF enc = E.W1251 THEN
IF cp866 THEN
enc := E.CP866;
res.getChar := getCharCP866
ELSE
res.getChar := getCharW1251
END
END;
eol := detectEOL(res);
createStrBuf(res)
END
RETURN res
END _loadFromMem;
END load;
 
 
PROCEDURE loadFromMem* (ptr, size: INTEGER; VAR enc, eol: INTEGER): tInput;
RETURN _loadFromMem(ptr, size, TRUE, enc, eol)
END loadFromMem;
 
 
PROCEDURE loadFromFile* (name: tFileName; VAR enc, eol: INTEGER): tInput;
VAR
ptr, size: INTEGER;
BEGIN
size := File.FileSize(name);
IF size = 0 THEN
ptr := KOSAPI.malloc(4096)
ELSE
ptr := File.Load(name, size)
END
RETURN _loadFromMem(ptr, size, FALSE, enc, eol)
END loadFromFile;
 
 
PROCEDURE clipboard* (): tInput;
VAR
res: tInput;
/programs/develop/cedit/SRC/Text.ob07
67,12 → 67,13
CurX: INTEGER;
smallChange: INTEGER;
modified*, smallMove,
comments, guard, fasm*,
comments, guard,
search, cs, whole: BOOLEAN;
edition*: tGuard;
curLine: tLine;
lang*: INTEGER;
enc, eol: INTEGER;
table: Search.IdxTable;
foundList: List.tList;
foundSel: INTEGER;
searchText: tString;
100,15 → 101,11
size, textsize: tPoint;
charWidth, charHeight: INTEGER;
autoIndents*, lineNumbers*, autoBrackets*, trimSpace*: BOOLEAN;
idxTable: Search.IdxTable;
 
 
PROCEDURE setLang* (text: tText; lang: INTEGER);
BEGIN
IF text.lang # lang THEN
text.fasm := lang = Lang.langFasm;
text.lang := lang
END;
text.lang := lang;
text.comments := TRUE;
Lang.setCurLang(text.lang)
END setLang;
301,18 → 298,6
END Comments;
 
 
PROCEDURE leadingSpaces (line: tLine): INTEGER;
VAR
i: INTEGER;
BEGIN
i := 0;
WHILE Lines.isSpace(Lines.getChar(line, i)) DO
INC(i)
END
RETURN i
END leadingSpaces;
 
 
PROCEDURE parse (text: tText; line: tLine; y: INTEGER; backColor: INTEGER; lang: INTEGER);
VAR
c: WCHAR;
828,7 → 813,7
ELSIF lang = Lang.langIni THEN
 
IF depth = 0 THEN
IF ((c = ";") OR (c = "#")) & (leadingSpaces(line) = i) THEN
IF (c = ";") OR (c = "#") THEN
PrintLex(text, line, i, n, y, colors.comment, backColor);
i := n
ELSIF c = '"' THEN
859,6 → 844,18
END parse;
 
 
PROCEDURE leadingSpaces (line: tLine): INTEGER;
VAR
i: INTEGER;
BEGIN
i := 0;
WHILE Lines.isSpace(Lines.getChar(line, i)) DO
INC(i)
END
RETURN i
END leadingSpaces;
 
 
PROCEDURE plain (text: tText): CB.tBuffer;
VAR
buf: CB.tBuffer;
911,8 → 908,8
END;
IF text.searchText # "" THEN
plainText := plain(text);
idxData := Search.index(plainText, idxTable, cs);
Search.find(plainText, idxTable, text.searchText, whole, text.foundList);
idxData := Search.index(plainText, text.table, cs);
Search.find(plainText, text.table, text.searchText, whole, text.foundList);
res := text.foundList.count > 0
END;
CB.destroy(plainText);
1774,7 → 1771,6
VAR
i: INTEGER;
line: tLine;
func: Lines.fConvert;
BEGIN
line := text.curLine;
i := text.cursor.X - 1;
1783,13 → 1779,7
DEC(i)
END;
 
IF upper THEN
func := U.cap
ELSE
func := U.low
END;
 
IF Lines.convert(line, i + 1, text.cursor.X - 1, func) THEN
IF Lines.chCase(line, i + 1, text.cursor.X - 1, upper) THEN
INC(text.smallChange);
modify(text)
END
1801,7 → 1791,6
selBeg, selEnd: tPoint;
first, line: Lines.tLine;
cnt: INTEGER;
func: Lines.fConvert;
modified: BOOLEAN;
BEGIN
modified := FALSE;
1810,30 → 1799,23
first := getLine2(text, selBeg.Y);
line := first;
cnt := selEnd.Y - selBeg.Y;
 
IF upper THEN
func := U.cap
ELSE
func := U.low
END;
 
IF cnt = 0 THEN
IF Lines.convert(line, selBeg.X, selEnd.X - 1, func) THEN
IF Lines.chCase(line, selBeg.X, selEnd.X - 1, upper) THEN
modified := TRUE
END
ELSE
IF Lines.convert(line, selBeg.X, line.length - 1, func) THEN
IF Lines.chCase(line, selBeg.X, line.length - 1, upper) THEN
modified := TRUE
END;
WHILE cnt > 1 DO
NextLine(line);
IF Lines.convert(line, 0, line.length - 1, func) THEN
IF Lines.chCase(line, 0, line.length - 1, upper) THEN
modified := TRUE
END;
DEC(cnt)
END;
NextLine(line);
IF Lines.convert(line, 0, selEnd.X - 1, func) THEN
IF Lines.chCase(line, 0, selEnd.X - 1, upper) THEN
modified := TRUE
END
END
2554,7 → 2536,7
END destroy;
 
 
PROCEDURE open* (name: RW.tFileName; ptr, size: INTEGER; VAR errno: INTEGER): tText;
PROCEDURE open* (name: RW.tFileName; VAR errno: INTEGER): tText;
VAR
text: tText;
file: RW.tInput;
2565,11 → 2547,7
errno := 0;
text := create(name);
IF text # NIL THEN
IF ptr = 0 THEN
file := RW.loadFromFile(name, enc, eol)
ELSE
file := RW.loadFromMem(ptr, size, enc, eol)
END;
file := RW.load(name, enc, eol);
IF file = NIL THEN
destroy(text)
END
2721,65 → 2699,6
END replaceAll;
 
 
PROCEDURE conv (VAR c: WCHAR; cp: E.CP; enc: INTEGER): BOOLEAN;
VAR
code: INTEGER;
res: BOOLEAN;
BEGIN
res := FALSE;
IF (c # 0X) & (c # Lines.NUL) & (c # Lines.TAB1) THEN
code := E.UNI[ORD(c), enc];
IF (0 <= code) & (code <= 255) THEN
code := cp[code]
ELSE
code := ORD(c)
END;
res := WCHR(code) # c;
c := WCHR(code)
END
RETURN res
END conv;
 
 
PROCEDURE conv1251to866 (VAR c: WCHAR): BOOLEAN;
RETURN conv(c, E.cp866, E.W1251)
END conv1251to866;
 
 
PROCEDURE conv866to1251 (VAR c: WCHAR): BOOLEAN;
RETURN conv(c, E.cp1251, E.CP866)
END conv866to1251;
 
 
PROCEDURE convert* (text: tText; cp: E.CP; enc: INTEGER);
VAR
line: tLine;
func: Lines.fConvert;
modified: BOOLEAN;
BEGIN
modified := FALSE;
line := text.first(tLine);
IF enc = E.CP866 THEN
func := conv866to1251
ELSIF enc = E.W1251 THEN
func := conv1251to866
ELSE
line := NIL
END;
 
WHILE line # NIL DO
IF Lines.convert(line, 0, line.length - 1, func) THEN
modified := TRUE
END;
NextLine(line)
END;
 
IF modified THEN
modify(text)
END
END convert;
 
 
PROCEDURE New* (): tText;
VAR
text: tText;
/programs/develop/cedit/SRC/ChangeLog.ob07
1,5 → 1,5
(*
Copyright 2021, 2022 Anton Krotov
Copyright 2021 Anton Krotov
 
This file is part of CEdit.
 
/programs/develop/cedit/SRC/Lines.ob07
51,9 → 51,7
 
tVectorItem = tLine;
 
fConvert* = PROCEDURE (VAR c: WCHAR): BOOLEAN;
 
 
VAR
 
_movInt: PmovInt;
499,14 → 497,19
END copy;
 
 
PROCEDURE convert* (line: tLine; pos1, pos2: INTEGER; func: fConvert): BOOLEAN;
PROCEDURE chCase* (line: tLine; pos1, pos2: INTEGER; upper: BOOLEAN): BOOLEAN;
VAR
i: INTEGER;
modified: BOOLEAN;
c: WCHAR;
func: PROCEDURE (VAR c: WCHAR): BOOLEAN;
BEGIN
ASSERT(func # NIL);
modified := FALSE;
IF upper THEN
func := Utils.cap
ELSE
func := Utils.low
END;
i := pos2;
WHILE i >= pos1 DO
c := getChar(line, i);
529,7 → 532,7
modify(line)
END
RETURN modified
END convert;
END chCase;
 
 
PROCEDURE init* (movInt: PmovInt; movPtr: PmovPtr; movBool, movBool2: PmovBool; typedPtr: PTypedPtr; untypedPtr: PUntypedPtr);
/programs/develop/cedit/SRC/Encodings.ob07
28,12 → 28,12
CR = 0DX; LF = 0AX;
 
TYPE
CP* = ARRAY 256 OF INTEGER;
CP = ARRAY 256 OF INTEGER;
 
tEOL* = ARRAY 3 OF WCHAR;
 
VAR
cp1251*, cp866*: CP;
cpW1251*, cp866*: CP;
names*: ARRAY 4, 16 OF WCHAR;
UNI*: ARRAY 65536, 2 OF INTEGER;
 
117,8 → 117,8
UNI[i, W1251] := UNDEF
END;
FOR i := 0 TO 255 DO
IF cp1251[i] # UNDEF THEN
UNI[cp1251[i], W1251] := i
IF cpW1251[i] # UNDEF THEN
UNI[cpW1251[i], W1251] := i
END;
IF cp866[i] # UNDEF THEN
UNI[cp866[i], CP866] := i
138,7 → 138,7
names[W1251] := "Windows-1251";
names[UTF8] := "UTF-8";
names[UTF8BOM] := "UTF-8-BOM";
InitW1251(cp1251);
InitW1251(cpW1251);
InitCP866(cp866);
setUNI
END Encodings.
/programs/develop/cedit/SHORTCUT.TXT
40,7 → 40,6
 
ctrl+F9 компилировать
F9 выполнить
ctrl+F8 отладка
 
перемещение по тексту:
(ctrl+)Home, (ctrl+)End, (ctrl+)PageUp, (ctrl+)PageDown