Subversion Repositories zxusbnet

Rev

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