Blame | Last modification | View Log | Download | RSS feed
;***************************************************************;*;* COVER.H;*;* Главный файл оболочки.;* Оконные и графические процедуры.;*;* (C) Vitamin/CAIG/2001 2001-2006;*;* Обозначения в файле MACROS.H;*;* Revision 9.01.2006;*;***************************************************************#if 0Func: ASKERDesc: Задает вопрос "вы уверены (д/н)"Out: Z- YES, NZ- NOUses: *Note: NOASKER запрещает генерацию---Func: WINDOWDesc: Выводит окно со всеми элементами и запускает циклIn: IX- window descriptorOut: A- номер выбранной зоны (255 если отмена)Uses: *---Func: LETTERSDesc: Устанавливает режим ввода букв для EDITUses: A---Func: DIGITSDesc: Устанавливает режим ввода только цифр для EDITUses: A---Func: EDITDesc: Редактор текстаIn: HL- text, DE- (XZ,YZ), B- symbolsUses: *Note: <Edit>- переключение языка---Func: PRINTDesc: Печать строки (шрифт 6x8 по умолчанию) с позиции (1,0)In: HL- text, C- symbols (=0- сколько в строке)Uses: *Note: Коды: 13- перевод строки, 22,X,Y- позиционирование,0- конец строки. Позиция относительно левого верхнегоугла текущего окна---Func: PRINTXYDesc: Печать строки с определенной позицииIn: DE- (XS,YZ) (*)Uses: *Note: (*) см. описание PRINT---Func: MAKEWINDDesc: Открытие окна и печать текстаIn: IX- descriptorUses: *Note: Другие элементы интерфейса не выводятся---Func: TAB_JPDesc: Переход к процедуре с номером в таблицеIn: A- number, HL- table---Func: TST_HLDesc: Проверка HLIn: HLOut: CARRY (HL=FFFF), ZERO (HL=0000)Uses: A---Func: CLOSEDesc: Закрытие последнего открытого окнаOut: A- количество оставшихся оконUses: *---Func: RAMKADesc: Сплошная рамка по знакоместамIn: HL=(XZ,YZ)-позиция BC=(XZ,YZ)- размерUses: *---Func: RAMKDesc: Пунктирная рамка по знакоместамIn: HL=(XZ,YZ)- позиция BC=(XZ,YZ)- размерUses: *---Func: CLS_WINDesc: Очистка области на экранеIn: HL=(XZ,YZ)- позиция BC=(XZ,YZ)- размерыUses: *Note: Атрибуты области сбрасываются в WINCOLOR---Func: GETWINDDesc: Сохранение области экрана в памятьIn: HL=(XZ,YZ)- позиция, BC=(XZ,YZ)- размер DE- memaddrUses: *Note: Атрибуты также сохраняются---Func: PUTWINDDesc: Вывод области экрана из памятиNote: Параметры аналогично GETWIND---Func: PUT_SPRTDesc: Вывод спрайтаIn: HL=(XZ,YZ)- позиция BC=(XZ,YZ)- размерDE- данные в памяти, C': бит0- данные, бит1- атрибутыбит2- экранные координаты (иначе оконные)Uses: *---Func: COMBOBOXDesc: Выводит и обрабатывает комбобоксIn: HL=(YZ,XZ)- координаты на экране BC=(YZ,XZ)- размерDE- строки длиной E' и числом D'. A- первый элементOut: A- выбранный элемент (255 если отмена)Note: NOCOMBO запрещает генерацию#endif;BIT NUMBERSFLG_HEADER=0FLG_REFRESH=1FLG_MOVABLE=2FLG_NOMODAL=3FLG_NOBACK=4#ifndef NOASKERASKERLD HL,(YWIN)PUSH HLLD IX,ASKWINCALL WINDOWAND APUSH AFCALL CLOSEPOP AFPOP HLLD (YWIN),HLRETASKWIN DEFB 12,10,9,4,7DEFB 0DEFW ASTEXTDEFW ASACTDEFW -1ASTEXT DEFB 'Вы уверены?',13,13DEFB ' Да Нет',0ASACT DEFB 1,2,3,1,3DEFB 4,2,3,1,3DEFB -1#endif ;ASKERSP_CYC LDCP ;ложим спрайтыRET ZLD D,AINC HLMOVHL EMOVHL CMOVHL BMOVHL AEXXLD C,AEXXLD A,(HL)INC HLPUSH HLLD H,(HL)LD L,AEX DE,HLCALL PUT_SPRTPOP HLINC HLJR SP_CYCP_FLAGZ SET 1,(IX+5)FL_CYC LDCP ;ложим флажкиRET ZCALL CAL_CORINC HLPUSH HLLD A,(HL)AND 7XOR 4CALL PR_ONEPOP HLHLPL3JR FL_CYCP_RADIO SET 2,(IX+5)SW_CYC LDCP ;ложим переключателиRET ZINC HLLD B,(HL) ;CNTINC HLLD C,(HL) ;EQUHLPL3PUSH HLPISS PUSH AFPUSH BCCALL CAL_CORLD A,C; DEC AAND AJR Z,PROTLD A,1PROT INC ACALL PR_ONEPOP BCPOP AFINC ADEC CDJNZ PISSPOP HLJR SW_CYC#ifndef NOSLBP_POLZ SET 3,(IX+5)PLZ_CYC LDCP ;ложим ползункиRET ZCALL POLZUNKCALL PUT_BARJR PLZ_CYC#endifP_HAND SET 4,(IX+5) ;ложим рукояткиRU_CYC LDCPRET ZCALL CAL_CORINC HLLD A,(HL)INC HLLD C,(HL)HLPL3PUSH HLAND AJR NZ,HOR_RUKCALL ADDRZLD A,15SUB CJR Z,PT_RKVRLALD B,ASKPV LD (HL),16CALL D_HLDJNZ SKPVPT_RKV LD DE,0xFE82LD (HL),DCALL D_HLLD (HL),ECALL D_HLLD (HL),ECALL D_HLLD (HL),DCALL D_HLLD A,CAND AJR Z,RP_CYCRLALD B,AOTRK LD (HL),16CALL D_HLDJNZ OTRKRP_CYC POP HLJR RU_CYCHOR_RUKCALL ADDRZPUSH HLPUSH BCLD C,8XOR ACL_UPS LD B,4PUSH HLCL_LD LD (HL),AINC LDJNZ CL_LDAND 192LD (HL),APOP HLINC HLD A,HAND 7SUB 3JR Z,AOKLD A,-1AOK CPLDEC CJR NZ,CL_UPSPOP BCPOP HLLD A,CAND 252RRARRAADDHLALD A,CAND 3RLALD (NYLO+1),ALD A,7LD (STROK+1),ALD BC,RK_SPRTSHLUSS LD A,(BC)LD E,ALD D,0PUSH BCNYLO LD A,0AND AJR Z,SUJLD B,ASSHIFTRR ERR DDJNZ SSHIFTSUJLD A,EXOR (HL)LD (HL),AINC HLLD A,DAND 254XOR (HL)LD (HL),ADEC HLINC HSTROK LD A,7POP BCINC BCDEC ALD (STROK+1),AJR NZ,SHLUSSPOP HLJP RU_CYCP_LIST SET 5,(IX+5)LS_CYC LDCP ;ложим спискиRET ZPUSH HLLD E,ALD D,0LD L,ALD H,DADD HL,HLINC HLADD HL,HLADD HL,DEMOV E,D,WIN_ACTADD HL,DEEX AF,AF'LD A,(HL)DEC ALD (EXS+1),AEX AF,AF'POP HLCALL POLZUNKPUSH HLLD A,(HL)LD (STR_LEN+1),ALD (PR_LIST+1),ADEC HLLD B,(HL)DEC HLLD C,(HL)LD (LST_TXT+1),BCDEC HLLD A,(HL)LD (DLTR+1),APOP HLLD A,DEXS ADD A,0LD D,APUSH HLCALL PUT_BARCALL LISTERPOP HLINC HLJR LS_CYCWINDOW LD (IX+5),0WINDOWSSLD (STAK),SPCALL MAKEWINDRES 5,(IX+4)MOV L,H,WIN_ACTCALL TST_HLJP C,WINCYCLMOV L,H,WIN_HOTCALL TST_HLJR C,WINCYCLJR Z,NO_HOTSET 0,(IX+5)NO_HOT MOV L,H,WIN_SPRCALL TST_HLJR C,WINCYCLCALL NZ,SP_CYCNEY1 MOV L,H,WIN_FLGCALL TST_HLJR C,WINCYCLCALL NZ,P_FLAGZNEY2 MOV L,H,WIN_SWTCALL TST_HLJR C,WINCYCLCALL NZ,P_RADIONEY3#ifndef NOSLBMOV L,H,WIN_SLBCALL TST_HLJR C,WINCYCLCALL NZ,P_POLZ#endifNEY4 MOV L,H,WIN_PLZCALL TST_HLJR C,WINCYCLCALL NZ,P_HANDNEY5 MOV L,H,WIN_LSTCALL TST_HLJR C,WINCYCLCALL NZ,P_LISTNEY6 MOV L,H,WIN_CLL ;вызов при созданииCALL TST_HLJR Z,WINCYCLJR C,WINCYCLSET 6,(IX+5)LD DE,WINCYCLPUSH DEJP (HL)MIMO CALL FIRJR Z,WINCYCLTEST FLG_NOMODAL,WIN_OPTJR Z,WINCYCLEXIT LD A,-1RETWINCYCLCALL POINTCALL RECALCCALL KEYTESTBIT 5,(IX+5)CALL NZ,AB_LISTCALL ACTESTLD DE,(YWIN)LD HL,(Y_ZN)LD BC,(YSIZ)CALL HITTESTJR C,MIMOLD A,LCP EJR NZ,WINCYCLCALL FIRJR Z,WINCYCLTEST FLG_MOVABLE,WIN_OPTJR Z,WINCYCLCALL WAITKEYSET 5,(IX+4)LD HL,(YWIN)ADD HL,HLADD HL,HLADD HL,HLLD A,LLD L,HLD H,ALD (X_C),HLSELCYC LD HL,(YWIN) ;перемещение окнаLD BC,(YSIZ)PUSH BCPUSH BCPUSH HLCALL RAMKCALL POINTCALL RECALCPOP HLPOP BCCALL RAMKPOP BCLD HL,(Y_ZN)YTST LD A,LADD A,CSUB 25JR C,XTSTINC ASUB LNEGLD L,AAMUL8LD (Y_C),AXTST LD A,HADD A,BSUB 33JR C,COOKINC ASUB HNEGLD H,AAMUL8LD (X_C),ACOOK LD (YWIN),HLCALL FIRJR Z,SELCYCLD (IX+0),HLD (IX+1),LCALL CLOSECALL WAITKEYSET 1,(IX+4)JP WINDOWSSKEYTESTCALL READKEYCP 14JR Z,QUICP 7JR Z,QUILD C,ABIT 0,(IX+5)RET ZLD L,(IX+10)LD H,(IX+11)KEY_CYC LDCPRET ZCP CJR NZ,NX_KEYINC HLLD E,(HL)INC HLLD A,(HL)AND AJR Z,EX_LD D,AEX DE,HLPOP DEJP (HL)EX_ LD A,EPOP DERETNX_KEY HLPL3JR KEY_CYCQUI POP HLJP EXITACTESTMOV L,H,WIN_ACTCALL TST_HLRET ZRES 7,(IX+5)XOR AEX AF,AF'AC_CYC LDCPRET ZLD D,A ;XINC HLLD E,(HL) ;YINC HLLD B,(HL) ;WIDTHINC HLLD A,(HL) ;HGTAND AJR Z,SK_ACLD C,AINC HL ;FLGPUSH HLCALL CAL_ABSLD HL,(Y_ZN)CALL HITTESTPOP HLJR C,NETOLD A,(HL)RRAJR NC,NETORRAJR NC,NOLIGARRALD A,ACTCOLORJR NC,LIGHALD A,ACTPCOLRLIGHA SET 4,(HL)CALL LIGHTNOLIGA CALL FIRJR Z,NETEBIT 4,(HL)LD A,WINCOLORCALL NZ,LIGHTRES 4,(HL)BIT 3,(HL)EXXLD DE,WAITKEYJR Z,DOWAILD DE,82DOWAI LD (PUSADR+1),DELD (PUSAD1+1),DEEXXBIT 2,(HL)EX DE,HLCALL NZ,PUSHERLD A,(IX+5)AND 254-0x60CALL NZ,OTHERBIT 7,(IX+5)RET NZPUSAD1 CALL WAITKEYEX AF,AF'LD SP,(STAK)RETSK_AC INC HLINC HLJR AC_CYCNETOBIT 4,(HL)LD A,WINCOLORCALL NZ,LIGHTRES 4,(HL)NETE INC HLEX AF,AF'INC AEX AF,AF'JP AC_CYCLIGHTPUSH BCPUSH HLLD (CLR+1),ALD L,ELD H,DCALL COOR_ATRZKL PUSH HLLD A,BCLR LD (HL),0INC LDJNZ CLRLD B,APOP HLDEC CJR Z,NZKLLD A,32ADDHLAJR ZKLNZKL POP HLPOP BCRETJUMPZA SET 7,(IX+5)LD A,(HL)INC HLLD H,(HL)LD L,AOR HRET ZJP (HL)OTHERBIT 1,(IX+5)JR Z,HOW_SWTMOV L,H,WIN_FLGTS_FL LDCPJR Z,HOW_SWTEX AF,AF'CP (HL)JR NZ,NX_FLGEX AF,AF'INC HLLD A,(HL)CPLLD (HL),AINC HLCALL JUMPZASL POP HLCALL WAITKEYJP NEY1NX_FLG EX AF,AF'HLPL3INC HLJR TS_FLHOW_SWTBIT 2,(IX+5)JR Z,HOW_BARMOV L,H,WIN_SWTTS_SW LDCPJR Z,HOW_BAREX AF,AF'CP (HL)JR C,NX_SWEX AF,AF'LD A,(HL) ;NUMINC HLADD A,(HL) ;CNTEXXLD L,AEX AF,AF'CP LEXXJR NC,NX_SW+1EXXLD L,AEX AF,AF'LD A,L ;NEXTEXXDEC HLSUB (HL); INC AHLPL2LD (HL),AINC HLCALL JUMPZASPL POP HLCALL WAITKEYJP NEY2NX_SW HLPL3HLPL2EX AF,AF'JR TS_SWHOW_BAR#ifndef NOSLBBIT 3,(IX+5)JP Z,HOW_RUKMOV L,H,WIN_SLBTS_BR LDCPJP Z,HOW_RUKEX AF,AF'CP (HL)JR NZ,NX_BREX AF,AF'INC HLCALL CAL_COR ;D-X E-YCALL CAL_ABSCALL TST_SLBINC HLCALL JUMPZAZYT POP HLPOP HLJP NEY3NX_BR EX AF,AF'LD A,8ADDHLAJR TS_BR#endifHOW_RUKBIT 4,(IX+5)RET ZMOV L,H,WIN_PLZTS_RU LDCPRET ZEX AF,AF'CP (HL)JR NZ,NX_RUKEX AF,AF'CALL CAL_CORCALL CAL_ABSINC HLLD A,(HL)AND AINC HLJR NZ,TS_HROXOR ALD (MAXA+1),ALD A,ERLARLALD E,ALD A,(Y_C)AND 254RRASUB EXOR 15CP 31JR C,TS_DGAND 15JR TS_DGTS_HRO LD A,DAND ARLARLALD D,ALD A,15LD (MAXA+1),ALD A,(X_C)AND 254RRASUB DCP 31JR C,TS_DGAND 15TS_DG CP 16JR C,COR_ZNMAXA LD A,0COR_ZN LD (HL),AINC HLCALL JUMPZAPOP HLPOP HLJP NEY4NX_RUK EX AF,AF'HLPL3INC HLINC HLJR TS_RUAB_LISTMOV E,D,WIN_LSTTS_LS MOV L,H,WIN_ACTLD A,(DE)EX AF,AF'EX DE,HLLDCPRET ZPUSH HLINC HLLD A,(HL)LD (RESH+1),APUSH DEEX AF,AF'LD L,ALD E,ALD H,0LD D,HADD HL,HLADD HL,HLADD HL,DEPOP DEADD HL,DELD D,(HL)INC HLLD E,(HL)INC HLLD (COZIN+1),HLLD A,(HL) ;SHIRINALD (EXC+1),ALD (SHIR+1),ALD B,AINC HLLD C,(HL)LD A,CAND AJP Z,NX_ZNOLD HL,(YWIN)ADD HL,DELD A,LLD (YSHKA+1),APUSH HLPUSH BCCALL COOR_ATRLD DE,32LD A,(COLOR+1)SP_A PUSH BCLD C,LSP_R LD (HL),AINC LDJNZ SP_RLD L,CPOP BCADD HL,DEDEC CJR NZ,SP_APOP BCPOP HLEX DE,HLLD HL,(Y_ZN)CALL HITTESTJR C,NX_ZNOEXXPOP HLINC HLLD B,(HL)INC HLLD C,(HL) ;COUNTHLPL3LD D,(HL) ;DELTAHLPL3LD A,(HL)INC HLEXXEXC LD A,0 ;WIDTHDEC AADD A,DCP HJP Z,BARRLD A,LSUB EEXXCP CJR NC,TS_LS1 ;NX_ZNOPUSH HLCOZIN LD HL,0INC HLINC HLBIT 4,(HL)JR Z,KEXRES 4,(HL)DEC HLRESH LD (HL),0KEX POP HLADD A,DLD E,APUSH HLEXXLD A,DEXXLD H,AEXXLD A,EEXXADD A,ESUB DLD L,ACALL COOR_ATRSHIR LD B,0DEC BLD A,(SELCOLR+1)ZPPL LD (HL),AINC LDJNZ ZPPLPOP HLCALL FIRJR NZ,SELESTAPOP HLJP WINCYCLSELESTA LD HL,(LST_TXT+1)LD A,(STR_LEN+1)LD D,ALD A,EAND AJR Z,QQQLD B,ALD E,DLD D,0SILI ADD HL,DEDJNZ SILIQQQ LD C,ALD A,254LD SP,(STAK)RETNX_ZNO POP HLLD DE,9ADD HL,DETS_LS2 EX DE,HLJP TS_LSTS_LS1 PUSH HLLD HL,(COZIN+1)INC HLLD (HL),CINC HLSET 4,(HL)POP HLJR TS_LS2BARR EXXCALL FIRRET ZLD A,DLD DE,-8ADD HL,DELD D,AYSHKA LD E,0CALL TST_SLBPOP HLMOV L,H,WIN_LSTCALL LS_CYCJP WINCYCLTST_SLBLD C,(HL) ;HIGHINC HLLD A,(HL)SUB CEXXLD E,A ;NON-VISIBLEEXXINC HLLD A,(HL) ;SC_HGTEXXLD C,A ;SC_HGTSRL ALD H,A ;SC_HGT/2EXXINC HLLD A,(HL) ;STEPEXXLD L,AEXXINC HLLD A,(HL) ;DELTAEXXLD D,AEXXPUSH HLLD A,(Y_ZN)CP E ;YMINJR Z,LN_UP1SUB C ;HGTINC ACP EJR Z,LN_DEFW1CLCBAR LD A,E ;YINC AAMUL8LD B,A ;SCRTOP IN PIXLD A,EDEC AADD A,CAMUL8LD C,ALD A,(Y_C)EXXSUB H ;HBAR/2EXXJR C,NEDOPSUB BJR NC,NE_BEG1NEDOP LD H,0JR DCR1NE_BEG1LD H,A ;DELTA IN PIXLD A,(Y_C)EXXADD A,H ;HBAR/2EXXJR C,PEREBSUB CJR C,DCR1PEREB LD A,CEXXSUB CEXXSUB BNE_END1LD H,A ;DELTA POSDCR1 EXXLD A,L ;STEPEXXLD E,ACALL MULSLD A,LRZL1 POP HLLD (HL),ARETLN_UP1LD A,(HL)AND AJR Z,RZL1DEC AJR RZL1LN_DEFW1LD A,(HL)EXXCP EEXXJR NC,RZL1INC AJR RZL1POLZUNK CALL CAL_COR ;D-X E-Y координатыLD (X_LST+1),DEINC HLLD A,(HL) ;высотаLD (HYW+1),ALD (STRS1+1),ALD C,AINC HLLD B,(HL) ;количество эл-товINC HLDEC ADEC AAMUL8EXXLD E,A ;TOTAL HGTEXXLD A,BSUB CJR C,NO_FULLEXXLD D,ALD B,1KON LD C,D ;A,DCALL DIVILD A,ESUB CJR C,KUNCP 12JR NC,REDYKUN INC BJR KONREDY EXXLD (HL),A ;высота бараINC HLEXXLD D,ALD A,BEXXLD (HL),A ;蠣LD B,AINC HLLD C,(HL) ;A DELTACALL DIVILD A,CEXXLD C,AEXXHLPL3RETNO_FULL LD A,BLD (STRS1+1),ALD C,0EXXLD B,1LD A,EJR REDYPUT_BAR PUSH HL ;DE-коорд. HYW-высотаPUSH DEPUSH DECALL ADDRZLD A,5CALL PR_ONEPOP DELD A,EHYW ADD A,0DEC ALD E,ALD A,6CALL PR_ONEPOP DEINC ECALL ADDRZLD (HL),255INC HLD (HL),129EXX ;E' -высота всей линейкиLD A,EEXXLD C,AEXX ;C' -пропускLD A,CEXXLD B,AAND AJR Z,DEL_ZERZP_PRB CALL D_HLLD (HL),129DEC CDJNZ ZP_PRBDEL_ZER EXX ;D' -высота бараLD A,DEXXSUB 6LD B,ACALL D_HLDEC CLD (HL),189ZP_BGN CALL D_HLLD (HL),165DEC CDJNZ ZP_BGNCALL D_HLDEC CLD (HL),189DEC CDEC CDEC CZERK CALL D_HLLD (HL),129DEC CJR NZ,ZERKCALL D_HLLD (HL),255POP HLRETLISTER LD HL,(YWIN)PUSH HLX_LST LD DE,0x0602 ;координаты списка в окнеADD HL,DELD (YWIN),HLSTR_LEN LD E,8 ;длина одной строки (симв)LD D,0LST_TXT LD HL,0 ;адрес спискаDLTR LD A,0 ;расположение бегункаAND AJR Z,STRS1SEARCH ADD HL,DEDEC AJR NZ,SEARCHSTRS1 LD A,7 ;количество строк в спискеAND AJR Z,ENNDLD B,ALD DE,(YWIN)PR_LIST LD C,8 ;длина строкиPUSH DECALL PRINTPOP DEINC ELD (YWIN),DEDJNZ PR_LISTENND POP HLLD (YWIN),HLRET;-------------------------------------------------------------LETTERS LD A,32LD (FIRST+1),ALD A,255LD (LAST+1),ARETDIGITS LD A,48LD (FIRST+1),ALD A,58LD (LAST+1),ARETEDITXOR ALD (SYMPOS+1),ALD A,BLD (TXTLEN+1),APUSH HLLD HL,(YWIN)EX (SP),HL ;коорд. окнаLD (TXTADR+1),HLCALL CAL_ABSLD (YWIN),DETXTADR LD HL,0TXTLEN LD C,0LD DE,0CALL PRINTXYLD DE,0x0080SYMPOS LD A,0LD B,AADD A,AADD A,BLD C,ALD B,4CALL DIVISUB 4NEGAND AJR Z,JEXRLALD B,ASCR_KR AND ARL ERL DDJNZ SCR_KRJEX LD HL,(YWIN)LD A,HADD A,CLD H,ACALL COOR_ZINC HLD (DREZ+1),HLLD (DREZ1+1),HLLD (SIGN+1),DELD (SIGN1+1),DEXOR ALD (FLASHER+1),AW_KEY LD B,7FLASHER LD A,0AND 127RATE1 CP 10DREZ LD HL,0SIGN LD DE,0CALL Z,KURSORLD A,(FLASHER+1)AND 128LD C,ALD A,(FLASHER+1)AND 127INC ARATE2 CP 11JR NZ,NO_CHANLD A,CXOR 128LD (FLASHER+1),AJR RD_KYNO_CHAN OR CLD (FLASHER+1),ARD_KY XOR ALD (23560),AHALTLD A,(23560)AND AJR Z,W_KEYLD A,(23560)CP 6JR Z,CAPSCP 8JR Z,KR_LFTCP 9JP Z,KR_RGTCP 7JP Z,CH_LANCP 12JP Z,DELETECP 13JR Z,EX_EDCP 14JR Z,EX_EDLD C,Ald a,0x7fin a,(0xfe)rraJR c,EDIT_Cld a,0x7fin a,(0xfe)rraJR NC,EX_EDEDIT_CCALL CORRECTREGISTR LD A,0AND ACALL NZ,RUSSIANLD A,CFIRST CP 32JR C,W_KEYLAST CP 255JR NC,W_KEYLD A,(FLASHER+1)LD B,7DREZ1 LD HL,0SIGN1 LD DE,0AND 128CALL NZ,KURSORJR PRINTABLEEX_ED POP HLLD (YWIN),HLRETPRINTABLELD A,(SYMPOS+1)LD B,ALD HL,(TXTADR+1)ADDHLALD (HL),CLD A,(TXTLEN+1)DEC ACP BJP Z,TXTADRLD A,BINC ALD (SYMPOS+1),AJP TXTADRCAPS LD A,(23658)XOR 8LD (23658),AJP W_KEYKR_LFT LD A,(SYMPOS+1)AND AJP Z,W_KEYDEC ALD (SYMPOS+1),AJP TXTADRKR_RGT LD A,(SYMPOS+1)LD C,ALD A,(TXTLEN+1)DEC ACP CJP Z,W_KEYLD A,CINC ALD (SYMPOS+1),AJP TXTADRCH_LANLD A,(REGISTR+1)XOR 1LD (REGISTR+1),AJP W_KEYDELETELD A,(SYMPOS+1)LD C,AAND AJP Z,W_KEYDEC ALD C,ALD A,CLD HL,(TXTADR+1)ADDHLALD (HL),32LD A,CLD (SYMPOS+1),AJP TXTADRKURSOR LD A,(HL)XOR DLD (HL),AINC LLD A,(HL)XOR ELD (HL),ADEC LINC HDJNZ KURSORRETCORRECT LD A,CCP 195RET CSUB 195LD HL,CORR_TABJR TSURRUSSIAN LD HL,RUS_KBDLD A,CCP 255RET ZSUB 32TSUR ADDHLALD A,(HL)LD C,ARETPRINTOLDld de,(YTXT)jr PRINTXY1LD DE,0x0100PRINTXY LD (YTXT),DEPRINTXY1PUSH BCPUSH HLLD BC,0xFC00LD A,DADD A,AADD A,DLD D,A ;*3XOR ARR DRRARR DRRARLCARLCA ;*3/4AND A ;D-POSITION A-SCROLLJR Z,LFBORDSUB 4NEGLD L,ASMASK AND ARL BRL CRL BRL CDEC LJR NZ,SMASKLFBORDEX AF,AF'CALL ADDRZINC HLD (PRADR+1),HLEXXPOP HLPOP BCWRITE ld a,(PRADR+2)cp 0x58jp nc,SCROLUPLD A,(HL)INC HLAND ARET ZCP 32JR C,WRITE2CALL PRSYMLD A,(XTXT)INC ALD (XTXT),ALD A,CAND AJR Z,WRITEDEC CRET ZJR WRITEWRITE2LD DE,(YTXT)CP '\n'jr z,WRITE_NCP '\r'JR NZ,POSITINC EWRITE_NLD d,1JR PRINTXYPOSIT CP 22JR NZ,WRITELD D,(HL)INC HLLD E,(HL)INC HLJR PRINTXYPRSYM EXX ;A- SYMBOL CODELD E,A ;CHANGELD D,high(FONT6X8)+1EX AF,AF'PRADR LD HL,0AND AJR NZ,NOLEFINC AEX AF,AF'P1 LD A,(HL)OR BXOR BLD (HL),ALD A,(DE)AND BOR (HL)LD (HL),AINC DINC HLD A,HAND 7JR NZ,P1JR NEBCANOLEF DEC AJR NZ,NO2LD A,2EX AF,AF'P2 LD A,(HL)OR CXOR CLD (HL),ALD A,(DE)RLCARLCAAND COR (HL)LD (HL),AINC LLD A,(HL)OR BXOR BLD (HL),ALD A,(DE)RLCARLCAAND BOR (HL)LD (HL),ADEC LINC DINC HLD A,HAND 7JR NZ,P2IADR LD A,(PRADR+1)INC ALD (PRADR+1),ANEBCA RL BRL CRL BRL CEXXRETJR NEBCANO2 DEC AJR NZ,NO4LD A,3EX AF,AF'P3 LD A,(HL)OR CXOR CLD (HL),ALD A,(DE) ;7RRCARRCARRCARRCAPUSH AFAND COR (HL)LD (HL),AINC LLD A,(HL)OR BXOR BLD (HL),APOP AFAND BOR (HL)LD (HL),ADEC LINC DINC HLD A,HAND 7JR NZ,P3JR IADRNO4 XOR AEX AF,AF'P4 LD A,(HL)OR CXOR CLD (HL),ALD A,(DE)RRCARRCAAND COR (HL)LD (HL),AINC LLD A,(HL)OR BXOR BLD (HL),ALD A,(DE)RRCARRCAAND BOR (HL)LD (HL),ADEC LINC DINC HLD A,HAND 7JR NZ,P4LD BC,0xFC00>>2JR IADRMAKEWINDMOV H,L,WIN_XPOSMOV B,C,WIN_XPOS+2LD (YWIN),HLLD (YSIZ),BCTEST FLG_REFRESH,WIN_OPTJR Z,NO_PEREPUSH HLPUSH BCCALL OPENPOP BCPOP HLTEST FLG_HEADER,WIN_OPTJR Z,NO_HEADPUSH HLCALL COOR_ATRLD A,BSELCOLR LD (HL),HDRCOLORINC HLDJNZ SELCOLRLD B,APOP HLINC LDEC CNO_HEAD CALL RAMKANO_PERE MOV L,H,WIN_TXTCALL TST_HLRET ZLD C,0JP PRINTTAB_JP ADD A,A ;HL<- TABLE ADDRESSADDHLALD A,(HL)INC HLLD H,(HL)LD L,AJP (HL)TST_HL LD A,LAND HINC AJR NZ,NULHLSCFRETNULHL LD A,LOR HRETOPEN PUSH HLLD D,HLD E,L ;открыть окноLD A,(WINS)AMUL8 ;HL- координаты H- X L- YLD HL,REESTR ;BC- размерADDHLASTORHL DSTORHL ESTORHL BSTORHL CLD DE,(FREE)LD (HL),E ;BEGININC HLLD (HL),DPOP HLTEST FLG_NOBACK,WIN_OPTJR NZ,CELESPUSH BCPUSH HLCALL GETWINDLD (FREE),DEPOP HLPOP BCCELES CALL CLS_WINLD A,(WINS)INC AMOWINS LD (WINS),ARETCLOSE LD A,(WINS)AND ARET ZDEC AAMUL8LD HL,REESTRADDHLAMOVHL DMOVHL EMOVHL BMOVHL CMOVHL ALD H,(HL)LD L,AEX DE,HLLD (FREE),DECALL PUTWINDLD A,(WINS)DEC AJR MOWINSRAMKAXOR ALD D,ALD E,ADEC AJR DRAW_RRAMK LD A,85LD DE,(ZNM)DRAW_RLD (MODE1+1),ALD (MODE2+1),ALD (DRSKIP),DELD D,BLD E,CPUSH HLCALL COOR_ZEX (SP),HLADD HL,DEPOP DECALL COOR_ZDEC LCALL U_HLHORIZ LD A,(DE)MODE1 XOR -1LD (DE),ALD A,(HL)MODE2 XOR -1LD (HL),AINC EDEC LDJNZ HORIZINC LDEC ELD B,CVECYCLD A,(DE)MODE3 XOR 1LD (DE),ALD A,(HL)MODE4 XOR 128LD (HL),AZNM DEC HINC DDRSKIP NOPNOPLD A,DAND 7JR NZ,VECYCRENO INC HDEC DCALL U_HLCALL D_DEDJNZ VECYCRETCLS_WINCALL COOR_ZPUSH HLLD D,BLD E,CALM LD A,LLD B,DRJD LD (HL),0INC LDJNZ RJDLD L,AINC HLD A,HAND 7JR NZ,ALMCALL D_HL+5DEC EJR NZ,ALMPOP HLCALL ATR_CONVERTAL3 LD B,DCOLOR LD (HL),WINCOLORINC HLDJNZ COLORLD A,32SUB DADDHLADEC CJR NZ,AL3RETGETWIND XOR AJR GEPUPUTWIND LD A,0xEBGEPU LD (MOD1),ALD (MOD2),ALD (MOD3),ALD (MOD4),AGET_PUTLD A,CLD C,BLD B,ACALL COOR_ZPUSH HLPUSH BCALLL LD A,L ;HL-SCREENPUSH BC ;C-WIDTHLD B,0MOD1 NOPLDIRMOD2 NOPDEC HLPOP BCLD L,AINC HLD A,HAND 7JR NZ,ALLLCALL D_HL+5DJNZ ALLLPOP BCPOP HLCALL ATR_CONVERTALLAPUSH BCLD B,0MOD3 NOPLDIRMOD4 NOPPOP BCLD A,32SUB CADDHLADJNZ ALLARETPUT_SPRTEXXBIT 2,CEXXJR NZ,ABS_COORDPUSH DEEX DE,HLCALL ADDRZPOP DE ;HL-SCR DE-DATAJR PUSPRABS_COORDCALL COOR_ZPUSPRPUSH HLEXXBIT 0,CEXXJR Z,ATTRZEX DE,HLPUSH BCPSP1 LD A,EPUSH BCLD B,0LDIRDEC DEPOP BCLD E,AINC DLD A,DAND 7JR NZ,PSP1CALL D_DE+5DJNZ PSP1POP BCEX DE,HLATTRZ POP HLEXXBIT 1,CEXXRET ZCALL ATR_CONVERTEX DE,HLPATRA PUSH BCLD B,0LDIRPOP BCLD A,32SUB CADDDEADJNZ PATRARETPUSHERPUSH HLLD A,LADD A,CDEC ALD L,ACALL COOR_ZLD A,HOR 7LD H,AEX (SP),HL ;LEFT BOTTOMLD A,HADD A,BDEC ALD H,ACALL COOR_Z ;RIGHT TOPEX (SP),HLLD A,CAMUL8DEC ALD C,APUSH BCPROW2 LD D,HLD E,LCALL U_HLPUSH HLPUSH BCAND APROW1 LD A,(HL)RRALD (DE),AINC LINC EDJNZ PROW1POP BCPOP HLDEC CJR NZ,PROW2LD A,BCLRRW1 LD (HL),CINC LDJNZ CLRRW1LD B,APUSADR CALL WAITKEYPOP BCPOP HLPROW4 LD D,HLD E,LCALL D_HLPUSH HLPUSH BCAND APROW3 LD A,(HL)RLALD (DE),ADEC LDEC EDJNZ PROW3POP BCPOP HLDEC CJR NZ,PROW4CLRRW2 LD (HL),CDEC LDJNZ CLRRW2RETPR_ONE EX AF,AF'CALL ADDRZEX AF,AF'EX DE,HLLD L,ALD H,high(FONT6X8)PRON LD A,(HL)LD (DE),AINC HINC DLD A,DINC AAND 7JR NZ,PRONRET#ifndef NOCOMBOCOMBOBOXLD (LISTD),ALD (LISTA),DELD (CBWIN),HLLD (CBWIN+2),BCLD (CBACT+2),BCLD A,BEXXLD (LISTH),ALD A,DLD (LISTC),ALD A,ELD (LISTL),AEXXLD HL,(YWIN)PUSH HLPUSH IXLD IX,CBWINCALL WINDOWINC ALD A,CPUSH AFCALL CLOSEPOP AFPOP IXPOP HLLD (YWIN),HLRET NZLD A,-1RETCBWIN DEFB 0,0,0,0,10DEFB 0DEFW 0DEFW CBACTDEFW 0,0,0,0,0#ifndef NOSLBDEFW 0#endifDEFW CBLISTDEFW -1CBACT DEFB 0,0,0,0,1,-1CBLIST DEFB 0LISTH DEFB 0LISTC DEFB 0DEFW 0LISTD DEFB 0LISTA DEFW 0LISTL DEFB 0DEFB -1#endif ;COMBOBOX#include "EXTERN.S01"