Subversion Repositories Kolibri OS

Rev

Rev 9060 | Rev 9174 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 9060 Rev 9073
Line 26... Line 26...
26
    CB := Clipboard, Languages,
26
    CB := Clipboard, Languages,
27
    ChangeLog, Scroll,
27
    ChangeLog, Scroll,
28
    RW, Ini, box_lib, Icons, Tabs;
28
    RW, Ini, box_lib, Icons, Tabs;
Line 29... Line 29...
29
 
29
 
30
CONST
30
CONST
Line 31... Line 31...
31
    header = "CEdit (12-jul-2021)";
31
    header = "CEdit (17-jul-2021)";
32
 
32
 
Line 33... Line 33...
33
    ShellFilter = "";
33
    ShellFilter = "";
Line 52... Line 52...
52
    btnDown = 31;
52
    btnDown = 31;
53
    btnLeft = 32;
53
    btnLeft = 32;
54
    btnRight = 33;
54
    btnRight = 33;
55
    btnYes = 40;
55
    btnYes = 40;
56
    btnNo = 41;
56
    btnNo = 41;
57
    btnFindEdit = 50;
-
 
58
    btnReplaceEdit = 51;
-
 
59
    btnGotoEdit = 52;
-
 
60
    btnFindNext = 60;
57
    btnFindNext = 60;
61
    btnReplace = 61;
58
    btnReplace = 61;
62
    btnReplaceAll = 62;
59
    btnReplaceAll = 62;
63
    btnGoto = 63;
60
    btnGoto = 63;
64
    btnCloseFind = 64;
61
    btnCloseFind = 64;
-
 
62
    btnHideFind = 65;
Line 65... Line 63...
65
 
63
 
66
    btnFile = 70;
64
    btnFile = 70;
67
    btnEdit = 71;
65
    btnEdit = 71;
68
    btnEncoding = 72;
66
    btnEncoding = 72;
Line 82... Line 80...
82
 
80
 
83
    TOP = btnTop + toolBtnSize + 10 + Tabs.tabHeight;
81
    TOP = btnTop + toolBtnSize + 10 + Tabs.tabHeight;
84
    RIGHT = scrollWidth - 2;
82
    RIGHT = scrollWidth - 2;
Line 85... Line 83...
85
    BOTTOM = scrollWidth + 18;
83
    BOTTOM = scrollWidth + 18;
Line 86... Line 84...
86
 
84
 
87
    minWinWidth = 635; minWinHeight = 542;
85
    minWinWidth = 635; minWinHeight = 538;
88
 
86
 
89
    SEARCH_PADDING = 10;
87
    SEARCH_PADDING = 10;
Line 144... Line 142...
144
    menuUTF8 = 61;
142
    menuUTF8 = 61;
145
    menuCP866 = 62;
143
    menuCP866 = 62;
146
    menuWin1251 = 63;
144
    menuWin1251 = 63;
Line 147... Line 145...
147
 
145
 
-
 
146
    menuPipet = 70;
148
    menuPipet = 70;
147
    menuBoard = 71;
Line 149... Line 148...
149
    menuSysFunc = 71;
148
    menuSysFunc = 72;
Line 150... Line 149...
150
 
149
 
Line 159... Line 158...
159
    text: T.tText;
158
    text: T.tText;
160
    texts: ARRAY maxTexts OF T.tText;
159
    texts: ARRAY maxTexts OF T.tText;
161
    textsCount, curText: INTEGER;
160
    textsCount, curText: INTEGER;
Line 162... Line 161...
162
 
161
 
163
    winWidth, winHeight: INTEGER;
-
 
164
    shift: SET;
162
    winWidth, winHeight: INTEGER;
165
    AppPath, runScript, buildScript, debugScript: RW.tFileName;
163
    AppPath, runScript, buildScript, debugScript: RW.tFileName;
166
    OD: OpenDlg.Dialog;
164
    OD: OpenDlg.Dialog;
Line 167... Line 165...
167
    confirm, notFound, search, modified: BOOLEAN;
165
    confirm, notFound, search, searchOpened, modified: BOOLEAN;
168
 
166
 
169
    switch: BOOLEAN;
167
    switch, closing: BOOLEAN;
170
    leftButton, VScroll, HScroll: BOOLEAN;
168
    leftButton, VScroll, HScroll: BOOLEAN;
Line 171... Line 169...
171
    vScroll, hScroll: Scroll.tScroll;
169
    vScroll, hScroll: Scroll.tScroll;
Line 213... Line 211...
213
    IF value THEN
211
    IF value THEN
214
        edit.flags := ORD(BITS(edit.flags) + {1})
212
        edit.flags := ORD(BITS(edit.flags) + {1})
215
    ELSE
213
    ELSE
216
        edit.flags := ORD(BITS(edit.flags) - {1})
214
        edit.flags := ORD(BITS(edit.flags) - {1})
217
    END;
215
    END;
218
    IF search THEN
216
    IF search & searchOpened THEN
219
        box_lib.edit_box_draw(edit)
217
        box_lib.edit_box_draw(edit)
220
    END
218
    END
221
END EditBox_SetFocus;
219
END EditBox_SetFocus;
Line -... Line 220...
-
 
220
 
-
 
221
 
-
 
222
PROCEDURE SetFocus (edit: box_lib.edit_box; value: BOOLEAN);
-
 
223
BEGIN
-
 
224
    EditBox_SetFocus(FindEdit, FALSE);
-
 
225
    EditBox_SetFocus(ReplaceEdit, FALSE);
-
 
226
    EditBox_SetFocus(GotoEdit, FALSE);
-
 
227
    EditBox_SetFocus(edit, value)
-
 
228
END SetFocus;
222
 
229
 
223
 
230
 
224
PROCEDURE Rect (left, top, right, bottom, color: INTEGER);
231
PROCEDURE Rect (left, top, right, bottom, color: INTEGER);
225
BEGIN
232
BEGIN
226
    K.DrawLine(left, top, right, top, color);
233
    K.DrawLine(left, top, right, top, color);
Line 254... Line 261...
254
PROCEDURE NotFound;
261
PROCEDURE NotFound;
255
BEGIN
262
BEGIN
256
    IF notFound THEN
263
    IF notFound THEN
257
        Message("not found");
264
        Message("not found");
258
        notFound := FALSE;
265
        notFound := FALSE;
259
        EditBox_SetFocus(FindEdit, TRUE);
266
        SetFocus(FindEdit, TRUE)
260
        EditBox_SetFocus(ReplaceEdit, FALSE);
-
 
261
        EditBox_SetFocus(GotoEdit, FALSE)
-
 
262
    END
267
    END
263
END NotFound;
268
END NotFound;
Line 264... Line 269...
264
 
269
 
Line 271... Line 276...
271
        s := "replaced: ";
276
        s := "replaced: ";
272
        U.int2str(replaced, s1);
277
        U.int2str(replaced, s1);
273
        U.append(s, s1);
278
        U.append(s, s1);
274
        Message(s);
279
        Message(s);
275
        replaced := 0;
280
        replaced := 0;
276
        EditBox_SetFocus(FindEdit, TRUE);
281
        SetFocus(FindEdit, TRUE)
277
        EditBox_SetFocus(ReplaceEdit, FALSE);
-
 
278
        EditBox_SetFocus(GotoEdit, FALSE)
-
 
279
    END
282
    END
280
END Replaced;
283
END Replaced;
Line 281... Line 284...
281
 
284
 
Line 348... Line 351...
348
PROCEDURE DrawState (text: T.tText; width, height: INTEGER);
351
PROCEDURE DrawState (text: T.tText; width, height: INTEGER);
349
VAR
352
VAR
350
    y: INTEGER;
353
    y: INTEGER;
351
BEGIN
354
BEGIN
352
    y := (btnHeight - fontHeight) DIV 2 + btnTop;
355
    y := (btnHeight - fontHeight) DIV 2 + btnTop;
353
    K.DrawRect(width - 12*fontWidth, y, 12*fontWidth, fontHeight, K.winColor);
356
    K.DrawRect(width - 16*fontWidth, y, 16*fontWidth, fontHeight, K.winColor);
