From 2edd1b82f90039700d9e4a75ba3a2cf4a7e59c6b Mon Sep 17 00:00:00 2001 From: Anton Krotov Date: Fri, 28 Jan 2022 15:47:03 +0000 Subject: [PATCH] compile/run/debug with fasm without script; support docpack; convert cp866 <=> cp1251 git-svn-id: svn://kolibrios.org@9674 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/cedit/CEDIT | Bin 31565 -> 32181 bytes programs/develop/cedit/CEDIT.INI | 2 +- programs/develop/cedit/SHORTCUT.TXT | 1 + programs/develop/cedit/SRC/CEdit.ob07 | 163 +++++++++++++++++++--- programs/develop/cedit/SRC/ChangeLog.ob07 | 2 +- programs/develop/cedit/SRC/Encodings.ob07 | 10 +- programs/develop/cedit/SRC/Lines.ob07 | 13 +- programs/develop/cedit/SRC/RW.ob07 | 42 ++++-- programs/develop/cedit/SRC/Text.ob07 | 131 +++++++++++++---- 9 files changed, 294 insertions(+), 70 deletions(-) diff --git a/programs/develop/cedit/CEDIT b/programs/develop/cedit/CEDIT index 4b25bce6c4ef47845044b03beebd8de880934808..1f98149b5137c064474b773916c961d51b0827a4 100644 GIT binary patch literal 32181 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%0DJ~wLP3bSef_|2$^LTPbZf}BPhzu)@ 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

UwlVh_Yk_l4zd8?s8(7@p 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 IQw#tA2a&p;$p8QV literal 31565 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 QF7i:,()&*/|+-\# +delim = {}[]<>=:,()&*/|+-\# [lang_JSON] KW1 = diff --git a/programs/develop/cedit/SHORTCUT.TXT b/programs/develop/cedit/SHORTCUT.TXT index c722ac0c59..9784cacdca 100644 --- a/programs/develop/cedit/SHORTCUT.TXT +++ b/programs/develop/cedit/SHORTCUT.TXT @@ -40,6 +40,7 @@ ctrl+F9 компилировать F9 выполнить + ctrl+F8 отладка перемещение по тексту: (ctrl+)Home, (ctrl+)End, (ctrl+)PageUp, (ctrl+)PageDown diff --git a/programs/develop/cedit/SRC/CEdit.ob07 b/programs/develop/cedit/SRC/CEdit.ob07 index 855afc93d8..36c09beae8 100644 --- a/programs/develop/cedit/SRC/CEdit.ob07 +++ b/programs/develop/cedit/SRC/CEdit.ob07 @@ -24,11 +24,11 @@ IMPORT U := Utils, Lines, Menu, List, G := Graph, T := Text, E := Encodings, CB := Clipboard, Languages, - ChangeLog, Scroll, CheckBox, + ChangeLog, Scroll, CheckBox, KOSAPI, SYSTEM, RW, Ini, EB := EditBox, Tabs, Toolbar, SB := StatusBar; CONST - HEADER = "CEdit (26-jan-2022)"; + HEADER = "CEdit (28-jan-2022)"; ShellFilter = ""; EditFilter = "SH|INC|TXT|ASM|OB07|C|CPP|H|PAS|PP|LUA|INI|JSON"; @@ -119,12 +119,15 @@ CONST menuRunScript = 53; menuDebug = 54; menuDebugScript = 55; + menuFASM = 56; menuUTF8BOM = 60; menuUTF8 = 61; menuCP866 = 62; menuWin1251 = 63; menuEOL = 140; + menuConv1251_866 = 64; + menuConv866_1251 = 65; menuPipet = 70; menuMagnify = 71; @@ -413,8 +416,8 @@ BEGIN 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 # ""); - Toolbar.enable(toolbar, btnRun, runScript # ""); + Toolbar.enable(toolbar, btnBuild, (buildScript # "") OR text.fasm); + Toolbar.enable(toolbar, btnRun, (runScript # "") OR text.fasm); Toolbar.drawIcons(toolbar) END END repaint; @@ -795,7 +798,7 @@ BEGIN IF fileName # "" THEN n := getFileNum(fileName); IF n = -1 THEN - nov := T.open(fileName, err); + nov := T.open(fileName, 0, 0, err); IF nov = NIL THEN error("error opening file"); SwitchTab(curText); @@ -1060,9 +1063,13 @@ BEGIN 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 # ""); - Menu.setEnabled(menu, menuDebug, debugScript # ""); - Menu.setEnabled(menu, menuRun, runScript # "") + 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) ELSIF menu = menuOptions THEN Menu.check(menu, menuLineNumbers, T.lineNumbers); Menu.check(menu, menuAutoIndents, T.autoIndents); @@ -1106,6 +1113,64 @@ BEGIN 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; @@ -1187,17 +1252,19 @@ BEGIN |menuPascal: T.setLang(text, Languages.langPascal) |menuBuild: - Script(buildScript) + ProgramBuild |menuBuildScript: setScript(buildScript) |menuRun: - Script(runScript) + ProgramRun |menuRunScript: setScript(runScript) |menuDebug: - Script(debugScript) + ProgramDebug |menuDebugScript: setScript(debugScript) + |menuFASM: + text.fasm := ~text.fasm |menuUTF8BOM: T.setEnc(text, E.UTF8BOM) |menuUTF8: @@ -1212,6 +1279,10 @@ BEGIN 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: @@ -1346,6 +1417,9 @@ BEGIN 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; @@ -1415,8 +1489,10 @@ BEGIN Menu.AddMenuItem(menu, menuRun, "run F9"); Menu.AddMenuItem(menu, menuRunScript, "script"); Menu.delimiter(menu); - Menu.AddMenuItem(menu, menuDebug, "debug"); + Menu.AddMenuItem(menu, menuDebug, "debug ctrl-F8"); Menu.AddMenuItem(menu, menuDebugScript, "script"); + Menu.delimiter(menu); + Menu.AddMenuItem(menu, menuFASM, "Fasm"); RETURN Menu.create(menu) END CreateMenuProgram; @@ -1511,6 +1587,7 @@ BEGIN 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); @@ -1570,12 +1647,17 @@ BEGIN 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 - Script(buildScript) + ProgramBuild ELSE - Script(runScript) + ProgramRun END ELSIF keyCode = 68 THEN (* F10 *) IF shift THEN @@ -1767,9 +1849,9 @@ BEGIN |btnLower: T.chCase(text, FALSE) |btnBuild: - Script(buildScript) + ProgramBuild |btnRun: - Script(runScript) + ProgramRun |btnFindNext: IF searchText # "" THEN notFound := ~T.findNext(text, BKW.value); @@ -1940,6 +2022,47 @@ BEGIN 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; @@ -2042,8 +2165,12 @@ BEGIN END; FOR i := 1 TO Args.argc - 1 DO Args.GetArg(i, fileName); - IF open(fileName) THEN - U.getPath(fileName, filePath) + IF fileName[0] # "*" THEN + IF open(fileName) THEN + U.getPath(fileName, filePath) + END + ELSE + docpack(fileName) END END; IF textsCount = 0 THEN diff --git a/programs/develop/cedit/SRC/ChangeLog.ob07 b/programs/develop/cedit/SRC/ChangeLog.ob07 index 55f46ef701..c7d0ce9407 100644 --- a/programs/develop/cedit/SRC/ChangeLog.ob07 +++ b/programs/develop/cedit/SRC/ChangeLog.ob07 @@ -1,5 +1,5 @@ (* - Copyright 2021 Anton Krotov + Copyright 2021, 2022 Anton Krotov This file is part of CEdit. diff --git a/programs/develop/cedit/SRC/Encodings.ob07 b/programs/develop/cedit/SRC/Encodings.ob07 index a986b88f41..4505e50b2d 100644 --- a/programs/develop/cedit/SRC/Encodings.ob07 +++ b/programs/develop/cedit/SRC/Encodings.ob07 @@ -28,12 +28,12 @@ CONST CR = 0DX; LF = 0AX; TYPE - CP = ARRAY 256 OF INTEGER; + CP* = ARRAY 256 OF INTEGER; tEOL* = ARRAY 3 OF WCHAR; VAR - cpW1251*, cp866*: CP; + cp1251*, cp866*: CP; names*: ARRAY 4, 16 OF WCHAR; UNI*: ARRAY 65536, 2 OF INTEGER; @@ -117,8 +117,8 @@ BEGIN UNI[i, W1251] := UNDEF END; FOR i := 0 TO 255 DO - IF cpW1251[i] # UNDEF THEN - UNI[cpW1251[i], W1251] := i + IF cp1251[i] # UNDEF THEN + UNI[cp1251[i], W1251] := i END; IF cp866[i] # UNDEF THEN UNI[cp866[i], CP866] := i @@ -138,7 +138,7 @@ BEGIN names[W1251] := "Windows-1251"; names[UTF8] := "UTF-8"; names[UTF8BOM] := "UTF-8-BOM"; - InitW1251(cpW1251); + InitW1251(cp1251); InitCP866(cp866); setUNI END Encodings. \ No newline at end of file diff --git a/programs/develop/cedit/SRC/Lines.ob07 b/programs/develop/cedit/SRC/Lines.ob07 index 33d6f325c2..2213a71318 100644 --- a/programs/develop/cedit/SRC/Lines.ob07 +++ b/programs/develop/cedit/SRC/Lines.ob07 @@ -51,6 +51,8 @@ TYPE tVectorItem = tLine; + fConvert* = PROCEDURE (VAR c: WCHAR): BOOLEAN; + VAR @@ -497,19 +499,14 @@ BEGIN END copy; -PROCEDURE chCase* (line: tLine; pos1, pos2: INTEGER; upper: BOOLEAN): BOOLEAN; +PROCEDURE convert* (line: tLine; pos1, pos2: INTEGER; func: fConvert): 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); @@ -532,7 +529,7 @@ BEGIN modify(line) END RETURN modified -END chCase; +END convert; PROCEDURE init* (movInt: PmovInt; movPtr: PmovPtr; movBool, movBool2: PmovBool; typedPtr: PTypedPtr; untypedPtr: PUntypedPtr); diff --git a/programs/develop/cedit/SRC/RW.ob07 b/programs/develop/cedit/SRC/RW.ob07 index 472dc6d09f..d46a257198 100644 --- a/programs/develop/cedit/SRC/RW.ob07 +++ b/programs/develop/cedit/SRC/RW.ob07 @@ -144,7 +144,7 @@ END getCharUTF8; PROCEDURE getCharW1251 (file: tInput): INTEGER; - RETURN E.cpW1251[getByte(file)] + RETURN E.cp1251[getByte(file)] END getCharW1251; @@ -344,23 +344,17 @@ BEGIN END createStrBuf; -PROCEDURE load* (name: tFileName; VAR enc, eol: INTEGER): tInput; +PROCEDURE _loadFromMem (ptr, size: INTEGER; cp866: BOOLEAN; VAR enc, eol: INTEGER): tInput; VAR res: tInput; - fsize: INTEGER; BEGIN NEW(res); res.pos := 0; res.CR := FALSE; res.getChar := NIL; res.clipbrd := FALSE; - 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; + res.buffer := ptr; + res.cnt := size; IF res.buffer = 0 THEN DISPOSE(res) ELSE @@ -370,13 +364,37 @@ BEGIN ELSIF enc = E.CP866 THEN res.getChar := getCharCP866 ELSIF enc = E.W1251 THEN - res.getChar := getCharW1251 + IF cp866 THEN + enc := E.CP866; + res.getChar := getCharCP866 + ELSE + res.getChar := getCharW1251 + END END; eol := detectEOL(res); createStrBuf(res) END RETURN res -END load; +END _loadFromMem; + + +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; diff --git a/programs/develop/cedit/SRC/Text.ob07 b/programs/develop/cedit/SRC/Text.ob07 index 7982aadd38..4de4c273e3 100644 --- a/programs/develop/cedit/SRC/Text.ob07 +++ b/programs/develop/cedit/SRC/Text.ob07 @@ -67,13 +67,12 @@ TYPE CurX: INTEGER; smallChange: INTEGER; modified*, smallMove, - comments, guard, + comments, guard, fasm*, search, cs, whole: BOOLEAN; edition*: tGuard; curLine: tLine; lang*: INTEGER; enc, eol: INTEGER; - table: Search.IdxTable; foundList: List.tList; foundSel: INTEGER; searchText: tString; @@ -101,11 +100,15 @@ VAR size, textsize: tPoint; charWidth, charHeight: INTEGER; autoIndents*, lineNumbers*, autoBrackets*, trimSpace*: BOOLEAN; + idxTable: Search.IdxTable; PROCEDURE setLang* (text: tText; lang: INTEGER); BEGIN - text.lang := lang; + IF text.lang # lang THEN + text.fasm := lang = Lang.langFasm; + text.lang := lang + END; text.comments := TRUE; Lang.setCurLang(text.lang) END setLang; @@ -298,6 +301,18 @@ BEGIN 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; @@ -813,7 +828,7 @@ BEGIN ELSIF lang = Lang.langIni THEN IF depth = 0 THEN - IF (c = ";") OR (c = "#") THEN + IF ((c = ";") OR (c = "#")) & (leadingSpaces(line) = i) THEN PrintLex(text, line, i, n, y, colors.comment, backColor); i := n ELSIF c = '"' THEN @@ -844,18 +859,6 @@ BEGIN 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; @@ -908,8 +911,8 @@ BEGIN END; IF text.searchText # "" THEN plainText := plain(text); - idxData := Search.index(plainText, text.table, cs); - Search.find(plainText, text.table, text.searchText, whole, text.foundList); + idxData := Search.index(plainText, idxTable, cs); + Search.find(plainText, idxTable, text.searchText, whole, text.foundList); res := text.foundList.count > 0 END; CB.destroy(plainText); @@ -1771,6 +1774,7 @@ PROCEDURE changeCase (text: tText; upper: BOOLEAN); VAR i: INTEGER; line: tLine; + func: Lines.fConvert; BEGIN line := text.curLine; i := text.cursor.X - 1; @@ -1779,7 +1783,13 @@ BEGIN DEC(i) END; - IF Lines.chCase(line, i + 1, text.cursor.X - 1, upper) THEN + IF upper THEN + func := U.cap + ELSE + func := U.low + END; + + IF Lines.convert(line, i + 1, text.cursor.X - 1, func) THEN INC(text.smallChange); modify(text) END @@ -1791,6 +1801,7 @@ VAR selBeg, selEnd: tPoint; first, line: Lines.tLine; cnt: INTEGER; + func: Lines.fConvert; modified: BOOLEAN; BEGIN modified := FALSE; @@ -1799,23 +1810,30 @@ BEGIN 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.chCase(line, selBeg.X, selEnd.X - 1, upper) THEN + IF Lines.convert(line, selBeg.X, selEnd.X - 1, func) THEN modified := TRUE END ELSE - IF Lines.chCase(line, selBeg.X, line.length - 1, upper) THEN + IF Lines.convert(line, selBeg.X, line.length - 1, func) THEN modified := TRUE END; WHILE cnt > 1 DO NextLine(line); - IF Lines.chCase(line, 0, line.length - 1, upper) THEN + IF Lines.convert(line, 0, line.length - 1, func) THEN modified := TRUE END; DEC(cnt) END; NextLine(line); - IF Lines.chCase(line, 0, selEnd.X - 1, upper) THEN + IF Lines.convert(line, 0, selEnd.X - 1, func) THEN modified := TRUE END END @@ -2536,7 +2554,7 @@ BEGIN END destroy; -PROCEDURE open* (name: RW.tFileName; VAR errno: INTEGER): tText; +PROCEDURE open* (name: RW.tFileName; ptr, size: INTEGER; VAR errno: INTEGER): tText; VAR text: tText; file: RW.tInput; @@ -2547,7 +2565,11 @@ BEGIN errno := 0; text := create(name); IF text # NIL THEN - file := RW.load(name, enc, eol); + IF ptr = 0 THEN + file := RW.loadFromFile(name, enc, eol) + ELSE + file := RW.loadFromMem(ptr, size, enc, eol) + END; IF file = NIL THEN destroy(text) END @@ -2699,6 +2721,65 @@ BEGIN 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;