; Метки "@@@" - закоммент. код, чтобы не отрабатывал клик мышки на текущей ; позиции списка для выхода из ListBox-а ; ; Метки "###" - отработка "Enter" как Tab ; ; Отрисовка объекта ; Object ~List Box~ ; Input: HL-label ; Format mouse table (IY=DialTab+5): ; +0 - Object ~List Box" ; +1 - Xo position object ; +2 - Xi position object ; +3 - Yo position object ; +4 - Yi position object ; +5 - Xi position name ; +6 - Текущий элемент ; +7 - Кол-во элементов в ListBox ; +8,9 - Address list ; +0A - Y pos line up ; +0B - Y pos line down ; +0C - Previos Y pos bar ; +0D - Hot key ; +0E - Context ; PListBox: LD (IY+1),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 window LD (IY+2),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 window LD (IY+4),A ;+3 Yo ;; CALL GetPutA LD A,(HL) ;len X INC HL ADD A,2 LD (IX+6),A LD B,A ADD A,3 ADD A,(IY+2) LD (IY+3),A ;Xi pos LD A,(HL) ;len Y INC HL ADD A,2 ;Yi pos ADD A,(IY+4) LD (IY+5),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 DEC B ld a,(ColDialWn) ; цвет заголовока ListBox-а LD C,A LD A,(HL) LstBox0:INC HL ; цикл переноса заголовка ListBox-а CP '~' JR NZ,LstBox1 ld c,ColDhotkey LD A,(HL) INC HL INC HL LD (DE),A INC DE RES 5,A LD (IY+0Fh),A ; hot-буква LD A,(DE) AND 0F0h OR C LD (DE),A INC DE ld a,(ColDialWn) LD C,A DEC B LD A,(HL) INC HL LstBox1:LD (DE),A INC DE INC DE DEC B LD A,(HL) OR A JR NZ,LstBox0 INC HL LD A," " ; хвост. пробел титла окна LD (DE),A INC DE INC DE DEC B LD A,(IX+6) SUB B ADD A,(IY+2) LD (IY+6),A ;Xi pos name LD A,B OR A JR Z,LstBox2 lstbx2: LD A,"─" LD (DE),A INC DE ld a,ColLstBxFr ld (de),a INC DE DJNZ lstbx2 LstBox2:LD A,"┐" LD (DE),A inc de ld a,ColLstBxFr ld (de),a INC (IX+5) LD A,(HL) ; ячейка контекста тек. ListBox-а LD (IY+10h),A INC HL ; уст. указатель ld de,(CurElem1) ; полож. указателя 2-го ListBox`а ld b,14 or a ; контекст тек. ListBox-a ? jr nz,.loc1 ; 2-й ListBox ld b,1 ld de,0 ; для одного "A:" ld a,(SetDriveB2) ; дисковода "B:" нет ? or a jr nz,.loc1 ; "B:" нет inc b ld de,(CurElem0) ; полож. указателя 1-го ListBox`а .loc1: ld (iy+7),e ; тек.элем. ld (iy+8),d ; первый элем. на странице ld a,b ld (elnum+1),a ld a,d ld b,d ld (EndBox2+1),a xor a ld (iy+9),a ; кол-во элементов ld e,(hl) inc hl ld d,(hl) inc hl ld (iy+0Ah),e ; адрес списка ld (iy+0Bh),d ; .loc2: ld a,b or a jr z,.loc4 .loc3: ld a,(de) inc de cp 0Dh ; конец строки jr nz,.loc3 dec b jr .loc2 ; .loc4: ld (iy+11h),e ; адрес списка ld (iy+12h),d push hl ex de,hl ld a,(hl) or a jp z,EndBox ; Next element list LstBox3:LD C,(IX+4) ;pos element LD B,(IX+5) CALL GetPutA LD A,(IX+6) SUB 2 LD B,A ; длина вывод. строк списка EX DE,HL LD (HL),"│" INC HL ld (hl),ColLstBxFr INC HL ld c,ColListBox ; цвет элементов ListBox ld a,(ix+5) sub (ix+1) inc a cp (iy+7) jr nz,lstbx4 ld c,ColLstBxHI ; цвет указателя не актив. ListBox-а lstbx4: LD (HL)," " ; ведущ. пробел в списке элементов INC HL LD (HL),C ; атрибут INC HL LstBox4:LD A,(DE) ; цикл переноса строки списка ListBox-а INC DE CP 0Dh ; конец строки JR Z,NxtLst LD (HL),A INC HL LD (HL),C INC HL DJNZ LstBox4 ; цикл переноса строки списка lstbx41:LD A,(DE) INC DE CP 0Dh ; конец строки JR NZ,lstbx41 NxtLst: LD A,B OR A JR Z,LstBox5 LD A," " ; заполн. с конца строки элемента lstbx42:LD (HL),A INC HL LD (HL),C ; атрибут INC HL DJNZ lstbx42 LstBox5:LD (HL)," " ; хвост. пробел в списке INC HL LD (HL),C ; атрибут INC HL call ScrollB ; нарисовать атрибуты скролл-бара INC (IY+9) LD A,(IY+5) SUB (IX+1) DEC A CP (IX+5) JR Z,EndBox1 LD A,(HL) OR A JP NZ,LstBox3 ; на цикл вывода списка ;-- EndBox: LD A,(IY+5) SUB (IX+1) SUB (IX+5) DEC A JR Z,EndBox1 LD B,A LstBox6:PUSH BC LD C,(IX+4) ;pos element LD B,(IX+5) CALL GetPutA LD A,(IX+6) LD B,A EX DE,HL LD (HL),"│" INC HL ld (hl),ColLstBxFr INC HL ld c,ColListBox LD A," " ; пустая строка в списке (если окно больше по Y) lstbx6: LD (HL),A INC HL LD (HL),C INC HL DJNZ lstbx6 ; скролл-бар ниже списка call ScrollB ; нарисовать атрибуты скролл-бара POP BC DJNZ LstBox6 ; EndBox1:LD A,(HL) endbx0: OR A JR Z,EndBox2 endbx1: CP 0Dh ; конец строки INC HL LD A,(HL) JR NZ,endbx1 INC (IY+9) jr endbx0 ; EndBox2:ld a,0 add a,(iy+9) ld (iy+9),a LD C,(IX+4) ;End string LD B,(IX+5) CALL GetPutA EX DE,HL LD (HL),"└" INC HL ld (hl),ColLstBxFr INC HL LD B,(IX+6) endbx2: LD A,"─" LD (HL),A INC HL ld (hl),ColLstBxFr INC HL DJNZ endbx2 LD (HL),"┘" inc hl ld (hl),ColLstBxFr LD A,(IY+4) INC A LD (IY+0Ch),A ;line up INC A prevPos:ld b,0 add a,b LD (IY+0Eh),A ;prev pos LD A,(IY+5) SUB 2 LD (IY+0Dh),A ;line down POP HL LD BC,0013h ; не трогать LD (IY+0),C ADD IY,BC RET ; ; прорисовка атрибутов скролл-бара ScrollB:LD A,(IY+4) ; Yo SUB (IX+1) ; Y pos from begin window INC A CP (IX+5) ; Y тек. строки списка LD B,"" JR Z,.loc1 call pos LD B,"■" JR Z,.loc1 LD A,(IY+5) ; Yi SUB (IX+1) ; Y pos from begin window SUB 2 CP (IX+5) ; Y тек. строки списка LD B,"" JR Z,.loc1 LD B,"▒" .loc1: LD (HL),B INC HL LD (HL),ColScrlBar EX DE,HL INC (IX+5) ; Y тек. строки списка ret ; расчет полож. скролл-бара по тек. положению указателя списка pos: exx ld a,(iy+7) add a,(iy+8) ld e,a ; смещ. указателя ld c,3 ; высота бара call Mult8X8 ; E*C=HL, CurLine * LenScrollBar = num16bit ld a,h or l jr z,ps1 elnum: ld a,0 ; число элементов в списке or a jr z,$+3 dec a ld c,a call Divis16X8 ; HL/C=LH ps1: ld a,l ld (prevPos+1),a add a,4 ; скоррект. полож. cp (ix+5) exx ret ;[]===================================================[] ; События ListBox-а EListBox: ld a,(DialTab+5+1) ; характер объекта res 7,a cp ListBox jr nz,ELst1 ld hl,(DialTab+5+7) ; 2 ячейки тек. полож. указателя ld a,(DialTab+5+16) ; ячейка контекста or a jr nz,ELst0 ld (CurElem0),hl ; сохр. полож. курсора в ListBox1 jr ELst1 ELst0: ld (CurElem1),hl ; сохр. полож. курсора в ListBox2 ELst1: LD HL,what ; список событий LD A,(HL) INC HL CP evMouseFr JP Z,ELmouse CP evKeyboard JP Z,ELkeys CP evMessage JR Z,ELmess CP evCombKey RET NZ BIT 7,(IX+1) JR NZ,ELcomb ; можно переходить - объект выделен 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 SetLstBox ; выделить пред. объект ; ELmess: LD A,(HL) INC HL CP msHiddInvr ret nz BIT 7,(IX+1) RET NZ LD A,(IX+9) OR A RET Z jp HdLstBoxI ; ELcomb: INC HL LD DE,ELexit PUSH DE LD A,(HL) CP 58h ; Cursor Up JR Z,ELup CP 52h ; Cursor down JP Z,ELdown CP 59h ; PgUp JP Z,ELpgup CP 53h ; PgDwn JP Z,ELpgdwn CP 57h ; Home JP Z,ELhome CP 51h ; End JP Z,ELend POP DE RET ; Курсор вверх ELup: LD A,(IX+9) CP 2 RET C LD A,(IX+7) DEC A JP M,ELup1 CALL RsLstBoxI ; убрать инверсию LD (IX+7),A CALL StLstBoxI ; уст. инверсию CALL LstBoxBar JP ELboxex ; ELup1: LD A,(IX+8) DEC A RET M LD (IX+8),A LD L,(IX+0Ah) LD H,(IX+0Bh) JR Z,ELupn1 LD L,(IX+11h) LD H,(IX+12h) DEC HL DEC HL LD A,(HL) CP 0Dh JR NZ,$-4 INC HL ELupn1: LD (IX+11h),L LD (IX+12h),H CALL PrnLstBox CALL LstBoxBar JP ELboxex ; Курсор вниз ELdown: LD A,(IX+9) CP 2 RET C LD A,(IX+5) SUB (IX+4) SUB 2 LD C,A LD A,(IX+7) ADD A,(IX+8) INC A CP (IX+9) RET Z SUB (IX+8) CP C JR Z,ELdown1 CALL RsLstBoxI LD (IX+7),A CALL StLstBoxI CALL LstBoxBar JP ELboxex ELdown1:LD A,(IX+8) INC A LD (IX+8),A LD L,(IX+0Ah) LD H,(IX+0Bh) JR Z,ELdwn1 LD L,(IX+11h) LD H,(IX+12h) LD A,(HL) INC HL CP 0Dh JR NZ,$-4 ELdwn1: LD (IX+11h),L LD (IX+12h),H CALL PrnLstBox CALL LstBoxBar JP ELboxex ; На страницу вверх ELpgup: LD A,(IX+9) CP 2 RET C LD A,(IX+8) OR A LD B,1 JP Z,ELnopg LD A,(IX+5) SUB (IX+4) SUB 2 LD C,A LD A,(IX+8) SUB C JR NC,$+3 SUB A LD (IX+8),A JR ELpgex ; На страницу вниз ELpgdwn:LD A,(IX+9) CP 2 RET C LD A,(IX+5) SUB (IX+4) SUB 2 LD C,A LD A,(IX+9) SUB (IX+8) LD B,A CP C JR C,ELnopg JR Z,ELnopg LD A,(IX+8) ADD A,C CP (IX+9) JR C,$+6 LD A,(IX+9) SUB C LD (IX+8),A ADD A,C CP (IX+9) JR C,ELpgex JR Z,ELpgex LD A,(IX+9) SUB C LD (IX+8),A ; ELpgex: LD L,(IX+0Ah) LD H,(IX+0Bh) LD A,(IX+8) OR A JR Z,ELpgex1 LD B,A LD A,(HL) INC HL CP 0Dh JR NZ,$-4 DJNZ $-6 ELpgex1:LD (IX+11h),L LD (IX+12h),H CALL PrnLstBox CALL LstBoxBar LD A,(IX+7) ADD A,(IX+8) CP (IX+9) JR C,ELboxex LD A,(IX+9) SUB (IX+8) LD B,A ; ELnopg: DEC B LD A,B CP (IX+7) RET Z CALL RsLstBoxI LD (IX+7),A CALL StLstBoxI CALL LstBoxBar ; ELboxex:LD HL,what LD (HL),evMessage INC HL LD (HL),msNewElem INC HL LD A,(IX+7) ADD A,(IX+8) LD (HL),A ; тек. элемент списка CALL TransMessUp LD B,8 elbxs1: call ExmFire RET Z HALT DJNZ elbxs1 RET ; В начало ListBox-списка ELhome: LD A,(IX+8) OR A JR Z,ELhome1 LD (IX+8),0 LD L,(IX+0Ah) LD H,(IX+0Bh) LD (IX+11h),L LD (IX+12h),H CALL PrnLstBox ELhome1:LD A,(IX+7) OR A RET Z CALL RsLstBoxI LD (IX+7),0 CALL StLstBoxI JP LstBoxBar ; В конец ListBox-списка ELend: LD A,(IX+8) ADD A,(IX+7) INC A CP (IX+9) RET Z LD A,(IX+5) SUB (IX+4) SUB 2 LD C,A LD A,(IX+9) SUB C JR C,ELend1 JR Z,ELend1 LD A,(IX+9) SUB C LD (IX+8),A LD L,(IX+0Ah) LD H,(IX+0Bh) LD B,A LD A,(HL) INC HL CP 0Dh JR NZ,$-4 DJNZ $-6 LD (IX+11h),L LD (IX+12h),H CALL RsLstBoxI CALL PrnLstBox LD A,(IX+9) DEC A SUB (IX+8) LD (IX+7),A CALL StLstBoxI JP LstBoxBar ; ELend1: CALL RsLstBoxI LD A,(IX+9) DEC A LD (IX+7),A CALL StLstBoxI JP LstBoxBar ; Обработка событий от мышки ELmouse:LD E,(HL) ; Xcoord INC HL LD D,(HL) ; Ycoord 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 list box RET C CP (IX+5) ; Yi pos list box RET NC BIT 7,(IX+1) ; Sel or nosel PUSH DE CALL Z,SetLstBox POP DE LD HL,ELexit PUSH HL LD A,(IX+9) OR A RET Z LD A,E ADD A,2 CP (IX+3) JR Z,ELmous1 RET NC LD A,E CP (IX+2) RET Z LD A,D CP (IX+4) RET Z INC A CP (IX+5) RET Z LD A,D SUB (IX+4) DEC A ADD A,(IX+8) CP (IX+9) JR C,$+6 LD A,(IX+9) DEC A SUB (IX+8) ;@@@ CP (IX+7) ; JR Z,SelLine CALL RsLstBoxI LD (IX+7),A CALL StLstBoxI CALL LstBoxBar JP ELboxex ;@@@ ;SelLine:POP HL ; LD HL,what ; LD (HL),evCommand ; INC HL ; LD (HL),evNothing ;cmSelect ; RET ; ELmous1:LD A,D CP (IX+0Ch) RET C JP Z,ELup CP (IX+0Dh) JP Z,ELdown RET NC CP (IX+0Eh) RET Z JP C,ELpgup JP NC,ELpgdwn RET ; Обработка событий от клавиатуры ELkeys: LD A,(HL) RES 5,A BIT 7,(IX+1) ; Sel or nosel RET NZ CP 9 ; Tab JR Z,SetLstBox ; выделить след. объект CP 0Dh ; ### JR Z,SetLstBox ; выделить след. объект CP (IX+0Fh) ; Hot key RET NZ SetLstBox: CALL MoveObj ; Select Button CALL ResDialInv ; Reset previos invert LD IX,DialTab+5 LD E,(IX+2) ; Xo INC E LD D,(IX+4) ; Y LD A,(IX+6) ; Xi SUB E LD C,A CALL SetDialInv LD A,(IX+9) OR A CALL NZ,StLstBoxI LD HL,what LD (HL),evMessage INC HL LD (HL),msNewElem INC HL LD A,(IX+7) ADD A,(IX+8) LD (HL),A ;Тек. элемент CALL TransMessUp ELexit: LD HL,what LD (HL),evNothing RET ;[]===========================================================[] ; RsLstBoxI: PUSH AF ld a,ColListBox CALL LstBoxInv POP AF RET ; Цвет курсора не активного объекта HdLstBoxI: ld a,ColLstBxHI JR LstBoxInv StLstBoxI: ld a,ColLstBoxI ; цвет выдел. курсора LstBoxInv: ld (lbcolor+1),a PUSH IY PUSH IX PUSH IX POP IY LD IX,DialData LD A,(IY+2) SUB (IX+0) INC A LD C,A LD A,(IY+4) ;; Yo SUB (IX+1) INC A ADD A,(IY+7) ;; LD B,A CALL GetPutA PUSH DE IN A,(Page3) PUSH AF LD A,(hPages.Win2) OUT (Page3),A LD A,(IY+3) SUB (IY+2) SUB 3 LD L,A ; длина выдел. курсора LD H,1 sub 2 ; курсор не на всю ширину ListBox-а ld b,a ld a," " ld (de),a ; в 1-м месте "не выводить" выдел. курсор inc de ld a,ColListBox ; атрибут (цвет списка ListBox-а) ld (de),a ex af,af' inc de lbcolor:LD A,0 lbclr1: INC DE ; цикл прорисовки выдел. курсора LD (DE),A INC DE DJNZ lbclr1 ld a," " ld (de),a ; в посл. месте "не выводить" выдел. курсор inc de ex af,af' ld (de),a POP AF OUT (Page3),A POP IX LD E,(IY+2) INC E LD A,(IY+4) INC A ADD A,(IY+7) LD D,A CALL PutDialLn POP IX POP IY RET PrnLstBox: PUSH IY PUSH IX IN A,(Page3) PUSH AF LD A,(hPages.Win2) OUT (Page3),A PUSH IX POP IY LD IX,DialData LD L,(IY+11h) LD H,(IY+12h) LD A,(IY+2) SUB (IX+0) ADD A,2 LD C,A LD A,(IY+4) SUB (IX+1) INC A LD B,A LD A,(IY+5) SUB (IY+4) SUB 2 PrLsBx0:PUSH AF PUSH BC CALL GetPutA LD A,(IY+3) SUB (IY+2) SUB 5 LD B,A PrLsBx1:LD A,(HL) INC HL CP 0Dh JR Z,PrLsBx2 LD (DE),A INC DE INC DE DJNZ PrLsBx1 LD A,(HL) INC HL CP 0Dh JR NZ,$-4 PrLsBx2:LD A,B OR A JR Z,PrLsBx3 LD A," " LD (DE),A INC DE INC DE DJNZ $-3 PrLsBx3:POP BC INC B POP AF DEC A JR Z,PrLsBx4 LD E,(HL) INC E DEC E JR NZ,PrLsBx0 PrLsBx4:OR A JR Z,PrLsBx6 PrLsBx5:PUSH AF PUSH BC CALL GetPutA LD A,(IY+3) SUB (IY+2) SUB 5 LD B,A SUB A LD (DE),A INC DE INC DE DJNZ $-3 POP BC INC B POP AF DEC A JR NZ,PrLsBx5 PrLsBx6:CALL PutDial POP AF OUT (Page3),A POP IX POP IY RET PLstBoxI: LD E,(IX+2) ; Xo INC E LD D,(IX+4) ; Y LD A,(IX+6) ; Xi SUB E LD C,A CALL SetDialInv jp StLstBoxI GetLstBox: LD HL,what INC HL INC HL LD A,(IX+7) ADD A,(IX+8) LD (HL),A RET ; Верт. скролл-бар объекта ListBox LstBoxBar: LD A,(IX+7) ADD A,(IX+8) LD E,A ;LD A,(IX+0Dh) ; line down ;SUB (IX+0Ch) ; line up ;SUB 2 ;LD C,A ; высота бара ld c,3 CALL Mult8X8 ; E*C=HL, CurLine * LenScrollBar = num16bit LD A,H OR L JR Z,LBB1 LD A,(IX+9) ; num16bit / EquipElem OR A JR Z,$+3 DEC A LD C,A CALL Divis16X8 ; HL/C=LH LBB1: ld a,l ld (prevPos+1),a LD A,(IX+0Ch) ; смещение от начала INC A ADD A,L CP (IX+0Eh) ; prev pos RET Z ; когда L=0 ? PUSH IY PUSH IX PUSH AF ;- PUSH IX POP IY LD IX,DialData LD A,(IY+3) SUB (IX+0) SUB 2 LD C,A LD A,(IY+0Eh) ; prev pos SUB (IX+1) LD B,A CALL GetPutA IN A,(Page3) PUSH AF LD A,(hPages.Win2) OUT (Page3),A LD A,"▒" LD (DE),A POP AF OUT (Page3),A LD A,(IY+3) SUB 2 LD E,A LD D,(IY+0Eh) ; 0..31 BIT 7,E JR NZ,LBe ld h,ColScrlBar LD L,"▒" ; предв. стереть "■" LD BC,1BB5h ; символ на экран SUB A RST ToBIOS LBe: LD A,(IY+3) SUB 2 LD E,A POP AF ;- LD (IY+0Eh),A ; prev pos LD D,A ; 0..31 PUSH DE BIT 7,E JR NZ,LBe1 ld h,ColScrlBar LD L,"■" ; новое полож. LD BC,1BB5h ; символ на экран SUB A RST ToBIOS LBe1: POP DE LD A,E SUB (IX+0) LD C,A LD A,D SUB (IX+1) LD B,A CALL GetPutA IN A,(Page3) PUSH AF LD A,(hPages.Win2) OUT (Page3),A LD A,"■" LD (DE),A POP AF OUT (Page3),A POP IX POP IY RET ; Процедура умножения (8*8bit) ; На вход: E*C ; На выход: HL-результат Mult8X8:SUB A LD L,A LD H,A LD D,A CP C RET Z CP E RET Z LD H,C LD B,8 .loc1: ADD HL,HL JR NC,$+3 ADD HL,DE DJNZ .loc1 RET ; Процедура деления (16X8bit) ; На вход: HL/C ; На выход: L-результат ; H-остаток Divis16X8: LD B,8 .loc1: ADD HL,HL LD A,H JR C,.loc2 SUB C JR NC,.loc3 ADD A,C LD H,A DJNZ .loc1 RET .loc2: SUB C .loc3: LD H,A INC HL DJNZ .loc1 RET ;[]===========================================================[] ; Начальное окно программы WinMain1: dw 0409h,173Eh ; Yo,Xo,lenY,lenX db " FFORMAT ",0 ; имя окна ; db ListBox ; характер объекта dw 0203h,060Fh ; Yo,Xo,lenY,lenX db "~D~rives",0 ; имя кластера db 0 ; конт. помощь dw DiskList ; список элементов ; db ListBox dw 0219h,061Eh ; Yo,Xo,lenY,lenX db "~A~vailable - Tr - Sc - Type",0 db 1 ; контекст. помощь dw ItemList ; список элементов ; db ClRadioBut ; характер объекта dw 0C03h,0116h ; Yo,Xo,lenY,lenX db "Options",0 ; имя кластера db "Put ~s~ystem files",0 ; имя элемента db 2 ; контекст. помощь dw cSystem ; ячейка памяти db 0 ; конец кластера ; db ClCheckBut ; характер объекта dw 0C22h,0317h ; Yo,Xo,lenY,lenX db "Perfomance",0 ; имя кластера db "S~t~andart mode",0 ; имя элемента db 3 ; контекст. помощь dw Mode0 ; ячейка памяти db "O~p~timize sectors",0 ; имя элемента db 3 ; контекст. помощь dw Mode2 ; ячейка памяти db "Quic~k~ format",0 ; имя элемента db 3 ; контекст. помощь dw Mode1 ; ячейка памяти db 0 ; конец кластера ; db InputLine ; характер объекта dw 1103h ; Yo,Xo db "~L~abel: ",0 ; имя кластера db 12 ; длина редакт. строки db 4 ; контекст. помощь dw LabelBuff ; адрес буфера редакт. строки ; db Button ; характер объекта dw 1405h ; Yo,Xo db " ~F~ormatting ",0 ; имя элемента db cmOkey ; назнач. команда db 5 ; контекст. помощь ; db Button dw 1417h ; Yo,Xo db " ~O~ptions ",0 db cmOptions db 5 ; db Button dw 142Bh ; Yo,Xo db " ~Q~uit ",0 ; имя элемента db cmCancel db 5 ; db 0xFF ; конец списка DiskList: DiskA: db " X: X.XX ",0Dh DiskB: db " X: X.XX ",0Dh,0 ItemList: db " 1.44 Mb 80 18 DS/HD",0Dh db " 1.52 Mb 80 19 DS/HD",0Dh db " 1.60 Mb 80 20 DS/HD",0Dh db " 1.64 Mb 82 20 DS/HD",0Dh db " 1.66 Mb 83 20 DS/HD",0Dh db " 1.68 Mb 80 21 DS/HD",0Dh db " 1.72 Mb 82 21 DS/HD",0Dh db " 1.74 Mb 83 21 DS/HD",0Dh db " 720 kB 80 09 DS/DD",0Dh db " 800 kB 80 10 DS/DD",0Dh db " 820 kB 82 10 DS/DD",0Dh db " 830 kB 83 10 DS/DD",0Dh db " 636 kB - 80 - 16 TR-DOS",0Dh db " 800 kB - 80 - 05 CPM-80",0Dh db 0 ; Окно опций выбора формата дисководов WinOptions: dw 0910h,0D2Fh ; Yo,Xo,lenY,lenX db " Setup drivers ",0 ; имя окна ; db Button dw 0A07h ; Yo,Xo db " ~O~k ",0 db cmOkey db 5 ; db Button dw 0A13h ; Yo,Xo db " ~C~ancel ",0 db cmCancel db 5 ; db Button dw 0A1Fh ; Yo,Xo db " ~S~ave ",0 ; имя элемента db cmSave db 5 ; db ClCheckBut ; характер объекта dw 0203h,0212h ; Yo,Xo,lenY,lenX db "Drive A:",0 ; имя кластера db '1.44Mb 3.5"',0 ; имя элемента db 3 ; контекст. помощь dw SetDriveA0 ; ячейка памяти db ' 720kB 5.25"',0 ; имя элемента db 3 ; контекст. помощь dw SetDriveA1 ; ячейка памяти db 0 ; конец кластера ; db ClCheckBut ; характер объекта dw 0218h,0312h ; Yo,Xo,lenY,lenX db "Drive B:",0 ; имя кластера db '1.44Mb 3.5"',0 ; имя элемента db 3 ; контекст. помощь dw SetDriveB0 ; ячейка памяти db ' 720kB 5.25"',0 ; имя элемента db 3 ; контекст. помощь dw SetDriveB1 ; ячейка памяти db " None",0 ; имя элемента db 3 ; контекст. помощь dw SetDriveB2 ; ячейка памяти db 0 ; конец кластера ; db 0xFF ; конец списка ; Окно процесса форматирования WinMain2: dw 060Bh,133Ah ; Yo,Xo,lenY,lenX db " FFORMAT ",0 ; имя окна ; db Frame ; рамка "карты" цилиндров dw 0502h,0534h ; Yo,Xo,lenY,lenX ; db Frame ; рамка тек. цилиндра dw 0C02h,0218h ; Yo,Xo,lenY,lenX ; db Frame ; рамка емкости дискеты dw 0C1Ch,031Ah ; Yo,Xo,lenY,lenX ; db TextLine dw 0704h ; Yo,Xo db 75h ; цвет строки db "████████████████████████████████████████" metka1: db "██",0 ; db TextLine dw 0730h ; Yo,Xo db ColFormText ; цвет строки db "Side 0",0 ; db TextLine dw 0804h ; Yo,Xo db 75h ; цвет строки db "████████████████████████████████████████" metka2: db "██",0 ; db TextLine dw 0830h ; Yo,Xo db ColFormText ; цвет строки db "Side 1",0 ; db TextLine dw 0904h ; Yo,Xo db ColFormText ; цвет строки db "0246802468024680246802468024680246802468" metka3: db "02",0 ; db TextLine dw 0930h ; Yo,Xo db ColFormText ; цвет строки db "Tracks",0 ; db TextLine dw 0A04h ; Yo,Xo db ColFormText ; цвет строки db "0 1 2 3 4 5 6 7" metka4: db " 8",0 ; db TextLine dw 0D04h ; Yo,Xo db ColFormText ; цвет строки db "Head: ",0 ; db TextLine dw 0D0Bh ; Yo,Xo db ColFormNumber ; цвет строки db "0",0 ; db TextLine dw 0D0Ch ; Yo,Xo db ColFormText ; цвет строки db " Cylinder: ",0 ; db TextLine dw 0D18h ; Yo,Xo db ColFormNumber ; цвет строки space4: db " 0",0 ; db TextLine dw 0D1Eh ; Yo,Xo db ColFormNumber ; цвет строки space1: db "1457664",0 ; db TextLine dw 0D25h ; Yo,Xo db ColFormText ; цвет строки db " Total disk space",0 ; db TextLine dw 0E1Eh ; Yo,Xo db ColFormNumber ; цвет строки db " " space3: db " 0",0 ; число bad-секторов ; db TextLine dw 0E25h ; Yo,Xo db ColFormText ; цвет строки db " Bad sectors",0 ; db TextLine dw 0F1Eh ; Yo,Xo db ColFormNumber ; цвет строки space2: db "1457664",0 ; db TextLine dw 0F25h ; Yo,Xo db ColFormText ; цвет строки db " Available bytes",0 ; db TextLine dw 0504h ; Yo,Xo ; db ColFormNumber ; цвет строки db 30h ; функция в DSS не отрабатывает LABEL1: db "NO NAME ",0 ; db TextLine dw 0503h ; Yo,Xo db ColFormText ; цвет строки db "[",0 ; db TextLine dw 050Fh ; Yo,Xo db ColFormText ; цвет строки db "]",0 ; db TextLine dw 052Fh ; Yo,Xo db ColFormNumber ; цвет строки db "DISK " LDISK: db "A:",0 ; db TextLine dw 052Eh ; Yo,Xo db ColFormText ; цвет строки db "[",0 ; db TextLine dw 0536h ; Yo,Xo db ColFormText ; цвет строки db "]",0 ; db TextLine dw 0204h ; Yo,Xo db ColFormText ; цвет строки db "Formatting " metka5: db "1.44 Mb",0 ; db TextLine dw 0304h ; Yo,Xo db ColFormText ; цвет строки metka7: db "System files",0 ; db TextLine dw 0223h ; Yo,Xo db ColFormText ; цвет строки metka6: db "(Optimize sectors) ",0 ; db Button dw 1009h ; Yo,Xo db " ~C~ancel ",0 db cmCancel db 5 ; db 0xFF ; конец списка ; Окно запроса вставить дискету InsDiskette: DW 0B16h,0824h ; Yo,Xo,lenY,lenX DB " Information ",0 ; DB TextLine DW 0305h ; Yo,Xo db 1Fh ; цвет строки DB "Insert NEW disk in drive " DskName:db "A:",0 ; DB Button ; характер объекта DW 0507h ; Yo,Xo DB " ~O~k ",0 ; имя элемента db cmOkey ; назнач. команда db 5 ; контекст. помощь ; DB Button DW 0515h ; Yo,Xo DB " ~C~ancel ",0 db cmCancel db 5 ; db 0FFh ; конец списка ; Окно подтв. прерывания операции Interrupt: DW 0A16h,0A24h ; Yo,Xo,lenY,lenX DB " Confirmation ",0 ; DB TextLine DW 0205h ; Yo,Xo db 1Fh ; цвет строки DB "FFORMAT interrupted by user",0 ; DB TextLine DW 0408h ; Yo,Xo db 1Fh ; цвет строки DB "Do you wish to cancel",0 ; DB TextLine DW 0507h ; Yo,Xo db 1Fh ; цвет строки DB "the current operation ?",0 ; DB Button ; характер объекта DW 0707h ; Yo,Xo DB " ~Y~es ",0 ; имя элемента db cmOkey ; назнач. команда db 5 ; контекст. помощь ; DB Button DW 0715h ; Yo,Xo DB " ~N~o ",0 db cmCancel db 5 ; db 0FFh ; конец списка ; Окно при отсутствии дискеты MissingDisk: DW 0B14h,0928h ; Yo,Xo,lenY,lenX DB " Information ",0 ; DB TextLine DW 0203h ; Yo,Xo db 4Fh ; цвет строки DB "The disk is missing from the drive",0 ; DB TextLine DW 040Ah ; Yo,Xo db 4Fh ; цвет строки DB "Please insert a disk",0 ; DB Button ; характер объекта DW 0609h ; Yo,Xo DB " ~O~k ",0 ; имя элемента db cmOkey ; назнач. команда db 5 ; контекст. помощь ; DB Button DW 0617h ; Yo,Xo DB " ~C~ancel ",0 db cmCancel db 5 ; db 0FFh ; конец списка ; Окно при "битой" нулевой дорожке дискеты NoForm: DW 0B14h,0927h ; Yo,Xo,lenY,lenX DB " Information ",0 ; DB TextLine DW 0203h ; Yo,Xo db 4Fh ; цвет строки DB "This disk could not be formatted:",0 ; DB TextLine DW 0305h ; Yo,Xo db 4Fh ; цвет строки DB "unrecoverable error in system",0 ; DB TextLine DW 0403h ; Yo,Xo db 4Fh ; цвет строки DB "area or uncompatible format mode",0 ; DB Button ; характер объекта DW 060Fh ; Yo,Xo DB " ~O~k ",0 ; имя элемента db cmOkey ; назнач. команда db 5 ; контекст. помощь ; db 0FFh ; конец списка ; Окно успешного завершения форматирования FComplite: dw 0B18h,071Fh ; Yo,Xo,lenY,lenX db "═",0 ; DB TextLine DW 0208h ; Yo,Xo db 1Fh ; цвет строки DB "Format complete",0 ; DB Button ; характер объекта DW 040Bh ; Yo,Xo DB " ~O~k ",0 ; имя элемента db cmOkey ; назнач. команда db 5 ; контекст. помощь ; db 0FFh ; конец списка ; Окно записи сист. области дискеты SystemArea: dw 0C19h,051Eh ; Yo,Xo,lenY,lenX db "═",0 ; без заголовка ; db TextLine dw 0204h ; Yo,Xo db 1Fh ; цвет строки db "Writing system area...",0 ; db 0xFF ; конец списка ; Окно успешного копирования сист. файлов SysCopy: dw 0C19h,051Eh ; Yo,Xo,lenY,lenX db "═",0 ; без заголовка ; DB TextLine DW 0204h ; Yo,Xo db 1Bh ; цвет строки db "System files transfered",0 ; db 0FFh ; конец списка ; Окно записи сист. файлов SysWrite: dw 0C19h,051Eh ; Yo,Xo,lenY,lenX db "═",0 ; без заголовка ; db TextLine dw 0204h ; Yo,Xo db 1Bh ; цвет строки db "Writing system files...",0 ; db 0xFF ; конец списка ; Окно успешного копирования сист. файлов ErrSysFiles: dw 0B19h,081Eh ; Yo,Xo,lenY,lenX db "═",0 ; без заголовка ; db TextLine dw 0204h ; Yo,Xo db 4Fh ; цвет строки db "System files not found",0 db TextLine dw 0304h ; Yo,Xo db 4Fh ; цвет строки db "or work with errors...",0 ; db Button ; характер объекта dw 050Bh ; Yo,Xo db " ~O~k ",0 ; имя элемента db cmOkey ; назнач. команда db 5 ; контекст. помощь ; db 0xFF ; конец списка ; Окно "Защита от записи" Protect: dw 0C19h,071Eh ; Yo,Xo,lenY,lenX db "═",0 ; без заголовка ; db TextLine dw 0203h ; Yo,Xo db 4Fh ; цвет строки db "Disk is write protected!",0 ; DB Button ; характер объекта DW 040Bh ; Yo,Xo DB " ~O~k ",0 ; имя элемента db cmOkey ; назнач. команда db 5 ; контекст. помощь ; db 0FFh ; конец списка ; Окно инициализации дисковода InitFdd: dw 0C1Bh,0519h ; Yo,Xo,lenY,lenX db "═",0 ; db TextLine dw 0203h ; Yo,Xo db 1Fh ; цвет строки db "Resetting drive ...",0 ; db 0FFh ; конец списка if release else PR: push af push bc push de push hl push ix push iy ld de,0100h LD C,BIOS.LP_SET_PLACE RST ToBIOS ld hl,(hours) ; часы/минуты call HEXHL ld a," " ld bc,0182h RST ToBIOS ld a,(seconds) ; секунды call HEX1 pop iy pop ix pop hl pop de pop bc pop af ret HEXA: push hl push de push bc push ix push iy push af push af ld de,0100h LD C,BIOS.LP_SET_PLACE RST ToBIOS pop af call HEX1 ;ld a," " ;ld bc,0182h ;RST ToBIOS ;ld a,(ix+1) ;call HEX1 ;ld a," " ;ld bc,0182h ;RST ToBIOS ;ld a,(iy+3) ;call HEX1 ;ld a," " ;ld bc,0182h ;RST ToBIOS ;ld a,(iy+0Ch) ;call HEX1 ;ld a," " ;ld bc,0182h ;RST ToBIOS ;ld a,(iy+0Eh) ;call HEX1 pop af pop iy pop ix pop bc pop de pop hl ret HEXHL: ld a,h call HEX1 ld a,l HEX1: push af rra rra rra rra call HEX2 pop af HEX2: and 0Fh add a,90h daa adc a,40h daa ld bc,0182h ; вывод 'a' в тек. позиции курсора RST ToBIOS ret endif