354
    CASE text.enc OF
-
 
355
    |E.UTF8:    K.DrawText866(width -  5*fontWidth, y, K.textColor, "UTF-8")
-
 
356
    |E.UTF8BOM: K.DrawText866(width -  9*fontWidth, y, K.textColor, "UTF-8-BOM")
-
 
357
    |E.CP866:   K.DrawText866(width -  5*fontWidth, y, K.textColor, "CP866")
-
 
358
    |E.W1251:   K.DrawText866(width - 12*fontWidth, y, K.textColor, "Windows-1251")
357
    K.DrawText(width - LENGTH(E.names[text.enc])*fontWidth, y, K.textColor, E.names[text.enc]);
359
    END;
-
 
360
 
-
 
361
    y := height - (BOTTOM - scrollWidth) + (BOTTOM - scrollWidth - 16) DIV 2;
358
    y := height - (BOTTOM - scrollWidth) + (BOTTOM - scrollWidth - 16) DIV 2;
362
    K.DrawRect(LEFT + 16*fontWidth, TOP + canvas.height + scrollWidth - 1, width - LEFT - 24*fontWidth, BOTTOM - scrollWidth + 1, K.winColor);
359
    K.DrawRect(LEFT + 16*fontWidth, TOP + canvas.height + scrollWidth - 1, width - LEFT - 24*fontWidth, BOTTOM - scrollWidth + 1, K.winColor);
363
    K.DrawText866(LEFT + 16*fontWidth, y, K.textColor, text.fileName);
360
    K.DrawText866(LEFT + 16*fontWidth, y, K.textColor, text.fileName);
364
    WriteModified(width - 8*fontWidth, y)
361
    WriteModified(width - 8*fontWidth, y)
365
END DrawState;
362
END DrawState;
Line 371... Line 368...
371
BEGIN
368
BEGIN
372
    IF text # NIL THEN
369
    IF text # NIL THEN
373
        IF confirm THEN
370
        IF confirm THEN
374
            K.DeleteButton(btnYes);
371
            K.DeleteButton(btnYes);
375
            K.DeleteButton(btnNo);
372
            K.DeleteButton(btnNo);
376
            confirm := FALSE
373
            confirm := FALSE;
-
 
374
            closing := FALSE
377
        END;
375
        END;
378
        IF ~search THEN
376
        IF ~search OR (searchText = "") THEN
379
            T.wordSel(text)
377
            T.wordSel(text)
380
        END;
378
        END;
381
        K.ClientSize(width, height);
379
        K.ClientSize(width, height);
382
        IF switch THEN
380
        IF switch THEN
383
            DrawState(text, width, height);
381
            DrawState(text, width, height);
Line 448... Line 446...
448
    K.DrawLine(right - 15, top + 6, right - 6, top + 15, 0FFFFFFH);
446
    K.DrawLine(right - 15, top + 6, right - 6, top + 15, 0FFFFFFH);
449
    K.DrawLine(right - 15, top + 14, right - 6, top + 5, 0FFFFFFH);
447
    K.DrawLine(right - 15, top + 14, right - 6, top + 5, 0FFFFFFH);
450
    K.DrawLine(right - 15, top + 15, right - 5, top + 5, 0FFFFFFH);
448
    K.DrawLine(right - 15, top + 15, right - 5, top + 5, 0FFFFFFH);
451
    K.DrawLine(right - 14, top + 15, right - 5, top + 6, 0FFFFFFH);
449
    K.DrawLine(right - 14, top + 15, right - 5, top + 6, 0FFFFFFH);
Line -... Line 450...
-
 
450
 
-
 
451
    K.CreateButton(btnHideFind, right - 40, top, 20, 20, K.btnColor, "");
-
 
452
    K.DrawLine(right - 34, top + 14, right - 26, top + 14, K.btnTextColor);
-
 
453
    K.DrawLine(right - 34, top + 15, right - 26, top + 15, K.btnTextColor);
452
 
454
 
453
    INC(top, 15);
455
    INC(top, 15);
454
    INC(left, SEARCH_PADDING);
456
    INC(left, SEARCH_PADDING);
455
    K.DrawText866(left, top, K.textColor, "find");
457
    K.DrawText866(left, top, K.textColor, "find");
456
    K.DrawText866(left, top + 55, K.textColor, "replace with");
-
 
457
    K.CreateButton(btnFindEdit + ORD({30}), left, top + 20, EditBox_Width, fontHeight + 5, 0, "");
-
 
458
    K.CreateButton(btnReplaceEdit + ORD({30}), left, top + 75, EditBox_Width, fontHeight + 5, 0, "");
458
    K.DrawText866(left, top + 55, K.textColor, "replace with");
459
    K.DrawText866(left, top + 330, K.textColor, "go to line");
-
 
460
    K.CreateButton(btnGotoEdit + ORD({30}), left, top + 350, EditBox_Width, fontHeight + 5, 0, "");
459
    K.DrawText866(left, top + 330, K.textColor, "go to line");
461
    BKW.top_s := BKW.top_s MOD 65536 + (top + 110) * 65536;
460
    BKW.top_s := BKW.top_s MOD 65536 + (top + 110) * 65536;
462
    CS.top_s := CS.top_s MOD 65536 + (top + 140) * 65536;
461
    CS.top_s := CS.top_s MOD 65536 + (top + 140) * 65536;
463
    WH.top_s := WH.top_s MOD 65536 + (top + 170) * 65536;
462
    WH.top_s := WH.top_s MOD 65536 + (top + 170) * 65536;
464
    BKW.left_s := BKW.left_s MOD 65536 + left * 65536;
463
    BKW.left_s := BKW.left_s MOD 65536 + left * 65536;
Line 584... Line 583...
584
 
583
 
585
        K.PutPixel(LEFT + canvas.width + scrollWidth - 2, TOP - 1, K.winColor);
584
        K.PutPixel(LEFT + canvas.width + scrollWidth - 2, TOP - 1, K.winColor);
Line 586... Line 585...
586
        K.PutPixel(LEFT, TOP + canvas.height + scrollWidth - 2, K.winColor);
585
        K.PutPixel(LEFT, TOP + canvas.height + scrollWidth - 2, K.winColor);
587
 
586
 
588
        DrawState(text, width, height);
587
        DrawState(text, width, height);
589
        IF search THEN
588
        IF search & searchOpened THEN
590
            SearchPanel(searchLeft, TOP)
589
            SearchPanel(searchLeft, TOP)
591
        END;
590
        END;
592
        Tabs.draw(tabs);
591
        Tabs.draw(tabs);
Line 608... Line 607...
608
    x := mouseX - winX - cliX - LEFT;
607
    x := mouseX - winX - cliX - LEFT;
609
    y := mouseY - winY - cliY - TOP;
608
    y := mouseY - winY - cliY - TOP;
610
END mouse;
609
END mouse;
Line 611... Line 610...
611
 
610
 
612
 
611
 
613
PROCEDURE getKBState;
612
PROCEDURE getKBState (VAR shift, ctrl: BOOLEAN);
614
VAR
613
VAR
615
    kbState: SET;
614
    kbState: SET;
616
BEGIN
615
BEGIN
617
    kbState := K.GetControlKeys();
-
 
618
    IF {0, 1} * kbState # {} THEN
-
 
619
        INCL(shift, T.SHIFT)
-
 
620
    ELSE
-
 
621
        EXCL(shift, T.SHIFT)
-
 
622
    END;
616
    kbState := K.GetControlKeys();
623
 
-
 
624
    IF {2, 3} * kbState # {} THEN
-
 
625
        INCL(shift, T.CTRL)
-
 
626
    ELSE
-
 
627
        EXCL(shift, T.CTRL)
617
    shift := {0, 1} * kbState # {};
Line 628... Line 618...
628
    END
618
    ctrl := {2, 3} * kbState # {};
629
END getKBState;
619
END getKBState;
Line 790... Line 780...
790
 
780
 
791
PROCEDURE closeFile (conf: BOOLEAN; n: INTEGER);
781
PROCEDURE closeFile (conf: BOOLEAN; n: INTEGER);
792
VAR
782
VAR
793
    i: INTEGER;
