From c64bb6b2854fdea5a450ea8581e42b16635bdd44 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sat, 26 Apr 2025 02:32:08 +1000 Subject: [PATCH] =?UTF-8?q?=D0=BA=D1=83=D1=80=D1=81=D0=BE=D1=80=20=D0=B8?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B5=D1=80=D1=8B=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=D1=8E=D1=82=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7?= =?UTF-8?q?=20=D0=B4=D0=BE=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DIALOG.ASM | 2882 +++++++++++++++++++-------------------- FMAIN.ASM | 42 +- RADIO.ASM | 3440 ++++++++++++++++++++++++----------------------- Shared_Includes | 2 +- Version.inc | 2 +- 5 files changed, 3197 insertions(+), 3171 deletions(-) diff --git a/DIALOG.ASM b/DIALOG.ASM index e6c0214..dff4965 100755 --- a/DIALOG.ASM +++ b/DIALOG.ASM @@ -5,119 +5,120 @@ ; Внутренние сообщения -evNothing equ 0 ; нет событий -evMouseFr equ 1 ; нажата кнопка у мыши -evKeyboard equ 2 ; нажата клавиша -evCombKey equ 3 ; нажата комбинация клавиш -evCommand equ 4 ; передача команды -evMessage equ 5 ; передача сообщения +evNothing: EQU 0 ; нет событий +evMouseFr: EQU 1 ; нажата кнопка у мыши +evKeyboard: EQU 2 ; нажата клавиша +evCombKey: EQU 3 ; нажата комбинация клавиш +evCommand: EQU 4 ; передача команды +evMessage: EQU 5 ; передача сообщения -TextLine equ 1 -InputLine equ 2 -ClRadioBut equ 3 -ClCheckBut equ 4 -ListBox equ 5 -Button equ 9 -Frame equ 10 +TextLine: EQU 1 +InputLine: EQU 2 +ClRadioBut: EQU 3 +ClCheckBut: EQU 4 +ListBox: EQU 5 +Button: EQU 9 +Frame: EQU 10 -cmOkey equ 36h -cmCancel equ 37h -cmOptions equ 38h -cmSave equ 39h +cmOkey: EQU 36h +cmCancel: EQU 37h +cmOptions: EQU 38h +cmSave: EQU 39h -CTlabTD equ 47h -CTkeypadD equ 4Ah -CTcancD equ 36h -CTokD equ 37h -CThelpD equ 35h -CTbox1D equ 4Bh -CTbox2D equ 4Ch +CTlabTD: EQU 47h +CTkeypadD: EQU 4Ah +CTcancD: EQU 36h +CTokD: EQU 37h +CThelpD: EQU 35h +CTbox1D: EQU 4Bh +CTbox2D: EQU 4Ch -msHiddInvr equ 83h -msNewElem EQU 84h ; не отслеживается +msHiddInvr: EQU 83h +msNewElem: EQU 84h ; не отслеживается ; настроить курсор черточкой - call SetCursor + ;call SetCursor ; очистить экран - call ClearDesk + CALL ClearDesk ; уст. мышку в центр экрана - ld hl,312 ; X координата (0-639) - ld de,120 ; Y координата (0-255) - ld c,4 + LD HL,312 ; X координата (0-639) + LD DE,120 ; Y координата (0-255) + LD C,4 RST ToDSS.Mouse ; сбросить указатели ListBox`ов - ld hl,0 - ld (CurElem0),hl - ld (CurElem1),hl - + LD HL,0 + LD (CurElem0),HL + LD (CurElem1),HL +;!FIXIT CURSOR переделать на дос MainLOOP: ; подменить вектор на свой (для мигания курсора) - ld hl,(0039h) ;rdlow ok - ld (vect+1),hl - ld hl,rst38 - ld (0039h),hl + ; ld hl,(0039h) ;rdlow ok + ; ld (vect),hl + ; ld hl,rst38 + ; ld (0039h),hl ; -Loop1: call SetList ; настроить список дисководов -Loop2: ld hl,WinMain1 - call DialogW - ld a,(hl) - cp cmCancel - jp z,Exit1 - cp cmOptions - jr nz,.contin +Loop1: CALL SetList ; настроить список дисководов +Loop2: LD HL,WinMain1 + CALL DialogW + LD A,(HL) + CP cmCancel + ;jp z,Exit1 + JP Z,Exit + CP cmOptions + JR NZ,.contin ; - ld hl,WinOptions - call DialogW - ld a,(hl) - cp cmOkey - jr z,Loop1 - cp cmSave - jr nz,Loop2 - call SaveInit ; сохр. настройки флоповодов - jr Loop1 + LD HL,WinOptions + CALL DialogW + LD A,(HL) + CP cmOkey + JR Z,Loop1 + CP cmSave + JR NZ,Loop2 + CALL SaveInit ; сохр. настройки флоповодов + JR Loop1 ; .contin: ; восст. вектор - ld hl,(vect+1) - ld (0039h),hl - call SetDrive ; уст. заданный формат флоповодов - ld a,(CurElem0) - ld (DISK),a ; для п/п формат. - add a,"A" - ld (DskName),a ; буква диска - ld (LDISK),a + ; ld hl,(vect) ;!FIXIT CURSOR переделать курсор на дос и убрать перехвать прерываний + ; ld (0039h),hl + CALL SetDrive ; уст. заданный формат флоповодов + LD A,(CurElem0) + LD (DISK),A ; для п/п формат. + ADD A,"A" + LD (DskName),A ; буква диска + LD (LDISK),A ; блок настройки под выбранный формат - call Setup_Map ; настройка ширины карты (и др.) - call FSETUP ; настр. программу на формат дискеты + CALL Setup_Map ; настройка ширины карты (и др.) + CALL FSETUP ; настр. программу на формат дискеты ;-- ;-- -Loop3: call Clear1 - ld hl,InsDiskette ; "Вставьте диск в дисковод" - call DialogW ; отк. окно запроса - ld a,(hl) - cp cmCancel - jr z,MainLOOP ; назад в нач. окно fformat-а +Loop3: CALL Clear1 + LD HL,InsDiskette ; "Вставьте диск в дисковод" + CALL DialogW ; отк. окно запроса + LD A,(HL) + CP cmCancel + JR Z,MainLOOP ; назад в нач. окно fformat-а ; - ld a,(ColDialWn) - push af - ld a,37h ; цвет окна форматирования - ld (ColDialWn),a - ld hl,WinMain2 ; окно процесса форматирования - call PutDialWn - pop af - ld (ColDialWn),a - call FFORMAT - jr Loop3 + LD A,(ColDialWn) + PUSH AF + LD A,37h ; цвет окна форматирования + LD (ColDialWn),A + LD HL,WinMain2 ; окно процесса форматирования + CALL PutDialWn + POP AF + LD (ColDialWn),A + CALL FFORMAT + JR Loop3 - -Exit1: ; восст. вектор - ld hl,(vect+1) - ld (0039h),hl - jp Exit +;!FIXIT CURSOR переделать курсор на дос и убрать перехвать прерываний +;Exit1: ; восст. вектор + ; ld hl,(vect) + ; ld (0039h),hl + ;jp Exit @@ -127,214 +128,214 @@ Exit1: ; ; Настроить список дисководов согласно заданным опциям -SetList: ld a," " - ld (DiskB),a ; начало строки диска "B:" - ld c,0 ; диск "A:" - ld hl,DriveA ; 3 ячейки опций диска - ld de,DiskA+2 ; строка назначения - call SetDiskList - ld c,1 ; диск "B:" - ld hl,DriveB ; 3 ячейки опций диска - ld de,DiskB+2 ; строка назначения +SetList: LD A," " + LD (DiskB),A ; начало строки диска "B:" + LD C,0 ; диск "A:" + LD HL,DriveA ; 3 ячейки опций диска + LD DE,DiskA+2 ; строка назначения + CALL SetDiskList + LD C,1 ; диск "B:" + LD HL,DriveB ; 3 ячейки опций диска + LD DE,DiskB+2 ; строка назначения ; Настройка строки дисковода согласно заданным опциям ; вх: C=диск (0=A,1=B) ; HL=адрес 3-х ячеек опций диска ; DE=адрес строки назначения -SetDiskList: xor a - cp (hl) - jr nz,.loc1 ; 1.44Mb 3.5" - inc hl - cp (hl) - jr nz,.loc2 ; 720kB 5.25" +SetDiskList: XOR A + CP (HL) + JR NZ,.loc1 ; 1.44Mb 3.5" + INC HL + CP (HL) + JR NZ,.loc2 ; 720kB 5.25" ; no device "B:" - ld (DiskB),a ; стоп-байт перед строкой - ret -.loc1: ld hl,.loc4 - jr .loc3 -.loc2: ld hl,.loc5 -.loc3: ld a,"A" - add a,c -.loc6: ld (hl),a - ld bc,10 - ldir - ret + LD (DiskB),A ; стоп-байт перед строкой + RET +.loc1: LD HL,.loc4 + JR .loc3 +.loc2: LD HL,.loc5 +.loc3: LD A,"A" + ADD A,C +.loc6: LD (HL),A + LD BC,10 + LDIR + RET -.loc4: db "X: 1.44 Mb" -.loc5: db "X: 720 kB" +.loc4: DB "X: 1.44 Mb" +.loc5: DB "X: 720 kB" ; -DialogW: push hl +DialogW: PUSH HL ; очистить буфер клавы - ld bc,3135h + LD BC,3135h RST ToDSS - pop hl - call Dialog - ld hl,what - ld a,(hl) - inc hl - ret + POP HL + CALL Dialog + LD HL,what + LD A,(HL) + INC HL + RET ;Основной обработчик диалогового окна ;На вход: HL-Адрес описателя диалогового окна -Dialog: call PutDialWn +Dialog: CALL PutDialWn ; -DialogLp: call handleEvent ;Читаем событие - ld ix,DialTab+5 ;Таблица об'ектов -DialWlp: ld hl,DialWex - push hl - ld a,(ix+1) ;Текущий об'ект - res 7,a - CP InputLine - JP Z,EInpLine - CP ClRadioBut - JP Z,EClasterB - CP ClCheckBut - JP Z,EClasterB - CP ListBox - JP Z,EListBox - cp Button - jp z,EButton +DialogLp: CALL handleEvent ;Читаем событие + LD IX,DialTab+5 ;Таблица об'ектов +DialWlp: LD HL,DialWex + PUSH HL + LD A,(ix+1) ;Текущий об'ект + RES 7,A + CP InputLine + JP Z,EInpLine + CP ClRadioBut + JP Z,EClasterB + CP ClCheckBut + JP Z,EClasterB + CP ListBox + JP Z,EListBox + CP Button + JP Z,EButton ; - pop hl -DialWex: ld c,(ix+0) - ld b,0 - add ix,bc ;След.объект - bit 7,(ix+0) - jr z,DialWlp ;7-й бит - конец объектов (цикл не трогать) + POP HL +DialWex: LD C,(ix+0) + LD B,0 + ADD IX,BC ;След.объект + BIT 7,(ix+0) + JR Z,DialWlp ;7-й бит - конец объектов (цикл не трогать) ; - ld hl,what ; поле событий - ld de,DialogC - push de - ld a,(hl) ; +0 - inc hl - cp evKeyboard ; событие клавиатуры - jr z,TstKeyD ; проверка на Enter/Esc - cp evCombKey - jr z,TstCombKeyD ; тест на F10 - cp evCommand - jr z,TstCmnD ; проверка команд от мышки, клавы + LD HL,what ; поле событий + LD DE,DialogC + PUSH DE + LD A,(HL) ; +0 + INC HL + CP evKeyboard ; событие клавиатуры + JR Z,TstKeyD ; проверка на Enter/Esc + CP evCombKey + JR Z,TstCombKeyD ; тест на F10 + CP evCommand + JR Z,TstCmnD ; проверка команд от мышки, клавы ; - pop de -DialogC: jr DialogLp + POP DE +DialogC: JR DialogLp -TstCombKeyD: inc hl - ld a,(hl) ;+2 - cp 44h ; F10 - jr z,CancelD - ret +TstCombKeyD: INC HL + LD A,(HL) ;+2 + CP 44h ; F10 + JR Z,CancelD + RET -TstKeyD: ld a,(hl) ;+1 - cp 1Bh ; Esc - jr z,CancelD +TstKeyD: LD A,(HL) ;+1 + CP 1Bh ; Esc + JR Z,CancelD ;@@@ cp 0Dh ; Enter ; jr z,OkeyD - ret + RET ; -TstCmnD: ld a,(hl) - cp cmCancel - jr z,CancelD - jr OkeyDn +TstCmnD: LD A,(HL) + CP cmCancel + JR Z,CancelD + JR OkeyDn ;@@@ Ok ;OkeyD: ld hl,what ; ld (hl),evCommand ; inc hl ; ld (hl),cmOkey -OkeyDn: ld ix,DialTab+5 -OkeyLp: ld de,OkeyN ; Find clasters & get data - push de - ld a,(ix+1) ; какой тек. объект ? - res 7,a - cp ClRadioBut - jp z,GetClDt - cp ClCheckBut - jp z,GetClDt - cp ListBox - jp z,GetLstBox - pop de -OkeyN: ld c,(ix+0) - ld b,0 - add ix,bc ;Next object - bit 7,(ix+0) - jr z,OkeyLp ;NZ-End object table -DialogE: call ClsDial ; закрыть окно диалога - pop de ; выход из цикла (выровнить стек) - jp GetFire +OkeyDn: LD IX,DialTab+5 +OkeyLp: LD DE,OkeyN ; Find clasters & get data + PUSH DE + LD A,(ix+1) ; какой тек. объект ? + RES 7,A + CP ClRadioBut + JP Z,GetClDt + CP ClCheckBut + JP Z,GetClDt + CP ListBox + JP Z,GetLstBox + POP DE +OkeyN: LD C,(ix+0) + LD B,0 + ADD IX,BC ;Next object + BIT 7,(ix+0) + JR Z,OkeyLp ;NZ-End object table +DialogE: CALL ClsDial ; закрыть окно диалога + POP DE ; выход из цикла (выровнить стек) + JP GetFire ; Cancel -CancelD: ld hl,what - ld (hl),evCommand - inc hl - ld (hl),cmCancel - jr DialogE +CancelD: LD HL,what + LD (HL),evCommand + INC HL + LD (HL),cmCancel + JR DialogE -PutDial:PUSH IX - LD A,(IX+2) ;with shadow - ADD A,2 - LD L,A - LD A,(IX+3) - INC A - LD H,A ;Wind len - LD E,(IX+0) - LD D,(IX+1) - LD IX,WinBoxBuff+6800 ;Address Box buffers - EXX - CALL GetMousInfo - EXX - di -kk2: LD A,(Win2) ;Page buffer - LD B,A - xor a - LD C,BIOS.WIN_RESTORE ; из буфера в текст. окно - RST ToBIOS - ei - CALL GetMousInfo - ld c,1 ; вывести курсор мышки - RST ToDSS.Mouse - POP IX - RET +PutDial: PUSH IX + LD A,(IX+2) ;with shadow + ADD A,2 + LD L,A + LD A,(IX+3) + INC A + LD H,A ;Wind len + LD E,(IX+0) + LD D,(IX+1) + LD IX,WinBoxBuff+6800 ;Address Box buffers + EXX + CALL GetMousInfo + EXX + DI +kk2: LD A,(Win2) ;Page buffer + LD B,A + XOR A + LD C,BIOS.WIN_RESTORE ; из буфера в текст. окно + RST ToBIOS + EI + CALL GetMousInfo + LD C,1 ; вывести курсор мышки + RST ToDSS.Mouse + POP IX + RET ; Close Dialog window and restore box place ClsDial: - CALL ResILCr ; сбросить курсор - LD IX,DialData - LD A,(IX+2) ;with shadow - ADD A,2 - LD L,A - LD A,(IX+3) - INC A - LD H,A ;Wind len - LD E,(IX+0) - LD D,(IX+1) - EXX - CALL GetMousInfo - EXX - di - LD IX,WinBoxBuff ;Address Box buffers -kk3: LD A,(Win2) ;Page buffer - LD B,A - xor a - LD C,BIOS.WIN_RESTORE ; из буфера в текст. окно - RST ToBIOS - ei - CALL GetMousInfo - ld c,1 ; вывести курсор мышки - RST ToDSS.Mouse - RET + CALL ResILCr ; сбросить курсор + LD IX,DialData + LD A,(IX+2) ;with shadow + ADD A,2 + LD L,A + LD A,(IX+3) + INC A + LD H,A ;Wind len + LD E,(IX+0) + LD D,(IX+1) + EXX + CALL GetMousInfo + EXX + DI + LD IX,WinBoxBuff ;Address Box buffers +kk3: LD A,(Win2) ;Page buffer + LD B,A + XOR A + LD C,BIOS.WIN_RESTORE ; из буфера в текст. окно + RST ToBIOS + EI + CALL GetMousInfo + LD C,1 ; вывести курсор мышки + RST ToDSS.Mouse + RET @@ -343,137 +344,137 @@ kk3: LD A,(Win2) ;Page buffer ; Процедура рисования и печати диалогового окна ; На вход: HL - Адрес описателя PutDialWn: - PUSH IY - LD IY,DialTab - LD IX,DialData - IN A,(Page3) - PUSH AF -kk4: LD A,(Win2) ;Page buffer - OUT (Page3),A - LD A,(HL) ;X position - LD (IX+0),A ;Xpos - INC HL - LD A,(HL) ;Y position - LD (IX+1),A ;Ypos - INC HL - LD A,(HL) ;Len X - LD (IX+2),A ;Xlen - INC HL - LD A,(HL) ;Len Y - LD (IX+3),A ;Ylen - INC HL - LD DE,DialName -.loc1: LDI - LD A,(HL) - OR A - JR NZ,.loc1 - LDI - PUSH HL - CALL SavDial ;Save dialog place - CALL PutDialRc - LD HL,FramDSl - CALL PutDialFr ;Put Dialog frame & name - CALL PutDialSh - LD A,(IX+0) ;move window - LD (IY+0),A ; +0 - INC IY - ADD A,(IX+2) - LD (IY+0),A ; +1 - INC IY - LD A,(IX+1) - LD (IY+0),A ; +2 - INC IY - LD A,(IX+0) ; координаты |■| (закр.окно) - LD (IY+0),A ; +3 - INC IY - LD A,(IX+1) - LD (IY+0),A ; +4 - INC IY - POP HL -DialCyc:LD A,(HL) ;Next get includes objects - INC HL - BIT 7,A - JR NZ,DialExt ;End dialog label - LD DE,DialCyc - PUSH DE - CP TextLine - JP Z,PTextLn ;Put text line - CP InputLine - JP Z,PInpLine ;Put object input line - CP ClRadioBut - JP Z,PClRadioB ;Put claster radio buttons - CP ClCheckBut - JP Z,PClCheckB ;Put claster check buttons - CP ListBox - JP Z,PListBox ;Put List box - cp Button - jp z,PButton ; вставить бутон - cp Frame - jp z,PFrame + PUSH IY + LD IY,DialTab + LD IX,DialData + IN A,(Page3) + PUSH AF +kk4: LD A,(Win2) ;Page buffer + OUT (Page3),A + LD A,(HL) ;X position + LD (IX+0),A ;Xpos + INC HL + LD A,(HL) ;Y position + LD (IX+1),A ;Ypos + INC HL + LD A,(HL) ;Len X + LD (IX+2),A ;Xlen + INC HL + LD A,(HL) ;Len Y + LD (IX+3),A ;Ylen + INC HL + LD DE,DialName +.loc1: LDI + LD A,(HL) + OR A + JR NZ,.loc1 + LDI + PUSH HL + CALL SavDial ;Save dialog place + CALL PutDialRc + LD HL,FramDSl + CALL PutDialFr ;Put Dialog frame & name + CALL PutDialSh + LD A,(IX+0) ;move window + LD (IY+0),A ; +0 + INC IY + ADD A,(IX+2) + LD (IY+0),A ; +1 + INC IY + LD A,(IX+1) + LD (IY+0),A ; +2 + INC IY + LD A,(IX+0) ; координаты |■| (закр.окно) + LD (IY+0),A ; +3 + INC IY + LD A,(IX+1) + LD (IY+0),A ; +4 + INC IY + POP HL +DialCyc: LD A,(HL) ;Next get includes objects + INC HL + BIT 7,A + JR NZ,DialExt ;End dialog label + LD DE,DialCyc + PUSH DE + CP TextLine + JP Z,PTextLn ;Put text line + CP InputLine + JP Z,PInpLine ;Put object input line + CP ClRadioBut + JP Z,PClRadioB ;Put claster radio buttons + CP ClCheckBut + JP Z,PClCheckB ;Put claster check buttons + CP ListBox + JP Z,PListBox ;Put List box + CP Button + JP Z,PButton ; вставить бутон + CP Frame + JP Z,PFrame ; - POP DE -DialExt:LD (IY+0),80h ;+5 End dialog table - POP AF - OUT (Page3),A - CALL PutDial ;Put dialog window - POP IY + POP DE +DialExt: LD (IY+0),80h ;+5 End dialog table + POP AF + OUT (Page3),A + CALL PutDial ;Put dialog window + POP IY ; Select last element -SelLast:LD HL,DialTab+5 - LD DE,ReCompBuff - LD B,0 - LD C,(HL) - LD A,C - LDIR ; заполн. буфера DialTab+5 - LD C,A - DEC HL - LD E,L - LD D,H - OR A - SBC HL,BC - PUSH HL - LD BC,DialTab+4 - OR A - SBC HL,BC - LD C,L - LD B,H - POP HL - LD A,B - OR C - JR Z,$+4 - LDDR - LD HL,ReCompBuff - LD DE,DialTab+5 - LD C,(HL) - LDIR - SUB A - LD (CIflag+1),A - LD IX,DialTab+5 - LD HL,DIALe - PUSH HL - LD A,(IX+1) - SET 7,(IX+1) - CP InputLine - JP Z,InpLineI - CP ClRadioBut - JP Z,ClastI - CP ClCheckBut - JP Z,ClastI - CP ListBox - JP Z,PLstBoxI - CP Button - JR Z,ButtonI - POP HL -DIALe: ld c,1 ; вывести курсор мышки - RST ToDSS.Mouse - RET +SelLast: LD HL,DialTab+5 + LD DE,ReCompBuff + LD B,0 + LD C,(HL) + LD A,C + LDIR ; заполн. буфера DialTab+5 + LD C,A + DEC HL + LD E,L + LD D,H + OR A + SBC HL,BC + PUSH HL + LD BC,DialTab+4 + OR A + SBC HL,BC + LD C,L + LD B,H + POP HL + LD A,B + OR C + JR Z,$+4 + LDDR + LD HL,ReCompBuff + LD DE,DialTab+5 + LD C,(HL) + LDIR + SUB A + LD (CIflag+1),A + LD IX,DialTab+5 + LD HL,DIALe + PUSH HL + LD A,(IX+1) + SET 7,(IX+1) + CP InputLine + JP Z,InpLineI + CP ClRadioBut + JP Z,ClastI + CP ClCheckBut + JP Z,ClastI + CP ListBox + JP Z,PLstBoxI + CP Button + JR Z,ButtonI + POP HL +DIALe: LD C,1 ; вывести курсор мышки + RST ToDSS.Mouse + RET -ButtonI:LD E,(IX+2) ;Xo - LD D,(IX+4) ;Y - LD A,(IX+3) ;Xi - SUB E - LD C,A - jp SetDialInv +ButtonI: LD E,(IX+2) ;Xo + LD D,(IX+4) ;Y + LD A,(IX+3) ;Xi + SUB E + LD C,A + JP SetDialInv @@ -481,32 +482,32 @@ ButtonI:LD E,(IX+2) ;Xo ; Input: HL-label ; Format mouse table: None ; -PTextLn: ld c,(hl) ; X pos - inc hl - ld b,(hl) ; Y pos - inc hl - call GetPutA - ld a,(hl) ; цвет строки объекта TextLine - ex af,af' - inc hl -.loc1: ldi - ex af,af' - ld (de),a - ex af,af' - inc de - ld a,(hl) - cp 0FFh - jr z,.loc2 - or a - jr nz,.loc1 - inc hl - ret -.loc2: inc hl - ld a,(hl) - or a - jr nz,.loc2 - inc hl - ret +PTextLn: LD C,(HL) ; X pos + INC HL + LD B,(HL) ; Y pos + INC HL + CALL GetPutA + LD A,(HL) ; цвет строки объекта TextLine + EX AF,AF' + INC HL +.loc1: LDI + EX AF,AF' + LD (DE),A + EX AF,AF' + INC DE + LD A,(HL) + CP 0FFh + JR Z,.loc2 + OR A + JR NZ,.loc1 + INC HL + RET +.loc2: INC HL + LD A,(HL) + OR A + JR NZ,.loc2 + INC HL + RET @@ -514,46 +515,46 @@ PTextLn: ld c,(hl) ; X pos ; Ожидание событий -handleEvent: ld ix,what -handle1: ld (ix+0),evNothing ; what = evNoting - call ExmFire ; получить текст. коорд. мышки - or a ; бутон(ы) мышки нажат ? - jr nz,ButtPrs ; да - ld c,31h ; опрос клавы без ожидания +handleEvent: LD IX,what +handle1: LD (ix+0),evNothing ; what = evNoting + CALL ExmFire ; получить текст. коорд. мышки + OR A ; бутон(ы) мышки нажат ? + JR NZ,ButtPrs ; да + LD C,31h ; опрос клавы без ожидания RST ToDSS - ret z ; буфер клавы пуст - ld a,e - or a - jr z,NewComb ; курс. клавиши (+Home,End,PgUp,PgDwn) - bit 7,d - jr nz,NewCmb ; комбинации с Shift,Ctrl,Alt - ld (ix+0),evKeyboard - ld (ix+1),e ; код символа - ld (ix+2),d ; код статуса клавы - ret + RET Z ; буфер клавы пуст + LD A,E + OR A + JR Z,NewComb ; курс. клавиши (+Home,End,PgUp,PgDwn) + BIT 7,D + JR NZ,NewCmb ; комбинации с Shift,Ctrl,Alt + LD (ix+0),evKeyboard + LD (ix+1),E ; код символа + LD (ix+2),D ; код статуса клавы + RET ; Курсорные клавиши -NewComb: ld (ix+0),evCombKey ; признак события - ld (ix+1),e ; идет ноль - ld (ix+2),d ; код курс.клавиш (или статуса клавы) - ret +NewComb: LD (ix+0),evCombKey ; признак события + LD (ix+1),E ; идет ноль + LD (ix+2),D ; код курс.клавиш (или статуса клавы) + RET ; Комбинация с Shift,Ctrl,Alt -NewCmb: ld (ix+0),evCombKey - ld (ix+1),d ; 7-й бит, признак нажатия Ctrl,Shift,Alt - ld (ix+2),e ; код клавиши - ret +NewCmb: LD (ix+0),evCombKey + LD (ix+1),D ; 7-й бит, признак нажатия Ctrl,Shift,Alt + LD (ix+2),E ; код клавиши + RET ; Нажатие бутона мышки -ButtPrs: bit 1,a - ret nz ; нажата правая клавиша - ld (ix+0),evMouseFr ; признак события - ld (ix+1),l ; X Tcoord - ld (ix+2),h ; Y Tcoord - ret +ButtPrs: BIT 1,A + RET NZ ; нажата правая клавиша + LD (ix+0),evMouseFr ; признак события + LD (ix+1),L ; X Tcoord + LD (ix+2),H ; Y Tcoord + RET -what: ds 8 ; поле событий +what: DS 8 ; поле событий @@ -562,44 +563,44 @@ what: ds 8 ; ;Процедура передачи сообщений по объектам с текущего объекта TransMessUp: - PUSH IY - PUSH IX - JR TransEx + PUSH IY + PUSH IX + JR TransEx ;Процедура передачи сообщений по объектам с первого объекта TransMessage: - PUSH IY - PUSH IX - LD IX,DialTab+5 ;Таблица объектов -TransLp:LD HL,TransEx - PUSH HL - LD A,(IX+1) ;Текущий объект - AND 7Fh ;7-й бит - объект выделенный - CP InputLine - JP Z,EInpLine - CP ClRadioBut - JP Z,EClasterB - CP ClCheckBut - JP Z,EClasterB - CP ListBox - JP Z,EListBox - CP Button - JP Z,EButton + PUSH IY + PUSH IX + LD IX,DialTab+5 ;Таблица объектов +TransLp: LD HL,TransEx + PUSH HL + LD A,(IX+1) ;Текущий объект + AND 7Fh ;7-й бит - объект выделенный + CP InputLine + JP Z,EInpLine + CP ClRadioBut + JP Z,EClasterB + CP ClCheckBut + JP Z,EClasterB + CP ListBox + JP Z,EListBox + CP Button + JP Z,EButton ; - POP HL -TransEx:LD C,(IX+0) - LD B,0 - ADD IX,BC ;След. объект - BIT 7,(IX+0) - JR Z,TransLp ;7-й бит - конец объектов - POP IX - POP IY - LD HL,what - LD A,(HL) - CP evMessage - RET NZ ;Test command - LD (HL),evNothing - RET + POP HL +TransEx: LD C,(IX+0) + LD B,0 + ADD IX,BC ;След. объект + BIT 7,(IX+0) + JR Z,TransLp ;7-й бит - конец объектов + POP IX + POP IY + LD HL,what + LD A,(HL) + CP evMessage + RET NZ ;Test command + LD (HL),evNothing + RET @@ -618,103 +619,103 @@ TransEx:LD C,(IX+0) ; +5 - Hot key ; +6 - Context ; -PButton:PUSH IY - INC IY - LD (IY+0),A ; +0 object - LD A,(HL) ; X pos - INC HL - LD C,A - ADD A,(IX+0) ; Pos X from begin screen - LD (IY+1),A ; +1 Xo - LD A,(HL) ; Y pos - INC HL - LD B,A - ADD A,(IX+1) ; Pos Y from begin screen - LD (IY+3),A ; +3 Yo - PUSH BC ; Save position - CALL GetPutA - EX DE,HL - ld c,ColButton +PButton: PUSH IY + INC IY + LD (IY+0),A ; +0 object + LD A,(HL) ; X pos + INC HL + LD C,A + ADD A,(IX+0) ; Pos X from begin screen + LD (IY+1),A ; +1 Xo + LD A,(HL) ; Y pos + INC HL + LD B,A + ADD A,(IX+1) ; Pos Y from begin screen + LD (IY+3),A ; +3 Yo + PUSH BC ; Save position + CALL GetPutA + EX DE,HL + LD C,ColButton ;LD C,A - LD B,0 - LD (IY+5),B - LD A,(DE) -PButLp1:INC DE - CP '~' - JR NZ,PButN0 - ld c,ColDhotkey + LD B,0 + LD (IY+5),B + LD A,(DE) +PButLp1: INC DE + CP '~' + JR NZ,PButN0 + LD C,ColDhotkey ;LD C,A - LD A,(DE) - INC DE - LD (HL),A - INC HL - RES 5,A - LD (IY+5),A ; задать Hot key - ld a,ColButton - AND 0F0h - OR C - LD (HL),A - INC HL - INC DE - ld c,ColButton ; цвет бутона после hot-буквы + LD A,(DE) + INC DE + LD (HL),A + INC HL + RES 5,A + LD (IY+5),A ; задать Hot key + LD A,ColButton + AND 0F0h + OR C + LD (HL),A + INC HL + INC DE + LD C,ColButton ; цвет бутона после hot-буквы ;LD C,A - INC B - LD A,(DE) - INC DE -PButN0: LD (HL),A - INC HL - LD (HL),C - INC HL - INC B - LD A,(DE) - OR A - JR NZ,PButLp1 - INC DE - LD A,(IY+1) - ADD A,B - LD (IY+2),A - ld a,(ColDialWn) ;-- - and 0F0h - LD (HL),"▄" - inc hl ; - ld (hl),a ; - EX DE,HL - POP BC ; Reset position - INC B - CALL GetPutA - INC DE - INC DE - LD A,(IY+2) - SUB (IY+1) - LD B,A - ld a,(ColDialWn) ;-- - and 0F0h ; - ld c,a ; -pbtn2: LD A,"▀" - LD (DE),A - INC DE - ld a,c ; - ld (de),a ; - INC DE - DJNZ pbtn2 - LD A,(HL) - INC HL - LD (IY+4),A - LD A,(HL) - INC HL - LD (IY+6),A ; Context - LD BC,7 - ADD IY,BC - PUSH IY - EXX - POP HL - POP DE - OR A - SBC HL,DE - LD A,L - LD (DE),A - EXX - RET + INC B + LD A,(DE) + INC DE +PButN0: LD (HL),A + INC HL + LD (HL),C + INC HL + INC B + LD A,(DE) + OR A + JR NZ,PButLp1 + INC DE + LD A,(IY+1) + ADD A,B + LD (IY+2),A + LD A,(ColDialWn) ;-- + AND 0F0h + LD (HL),"▄" + INC HL ; + LD (HL),A ; + EX DE,HL + POP BC ; Reset position + INC B + CALL GetPutA + INC DE + INC DE + LD A,(IY+2) + SUB (IY+1) + LD B,A + LD A,(ColDialWn) ;-- + AND 0F0h ; + LD C,A ; +pbtn2: LD A,"▀" + LD (DE),A + INC DE + LD A,C ; + LD (DE),A ; + INC DE + DJNZ pbtn2 + LD A,(HL) + INC HL + LD (IY+4),A + LD A,(HL) + INC HL + LD (IY+6),A ; Context + LD BC,7 + ADD IY,BC + PUSH IY + EXX + POP HL + POP DE + OR A + SBC HL,DE + LD A,L + LD (DE),A + EXX + RET @@ -722,371 +723,372 @@ pbtn2: LD A," ; Event button ; IX,DialTab+5 ; -EButton:LD HL,what ; список событий - LD A,(HL) - INC HL - CP evMouseFr - JR Z,EBmouse - CP evKeyboard - JR Z,EBkeys - CP evCombKey - RET NZ - BIT 7,(IX+1) - RET NZ ; выйти - объект выделен - PUSH IX - LD E,(IX+0) - LD D,0 - ADD IX,DE - BIT 7,(IX+0) - POP IX - RET Z - INC HL - LD A,(HL) ;+1 - CP 9 ; Shift+Tab - RET NZ - xor a - LD (_Push+1),A ; Push flag - JP SetButt ; выделить пред. объект +EButton: LD HL,what ; список событий + LD A,(HL) + INC HL + CP evMouseFr + JR Z,EBmouse + CP evKeyboard + JR Z,EBkeys + CP evCombKey + RET NZ + BIT 7,(IX+1) + RET NZ ; выйти - объект выделен + PUSH IX + LD E,(IX+0) + LD D,0 + ADD IX,DE + BIT 7,(IX+0) + POP IX + RET Z + INC HL + LD A,(HL) ;+1 + CP 9 ; Shift+Tab + RET NZ + XOR A + LD (_Push+1),A ; Push flag + JP SetButt ; выделить пред. объект ; Событие от мышки, ; проверка координат -EBmouse:LD E,(HL) ;Xcoord - INC HL - LD D,(HL) ;Ycoord - LD A,D - CP (IX+4) ;Y pos button - RET NZ ;if <> exit - LD A,E - BIT 7,(IX+2) - JR NZ,$+6 - CP (IX+2) ;Xo pos - RET C ;< - BIT 7,(IX+3) - RET NZ - CP (IX+3) ;Xi pos - RET NC ;> - SUB A - LD (Kbutt+1),A - INC A - LD (_Push+1),A ;Push flag - BIT 7,(IX+1) - JR NZ,_Push - JR SetButt +EBmouse: LD E,(HL) ;Xcoord + INC HL + LD D,(HL) ;Ycoord + LD A,D + CP (IX+4) ;Y pos button + RET NZ ;if <> exit + LD A,E + BIT 7,(IX+2) + JR NZ,$+6 + CP (IX+2) ;Xo pos + RET C ;< + BIT 7,(IX+3) + RET NZ + CP (IX+3) ;Xi pos + RET NC ;> + SUB A + LD (Kbutt+1),A + INC A + LD (_Push+1),A ;Push flag + BIT 7,(IX+1) + JR NZ,_Push + JR SetButt ; Событие - нажата клавиша -EBkeys: xor a - LD (_Push+1),A ; Push flag - LD A,(HL) - cp " " - jr c,ebkey1 - cp "A" - ret c -ebkey1: inc hl ; hl,what+2 - bit 7,(hl) ; нажата клавиша с Ctrl,Shift,Alt ? - ret nz ; да, выйти - RES 5,A ; a..z -> A..Z - BIT 7,(IX+1) ; выбрана или не выбрана - JR NZ,EBkeyN - CP 9 ; Tab - JR Z,SetButt ; выделить след. объект - cp 0Dh ; ### - jr z,SetButt - JR EBkeyN1 +EBkeys: XOR A + LD (_Push+1),A ; Push flag + LD A,(HL) + CP " " + JR C,ebkey1 + CP "A" + RET C +ebkey1: INC HL ; hl,what+2 + BIT 7,(HL) ; нажата клавиша с Ctrl,Shift,Alt ? + RET NZ ; да, выйти + RES 5,A ; a..z -> A..Z + BIT 7,(IX+1) ; выбрана или не выбрана + JR NZ,EBkeyN + CP 9 ; Tab + JR Z,SetButt ; выделить след. объект + CP 0Dh ; ### + JR Z,SetButt + JR EBkeyN1 ; -EBkeyN: CP 0Dh - JR Z,EBent -EBkeyN1:CP (IX+6) ; Hot key - RET NZ -EBent: LD A,1 - LD (_Push+1),A - LD (Kbutt+1),A -SetButt:CALL MoveObj ; Select Button - CALL ResDialInv ; Reset previos invert - LD IX,DialTab+5 - LD E,(IX+2) ; Xo - LD D,(IX+4) ; Y - LD A,(IX+3) ; Xi - SUB E - LD C,A - CALL SetDialInv -_Push: LD A,0 - OR A - JP Z,BTexit - CALL PushBut ; Push/pop бутон - JP C,BTexit - LD HL,what - LD (HL),evCommand - INC HL - LD A,(IX+5) - LD (HL),A - RET +EBkeyN: CP 0Dh + JR Z,EBent +EBkeyN1: CP (IX+6) ; Hot key + RET NZ +EBent: LD A,1 + LD (_Push+1),A + LD (Kbutt+1),A +SetButt: CALL MoveObj ; Select Button + CALL ResDialInv ; Reset previos invert + LD IX,DialTab+5 + LD E,(IX+2) ; Xo + LD D,(IX+4) ; Y + LD A,(IX+3) ; Xi + SUB E + LD C,A + CALL SetDialInv +_Push: LD A,0 + OR A + JP Z,BTexit + CALL PushBut ; Push/pop бутон + JP C,BTexit + LD HL,what + LD (HL),evCommand + INC HL + LD A,(IX+5) + LD (HL),A + RET ;Button exit -BTexit: LD HL,what - LD (HL),evNothing - RET +BTexit: LD HL,what + LD (HL),evNothing + RET ; Нажать/отжать бутон -PushBut:IN A,(Page3) - PUSH AF -kk5: LD A,(Win2) - OUT (Page3),A - PUSH IX - LD E,(IX+2) ;Xo - LD D,(IX+4) ;Y - LD A,(IX+3) ;Xi - SUB E - INC A ;Xi-Xo+1=Full len with shadow - LD L,A - LD H,1 ;Ylen=2 with shadow - LD (BTlen+1),HL ;Save len - LD (BTpos+1),DE ;Save pos - LD A,L - PUSH AF ;Save len - LD IX,DialData - LD A,E - SUB (IX+0) - LD C,A - LD A,D - SUB (IX+1) - LD B,A - PUSH BC - CALL GetPutA - LD C,L - SLA C - LD B,0 - LD HL,ReCompBuff - EX DE,HL - LDIR - EX DE,HL - POP BC - INC B - CALL GetPutA - POP AF - LD C,A - SLA C - LD B,0 - EX DE,HL - LDIR - PUSH AF - DEC A ;len without shadow - ADD A,A - LD C,A - LD B,0 - LD HL,ReCompBuff - LD DE,ReCompBuff+160 - LD A,20h - LD (DE),A ;shift on one pos - INC DE - LD A,(ColDialWn) - LD (DE),A - INC DE - LDIR ;move button - POP AF ;reset len - EX DE,HL - LD B,A +PushBut: IN A,(Page3) + PUSH AF +kk5: LD A,(Win2) + OUT (Page3),A + PUSH IX + LD E,(IX+2) ;Xo + LD D,(IX+4) ;Y + LD A,(IX+3) ;Xi + SUB E + INC A ;Xi-Xo+1=Full len with shadow + LD L,A + LD H,1 ;Ylen=2 with shadow + LD (BTlen+1),HL ;Save len + LD (BTpos+1),DE ;Save pos + LD A,L + PUSH AF ;Save len + LD IX,DialData + LD A,E + SUB (IX+0) + LD C,A + LD A,D + SUB (IX+1) + LD B,A + PUSH BC + CALL GetPutA + LD C,L + SLA C + LD B,0 + LD HL,ReCompBuff + EX DE,HL + LDIR + EX DE,HL + POP BC + INC B + CALL GetPutA + POP AF + LD C,A + SLA C + LD B,0 + EX DE,HL + LDIR + PUSH AF + DEC A ;len without shadow + ADD A,A + LD C,A + LD B,0 + LD HL,ReCompBuff + LD DE,ReCompBuff+160 + LD A,20h + LD (DE),A ;shift on one pos + INC DE + LD A,(ColDialWn) + LD (DE),A + INC DE + LDIR ;move button + POP AF ;reset len + EX DE,HL + LD B,A ;LD D,20h - LD A,(ColDialWn) -btln: LD (HL),20h;D - INC HL - ld (hl),a ;without down shadow - INC HL - DJNZ btln ;$-4 - LD IX,ReCompBuff+160 ;Put button -BTlen: LD HL,0 -BTpos: LD DE,0 - CALL testbut - JR NC,bt1 - di - IN A,(Page1) - LD B,A - xor a - LD C,BIOS.WIN_RESTORE - RST ToBIOS - ei - LD IX,ReCompBuff+160 ;Put button - LD HL,(BTlen+1) - LD DE,(BTpos+1) - INC D - LD A,L - ADD A,A - ADD A,XL - LD XL,A - JR NC,$+4 - INC XH - CALL testbut - JR NC,bt1 - di - IN A,(Page1) - LD B,A - xor a - LD C,BIOS.WIN_RESTORE - RST ToBIOS - ei -bt1: POP IX -Kbutt: LD A,0 ; режим мышка/клава - OR A - JR Z,PushLp ; мышка - LD B,8 - HALT - DJNZ $-1 - JR PushEx + LD A,(ColDialWn) +btln: LD (HL),20h;D + INC HL + LD (HL),A ;without down shadow + INC HL + DJNZ btln ;$-4 + LD IX,ReCompBuff+160 ;Put button +BTlen: LD HL,0 +BTpos: LD DE,0 + CALL testbut + JR NC,bt1 + DI + IN A,(Page1) + LD B,A + XOR A + LD C,BIOS.WIN_RESTORE + RST ToBIOS + EI + LD IX,ReCompBuff+160 ;Put button + LD HL,(BTlen+1) + LD DE,(BTpos+1) + INC D + LD A,L + ADD A,A + ADD A,XL + LD XL,A + JR NC,$+4 + INC XH + CALL testbut + JR NC,bt1 + DI + IN A,(Page1) + LD B,A + XOR A + LD C,BIOS.WIN_RESTORE + RST ToBIOS + EI +bt1: POP IX +Kbutt: LD A,0 ; режим мышка/клава + OR A + JR Z,PushLp ; мышка + LD B,8 + HALT + DJNZ $-1 + JR PushEx PushLp: ; проверка координат мышки - call ExmFire ; получить знак. коорд. мышки - JR Z,PushEx - BIT 0,a ;1,a - JR Z,PushEx ; нажата левая клавиша - LD A,H - CP (IX+4) ; Y pos button - JR NZ,PushEx - LD C,(IX+2) ; Xo pos - LD B,(IX+3) ; Xi pos - INC B - LD A,L - BIT 7,C - JR NZ,$+5 - CP C ; Xo pos - JR C,PushEx ; < - BIT 7,B - JR NZ,PushLp - CP B - JR C,PushLp ; > -PushEx: PUSH IX - PUSH HL - LD IX,ReCompBuff ; Put prev button - LD HL,(BTlen+1) - LD DE,(BTpos+1) - CALL testbut - JR NC,bt2 - di - IN A,(Page1) - LD B,A - xor a - LD C,BIOS.WIN_RESTORE - RST ToBIOS - ei - LD IX,ReCompBuff ;Put button - LD HL,(BTlen+1) - LD DE,(BTpos+1) - INC D - LD A,L - ADD A,A - ADD A,XL - LD XL,A - JR NC,$+4 - INC XH - CALL testbut - JR NC,bt2 - IN A,(Page1) - LD B,A - xor a - LD C,BIOS.WIN_RESTORE ; из буфера в окно - di - RST ToBIOS - ei -bt2: POP HL - POP IX - POP AF - OUT (Page3),A - LD A,(Kbutt+1) - OR A - RET NZ + CALL ExmFire ; получить знак. коорд. мышки + JR Z,PushEx + BIT 0,A ;1,a + JR Z,PushEx ; нажата левая клавиша + LD A,H + CP (IX+4) ; Y pos button + JR NZ,PushEx + LD C,(IX+2) ; Xo pos + LD B,(IX+3) ; Xi pos + INC B + LD A,L + BIT 7,C + JR NZ,$+5 + CP C ; Xo pos + JR C,PushEx ; < + BIT 7,B + JR NZ,PushLp + CP B + JR C,PushLp ; > +PushEx: PUSH IX + PUSH HL + LD IX,ReCompBuff ; Put prev button + LD HL,(BTlen+1) + LD DE,(BTpos+1) + CALL testbut + JR NC,bt2 + DI + IN A,(Page1) + LD B,A + XOR A + LD C,BIOS.WIN_RESTORE + RST ToBIOS + EI + LD IX,ReCompBuff ;Put button + LD HL,(BTlen+1) + LD DE,(BTpos+1) + INC D + LD A,L + ADD A,A + ADD A,XL + LD XL,A + JR NC,$+4 + INC XH + CALL testbut + JR NC,bt2 + IN A,(Page1) + LD B,A + XOR A + LD C,BIOS.WIN_RESTORE ; из буфера в окно + DI + RST ToBIOS + EI +bt2: POP HL + POP IX + POP AF + OUT (Page3),A + LD A,(Kbutt+1) + OR A + RET NZ ; координаты мышки - LD A,H - CP (IX+4) ;Y pos button - SCF - RET NZ - LD C,(IX+2) ;Xo pos - LD B,(IX+3) ;Xi pos - INC B - LD A,L - BIT 7,C - JR NZ,$+4 - CP C ;Xo pos - RET C ;< - BIT 7,B - SCF - RET NZ - CP B ;Xi pos - CCF ;> - RET + LD A,H + CP (IX+4) ;Y pos button + SCF + RET NZ + LD C,(IX+2) ;Xo pos + LD B,(IX+3) ;Xi pos + INC B + LD A,L + BIT 7,C + JR NZ,$+4 + CP C ;Xo pos + RET C ;< + BIT 7,B + SCF + RET NZ + CP B ;Xi pos + CCF ;> + RET ; -testbut:LD A,D - CP 31 - RET NC - BIT 7,E - JR Z,bt0 - LD A,E - LD E,0 - NEG - LD C,A - SUB L - NEG - LD L,A - OR A - RET Z - RET M - LD A,C - ADD A,A - ADD A,XL - LD XL,A - JR NC,bt0 - INC XH -bt0: LD A,E - CP 80 - RET NC - ADD A,L - CP 80 - RET C - LD A,80 - SUB E - LD L,A - SCF - RET +testbut: + LD A,D + CP 31 + RET NC + BIT 7,E + JR Z,bt0 + LD A,E + LD E,0 + NEG + LD C,A + SUB L + NEG + LD L,A + OR A + RET Z + RET M + LD A,C + ADD A,A + ADD A,XL + LD XL,A + JR NC,bt0 + INC XH +bt0: LD A,E + CP 80 + RET NC + ADD A,L + CP 80 + RET C + LD A,80 + SUB E + LD L,A + SCF + RET ; Moving object to first tab pos ; Input: IX-Address object -MoveObj:SET 6,(IX+0) ;Mark object - LD HL,DialTab+5 -MoveOlp:BIT 6,(HL) ;Test on mark object - RES 6,(HL) ;Reset mark - RET NZ ;Exit if mark - INC HL - RES 7,(HL) ;Reset select object - DEC HL - LD DE,ReCompBuff ;Move first object in buffer - LD C,(HL) ;Len object label - LD B,0 - RES 6,C - LDIR ;Move - PUSH HL - PUSH HL - LD C,(HL) ;-6 - RES 6,C - ADD HL,BC ;Search end table - BIT 7,(HL) - JR Z,$-6 - POP BC - OR A ;HL-End table,BC-Address 2 obj - SBC HL,BC ;HL-BC=Len table -1 object - LD C,L ;BC=Len table - LD B,H - POP HL - LD DE,DialTab+5 ;Move to begin table - PUSH DE - LD A,B - OR C - JR Z,$+4 - LDIR - LD HL,ReCompBuff ;Move from buffer to end table - LD C,(HL) ;object BC=len Object label - RES 6,C - LDIR - POP HL - INC HL - SET 7,(HL) ;Setting object - DEC HL - JR MoveOlp +MoveObj: SET 6,(IX+0) ;Mark object + LD HL,DialTab+5 +MoveOlp: BIT 6,(HL) ;Test on mark object + RES 6,(HL) ;Reset mark + RET NZ ;Exit if mark + INC HL + RES 7,(HL) ;Reset select object + DEC HL + LD DE,ReCompBuff ;Move first object in buffer + LD C,(HL) ;Len object label + LD B,0 + RES 6,C + LDIR ;Move + PUSH HL + PUSH HL + LD C,(HL) ;-6 + RES 6,C + ADD HL,BC ;Search end table + BIT 7,(HL) + JR Z,$-6 + POP BC + OR A ;HL-End table,BC-Address 2 obj + SBC HL,BC ;HL-BC=Len table -1 object + LD C,L ;BC=Len table + LD B,H + POP HL + LD DE,DialTab+5 ;Move to begin table + PUSH DE + LD A,B + OR C + JR Z,$+4 + LDIR + LD HL,ReCompBuff ;Move from buffer to end table + LD C,(HL) ;object BC=len Object label + RES 6,C + LDIR + POP HL + INC HL + SET 7,(HL) ;Setting object + DEC HL + JR MoveOlp @@ -1098,50 +1100,50 @@ MoveOlp:BIT 6,(HL) ;Test on mark object ; D - Y pos ; C - X len SetDialInv: - PUSH IX - LD IX,DialData - IN A,(Page3) - PUSH AF ;сохр.page4 -kk6: LD A,(Win2) - OUT (Page3),A ;вкл.буфер - LD L,C - LD H,1 - LD (RDlIlen+1),HL ;Save len - LD (RDlIpos+1),DE ;Save pos - LD A,E - SUB (IX+0) - LD C,A - LD A,D - SUB (IX+1) - LD B,A - CALL GetPutA - EX DE,HL - LD (RDlIbuf+2),HL - LD B,E - ld e,ColDialInv + PUSH IX + LD IX,DialData + IN A,(Page3) + PUSH AF ;сохр.page4 +kk6: LD A,(Win2) + OUT (Page3),A ;вкл.буфер + LD L,C + LD H,1 + LD (RDlIlen+1),HL ;Save len + LD (RDlIpos+1),DE ;Save pos + LD A,E + SUB (IX+0) + LD C,A + LD A,D + SUB (IX+1) + LD B,A + CALL GetPutA + EX DE,HL + LD (RDlIbuf+2),HL + LD B,E + LD E,ColDialInv ;LD E,A - ld d,ColDhotkey + LD D,ColDhotkey ;LD D,A -SetDin1:INC HL - LD A,(HL) - AND 0Fh - CP D - JR Z,setdn2 ;$+5 - LD A,(HL) +SetDin1: INC HL + LD A,(HL) + AND 0Fh + CP D + JR Z,setdn2 ;$+5 + LD A,(HL) ;XOR E - and 0xF0 ; - or e ; - LD (HL),A -setdn2: INC HL - DJNZ SetDin1 - LD IX,(RDlIbuf+2) ;Put Name with invert - LD HL,(RDlIlen+1) - LD DE,(RDlIpos+1) - CALL PutDialLn - POP AF - OUT (Page3),A - POP IX - RET + AND 0xF0 ; + OR E ; + LD (HL),A +setdn2: INC HL + DJNZ SetDin1 + LD IX,(RDlIbuf+2) ;Put Name with invert + LD HL,(RDlIlen+1) + LD DE,(RDlIpos+1) + CALL PutDialLn + POP AF + OUT (Page3),A + POP IX + RET @@ -1149,209 +1151,209 @@ setdn2: INC HL ; Res dialog invert objects ; Input: None ResDialInv: - PUSH IX - IN A,(Page3) - PUSH AF ;сохр.page4 -kk7: LD A,(Win2) - OUT (Page3),A ;вкл.буфер - LD HL,(RDlIbuf+2) - LD A,(RDlIlen+1) - LD B,A - ld e,ColDialInv1 + PUSH IX + IN A,(Page3) + PUSH AF ;сохр.page4 +kk7: LD A,(Win2) + OUT (Page3),A ;вкл.буфер + LD HL,(RDlIbuf+2) + LD A,(RDlIlen+1) + LD B,A + LD E,ColDialInv1 ;LD E,A - ld d,ColDhotkey + LD D,ColDhotkey ;LD D,A -ResDin1:INC HL - LD A,(HL) - AND 0Fh - CP D - JR Z,resdn2 ;$+5 - LD A,(HL) +ResDin1: INC HL + LD A,(HL) + AND 0Fh + CP D + JR Z,resdn2 ;$+5 + LD A,(HL) ;XOR E - and 0xF0 ; - cp ColButton - jr z,.loc2 - or e ; -.loc2: LD (HL),A -resdn2: INC HL - DJNZ ResDin1 -RDlIbuf:LD IX,0 ;Put Name with invert -RDlIlen:LD HL,0 -RDlIpos:LD DE,0 - CALL PutDialLn -CIflag: LD A,0 ;1-Was claster invert - OR A - CALL NZ,ResClasInv - CALL ResILCr ; сбросить курсор в inp.line - POP AF - OUT (Page3),A - POP IX - LD HL,what - LD (HL),evMessage - INC HL - LD (HL),msHiddInvr - JP TransMessage + AND 0xF0 ; + CP ColButton + JR Z,.loc2 + OR E ; +.loc2: LD (HL),A +resdn2: INC HL + DJNZ ResDin1 +RDlIbuf: LD IX,0 ;Put Name with invert +RDlIlen: LD HL,0 +RDlIpos: LD DE,0 + CALL PutDialLn +CIflag: LD A,0 ;1-Was claster invert + OR A + CALL NZ,ResClasInv + CALL ResILCr ; сбросить курсор в inp.line + POP AF + OUT (Page3),A + POP IX + LD HL,what + LD (HL),evMessage + INC HL + LD (HL),msHiddInvr + JP TransMessage ; Res Claster invert ; Input: None ResClasInv: - PUSH IX - IN A,(Page3) - PUSH AF ;сохр.page4 -kk8: LD A,(Win2) - OUT (Page3),A ;вкл.буфер - PUSH HL - LD HL,(RClIbuf+2) - LD A,(RClIlen+1) - LD B,A - ld e,ColDialInv1 + PUSH IX + IN A,(Page3) + PUSH AF ;сохр.page4 +kk8: LD A,(Win2) + OUT (Page3),A ;вкл.буфер + PUSH HL + LD HL,(RClIbuf+2) + LD A,(RClIlen+1) + LD B,A + LD E,ColDialInv1 ;LD E,A - ld d,ColDhotkey + LD D,ColDhotkey ;LD D,A -ResDin2:INC HL - LD A,(HL) - AND 0Fh - CP D - JR Z,.loc2 ;$+5 - LD A,(HL) +ResDin2: INC HL + LD A,(HL) + AND 0Fh + CP D + JR Z,.loc2 ;$+5 + LD A,(HL) ;XOR E - and 0xF0 ; - or e ; - LD (HL),A ;+6 -.loc2: INC HL - DJNZ ResDin2 -RClIbuf:LD IX,0 ;Put Name with invert -RClIlen:LD HL,0 -RClIpos:LD DE,0 - CALL PutDialLn - CALL ResILCr ; сбросить курсор - SUB A - LD (CIflag+1),A - POP HL - POP AF - OUT (Page3),A - POP IX - RET + AND 0xF0 ; + OR E ; + LD (HL),A ;+6 +.loc2: INC HL + DJNZ ResDin2 +RClIbuf: LD IX,0 ;Put Name with invert +RClIlen: LD HL,0 +RClIpos: LD DE,0 + CALL PutDialLn + CALL ResILCr ; сбросить курсор + SUB A + LD (CIflag+1),A + POP HL + POP AF + OUT (Page3),A + POP IX + RET ;[]===========================================================[] ; PutDialLn: - LD A,D - CP 1Fh - RET NC - BIT 7,E - JR Z,pdln - LD A,E - LD E,0 - NEG - LD C,A - SUB L - NEG - LD L,A - RET Z - RET M - LD A,C - ADD A,A - ADD A,XL - LD XL,A - JR NC,pdln - INC XH -pdln: LD A,E - CP 80 - RET NC - ADD A,L - CP 80 - JR C,$+6 - LD A,80 - SUB E - LD L,A - di -kk9: LD A,(Win2) - LD B,A - xor a - LD C,BIOS.WIN_RESTORE - RST ToBIOS - ei - RET + LD A,D + CP 1Fh + RET NC + BIT 7,E + JR Z,pdln + LD A,E + LD E,0 + NEG + LD C,A + SUB L + NEG + LD L,A + RET Z + RET M + LD A,C + ADD A,A + ADD A,XL + LD XL,A + JR NC,pdln + INC XH +pdln: LD A,E + CP 80 + RET NC + ADD A,L + CP 80 + JR C,$+6 + LD A,80 + SUB E + LD L,A + DI +kk9: LD A,(Win2) + LD B,A + XOR A + LD C,BIOS.WIN_RESTORE + RST ToBIOS + EI + RET -;!FIXIT +;!FIXIT CURSOR ; Установка курсора черточкой -SetCursor: ; получить сист. знакогенератор - ld de,0xB700 ; буфер для 2kB знакогенератора - ld c,BIOS.WIN_GET_ZG - RST ToBIOS - ; последние 512 байт (2 нижние черты) заполнить кодом 0xFF - ld hl,0xB700+1536 - ld bc,00FFh -._loop: ld (hl),c - inc hl - ld (hl),c - inc hl - djnz ._loop - ; уст. знакогенератор с номером 0x5B - ld a,0x5B - ld de,0xB700 - ld c,BIOS.WIN_SET_ZG - RST ToBIOS - ret +; SetCursor: ; получить сист. знакогенератор +; ld de,0xB700 ; буфер для 2kB знакогенератора +; ld c,BIOS.WIN_GET_ZG +; RST ToBIOS +; ; последние 512 байт (2 нижние черты) заполнить кодом 0xFF +; ld hl,0xB700+1536 +; ld bc,00FFh +; ._loop: ld (hl),c +; inc hl +; ld (hl),c +; inc hl +; djnz ._loop +; ; уст. знакогенератор с номером 0x5B +; ld a,0x5B +; ld de,0xB700 +; ld c,BIOS.WIN_SET_ZG +; RST ToBIOS +; ret ; ;-- Dialog Windows color -ColDialFr equ 0Fh ; цвет рамки окна +ColDialFr: EQU 0Fh ; цвет рамки окна -ColDhotkey equ 0Ch ; цвет hot-клавиш +ColDhotkey: EQU 0Ch ; цвет hot-клавиш -ColButton equ 20h ; цвет бутонов +ColButton: EQU 20h ; цвет бутонов -ColLstBxFr equ 1Fh ; цвет рамки ListBox-а -ColListBox equ 1Fh ; цвет списка ListBox-а -ColLstBoxI equ 5Eh ; цвет выдел. курсора акт. объекта -ColLstBxHI equ 1Eh ; цвет выдел. курсора не акт. объекта -ColScrlBar equ 0Fh ; цвет скролл-бара -ColInpLine equ 0Eh ; цвет редакт. поля метки дискеты +ColLstBxFr: EQU 1Fh ; цвет рамки ListBox-а +ColListBox: EQU 1Fh ; цвет списка ListBox-а +ColLstBoxI: EQU 5Eh ; цвет выдел. курсора акт. объекта +ColLstBxHI: EQU 1Eh ; цвет выдел. курсора не акт. объекта +ColScrlBar: EQU 0Fh ; цвет скролл-бара +ColInpLine: EQU 0Eh ; цвет редакт. поля метки дискеты -ColDialWn: db 17h ; цвет окна -ColDialInv equ 0Fh ; color dialog window invert -ColDialInv1 equ 07h ; color dialog window invert +ColDialWn: DB 17h ; цвет окна +ColDialInv: EQU 0Fh ; color dialog window invert +ColDialInv1: EQU 07h ; color dialog window invert -ColFormText equ 31h ; цвет текста в окне форматирования -ColFormNumber equ 3Eh ; цвет цифр в окне форматирования -ColorFrame equ ColFormText ; цвет рамки объекта Frame +ColFormText: EQU 31h ; цвет текста в окне форматирования +ColFormNumber: EQU 3Eh ; цвет цифр в окне форматирования +ColorFrame: EQU ColFormText ; цвет рамки объекта Frame -FramDSl: db "╔╗╚╝═║║║" ; рамка окна +FramDSl: DB "╔╗╚╝═║║║" ; рамка окна -SavDial:PUSH IX - LD A,(IX+2) ;with shadow - ADD A,2 - LD L,A - LD A,(IX+3) - INC A - LD H,A ;Wind len - LD E,(IX+0) - LD D,(IX+1) - EXX - CALL GetMousInfo - EXX - di - LD IX,WinBoxBuff ;Address Box buffers -kk1: LD A,(Win2) ;Page buffer - LD B,A - xor a - LD C,BIOS.WIN_COPY ; копир. из окна в буфер - RST ToBIOS - ei - CALL GetMousInfo - POP IX - RET +SavDial: PUSH IX + LD A,(IX+2) ;with shadow + ADD A,2 + LD L,A + LD A,(IX+3) + INC A + LD H,A ;Wind len + LD E,(IX+0) + LD D,(IX+1) + EXX + CALL GetMousInfo + EXX + DI + LD IX,WinBoxBuff ;Address Box buffers +kk1: LD A,(Win2) ;Page buffer + LD B,A + XOR A + LD C,BIOS.WIN_COPY ; копир. из окна в буфер + RST ToBIOS + EI + CALL GetMousInfo + POP IX + RET @@ -1360,24 +1362,24 @@ kk1: LD A,(Win2) ;Page buffer ; На вход: IX - описатель ; PutDialRc: - LD HL,WinBoxBuff+6800 - LD B,(IX+3) ;Len Y - LD C,(IX+2) ;Len X + LD HL,WinBoxBuff+6800 + LD B,(IX+3) ;Len Y + LD C,(IX+2) ;Len X ;LD E,20h - LD A,(ColDialWn) -PutRc1: LD D,C -putrc: LD (HL),20h ;E - INC HL - LD (HL),a ;window color - INC HL - DEC D - JR NZ,putrc ;$-5 - INC HL ;place for shadow - INC HL - INC HL - INC HL - DJNZ PutRc1 - RET + LD A,(ColDialWn) +PutRc1: LD D,C +putrc: LD (HL),20h ;E + INC HL + LD (HL),A ;window color + INC HL + DEC D + JR NZ,putrc ;$-5 + INC HL ;place for shadow + INC HL + INC HL + INC HL + DJNZ PutRc1 + RET ; Процедура наложения на прямоугольную площадь диал. окна рамки @@ -1385,276 +1387,276 @@ putrc: LD (HL),20h ;E ; HL - адрес описателя рамки ; PutDialFr: - PUSH IY - PUSH HL - POP IY - LD HL,WinBoxBuff+6800 - ld c,ColDialFr - LD A,(ColDialWn) - AND 0F0h - OR C - LD C,A - LD A,(IY+0) - LD (HL),A ;First Line - INC HL - LD (HL),C - INC HL - LD B,(IX+2) ;Len DialX - DEC B - DEC B - LD A,(IY+4) -.loc1: LD (HL),A - INC HL - LD (HL),C - INC HL - DJNZ .loc1 - LD A,(IY+1) - LD (HL),A - INC HL - LD (HL),C - INC HL - INC HL - INC HL - INC HL - INC HL + PUSH IY + PUSH HL + POP IY + LD HL,WinBoxBuff+6800 + LD C,ColDialFr + LD A,(ColDialWn) + AND 0F0h + OR C + LD C,A + LD A,(IY+0) + LD (HL),A ;First Line + INC HL + LD (HL),C + INC HL + LD B,(IX+2) ;Len DialX + DEC B + DEC B + LD A,(IY+4) +.loc1: LD (HL),A + INC HL + LD (HL),C + INC HL + DJNZ .loc1 + LD A,(IY+1) + LD (HL),A + INC HL + LD (HL),C + INC HL + INC HL + INC HL + INC HL + INC HL ; - LD E,(IX+2) ;lenX - DEC E - DEC E - LD D,B - LD B,(IX+3) ;lenY - DEC B - DEC B - LD A,(IY+5) -.loc2: LD (HL),A ;middle space window - INC HL - LD (HL),C - INC HL - ADD HL,DE - ADD HL,DE - LD (HL),A ;middle space window - INC HL - LD (HL),C - INC HL - INC HL - INC HL - INC HL - INC HL - DJNZ .loc2 + LD E,(IX+2) ;lenX + DEC E + DEC E + LD D,B + LD B,(IX+3) ;lenY + DEC B + DEC B + LD A,(IY+5) +.loc2: LD (HL),A ;middle space window + INC HL + LD (HL),C + INC HL + ADD HL,DE + ADD HL,DE + LD (HL),A ;middle space window + INC HL + LD (HL),C + INC HL + INC HL + INC HL + INC HL + INC HL + DJNZ .loc2 ; - LD A,(IY+2) - LD (HL),A ;End Line - INC HL - LD (HL),C - INC HL - LD B,(IX+2) ;Len X - DEC B - DEC B - LD A,(IY+4) -.loc3: LD (HL),A - INC HL - LD (HL),C - INC HL - DJNZ .loc3 - LD A,(IY+3) - LD (HL),A - INC HL - LD (HL),C - INC HL - LD HL,DialName - LD E,L ;DE=Dial label - LD D,H - LD B,1 -.loc4: INC B ;B=Len name+2 (for space) - LD A,(HL) - INC HL - OR A ;0-End name - JR NZ,.loc4 - LD HL,WinBoxBuff+6800 - LD A,(IX+2) ;Len X - SUB B ;LenX-Len name=Len empty - SRL A ;Len empty/2=shift - LD C,A - LD B,0 - ADD HL,BC ;get address name place - ADD HL,BC + LD A,(IY+2) + LD (HL),A ;End Line + INC HL + LD (HL),C + INC HL + LD B,(IX+2) ;Len X + DEC B + DEC B + LD A,(IY+4) +.loc3: LD (HL),A + INC HL + LD (HL),C + INC HL + DJNZ .loc3 + LD A,(IY+3) + LD (HL),A + INC HL + LD (HL),C + INC HL + LD HL,DialName + LD E,L ;DE=Dial label + LD D,H + LD B,1 +.loc4: INC B ;B=Len name+2 (for space) + LD A,(HL) + INC HL + OR A ;0-End name + JR NZ,.loc4 + LD HL,WinBoxBuff+6800 + LD A,(IX+2) ;Len X + SUB B ;LenX-Len name=Len empty + SRL A ;Len empty/2=shift + LD C,A + LD B,0 + ADD HL,BC ;get address name place + ADD HL,BC ;LD (HL)," " ; вед. пробел имени окна - INC HL - INC HL - EX DE,HL ;HL=Adr.Name,DE=Adr.Place -.loc5: LDI ;Move - INC DE ;Attrib place - LD A,(HL) - OR A ;0-End name - JR NZ,.loc5 + INC HL + INC HL + EX DE,HL ;HL=Adr.Name,DE=Adr.Place +.loc5: LDI ;Move + INC DE ;Attrib place + LD A,(HL) + OR A ;0-End name + JR NZ,.loc5 ;LD A," " ; закр. пробел имени окна ;LD (DE),A - POP IY - RET + POP IY + RET ; Процедура вывода в буфер тени окна ; На вход: IX - адрес описателя PutDialSh: - LD HL,WinBoxBuff+6800 - LD A,(IX+2) - LD E,A - LD D,0 - ADD HL,DE - ADD HL,DE - EXX - LD E,A ;длина окна X - BIT 7,(IX+0) - JR Z,ExShD1 ;правая граница экрана - LD A,(IX+0) - NEG ;в A-на сколько окно залезло за экран - SUB E ;-длина окна=-видимая часть - NEG - LD E,A ;длина видимой части -ExShD1: LD D,0 - LD HL,WinBoxBuff - ADD HL,DE - ADD HL,DE - LD A,(HL) ;первая линия без тени - INC HL - EXX - LD (HL),A - INC HL - EXX - LD A,(HL) - INC HL - EXX - LD (HL),A - INC HL - EXX - LD A,(HL) - INC HL - EXX - LD (HL),A - INC HL - EXX - LD A,(HL) - INC HL - EXX - LD (HL),A - INC HL + LD HL,WinBoxBuff+6800 + LD A,(IX+2) + LD E,A + LD D,0 + ADD HL,DE + ADD HL,DE + EXX + LD E,A ;длина окна X + BIT 7,(IX+0) + JR Z,ExShD1 ;правая граница экрана + LD A,(IX+0) + NEG ;в A-на сколько окно залезло за экран + SUB E ;-длина окна=-видимая часть + NEG + LD E,A ;длина видимой части +ExShD1: LD D,0 + LD HL,WinBoxBuff + ADD HL,DE + ADD HL,DE + LD A,(HL) ;первая линия без тени + INC HL + EXX + LD (HL),A + INC HL + EXX + LD A,(HL) + INC HL + EXX + LD (HL),A + INC HL + EXX + LD A,(HL) + INC HL + EXX + LD (HL),A + INC HL + EXX + LD A,(HL) + INC HL + EXX + LD (HL),A + INC HL ; середина окна - LD B,(IX+3) ;длина окна Y-1 - DEC B -DShadLp:ADD HL,DE - ADD HL,DE - EXX - ADD HL,DE - ADD HL,DE - LD A,(HL) - INC HL - EXX - LD (HL),A - INC HL - EXX - LD A,(HL) - INC HL - EXX - AND 7 - JR NZ,$+4 - LD A,7 - LD (HL),A - INC HL - EXX - LD A,(HL) - INC HL - EXX - LD (HL),A - INC HL - EXX - LD A,(HL) - INC HL - EXX - AND 7 - JR NZ,$+4 - LD A,7 - LD (HL),A - INC HL - DJNZ DShadLp - ADD HL,DE ;конец линии для тени - ADD HL,DE - INC HL - INC HL - INC HL - INC HL - EXX - ADD HL,DE ;конец буфера - ADD HL,DE - INC HL - INC HL - INC HL - INC HL - EXX - LD B,E -DShadL1:EXX - DEC HL ;заполняем с конца - LD A,(HL) - EXX - DEC HL - AND 7 - JR NZ,$+4 - LD A,7 - LD (HL),A - EXX - DEC HL - LD A,(HL) - EXX - DEC HL - LD (HL),A - DJNZ DShadL1 - EXX ;два первых знакоместа без изменений - DEC HL - LD A,(HL) - EXX - DEC HL - LD (HL),A - EXX - DEC HL - LD A,(HL) - EXX - DEC HL - LD (HL),A - EXX - DEC HL - LD A,(HL) - EXX - DEC HL - LD (HL),A - EXX - DEC HL - LD A,(HL) - EXX - DEC HL - LD (HL),A - RET + LD B,(IX+3) ;длина окна Y-1 + DEC B +DShadLp: ADD HL,DE + ADD HL,DE + EXX + ADD HL,DE + ADD HL,DE + LD A,(HL) + INC HL + EXX + LD (HL),A + INC HL + EXX + LD A,(HL) + INC HL + EXX + AND 7 + JR NZ,$+4 + LD A,7 + LD (HL),A + INC HL + EXX + LD A,(HL) + INC HL + EXX + LD (HL),A + INC HL + EXX + LD A,(HL) + INC HL + EXX + AND 7 + JR NZ,$+4 + LD A,7 + LD (HL),A + INC HL + DJNZ DShadLp + ADD HL,DE ;конец линии для тени + ADD HL,DE + INC HL + INC HL + INC HL + INC HL + EXX + ADD HL,DE ;конец буфера + ADD HL,DE + INC HL + INC HL + INC HL + INC HL + EXX + LD B,E +DShadL1: EXX + DEC HL ;заполняем с конца + LD A,(HL) + EXX + DEC HL + AND 7 + JR NZ,$+4 + LD A,7 + LD (HL),A + EXX + DEC HL + LD A,(HL) + EXX + DEC HL + LD (HL),A + DJNZ DShadL1 + EXX ;два первых знакоместа без изменений + DEC HL + LD A,(HL) + EXX + DEC HL + LD (HL),A + EXX + DEC HL + LD A,(HL) + EXX + DEC HL + LD (HL),A + EXX + DEC HL + LD A,(HL) + EXX + DEC HL + LD (HL),A + EXX + DEC HL + LD A,(HL) + EXX + DEC HL + LD (HL),A + RET ; Get put address in memory ; Input: BC - Coords from begin window ; Output: DE - Address put place ; -GetPutA:PUSH HL - LD HL,WinBoxBuff+6800 - LD A,(IX+2) ;Len X-2 - ADD A,2 ;Full len with shadow - ADD A,A ;With attributs - LD E,A ;LenX in bytes - LD D,0 - LD A,B - OR A - JR Z,$+5 - ADD HL,DE - DJNZ $-1 - LD E,C ;$+5 - ADD HL,DE ;DE-shiftX - ADD HL,DE - EX DE,HL ;DE-Address - POP HL - RET +GetPutA: PUSH HL + LD HL,WinBoxBuff+6800 + LD A,(IX+2) ;Len X-2 + ADD A,2 ;Full len with shadow + ADD A,A ;With attributs + LD E,A ;LenX in bytes + LD D,0 + LD A,B + OR A + JR Z,$+5 + ADD HL,DE + DJNZ $-1 + LD E,C ;$+5 + ADD HL,DE ;DE-shiftX + ADD HL,DE + EX DE,HL ;DE-Address + POP HL + RET @@ -1665,33 +1667,33 @@ GetPutA:PUSH HL ; Очистить десктоп -ClearDesk: call setpal +ClearDesk: CALL setpal ; Титл программы - ld de,0000h - LD C,BIOS.LP_SET_PLACE ; уст. полож. курсора + LD DE,0000h + LD C,BIOS.LP_SET_PLACE ; уст. полож. курсора RST ToBIOS - ld hl,Title - ld e,0Fh ; атрибут - ld bc,#50*256 + BIOS.LP_PRINT_LINE ; вывод строки + LD HL,Title + LD E,0Fh ; атрибут + LD BC,#50*256+BIOS.LP_PRINT_LINE ; вывод строки RST ToBIOS - call Clear1 + CALL Clear1 ; нижняя полоска - ld de,1F00h ; Y/X полож. символа - LD C,BIOS.LP_SET_PLACE ; уст. координаты в окне + LD DE,1F00h ; Y/X полож. символа + LD C,BIOS.LP_SET_PLACE ; уст. координаты в окне RST ToBIOS - ld a," " ; символ - ld e,0Fh ; атрибут - ld bc,5081h ; печать символа с атрибутом + LD A," " ; символ + LD E,0Fh ; атрибут + LD BC,5081h ; печать символа с атрибутом RST ToBIOS - ret + RET -Clear1: ld de,0100h ; Y/X полож. окна - ld hl,1E50h ; Y/X размер - ld bc,408Dh ; b=атрибут - ld a," " ; символ +Clear1: LD DE,0100h ; Y/X полож. окна + LD HL,1E50h ; Y/X размер + LD BC,408Dh ; b=атрибут + LD A," " ; символ RST ToBIOS - ret + RET @@ -1723,51 +1725,51 @@ Clear1: ld de,0100h ; Y/X ; Установить инверсию для цвета 0Fh -setpal: ld hl,pal ; палитра - ld de,0100h ; число цветов палитры/начальный цвет - ld bc,0FFA4h ; маска цвета/функция установки - ld a,4 ; номер палитры (0=0-й экран, 1=1-й экран) +setpal: LD HL,pal ; палитра + LD DE,0100h ; число цветов палитры/начальный цвет + LD BC,0FFA4h ; маска цвета/функция установки + LD A,4 ; номер палитры (0=0-й экран, 1=1-й экран) RST ToBIOS - ld hl,pal1 - ld de,010Fh ; число цветов палитры/начальный цвет - ld bc,0FFA4h - ld a,4 + LD HL,pal1 + LD DE,010Fh ; число цветов палитры/начальный цвет + LD BC,0FFA4h + LD A,4 RST ToBIOS ; - ld hl,pal1 - ld de,0100h ; число цветов палитры/начальный цвет - ld bc,0FFA4h - ld a,5 + LD HL,pal1 + LD DE,0100h ; число цветов палитры/начальный цвет + LD BC,0FFA4h + LD A,5 RST ToBIOS - ld hl,pal - ld de,010Fh ; число цветов палитры/начальный цвет - ld bc,0FFA4h - ld a,5 + LD HL,pal + LD DE,010Fh ; число цветов палитры/начальный цвет + LD BC,0FFA4h + LD A,5 RST ToBIOS ; - ld hl,pal - ld de,0100h ; число цветов палитры/начальный цвет - ld bc,0FFA4h - ld a,6 + LD HL,pal + LD DE,0100h ; число цветов палитры/начальный цвет + LD BC,0FFA4h + LD A,6 RST ToBIOS - ld hl,pal1 - ld de,010Fh ; число цветов палитры/начальный цвет - ld bc,0FFA4h - ld a,6 + LD HL,pal1 + LD DE,010Fh ; число цветов палитры/начальный цвет + LD BC,0FFA4h + LD A,6 RST ToBIOS ; - ld hl,pal1 - ld de,0100h ; число цветов палитры/начальный цвет - ld bc,0FFA4h - ld a,7 + LD HL,pal1 + LD DE,0100h ; число цветов палитры/начальный цвет + LD BC,0FFA4h + LD A,7 RST ToBIOS - ld hl,pal - ld de,010Fh ; число цветов палитры/начальный цвет - ld bc,0FFA4h - ld a,7 + LD HL,pal + LD DE,010Fh ; число цветов палитры/начальный цвет + LD BC,0FFA4h + LD A,7 RST ToBIOS - ret + RET -pal: db 0,0,0,0 -pal1: db 255,255,255,0 +pal: DB 0,0,0,0 +pal1: DB 255,255,255,0 diff --git a/FMAIN.ASM b/FMAIN.ASM index 04df9e7..c47b4b3 100755 --- a/FMAIN.ASM +++ b/FMAIN.ASM @@ -52,8 +52,8 @@ Start: ld sp,Stack ; выделяем блок в 8 страниц ld bc,8*256 + Dss.GetMem ;!HARDCODE RST ToDSS - jr c,err_mem ; нет памяти - ld (hBlock),a ; хэндл блока + jr c,err_mem ; нет памяти + ld (hBlock),a ; хэндл блока ; создать список выдел. страниц ld hl,hPages ld c,0C5h @@ -118,7 +118,7 @@ SBuff2: db 0 ; фай Begin: ; сохр. экран call SaveScreen ; сохр. полож. курсора сист. экрана - ld c,8Eh + ld c,BIOS.LP_GET_PLACE RST ToBIOS ld (sys_cursor_coords),de ; иниц. драйвер мышки @@ -148,23 +148,23 @@ continue: call ReadInit ; ; вектор для отображения курсора -rst38: di - push iy - push ix - push hl - push de - push bc - push af - ld a,(CurILFl) - or a - call nz,PrnILCr - pop af - pop bc - pop de - pop hl - pop ix - pop iy -vect: jp 0x0000 ; адрес сист. вектора +; rst38: di +; push iy +; push ix +; push hl +; push de +; push bc +; push af +; ld a,(CurILFl) +; or a +; call nz,PrnILCr +; pop af +; pop bc +; pop de +; pop hl +; pop ix +; pop iy +; vect+1: jp 0x0000 ; адрес сист. вектора @@ -188,7 +188,7 @@ NoMouse: db "Driver mouse not installed",0Dh,0Ah,0 Title: db " Floppy disk formatting utility Version " db major_version + "0","." db (minor_version / 10) + "0",(minor_version % 10) + "0" - db " (c) 2005-2007 " + db " (c) 2005-2025 " ; ds 562 ; 565 + start2 = 672 (_2 -_1) diff --git a/RADIO.ASM b/RADIO.ASM index 04b5614..9ab446a 100755 --- a/RADIO.ASM +++ b/RADIO.ASM @@ -6,45 +6,44 @@ ; Буфер имени метки дискеты -LabelBuff: - db 11 ; Max input symbols - db 0 ; ReadyString - db 0 ; Pos X - db 0 ; Add X - db 0 ; Inp.Symb -LABEL: ds 12,0 +LabelBuff: DB 11 ; Max input symbols + DB 0 ; ReadyString + DB 0 ; Pos X + DB 0 ; Add X + DB 0 ; Inp.Symb +LABEL: DS 12,0 -cSystem:db 0 ; 01/00 - созд./не созд. сист. дискету +cSystem: DB 0 ; 01/00 - созд./не созд. сист. дискету -Mode0: db 0 ; "Standart mode" -Mode2: db 1 ; "Optimize sectors" -Mode1: db 0 ; "Quick format" +Mode0: DB 0 ; "Standart mode" +Mode2: DB 1 ; "Optimize sectors" +Mode1: DB 0 ; "Quick format" -CurElem0:dw 0 ; тек. полож. курсора ListBox1-а -CurElem1:dw 0 ; тек. полож. курсора ListBox2-а +CurElem0: DW 0 ; тек. полож. курсора ListBox1-а +CurElem1: DW 0 ; тек. полож. курсора ListBox2-а -CurILFl:db 0 ; флаг курсора 00-выкл/01-вкл -Flag: db 0 ; флаг курсора 00-нет/01-есть -Timer: db 1 ; таймер -CursPos:dw 0 ; позиция курсора +CurILFl: DB 0 ; флаг курсора 00-выкл/01-вкл +;Flag: DB 0 ; флаг курсора 00-нет/01-есть +Timer: DB 1 ; таймер +CursPos: DW 0 ; позиция курсора -_OS: db 0 ; 00/01/02 тип ОС (ms-dos/tr-dos/cpm) +_OS: DB 0 ; 00/01/02 тип ОС (ms-dos/tr-dos/cpm) ; Опции выбора формата FDD ; диск "A" DriveA: -SetDriveA0:db 1 ; 1.44Mb 3.5" -SetDriveA1:db 0 ; 720kB 5.25" -SetDriveA2:db 0 ; None (ячейка не отслеживается) +SetDriveA0: DB 1 ; 1.44Mb 3.5" +SetDriveA1: DB 0 ; 720kB 5.25" +SetDriveA2: DB 0 ; None (ячейка не отслеживается) ; диск "B" DriveB: -SetDriveB0:db 0 ; 1.44Mb 3.5" -SetDriveB1:db 1 ; 720kB 5.25" -SetDriveB2:db 0 ; None +SetDriveB0: DB 0 ; 1.44Mb 3.5" +SetDriveB1: DB 1 ; 720kB 5.25" +SetDriveB2: DB 0 ; None @@ -70,115 +69,115 @@ SetDriveB2:db 0 ; None ; +8,9 - Address input buffer ; PInpLine: - PUSH IY ; iy=DialTab+5 - INC IY - LD (IY+0),A ;+0 object - LD A,(HL) ;X pos - INC HL - LD C,A - ADD A,(IX+0) ;Pos X from begin screen - LD (IY+1),A ;+1 Xo - LD (IX+4),A ;Temp X coord - LD A,(HL) ;Y pos - INC HL - LD B,A - ADD A,(IX+1) ;Pos Y from begin screen - LD (IY+3),A ;+3 Yo - CALL GetPutA - EX DE,HL - ld a,(ColDialWn) - LD C,A - LD A,(DE) -PInpLp1:INC DE - CP '~' - JR NZ,PInpN0 - ld c,ColDhotkey + PUSH IY ; iy=DialTab+5 + INC IY + LD (IY+0),A ;+0 object + LD A,(HL) ;X pos + INC HL + LD C,A + ADD A,(IX+0) ;Pos X from begin screen + LD (IY+1),A ;+1 Xo + LD (IX+4),A ;Temp X coord + LD A,(HL) ;Y pos + INC HL + LD B,A + ADD A,(IX+1) ;Pos Y from begin screen + LD (IY+3),A ;+3 Yo + CALL GetPutA + EX DE,HL + LD A,(ColDialWn) + LD C,A + LD A,(DE) +PInpLp1: INC DE + CP '~' + JR NZ,PInpN0 + LD C,ColDhotkey ;LD C,A - LD A,(DE) - INC DE - LD (HL),A - INC HL - RES 5,A - LD (IY+6),A ;Hot key - LD A,(HL) - AND 0F0h - OR C - LD (HL),A - INC HL - INC DE - INC (IX+4) - ld a,(ColDialWn) - LD C,A - LD A,(DE) - INC DE -PInpN0: LD (HL),A - INC HL - LD (HL),C - INC HL - INC (IX+4) - LD A,(DE) - OR A - JR NZ,PInpLp1 - EX DE,HL - INC HL - LD A,(IX+4) - LD (IY+4),A ;Xi position text - LD A,(IX+4) - LD (IY+5),A ;Xi position input line - LD (next1+1),DE - LD B,(HL) ;len input line - INC HL - LD A,(HL) ;context - INC HL - LD (IY+7),A - LD E,(HL) ;DE-Address input buffer - LD (IY+8),E - INC HL - LD D,(HL) - LD (IY+9),D - INC HL - LD A,(DE) - INC DE - SUB A - INC A - LD (DE),A ;Ready - DEC A - INC DE - LD (DE),A ;Pos X - INC DE - LD (DE),A ;Add X - INC DE - INC DE - PUSH HL -next1: LD HL,0 - ld c,ColInpLine ; цвет строки ввода + LD A,(DE) + INC DE + LD (HL),A + INC HL + RES 5,A + LD (IY+6),A ;Hot key + LD A,(HL) + AND 0F0h + OR C + LD (HL),A + INC HL + INC DE + INC (IX+4) + LD A,(ColDialWn) + LD C,A + LD A,(DE) + INC DE +PInpN0: LD (HL),A + INC HL + LD (HL),C + INC HL + INC (IX+4) + LD A,(DE) + OR A + JR NZ,PInpLp1 + EX DE,HL + INC HL + LD A,(IX+4) + LD (IY+4),A ;Xi position text + LD A,(IX+4) + LD (IY+5),A ;Xi position input line + LD (next1+1),DE + LD B,(HL) ;len input line + INC HL + LD A,(HL) ;context + INC HL + LD (IY+7),A + LD E,(HL) ;DE-Address input buffer + LD (IY+8),E + INC HL + LD D,(HL) + LD (IY+9),D + INC HL + LD A,(DE) + INC DE + SUB A + INC A + LD (DE),A ;Ready + DEC A + INC DE + LD (DE),A ;Pos X + INC DE + LD (DE),A ;Add X + INC DE + INC DE + PUSH HL +next1: LD HL,0 + LD C,ColInpLine ; цвет строки ввода ;LD C,A -PInpLp2:LD A,(DE) - INC DE - LD (HL),A - INC HL - LD (HL),C - INC HL - INC (IX+4) - DJNZ PInpLp2 ; цикл прохода строки ввода - POP HL - LD E,(IY+5) - LD D,(IY+3) - LD (CursPos),DE - LD A,(IX+4) - LD (IY+2),A ;Xi position object - LD BC,000Ah - ADD IY,BC ;IY-next element - PUSH IY - EXX ;Len label objects - POP HL - POP DE - OR A - SBC HL,DE - LD A,L - LD (DE),A - EXX - RET +PInpLp2: LD A,(DE) + INC DE + LD (HL),A + INC HL + LD (HL),C + INC HL + INC (IX+4) + DJNZ PInpLp2 ; цикл прохода строки ввода + POP HL + LD E,(IY+5) + LD D,(IY+3) + LD (CursPos),DE + LD A,(IX+4) + LD (IY+2),A ;Xi position object + LD BC,000Ah + ADD IY,BC ;IY-next element + PUSH IY + EXX ;Len label objects + POP HL + POP DE + OR A + SBC HL,DE + LD A,L + LD (DE),A + EXX + RET ; Отрисовка объекта @@ -198,242 +197,242 @@ PInpLp2:LD A,(DE) ; +4,5 - Address ceil ; 80h - End buttons PClRadioB: - PUSH IY - INC IY - LD (IY+0),A - LD A,(HL) ;X pos - INC HL - LD C,A - LD (IX+4),A ;Save X pos - ADD A,(IX+0) ;Pos X from begin screen - LD (IY+1),A ;+1 Xo - LD A,(HL) ;Y pos - INC HL - LD B,A - LD (IX+5),A ;Save Y pos - ADD A,(IX+1) ;Pos Y from begin screen - LD (IY+3),A ;+3 Yo - CALL GetPutA - LD A,(HL) - INC HL - LD (IX+6),A - SUB 2 - LD C,A - LD B,0 - ADD A,4 - ADD A,(IY+1) - LD (IY+2),A ;Xi pos - LD A,(HL) - INC HL - ADD A,3 ;Yi pos - ADD A,(IY+3) - LD (IY+4),A - LD A,"┌" - LD (DE),A - INC DE - ld a,ColLstBxFr ; цвет рамки - ld (de),a - INC DE - LD A," " - LD (DE),A - INC DE - INC DE - LDI ;$-5 - INC DE - LD A,(HL) - OR A - JR NZ,$-5 - LD A," " - LD (DE),A - INC DE - INC DE - INC HL - LD A,(IX+6) - SUB C - INC A - ADD A,(IY+1) - LD (IY+5),A ;Xi pos name - LD A,C - OR A - JR Z,ClRadN1 - LD B,C -clrd1: LD A,"─" - LD (DE),A - INC DE - ld a,ColLstBxFr ; - ld (de),a - INC DE - DJNZ clrd1 -ClRadN1:LD A,"┐" - LD (DE),A - inc de - ld a,ColLstBxFr ; - ld (de),a - INC (IX+5) - LD BC,6 ;Next element claster - ADD IY,BC + PUSH IY + INC IY + LD (IY+0),A + LD A,(HL) ;X pos + INC HL + LD C,A + LD (IX+4),A ;Save X pos + ADD A,(IX+0) ;Pos X from begin screen + LD (IY+1),A ;+1 Xo + LD A,(HL) ;Y pos + INC HL + LD B,A + LD (IX+5),A ;Save Y pos + ADD A,(IX+1) ;Pos Y from begin screen + LD (IY+3),A ;+3 Yo + CALL GetPutA + LD A,(HL) + INC HL + LD (IX+6),A + SUB 2 + LD C,A + LD B,0 + ADD A,4 + ADD A,(IY+1) + LD (IY+2),A ;Xi pos + LD A,(HL) + INC HL + ADD A,3 ;Yi pos + ADD A,(IY+3) + LD (IY+4),A + LD A,"┌" + LD (DE),A + INC DE + LD A,ColLstBxFr ; цвет рамки + LD (DE),A + INC DE + LD A," " + LD (DE),A + INC DE + INC DE + LDI ;$-5 + INC DE + LD A,(HL) + OR A + JR NZ,$-5 + LD A," " + LD (DE),A + INC DE + INC DE + INC HL + LD A,(IX+6) + SUB C + INC A + ADD A,(IY+1) + LD (IY+5),A ;Xi pos name + LD A,C + OR A + JR Z,ClRadN1 + LD B,C +clrd1: LD A,"─" + LD (DE),A + INC DE + LD A,ColLstBxFr ; + LD (DE),A + INC DE + DJNZ clrd1 +ClRadN1: LD A,"┐" + LD (DE),A + INC DE + LD A,ColLstBxFr ; + LD (DE),A + INC (IX+5) + LD BC,6 ;Next element claster + ADD IY,BC ; - LD C,(IX+4) ;Empty string - LD B,(IX+5) - CALL GetPutA - EX DE,HL - LD (HL),"│" - INC HL + LD C,(IX+4) ;Empty string + LD B,(IX+5) + CALL GetPutA + EX DE,HL + LD (HL),"│" + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr - INC HL - LD C,(IX+6) - LD B,0 - ADD HL,BC - ADD HL,BC - LD (HL),"│" - inc hl + LD (HL),ColLstBxFr + INC HL + LD C,(IX+6) + LD B,0 + ADD HL,BC + ADD HL,BC + LD (HL),"│" + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr - INC (IX+5) - EX DE,HL + LD (HL),ColLstBxFr + INC (IX+5) + EX DE,HL ; ; Next element -ClRadLp:LD C,(IX+4) ;pos element - LD B,(IX+5) - CALL GetPutA - LD B,0 - EX DE,HL - LD (HL),"│" - INC HL +ClRadLp: LD C,(IX+4) ;pos element + LD B,(IX+5) + CALL GetPutA + LD B,0 + EX DE,HL + LD (HL),"│" + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr - INC HL - INC HL - INC HL - INC B - LD (HL),'[' - INC HL - INC HL - INC B - PUSH HL - INC HL - INC HL - INC B - LD (HL),']' - INC HL - INC HL - INC B - INC HL - INC HL - INC B + LD (HL),ColLstBxFr + INC HL + INC HL + INC HL + INC B + LD (HL),'[' + INC HL + INC HL + INC B + PUSH HL + INC HL + INC HL + INC B + LD (HL),']' + INC HL + INC HL + INC B + INC HL + INC HL + INC B ; - ld a,(ColDialWn) ;Put name element - LD C,A - LD A,(DE) -ClRadL1:INC DE - CP '~' - JR NZ,ClRadN0 - ld c,ColDhotkey + LD A,(ColDialWn) ;Put name element + LD C,A + LD A,(DE) +ClRadL1: INC DE + CP '~' + JR NZ,ClRadN0 + LD C,ColDhotkey ;LD C,A - LD A,(DE) - INC DE - LD (HL),A - INC HL - RES 5,A - LD (IY+1),A ;Hot key - LD A,(HL) - AND 0F0h - OR C - LD (HL),A - INC HL - INC DE - ld a,(ColDialWn) - LD C,A - INC B - LD A,(DE) - INC DE -ClRadN0:LD (HL),A - INC HL - LD (HL),C - INC HL - INC B - LD A,(DE) - OR A - JR NZ,ClRadL1 - INC DE - LD A,(IX+6) - SUB B - LD C,A - LD B,0 - ADD HL,BC - ADD HL,BC - LD (HL),"│" - inc hl + LD A,(DE) + INC DE + LD (HL),A + INC HL + RES 5,A + LD (IY+1),A ;Hot key + LD A,(HL) + AND 0F0h + OR C + LD (HL),A + INC HL + INC DE + LD A,(ColDialWn) + LD C,A + INC B + LD A,(DE) + INC DE +ClRadN0: LD (HL),A + INC HL + LD (HL),C + INC HL + INC B + LD A,(DE) + OR A + JR NZ,ClRadL1 + INC DE + LD A,(IX+6) + SUB B + LD C,A + LD B,0 + ADD HL,BC + ADD HL,BC + LD (HL),"│" + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr - LD A,(IX+5) ;Current Y pos - ADD A,(IX+1) ;from begin screen - LD (IY+0),A - INC IY - INC IY - EX DE,HL - LD A,(HL) - INC HL - LD (IY+0),A ;Context - INC IY - LD C,(HL) - INC HL - LD B,(HL) - INC HL - LD A,(BC) - LD (IY+0),A ;(Ceil) - INC IY - LD (IY+0),C ;BC=Ceil - INC IY - LD (IY+0),B - INC IY - POP BC - OR A - LD A," " - JR Z,$+4 - LD A,"x" - LD (BC),A - INC (IX+5) - LD A,(HL) - OR A - JP NZ,ClRadLp - LD (IY+0),80h ;End tab claster - INC IY - INC HL + LD (HL),ColLstBxFr + LD A,(IX+5) ;Current Y pos + ADD A,(IX+1) ;from begin screen + LD (IY+0),A + INC IY + INC IY + EX DE,HL + LD A,(HL) + INC HL + LD (IY+0),A ;Context + INC IY + LD C,(HL) + INC HL + LD B,(HL) + INC HL + LD A,(BC) + LD (IY+0),A ;(Ceil) + INC IY + LD (IY+0),C ;BC=Ceil + INC IY + LD (IY+0),B + INC IY + POP BC + OR A + LD A," " + JR Z,$+4 + LD A,"x" + LD (BC),A + INC (IX+5) + LD A,(HL) + OR A + JP NZ,ClRadLp + LD (IY+0),80h ;End tab claster + INC IY + INC HL ; - LD C,(IX+4) ;End string - LD B,(IX+5) - CALL GetPutA - EX DE,HL - LD (HL),"└" - INC HL + LD C,(IX+4) ;End string + LD B,(IX+5) + CALL GetPutA + EX DE,HL + LD (HL),"└" + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr - INC HL - LD B,(IX+6) -clrd2: LD A,"─" - LD (HL),A - INC HL + LD (HL),ColLstBxFr + INC HL + LD B,(IX+6) +clrd2: LD A,"─" + LD (HL),A + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr - INC HL - DJNZ clrd2 - LD (HL),"┘" - inc hl + LD (HL),ColLstBxFr + INC HL + DJNZ clrd2 + LD (HL),"┘" + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr - EX DE,HL - PUSH IY - EXX - POP HL - POP DE - OR A - SBC HL,DE - LD A,L - LD (DE),A - EXX - RET + LD (HL),ColLstBxFr + EX DE,HL + PUSH IY + EXX + POP HL + POP DE + OR A + SBC HL,DE + LD A,L + LD (DE),A + EXX + RET ; Отрисовка объекта @@ -453,242 +452,242 @@ clrd2: LD A," ; +4,5 - Address ceil ; 80h - End buttons PClCheckB: - PUSH IY - INC IY - LD (IY+0),A - LD A,(HL) ;X pos - INC HL - LD C,A - LD (IX+4),A ;Save X pos - ADD A,(IX+0) ;Pos X from begin screen - LD (IY+1),A ;+1 Xo - LD A,(HL) ;Y pos - INC HL - LD B,A - LD (IX+5),A ;Save Y pos - ADD A,(IX+1) ;Pos Y from begin screen - LD (IY+3),A ;+3 Yo - CALL GetPutA - LD A,(HL) - INC HL - LD (IX+6),A - SUB 2 - LD C,A - LD B,0 - ADD A,4 - ADD A,(IY+1) - LD (IY+2),A ;Xi pos - LD A,(HL) - INC HL - ADD A,3 ;Yi pos - ADD A,(IY+3) - LD (IY+4),A - LD A,"┌" - LD (DE),A - INC DE - ld a,ColLstBxFr ; - ld (de),a - INC DE - LD A," " - LD (DE),A - INC DE - INC DE - LDI ;$-5 - INC DE - LD A,(HL) - OR A - JR NZ,$-5 - LD A," " - LD (DE),A - INC DE - INC DE - INC HL - LD A,(IX+6) - SUB C - INC A - ADD A,(IY+1) - LD (IY+5),A ;Xi pos name - LD A,C - OR A - JR Z,ClChkN1 - LD B,C -clch1: LD A,"─" - LD (DE),A - INC DE - ld a,ColLstBxFr ; - ld (de),a - INC DE - DJNZ clch1 -ClChkN1:LD A,"┐" - LD (DE),A - inc de - ld a,ColLstBxFr ; - ld (de),a - INC (IX+5) - LD BC,6 ;Next element claster - ADD IY,BC + PUSH IY + INC IY + LD (IY+0),A + LD A,(HL) ;X pos + INC HL + LD C,A + LD (IX+4),A ;Save X pos + ADD A,(IX+0) ;Pos X from begin screen + LD (IY+1),A ;+1 Xo + LD A,(HL) ;Y pos + INC HL + LD B,A + LD (IX+5),A ;Save Y pos + ADD A,(IX+1) ;Pos Y from begin screen + LD (IY+3),A ;+3 Yo + CALL GetPutA + LD A,(HL) + INC HL + LD (IX+6),A + SUB 2 + LD C,A + LD B,0 + ADD A,4 + ADD A,(IY+1) + LD (IY+2),A ;Xi pos + LD A,(HL) + INC HL + ADD A,3 ;Yi pos + ADD A,(IY+3) + LD (IY+4),A + LD A,"┌" + LD (DE),A + INC DE + LD A,ColLstBxFr ; + LD (DE),A + INC DE + LD A," " + LD (DE),A + INC DE + INC DE + LDI ;$-5 + INC DE + LD A,(HL) + OR A + JR NZ,$-5 + LD A," " + LD (DE),A + INC DE + INC DE + INC HL + LD A,(IX+6) + SUB C + INC A + ADD A,(IY+1) + LD (IY+5),A ;Xi pos name + LD A,C + OR A + JR Z,ClChkN1 + LD B,C +clch1: LD A,"─" + LD (DE),A + INC DE + LD A,ColLstBxFr ; + LD (DE),A + INC DE + DJNZ clch1 +ClChkN1: LD A,"┐" + LD (DE),A + INC DE + LD A,ColLstBxFr ; + LD (DE),A + INC (IX+5) + LD BC,6 ;Next element claster + ADD IY,BC ; - LD C,(IX+4) ;Empty string - LD B,(IX+5) - CALL GetPutA - EX DE,HL - LD (HL),"│" - INC HL + LD C,(IX+4) ;Empty string + LD B,(IX+5) + CALL GetPutA + EX DE,HL + LD (HL),"│" + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr - INC HL - LD C,(IX+6) - LD B,0 - ADD HL,BC - ADD HL,BC - LD (HL),"│" - inc hl + LD (HL),ColLstBxFr + INC HL + LD C,(IX+6) + LD B,0 + ADD HL,BC + ADD HL,BC + LD (HL),"│" + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr - INC (IX+5) - EX DE,HL + LD (HL),ColLstBxFr + INC (IX+5) + EX DE,HL ; Next element -ClChkLp:LD C,(IX+4) ;pos element - LD B,(IX+5) - CALL GetPutA - LD B,0 - EX DE,HL - LD (HL),"│" - INC HL +ClChkLp: LD C,(IX+4) ;pos element + LD B,(IX+5) + CALL GetPutA + LD B,0 + EX DE,HL + LD (HL),"│" + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr - INC HL - INC HL - INC HL - INC B - LD (HL),'(' - INC HL - INC HL - INC B - PUSH HL - INC HL - INC HL - INC B - LD (HL),')' - INC HL - INC HL - INC B - INC HL - INC HL - INC B + LD (HL),ColLstBxFr + INC HL + INC HL + INC HL + INC B + LD (HL),'(' + INC HL + INC HL + INC B + PUSH HL + INC HL + INC HL + INC B + LD (HL),')' + INC HL + INC HL + INC B + INC HL + INC HL + INC B ; - ld a,(ColDialWn) ;Put name element - LD C,A - LD A,(DE) -ClChkL1:INC DE - CP '~' - JR NZ,ClChkN0 - ld c,ColDhotkey + LD A,(ColDialWn) ;Put name element + LD C,A + LD A,(DE) +ClChkL1: INC DE + CP '~' + JR NZ,ClChkN0 + LD C,ColDhotkey ;LD C,A - LD A,(DE) - INC DE - LD (HL),A - INC HL - RES 5,A - LD (IY+1),A ;Hot key - LD A,(HL) - AND 0F0h - OR C - LD (HL),A - INC HL - INC DE - ld a,(ColDialWn) - LD C,A - INC B - LD A,(DE) - INC DE -ClChkN0:LD (HL),A - INC HL - LD (HL),C - INC HL - INC B - LD A,(DE) - OR A - JR NZ,ClChkL1 - INC DE - LD A,(IX+6) - SUB B - LD C,A - LD B,0 - ADD HL,BC - ADD HL,BC - LD (HL),"│" - inc hl + LD A,(DE) + INC DE + LD (HL),A + INC HL + RES 5,A + LD (IY+1),A ;Hot key + LD A,(HL) + AND 0F0h + OR C + LD (HL),A + INC HL + INC DE + LD A,(ColDialWn) + LD C,A + INC B + LD A,(DE) + INC DE +ClChkN0: LD (HL),A + INC HL + LD (HL),C + INC HL + INC B + LD A,(DE) + OR A + JR NZ,ClChkL1 + INC DE + LD A,(IX+6) + SUB B + LD C,A + LD B,0 + ADD HL,BC + ADD HL,BC + LD (HL),"│" + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr + LD (HL),ColLstBxFr ; - LD A,(IX+5) ;Current Y pos - ADD A,(IX+1) ;from begin screen - LD (IY+0),A - INC IY - INC IY - EX DE,HL - LD A,(HL) - INC HL - LD (IY+0),A ;Context - INC IY - LD C,(HL) - INC HL - LD B,(HL) - INC HL - LD A,(BC) - LD (IY+0),A ;(Ceil) - INC IY - LD (IY+0),C ;BC=Ceil - INC IY - LD (IY+0),B - INC IY - POP BC - OR A - LD A," " - JR Z,$+4 - LD A,"" - LD (BC),A - INC (IX+5) - LD A,(HL) - OR A - JP NZ,ClChkLp - LD (IY+0),80h ;End tab claster - INC IY - INC HL + LD A,(IX+5) ;Current Y pos + ADD A,(IX+1) ;from begin screen + LD (IY+0),A + INC IY + INC IY + EX DE,HL + LD A,(HL) + INC HL + LD (IY+0),A ;Context + INC IY + LD C,(HL) + INC HL + LD B,(HL) + INC HL + LD A,(BC) + LD (IY+0),A ;(Ceil) + INC IY + LD (IY+0),C ;BC=Ceil + INC IY + LD (IY+0),B + INC IY + POP BC + OR A + LD A," " + JR Z,$+4 + LD A,"" + LD (BC),A + INC (IX+5) + LD A,(HL) + OR A + JP NZ,ClChkLp + LD (IY+0),80h ;End tab claster + INC IY + INC HL ; - LD C,(IX+4) ;End string - LD B,(IX+5) - CALL GetPutA - EX DE,HL - LD (HL),"└" - INC HL + LD C,(IX+4) ;End string + LD B,(IX+5) + CALL GetPutA + EX DE,HL + LD (HL),"└" + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr - INC HL - LD B,(IX+6) -clch2: LD A,"─" - LD (HL),A - INC HL + LD (HL),ColLstBxFr + INC HL + LD B,(IX+6) +clch2: LD A,"─" + LD (HL),A + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr - INC HL - DJNZ clch2 - LD (HL),"┘" - inc hl + LD (HL),ColLstBxFr + INC HL + DJNZ clch2 + LD (HL),"┘" + INC HL ;ld a,(ColLstBxFr) ; - ld (hl),ColLstBxFr - EX DE,HL - PUSH IY - EXX - POP HL - POP DE - OR A - SBC HL,DE - LD A,L - LD (DE),A - EXX - RET + LD (HL),ColLstBxFr + EX DE,HL + PUSH IY + EXX + POP HL + POP DE + OR A + SBC HL,DE + LD A,L + LD (DE),A + EXX + RET @@ -697,90 +696,90 @@ clch2: LD A," ; Input: HL-label ; Format mouse table: None ; -PFrame: ld c,(hl) ; X pos - inc hl - ld b,(hl) ; Y pos - inc hl ; X len - inc hl ; Y len - ld a,(hl) - push af ; сохр. Y len - push bc - call GetPutA - ld a,"┌" - ld (de),a - inc de - ld a,ColorFrame - ld (de),a - inc de - dec hl - ld b,(hl) ; X len -.loop1: ld a,"─" - ld (de),a - inc de - ld a,ColorFrame - ld (de),a - inc de - djnz .loop1 - ld a,"┐" - ld (de),a - inc de - ld a,ColorFrame - ld (de),a - pop bc -.loop2: inc b - push bc - call GetPutA - ex de,hl - ld (hl),"│" - inc hl - ld (hl),ColorFrame - inc hl - ex de,hl - ld b,(hl) ; X len -.loop3: ld a," " - ld (de),a - inc de - ld a,ColorFrame ; цвет внутри фрейма - ld (de),a - inc de - djnz .loop3 - ld a,"│" - ld (de),a - inc de - ld a,ColorFrame - ld (de),a - inc de - pop bc - inc hl - dec (hl) - dec hl - jr nz,.loop2 - inc b - call GetPutA - ld a,"└" - ld (de),a - inc de - ld a,ColorFrame - ld (de),a - inc de - ld b,(hl) ; X len - inc hl - pop af - ld (hl),a ; восст. Y len -.loop4: ld a,"─" - ld (de),a - inc de - ld a,ColorFrame - ld (de),a - inc de - djnz .loop4 - ld a,"┘" - ld (de),a - inc de - ld a,ColorFrame - ld (de),a - inc hl - ret +PFrame: LD C,(HL) ; X pos + INC HL + LD B,(HL) ; Y pos + INC HL ; X len + INC HL ; Y len + LD A,(HL) + PUSH AF ; сохр. Y len + PUSH BC + CALL GetPutA + LD A,"┌" + LD (DE),A + INC DE + LD A,ColorFrame + LD (DE),A + INC DE + DEC HL + LD B,(HL) ; X len +.loop1: LD A,"─" + LD (DE),A + INC DE + LD A,ColorFrame + LD (DE),A + INC DE + DJNZ .loop1 + LD A,"┐" + LD (DE),A + INC DE + LD A,ColorFrame + LD (DE),A + POP BC +.loop2: INC B + PUSH BC + CALL GetPutA + EX DE,HL + LD (HL),"│" + INC HL + LD (HL),ColorFrame + INC HL + EX DE,HL + LD B,(HL) ; X len +.loop3: LD A," " + LD (DE),A + INC DE + LD A,ColorFrame ; цвет внутри фрейма + LD (DE),A + INC DE + DJNZ .loop3 + LD A,"│" + LD (DE),A + INC DE + LD A,ColorFrame + LD (DE),A + INC DE + POP BC + INC HL + DEC (HL) + DEC HL + JR NZ,.loop2 + INC B + CALL GetPutA + LD A,"└" + LD (DE),A + INC DE + LD A,ColorFrame + LD (DE),A + INC DE + LD B,(HL) ; X len + INC HL + POP AF + LD (HL),A ; восст. Y len +.loop4: LD A,"─" + LD (DE),A + INC DE + LD A,ColorFrame + LD (DE),A + INC DE + DJNZ .loop4 + LD A,"┘" + LD (DE),A + INC DE + LD A,ColorFrame + LD (DE),A + INC HL + RET @@ -789,426 +788,426 @@ PFrame: ld c,(hl) ; X pos ;[]===========================================================[] ; Event Input Line EInpLine: - LD HL,what ; список событий - LD A,(HL) - INC HL - CP evMouseFr - JR Z,EImouse - CP evKeyboard - JR Z,EIkeys - CP evCombKey - JP Z,EIcombK - RET + LD HL,what ; список событий + LD A,(HL) + INC HL + CP evMouseFr + JR Z,EImouse + CP evKeyboard + JR Z,EIkeys + CP evCombKey + JP Z,EIcombK + RET ;Event - Mouse fire -EImouse:LD E,(HL) ;Xcoord - INC HL - LD D,(HL) ;Ycoord - LD A,D - CP (IX+4) ;Y pos input line - RET NZ - LD A,E - BIT 7,(IX+2) - JR NZ,$+6 - CP (IX+2) ;Xo pos - RET C - BIT 7,(IX+3) - RET NZ - CP (IX+3) ;Xi pos - RET NC - BIT 7,(IX+1) - JR Z,SetInLn - BIT 7,(IX+6) - JR NZ,$+6 - CP (IX+6) ;Xo inp.line - RET C - SUB (IX+6) ;shift from begin - LD C,A - LD L,(IX+9) - LD H,(IX+0Ah) - INC HL - LD (HL),0 ;Flag - INC HL - CP (HL) - RET Z - PUSH HL - INC HL - ADD A,(HL) ;AddX - INC HL - CP (HL) ;InpSymb - LD A,(HL) - POP HL - JR Z,EIM - JR C,EIM - INC HL - SUB (HL) - DEC HL - LD C,A -EIM: LD (HL),C - DEC HL - DEC HL - PUSH IY - PUSH HL - POP IY - CALL PrnInLn - POP IY - JR InLnExt +EImouse: LD E,(HL) ;Xcoord + INC HL + LD D,(HL) ;Ycoord + LD A,D + CP (IX+4) ;Y pos input line + RET NZ + LD A,E + BIT 7,(IX+2) + JR NZ,$+6 + CP (IX+2) ;Xo pos + RET C + BIT 7,(IX+3) + RET NZ + CP (IX+3) ;Xi pos + RET NC + BIT 7,(IX+1) + JR Z,SetInLn + BIT 7,(IX+6) + JR NZ,$+6 + CP (IX+6) ;Xo inp.line + RET C + SUB (IX+6) ;shift from begin + LD C,A + LD L,(IX+9) + LD H,(IX+0Ah) + INC HL + LD (HL),0 ;Flag + INC HL + CP (HL) + RET Z + PUSH HL + INC HL + ADD A,(HL) ;AddX + INC HL + CP (HL) ;InpSymb + LD A,(HL) + POP HL + JR Z,EIM + JR C,EIM + INC HL + SUB (HL) + DEC HL + LD C,A +EIM: LD (HL),C + DEC HL + DEC HL + PUSH IY + PUSH HL + POP IY + CALL PrnInLn + POP IY + JR InLnExt ;Event - Key press -EIkeys: BIT 7,(IX+1) - JR NZ,ILwork - LD A,(HL) ; what+1 - RES 5,A +EIkeys: BIT 7,(IX+1) + JR NZ,ILwork + LD A,(HL) ; what+1 + RES 5,A ; CP 9 ; Tab ; JR Z,SetInLn ; cp 0Dh ; $$$ ; jr z,SetInLn - CP (IX+7) ;Hot key - RET NZ -SetInLn:CALL MoveObj ;Select Input line - CALL ResDialInv ;Reset previos invert - LD IX,DialTab+5 - LD E,(IX+2) ;Xo - LD D,(IX+4) ;Y - LD A,(IX+5) ;Xi text - SUB E - LD C,A ;Len text - CALL SetDialInv - PUSH IY - LD L,(IX+9) - LD H,(IX+0Ah) - PUSH HL - POP IY - INC HL - LD (HL),1 ;Flag - INC HL - SUB A - LD (HL),A ;Pos X - INC HL - LD (HL),A ;Add X - INC HL - CALL PrnInLn - POP IY - CALL PILCurs ; уст. курсор - EI -InLnExt:LD HL,what - LD (HL),evNothing - jp GetFire + CP (IX+7) ;Hot key + RET NZ +SetInLn: CALL MoveObj ;Select Input line + CALL ResDialInv ;Reset previos invert + LD IX,DialTab+5 + LD E,(IX+2) ;Xo + LD D,(IX+4) ;Y + LD A,(IX+5) ;Xi text + SUB E + LD C,A ;Len text + CALL SetDialInv + PUSH IY + LD L,(IX+9) + LD H,(IX+0Ah) + PUSH HL + POP IY + INC HL + LD (HL),1 ;Flag + INC HL + SUB A + LD (HL),A ;Pos X + INC HL + LD (HL),A ;Add X + INC HL + CALL PrnInLn + POP IY + CALL PILCurs ; уст. курсор + EI +InLnExt: LD HL,what + LD (HL),evNothing + JP GetFire ; Work select input line -ILwork: LD A,(HL) ; what+1 Get keys -ILwrk2: CP 8 - JR Z,ILw1 - CP " " - RET C -ILw1: PUSH IY - LD DE,InLnWex - PUSH DE - LD L,(IX+9) ;Address buffer - LD H,(IX+0Ah) - PUSH HL - POP IY - PUSH AF - RES 7,(IY+1) - LD A,1 - AND 1 - RRCA - OR (IY+1) - LD (IY+1),A - POP AF - CP 8 - JP Z,ILdelet - EX AF,AF' - BIT 0,(IY+1) - CALL NZ,ClearIL - LD A,(IY+4) ;InpytSymb - CP (IY+0) ;Max len - JR NZ,ILn - LD A,(IY+2) - ADD A,(IY+3) - CP (IY+0) - RET NC - BIT 7,(IY+1) - RET NZ -ILn: LD A,(IY+4) - SUB (IY+3) - SUB (IY+2) - JR Z,NoInsrt - DEC (IY+4) - BIT 7,(IY+1) - JR Z,NoInsrt - INC (IY+4) +ILwork: LD A,(HL) ; what+1 Get keys +ILwrk2: CP 8 + JR Z,ILw1 + CP " " + RET C +ILw1: PUSH IY + LD DE,InLnWex + PUSH DE + LD L,(IX+9) ;Address buffer + LD H,(IX+0Ah) + PUSH HL + POP IY + PUSH AF + RES 7,(IY+1) + LD A,1 + AND 1 + RRCA + OR (IY+1) + LD (IY+1),A + POP AF + CP 8 + JP Z,ILdelet + EX AF,AF' + BIT 0,(IY+1) + CALL NZ,ClearIL + LD A,(IY+4) ;InpytSymb + CP (IY+0) ;Max len + JR NZ,ILn + LD A,(IY+2) + ADD A,(IY+3) + CP (IY+0) + RET NC + BIT 7,(IY+1) + RET NZ +ILn: LD A,(IY+4) + SUB (IY+3) + SUB (IY+2) + JR Z,NoInsrt + DEC (IY+4) + BIT 7,(IY+1) + JR Z,NoInsrt + INC (IY+4) ; Ввод в середину текста - LD C,A - LD B,0 - LD L,(IX+9) - LD H,(IX+0Ah) - LD A,(IY+4) - ADD A,L - LD L,A - JR NC,$+3 - INC H - INC HL - INC HL - INC HL - INC HL - INC HL - LD D,H - LD E,L - DEC HL - LDDR -NoInsrt:LD L,(IX+9) - LD H,(IX+0Ah) - LD A,(IY+2) - ADD A,(IY+3) - ADD A,L - LD L,A - JR NC,$+3 - INC H - INC HL - INC HL - INC HL - INC HL - INC HL - EX AF,AF' - LD (HL),A - INC (IY+4) - INC (IY+2) - LD A,(IX+3) - SUB (IX+6) - CP (IY+2) - CALL Z,OutIL - CALL PrnInLn - POP DE -InLnWex:LD HL,what - LD (HL),evNothing - POP IY - RET + LD C,A + LD B,0 + LD L,(IX+9) + LD H,(IX+0Ah) + LD A,(IY+4) + ADD A,L + LD L,A + JR NC,$+3 + INC H + INC HL + INC HL + INC HL + INC HL + INC HL + LD D,H + LD E,L + DEC HL + LDDR +NoInsrt: LD L,(IX+9) + LD H,(IX+0Ah) + LD A,(IY+2) + ADD A,(IY+3) + ADD A,L + LD L,A + JR NC,$+3 + INC H + INC HL + INC HL + INC HL + INC HL + INC HL + EX AF,AF' + LD (HL),A + INC (IY+4) + INC (IY+2) + LD A,(IX+3) + SUB (IX+6) + CP (IY+2) + CALL Z,OutIL + CALL PrnInLn + POP DE +InLnWex: LD HL,what + LD (HL),evNothing + POP IY + RET ;Курсор за экраном -OutIL: LD A,(IY+3) - ADD A,8 ;Step - LD (IY+3),A - LD A,(IY+2) - SUB 8 ;Step - LD (IY+2),A - RET +OutIL: LD A,(IY+3) + ADD A,8 ;Step + LD (IY+3),A + LD A,(IY+2) + SUB 8 ;Step + LD (IY+2),A + RET ;Clear Buffer -ClearIL:SUB A - LD B,(IY+0) - LD L,(IX+9) - LD H,(IX+0Ah) - INC HL - INC HL - INC HL - INC HL - INC HL - LD (HL),A - DJNZ $-2 - LD (IY+4),A - RES 0,(IY+1) - RET +ClearIL: SUB A + LD B,(IY+0) + LD L,(IX+9) + LD H,(IX+0Ah) + INC HL + INC HL + INC HL + INC HL + INC HL + LD (HL),A + DJNZ $-2 + LD (IY+4),A + RES 0,(IY+1) + RET ; Combination keys -EIcombK:BIT 7,(IX+1) - JR NZ,EIcombn - PUSH IX - LD E,(IX+0) - LD D,0 - ADD IX,DE - BIT 7,(IX+0) - POP IX - RET Z - INC HL - LD A,(HL) ; what+2 Shift+Tab - CP 9 - RET NZ - JP SetInLn ; выделить пред. объект +EIcombK: BIT 7,(IX+1) + JR NZ,EIcombn + PUSH IX + LD E,(IX+0) + LD D,0 + ADD IX,DE + BIT 7,(IX+0) + POP IX + RET Z + INC HL + LD A,(HL) ; what+2 Shift+Tab + CP 9 + RET NZ + JP SetInLn ; выделить пред. объект ; -EIcombn:PUSH IY - ld c,(hl) ; what+1 - INC HL - LD A,(HL) ; what+2 - LD L,(IX+9) ; Address buffer - LD H,(IX+0Ah) - LD DE,InLnWex - PUSH DE - PUSH HL - POP IY - bit 7,c ; курсорные или shift+... ? - jr nz,eicmb1 ; Shift+... - CP 54h - JR Z,ILleft ; курсор влево - CP 56h - JR Z,ILright ; курсор вправо - CP 4Fh - JP Z,IL_del_ ; удалить символ в тек. позиции - CP 57h - JP Z,ILHome ; в начало строки - CP 51h - JP Z,ILEnd ; в конец строки - jr eicmb2 -eicmb1: cp " " - jr c,eicmb2 - cp "~"+1 - jp c,ILwrk2 ; на ввод символов -eicmb2: POP DE - POP IY - RET +EIcombn: PUSH IY + LD C,(HL) ; what+1 + INC HL + LD A,(HL) ; what+2 + LD L,(IX+9) ; Address buffer + LD H,(IX+0Ah) + LD DE,InLnWex + PUSH DE + PUSH HL + POP IY + BIT 7,C ; курсорные или shift+... ? + JR NZ,eicmb1 ; Shift+... + CP 54h + JR Z,ILleft ; курсор влево + CP 56h + JR Z,ILright ; курсор вправо + CP 4Fh + JP Z,IL_del_ ; удалить символ в тек. позиции + CP 57h + JP Z,ILHome ; в начало строки + CP 51h + JP Z,ILEnd ; в конец строки + JR eicmb2 +eicmb1: CP " " + JR C,eicmb2 + CP "~"+1 + JP C,ILwrk2 ; на ввод символов +eicmb2: POP DE + POP IY + RET ;Курсор влево на одно место -ILleft: LD A,(IY+2) - DEC A - JP P,ILlfnxt - LD A,(IY+3) - SUB 8 ;Step - RET C - LD (IY+3),A - LD A,(IY+2) - ADD A,8 ;Step -ILlfnxt:LD (IY+2),A - CALL PrnInLn - RES 0,(IY+1) - RET +ILleft: LD A,(IY+2) + DEC A + JP P,ILlfnxt + LD A,(IY+3) + SUB 8 ;Step + RET C + LD (IY+3),A + LD A,(IY+2) + ADD A,8 ;Step +ILlfnxt: LD (IY+2),A + CALL PrnInLn + RES 0,(IY+1) + RET ;Курсор вправо на одно место -ILright:LD A,(IY+2) - ADD A,(IY+3) - CP (IY+4) - RET Z - LD A,(IX+3) - SUB (IX+6) - LD B,A - LD A,(IY+2) - INC A - CP B - JR NZ,ILrgnxt - LD A,(IY+3) - ADD A,8 ;Step - LD (IY+3),A - LD A,(IY+2) - SUB 8 ;Step -ILrgnxt:LD (IY+2),A - CALL PrnInLn - RES 0,(IY+1) - RET +ILright: LD A,(IY+2) + ADD A,(IY+3) + CP (IY+4) + RET Z + LD A,(IX+3) + SUB (IX+6) + LD B,A + LD A,(IY+2) + INC A + CP B + JR NZ,ILrgnxt + LD A,(IY+3) + ADD A,8 ;Step + LD (IY+3),A + LD A,(IY+2) + SUB 8 ;Step +ILrgnxt: LD (IY+2),A + CALL PrnInLn + RES 0,(IY+1) + RET ;delete -ILdelet:LD A,(IY+2) - OR A - JR NZ,ILDelNx - LD A,(IY+3) - SUB 8 ;Step - RET C - LD (IY+3),A - LD A,(IY+2) - ADD A,8 ;Step - LD (IY+2),A -ILDelNx:LD L,(IX+9) - LD H,(IX+0Ah) - LD A,(IY+2) - ADD A,(IY+3) - ADD A,L - LD L,A - JR NC,$+3 - INC H - INC HL - INC HL - INC HL - INC HL - INC HL - LD D,H - LD E,L - DEC DE - LD A,(IY+4) - SUB (IY+3) - SUB (IY+2) - JR Z,ILDelN - LD C,A - LD B,0 - LDIR -ILDelN: SUB A - LD (DE),A - DEC (IY+2) - DEC (IY+4) - CALL PrnInLn - RES 0,(IY+1) - RET +ILdelet: LD A,(IY+2) + OR A + JR NZ,ILDelNx + LD A,(IY+3) + SUB 8 ;Step + RET C + LD (IY+3),A + LD A,(IY+2) + ADD A,8 ;Step + LD (IY+2),A +ILDelNx: LD L,(IX+9) + LD H,(IX+0Ah) + LD A,(IY+2) + ADD A,(IY+3) + ADD A,L + LD L,A + JR NC,$+3 + INC H + INC HL + INC HL + INC HL + INC HL + INC HL + LD D,H + LD E,L + DEC DE + LD A,(IY+4) + SUB (IY+3) + SUB (IY+2) + JR Z,ILDelN + LD C,A + LD B,0 + LDIR +ILDelN: SUB A + LD (DE),A + DEC (IY+2) + DEC (IY+4) + CALL PrnInLn + RES 0,(IY+1) + RET ;Delete Char in Current Position -IL_del_:LD L,(IX+9) - LD H,(IX+0Ah) - LD A,(IY+2) - INC A - ADD A,(IY+3) - ADD A,L - LD L,A - JR NC,$+3 - INC H - INC HL - INC HL - INC HL - INC HL - INC HL - LD D,H - LD E,L - DEC DE - LD A,(IY+4) - SUB (IY+3) - SUB (IY+2) - RET Z - LD C,A - LD B,0 - LDIR - SUB A - LD (DE),A - DEC (IY+4) - CALL PrnInLn - RES 0,(IY+1) - RET +IL_del_: LD L,(IX+9) + LD H,(IX+0Ah) + LD A,(IY+2) + INC A + ADD A,(IY+3) + ADD A,L + LD L,A + JR NC,$+3 + INC H + INC HL + INC HL + INC HL + INC HL + INC HL + LD D,H + LD E,L + DEC DE + LD A,(IY+4) + SUB (IY+3) + SUB (IY+2) + RET Z + LD C,A + LD B,0 + LDIR + SUB A + LD (DE),A + DEC (IY+4) + CALL PrnInLn + RES 0,(IY+1) + RET ;Home -ILHome: LD A,(IY+2) - OR A - RET Z - SUB A - LD (IY+2),A - LD (IY+3),A - CALL PrnInLn - RES 0,(IY+1) - RET +ILHome: LD A,(IY+2) + OR A + RET Z + SUB A + LD (IY+2),A + LD (IY+3),A + CALL PrnInLn + RES 0,(IY+1) + RET ;End string -ILEnd: LD A,(IY+4) - SUB (IY+3) - CP (IY+2) - RET Z - ADD A,(IY+3) - LD C,A - LD (IY+3),0 - LD A,(IX+3) - SUB (IX+6) - SUB C - JR Z,ILEndLp - JR NC,EndNIL - NEG -ILEndLp:LD C,A - LD A,(IY+3) - ADD A,8 ;Step - LD (IY+3),A - LD A,C - SUB 8 ;Step - JR NC,ILEndLp -EndNIL: LD A,(IY+4) - SUB (IY+3) - LD (IY+2),A - CALL PrnInLn - RES 0,(IY+1) - RET +ILEnd: LD A,(IY+4) + SUB (IY+3) + CP (IY+2) + RET Z + ADD A,(IY+3) + LD C,A + LD (IY+3),0 + LD A,(IX+3) + SUB (IX+6) + SUB C + JR Z,ILEndLp + JR NC,EndNIL + NEG +ILEndLp: LD C,A + LD A,(IY+3) + ADD A,8 ;Step + LD (IY+3),A + LD A,C + SUB 8 ;Step + JR NC,ILEndLp +EndNIL: LD A,(IY+4) + SUB (IY+3) + LD (IY+2),A + CALL PrnInLn + RES 0,(IY+1) + RET @@ -1217,225 +1216,250 @@ EndNIL: LD A,(IY+4) ;[]===========================================================[] ; Put Input Line in window -PrnInLn:LD A,(CurILFl) - PUSH AF - CALL ResILCr ; сбросить курсор - LD HL,0 - LD E,(IX+6) ;Xo pos inp.line - LD D,(IX+4) ;Y pos object - BIT 7,(IX+3) - JP NZ,prne - BIT 7,E - JR Z,$+7 - LD A,E - NEG - LD L,A - LD E,H - ;LD A,E - ;CP 80 - ;JR NC,prne - ;LD A,D - ;CP 31 - ;JR NC,prne - LD (prnadd+1),HL - LD C,BIOS.LP_SET_PLACE ; уст. позицию курсора - RST ToBIOS - LD L,(IX+9) ;Address buffer - LD H,(IX+0Ah) - LD A,(IY+3) - ADD A,L - LD L,A - JR NC,$+3 - INC H - INC HL - INC HL - INC HL - INC HL - INC HL - LD A,(IX+3) ;Xi-Xo(inp.ln.)=Len inp.ln. - SUB (IX+6) - LD E,A - LD C,A - LD B,A - LD A,(IX+6) - ADD A,C - CP 80+1 - JR C,$+8 - LD A,80 - SUB (IX+6) - LD B,A - BIT 7,(IX+6) - JR Z,$+11 - LD A,(IX+6) - NEG - SUB C - NEG - LD B,A - PUSH BC - SUB A - LD B,E - LD DE,CompBuff - PUSH DE - LD (DE),A - INC DE - DJNZ $-2 - LD A,(IY+0) - SUB (IY+3) - CP C - JR NC,$+3 - LD C,A - LD B,0 - LD A,(IY+4) - SUB C - JR NC,$+4 - ADD A,C - LD C,A - POP DE - PUSH DE - LD A,B - OR C - JR Z,$+4 - LDIR - POP HL - POP BC -prnadd: LD DE,0 - ADD HL,DE - LD A,B - OR A - JR Z,prne - LD C,86h ; вывод строки без атрибутов - RST ToBIOS -prne: LD A,(IY+2) - ADD A,(IX+6) - LD E,A - LD D,(IX+4) - LD (CursPos),DE - POP AF - OR A - CALL NZ,PILCurs ; уст. курсор - EI - PUSH IY - LD IY,DialData - LD A,(IX+6) - SUB (IY+0) - LD C,A - LD A,(IX+4) - SUB (IY+1) - LD B,A - POP IY - PUSH IX - LD IX,DialData - CALL GetPutA - POP IX - LD HL,CompBuff - LD A,(IX+3) ;Xi-Xo(inp.ln.)=Len inp.ln. - SUB (IX+6) - LD C,A - LD B,0 - IN A,(Page3) - PUSH AF - LD A,(Win2) - OUT (Page3),A - LDI - INC DE - JP PE,$-3 - POP AF - OUT (Page3),A - RET +PrnInLn: LD A,(CurILFl) + PUSH AF + CALL ResILCr ; сбросить курсор + LD HL,0 + LD E,(IX+6) ;Xo pos inp.line + LD D,(IX+4) ;Y pos object + BIT 7,(IX+3) + JP NZ,prne + BIT 7,E + JR Z,$+7 + LD A,E + NEG + LD L,A + LD E,H + LD (prnadd+1),HL + ;LD C,BIOS.LP_SET_PLACE ; уст. позицию курсора + ;RST ToBIOS + LD C,Dss.Locate + RST ToDSS + LD L,(IX+9) ;Address buffer + LD H,(IX+0Ah) + LD A,(IY+3) + ADD A,L + LD L,A + JR NC,$+3 + INC H + INC HL + INC HL + INC HL + INC HL + INC HL + LD A,(IX+3) ;Xi-Xo(inp.ln.)=Len inp.ln. + SUB (IX+6) + LD E,A + LD C,A + LD B,A + LD A,(IX+6) + ADD A,C + CP 80+1 + JR C,$+8 + LD A,80 + SUB (IX+6) + LD B,A + BIT 7,(IX+6) + JR Z,$+11 + LD A,(IX+6) + NEG + SUB C + NEG + LD B,A + PUSH BC + SUB A + LD B,E + LD DE,CompBuff + PUSH DE + LD (DE),A + INC DE + DJNZ $-2 + LD A,(IY+0) + SUB (IY+3) + CP C + JR NC,$+3 + LD C,A + LD B,0 + LD A,(IY+4) + SUB C + JR NC,$+4 + ADD A,C + LD C,A + POP DE + PUSH DE + LD A,B + OR C + JR Z,$+4 + LDIR + POP HL + POP BC +prnadd: LD DE,0 + ADD HL,DE + LD A,B + OR A + JR Z,prne + LD C,86h ; вывод строки без атрибутов + RST ToBIOS +prne: LD A,(IY+2) + ADD A,(IX+6) + LD E,A + LD D,(IX+4) + LD (CursPos),DE + POP AF + OR A + CALL NZ,PILCurs ; уст. курсор + EI + PUSH IY + LD IY,DialData + LD A,(IX+6) + SUB (IY+0) + LD C,A + LD A,(IX+4) + SUB (IY+1) + LD B,A + POP IY + PUSH IX + LD IX,DialData + CALL GetPutA + POP IX + LD HL,CompBuff + LD A,(IX+3) ;Xi-Xo(inp.ln.)=Len inp.ln. + SUB (IX+6) + LD C,A + LD B,0 + IN A,(Page3) + PUSH AF + LD A,(Win2) + OUT (Page3),A + LDI + INC DE + JP PE,$-3 + POP AF + OUT (Page3),A + RET - -;Курсор объекта InputLine -PrnILCr:LD A,(Timer) ;пауза мигания - DEC A - CALL Z,PutILCr - LD (Timer),A - RET - -PutILCr:LD A,(Flag) - CPL - LD (Flag),A -PILCurs:LD DE,(CursPos) ; уст. курсор - LD (CrPs+1),DE - BIT 7,E - JR NZ,cre - ;LD A,E - ;CP 80 - ;JR NC,cre - ;LD A,D - ;CP 31 - ;JR NC,cre - LD C,0B4h ; получить символ - SUB A - RST ToBIOS - LD A,(Flag) - OR A - LD B,1Bh - JR Z,NoILC - LD B,5Bh ; курсор черточкой -NoILC: LD C,0B5h ; символ на экран - SUB A - RST ToBIOS -cre: LD A,1 - LD (CurILFl),A - LD A,12 - RET +;;;;;;;;;;;;;;;; +PILCurs: LD DE,(CursPos) ; уст. курсор + LD (ResILCr.CrPs),DE + BIT 7,E + JR NZ,.cre + ; + LD C,Dss.Locate + RST ToDSS + ; + LD BC,Dss.K_SETUP.ShowCursor + RST ToDSS + ; +.cre: LD A,1 + LD (CurILFl),A + LD A,12 ;!FIXIT надо ли? + RET +;;;;;;;;;;;;;;;; ; Сбросить курсор -ResILCr:LD A,(CurILFl) - OR A - RET Z - LD A,0FFh - LD (Flag),A - INC A - LD (CurILFl),A - LD A,12 - LD (Timer),A -CrPs: LD DE,0 - BIT 7,E - RET NZ - ;LD A,E - ;CP 80 - ;RET NC - ;LD A,D - ;CP 31 - ;RET NC - LD C,0B4h ; получить символ - SUB A - RST ToBIOS - LD BC,1BB5h ; символ на экран - SUB A - RST ToBIOS - RET +ResILCr: LD A,(CurILFl) + OR A + RET Z + ; +.CrPs+1: LD DE,0 + BIT 7,E + RET NZ + ; + LD BC,Dss.K_SETUP.HideCursor + RST ToDSS + XOR A + LD (CurILFl),A + RET + + +;;;;;;;;;;;;;;;; +;!FIXIT CURSOR переделать курсор на дос и убрать перехвать прерываний +;Курсор объекта InputLine +; PrnILCr: LD A,(Timer) ;пауза мигания +; DEC A +; CALL Z,.PutILCr +; LD (Timer),A +; RET +; ; + +; .PutILCr: LD A,(Flag) +; CPL +; LD (Flag),A +; PILCurs: LD DE,(CursPos) ; уст. курсор +; LD (ResILCr.CrPs),DE +; BIT 7,E +; JR NZ,.cre +; ; +; LD C,0B4h ; получить символ +; SUB A +; RST ToBIOS +; LD A,(Flag) +; OR A +; LD B,1Bh +; JR Z,.NoILC +; LD B,5Bh ; курсор черточкой +; .NoILC: LD C,0B5h ; символ на экран +; SUB A +; RST ToBIOS +; .cre: LD A,1 +; LD (CurILFl),A +; LD A,12 +; RET +;;;;;;;;;;;;;;;; + + +; Сбросить курсор +; ResILCr: LD A,(CurILFl) +; OR A +; RET Z +; LD A,#FF +; LD (Flag),A +; INC A +; LD (CurILFl),A +; LD A,12 +; LD (Timer),A +; .CrPs+1: LD DE,0 +; BIT 7,E +; RET NZ +; ; +; LD C,#B4 ; получить символ +; SUB A +; RST ToBIOS +; LD BC,1BB5h ; символ на экран +; SUB A +; RST ToBIOS +; RET +;;;;;;; ; InpLineI: - LD E,(IX+2) ;Xo - LD D,(IX+4) ;Y - LD A,(IX+5) ;Xi text - SUB E - LD C,A ;Len text - CALL SetDialInv - LD DE,(CursPos) - CALL PILCurs ; уст. курсор - EI - RET + LD E,(IX+2) ;Xo + LD D,(IX+4) ;Y + LD A,(IX+5) ;Xi text + SUB E + LD C,A ;Len text + CALL SetDialInv + LD DE,(CursPos) + CALL PILCurs ; уст. курсор + EI + RET -ClastI: LD E,(IX+2) ;Xo - INC E - LD D,(IX+4) ;Y - LD A,(IX+6) ;Xi name - SUB E - LD C,A - CALL SetDialInv - LD E,(IX+2) ;Xo - INC E - LD D,(IX+7) ;Y elem - LD A,(IX+3) - SUB E - DEC A - LD C,A ;Len X - jp SetClasInv +ClastI: LD E,(IX+2) ;Xo + INC E + LD D,(IX+4) ;Y + LD A,(IX+6) ;Xi name + SUB E + LD C,A + CALL SetDialInv + LD E,(IX+2) ;Xo + INC E + LD D,(IX+7) ;Y elem + LD A,(IX+3) + SUB E + DEC A + LD C,A ;Len X + JP SetClasInv @@ -1445,84 +1469,84 @@ ClastI: LD E,(IX+2) ;Xo ; D - Y pos ; C - X len SetClasInv: - PUSH IX - LD IX,DialData - IN A,(Page3) - PUSH AF ;сохр.page4 - LD A,(Win2) - OUT (Page3),A ;вкл.буфер - PUSH HL - LD L,C ;Len X - LD H,1 ;len Y - LD (RClIlen+1),HL ;Save len - LD (RClIpos+1),DE ;Save pos - LD A,E - SUB (IX+0) - LD C,A - LD A,D - SUB (IX+1) - LD B,A - CALL GetPutA - EX DE,HL - LD (RClIbuf+2),HL - LD B,E - ld e,ColDialInv + PUSH IX + LD IX,DialData + IN A,(Page3) + PUSH AF ;сохр.page4 + LD A,(Win2) + OUT (Page3),A ;вкл.буфер + PUSH HL + LD L,C ;Len X + LD H,1 ;len Y + LD (RClIlen+1),HL ;Save len + LD (RClIpos+1),DE ;Save pos + LD A,E + SUB (IX+0) + LD C,A + LD A,D + SUB (IX+1) + LD B,A + CALL GetPutA + EX DE,HL + LD (RClIbuf+2),HL + LD B,E + LD E,ColDialInv ;LD E,A - ld d,ColDhotkey + LD D,ColDhotkey ;LD D,A -SetDin2:INC HL - LD A,(HL) - AND 0Fh - CP D - JR Z,.loc2 ;$+5 - LD A,(HL) +SetDin2: INC HL + LD A,(HL) + AND 0Fh + CP D + JR Z,.loc2 ;$+5 + LD A,(HL) ;XOR E - and 0xF0 ; - or e ; - LD (HL),A -.loc2: INC HL - DJNZ SetDin2 - LD IX,(RClIbuf+2) ;Put Name with invert - LD HL,(RClIlen+1) - LD DE,(RClIpos+1) - CALL PutDialLn - POP HL - POP AF - OUT (Page3),A - POP IX - LD E,(IX+2) ;Xo pos element - INC E - INC E - INC E - LD D,(HL) ;Y pos element - LD (CursPos),DE - PUSH HL - CALL PILCurs ; Set cursor - POP HL - LD A,1 - LD (CIflag+1),A - RET + AND 0xF0 ; + OR E ; + LD (HL),A +.loc2: INC HL + DJNZ SetDin2 + LD IX,(RClIbuf+2) ;Put Name with invert + LD HL,(RClIlen+1) + LD DE,(RClIpos+1) + CALL PutDialLn + POP HL + POP AF + OUT (Page3),A + POP IX + LD E,(IX+2) ;Xo pos element + INC E + INC E + INC E + LD D,(HL) ;Y pos element + LD (CursPos),DE + PUSH HL + CALL PILCurs ; Set cursor + POP HL + LD A,1 + LD (CIflag+1),A + RET ; Get claster data -GetClDt:PUSH IX - POP HL - LD BC,7 - ADD HL,BC ;Begin claster elements -GetDtLp:INC HL ;Ypos - INC HL ;Hot key - INC HL ;Context - LD A,(HL) ;(Ceil) - INC HL - LD E,(HL) ;Address Ceil - INC HL ; - LD D,(HL) ; - INC HL - LD (DE),A - BIT 7,(HL) ;7bit-end claster - JR Z,GetDtLp - RET +GetClDt: PUSH IX + POP HL + LD BC,7 + ADD HL,BC ;Begin claster elements +GetDtLp: INC HL ;Ypos + INC HL ;Hot key + INC HL ;Context + LD A,(HL) ;(Ceil) + INC HL + LD E,(HL) ;Address Ceil + INC HL ; + LD D,(HL) ; + INC HL + LD (DE),A + BIT 7,(HL) ;7bit-end claster + JR Z,GetDtLp + RET @@ -1533,414 +1557,414 @@ GetDtLp:INC HL ;Ypos ; Event claster radio/check buttons ; EClasterB: - LD HL,what - LD A,(HL) - INC HL - CP evMouseFr - JR Z,ECmouse ;Mouse fire - CP evKeyboard - JR Z,ECkeys ;Key press - CP evCombKey - JP Z,ECcombK ;Key press - RET + LD HL,what + LD A,(HL) + INC HL + CP evMouseFr + JR Z,ECmouse ;Mouse fire + CP evKeyboard + JR Z,ECkeys ;Key press + CP evCombKey + JP Z,ECcombK ;Key press + RET ; Event - Mouse fire ; проверка координат мышки -ECmouse:LD E,(HL) ;Xpos - INC HL - LD D,(HL) ;Ypos - LD A,E - BIT 7,(IX+2) - JR NZ,$+6 - CP (IX+2) ;Xo pos - RET C ;< - BIT 7,(IX+3) - RET NZ - CP (IX+3) ;Xi pos - RET NC ;> - LD A,D - CP (IX+4) ;Yo pos - RET C ;< - CP (IX+5) ;Yi pos - RET NC ;> - SUB A - LD (ECnext+1),A - DEC A - LD (SaveA1+1),A ;Begin element claster - PUSH IX - POP HL - INC HL - LD BC,6 ;len element claster - LD E,B ;number element - LD A,D -EClsLp1:ADD HL,BC - BIT 7,(HL) - JP NZ,SelClas ;Elem not found - INC E - CP (HL) ;Compare with Y pos elem - JR NZ,EClsLp1 - JR CSelNxt +ECmouse: LD E,(HL) ;Xpos + INC HL + LD D,(HL) ;Ypos + LD A,E + BIT 7,(IX+2) + JR NZ,$+6 + CP (IX+2) ;Xo pos + RET C ;< + BIT 7,(IX+3) + RET NZ + CP (IX+3) ;Xi pos + RET NC ;> + LD A,D + CP (IX+4) ;Yo pos + RET C ;< + CP (IX+5) ;Yi pos + RET NC ;> + SUB A + LD (ECnext+1),A + DEC A + LD (SaveA1+1),A ;Begin element claster + PUSH IX + POP HL + INC HL + LD BC,6 ;len element claster + LD E,B ;number element + LD A,D +EClsLp1: ADD HL,BC + BIT 7,(HL) + JP NZ,SelClas ;Elem not found + INC E + CP (HL) ;Compare with Y pos elem + JR NZ,EClsLp1 + JR CSelNxt ;Event - Key press -ECkeys: SUB A - LD (ECnext+1),A - DEC A - LD (SaveA1+1),A ;Begin element claster - LD A,(HL) +ECkeys: SUB A + LD (ECnext+1),A + DEC A + LD (SaveA1+1),A ;Begin element claster + LD A,(HL) ; CP 0Dh ; JR Z,ECspace ; test on "Enter" - CP " " - JR Z,ECspace ; test on "Space" - RES 5,A - BIT 7,(IX+1) - JR NZ,ECkeyN ; I is select - CP 9 ; Tab - JP Z,SelCls0 ; выделить след. объект - CP 0Dh ; ### - JP Z,SelCls0 ; выделить след. объект -ECkeyN: PUSH IX - POP HL - INC HL - LD BC,6 ;Len elements - LD E,B -ECkeyLp:ADD HL,BC - BIT 7,(HL) - RET NZ - INC E - INC HL - CP (HL) ;Hot key element - DEC HL - JR NZ,ECkeyLp -CSelNxt:BIT 7,(IX+1) ;NZ-object is select - JP NZ,CSelect - JP SelCls1 + CP " " + JR Z,ECspace ; test on "Space" + RES 5,A + BIT 7,(IX+1) + JR NZ,ECkeyN ; I is select + CP 9 ; Tab + JP Z,SelCls0 ; выделить след. объект + CP 0Dh ; ### + JP Z,SelCls0 ; выделить след. объект +ECkeyN: PUSH IX + POP HL + INC HL + LD BC,6 ;Len elements + LD E,B +ECkeyLp: ADD HL,BC + BIT 7,(HL) + RET NZ + INC E + INC HL + CP (HL) ;Hot key element + DEC HL + JR NZ,ECkeyLp +CSelNxt: BIT 7,(IX+1) ;NZ-object is select + JP NZ,CSelect + JP SelCls1 ;Test on space -ECspace:BIT 7,(IX+1) - RET Z ;not select - LD A,(SavElem+1) - OR A - JR NZ,ECspc1 - INC A - LD (SavElem+1),A -ECspc1: LD (ECnext+1),A - PUSH IX - POP HL - INC HL - LD DE,6 - LD B,A - ADD HL,DE ;find elem.label - DJNZ $-1 - JP ECnext ;change +ECspace: BIT 7,(IX+1) + RET Z ;not select + LD A,(SavElem+1) + OR A + JR NZ,ECspc1 + INC A + LD (SavElem+1),A +ECspc1: LD (ECnext+1),A + PUSH IX + POP HL + INC HL + LD DE,6 + LD B,A + ADD HL,DE ;find elem.label + DJNZ $-1 + JP ECnext ;change ;Test on cursor keys -ECcombK:BIT 7,(IX+1) - JR NZ,ECcombn ;is select - PUSH IX - LD E,(IX+0) - LD D,0 - ADD IX,DE - BIT 7,(IX+0) - POP IX - RET Z - INC HL - LD A,(HL) ; Shift+Tab - CP 9 - RET NZ - JP SelCls0 ; выделить пред. объект +ECcombK: BIT 7,(IX+1) + JR NZ,ECcombn ;is select + PUSH IX + LD E,(IX+0) + LD D,0 + ADD IX,DE + BIT 7,(IX+0) + POP IX + RET Z + INC HL + LD A,(HL) ; Shift+Tab + CP 9 + RET NZ + JP SelCls0 ; выделить пред. объект ; -ECcombn:SUB A - LD (ECnext+1),A ;Flag change buttons - INC HL - LD A,(HL) - CP 58h ; курсор вверх - JR Z,ECup - CP 54h ; курсор влево - JR Z,ECup - CP 52h ; курсор вниз - JR Z,ECdown - CP 56h ; курсор вправо - RET NZ +ECcombn: SUB A + LD (ECnext+1),A ;Flag change buttons + INC HL + LD A,(HL) + CP 58h ; курсор вверх + JR Z,ECup + CP 54h ; курсор влево + JR Z,ECup + CP 52h ; курсор вниз + JR Z,ECdown + CP 56h ; курсор вправо + RET NZ ; курсор вниз -ECdown: PUSH IX - POP HL - INC HL - LD E,L - LD D,H - LD BC,6 - LD A,(SavElem+1) - OR A - JR NZ,$+3 - INC A - INC A ;increment element - LD (SavElem+1),A -ECcmlp: ADD HL,BC ;find label - BIT 7,(HL) - CALL NZ,EndClst ;table is over - DEC A - JR NZ,ECcmlp - CALL ResClasInv ;Res inver elem - JP Pcurs ;next invert +ECdown: PUSH IX + POP HL + INC HL + LD E,L + LD D,H + LD BC,6 + LD A,(SavElem+1) + OR A + JR NZ,$+3 + INC A + INC A ;increment element + LD (SavElem+1),A +ECcmlp: ADD HL,BC ;find label + BIT 7,(HL) + CALL NZ,EndClst ;table is over + DEC A + JR NZ,ECcmlp + CALL ResClasInv ;Res inver elem + JP Pcurs ;next invert ;Get begin table elem -EndClst:EX DE,HL - ADD HL,BC ;table is begin - LD A,1 - LD (SavElem+1),A ;first elem. - RET +EndClst: EX DE,HL + ADD HL,BC ;table is begin + LD A,1 + LD (SavElem+1),A ;first elem. + RET ;Cursor up -ECup: PUSH IX - POP HL - INC HL - LD DE,6 - LD A,(SavElem+1) - OR A - JR NZ,$+3 - INC A - DEC A ;decrement cur.elem. - CALL Z,BegClst - LD (SavElem+1),A - LD B,A - ADD HL,DE ;find label - DJNZ $-1 - CALL ResClasInv ;Res inver elem - JR Pcurs ;next invert +ECup: PUSH IX + POP HL + INC HL + LD DE,6 + LD A,(SavElem+1) + OR A + JR NZ,$+3 + INC A + DEC A ;decrement cur.elem. + CALL Z,BegClst + LD (SavElem+1),A + LD B,A + ADD HL,DE ;find label + DJNZ $-1 + CALL ResClasInv ;Res inver elem + JR Pcurs ;next invert ;Get end table elem -BegClst:PUSH HL - SUB A - DEC A - INC A - ADD HL,DE ;find nember end element - BIT 7,(HL) - JR Z,$-4 - POP HL - RET ;A=end element +BegClst: PUSH HL + SUB A + DEC A + INC A + ADD HL,DE ;find nember end element + BIT 7,(HL) + JR Z,$-4 + POP HL + RET ;A=end element ;selected claster -SelClas:BIT 7,(IX+1) - JR NZ,SaveA1 ;NZ-is select -SelCls0:LD E,0 -SelCls1:LD A,E - LD (SaveA1+1),A - CALL MoveObj - CALL ResDialInv ;Res orevios invert - LD IX,DialTab+5 - LD E,(IX+2) ;Xo name - INC E - LD D,(IX+4) ;Y name - LD A,(IX+6) ;Xi name - SUB E - LD C,A ;len name - CALL SetDialInv ;Set my invert -SaveA1: LD A,0 - INC A - JR Z,EClexit ;Element not found - DEC A - LD (SavElem+1),A - LD (ECnext+1),A - JR CButton ;Change buttons +SelClas: BIT 7,(IX+1) + JR NZ,SaveA1 ;NZ-is select +SelCls0: LD E,0 +SelCls1: LD A,E + LD (SaveA1+1),A + CALL MoveObj + CALL ResDialInv ;Res orevios invert + LD IX,DialTab+5 + LD E,(IX+2) ;Xo name + INC E + LD D,(IX+4) ;Y name + LD A,(IX+6) ;Xi name + SUB E + LD C,A ;len name + CALL SetDialInv ;Set my invert +SaveA1: LD A,0 + INC A + JR Z,EClexit ;Element not found + DEC A + LD (SavElem+1),A + LD (ECnext+1),A + JR CButton ;Change buttons ;Event - Mouse fire (in select claster) -CSelect:LD A,1 - LD (ECnext+1),A - LD A,(SavElem+1) - CP E - JR Z,ECnext - LD A,E - LD (SavElem+1),A - CALL ResClasInv ;Res inver elem -CButton:PUSH IX - POP HL - INC HL - LD DE,6 -SavElem:LD A,0 - OR A - JR NZ,$+3 - INC A - LD B,A - ADD HL,DE - DJNZ $-1 -Pcurs: LD E,(IX+2) ;Xo pos element - INC E - LD D,(HL) ;Y pos element - LD A,(IX+3) - SUB E - DEC A - LD C,A ;len element - CALL SetClasInv ;Set inver elem -ECnext: LD A,0 - OR A - CALL NZ,ChangeB -EClexit:LD HL,what ;Event claster exit - LD (HL),evNothing - jp GetFire +CSelect: LD A,1 + LD (ECnext+1),A + LD A,(SavElem+1) + CP E + JR Z,ECnext + LD A,E + LD (SavElem+1),A + CALL ResClasInv ;Res inver elem +CButton: PUSH IX + POP HL + INC HL + LD DE,6 +SavElem: LD A,0 + OR A + JR NZ,$+3 + INC A + LD B,A + ADD HL,DE + DJNZ $-1 +Pcurs: LD E,(IX+2) ;Xo pos element + INC E + LD D,(HL) ;Y pos element + LD A,(IX+3) + SUB E + DEC A + LD C,A ;len element + CALL SetClasInv ;Set inver elem +ECnext: LD A,0 + OR A + CALL NZ,ChangeB +EClexit: LD HL,what ;Event claster exit + LD (HL),evNothing + JP GetFire ;[]===========================================================[] ; Change buttons (Check/Radio) ; Input parameters: HL-Address claster element label -ChangeB:LD A,(IX+1) - RES 7,A - CP ClRadioBut - JP Z,ChangeR +ChangeB: LD A,(IX+1) + RES 7,A + CP ClRadioBut + JP Z,ChangeR ; Change check button - LD E,L - LD D,H - PUSH IX - POP HL - LD BC,7 - ADD HL,BC - PUSH HL ;Save cur.elem -ChangL1:INC HL ;Begin elements claster - INC HL - INC HL - LD (HL),B ;(Ceil)=0 - INC HL - INC HL - INC HL - BIT 7,(HL) - JR Z,ChangL1 - EX DE,HL ;HL=Current element claster - INC B - INC HL - INC HL - INC HL - LD (HL),B ;Cur.elem=1 - INC HL - INC HL - INC HL - POP HL ;Reset begin elem table - IN A,(Page3) - PUSH AF - LD A,(Win2) - OUT (Page3),A -ChangL2:LD D,(HL) ;Ypos - INC HL - INC HL - INC HL - LD A,(HL) ;Address ceil - INC HL - INC HL - INC HL - LD E,(IX+2) ;X pos - INC E - INC E - INC E - PUSH IX - PUSH DE - LD IX,DialData - EX AF,AF' - LD A,E - SUB (IX+0) - LD C,A - LD A,D - SUB (IX+1) - LD B,A - CALL GetPutA - EX AF,AF' - LD C,A - OR A - LD A," " - JR Z,$+4 - LD A,"" - LD (DE),A - POP DE - POP IX - ;LD A,D - ;CP 31 - ;JR NC,cl1 - BIT 7,E - JR NZ,cl1 - ;LD A,E - ;CP 80 - ;JR NC,cl1 - PUSH HL - LD A,C - PUSH AF - LD C,BIOS.LP_SET_PLACE ; уст. позицию курсора - RST ToBIOS - POP AF - OR A - LD A," " - JR Z,$+4 - LD A,"" - LD BC,0182h - RST ToBIOS ;Print on/off - POP HL -cl1: BIT 7,(HL) - JR Z,ChangL2 - CALL ResILCr ; сбросить курсор - CALL PILCurs ; Set cursor - EI - POP AF - OUT (Page3),A - RET + LD E,L + LD D,H + PUSH IX + POP HL + LD BC,7 + ADD HL,BC + PUSH HL ;Save cur.elem +ChangL1: INC HL ;Begin elements claster + INC HL + INC HL + LD (HL),B ;(Ceil)=0 + INC HL + INC HL + INC HL + BIT 7,(HL) + JR Z,ChangL1 + EX DE,HL ;HL=Current element claster + INC B + INC HL + INC HL + INC HL + LD (HL),B ;Cur.elem=1 + INC HL + INC HL + INC HL + POP HL ;Reset begin elem table + IN A,(Page3) + PUSH AF + LD A,(Win2) + OUT (Page3),A +ChangL2: LD D,(HL) ;Ypos + INC HL + INC HL + INC HL + LD A,(HL) ;Address ceil + INC HL + INC HL + INC HL + LD E,(IX+2) ;X pos + INC E + INC E + INC E + PUSH IX + PUSH DE + LD IX,DialData + EX AF,AF' + LD A,E + SUB (IX+0) + LD C,A + LD A,D + SUB (IX+1) + LD B,A + CALL GetPutA + EX AF,AF' + LD C,A + OR A + LD A," " + JR Z,$+4 + LD A,"" + LD (DE),A + POP DE + POP IX + ;LD A,D + ;CP 31 + ;JR NC,cl1 + BIT 7,E + JR NZ,cl1 + ;LD A,E + ;CP 80 + ;JR NC,cl1 + PUSH HL + LD A,C + PUSH AF + LD C,BIOS.LP_SET_PLACE ; уст. позицию курсора + RST ToBIOS + POP AF + OR A + LD A," " + JR Z,$+4 + LD A,"" + LD BC,0182h + RST ToBIOS ;Print on/off + POP HL +cl1: BIT 7,(HL) + JR Z,ChangL2 + CALL ResILCr ; сбросить курсор + CALL PILCurs ; Set cursor + EI + POP AF + OUT (Page3),A + RET ;Change radio button ([x]) -ChangeR:IN A,(Page3) - PUSH AF - LD A,(Win2) - OUT (Page3),A - LD D,(HL) ;Ypos - INC HL - INC HL - INC HL - LD A,(HL) ;Address ceil - XOR 1 - LD (HL),A - INC HL - INC HL - INC HL - LD E,(IX+2) ;Xpos - INC E - INC E - INC E - PUSH IX - PUSH DE - LD IX,DialData - EX AF,AF' - LD A,E - SUB (IX+0) - LD C,A - LD A,D - SUB (IX+1) - LD B,A - CALL GetPutA - EX AF,AF' - LD C,A - OR A - LD A," " - JR Z,$+4 - LD A,"x" - LD (DE),A - POP DE - POP IX - ;LD A,D - ;CP 31 - ;JR NC,cl2 - BIT 7,E - JR NZ,cl2 - ;LD A,E - ;CP 80 - ;JR NC,cl2 - LD A,C - PUSH AF - LD C,BIOS.LP_SET_PLACE ; уст. позицию курсора - RST ToBIOS - POP AF - OR A - LD A," " - JR Z,$+4 - LD A,"x" - LD BC,0182h - RST ToBIOS ;Print -cl2: CALL ResILCr ; сбросить курсор - CALL PILCurs ; уст. курсор - EI - POP AF - OUT (Page3),A - RET +ChangeR: IN A,(Page3) + PUSH AF + LD A,(Win2) + OUT (Page3),A + LD D,(HL) ;Ypos + INC HL + INC HL + INC HL + LD A,(HL) ;Address ceil + XOR 1 + LD (HL),A + INC HL + INC HL + INC HL + LD E,(IX+2) ;Xpos + INC E + INC E + INC E + PUSH IX + PUSH DE + LD IX,DialData + EX AF,AF' + LD A,E + SUB (IX+0) + LD C,A + LD A,D + SUB (IX+1) + LD B,A + CALL GetPutA + EX AF,AF' + LD C,A + OR A + LD A," " + JR Z,$+4 + LD A,"x" + LD (DE),A + POP DE + POP IX + ;LD A,D + ;CP 31 + ;JR NC,cl2 + BIT 7,E + JR NZ,cl2 + ;LD A,E + ;CP 80 + ;JR NC,cl2 + LD A,C + PUSH AF + LD C,BIOS.LP_SET_PLACE ; уст. позицию курсора + RST ToBIOS + POP AF + OR A + LD A," " + JR Z,$+4 + LD A,"x" + LD BC,0182h + RST ToBIOS ;Print +cl2: CALL ResILCr ; сбросить курсор + CALL PILCurs ; уст. курсор + EI + POP AF + OUT (Page3),A + RET diff --git a/Shared_Includes b/Shared_Includes index 2b1e30c..a6c50f5 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 2b1e30c6108f0a5c271f84558e1e5f804a6d623a +Subproject commit a6c50f572424e88f6199d639fa8109d53b71142c diff --git a/Version.inc b/Version.inc index d7fd1d3..f921d35 100644 --- a/Version.inc +++ b/Version.inc @@ -3,4 +3,4 @@ ; версия программы major_version equ 1 -minor_version equ 14 \ No newline at end of file +minor_version equ 15 \ No newline at end of file