Rev 4199 | Rev 4572 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2455 | mario79 | 1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ;; ;; |
||
3 | ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;; |
||
4 | ;; Distributed under terms of the GNU General Public License ;; |
||
5 | ;; ;; |
||
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
7 | |||
1662 | Nasarus | 8 | SYSTEM FUNCTIONS of OS Kolibri 0.7.7.0 |
114 | mikedld | 9 | |
10 | Number of the function is located in the register eax. |
||
118 | diamond | 11 | The call of the system function is executed by "int 0x40" command. |
12 | All registers except explicitly declared in the returned value, |
||
13 | including eflags, are preserved. |
||
114 | mikedld | 14 | |
15 | |||
16 | ====================================================================== |
||
17 | ============== Function 0 - define and draw the window. ============== |
||
18 | ====================================================================== |
||
19 | Defines an application window. Draws a frame of the window, header and |
||
133 | diamond | 20 | working area. For skinned windows defines standard close and minimize |
21 | buttons. |
||
114 | mikedld | 22 | Parameters: |
118 | diamond | 23 | * eax = 0 - function number |
114 | mikedld | 24 | * ebx = [coordinate on axis x]*65536 + [size on axis x] |
25 | * ecx = [coordinate on axis y]*65536 + [size on axis y] |
||
26 | * edx = 0xXYRRGGBB, where: |
||
27 | * Y = style of the window: |
||
131 | diamond | 28 | * Y=0 - type I - fixed-size window |
118 | diamond | 29 | * Y=1 - only define window area, draw nothing |
131 | diamond | 30 | * Y=2 - type II - variable-size window |
31 | * Y=3 - skinned window |
||
641 | diamond | 32 | * Y=4 - skinned fixed-size window |
33 | * other possible values (from 5 up to 15) are reserved, |
||
114 | mikedld | 34 | function call with such Y is ignored |
118 | diamond | 35 | * RR, GG, BB = accordingly red, green, blue components of a color |
4051 | heavyiron | 36 | of the working area of the window (are ignored for style Y=1) |
114 | mikedld | 37 | * X = DCBA (bits) |
641 | diamond | 38 | * A = 1 - window has caption; for styles Y=3,4 caption string |
118 | diamond | 39 | must be passed in edi, for other styles use |
40 | subfunction 1 of function 71 |
||
41 | * B = 1 - coordinates of all graphics primitives are relative to |
||
42 | window client area |
||
303 | mikedld | 43 | * C = 1 - don't fill working area on window draw |
118 | diamond | 44 | * D = 0 - normal filling of the working area, 1 - gradient |
45 | The following parameters are intended for windows |
||
46 | of a type I and II, and ignored for styles Y=1,3: |
||
47 | * esi = 0xXYRRGGBB - color of the header |
||
48 | * RR, GG, BB define color |
||
4051 | heavyiron | 49 | * Y=0 - usual window, Y=1 - unmovable window (works for all window styles) |
118 | diamond | 50 | * X defines a gradient of header: X=0 - no gradient, |
114 | mikedld | 51 | X=8 - usual gradient, |
52 | for windows of a type II X=4 - negative gradient |
||
118 | diamond | 53 | * other values of X and Y are reserved |
54 | * edi = 0x00RRGGBB - color of the frame |
||
114 | mikedld | 55 | Returned value: |
56 | * function does not return value |
||
57 | Remarks: |
||
118 | diamond | 58 | * Position and sizes of the window are installed by the first |
59 | call of this function and are ignored at subsequent; to change |
||
60 | position and/or sizes of already created window use function 67. |
||
641 | diamond | 61 | * For windows with styles Y=3,4 and caption (A=1) caption string |
62 | is set by the first call of this function and is ignored |
||
63 | at subsequent (strictly speaking, is ignored after a call to |
||
64 | subfunction 2 of function 12 - end redraw); to change caption of |
||
65 | already created window use subfunction 1 of function 71. |
||
118 | diamond | 66 | * If the window has appropriate styles, position and/or sizes can be |
67 | changed by user. Current position and sizes can be obtained |
||
68 | by function 9. |
||
69 | * The window must fit on the screen. If the transferred |
||
70 | coordinates and sizes do not satisfy to this condition, |
||
71 | appropriate coordinate (or, probably, both) is considered as zero, |
||
131 | diamond | 72 | and if it does not help too, the appropriate size |
118 | diamond | 73 | (or, probably, both) is installed in a size of the screen. |
2409 | Serge | 74 | |
131 | diamond | 75 | Further let us designate xpos,ypos,xsize,ysize - values passed |
76 | in ebx,ecx. The coordinates are resulted concerning |
||
118 | diamond | 77 | the left upper corner of the window, which, thus, is set as (0,0), |
78 | coordinates of the right lower corner essence (xsize,ysize). |
||
79 | * The sizes of the window are understood in sence of coordinates |
||
80 | of the right lower corner. This concerns all other functions too. |
||
81 | It means, that the real sizes are on 1 pixel more. |
||
82 | * The window of type I looks as follows: |
||
83 | * draw external frame of color indicated in edi, 1 pixel in width |
||
84 | * draw header - rectangle with the left upper corner (1,1) and |
||
85 | right lower (xsize-1,min(25,ysize)) color indicated in esi |
||
86 | (taking a gradient into account) |
||
87 | * if ysize>=26, fill the working area of the window - |
||
88 | rectangle with the left upper corner (1,21) and right lower |
||
89 | (xsize-1,ysize-1) (sizes (xsize-1)*(ysize-21)) with color |
||
90 | indicated in edx (taking a gradient into account) |
||
91 | * if A=1 and caption has been already set by subfunction 1 |
||
92 | of function 71, it is drawn in the corresponding place of header |
||
93 | * The window of style Y=1 looks as follows: |
||
114 | mikedld | 94 | * completely defined by the application |
118 | diamond | 95 | * The window of type II looks as follows: |
96 | * draw external frame of width 1 pixel with the "shaded" color |
||
97 | edi (all components of the color decrease twice) |
||
98 | * draw intermediate frame of width 3 pixels with color edi |
||
99 | * draw internal frame of width 1 pixel with the "shaded" color edi |
||
114 | mikedld | 100 | * draw header - rectangle with the left upper corner (4,4) |
118 | diamond | 101 | and right lower (xsize-4,min(20,ysize)) color, indicated in esi |
102 | (taking a gradient into account) |
||
103 | * if ysize>=26, fill the working area of the window - |
||
114 | mikedld | 104 | rectangle with the left upper corner (5,20) and right lower |
118 | diamond | 105 | (xsize-5,ysize-5) with color indicated in edx |
106 | (taking a gradient into account) |
||
107 | * if A=1 and caption has been already set by subfunction 1 |
||
108 | of function 71, it is drawn in the corresponding place of header |
||
109 | * The skinned window looks as follows: |
||
114 | mikedld | 110 | * draw external frame of width 1 pixel |
118 | diamond | 111 | with color 'outer' from the skin |
112 | * draw intermediate frame of width 3 pixel |
||
113 | with color 'frame' from the skin |
||
114 | * draw internal frame of width 1 pixel |
||
115 | with color 'inner' from the skin |
||
116 | * draw header (on bitmaps from the skin) in a rectangle |
||
114 | mikedld | 117 | (0,0) - (xsize,_skinh-1) |
118 | diamond | 118 | * if ysize>=26, fill the working area of the window - |
119 | rectangle with the left upper corner (5,_skinh) and right lower |
||
120 | (xsize-5,ysize-5) with color indicated in edx |
||
121 | (taking a gradient into account) |
||
133 | diamond | 122 | * define two standard buttons: close and minimize |
114 | mikedld | 123 | (see function 8) |
118 | diamond | 124 | * if A=1 and edi contains (nonzero) pointer to caption string, |
125 | it is drawn in place in header defined in the skin |
||
126 | * value _skinh is accessible as the result of call |
||
127 | subfunction 4 of function 48 |
||
114 | mikedld | 128 | |
129 | ====================================================================== |
||
118 | diamond | 130 | ================ Function 1 - put pixel in the window. =============== |
114 | mikedld | 131 | ====================================================================== |
132 | Parameters: |
||
118 | diamond | 133 | * eax = 1 - function number |
134 | * ebx = x-coordinate (relative to the window) |
||
135 | * ecx = y-coordinate (relative to the window) |
||
136 | * edx = 0x00RRGGBB - color of a pixel |
||
137 | edx = 0x01xxxxxx - invert color of a pixel |
||
138 | (low 24 bits are ignored) |
||
114 | mikedld | 139 | Returned value: |
140 | * function does not return value |
||
141 | |||
142 | ====================================================================== |
||
118 | diamond | 143 | ============ Function 2 - get the code of the pressed key. =========== |
114 | mikedld | 144 | ====================================================================== |
145 | Takes away the code of the pressed key from the buffer. |
||
146 | Parameters: |
||
118 | diamond | 147 | * eax = 2 - function number |
114 | mikedld | 148 | Returned value: |
118 | diamond | 149 | * if the buffer is empty, function returns eax=1 |
150 | * if the buffer is not empty, function returns al=0, |
||
151 | ah=code of the pressed key, high word of eax is zero |
||
152 | * if there is "hotkey", function returns al=2, |
||
153 | ah=scancode of the pressed key (0 for control keys), |
||
154 | high word of eax contains a status of control keys at the moment |
||
155 | of pressing a hotkey |
||
114 | mikedld | 156 | Remarks: |
118 | diamond | 157 | * There is a common system buffer of the pressed keys |
158 | by a size of 120 bytes, organized as queue. |
||
159 | * There is one more common system buffer on 120 "hotkeys". |
||
160 | * If the application with the inactive window calls this function, |
||
161 | the buffer of the pressed keys is considered to be empty. |
||
162 | * By default this function returns ASCII-codes; to switch |
||
163 | to the scancodes mode (and back) use function 66. |
||
164 | However, hotkeys are always notificated as scancodes. |
||
165 | * To find out, what keys correspond to what codes, start |
||
166 | the application keyascii and scancode. |
||
167 | * Scancodes come directly from keyboard and are fixed; |
||
168 | ASCII-codes turn out with usage of the conversion tables, |
||
169 | which can be set by subfunction 2 of function 21 |
||
170 | and get by subfunction 2 of function 26. |
||
171 | * As a consequence, ASCII-codes take into account current |
||
172 | keyboard layout (rus/en) as opposed to scancodes. |
||
173 | * This function notifies only about those hotkeys, which were |
||
174 | defined by this thread by subfunction 4 of function 66. |
||
114 | mikedld | 175 | |
176 | ====================================================================== |
||
118 | diamond | 177 | ==================== Function 3 - get system time. =================== |
114 | mikedld | 178 | ====================================================================== |
179 | Parameters: |
||
118 | diamond | 180 | * eax = 3 - function number |
114 | mikedld | 181 | Returned value: |
182 | * eax = 0x00SSMMHH, where HH:MM:SS = Hours:Minutes:Seconds |
||
118 | diamond | 183 | * each item is BCD-number, for example, |
184 | for time 23:59:59 function returns 0x00595923 |
||
114 | mikedld | 185 | Remarks: |
118 | diamond | 186 | * See also subfunction 9 of function 26 - get time from |
187 | the moment of start of the system; it is more convenient, because |
||
188 | returns simply DWORD-value of the time counter. |
||
189 | * System time can be set by function 22. |
||
114 | mikedld | 190 | |
191 | ====================================================================== |
||
118 | diamond | 192 | ============ Function 4 - draw text string in the window. ============ |
114 | mikedld | 193 | ====================================================================== |
194 | Parameters: |
||