783
    i: INTEGER;
794
BEGIN
784
BEGIN
795
    IF text.modified & conf THEN
785
    IF texts[n].modified & conf THEN
796
        Confirm
786
        Confirm
797
    ELSE
787
    ELSE
798
        Tabs.delete(tabs, n);
788
        Tabs.delete(tabs, n);
799
        FOR i := n + 1 TO textsCount - 1 DO
789
        FOR i := n + 1 TO textsCount - 1 DO
Line 852... Line 842...
852
    END
842
    END
853
    RETURN i
843
    RETURN i
854
END getFileNum;
844
END getFileNum;
Line -... Line 845...
-
 
845
 
-
 
846
 
-
 
847
PROCEDURE SwitchTab (n: INTEGER);
-
 
848
BEGIN
-
 
849
    curText := n;
-
 
850
    Tabs.switch(tabs, n);
-
 
851
    Switch(texts[n]);
-
 
852
    draw_window
-
 
853
END SwitchTab;
855
 
854
 
856
 
855
 
857
PROCEDURE open;
856
PROCEDURE open;
858
VAR
857
VAR
859
    fileName: RW.tFileName;
858
    fileName: RW.tFileName;
Line 872... Line 871...
872
                ELSE
871
                ELSE
873
                    insert(textsCount, nov);
872
                    insert(textsCount, nov);
874
                    T.SetPos(nov, 0, 0)
873
                    T.SetPos(nov, 0, 0)
875
                END
874
                END
876
            ELSE
875
            ELSE
877
                curText := n;
-
 
878
                Tabs.switch(tabs, n);
-
 
879
                Switch(texts[n]);
876
                SwitchTab(n)
880
                draw_window
-
 
881
            END
877
            END
882
        END
878
        END
883
    ELSE
879
    ELSE
884
        error("'cedit: too many files' -E")
880
        error("'cedit: too many files' -E")
885
    END
881
    END
Line 929... Line 925...
929
 
925
 
930
 
926
 
931
PROCEDURE Search;
927
PROCEDURE Search;
-
 
928
BEGIN
932
BEGIN
929
    search := ~search;
-
 
930
    LEFT := searchLeft;
933
    search := ~search;
931
    IF search THEN
934
    IF search THEN
932
        searchOpened := TRUE;
935
        LEFT := searchLeft + EditBox_Width + SEARCH_PADDING*2 + 5;
933
        INC(LEFT, EditBox_Width + SEARCH_PADDING*2 + 5);
936
        IF T.search(text, searchText, cs, whole) THEN END
-
 
937
    ELSE
934
        IF T.search(text, searchText, cs, whole) THEN END
938
        LEFT := searchLeft;
935
    ELSE
939
        IF T.search(text, "", FALSE, FALSE) THEN END
936
        IF T.search(text, "", FALSE, FALSE) THEN END
940
    END;
-
 
941
    EditBox_SetFocus(FindEdit, search);
-
 
942
    EditBox_SetFocus(ReplaceEdit, FALSE);
937
    END;
943
    EditBox_SetFocus(GotoEdit, FALSE);
938
    SetFocus(FindEdit, search);
944
    resize;
939
    resize;
Line 945... Line 940...
945
    draw_window
940
    draw_window
946
END Search;
941
END Search;
947
 
942
 
-
 
943
 
948
 
944
PROCEDURE click (x, y: INTEGER): INTEGER;
-
 
945
VAR
949
PROCEDURE click (x, y: INTEGER): INTEGER;
946
    scrollX, scrollY: INTEGER;
950
VAR
947
    shift, ctrl: BOOLEAN;
951
    scrollX, scrollY: INTEGER;
948
BEGIN
952
BEGIN
-
 
953
    IF (0 <= x) & (x < canvas.width) & (0 <= y) & (y < canvas.height) THEN
-
 
954
        leftButton := TRUE;
949
    getKBState(shift, ctrl);
955
        EditBox_SetFocus(FindEdit, FALSE);
950
    IF (0 <= x) & (x < canvas.width) & (0 <= y) & (y < canvas.height) THEN
956
        EditBox_SetFocus(ReplaceEdit, FALSE);
951
        leftButton := TRUE;
957
        EditBox_SetFocus(GotoEdit, FALSE);
952
        SetFocus(FindEdit, FALSE);
958
        IF ~(T.SHIFT IN shift) THEN
953
        IF ~shift THEN
959
            T.resetSelect(text)
954
            T.resetSelect(text)
960
        END;
955
        END;
961
        T.mouse(text, x, y);
-
 
962
        repaint
-
 
963
    ELSIF (canvas.width < x) & (x < canvas.width + scrollWidth) & (scrollWidth < y) & (y < canvas.height - scrollWidth) THEN
956
        T.mouse(text, x, y);
964
        VScroll := TRUE;
957
        repaint
965
        DEC(x, canvas.width);
958
    ELSIF (canvas.width < x) & (x < canvas.width + scrollWidth) & (scrollWidth < y) & (y < canvas.height - scrollWidth) THEN
966
        DEC(y, scrollWidth);
959
        VScroll := TRUE;
967
        Scroll.mouse(vScroll, x, y);
960
        Scroll.mouse(vScroll, x - canvas.width, y - scrollWidth);
968
        T.getScroll(text, scrollX, scrollY);
961
        T.getScroll(text, scrollX, scrollY);
969
        T.scroll(text, 0, vScroll.value - scrollY);
-
 
970
        repaint
-
 
971
    ELSIF (scrollWidth < x) & (x < canvas.width - scrollWidth) & (canvas.height < y) & (y < canvas.height + scrollWidth) THEN
962
        T.scroll(text, 0, vScroll.value - scrollY);
972
        HScroll := TRUE;
963
        repaint
973
        DEC(x, scrollWidth);
964
    ELSIF (scrollWidth < x) & (x < canvas.width - scrollWidth) & (canvas.height < y) & (y < canvas.height + scrollWidth) THEN
974
        DEC(y, canvas.height);
965
        HScroll := TRUE;
975
        Scroll.mouse(hScroll, x, y);
966
        Scroll.mouse(hScroll, x - scrollWidth, y - canvas.height);
976
        T.getScroll(text, scrollX, scrollY);
967
        T.getScroll(text, scrollX, scrollY);
Line 989... Line 980...
989
    Scroll.MouseUp(vScroll);
980
    Scroll.MouseUp(vScroll);
990
    Scroll.MouseUp(hScroll);
981
    Scroll.MouseUp(hScroll);
991
END LeftButtonUp;
982
END LeftButtonUp;
Line 992... Line 983...
992
 
983
 
993
 
984
 
994
PROCEDURE close;
985
PROCEDURE Close;
995
VAR
986
VAR
-
 
987
    cont: BOOLEAN;
996
    cont: BOOLEAN;
988
BEGIN
997
BEGIN
989
    closing := TRUE;
998
    cont := TRUE;
990
    cont := TRUE;
999
    WHILE (textsCount > 0) & cont DO
991
    WHILE (textsCount > 0) & cont DO
1000
        IF text.modified THEN
992
        IF text.modified THEN
1001
            Confirm;
993
            Confirm;
1002
            cont := FALSE
994
            cont := FALSE
1003
        ELSE
995
        ELSE
1004
            closeFile(FALSE, curText);
996
            closeFile(FALSE, curText);
1005
            repaint
997
            repaint
1006
        END
998
        END
Line 1007... Line 999...
1007
    END
999
    END
1008
END close;
1000
END Close;
1009
 
1001
 
Line 1029... Line 1021...
1029
        K.Run("/rd/1/@open", script)
1021
        K.Run("/rd/1/@open", script)
1030
    END
1022
    END
1031
END Script;
1023
END Script;
Line -... Line 1024...
-
 
1024
 
-
 
1025
 
-
 
1026
PROCEDURE ShowSearchPanel;
-
 
1027
BEGIN
-
 
1028
    IF ~search THEN
-
 
1029
        Search
-
 
1030
    ELSIF ~searchOpened THEN
-
 
1031
        search := FALSE;
-
 
1032
        Search
-
 
1033
    END
-
 
