Rev 3064 | Rev 4318 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
3527 | hidnplayr | 1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ; ; |
||
3 | ; EXAMPLE APPLICATION ; |
||
4 | ; ; |
||
5 | ; Compile with FASM ; |
||
6 | ; ; |
||
7 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
8 | |||
9 | ; The header |
||
10 | |||
11 | use32 ; Tell compiler to use 32 bit instructions |
||
12 | |||
13 | org 0x0 ; the base address of code, always 0x0 |
||
14 | |||
15 | db 'MENUET01' |
||
16 | dd 0x01 |
||
17 | dd START |
||
18 | dd I_END |
||
19 | dd 0x100000 |
||
20 | dd 0x7fff0 |
||
21 | dd 0, 0 |
||
22 | |||
23 | ; The code area |
||
24 | |||
25 | include 'macros.inc' |
||
26 | |||
27 | START: ; start of execution |
||
28 | call draw_window ; draw the window |
||
29 | |||
30 | ; After the window is drawn, it's practical to have the main loop. |
||
31 | ; Events are distributed from here. |
||
32 | |||
33 | event_wait: |
||
34 | mov eax, 10 ; function 10 : wait until event |
||
35 | mcall ; event type is returned in eax |
||
36 | |||
37 | cmp eax, 1 ; Event redraw request ? |
||
38 | je red ; Expl.: there has been activity on screen and |
||
39 | ; parts of the applications has to be redrawn. |
||
40 | |||
41 | cmp eax, 2 ; Event key in buffer ? |
||
42 | je key ; Expl.: User has pressed a key while the |
||
43 | ; app is at the top of the window stack. |
||
44 | |||
45 | cmp eax, 3 ; Event button in buffer ? |
||
46 | je button ; Expl.: User has pressed one of the |
||
47 | ; applications buttons. |
||
48 | |||
49 | jmp event_wait |
||
50 | |||
51 | ; The next section reads the event and processes data. |
||
52 | |||
53 | red: ; Redraw event handler |
||
54 | call draw_window ; We call the window_draw function and |
||
55 | jmp event_wait ; jump back to event_wait |
||
56 | |||
57 | key: ; Keypress event handler |
||
58 | mov eax, 2 ; The key is returned in ah. The key must be |
||
59 | mcall ; read and cleared from the system queue. |
||
60 | jmp event_wait ; Just read the key, ignore it and jump to event_wait. |
||
61 | |||
62 | button: ; Buttonpress event handler |
||
63 | mov eax,17 ; The button number defined in window_draw |
||
64 | mcall ; is returned to ah. |
||
65 | |||
66 | cmp ah,1 ; button id=1 ? |
||
67 | jne noclose |
||
68 | mov eax,-1 ; Function -1 : close this program |
||
69 | mcall |
||
70 | |||
71 | noclose: |
||
72 | jmp event_wait ; This is for ignored events, useful at development |
||
73 | |||
74 | ; ********************************************* |
||
75 | ; ****** WINDOW DEFINITIONS AND DRAW ******** |
||
76 | ; ********************************************* |
||
31 | halyavin | 77 | ; |
3527 | hidnplayr | 78 | ; The static window parts are drawn in this function. The window canvas can |
79 | ; be accessed later from any parts of this code (thread) for displaying |
||
80 | ; processes or recorded data, for example. |
||
31 | halyavin | 81 | ; |
3527 | hidnplayr | 82 | ; The static parts *must* be placed within the fn 12 , ebx = 1 and ebx = 2. |
83 | |||
84 | draw_window: |
||
85 | mov eax, 12 ; function 12: tell os about windowdraw |
||
86 | mov ebx, 1 ; 1, start of draw |
||
87 | mcall |
||
88 | |||
89 | mov eax, 0 ; function 0 : define and draw window |
||
90 | mov ebx, 100 * 65536 + 300 ; [x start] *65536 + [x size] |
||
91 | mov ecx, 100 * 65536 + 120 ; [y start] *65536 + [y size] |
||
92 | mov edx, 0x14ffffff ; color of work area RRGGBB |
||
93 | ; 0x02000000 = window type 4 (fixed size, skinned window) |
||
94 | mov esi, 0x808899ff ; color of grab bar RRGGBB |
||
95 | ; 0x80000000 = color glide |
||
96 | mov edi, title |
||
97 | mcall |
||
98 | |||
99 | mov ebx, 25 * 65536 + 35 ; draw info text with function 4 |
||
100 | mov ecx, 0x224466 |
||
101 | mov edx, text |
||
102 | mov esi, 40 |
||
103 | mov eax, 4 |
||
104 | |||
105 | .newline: ; text from the DATA AREA |
||
106 | mcall |
||
107 | add ebx, 10 |
||
108 | add edx, 40 |
||
109 | cmp byte[edx], 0 |
||
110 | jne .newline |
||
111 | |||
112 | mov eax, 12 ; function 12:tell os about windowdraw |
||
113 | mov ebx, 2 ; 2, end of draw |
||
114 | mcall |
||
115 | |||
116 | ret |
||
117 | |||
118 | ; ********************************************* |
||
119 | ; ************* DATA AREA ***************** |
||
120 | ; ********************************************* |
||
3064 | leency | 121 | ; |
3527 | hidnplayr | 122 | ; Data can be freely mixed with code to any parts of the image. |
123 | ; Only the header information is required at the beginning of the image. |
||
124 | |||
125 | text db "It look's like you have just compiled " |
||
126 | db "your first program for KolibriOS. " |
||
127 | db " " |
||
128 | db "Congratulations! ", 0 |
||
129 | |||
130 | title db "Example application", 0 |
||
131 | |||
132 | I_END: |
||
133 | |||
134 | ; The area after I_END is free for use as the application memory, |
||
135 | ; just avoid the stack. |
||
3064 | leency | 136 | ; |
3527 | hidnplayr | 137 | ; Application memory structure, according to the used header, 1 Mb. |
138 | ; |
||
139 | ; 0x00000 - Start of compiled image |
||
140 | ; I_END - End of compiled image |
||
141 | ; |
||
142 | ; + Free for use in the application |
||
143 | ; |
||
144 | ; 0x7ff00 - Start of stack area |
||
145 | ; 0x7fff0 - End of stack area - defined in the header |
||
146 | ; |
||
147 | ; + Free for use in the application |
||
148 | ; |
||
149 | ; 0xFFFFF - End of freely useable memory - defined in the header |
||
150 | ; |
||
151 | ; All of the the areas can be modified within the application with a |
||
152 | ; direct reference. |
||
153 | ; For example, mov [0x80000],byte 1 moves a byte above the stack area. |