From e4ec81f6666707b13fcfb72082e329ba8e9a73a0 Mon Sep 17 00:00:00 2001 From: Anton Krotov Date: Mon, 20 Dec 2021 19:09:01 +0000 Subject: [PATCH] CEdit: refactoring; fixed memory leak git-svn-id: svn://kolibrios.org@9448 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/cedit/CEDIT | Bin 30788 -> 31108 bytes programs/develop/cedit/SRC/CEdit.ob07 | 207 +++++++--------------- programs/develop/cedit/SRC/ChangeLog.ob07 | 56 ++++-- programs/develop/cedit/SRC/CheckBox.ob07 | 5 - programs/develop/cedit/SRC/Clipboard.ob07 | 18 +- programs/develop/cedit/SRC/Graph.ob07 | 10 +- programs/develop/cedit/SRC/KolibriOS.ob07 | 44 +++-- programs/develop/cedit/SRC/Lines.ob07 | 30 ++-- programs/develop/cedit/SRC/Menu.ob07 | 33 ++-- programs/develop/cedit/SRC/Tabs.ob07 | 13 +- programs/develop/cedit/SRC/Text.ob07 | 4 +- programs/develop/cedit/SRC/Timer.ob07 | 80 --------- programs/develop/cedit/SRC/Toolbar.ob07 | 151 ++++++++++++++++ 13 files changed, 335 insertions(+), 316 deletions(-) delete mode 100644 programs/develop/cedit/SRC/Timer.ob07 create mode 100644 programs/develop/cedit/SRC/Toolbar.ob07 diff --git a/programs/develop/cedit/CEDIT b/programs/develop/cedit/CEDIT index 7605ad1768946b2a2d063bac5150b03280da43f9..eadf88d38085a9d27a8a3d2bc93be9cc4db1f518 100644 GIT binary patch literal 31108 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 bLjd*SSP}KIr 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 TY~a)N8glJie4~7#3jhEI4cFX( diff --git a/programs/develop/cedit/SRC/CEdit.ob07 b/programs/develop/cedit/SRC/CEdit.ob07 index 3eeca6ef41..7e3cf7483f 100644 --- a/programs/develop/cedit/SRC/CEdit.ob07 +++ b/programs/develop/cedit/SRC/CEdit.ob07 @@ -25,10 +25,10 @@ IMPORT G := Graph, T := Text, E := Encodings, CB := Clipboard, Languages, ChangeLog, Scroll, CheckBox, - RW, Ini, EB := EditBox, Icons, Tabs, Timer; + RW, Ini, EB := EditBox, Tabs, Toolbar; CONST - HEADER = "CEdit (17-dec-2021)"; + HEADER = "CEdit (20-dec-2021)"; ShellFilter = ""; EditFilter = "SH|INC|TXT|ASM|OB07|C|CPP|H|PAS|PP|LUA|INI|JSON"; @@ -38,6 +38,7 @@ CONST scrollWidth = 22; btnClose = 1; + btnNew = 20; btnOpen = 21; btnSave = 22; @@ -62,12 +63,10 @@ CONST btnHeight = 25; btnWidth = 75; - btnTop = Menu.MainMenuHeight + 3; - toolBtnSize = 24; - toolbarDelim = 7; - iconPad = (toolBtnSize - Icons.SIZE) DIV 2; - TOP = btnTop + toolBtnSize + 10 + Tabs.tabHeight; + toolbarTop = Menu.MainMenuHeight + 3; + + TOP = toolbarTop + Toolbar.BtnSize + 10 + Tabs.tabHeight; RIGHT = scrollWidth - 2; BOTTOM = scrollWidth + 18; @@ -206,11 +205,13 @@ VAR menuActive: BOOLEAN; - icons: INTEGER; - grayIcons: INTEGER; + toolbar: Toolbar.tToolbar; IPC: ARRAY 64 OF INTEGER; + CursorTime, CurrentTime: INTEGER; + timerEnabled: BOOLEAN; + PROCEDURE WritePos (y: INTEGER); VAR @@ -235,11 +236,12 @@ PROCEDURE resetTimer; BEGIN IF EditBox_Focus(FindEdit) OR EditBox_Focus(ReplaceEdit) OR EditBox_Focus(GotoEdit) THEN T.hideCursor; - Timer.kill + timerEnabled := FALSE ELSE T.showCursor; - Timer.create(mainTID) - END + timerEnabled := TRUE + END; + CursorTime := CurrentTime END resetTimer; @@ -283,7 +285,8 @@ CONST VAR top, left, right, bottom, x, y, width: INTEGER; BEGIN - Timer.kill; + timerEnabled := FALSE; + CursorTime := CurrentTime; width := minWidth + LENGTH(s)*fontWidth; left := (canvas.width - width) DIV 2 + LEFT; top := (canvas.height - height) DIV 2 + TOP; @@ -326,73 +329,6 @@ BEGIN END Replaced; -PROCEDURE drawIcon (icons, idx, x: INTEGER); -BEGIN - Icons.draw(icons, idx, x + iconPad, btnTop + iconPad) -END drawIcon; - - -PROCEDURE toolbarIcons; -VAR - x, color, ico: INTEGER; -BEGIN - x := searchLeft + (toolBtnSize + 5)*2; - IF text.modified THEN - ico := icons - ELSE - ico := grayIcons - END; - drawIcon(ico, 5, x); - - IF text.edition # NIL THEN - x := searchLeft + (toolBtnSize + 5)*4 + toolbarDelim*2; - IF ChangeLog.isFirstGuard(text.edition) THEN - ico := grayIcons - ELSE - ico := icons - END; - drawIcon(ico, 37, x); - - x := searchLeft + (toolBtnSize + 5)*5 + toolbarDelim*2; - IF ChangeLog.isLastGuard(text.edition) THEN - ico := grayIcons - ELSE - ico := icons - END; - drawIcon(ico, 36, x) - END; - - IF T.selected(text) THEN - color := K.caseColor - ELSE - color := K.disCaseColor - END; - - x := searchLeft + (toolBtnSize + 5)*6 + toolbarDelim*3; - K.DrawRect(x, btnTop, toolBtnSize, toolBtnSize, K.toolbarColor); - K.DrawText69(x + (toolBtnSize - 12) DIV 2, btnTop + (toolBtnSize - 9) DIV 2 + 2, color, "AB"); - INC(x, toolBtnSize + 5); - K.DrawRect(x, btnTop, toolBtnSize, toolBtnSize, K.toolbarColor); - K.DrawText69(x + (toolBtnSize - 12) DIV 2, btnTop + (toolBtnSize - 9) DIV 2 + 2, color, "ab"); - - x := searchLeft + (toolBtnSize + 5)*8 + toolbarDelim*4; - IF buildScript # "" THEN - ico := icons - ELSE - ico := grayIcons - END; - drawIcon(ico, 54, x); - - INC(x, toolBtnSize + 5); - IF runScript # "" THEN - ico := icons - ELSE - ico := grayIcons - END; - drawIcon(ico, 53, x) -END toolbarIcons; - - PROCEDURE getIdx (text: T.tText): INTEGER; VAR i: INTEGER; @@ -499,7 +435,14 @@ BEGIN G.DrawCanvas(canvas, LEFT, TOP); NotFound; Replaced; - toolbarIcons + Toolbar.enable(toolbar, btnSave, text.modified); + Toolbar.enable(toolbar, btnUndo, ~ChangeLog.isFirstGuard(text.edition)); + 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.drawIcons(toolbar) END END repaint; @@ -580,17 +523,7 @@ END SearchPanel; PROCEDURE draw_window; VAR - width, height, x: INTEGER; - - - PROCEDURE drawToolbarBtn (id, x: INTEGER); - BEGIN - K.DrawRect(x, btnTop, toolBtnSize, toolBtnSize, K.toolbarColor); - K.DrawLine(x, btnTop + toolBtnSize, x + toolBtnSize, btnTop + toolBtnSize, K.shadowColor); - K.DrawLine(x + toolBtnSize, btnTop, x + toolBtnSize, btnTop + toolBtnSize, K.shadowColor); - K.CreateButton(id + ORD({30}), x, btnTop, toolBtnSize, toolBtnSize, K.btnColor, ""); - END drawToolbarBtn; - + width, height: INTEGER; BEGIN K.BeginDraw; @@ -607,42 +540,7 @@ BEGIN K.DrawRect(LEFT + canvas.width + 1, TOP + canvas.height, scrollWidth - 1, scrollWidth, K.winColor); Menu.DrawMain(mainMenu); - x := searchLeft; - - drawToolbarBtn(btnNew, x); - drawIcon(icons, 2, x); - INC(x, toolBtnSize + 5); - - drawToolbarBtn(btnOpen, x); - drawIcon(icons, 0, x); - INC(x, toolBtnSize + 5); - - drawToolbarBtn(btnSave, x); - INC(x, toolBtnSize + 5 + toolbarDelim); - - drawToolbarBtn(btnSearch, x); - drawIcon(icons, 49, x); - INC(x, toolBtnSize + 5 + toolbarDelim); - - drawToolbarBtn(btnUndo, x); - INC(x, toolBtnSize + 5); - - drawToolbarBtn(btnRedo, x); - INC(x, toolBtnSize + 5 + toolbarDelim); - - drawToolbarBtn(btnUpper, x); - INC(x, toolBtnSize + 5); - - drawToolbarBtn(btnLower, x); - INC(x, toolBtnSize + 5 + toolbarDelim); - - drawToolbarBtn(btnBuild, x); - INC(x, toolBtnSize + 5); - - drawToolbarBtn(btnRun, x); - INC(x, toolBtnSize + 5); - - toolbarIcons; + Toolbar.draw(toolbar); DrawState(text, width, height); IF search & searchOpened THEN @@ -668,7 +566,8 @@ END mouse; PROCEDURE stopTimer; BEGIN T.hideCursor; - Timer.kill; + timerEnabled := FALSE; + CursorTime := CurrentTime; repaint END stopTimer; @@ -832,6 +731,7 @@ BEGIN Confirm ELSE Tabs.delete(tabs, n); + T.destroy(texts[n]); FOR i := n + 1 TO textsCount - 1 DO texts[i - 1] := texts[i] END; @@ -1065,9 +965,7 @@ END Script; PROCEDURE ShowSearchPanel (goto: BOOLEAN); VAR i: INTEGER; - (*flag: BOOLEAN;*) BEGIN - (*flag := FALSE;*) IF T.selected(text) & ~goto THEN T.getSelectedText(text, new_searchText); IF new_searchText # "" THEN @@ -1079,7 +977,6 @@ BEGIN searchText := new_searchText; EB.setValue(FindEdit, searchText); notFound := ~T.search(text, searchText, cs, whole); - (*flag := TRUE*) END END END; @@ -1092,7 +989,7 @@ BEGIN IF goto THEN SetFocus(GotoEdit, TRUE) ELSE - SetFocus(FindEdit, (*~flag*)TRUE) + SetFocus(FindEdit, TRUE) END END ShowSearchPanel; @@ -1203,7 +1100,7 @@ BEGIN Menu.option(subEOL, menuCR, T.getEol(text) = RW.EOL_CR); IF menu # NIL THEN - Timer.kill; + timerEnabled := FALSE; IF Menu.opened(menu) THEN Menu.close(menu) END; @@ -1230,13 +1127,7 @@ VAR item: List.tItem; BEGIN scrollIPC := FALSE; - IF IPC[0] = Timer.ID THEN - IF IPC[4] = Timer.n THEN - T.toggleCursor; - repaint - END; - IPC[2] := 0 - ELSIF IPC[0] = mainTID THEN + IF IPC[0] = mainTID THEN IF IPC[2] = Scroll.ScrollIPC THEN Scroll.receiveIPC(IPC, scrollIPC) END; @@ -1870,8 +1761,8 @@ BEGIN END END; CASE btn OF - |Tabs.btnID - 1: Tabs.scroll(tabs, -1); switch := TRUE; repaint - |Tabs.btnID - 2: Tabs.scroll(tabs, +1); switch := TRUE; repaint + |Tabs.btnLeft: Tabs.scroll(tabs, -1); switch := TRUE; repaint + |Tabs.btnRight: Tabs.scroll(tabs, +1); switch := TRUE; repaint |0: @@ -2049,7 +1940,6 @@ VAR i: INTEGER; BEGIN K.GetSystemColors; - Icons.get(icons, grayIcons); FOR i := 0 TO 1 DO IF ~K.RolledUp() THEN K.ClientSize(width, height); @@ -2092,7 +1982,6 @@ VAR firstClickX, firstClickY, time: INTEGER; BEGIN K.GetSystemColors; - Icons.get(icons, grayIcons); modified := FALSE; switch := FALSE; closing := FALSE; @@ -2153,6 +2042,22 @@ BEGIN Menu.AddMainItem(mainMenu, "program", menuProgram); Menu.AddMainItem(mainMenu, "tools", menuTools); + Toolbar.create(toolbar, searchLeft, toolbarTop); + Toolbar.add(toolbar, btnNew, 2, ""); + Toolbar.add(toolbar, btnOpen, 0, ""); + Toolbar.add(toolbar, btnSave, 5, ""); + Toolbar.delimiter(toolbar); + Toolbar.add(toolbar, btnSearch, 49, ""); + Toolbar.delimiter(toolbar); + Toolbar.add(toolbar, btnUndo, 37, ""); + Toolbar.add(toolbar, btnRedo, 36, ""); + Toolbar.delimiter(toolbar); + Toolbar.add(toolbar, btnUpper, -1, "AB"); + Toolbar.add(toolbar, btnLower, -1, "ab"); + Toolbar.delimiter(toolbar); + Toolbar.add(toolbar, btnBuild, 54, ""); + Toolbar.add(toolbar, btnRun, 53, ""); + Ini.getSettings(buildScript, runScript, debugScript); IF fileName = "" THEN text := T.New(); @@ -2188,9 +2093,17 @@ BEGIN K.SetEventsMask({0, 1, 2, 5, 6, 31}); Menu.init(resetTimer); draw_window; - Timer.create(mainTID); + timerEnabled := TRUE; + CursorTime := K.GetTickCount(); WHILE TRUE DO - CASE K.WaitForEvent() OF + CurrentTime := K.GetTickCount(); + IF (CurrentTime - CursorTime > Ini.blink) & timerEnabled THEN + CursorTime := CurrentTime; + T.toggleCursor; + repaint + END; + CASE K.EventTimeout(10) OF + |0: |1: Redraw(resized, width, height, cliWidth, cliHeight) |2: KeyDown(K.GetKey()) |3: BtnClick diff --git a/programs/develop/cedit/SRC/ChangeLog.ob07 b/programs/develop/cedit/SRC/ChangeLog.ob07 index 7d7e245407..ecfde35524 100644 --- a/programs/develop/cedit/SRC/ChangeLog.ob07 +++ b/programs/develop/cedit/SRC/ChangeLog.ob07 @@ -19,7 +19,7 @@ MODULE ChangeLog; -IMPORT List, Lines, (*API,*) SYSTEM; +IMPORT List, Lines, API, SYSTEM; TYPE tIntItem = POINTER TO RECORD (List.tItem) @@ -29,7 +29,7 @@ TYPE tBoolItem = POINTER TO RECORD (List.tItem) adr: INTEGER; val: BOOLEAN; save: BOOLEAN END; -(* + tUntypedPtr = POINTER TO RECORD (List.tItem) p: INTEGER END; @@ -37,13 +37,13 @@ TYPE tTypedPtr = POINTER TO RECORD (List.tItem) p: List.tItem END; -*) + tGuard* = POINTER TO RECORD (List.tItem) saved*: BOOLEAN END; tLog* = POINTER TO RECORD - Log*: List.tList; + Log*, Pointers*: List.tList; guard: tGuard; isLast: BOOLEAN END; @@ -104,18 +104,11 @@ END redo; PROCEDURE clear (guard: tGuard); VAR item: List.tItem; - (*res: INTEGER;*) BEGIN CL.isLast := TRUE; REPEAT item := List.pop(CL.Log); IF item # guard THEN - (* - IF item IS tUntypedPtr THEN - res := API._DISPOSE(item(tUntypedPtr).p) - ELSIF item IS tTypedPtr THEN - DISPOSE(item(tTypedPtr).p) - END;*) DISPOSE(item) END UNTIL item = guard; @@ -253,14 +246,14 @@ BEGIN changeWord(SYSTEM.ADR(v), SYSTEM.ADR(x)) END changePtr; -(* + PROCEDURE typedPtr (p: List.tItem); VAR item: tTypedPtr; BEGIN NEW(item); item.p := p; - List.append(Log, item) + List.append(CL.Pointers, item) END typedPtr; @@ -270,9 +263,9 @@ VAR BEGIN NEW(item); item.p := p; - List.append(Log, item) + List.append(CL.Pointers, item) END untypedPtr; -*) + PROCEDURE set* (_CL: tLog); BEGIN @@ -288,13 +281,44 @@ BEGIN newLog.guard := NIL; newLog.isLast := TRUE; newLog.Log := List.create(NIL); + newLog.Pointers := List.create(NIL); CL := newLog; Lines.setMaxLength(maxLength) RETURN newLog END create; +PROCEDURE destroy* (VAR log: tLog); +VAR + item: List.tItem; + res: INTEGER; +BEGIN + IF log # NIL THEN + item := List.pop(log.Log); + WHILE item # NIL DO + DISPOSE(item); + item := List.pop(log.Log) + END; + DISPOSE(log.Log); + + item := List.pop(log.Pointers); + WHILE item # NIL DO + IF item IS tUntypedPtr THEN + res := API._DISPOSE(item(tUntypedPtr).p) + ELSIF item IS tTypedPtr THEN + DISPOSE(item(tTypedPtr).p) + END; + DISPOSE(item); + item := List.pop(log.Pointers) + END; + DISPOSE(log.Pointers); + + DISPOSE(log) + END +END destroy; + + BEGIN List.init(changeInt, changePtr); - Lines.init(changeInt, changePtr, changeBool, changeBool2(*, typedPtr, untypedPtr*)) + Lines.init(changeInt, changePtr, changeBool, changeBool2, typedPtr, untypedPtr) END ChangeLog. \ No newline at end of file diff --git a/programs/develop/cedit/SRC/CheckBox.ob07 b/programs/develop/cedit/SRC/CheckBox.ob07 index ab906e0b1d..9badb9d177 100644 --- a/programs/develop/cedit/SRC/CheckBox.ob07 +++ b/programs/develop/cedit/SRC/CheckBox.ob07 @@ -45,7 +45,6 @@ TYPE PROCEDURE paint* (chkbox: tCheckBox); VAR canvas: G.tCanvas; - (*r1, r2, g1, g2, b1, b2: BYTE;*) BEGIN canvas := chkbox.canvas; IF canvas # NIL THEN @@ -61,10 +60,6 @@ BEGIN G.DLine(canvas, 2, 6, 7, -1); G.DLine(canvas, 7, 13, 9, 1); G.DLine(canvas, 7, 13, 10, 1); - (*G.getRGB(bColor, r1, g1, b1); - G.getRGB(fColor, r2, g2, b2); - G.SetColor(canvas, (b1 + b2) DIV 2 + ((g1 + g2) DIV 2)*256 + ((r1 + r2) DIV 2)*65536); - *) G.DLine(canvas, 2, 6, 8, -1); G.DLine(canvas, 7, 13, 11, 1); G.DLine(canvas, 2, 6, 5, -1); diff --git a/programs/develop/cedit/SRC/Clipboard.ob07 b/programs/develop/cedit/SRC/Clipboard.ob07 index 936a67d19f..8fefa39684 100644 --- a/programs/develop/cedit/SRC/Clipboard.ob07 +++ b/programs/develop/cedit/SRC/Clipboard.ob07 @@ -19,7 +19,7 @@ MODULE Clipboard; -IMPORT SYSTEM, K := KOSAPI, E := Encodings, Lines; +IMPORT SYSTEM, KOSAPI, E := Encodings, Lines, K := KolibriOS; CONST TTEXT = 0; @@ -35,7 +35,7 @@ TYPE PROCEDURE free (ptr: INTEGER); BEGIN - ptr := K.free(ptr) + ptr := KOSAPI.free(ptr) END free; @@ -52,7 +52,7 @@ VAR BEGIN cnt := bufSize(buffer) DIV 2; size := cnt + 12; - a := K.malloc(size); + a := KOSAPI.malloc(size); ASSERT(a # 0); SYSTEM.PUT32(a + 4, TTEXT); SYSTEM.PUT32(a + 8, 1); @@ -70,8 +70,8 @@ BEGIN DEC(cnt) END; SYSTEM.PUT32(a, size); - K.sysfunc2(54, 3); - K.sysfunc4(54, 2, size, a) + K.CBDelSlot; + K.CBWrite(size, a) END put; @@ -80,7 +80,7 @@ VAR res: tBuffer; BEGIN NEW(res); - res.dataPtr := K.malloc(bufSize*SYSTEM.SIZE(WCHAR) + 4096); + res.dataPtr := KOSAPI.malloc(bufSize*SYSTEM.SIZE(WCHAR) + 4096); ASSERT(res.dataPtr # 0); res.pos := res.dataPtr RETURN res @@ -139,9 +139,9 @@ VAR res: BOOLEAN; BEGIN res := FALSE; - n := K.sysfunc2(54, 0); + n := K.CBCount(); IF n > 0 THEN - ptr := K.sysfunc3(54, 1, n - 1); + ptr := K.CBRead(n - 1); SYSTEM.GET32(ptr, size); SYSTEM.GET32(ptr + 4, typ); SYSTEM.GET(ptr + 8, x); @@ -159,7 +159,7 @@ BEGIN ptr := 0; cnt := 0; IF available() THEN - ptr := K.sysfunc3(54, 1, K.sysfunc2(54, 0) - 1); + ptr := K.CBRead(K.CBCount() - 1); SYSTEM.GET32(ptr, cnt); DEC(cnt, 12); INC(ptr, 12) diff --git a/programs/develop/cedit/SRC/Graph.ob07 b/programs/develop/cedit/SRC/Graph.ob07 index d718edd02f..a5a84bfa53 100644 --- a/programs/develop/cedit/SRC/Graph.ob07 +++ b/programs/develop/cedit/SRC/Graph.ob07 @@ -19,7 +19,7 @@ MODULE Graph; -IMPORT SYSTEM, K := KOSAPI, Lines, Languages; +IMPORT SYSTEM, KOSAPI, Lines, Languages; CONST @@ -61,7 +61,7 @@ END getRGB; PROCEDURE DrawCanvas* (canvas: tCanvas; x, y: INTEGER); BEGIN - K.sysfunc7(65, canvas.bitmap, canvas.width*65536 + canvas.height, x*65536 + y, 32, 0, 0); + KOSAPI.sysfunc7(65, canvas.bitmap, canvas.width*65536 + canvas.height, x*65536 + y, 32, 0, 0) END DrawCanvas; @@ -285,7 +285,7 @@ BEGIN ELSE color := canvas.textColor END; - K.sysfunc6(4, x*65536 + y, font + color, SYSTEM.ADR(c), 1, canvas.bitmap - 8) + KOSAPI.sysfunc6(4, x*65536 + y, font + color, SYSTEM.ADR(c), 1, canvas.bitmap - 8) END; INC(x, canvas.font.width); INC(i); @@ -307,7 +307,7 @@ VAR canvas: tCanvas; BEGIN NEW(canvas); - canvas.bitmap := K.malloc(width*height*4 + 8); + canvas.bitmap := KOSAPI.malloc(width*height*4 + 8); ASSERT(canvas.bitmap # 0); SYSTEM.PUT32(canvas.bitmap, width); SYSTEM.PUT32(canvas.bitmap + 4, height); @@ -322,7 +322,7 @@ END CreateCanvas; PROCEDURE destroy* (VAR canvas: tCanvas); BEGIN IF canvas # NIL THEN - canvas.bitmap := K.free(canvas.bitmap); + canvas.bitmap := KOSAPI.free(canvas.bitmap); DISPOSE(canvas) END END destroy; diff --git a/programs/develop/cedit/SRC/KolibriOS.ob07 b/programs/develop/cedit/SRC/KolibriOS.ob07 index 9ed015ea9f..3eab66d3c6 100644 --- a/programs/develop/cedit/SRC/KolibriOS.ob07 +++ b/programs/develop/cedit/SRC/KolibriOS.ob07 @@ -31,7 +31,7 @@ VAR winColor*, textColor*, btnColor*, btnTextColor*, toolbarColor*, scrollColor*, scrollBkColor*, borderColor*, shadowColor*, (*darkColor,*) lightColor*, - caseColor*, disCaseColor*: INTEGER; + textToolbarColor*, disTextToolbarColor*: INTEGER; PROCEDURE GetCommandLine* (): INTEGER; @@ -62,9 +62,9 @@ BEGIN END EndDraw; -PROCEDURE WaitForEvent* (): INTEGER; - RETURN KOSAPI.sysfunc1(10) -END WaitForEvent; +PROCEDURE EventTimeout* (t: INTEGER): INTEGER; + RETURN KOSAPI.sysfunc2(23, t) +END EventTimeout; PROCEDURE ThreadInfo (offsa, offsb: INTEGER; VAR a, b: INTEGER); @@ -319,11 +319,6 @@ PROCEDURE GetControlKeys* (): SET; END GetControlKeys; -PROCEDURE malloc* (size: INTEGER): INTEGER; - RETURN KOSAPI.malloc(size) -END malloc; - - PROCEDURE SetIPC* (buffer: ARRAY OF INTEGER); BEGIN KOSAPI.sysfunc4(60, 1, SYSTEM.ADR(buffer[0]), LEN(buffer)*SYSTEM.SIZE(INTEGER)) @@ -355,8 +350,8 @@ BEGIN toolbarColor := lightColor;(*0DFDFDFH;*) shadowColor := borderColor;(*0808080H;*) - caseColor := 00000FFH; - disCaseColor := borderColor;(*0808080H*) + textToolbarColor := 00000FFH; + disTextToolbarColor := borderColor;(*0808080H*) END GetSystemColors; @@ -391,4 +386,31 @@ BEGIN END SetCaption; +PROCEDURE CBCount* (): INTEGER; + RETURN KOSAPI.sysfunc2(54, 0) +END CBCount; + + +PROCEDURE CBRead* (slot: INTEGER): INTEGER; + RETURN KOSAPI.sysfunc3(54, 1, slot) +END CBRead; + + +PROCEDURE CBWrite* (size, ptr: INTEGER); +BEGIN + KOSAPI.sysfunc4(54, 2, size, ptr) +END CBWrite; + + +PROCEDURE CBDelSlot*; +BEGIN + KOSAPI.sysfunc2(54, 3) +END CBDelSlot; + + +PROCEDURE GetThreadSlot* (tid: INTEGER): INTEGER; + RETURN KOSAPI.sysfunc3(18, 21, tid) +END GetThreadSlot; + + END KolibriOS. \ No newline at end of file diff --git a/programs/develop/cedit/SRC/Lines.ob07 b/programs/develop/cedit/SRC/Lines.ob07 index 93f2e8da8d..e09877bc37 100644 --- a/programs/develop/cedit/SRC/Lines.ob07 +++ b/programs/develop/cedit/SRC/Lines.ob07 @@ -40,18 +40,18 @@ TYPE PmovInt = PROCEDURE (VAR v: INTEGER; x: INTEGER); PmovBool = PROCEDURE (VAR v: BOOLEAN; x: BOOLEAN); PmovPtr = PROCEDURE (VAR v: List.tItem; x: List.tItem); -(* + PTypedPtr = PROCEDURE (p: List.tItem); PUntypedPtr = PROCEDURE (p: INTEGER); -*) + VAR _movInt: PmovInt; _movBool, _movBool2: PmovBool; _movPtr: PmovPtr; -(* _typedPtr: PTypedPtr; - _untypedPtr: PUntypedPtr;*) + _typedPtr: PTypedPtr; + _untypedPtr: PUntypedPtr; pMaxLength, tab*: INTEGER; tabs*: BOOLEAN; @@ -83,7 +83,6 @@ END movPtr; PROCEDURE malloc (size: INTEGER): INTEGER; VAR - ptr: INTEGER; maxLength: INTEGER; BEGIN ASSERT(pMaxLength # 0); @@ -92,9 +91,8 @@ BEGIN SYSTEM.PUT(pMaxLength, size) END; size := size*WCHAR_SIZE + 4; - INC(size, (-size) MOD 32); - ptr := API._NEW(size) - RETURN ptr + INC(size, (-size) MOD 32) + RETURN API._NEW(size) END malloc; @@ -109,9 +107,9 @@ BEGIN END; IF ~line.temp THEN movInt(line.ptr, newPtr); -(* IF newPtr # 0 THEN + IF newPtr # 0 THEN _untypedPtr(newPtr) - END*) + END END; line.ptr := newPtr END free; @@ -124,9 +122,9 @@ BEGIN NEW(line); line.label := FALSE; ASSERT(line # NIL); -(* IF ~temp THEN + IF ~temp THEN _typedPtr(line) - END;*) + END; line.next := NIL; line.prev := NIL; IF ~temp THEN @@ -136,7 +134,7 @@ BEGIN line.ptr := malloc(1); ASSERT(line.ptr # 0); IF ~temp THEN - (*_untypedPtr(line.ptr);*) + _untypedPtr(line.ptr); movInt(line.ptr, line.ptr) END; SYSTEM.PUT16(line.ptr, 0); @@ -472,14 +470,14 @@ BEGIN END chCase; -PROCEDURE init* (movInt: PmovInt; movPtr: PmovPtr; movBool, movBool2: PmovBool(*; typedPtr: PTypedPtr; untypedPtr: PUntypedPtr*)); +PROCEDURE init* (movInt: PmovInt; movPtr: PmovPtr; movBool, movBool2: PmovBool; typedPtr: PTypedPtr; untypedPtr: PUntypedPtr); BEGIN _movInt := movInt; _movPtr := movPtr; _movBool := movBool; _movBool2 := movBool2; -(* _typedPtr := typedPtr; - _untypedPtr := untypedPtr;*) + _typedPtr := typedPtr; + _untypedPtr := untypedPtr; END init; diff --git a/programs/develop/cedit/SRC/Menu.ob07 b/programs/develop/cedit/SRC/Menu.ob07 index 74f87b98da..ce59d51e3d 100644 --- a/programs/develop/cedit/SRC/Menu.ob07 +++ b/programs/develop/cedit/SRC/Menu.ob07 @@ -20,7 +20,7 @@ MODULE Menu; IMPORT - SYSTEM, G := Graph, List, K := KolibriOS, KOSAPI; + SYSTEM, G := Graph, List, K := KolibriOS; CONST fontHeight = 22; @@ -259,26 +259,26 @@ BEGIN TextColor := disSelForeColor END END; + Y := y + (fontHeight - 16) DIV 2; G.SetColor(canvas, BkColor); G.FillRect(canvas, 1, y, m.width - 1, y + fontHeight - 4); G.SetTextColor(canvas, TextColor); G.SetBkColor(canvas, BkColor); - G.TextOut2(canvas, LEFT, y + (fontHeight - 16) DIV 2 - 2, item.text, LENGTH(item.text)); + G.TextOut2(canvas, LEFT, Y - 2, item.text, LENGTH(item.text)); G.SetColor(canvas, TextColor); IF item.check = 1 THEN - G.DLine(canvas, 4, 7, y + (fontHeight - 16) DIV 2 + 5, -1); - G.DLine(canvas, 4, 7, y + (fontHeight - 16) DIV 2 + 6, -1); - G.DLine(canvas, 7, 12, y + (fontHeight - 16) DIV 2 + 8, 1); - G.DLine(canvas, 7, 12, y + (fontHeight - 16) DIV 2 + 9, 1); + G.DLine(canvas, 4, 7, Y + 5, -1); + G.DLine(canvas, 4, 7, Y + 6, -1); + G.DLine(canvas, 7, 12, Y + 8, 1); + G.DLine(canvas, 7, 12, Y + 9, 1); ELSIF item.check = 2 THEN G.FillRect(canvas, 6, y + fontHeight DIV 2 - 4, 10, y + fontHeight DIV 2) END; IF item.child # NIL THEN X := m.width - 9; - Y := y + (fontHeight - 16) DIV 2 + 2; - G.Triangle(canvas, X, Y, X, Y + 8, G.triRight) + G.Triangle(canvas, X, Y + 2, X, Y + 10, G.triRight) END; INC(y, fontHeight); @@ -391,8 +391,8 @@ END submenu; PROCEDURE [stdcall] window (m: tMenu); VAR x, y: INTEGER; - key, temp: INTEGER; msState: SET; + key, temp: INTEGER; shift, ctrl: BOOLEAN; BEGIN m.selItem := ORD(m.keyboard) - 1; @@ -400,7 +400,8 @@ BEGIN m.keyboard := FALSE; K.SetEventsMask({0, 1, 5}); WHILE TRUE DO - CASE K.WaitForEvent() OF + CASE K.EventTimeout(100) OF + |0: |1: draw_window(m) |2: @@ -408,15 +409,9 @@ BEGIN key := K.GetKey(); IF ~shift & ~ ctrl THEN IF key DIV 65536 = 72 THEN - DEC(m.selItem); - IF m.selItem < 0 THEN - m.selItem := m.items.count - 1 - END + m.selItem := (m.selItem - 1) MOD m.items.count ELSIF key DIV 65536 = 80 THEN - INC(m.selItem); - IF m.selItem >= m.items.count THEN - m.selItem := 0 - END + m.selItem := (m.selItem + 1) MOD m.items.count ELSIF key DIV 65536 = 28 THEN IF m.selItem >= 0 THEN click(m, m.selItem) @@ -504,7 +499,7 @@ VAR BEGIN IF m.tid = 0 THEN L := level(m); - IF KOSAPI.sysfunc3(18, 21, TIDs[L]) = 0 THEN + IF K.GetThreadSlot(TIDs[L]) = 0 THEN m.winX := x; m.winY := y; SYSTEM.PUT(SYSTEM.ADR(stack[L][LEN(stack[0]) - 1]), m); diff --git a/programs/develop/cedit/SRC/Tabs.ob07 b/programs/develop/cedit/SRC/Tabs.ob07 index 8a2ae6cea0..b56d218903 100644 --- a/programs/develop/cedit/SRC/Tabs.ob07 +++ b/programs/develop/cedit/SRC/Tabs.ob07 @@ -24,6 +24,8 @@ IMPORT List, K := KolibriOS, RW, U := Utils; CONST btnID* = 100; + btnLeft* = btnID - 1; + btnRight* = btnID - 2; tabHeight* = 22; curTabHeight = 26; scrWidth = 15; @@ -116,10 +118,10 @@ BEGIN K.DrawRect(x, y - (curTabHeight - tabHeight), t.width + (2*scrWidth + 2), t.height + (curTabHeight - tabHeight) - 1, K.winColor); IF Width(t, 0, t.strings.count - 1) > t.width THEN INC(x, 2*scrWidth); - K.DeleteButton(btnID - 1); - K.DeleteButton(btnID - 2); - K.CreateButton(btnID - 1, t.x, y, scrWidth, t.height - 1, K.btnColor, "<"); - K.CreateButton(btnID - 2, t.x + scrWidth, y, scrWidth, t.height - 1, K.btnColor, ">"); + K.DeleteButton(btnLeft); + K.DeleteButton(btnRight); + K.CreateButton(btnLeft, t.x, y, scrWidth, t.height - 1, K.btnColor, "<"); + K.CreateButton(btnRight, t.x + scrWidth, y, scrWidth, t.height - 1, K.btnColor, ">"); scroll := TRUE ELSE t.first := 0; @@ -199,7 +201,8 @@ VAR item: List.tItem; BEGIN item := List.getItem(t.strings, n); - List.delete(t.strings, item) + List.delete(t.strings, item); + DISPOSE(item) END delete; diff --git a/programs/develop/cedit/SRC/Text.ob07 b/programs/develop/cedit/SRC/Text.ob07 index 09ef615b88..10171a8dcf 100644 --- a/programs/develop/cedit/SRC/Text.ob07 +++ b/programs/develop/cedit/SRC/Text.ob07 @@ -2398,9 +2398,7 @@ END resize; PROCEDURE destroy* (VAR text: tText); BEGIN IF search(text, "", FALSE, FALSE) THEN END; - WHILE text.last # NIL DO - DelLine(text, text.last(tLine)) - END; + ChangeLog.destroy(text.chLog); DISPOSE(text.foundList); DISPOSE(text.cursor); DISPOSE(text.select2); diff --git a/programs/develop/cedit/SRC/Timer.ob07 b/programs/develop/cedit/SRC/Timer.ob07 deleted file mode 100644 index b64b400744..0000000000 --- a/programs/develop/cedit/SRC/Timer.ob07 +++ /dev/null @@ -1,80 +0,0 @@ -(* - Copyright 2021 Anton Krotov - - This file is part of CEdit. - - CEdit is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - CEdit is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with CEdit. If not, see . -*) - -MODULE Timer; - -IMPORT SYSTEM, K := KolibriOS, KOSAPI, Ini; - -VAR - stack: ARRAY 1024*64 OF INTEGER; - ID*, n*, time, cnt: INTEGER; - enabled: BOOLEAN; - msg: ARRAY 3 OF INTEGER; - - -PROCEDURE kill*; -BEGIN - enabled := FALSE; - INC(n) -END kill; - - -PROCEDURE [stdcall] main (mainTID: INTEGER); -CONST - step = 5; -BEGIN - msg[0] := ID; - msg[1] := 12; - WHILE TRUE DO - K.Pause(step); - IF KOSAPI.sysfunc3(18, 21, mainTID) = 0 THEN - ID := 0; - K.Exit - END; - IF enabled THEN - DEC(cnt, step); - IF cnt <= 0 THEN - K.SendIPC(mainTID, msg); - cnt := time - END - END - END -END main; - - -PROCEDURE create* (mainTID: INTEGER); -BEGIN - time := Ini.blink; - cnt := time; - enabled := TRUE; - IF ID = 0 THEN - stack[LEN(stack) - 1] := mainTID; - ID := K.CreateThread(SYSTEM.ADR(main), stack) - ELSE - INC(n); - msg[2] := n - END -END create; - - -BEGIN - ID := 0; - msg[2] := 0; - n := 0; -END Timer. \ No newline at end of file diff --git a/programs/develop/cedit/SRC/Toolbar.ob07 b/programs/develop/cedit/SRC/Toolbar.ob07 new file mode 100644 index 0000000000..4f11805e7a --- /dev/null +++ b/programs/develop/cedit/SRC/Toolbar.ob07 @@ -0,0 +1,151 @@ +(* + Copyright 2021 Anton Krotov + + This file is part of CEdit. + + CEdit is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + CEdit is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with CEdit. If not, see . +*) + +MODULE Toolbar; + +IMPORT + Icons, K := KolibriOS; + +CONST + max = 14; + + BtnSize* = 24; + BtnInter = 5; + DelimSize = 7; + IconPad = (BtnSize - Icons.SIZE) DIV 2; + +TYPE + tButtonText = ARRAY 4 OF CHAR; + + tButton = RECORD + btn, icon, x: INTEGER; + text: tButtonText; + enabled: BOOLEAN + END; + + tToolbar* = RECORD + buttons: ARRAY max OF tButton; + x, y, cnt, width: INTEGER; + icons, grayIcons: INTEGER + END; + + +PROCEDURE drawIcons* (toolbar: tToolbar); +VAR + i, icons, color: INTEGER; + button: tButton; +BEGIN + i := 0; + WHILE i < toolbar.cnt DO + button := toolbar.buttons[i]; + IF button.btn # 0 THEN + IF button.enabled THEN + icons := toolbar.icons; + color := K.textToolbarColor + ELSE + icons := toolbar.grayIcons; + color := K.disTextToolbarColor + END; + IF button.icon # -1 THEN + Icons.draw(icons, button.icon, button.x + IconPad, toolbar.y + IconPad) + ELSE + K.DrawRect(button.x, toolbar.y, BtnSize, BtnSize, K.toolbarColor); + K.DrawText69(button.x + (BtnSize - LENGTH(button.text)*6) DIV 2, toolbar.y + (BtnSize - 9) DIV 2 + 2, color, button.text) + END + END; + INC(i) + END +END drawIcons; + + +PROCEDURE draw* (VAR toolbar: tToolbar); +VAR + i, x, y, btn: INTEGER; + button: tButton; +BEGIN + Icons.get(toolbar.icons, toolbar.grayIcons); + i := 0; + WHILE i < toolbar.cnt DO + button := toolbar.buttons[i]; + btn := button.btn; + IF btn # 0 THEN + x := button.x; + y := toolbar.y; + K.DrawRect(x, y, BtnSize, BtnSize, K.toolbarColor); + K.DrawLine(x, y + BtnSize, x + BtnSize, y + BtnSize, K.shadowColor); + K.DrawLine(x + BtnSize, y, x + BtnSize, y + BtnSize, K.shadowColor); + K.CreateButton(btn + ORD({30}), x, y, BtnSize, BtnSize, K.btnColor, "") + END; + INC(i) + END; + drawIcons(toolbar) +END draw; + + +PROCEDURE enable* (VAR toolbar: tToolbar; btn: INTEGER; value: BOOLEAN); +VAR + i: INTEGER; +BEGIN + i := 0; + WHILE (i < toolbar.cnt) & (toolbar.buttons[i].btn # btn) DO + INC(i) + END; + IF i < toolbar.cnt THEN + toolbar.buttons[i].enabled := value + END +END enable; + + +PROCEDURE add* (VAR toolbar: tToolbar; btn, icon: INTEGER; text: tButtonText); +VAR + button: tButton; +BEGIN + ASSERT(toolbar.cnt < max); + button.btn := btn; + button.icon := icon; + button.x := toolbar.width; + button.text := text; + button.enabled := TRUE; + toolbar.buttons[toolbar.cnt] := button; + INC(toolbar.cnt); + IF btn # 0 THEN + INC(toolbar.width, BtnSize + BtnInter) + ELSE + INC(toolbar.width, DelimSize) + END +END add; + + +PROCEDURE delimiter* (VAR toolbar: tToolbar); +BEGIN + add(toolbar, 0, 0, "") +END delimiter; + + +PROCEDURE create* (VAR toolbar: tToolbar; x, y: INTEGER); +BEGIN + toolbar.x := x; + toolbar.y := y; + toolbar.cnt := 0; + toolbar.width := x; + Icons.get(toolbar.icons, toolbar.grayIcons) +END create; + + +END Toolbar. \ No newline at end of file