1034
END ShowSearchPanel;
1032
 
1035
 
1033
 
1036
 
1034
PROCEDURE receiveIPC;
1037
PROCEDURE receiveIPC;
1035
BEGIN
1038
BEGIN
1036
    IF IPC[0] # Menu.lastTID THEN
1039
    IF IPC[0] # Menu.lastTID THEN
1037
        IPC[2] := 0
1040
        IPC[2] := 0
1038
    END;
1041
    END;
1039
    CASE IPC[2] OF
1042
    CASE IPC[2] OF
1040
    |0:
1043
    |0:
1041
    |menuCut:       T.key(text, ORD("X"), {T.CTRL})
1044
    |menuCut:       T.key(text, ORD("X"), FALSE, TRUE)
1042
    |menuCopy:      T.key(text, ORD("C"), {T.CTRL})
1045
    |menuCopy:      T.key(text, ORD("C"), FALSE, TRUE)
1043
    |menuPaste:     T.key(text, ORD("V"), {T.CTRL})
1046
    |menuPaste:     T.key(text, ORD("V"), FALSE, TRUE)
Line 1044... Line 1047...
1044
    |menuDelete:    T.key(text, 46, {})
1047
    |menuDelete:    T.key(text,       46, FALSE, FALSE)
1045
    |menuSelectAll: T.key(text, ORD("A"), {T.CTRL})
1048
    |menuSelectAll: T.key(text, ORD("A"), FALSE, TRUE)
1046
 
1049
 
1047
    |menuNew:
1050
    |menuNew:
Line 1060... Line 1063...
1060
    |menuClose:
1063
    |menuClose:
1061
        closeFile(TRUE, curText)
1064
        closeFile(TRUE, curText)
1062
    |menuFolder:
1065
    |menuFolder:
1063
        K.Run("/rd/1/File Managers/Eolite", text.fileName)
1066
        K.Run("/rd/1/File Managers/Eolite", text.fileName)
1064
    |menuExit:
1067
    |menuExit:
1065
        close
1068
        Close
1066
    |menuUndo:
1069
    |menuUndo:
1067
        T.undo(text);
1070
        T.undo(text);
1068
        repaint
1071
        repaint
1069
    |menuRedo:
1072
    |menuRedo:
1070
        T.redo(text);
1073
        T.redo(text);
1071
        repaint
1074
        repaint
1072
    |menuSearch:
1075
    |menuSearch:
1073
        IF ~search THEN
1076
        ShowSearchPanel;
1074
            Search
-
 
1075
        END;
-
 
1076
        EditBox_SetFocus(FindEdit, TRUE);
1077
        SetFocus(FindEdit, TRUE)
1077
        EditBox_SetFocus(ReplaceEdit, FALSE);
-
 
1078
        EditBox_SetFocus(GotoEdit, FALSE)
-
 
1079
    |menuGoto:
1078
    |menuGoto:
1080
        IF ~search THEN
1079
        ShowSearchPanel;
1081
            Search
-
 
1082
        END;
-
 
1083
        EditBox_SetFocus(GotoEdit, TRUE);
1080
        SetFocus(GotoEdit, TRUE)
1084
        EditBox_SetFocus(FindEdit, FALSE);
-
 
1085
        EditBox_SetFocus(ReplaceEdit, FALSE)
-
 
1086
    |menuNumbers:
1081
    |menuNumbers:
1087
        T.toggleNumbers(text)
1082
        T.toggleNumbers(text)
1088
    |menuFontSize:
1083
    |menuFontSize:
1089
        IF font = font1 THEN
1084
        IF font = font1 THEN
1090
            font := font2
1085
            font := font2
Line 1126... Line 1121...
1126
        text.enc := E.CP866
1121
        text.enc := E.CP866
1127
    |menuWin1251:
1122
    |menuWin1251:
1128
        text.enc := E.W1251
1123
        text.enc := E.W1251
1129
    |menuPipet:
1124
    |menuPipet:
1130
        K.Run("/rd/1/develop/pipet", "")
1125
        K.Run("/rd/1/develop/pipet", "")
-
 
1126
    |menuBoard:
-
 
1127
        K.Run("/rd/1/develop/board", "")
1131
    |menuSysFunc:
1128
    |menuSysFunc:
1132
        K.Run("/rd/1/docpack", "f")
1129
        K.Run("/rd/1/docpack", "f")
1133
    |menuColors..menuMaxColors:
1130
    |menuColors..menuMaxColors:
1134
        Ini.selectSection(IPC[2] - menuColors)
1131
        Ini.selectSection(IPC[2] - menuColors)
1135
    END;
1132
    END;
Line 1139... Line 1136...
1139
 
1136
 
1140
 
1137
 
1141
PROCEDURE MenuKeyDown (menu: Menu.tMenu; key: INTEGER): BOOLEAN;
1138
PROCEDURE MenuKeyDown (menu: Menu.tMenu; key: INTEGER): BOOLEAN;
-
 
1139
VAR
1142
VAR
1140
    menuItem: INTEGER;
1143
    menuItem: INTEGER;
1141
    shift, ctrl: BOOLEAN;
1144
BEGIN
1142
BEGIN
1145
    menuItem := -1;
1143
    menuItem := -1;
1146
    getKBState;
1144
    getKBState(shift, ctrl);
1147
    IF (T.CTRL IN shift) THEN
1145
    IF ctrl THEN
1148
        CASE key DIV 65536 OF
1146
        CASE key DIV 65536 OF
1149
        |17: menuItem := menuClose
1147
        |17: menuItem := menuClose
1150
        |21: menuItem := menuRedo
1148
        |21: menuItem := menuRedo
Line 1240... Line 1238...
1240
PROCEDURE CreateMenuEncoding (): Menu.tMenu;
1238
PROCEDURE CreateMenuEncoding (): Menu.tMenu;
1241
VAR
1239
VAR
1242
    menu: List.tList;
1240
    menu: List.tList;
1243
BEGIN
1241
BEGIN
1244
    menu := List.create(NIL);
1242
    menu := List.create(NIL);
1245
    Menu.AddMenuItem(menu, menuUTF8BOM, "UTF-8-BOM");
1243
    Menu.AddMenuItem(menu, menuUTF8BOM, E.names[E.UTF8BOM]);
1246
    Menu.AddMenuItem(menu, menuUTF8,    "UTF-8");
1244
    Menu.AddMenuItem(menu, menuUTF8,    E.names[E.UTF8]);
1247
    Menu.AddMenuItem(menu, menuCP866,   "CP866");
1245
    Menu.AddMenuItem(menu, menuCP866,   E.names[E.CP866]);
1248
    Menu.AddMenuItem(menu, menuWin1251, "Windows-1251");
1246
    Menu.AddMenuItem(menu, menuWin1251, E.names[E.W1251]);
1249
    RETURN Menu.create(menu, MenuItemClick, MenuKeyDown)
1247
    RETURN Menu.create(menu, MenuItemClick, MenuKeyDown)
1250
END CreateMenuEncoding;
1248
END CreateMenuEncoding;
Line 1251... Line 1249...
1251
 
1249
 
Line 1311... Line 1309...
1311
VAR
1309
VAR
1312
    menu: List.tList;
1310
    menu: List.tList;
1313
BEGIN
1311
BEGIN
1314
    menu := List.create(NIL);
1312
    menu := List.create(NIL);
1315
    Menu.AddMenuItem(menu, menuPipet,   "pipet");
1313
    Menu.AddMenuItem(menu, menuPipet,   "pipet");
-
 
1314
    Menu.AddMenuItem(menu, menuBoard,   "board");
1316
    Menu.AddMenuItem(menu, menuSysFunc, "system functions");
1315
    Menu.AddMenuItem(menu, menuSysFunc, "system functions");
1317
    RETURN Menu.create(menu, MenuItemClick, MenuKeyDown)
1316
    RETURN Menu.create(menu, MenuItemClick, MenuKeyDown)
1318
END CreateMenuTools;
1317
END CreateMenuTools;
Line 1413... Line 1412...
1413
        Menu.open(menu, x, y)
1412
        Menu.open(menu, x, y)
