Blame | Last modification | View Log | Download | RSS feed
;***************************************************************;*;* MACROS.H;*;* Макросы,определения.;*;* (C) Vitamin/CAIG/2001 2001-2006;*;* Revision 9.01.2006;*;***************************************************************#if 0Используемые обозначения:RP(A,B) == RPh=A,RPl=BXZ,YZ- координаты(размеры) в знакоместахXP,YP- координаты(размеры) в пикселахXS- позиция в символах (6 пикс)Ключи компиляции (просто объявить в самом начале программы ДОвключения MACROS.H):PRODUCE -release-версияNOSLB -нет поддержки скроллбаровNOCOMBO -нет поддержки COMBOBOXNOASKER -нет поддержки ASKERIM2MOD -используются IM2NOFILER -нет файлераRDCAT -поддержка чтения каталога (если NOFILERNOLOADFIL -нет процедуры чтения файловNOSAVEFIL -нет процедуры записи файловHIMEMDRV -поддержка драйверов памяти >128кNOMEMDRV -нет поддержки верхней памятиОбъявление констант:WINCOLOR -цвет оконHDRCOLOR -цвет заголовков оконACTCOLOR -цвет выделенной областиACTPCOLR -цвет выделенной PUSHLIKE-областиCPAGE1 -страница для INCLUDE "EXTERN"===================Описание дескриптора окна:WIN_DESCRIPTOR:DB WINX,WINY,WINWID,WINHEI -координаты и размерыDB STYLE -стильDB RESERVED -резервDW WINTEXT -текстDW WINACT -активные зоныDW WINHOT -горячие клавишиDW WINSPR -спрайтыDW WINFLG -флажкиDW WINSWT -переключатели[DW WINSLB] -скроллбары (!NOSLB)DW WINPLZ -слайдерыDW WINLST -ᯨ᮪DW WINCALL -вызов при созданииDW -1 -конец дескриптораПоля описателей должны иметь фиксированное смещение. Еслинет объектов определенного типа, поле описателя должно бытьравно 0.#endifWIN_XPOS=0WIN_YPOS=WIN_XPOS+1WIN_WDT=WIN_YPOS+1WIN_HGT=WIN_WDT+1WIN_OPT=WIN_HGT+1WIN_TXT=WIN_OPT+2WIN_ACT=WIN_TXT+2WIN_HOT=WIN_ACT+2WIN_SPR=WIN_HOT+2WIN_FLG=WIN_SPR+2WIN_SWT=WIN_FLG+2#ifndef NOPOLZWIN_SLB=WIN_SWT+2WIN_PLZ=WIN_SLB+2#elseWIN_PLZ=WIN_SWT+2#endifWIN_LST=WIN_PLZ+2WIN_CLL=WIN_LST+2;Стили окнаWIN_HEADER=1 ;есть заголовокWIN_REFRESH=2 ;регистрировать окно и рисоватьWIN_MOVABLE=4 ;перемещаемоеWIN_NOMODAL=8 ;немодальное (выход-промазать)WIN_NOBACK=16 ;не запоминать задний фон#if 0*Объект-текст: ASCIIZ-формат с управляющими кодами. Леваяграница печати- на 1 символ правее левой границы окна.*Объект-активная зона: набор дескрипторовDESCACT DB X,Y,WID,HEIDB FLAG...DB -1#endif;Стили активной зоныACT_ENA=1 ;разрешенаACT_LGT=2 ;подсвечиваемаяACT_PSH=4 ;"нажимаемая"#if 0*Объект-горячая клавиша: набор дескрипторовDESCHOT DB KEYDW OPERAND...DB -1Если старший байт OPERAND==0,то активизация горячей клавишианалогично активации зоны с номером .OPERAND, иначе- переход наадрес OPERAND*Объект-спрайт: набор дескрипторовDESCSPR DB X,Y,WID,HEI,FLAGDW DATA...DB -1Формат FLAG аналогичен параметру в C' для PUT_SPRT*Объект-флажки: набор дескрипторовDESCHOT DB NUMBER -номер активной зоныDB VAL -0/255DW OPERAND...DB -1Если OPERAND!=0, то при активации флажка _вызов_ OPERAND*Объект-переключатели: набор дескрипторовDESCSWT DB NUMBER -номер активой зоны первого свитчаDB COUNT -число свитчейDB EQUAL -номер выделенного (начиная с 0)DW OPERAND...DB -1*Объект-скроллбар: набор дескрипторовDESCSLB DB NUMBER -активная зона (размер по скроллбару)DB HIGH -YZDB COUNT -элементов в "списке"DW 0 -резервDB DELTA -текущая позицияDW OPERAND...DB -1*Объект-слайдер: набор дескрипторовDESCPLZ DB NUMBER -активная зона (размер по слайдеру)DB FLAG -0- вертикальный, 1-горизонтальныйDB EQUAL -значение (0..31)DW OPERAND...DB -1*Объект-список: дескрипторDESCLST DB NUMBER -активная зона (без подсветки)DB HIGH -YZDB COUNT -элементов в спискеDW 0 -резервDB DELTA -номер первого видимогоDW LISTDATA -массив строкDB LEN -такой длиныDB -1При выборе элемента списка WINDOW возвращает A=254 и C=номервыбранного элемента.Дескрипторов списков может быть несколько, но нельзя определитьиз какого списка был выбран элемент#endif;Макросы доступа к элементам структурыTEST MACRO tbit,ofBIT tbit,(IX+of)ENDM;Можно в качестве первого параметра указывать список регистров;MOV EDCB,WIN_XPOS; ==;LD E,(IX+WIN_XPOS):LD D,(IX+WIN_XPOS+1);LD C,(IX+WIN_XPOS+2),LD B,(IX+WIN_XPOS+3)MOV MACRO re1,re2,ofLD re1,(IX+of)LD re2,(IX+of+1)ENDM;Обратно MOVMACRO STORIF ?\0+1DISPLAY "FIELD \0 IS UNDEFINED"ELSELOCALCOFF=\PREPEATLD (IX+COFF),\C\NCOFF=COFF+1UNTIL "\C"-","ENDLENDIFENDM;Можно в качестве первого параметра указывать список регистров;MOVHL ABC; ==;LD A,(HL):INC HL:LD B,(HL):INC HL:LD C,(HL):INC HLMOVHL MACRO reLD re,(HL)INC HLENDM;Обратно MOVHLSTORHL MACRO reLD (HL),reINC HLENDMLDCP MACROLD A,(HL)CP 255ENDM;HL+=AADDHLA MACROADD A,LLD L,AADC A,HSUB LLD H,AENDM;DE+=AADDDEA MACROADD A,ELD E,AADC A,DSUB ELD D,AENDM;A*=8AMUL8 MACROADD A,AADD A,AADD A,AENDM;HL+=3HLPL3 MACROINC HLINC HLINC HLENDM;HL+=2HLPL2 MACROINC HLINC HLENDM;Выравнивание куска кода по границе 256 байт