Subversion Repositories Kolibri OS

Rev

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: