Subversion Repositories Kolibri OS

Rev

Rev 9197 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
9187 akron1 1
(*
2
    Copyright 2016, 2017, 2020, 2021 Anton Krotov
3
 
4
    This file is part of CEdit.
5
 
6
    CEdit is free software: you can redistribute it and/or modify
7
    it under the terms of the GNU General Public License as published by
8
    the Free Software Foundation, either version 3 of the License, or
9
    (at your option) any later version.
10
 
11
    CEdit is distributed in the hope that it will be useful,
12
    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
    GNU General Public License for more details.
15
 
16
    You should have received a copy of the GNU General Public License
17
    along with CEdit. If not, see .
18
*)
19
 
20
MODULE EditBox;
21
 
22
IMPORT sys := SYSTEM, KOSAPI;
23
 
24
 
25
TYPE
26
 
27
	tEditBox* = POINTER TO RECORD
28
		width*,
29
		left*,
30
		top*,
31
		color*,
32
		shift_color,
33
		focus_border_color,
34
		blur_border_color,
35
		text_color*,
36
		max: INTEGER;
37
		text*: INTEGER;
38
		mouse_variable: tEditBox;
39
		flags*,
40
 
41
		size,
42
		pos: INTEGER;
43
		(* The following struct members are not used by the users of API *)
44
		offset, cl_curs_x, cl_curs_y, shift, shift_old, height, char_width: INTEGER
45
	END;
46
 
47
	EditBoxKey = PROCEDURE (eb: tEditBox);
48
 
49
 
50
VAR
51
 
52
	key_proc: EditBoxKey;
53
	paint    *: PROCEDURE (eb: tEditBox);
54
	mouse    *: PROCEDURE (eb: tEditBox);
55
	setValue *: PROCEDURE (eb: tEditBox; text: INTEGER);
56
 
57
 
58
PROCEDURE _key (key: INTEGER; key_proc: EditBoxKey; text: tEditBox);
59
BEGIN
60
    sys.CODE(
61
    08BH, 045H, 008H,   (*  mov     eax, dword [ebp +  8]  *)
62
    08BH, 055H, 00CH,   (*  mov     edx, dword [ebp + 12]  *)
63
    08BH, 04DH, 010H,   (*  mov     ecx, dword [ebp + 16]  *)
64
    051H,               (*  push    ecx                    *)
65
    0FFH, 0D2H          (*  call    edx                    *)
66
    )
67
END _key;
68
 
69
 
70
PROCEDURE key* (text: tEditBox; key: INTEGER);
71
BEGIN
72
    _key(key, key_proc, text)
73
END key;
74
 
75
 
76
PROCEDURE getValue* (text: tEditBox; VAR str: ARRAY OF CHAR);
77
VAR
78
    ptr, max, i: INTEGER;
79
 
80
BEGIN
81
    ptr := text.text;
82
    max := text.max;
83
    ASSERT(max < LEN(str));
84
    i := 0;
85
    REPEAT
86
        sys.GET(ptr, str[i]);
87
        INC(i);
88
        INC(ptr)
89
    UNTIL (str[i - 1] = 0X) OR (i = max);
90
    str[i] := 0X
91
END getValue;
92
 
93
 
94
PROCEDURE create* (tlx, tly, width, max_chars: INTEGER; editbox_interlock: tEditBox): tEditBox;
95
VAR
96
    new_textbox: tEditBox;
97
 
98
BEGIN
99
    NEW(new_textbox);
100
 
101
    new_textbox.width := width;
102
    new_textbox.left := tlx;
103
    new_textbox.top := tly;
104
    new_textbox.color := 0FFFFFFH;
105
    new_textbox.shift_color := 06A9480H;
106
    new_textbox.focus_border_color := 0;
107
    new_textbox.blur_border_color := 06A9480H;
108
    new_textbox.text_color := 0;
109
    new_textbox.max := max_chars;
110
    new_textbox.text := KOSAPI.malloc(max_chars + 2);
111
    ASSERT(new_textbox.text # 0);
112
    new_textbox.mouse_variable := editbox_interlock;
113
    new_textbox.flags := 0
114
 
115
    RETURN new_textbox
116
END create;
117
 
118
 
119
PROCEDURE GetProc (Lib, v: INTEGER; name: ARRAY OF CHAR);
120
VAR
121
	a: INTEGER;
122
BEGIN
123
	a := KOSAPI.GetProcAdr(name, Lib);
124
	ASSERT(a # 0);
125
	sys.PUT(v, a)
126
END GetProc;
127
 
128
 
129
PROCEDURE main;
130
VAR
131
	Lib: INTEGER;
132
BEGIN
133
	Lib := KOSAPI.LoadLib("/rd/1/lib/box_lib.obj");
134
	ASSERT(Lib # 0);
135
	GetProc(Lib, sys.ADR(paint),    "edit_box");
136
	GetProc(Lib, sys.ADR(key_proc), "edit_box_key");
137
	GetProc(Lib, sys.ADR(mouse),    "edit_box_mouse");
138
	GetProc(Lib, sys.ADR(setValue), "edit_box_set_text");
139
END main;
140
 
141
 
142
BEGIN
143
  main
144
END EditBox.