Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
151 | dimkam | 1 | ;*************************************************************** |
2 | ;* |
||
3 | ;* MACROS.H |
||
4 | ;* |
||
5 | ;* Макросы,определения. |
||
6 | ;* |
||
7 | ;* (C) Vitamin/CAIG/2001 2001-2006 |
||
8 | ;* |
||
9 | ;* Revision 9.01.2006 |
||
10 | ;* |
||
11 | ;*************************************************************** |
||
12 | |||
13 | #if 0 |
||
14 | Используемые обозначения: |
||
15 | RP(A,B) == RPh=A,RPl=B |
||
16 | XZ,YZ- координаты(размеры) в знакоместах |
||
17 | XP,YP- координаты(размеры) в пикселах |
||
18 | XS- позиция в символах (6 пикс) |
||
19 | |||
20 | Ключи компиляции (просто объявить в самом начале программы ДО |
||
21 | включения MACROS.H): |
||
22 | PRODUCE -release-версия |
||
23 | NOSLB -нет поддержки скроллбаров |
||
24 | NOCOMBO -нет поддержки COMBOBOX |
||
25 | NOASKER -нет поддержки ASKER |
||
26 | IM2MOD -используются IM2 |
||
27 | NOFILER -нет файлера |
||
28 | RDCAT -поддержка чтения каталога (если NOFILER |
||
29 | NOLOADFIL -нет процедуры чтения файлов |
||
30 | NOSAVEFIL -нет процедуры записи файлов |
||
31 | HIMEMDRV -поддержка драйверов памяти >128к |
||
32 | NOMEMDRV -нет поддержки верхней памяти |
||
33 | |||
34 | Объявление констант: |
||
35 | WINCOLOR -цвет окон |
||
36 | HDRCOLOR -цвет заголовков окон |
||
37 | ACTCOLOR -цвет выделенной области |
||
38 | ACTPCOLR -цвет выделенной PUSHLIKE-области |
||
39 | |||
40 | CPAGE1 -страница для INCLUDE "EXTERN" |
||
41 | |||
42 | =================== |
||
43 | Описание дескриптора окна: |
||
44 | WIN_DESCRIPTOR: |
||
45 | DB WINX,WINY,WINWID,WINHEI -координаты и размеры |
||
46 | DB STYLE -стиль |
||
47 | DB RESERVED -резерв |
||
48 | DW WINTEXT -текст |
||
49 | DW WINACT -активные зоны |
||
50 | DW WINHOT -горячие клавиши |
||
51 | DW WINSPR -спрайты |
||
52 | DW WINFLG -флажки |
||
53 | DW WINSWT -переключатели |
||
54 | [DW WINSLB] -скроллбары (!NOSLB) |
||
55 | DW WINPLZ -слайдеры |
||
56 | DW WINLST -ᯨ᮪ |
||
57 | DW WINCALL -вызов при создании |
||
58 | DW -1 -конец дескриптора |
||
59 | |||
60 | Поля описателей должны иметь фиксированное смещение. Если |
||
61 | нет объектов определенного типа, поле описателя должно быть |
||
62 | равно 0. |
||
63 | #endif |
||
64 | |||
65 | WIN_XPOS=0 |
||
66 | WIN_YPOS=WIN_XPOS+1 |
||
67 | WIN_WDT=WIN_YPOS+1 |
||
68 | WIN_HGT=WIN_WDT+1 |
||
69 | WIN_OPT=WIN_HGT+1 |
||
70 | WIN_TXT=WIN_OPT+2 |
||
71 | WIN_ACT=WIN_TXT+2 |
||
72 | WIN_HOT=WIN_ACT+2 |
||
73 | WIN_SPR=WIN_HOT+2 |
||
74 | WIN_FLG=WIN_SPR+2 |
||
75 | WIN_SWT=WIN_FLG+2 |
||
76 | #ifndef NOPOLZ |
||
77 | WIN_SLB=WIN_SWT+2 |
||
78 | WIN_PLZ=WIN_SLB+2 |
||
79 | #else |
||
80 | WIN_PLZ=WIN_SWT+2 |
||
81 | #endif |
||
82 | WIN_LST=WIN_PLZ+2 |
||
83 | WIN_CLL=WIN_LST+2 |
||
84 | |||
85 | ;Стили окна |
||
86 | WIN_HEADER=1 ;есть заголовок |
||
87 | WIN_REFRESH=2 ;регистрировать окно и рисовать |
||
88 | WIN_MOVABLE=4 ;перемещаемое |
||
89 | WIN_NOMODAL=8 ;немодальное (выход-промазать) |
||
90 | WIN_NOBACK=16 ;не запоминать задний фон |
||
91 | |||
92 | #if 0 |
||
93 | *Объект-текст: ASCIIZ-формат с управляющими кодами. Левая |
||
94 | граница печати- на 1 символ правее левой границы окна. |
||
95 | *Объект-активная зона: набор дескрипторов |
||
96 | DESCACT DB X,Y,WID,HEI |
||
97 | DB FLAG |
||
98 | ... |
||
99 | DB -1 |
||
100 | #endif |
||
101 | ;Стили активной зоны |
||
102 | ACT_ENA=1 ;разрешена |
||
103 | ACT_LGT=2 ;подсвечиваемая |
||
104 | ACT_PSH=4 ;"нажимаемая" |
||
105 | |||
106 | #if 0 |
||
107 | *Объект-горячая клавиша: набор дескрипторов |
||
108 | DESCHOT DB KEY |
||
109 | DW OPERAND |
||
110 | ... |
||
111 | DB -1 |
||
112 | Если старший байт OPERAND==0,то активизация горячей клавиши |
||
113 | аналогично активации зоны с номером .OPERAND, иначе- переход на |
||
114 | адрес OPERAND |
||
115 | |||
116 | *Объект-спрайт: набор дескрипторов |
||
117 | DESCSPR DB X,Y,WID,HEI,FLAG |
||
118 | DW DATA |
||
119 | ... |
||
120 | DB -1 |
||
121 | Формат FLAG аналогичен параметру в C' для PUT_SPRT |
||
122 | |||
123 | *Объект-флажки: набор дескрипторов |
||
124 | DESCHOT DB NUMBER -номер активной зоны |
||
125 | DB VAL -0/255 |
||
126 | DW OPERAND |
||
127 | ... |
||
128 | DB -1 |
||
129 | Если OPERAND!=0, то при активации флажка _вызов_ OPERAND |
||
130 | |||
131 | *Объект-переключатели: набор дескрипторов |
||
132 | DESCSWT DB NUMBER -номер активой зоны первого свитча |
||
133 | DB COUNT -число свитчей |
||
134 | DB EQUAL -номер выделенного (начиная с 0) |
||
135 | DW OPERAND |
||
136 | ... |
||
137 | DB -1 |
||
138 | |||
139 | *Объект-скроллбар: набор дескрипторов |
||
140 | DESCSLB DB NUMBER -активная зона (размер по скроллбару) |
||
141 | DB HIGH -YZ |
||
142 | DB COUNT -элементов в "списке" |
||
143 | DW 0 -резерв |
||
144 | DB DELTA -текущая позиция |
||
145 | DW OPERAND |
||
146 | ... |
||
147 | DB -1 |
||
148 | |||
149 | *Объект-слайдер: набор дескрипторов |
||
150 | DESCPLZ DB NUMBER -активная зона (размер по слайдеру) |
||
151 | DB FLAG -0- вертикальный, 1-горизонтальный |
||
152 | DB EQUAL -значение (0..31) |
||
153 | DW OPERAND |
||
154 | ... |
||
155 | DB -1 |
||
156 | |||
157 | *Объект-список: дескриптор |
||
158 | DESCLST DB NUMBER -активная зона (без подсветки) |
||
159 | DB HIGH -YZ |
||
160 | DB COUNT -элементов в списке |
||
161 | DW 0 -резерв |
||
162 | DB DELTA -номер первого видимого |
||
163 | DW LISTDATA -массив строк |
||
164 | DB LEN -такой длины |
||
165 | |||
166 | DB -1 |
||
167 | |||
168 | При выборе элемента списка WINDOW возвращает A=254 и C=номер |
||
169 | выбранного элемента. |
||
170 | Дескрипторов списков может быть несколько, но нельзя определить |
||
171 | из какого списка был выбран элемент |
||
172 | #endif |
||
173 | |||
174 | |||
175 | ;Макросы доступа к элементам структуры |
||
176 | TEST MACRO tbit,of |
||
177 | BIT tbit,(IX+of) |
||
178 | ENDM |
||
179 | |||
180 | |||
181 | ;Можно в качестве первого параметра указывать список регистров |
||
182 | ;MOV EDCB,WIN_XPOS |
||
183 | ; == |
||
184 | ;LD E,(IX+WIN_XPOS):LD D,(IX+WIN_XPOS+1) |
||
185 | ;LD C,(IX+WIN_XPOS+2),LD B,(IX+WIN_XPOS+3) |
||
186 | |||
187 | MOV MACRO re1,re2,of |
||
188 | LD re1,(IX+of) |
||
189 | LD re2,(IX+of+1) |
||
190 | ENDM |
||
191 | |||
192 | ;Обратно MOV |
||
193 | MACRO STOR |
||
194 | IF ?\0+1 |
||
195 | DISPLAY "FIELD \0 IS UNDEFINED" |
||
196 | ELSE |
||
197 | LOCAL |
||
198 | COFF=\P |
||
199 | REPEAT |
||
200 | LD (IX+COFF),\C\N |
||
201 | COFF=COFF+1 |
||
202 | UNTIL "\C"-"," |
||
203 | ENDL |
||
204 | ENDIF |
||
205 | ENDM |
||
206 | |||
207 | ;Можно в качестве первого параметра указывать список регистров |
||
208 | ;MOVHL ABC |
||
209 | ; == |
||
210 | ;LD A,(HL):INC HL:LD B,(HL):INC HL:LD C,(HL):INC HL |
||
211 | MOVHL MACRO re |
||
212 | LD re,(HL) |
||
213 | INC HL |
||
214 | ENDM |
||
215 | |||
216 | ;Обратно MOVHL |
||
217 | STORHL MACRO re |
||
218 | LD (HL),re |
||
219 | INC HL |
||
220 | ENDM |
||
221 | |||
222 | LDCP MACRO |
||
223 | LD A,(HL) |
||
224 | CP 255 |
||
225 | ENDM |
||
226 | |||
227 | ;HL+=A |
||
228 | ADDHLA MACRO |
||
229 | ADD A,L |
||
230 | LD L,A |
||
231 | ADC A,H |
||
232 | SUB L |
||
233 | LD H,A |
||
234 | ENDM |
||
235 | |||
236 | ;DE+=A |
||
237 | ADDDEA MACRO |
||
238 | ADD A,E |
||
239 | LD E,A |
||
240 | ADC A,D |
||
241 | SUB E |
||
242 | LD D,A |
||
243 | ENDM |
||
244 | |||
245 | ;A*=8 |
||
246 | AMUL8 MACRO |
||
247 | ADD A,A |
||
248 | ADD A,A |
||
249 | ADD A,A |
||
250 | ENDM |
||
251 | |||
252 | ;HL+=3 |
||
253 | HLPL3 MACRO |
||
254 | INC HL |
||
255 | INC HL |
||
256 | INC HL |
||
257 | ENDM |
||
258 | |||
259 | ;HL+=2 |
||
260 | HLPL2 MACRO |
||
261 | INC HL |
||
262 | INC HL |
||
263 | ENDM |
||
264 | |||
265 | ;Выравнивание куска кода по границе 256 байт |
||
266 | |||
267 |