1414
    END
1413
    END
1415
END ShowMenu;
1414
END ShowMenu;
Line 1416... Line 1415...
1416
 
1415
 
1417
 
1416
 
1418
PROCEDURE main;
-
 
1419
VAR
1417
PROCEDURE KeyDown (key: INTEGER);
1420
    width, height, x, y, scrollX, scrollY, i: INTEGER;
-
 
1421
    key, btn: INTEGER;
-
 
1422
    msState: SET;
-
 
1423
    scroll: INTEGER;
-
 
1424
    err: INTEGER;
-
 
1425
    fileName, filePath: RW.tFileName;
1418
VAR
1426
    cliWidth, cliHeight: INTEGER;
-
 
1427
    resized, middle: BOOLEAN;
1419
    keyCode: INTEGER;
1428
    firstClickX, firstClickY, time: INTEGER;
-
 
1429
BEGIN
-
 
1430
    K.GetSystemColors;
-
 
1431
    Icons.get(icons, grayIcons);
-
 
1432
    modified := FALSE;
-
 
1433
    switch := FALSE;
-
 
1434
    textsCount := 0;
-
 
1435
    curText := 0;
-
 
1436
    mainTID := K.ThreadID();
-
 
1437
    K.SetIPC(IPC);
-
 
1438
    U.ptr2str(K.GetName(), AppPath);
-
 
1439
    Ini.load(AppPath);
-
 
1440
    K.SetEventsMask({0, 1, 2, 5, 6, 31});
-
 
1441
    LeftButtonUp;
-
 
1442
    resized := FALSE;
-
 
1443
    shift := {};
-
 
1444
    K.ScreenSize(winWidth, winHeight);
-
 
1445
    winWidth := (winWidth*80) DIV 100 - (128 + 30);
-
 
1446
    winHeight := winHeight - (128 + 30);
-
 
1447
    winWidth := MAX(winWidth, minWinWidth);
-
 
1448
    winHeight := MAX(winHeight, minWinHeight);
-
 
1449
    cliWidth := winWidth;
-
 
1450
    cliHeight := winHeight;
-
 
1451
    LEFT := searchLeft;
-
 
1452
    canvas := G.CreateCanvas(winWidth - (LEFT + RIGHT + 10), winHeight - (TOP + BOTTOM + 4) - K.SkinHeight());
-
 
1453
    tabs := Tabs.create();
-
 
1454
    Tabs.setArea(tabs, LEFT, TOP - Tabs.tabHeight, canvas.width, Tabs.tabHeight);
-
 
1455
    font1 := G.CreateFont(1, "", {});
-
 
1456
    font2 := G.CreateFont(2, "", {});
-
 
1457
    font := font1;
-
 
1458
    G.SetFont(canvas, font);
-
 
1459
    T.init(NIL);
-
 
1460
    T.setCanvas(canvas);
-
 
1461
    U.ptr2str(K.GetCommandLine(), fileName);
-
 
1462
    context := CreateContextMenu();
-
 
1463
    menuFile := CreateMenuFile();
-
 
1464
    menuEdit := CreateMenuEdit();
1420
    shift, ctrl: BOOLEAN;
1465
    menuEncoding := CreateMenuEncoding();
-
 
1466
    menuView := CreateMenuView();
-
 
1467
    menuSyntax := CreateMenuSyntax();
-
 
1468
    menuProgram := CreateMenuProgram();
-
 
1469
    menuTools := CreateMenuTools();
-
 
1470
    IF fileName = "" THEN
-
 
1471
        text := T.New();
-
 
1472
        filePath := "/rd/1"
-
 
1473
    ELSE
-
 
1474
        text := T.open(fileName, err);
-
 
1475
        IF text = NIL THEN
-
 
1476
            error("'cedit: error opening file' -E");
-
 
1477
            K.Exit
-
 
1478
        ELSE
-
 
1479
            U.getPath(fileName, filePath)
-
 
1480
        END
-
 
1481
    END;
-
 
1482
    OD := OpenDlg.Create(draw_window, OpenDlg.topen, filePath, "");
-
 
1483
    insert(0, text);
-
 
1484
 
-
 
1485
    vScroll := Scroll.create(scrollWidth, canvas.height - scrollWidth*2 + 2);
-
 
1486
    hScroll := Scroll.create(canvas.width - scrollWidth*2, scrollWidth);
1421
BEGIN
1487
    T.resize(canvas.width, canvas.height);
-
 
1488
    T.SetPos(text, 0, 0);
-
 
1489
    confirm := FALSE;
-
 
1490
    notFound := FALSE;
-
 
1491
    search := FALSE;
-
 
1492
    createSearchForm;
-
 
1493
    new_searchText := "";
-
 
1494
    searchText := "";
-
 
1495
    cs := FALSE;
-
 
1496
    whole := FALSE;
-
 
1497
    replaced := 0;
-
 
1498
    Ini.getStr("paths", "build", buildScript);
-
 
1499
    Ini.getStr("paths", "run",   runScript);
-
 
1500
    Ini.getStr("paths", "debug", debugScript);
-
 
1501
    draw_window;
-
 
1502
    repaint;
-
 
1503
    WHILE TRUE DO
-
 
1504
        CASE K.WaitForEvent() OF
-
 
1505
        |1:
-
 
1506
            FOR i := 0 TO 1 DO
-
 
1507
                K.GetSystemColors;
-
 
1508
                Icons.get(icons, grayIcons);
-
 
1509
                IF ~K.RolledUp() THEN
-
 
1510
                    K.ClientSize(width, height);
-
 
1511
                    IF (width # cliWidth) OR (height # cliHeight) THEN
-
 
1512
                        cliWidth := width;
-
 
1513
                        cliHeight := height;
-
 
1514
                        resize;
-
 
1515
                        resized := TRUE;
-
 
1516
                    END;
-
 
1517
                    K.SetEventsMask({0, 1, 2, 5, 6, 31})
-
 
1518
                ELSE
-
 
1519
                    K.SetEventsMask({0, 30, 31})
-
 
1520
                END;
-
 
1521
                draw_window
-
 
1522
            END
-
 
1523
 
-
 
1524
        |2:
-
 
1525
            key := K.GetKey();
1422
    keyCode := key DIV 65536;
1526
            getKBState;
1423
    getKBState(shift, ctrl);
1527
            IF confirm THEN
1424
    IF confirm THEN
1528
                IF key DIV 65536 = 28 THEN (* Enter *)
1425
        IF keyCode = 28 THEN (* Enter *)
1529
                    save(text);
1426
            save(text);
1530
                    IF ~text.modified THEN
1427
            IF ~text.modified THEN
1531
                        closeFile(FALSE, curText)
-
 
1532
                    END;
1428
                closeFile(FALSE, curText)
1533
                    repaint
1429
            END
1534
                END;
1430
        END;
1535
                key := -1
1431
        key := -1
1536
            END;
1432
    ELSE
1537
            IF key DIV 65536 = 61 THEN (* F3 *)
1433
        IF keyCode = 61 THEN (* F3 *)
1538
                key := -1;
1434
            key := -1;
1539
                IF search & (searchText # "") THEN
1435
            IF search & (searchText # "") THEN
1540
                    IF T.SHIFT IN shift THEN
1436
                IF shift THEN
1541
                        notFound := ~T.findNext(text, ~box_lib.check_box_get_value(BKW))
1437
                    notFound := ~T.findNext(text, ~box_lib.check_box_get_value(BKW))
1542
                    ELSE
1438
                ELSE
1543
                        notFound := ~T.findNext(text, box_lib.check_box_get_value(BKW))
1439
                    notFound := ~T.findNext(text, box_lib.check_box_get_value(BKW))
1544
                    END
1440
                END
1545
                END
1441
            END
1546
            ELSIF key DIV 65536 = 60 THEN (* F2 *)
1442
        ELSIF keyCode = 60 THEN (* F2 *)
1547
                key := -1;
1443
            key := -1;
1548
                IF T.CTRL IN shift THEN
1444
            IF ctrl THEN
1549
                    T.toggleLabel(text)
1445
                T.toggleLabel(text)
1550
                ELSE
1446
            ELSE
1551
                    T.gotoLabel(text, ~(T.SHIFT IN shift))
1447
                T.gotoLabel(text, ~shift)
1552
                END
1448
            END
1553
            ELSIF key DIV 65536 = 67 THEN (* F9 *)
1449
        ELSIF keyCode = 67 THEN (* F9 *)
1554
                key := -1;
1450
            key := -1;
1555
                IF T.CTRL IN shift THEN
1451
            IF ctrl THEN
1556
                    Script(buildScript)
1452
                Script(buildScript)
1557
                ELSE
1453
            ELSE
1558
                    Script(runScript)
1454
                Script(runScript)
1559
                END
1455
            END
1560
            ELSIF key DIV 65536 = 1 THEN (* Esc *)
1456
        ELSIF keyCode = 1 THEN (* Esc *)
1561
                key := -1;
1457
            key := -1;
1562
                IF search THEN
1458
            IF search THEN
1563
                    Search
1459
                Search
1564
                END
1460
            END
1565
            ELSIF (key DIV 65536 = 55) & (key DIV 256 MOD 256 = 52) THEN
1461
        ELSIF (keyCode = 55) & (key DIV 256 MOD 256 = 52) THEN (* PrtScn *)
1566
                key := -1 (* PrtScn *)
1462
            key := -1
1567
            ELSIF (T.CTRL IN shift) & (key DIV 65536 = 15) THEN (* ctrl+Tab *)
1463
        ELSIF (keyCode = 15) & ctrl THEN (* ctrl+Tab *)
1568
                key := -1;
-
 
1569
                curText := (curText + 1) MOD textsCount;
-
 
1570
                Tabs.switch(tabs, curText);
-
 
1571
                Switch(texts[curText]);
1464
            key := -1;
1572
                draw_window
1465
            SwitchTab((curText + 1) MOD textsCount)
1573
            ELSIF (T.CTRL IN shift) & (key DIV 65536 = 33) THEN
1466
        ELSIF (keyCode = 33) & ctrl THEN
1574
                key := -1;
-
 
1575
                IF ~search THEN
-
 
1576
                    Search
1467
            key := -1;
1577
                END;
-
 
1578
                EditBox_SetFocus(FindEdit, TRUE);
-
 
1579
                EditBox_SetFocus(ReplaceEdit, FALSE);
1468
            ShowSearchPanel;
1580
                EditBox_SetFocus(GotoEdit, FALSE)
1469
            SetFocus(FindEdit, TRUE)
1581
            ELSIF (T.CTRL IN shift) & (key DIV 65536 = 34) THEN
1470
        ELSIF (keyCode = 34) & ctrl THEN
1582
                key := -1;
-
 
1583
                IF ~search THEN
-
 
1584
                    Search
1471
            key := -1;
1585
                END;
-
 
1586
                EditBox_SetFocus(GotoEdit, TRUE);
-
 
1587
                EditBox_SetFocus(FindEdit, FALSE);
1472
            ShowSearchPanel;
1588
                EditBox_SetFocus(ReplaceEdit, FALSE)
1473
            SetFocus(GotoEdit, TRUE)
1589
            END;
1474
        ELSE
1590
            IF (key # -1) & EditBox_Focus(FindEdit) THEN
1475
            IF EditBox_Focus(FindEdit) THEN
1591
                box_lib.edit_box_key(FindEdit, key);
1476
                box_lib.edit_box_key(FindEdit, key);
1592
                EditBox_GetValue(FindEdit, new_searchText);
1477
                EditBox_GetValue(FindEdit, new_searchText);
1593
                IF new_searchText # searchText THEN
1478
                IF new_searchText # searchText THEN
1594
                    searchText := new_searchText;
1479
                    searchText := new_searchText;
1595
                    notFound := ~T.search(text, searchText, cs, whole)
1480
                    notFound := ~T.search(text, searchText, cs, whole)
1596
                END
1481
                END
1597
            ELSIF (key # -1) & EditBox_Focus(ReplaceEdit) THEN
1482
            ELSIF EditBox_Focus(ReplaceEdit) THEN
1598
                box_lib.edit_box_key(ReplaceEdit, key);
1483
                box_lib.edit_box_key(ReplaceEdit, key);
1599
                EditBox_GetValue(ReplaceEdit, replaceText)
1484
                EditBox_GetValue(ReplaceEdit, replaceText)
1600
            ELSIF (key # -1) & EditBox_Focus(GotoEdit) THEN
1485
            ELSIF EditBox_Focus(GotoEdit) THEN
1601
                IF (key DIV 256) MOD 256 = 13 THEN
1486
                IF (key DIV 256) MOD 256 = 13 THEN
1602
                    goto
1487
                    goto
1603
                ELSE
1488
                ELSE
1604
                    box_lib.edit_box_key(GotoEdit, key)
1489
                    box_lib.edit_box_key(GotoEdit, key)
1605
                END
1490
                END
1606
            ELSIF key # -1 THEN
1491
            ELSE
1607
                CASE key DIV 65536 OF
1492
                CASE keyCode OF
1608
                |73: key := 33
1493
                |73: key := 33
1609
                |81: key := 34
1494
                |81: key := 34
1610
                |71: key := 36
1495
                |71: key := 36
1611
                |79: key := 35
1496
                |79: key := 35
1612
                |72: key := 38
1497
                |72: key := 38
1613
                |80: key := 40
1498
                |80: key := 40
1614
                |75: key := 37
1499
                |75: key := 37
1615
                |77: key := 39
1500
                |77: key := 39
1616
                |82: key := -1 (* insert *)
1501
                |82: key := -1 (* insert *)
1617
                |83: key := 46
1502
                |83: key := 46
1618
                |59, 60, 62..66, 68, 87, 88: key := -1 (* F1, F2, F4..F8, F10, F11, F12 *)
1503
                |59, 62..66, 68, 87, 88: key := -1 (* F1, F4..F8, F10, F11, F12 *)
1619
                ELSE
1504
                ELSE
1620
                    IF (T.CTRL IN shift) THEN
1505
                    IF ctrl THEN
1621
                        CASE key DIV 65536 OF
1506
                        CASE keyCode OF
1622
                        |17: closeFile(TRUE, curText);
1507
                        |17: closeFile(TRUE, curText);
1623
                             key := -2
1508
                             key := -2
1624
                        |21: T.redo(text);
1509
                        |21: T.redo(text);
Line 1645... Line 1530...
1645
                        T.input(text, E.cp866[key DIV 256 MOD 256]);
1530
                        T.input(text, E.cp866[key DIV 256 MOD 256]);
1646
                        key := -1
1531
                        key := -1
1647
                    END
1532
                    END
1648
                END;
1533
                END;
1649
                IF key >= 0 THEN
1534
                IF key >= 0 THEN
1650
                    T.key(text, key, shift)
1535
                    T.key(text, key, shift, ctrl)
-
 
1536
                END
-
 
1537
            END
1651
                END
1538
        END
1652
            END;
1539
    END;
1653
            IF key # -2 THEN
1540
    IF key # -2 THEN
1654
                repaint
1541
        repaint
1655
            END
1542
    END
-
 
1543
END KeyDown;
-
 
1544
 
-
 
1545
 
-
 
1546
PROCEDURE BtnClick;
-
 
1547
VAR
1656
        |3:
1548
    btn: INTEGER;
-
 
1549
    middle, exit: BOOLEAN;
-
 
1550
BEGIN
1657
            btn := K.ButtonCode(middle);
1551
    btn := K.ButtonCode(middle);
1658
            IF (Tabs.btnID <= btn) & (btn <= Tabs.btnID + maxTexts - 1) THEN
1552
    IF (Tabs.btnID <= btn) & (btn <= Tabs.btnID + maxTexts - 1) THEN
1659
                DEC(btn, Tabs.btnID);
1553
        DEC(btn, Tabs.btnID);
1660
                IF middle THEN
1554
        IF middle THEN
1661
                    IF texts[btn].modified THEN
1555
            IF texts[btn].modified THEN
1662
                        curText := btn;
-
 
1663
                        Tabs.switch(tabs, btn);
-
 
1664
                        Switch(texts[btn]);
1556
                SwitchTab(btn)
1665
                        draw_window;
-
 
1666
                    END;
1557
            END;
1667
                    closeFile(TRUE, btn)
1558
            closeFile(TRUE, btn)
1668
                ELSE
1559
        ELSE
1669
                    curText := btn;
-
 
1670
                    Tabs.switch(tabs, btn);
-
 
1671
                    Switch(texts[btn]);
1560
            SwitchTab(btn)
1672
                    draw_window
-
 
1673
                END;
1561
        END;
1674
                btn := 0
1562
        btn := 0
1675
            ELSE
1563
    ELSE
1676
                IF middle THEN
1564
        IF middle THEN
1677
                    btn := 0
1565
            btn := 0
Line 1696... Line 1584...
1696
            |btnProgram:
1584
    |btnProgram:
1697
                ShowMenu(menuProgram)
1585
        ShowMenu(menuProgram)
1698
            |btnTools:
1586
    |btnTools:
1699
                ShowMenu(menuTools)
1587
        ShowMenu(menuTools)
1700
            |btnNo:
1588
    |btnNo:
-
 
1589
        exit := closing;
1701
                closeFile(FALSE, curText);
1590
        closeFile(FALSE, curText);
1702
                repaint
1591
        repaint;
-
 
1592
        IF exit THEN
-
 
1593
            Close
-
 
1594
        END
1703
            |btnYes:
1595
    |btnYes:
-
 
1596
        exit := closing;
1704
                save(text);
1597
        save(text);
1705
                IF ~text.modified THEN
1598
        IF ~text.modified THEN
1706
                    closeFile(FALSE, curText)
1599
            closeFile(FALSE, curText)
1707
                END;
1600
        END;
1708
                repaint
1601
        repaint;
-
 
1602
        IF exit THEN
-
 
1603
            Close
-
 
1604
        END
1709
            |btnClose:
1605
    |btnClose:
1710
                close
1606
        Close
1711
            |btnNew:
1607
    |btnNew:
1712
                NewFile;
1608
        NewFile;
1713
                repaint
1609
        repaint
1714
            |btnOpen:
1610
    |btnOpen:
1715
                open
1611
        open
1716
            |btnSave:
1612
    |btnSave:
1717
                save(text);
1613
        save(text);
1718
                repaint
1614
        repaint
1719
            |btnSearch:
1615
    |btnSearch:
1720
                IF ~search THEN
1616
        ShowSearchPanel
1721
                    Search
-
 
1722
                END
-
 
1723
            |btnCloseFind:
1617
    |btnCloseFind:
1724
                Search
1618
        Search
-
 
1619
    |btnHideFind:
-
 
1620
        SetFocus(FindEdit, FALSE);
-
 
1621
        searchOpened := FALSE;
-
 
1622
        LEFT := searchLeft;
-
 
1623
        resize;
-
 
1624
        draw_window
1725
            |btnUndo:
1625
    |btnUndo:
1726
                T.undo(text);
1626
        T.undo(text);
1727
                repaint
1627
        repaint
1728
            |btnRedo:
1628
    |btnRedo:
1729
                T.redo(text);
1629
        T.redo(text);
Line 1748... Line 1648...
1748
                T.scroll(text, -1, 0);
1648
        T.scroll(text, -1, 0);
1749
                repaint
1649
        repaint
1750
            |btnRight:
1650
    |btnRight:
1751
                T.scroll(text, 1, 0);
1651
        T.scroll(text, 1, 0);
1752
                repaint
1652
        repaint
1753
            |btnFindEdit:
-
 
1754
                EditBox_SetFocus(FindEdit, TRUE);
-
 
1755
                EditBox_SetFocus(ReplaceEdit, FALSE);
-
 
1756
                EditBox_SetFocus(GotoEdit, FALSE)
-
 
1757
            |btnReplaceEdit:
-
 
1758
                EditBox_SetFocus(ReplaceEdit, TRUE);
-
 
1759
                EditBox_SetFocus(FindEdit, FALSE);
-
 
1760
                EditBox_SetFocus(GotoEdit, FALSE)
-
 
1761
            |btnGotoEdit:
-
 
1762
                EditBox_SetFocus(GotoEdit, TRUE);
-
 
1763
                EditBox_SetFocus(FindEdit, FALSE);
-
 
1764
                EditBox_SetFocus(ReplaceEdit, FALSE)
-
 
1765
            |btnFindNext:
1653
    |btnFindNext:
1766
                IF searchText # "" THEN
1654
        IF searchText # "" THEN
1767
                    notFound := ~T.findNext(text, box_lib.check_box_get_value(BKW));
1655
            notFound := ~T.findNext(text, box_lib.check_box_get_value(BKW));
1768
                    repaint
1656
            repaint
1769
                END
1657
        END
Line 1778... Line 1666...
1778
                repaint
1666
        repaint
1779
            |btnGoto:
1667
    |btnGoto:
1780
                goto;
1668
        goto;
1781
                repaint
1669
        repaint
1782
            END
1670
    END
-
 
1671
END BtnClick;
-
 
1672
 
-
 
1673
 
-
 
1674
PROCEDURE MouseEvent (VAR resized: BOOLEAN; VAR firstClickX, firstClickY, time: INTEGER);
-
 
1675
CONST
-
 
1676
    DELAY = 10;
-
 
1677
VAR
-
 
1678
    msState: SET;
-
 
1679
    scroll, x, y, scrollX, scrollY: INTEGER;
-
 
1680
 
-
 
1681
 
-
 
1682
    PROCEDURE EditBox (eb: box_lib.edit_box);
-
 
1683
    VAR
-
 
1684
        focus: BOOLEAN;
-
 
1685
    BEGIN
-
 
1686
        focus := EditBox_Focus(eb);
-
 
1687
        box_lib.edit_box_mouse(eb);
-
 
1688
        IF focus # EditBox_Focus(eb) THEN
-
 
1689
            SetFocus(eb, TRUE)
1783
        |6:
1690
        END
-
 
1691
    END EditBox;
-
 
1692
 
-
 
1693
 
-
 
1694
BEGIN
1784
            Menu.close(menuFile);
1695
    Menu.close(menuFile);
1785
            Menu.close(menuEdit);
1696
    Menu.close(menuEdit);
1786
            Menu.close(menuEncoding);
1697
    Menu.close(menuEncoding);
1787
            Menu.close(menuView);
1698
    Menu.close(menuView);
1788
            Menu.close(menuSyntax);
1699
    Menu.close(menuSyntax);
1789
            Menu.close(menuProgram);
1700
    Menu.close(menuProgram);
1790
            Menu.close(menuTools);
1701
    Menu.close(menuTools);
1791
            Menu.close(context);
1702
    Menu.close(context);
1792
            IF ~resized THEN
1703
    IF ~resized THEN
1793
                getKBState;
-
 
1794
                msState := K.MouseState();
1704
        msState := K.MouseState();
1795
                IF ~(0 IN msState) OR (16 IN msState) THEN
1705
        IF ~(0 IN msState) OR (16 IN msState) THEN
1796
                    LeftButtonUp
1706
            LeftButtonUp
1797
                END;
1707
        END;
1798
                scroll := K.Scroll();
1708
        scroll := K.Scroll();
1799
                IF scroll # 0 THEN
1709
        IF scroll # 0 THEN
1800
                    T.scroll(text, 0, scroll*3);
1710
            T.scroll(text, 0, scroll*3);
1801
                    repaint
1711
            repaint
1802
                END;
1712
        END;
1803
                IF leftButton THEN
1713
        IF leftButton THEN
1804
                    IF K.GetTickCount() - time > 9 THEN
1714
            IF K.GetTickCount() - time >= DELAY THEN
1805
                        mouse(x, y);
1715
                mouse(x, y);
1806
                        T.mouse(text, x, y);
1716
                T.mouse(text, x, y);
1807
                        repaint
1717
                repaint
1808
                    END
1718
            END
1809
                END;
1719
        END;
Line 1843... Line 1753...
1843
                        firstClickY := y;
1753
                firstClickY := y;
1844
                        time := click(firstClickX, firstClickY)
1754
                time := click(firstClickX, firstClickY)
1845
                    END
1755
            END
1846
                END
1756
        END
1847
            END;
1757
    END;
1848
            IF search THEN
1758
    IF search & searchOpened THEN
1849
                IF EditBox_Focus(FindEdit) THEN
1759
        EditBox(FindEdit);
1850
                    box_lib.edit_box_mouse(FindEdit)
-
 
1851
                END;
-
 
1852
                IF EditBox_Focus(ReplaceEdit) THEN
1760
        EditBox(ReplaceEdit);
1853
                    box_lib.edit_box_mouse(ReplaceEdit)
-
 
1854
                END;
-
 
1855
                IF EditBox_Focus(GotoEdit) THEN
1761
        EditBox(GotoEdit);
1856
                    box_lib.edit_box_mouse(GotoEdit)
-
 
1857
                END;
-
 
1858
                box_lib.check_box_mouse2(CS);
1762
        box_lib.check_box_mouse2(CS);
1859
                box_lib.check_box_mouse2(WH);
1763
        box_lib.check_box_mouse2(WH);
1860
                box_lib.check_box_mouse2(BKW);
1764
        box_lib.check_box_mouse2(BKW);
1861
                IF box_lib.check_box_get_value(CS) # cs THEN
1765
        IF box_lib.check_box_get_value(CS) # cs THEN
1862
                    cs := ~cs;
1766
            cs := ~cs;
Line 1868... Line 1772...
1868
                    notFound := ~T.search(text, searchText, cs, whole);
1772
            notFound := ~T.search(text, searchText, cs, whole);
1869
                    repaint
1773
            repaint
1870
                END
1774
        END
1871
            END;
1775
    END;
1872
            resized := FALSE
1776
    resized := FALSE
-
 
1777
END MouseEvent;
-
 
1778
 
-
 
1779
 
-
 
1780
PROCEDURE Redraw (VAR resized: BOOLEAN; VAR width, height, cliWidth, cliHeight: INTEGER);
-
 
1781
VAR
-
 
1782
    i: INTEGER;
-
 
1783
BEGIN
-
 
1784
    K.GetSystemColors;
-
 
1785
    FOR i := 0 TO 1 DO
-
 
1786
        IF ~K.RolledUp() THEN
-
 
1787
            K.ClientSize(width, height);
-
 
1788
            IF (width # cliWidth) OR (height # cliHeight) THEN
-
 
1789
                cliWidth := width;
-
 
1790
                cliHeight := height;
-
 
1791
                resize;
-
 
1792
                resized := TRUE
-
 
1793
            END;
-
 
1794
            K.SetEventsMask({0, 1, 2, 5, 6, 31})
-
 
1795
        ELSE
-
 
1796
            K.SetEventsMask({0, 30, 31})
-
 
1797
        END;
-
 
1798
        draw_window
-
 
1799
    END
-
 
1800
END Redraw;
-
 
1801
 
-
 
1802
 
-
 
1803
PROCEDURE main;
-
 
1804
VAR
-
 
1805
    err: INTEGER;
-
 
1806
    fileName, filePath: RW.tFileName;
-
 
1807
    width, height, cliWidth, cliHeight: INTEGER;
-
 
1808
    resized: BOOLEAN;
-
 
1809
    firstClickX, firstClickY, time: INTEGER;
-
 
1810
BEGIN
-
 
1811
    K.GetSystemColors;
-
 
1812
    Icons.get(icons, grayIcons);
-
 
1813
    modified := FALSE;
-
 
1814
    switch := FALSE;
-
 
1815
    closing := FALSE;
-
 
1816
    textsCount := 0;
-
 
1817
    curText := 0;
-
 
1818
    mainTID := K.ThreadID();
-
 
1819
    K.SetIPC(IPC);
-
 
1820
    U.ptr2str(K.GetName(), AppPath);
-
 
1821
    Ini.load(AppPath);
-
 
1822
    LeftButtonUp;
-
 
1823
    resized := FALSE;
-
 
1824
    K.ScreenSize(winWidth, winHeight);
-
 
1825
    winWidth := (winWidth*80) DIV 100 - (128 + 30);
-
 
1826
    winHeight := winHeight - (128 + 30);
-
 
1827
    winWidth := MAX(winWidth, minWinWidth);
-
 
1828
    winHeight := MAX(winHeight, minWinHeight);
-
 
1829
    cliWidth := winWidth;
-
 
1830
    cliHeight := winHeight;
-
 
1831
    LEFT := searchLeft;
-
 
1832
    canvas := G.CreateCanvas(winWidth - (LEFT + RIGHT + 10), winHeight - (TOP + BOTTOM + 4) - K.SkinHeight());
-
 
1833
    tabs := Tabs.create();
-
 
1834
    Tabs.setArea(tabs, LEFT, TOP - Tabs.tabHeight, canvas.width, Tabs.tabHeight);
-
 
1835
    font1 := G.CreateFont(1, "", {});
-
 
1836
    font2 := G.CreateFont(2, "", {});
-
 
1837
    font := font1;
-
 
1838
    G.SetFont(canvas, font);
-
 
1839
    T.init(NIL);
-
 
1840
    T.setCanvas(canvas);
-
 
1841
    U.ptr2str(K.GetCommandLine(), fileName);
-
 
1842
    context := CreateContextMenu();
-
 
1843
    menuFile := CreateMenuFile();
-
 
1844
    menuEdit := CreateMenuEdit();
-
 
1845
    menuEncoding := CreateMenuEncoding();
-
 
1846
    menuView := CreateMenuView();
-
 
1847
    menuSyntax := CreateMenuSyntax();
-
 
1848
    menuProgram := CreateMenuProgram();
-
 
1849
    menuTools := CreateMenuTools();
-
 
1850
    IF fileName = "" THEN
-
 
1851
        text := T.New();
-
 
1852
        filePath := "/rd/1"
-
 
1853
    ELSE
-
 
1854
        text := T.open(fileName, err);
-
 
1855
        IF text = NIL THEN
-
 
1856
            error("'cedit: error opening file' -E");
-
 
1857
            K.Exit
-
 
1858
        ELSE
-
 
1859
            U.getPath(fileName, filePath)
-
 
1860
        END
-
 
1861
    END;
-
 
1862
    OD := OpenDlg.Create(draw_window, OpenDlg.topen, filePath, "");
-
 
1863
    insert(0, text);
-
 
1864
 
-
 
1865
    vScroll := Scroll.create(scrollWidth, canvas.height - scrollWidth*2 + 2);
-
 
1866
    hScroll := Scroll.create(canvas.width - scrollWidth*2, scrollWidth);
-
 
1867
    T.resize(canvas.width, canvas.height);
-
 
1868
    T.SetPos(text, 0, 0);
-
 
1869
    confirm := FALSE;
-
 
1870
    notFound := FALSE;
-
 
1871
    search := FALSE;
-
 
1872
    searchOpened := FALSE;
-
 
1873
    createSearchForm;
-
 
1874
    new_searchText := "";
-
 
1875
    searchText := "";
-
 
1876
    cs := FALSE;
-
 
1877
    whole := FALSE;
-
 
1878
    replaced := 0;
-
 
1879
    Ini.getStr("paths", "build", buildScript);
-
 
1880
    Ini.getStr("paths", "run",   runScript);
-
 
1881
    Ini.getStr("paths", "debug", debugScript);
-
 
1882
    K.SetEventsMask({0, 1, 2, 5, 6, 31});
-
 
1883
    draw_window;
-
 
1884
    WHILE TRUE DO
-
 
1885
        CASE K.WaitForEvent() OF
-
 
1886
        |1: Redraw(resized, width, height, cliWidth, cliHeight)
-
 
1887
        |2: KeyDown(K.GetKey())
-
 
1888
        |3: BtnClick
-
 
1889
        |6: MouseEvent(resized, firstClickX, firstClickY, time)
1873
        |7: receiveIPC
1890
        |7: receiveIPC
1874
        ELSE
1891
        ELSE
1875
        END
1892
        END
1876
    END
1893
    END
1877
END main;
1894
END main;