; LAST UPDATE: 28.07.2025 savelij LineBuffer := WorkBuffer+0x300 ;[]==========================================================[] CALL LoadFile RET C LD IX,ViewingFile SUB A LD (ViewMode),A LD (ASCIIaddX),A LD H,A LD L,A LD (FileShift),HL LD (FileShift+2),HL LD L,(IX+28) LD H,(IX+29) LD (FileLenght),HL LD L,(IX+30) LD H,(IX+31) LD (FileLenght+2),HL CALL InitViewScr ViewerBegin CALL InitStatusLine CALL InitVProc CALL PrintVPage ViewerLoop LD A,(ViewMode) ; режим просмотра? OR A JR NZ,HViewLoop ; режим просмотра текст TViewLoop LD IX,ASCIItab CALL JUMPS.TestCoords SPDSS DSSF.SCANKEY ; Ожидаем нажатия клавиш JR Z,TViewLoop LD A,E ; Е-ASCII код CP 0x1B ; Esc JP Z,ViewerExit OR A JR NZ,TViewLoop ; Ждем функцион.клавиши LD A,D CP SC.F10;0x44 JP Z,ViewerExit LD HL,TViewLoop PUSH HL CP SC.F1;0x3B JP Z,About CP SC.F2;0x3C JP Z,ChASCIImode CP SC.F4;0x3E JP Z,ChViewer ; Просмотр в HEX CP SC.F8;0x42 JP Z,ChCodePage ; Смена кодовой страницы WIN/DOS/KOI CP SC.F7;0x41 JP Z,FVPrintFile CP SC.X4;0x54 JP Z,ScrollLeft CP SC.X6;0x56 JP Z,ScrollRght CP SC.X7;87 ; Home JP Z,THome CP SC.X1;81 ; End JP Z,TEnd CP SC.X8;88 ; Стрелка вверх JP Z,TLineUp CP SC.X2;82 ; Стрелка вниз JP Z,TLineDwn CP SC.X9;89 ; PageUp JP Z,TPageUp CP SC.X3;83 ; PageDown JP Z,TPageDwn LD A,B AND KEYBSTAT.M_ALT + KEYBSTAT.M_CTRL;0x30 CP KEYBSTAT.M_ALT + KEYBSTAT.M_CTRL;0x30 RET Z BIT KEYBSTAT.B_CTRL,B;5,B RET Z LD A,D AND %01111111;0x7F CP SC.X7;0x57 ; Ctrl+PageUp JP Z,TBegFile ; в начало файла CP SC.X1;0x51 ; Ctrl+PageDown JP Z,TEndFile ; в конец файла CP SC.P;0x19 ; Ctrl+P JP Z,FVPrintFile RET ;-------------------------------------------------------------- ; режим просмотра HEX HViewLoop LD IX,HEXtab CALL JUMPS.TestCoords SPDSS DSSF.SCANKEY ; Ожидаем нажатия клавиш JR Z,HViewLoop LD A,E ; Е-ASCII код CP 0x1B ; Esc JP Z,ViewerExit OR A JR NZ,HViewLoop ; Ждем функцион.клавиши LD A,D CP SC.F10;0x44 ; F10 JP Z,ViewerExit LD HL,HViewLoop PUSH HL CP SC.F1;0x3B JP Z,About CP SC.F4;0x3E ; F4 JP Z,ChViewer ; Просмотр в тексте CP SC.F8;0x42 JP Z,ChCodePage ; Смена кодовой страницы WIN/DOS/KOI CP SC.F5;0x3F ; F5 JP Z,HGoTo ; Переход на адрес пользователя CP SC.F7;0x41 JP Z,FVPrintFile CP SC.X8;88 ; Стрелка вверх JP Z,FVHLineUp CP SC.X2;82 ; Стрелка вниз JP Z,HLineDwn CP SC.X9;89 ; PageUp JP Z,FVHPageUp CP SC.X3;83 ; PageDown JP Z,HPageDwn LD A,B AND KEYBSTAT.M_ALT + KEYBSTAT.M_CTRL;0x30 CP KEYBSTAT.M_ALT + KEYBSTAT.M_CTRL;0x30 RET Z BIT KEYBSTAT.B_CTRL,B;5,B RET Z LD A,D AND %01111111;0x7F CP SC.X7;0x57 ; Ctrl+PageUp JP Z,HBegFile ; в начало файла CP SC.X1;0x51 ; Ctrl+PageDown JP Z,HEndFile ; в конец файла CP SC.P;0x19 ; Ctrl+P JP Z,FVPrintFile RET ;[]----------------------------------------------------------[] ChViewer LD HL,ViewerBegin EX (SP),HL SUB A LD (ASCIIaddX),A LD A,(ViewMode) XOR 0x01 LD (ViewMode),A RET NZ LD HL,(FileShift) LD DE,(FileShift+2) INC HL LD A,H OR L JR NZ,.L1 INC DE .L1 CALL SearchUp LD (FileShift),HL LD (FileShift+2),DE RET ;[]==========================================================[] PrintVPage LD A,(ViewMode) OR A JP NZ,PrnHEXpage JP PrnASCIIpage ;[]==========================================================[] ViewerExit LD A,(FVMemIndef) SPDSS DSSF.FREEMEM OR A RET ;[]==========================================================[] LoadFile CALL JUMPS.SetClock LD DE,ViewingFile SPDSS DSSF.F_FIRST,1, DIR.M_Archive + \ DIR.M_Dir + \ DIR.M_System + \ DIR.M_Hidden + \ DIR.M_ReadOnly PUSH AF CALL C,JUMPS.DOSError POP AF JP C,LoadExit ; LD HL,ViewingFile+33 ; LD A,(HL) ;LoadFl0 CALL FVCorrBigChar ; LD (HL),A ; INC HL ; LD A,(HL) ; OR A ; JR NZ,LoadFl0 LD IX,ViewingFile LD H,(IX+28) LD A,(IX+29) LD E,(IX+30) LD D,(IX+31) LD L,0x00 SLA A RL E RL D RL L SLA A RL E RL D RL L OR H LD H,0x00 EX DE,HL JR Z,.L1 INC HL .L1 LD A,H OR L JR NZ,LoadFl1 INC HL LoadFl1 LD A,D OR E LD A,ERR_DSS.NOT_ENOUGH_MEMORY PUSH AF CALL NZ,JUMPS.DOSError ;!!!!!!!!!!!! Нет памяти POP AF SCF JP NZ,LoadExit PUSH HL SPDSS DSSF.INFOMEM POP DE LD L,C LD H,B OR A SBC HL,DE LD A,ERR_DSS.NOT_ENOUGH_MEMORY PUSH DE PUSH AF CALL C,JUMPS.DOSError ;!!!!!!!!!!!! Нет памяти POP AF POP DE JP C,LoadExit LD IX,ProcessView LD (IX+PROC.MAX_PAGES),E LD (IX+PROC.MAX_PAGES + 1),D SUB A LD (IX+PROC.MAX_PAGES + 2),A LD (IX+PROC.MAX_PAGES + 3),A PUSH DE CALL JUMPS.InitProcess POP DE LD B,E SPDSS DSSF.GETMEM LD (FVMemIndef),A LD HL,PagesList SPBIOS BIOSF.GETMEMBLKPAGES MAKEWINDOW WINSUBOBJ.STORE W_MAIN 160,88,320,48 W_FILL 4,2,312,10,COLORI.BLACK W_TEXT 112,3,COLORI.WHITE,"FN File Viewer v\{FLEX_VERS.VIEWER}" W_TEXT 8,16,COLORP.HIGHGRAY,"Reading:" W_BORDER 16,28,288,12 W_FILL 18,29,284,10,COLORI.WHITE W_END SPDSS DSSF.CURDISK LD HL,WorkBuffer ADD A,'A' LD (HL),A INC HL LD (HL),':' INC HL PUSH HL SPDSS DSSF.CURDIR POP HL SUB A .L2 INC HL CP (HL) JR NZ,.L2 DEC HL LD A,'\\' CP (HL) INC HL JR Z,.L3 LD (HL),A INC HL .L3 EX DE,HL LD HL,ViewingFile+33 SUB A .L4 LDI CP (HL) JR NZ,.L4 LD (DE),A LD IX,0x0100 LD HL,WorkBuffer LD DE,0x00D8 LD BC,0x0068 LD A,0x80 CALL JUMPS.PrnRangPathL LD HL,ViewingFile+33 SPDSS DSSF.OPEN,,1 PUSH AF CALL C,JUMPS.DOSError POP AF JP C,NoRead LD (FHandle),A LD IX,ViewingFile LD L,(IX+28) LD H,(IX+29) LD (FVReadLen),HL LD L,(IX+30) LD H,(IX+31) LD (FVReadLen+2),HL SETPORT WINSP.Y_PORT,0xC0 GETPORT WINSP.CPU1 PUSH AF LD HL,PagesList LD A,(HL) .ReadLp1 INC HL PUSH HL SETPORT WINSP.CPU1,,0 SPDSS DSSF.SCANKEY LD HL,0x011B OR A SBC HL,DE JP Z,ReadAbort LD HL,(FVReadLen) LD DE,(FVReadLen+2) LD BC,0x4000 OR A SBC HL,BC LD B,0x00 EX DE,HL SBC HL,BC EX DE,HL JR C,.ReadEnd LD (FVReadLen),HL LD (FVReadLen+2),DE LD HL,0x4000 LD DE,0x4000 LD A,(FHandle) SPDSS DSSF.READ CALL FVNextProcess POP HL LD A,(HL) CP 0xFF JR NZ,.ReadLp1 POP AF SETPORT WINSP.CPU1,,0 JR ReadExit .ReadEnd LD HL,0x4000 LD DE,(FVReadLen) LD A,D OR E JR Z,ReadEn1 LD A,(FHandle) SPDSS DSSF.READ CALL FVNextProcess ReadEn1 POP HL POP AF SETPORT WINSP.CPU1,,0 ReadExit LD A,(FHandle) SPDSS DSSF.CLOSE OR A LoadExit HALT HALT WINDOWCLOSE PUSH AF CALL JUMPS.SetMouse POP AF RET ReadAbort POP HL POP AF SETPORT WINSP.CPU1,,0 NoRead LD A,(FVMemIndef) SPDSS DSSF.FREEMEM SCF JR LoadExit FVNextProcess LD IX,ProcessView LD L,(IX+PROC.CURR_PAGE) LD H,(IX+PROC.CURR_PAGE + 1) INC HL LD (IX+PROC.CURR_PAGE),L LD (IX+PROC.CURR_PAGE + 1),H LD A,H OR L JR NZ,.NextPr1 LD L,(IX+PROC.CURR_PAGE + 2) LD H,(IX+PROC.CURR_PAGE + 3) INC HL LD (IX+PROC.CURR_PAGE + 2),L LD (IX+PROC.CURR_PAGE + 3),H .NextPr1 JP JUMPS.PrnProcess ;[]----------------------------------------------------------[] ProcessView DW 178 DW 117 DW 284 DW 0 DW 0 DW 0 DW 0 DW 0 DW 0 DB COLORP.BLUE + COLORI.WHITE ;FVCorrBigChar CP 0x41 ; RET C ; CP 0x5B ; JR NC,.CorrCh1 ; SET 5,A ; RET ;.CorrCh1 CP 0x80 ; RET C ; CP 0xA0 ; RET NC ; SET 5,A ; CP 0x90 ; RET C ; SET 6,A ; RES 4,A ; RET ;[]==========================================================[] InitViewScr LD HL,FVFLen LD B,0x10 LD A,0x20 .L1 LD (HL),A INC HL DJNZ .L1 LD HL,FVFClast LD B,0x05 .L2 LD (HL),A INC HL DJNZ .L2 LD DE,FVFLen LD IX,ViewingFile LD L,(IX+28) LD H,(IX+29) LD C,(IX+30) LD B,(IX+31) CALL JUMPS.ConvNumTxt32 LD A,0x20 LD (DE),A INC DE LD HL,FVBytes LD BC,0x0005 LDIR LD DE,FVFData CALL FVGetData LD DE,FVFTime CALL FVGetTime LD L,(IX+26) LD H,(IX+27) LD DE,FVFClast CALL JUMPS.ConvNumTxt16 LD HL,FVFAtributs LD DE,FVFAttrib LD C,(IX+32) LD B,0x08 InitVS0 RL C LD A,'-' JR NC,.L3 LD A,(HL) .L3 LD (DE),A INC HL INC DE DJNZ InitVS0 MAKEWINDOW WINSUBOBJ.NOSTORE W_MAIN 0,0,640,256 W_FILL 4,2,632,10,COLORI.BLACK W_TEXT 8,3,COLORI.WHITE," FN File Viewer v\{FLEX_VERS.VIEWER}" W_HORIZLINE 0,13,640 W_TEXT 8,17,COLORP.HIGHGRAY,"Viewing:" W_VERTICLINE 574,16,10 W_HORIZLINE 0,27,640 W_HORIZLINE 0,227,640 W_FILL 0,28,640,200,COLORI.PANEL W_TEXT 8,231,COLORP.HIGHGRAY,"Len: " FVFLen EQU $ - STRLEN(" ") - 1 W_VERTICLINE 160,230,10 W_TEXT 172,231,COLORP.HIGHGRAY,"Create data: " FVFData EQU $ - STRLEN(" ") - 1 FVFTime EQU $ - STRLEN(" ") - 1 W_VERTICLINE 336,230,10 W_TEXT 348,231,COLORP.HIGHGRAY,"First cluster: " FVFClast EQU $ - STRLEN(" ") - 1 W_VERTICLINE 480,230,10 W_TEXT 492,231,COLORP.HIGHGRAY,"File attribute: " FVFAttrib EQU $ - STRLEN(" ") - 1 W_END SPDSS DSSF.CURDISK LD HL,WorkBuffer ADD A,"A" LD (HL),A INC HL LD (HL),":" INC HL PUSH HL SPDSS DSSF.CURDIR POP HL SUB A .L4 INC HL CP (HL) JR NZ,.L4 DEC HL LD A,'\\' CP (HL) INC HL JR Z,.L5 LD (HL),A INC HL .L5 EX DE,HL LD HL,ViewingFile+33 SUB A .L6 LDI CP (HL) JR NZ,.L6 LD (DE),A LD IX,0x0200 LD HL,WorkBuffer LD DE,0x0034 LD BC,0x0011 LD A,0x80 CALL JUMPS.PrnRangPathL LD HL,0x01FC LD DE,0x0003 LD B,0x08 EXX LD HL,0x022E LD DE,0x0003 LD B,0x08 EXX LD A,0x02 JP JUMPS.SetCMOSPrint FVFAtributs DEFB "--ad-shr" ; Дата FVGetData EX DE,HL LD A,(IX+24) AND 0x1F CALL FVGet8Bit LD (HL),"." INC HL LD A,(IX+24) LD C,(IX+25) LD B,5 .L1 SRL C RRA DJNZ .L1 AND 0x0F CALL FVGet8Bit LD (HL),"." INC HL LD A,(IX+25) ; Год SRL A ADD A,80 .L2 SUB 100 JR NC,.L2 ADD A,100 ; Год CALL FVGet8Bit EX DE,HL RET ; Время FVGetTime EX DE,HL LD A,(IX+23) ; Часы AND 0xF8 RRA RRA RRA CALL FVGet8Bit LD (HL),":" INC HL LD A,(IX+22) LD C,(IX+23) LD B,5 .L1 SRL C RRA DJNZ .L1 AND 0x3F CALL FVGet8Bit EX DE,HL RET FVGet8Bit LD B,0x2F .L1 INC B SUB 10 JR NC,.L1 ADD A,10 LD (HL),B INC HL ADD A,"0" LD (HL),A INC HL RET FVBytes DEFB "bytes" ;[]==========================================================[] InitStatusLine CALL InitCodePage LD A,(ViewMode) OR A JP NZ,HEXstatus ASCIIstatus LD HL,UnWrapT LD DE,94 LD A,(ASCIImode) OR A JR Z,.L1 LD HL,WrapT LD DE,100 .L1 LD (ASCIIx),DE ; позиция печати по X LD (ASCIIm),HL ; адрес текста который печатать MAKEWINDOW WINSUBOBJ.WOBIND W_HORIZLINE 0,241,640 W_FILL 2,243,636,12,COLORI.HIGHGRAY W_HORIZLINE 2,255,638 W_BUTTON 0,242,80,14 W_TEXT 18,245,COLORP.HIGHGRAY,"F1 About" W_BUTTON 80,242,80,14 W_ADRTEXT 94,245,COLORP.HIGHGRAY,0 ASCIIx: EQU $ - 7 ASCIIm: EQU $ - 2 W_BUTTON 160,242,80,14 W_TEXT 184,245,COLORP.HIGHGRAY,"F4 Hex" W_BUTTON 400,242,80,14 W_TEXT 422,245,COLORP.HIGHGRAY,"F7 Print" W_BUTTON 480,242,80,14 W_ADRTEXT 504,245,COLORP.HIGHGRAY,0 ASCIIenc1: EQU $ - 2 W_BUTTON 560,242,80,14 W_TEXT 580,245,COLORP.HIGHGRAY,"F10 Quit" W_END RET UnWrapT DZ "F2 UnWrap" WrapT DZ "F2 Wrap " HEXstatus MAKEWINDOW WINSUBOBJ.WOBIND W_HORIZLINE 0,241,640 W_FILL 2,243,636,12,COLORI.HIGHGRAY W_HORIZLINE 2,255,638 W_BUTTON 0,242,80,14 W_TEXT 18,245,COLORP.HIGHGRAY,"F1 About" W_BUTTON 160,242,80,14 W_TEXT 182,245,COLORP.HIGHGRAY,"F4 ASCII" W_BUTTON 240,242,80,14 W_TEXT 258,245,COLORP.HIGHGRAY,"F5 Go to" W_BUTTON 400,242,80,14 W_TEXT 422,245,COLORP.HIGHGRAY,"F7 Print" W_BUTTON 480,242,80,14 W_ADRTEXT 504,245,COLORP.HIGHGRAY,0 ASCIIenc2: EQU $ - 2 W_BUTTON 560,242,80,14 W_TEXT 580,245,COLORP.HIGHGRAY,"F10 Quit" W_END RET ;[]==========================================================[] About MAKEWINDOW WINSUBOBJ.STORE W_MAIN 160,72,320,85 W_FILL 4,2,312,10,COLORP.BLACK W_TEXT 144,3,COLORI.WHITE,"About" W_TEXT 96,18,COLORP.HIGHGRAY,"Flex Navigator File Viewer" W_TEXT 96,28,COLORP.HIGHGRAY,"v\{FLEX_VERS.VIEWER} build \{BUILDDATE}" W_TEXT 18,40,COLORP.HIGHGRAY,"Programming: (C)2000 Enin Anton" W_TEXT 92,50,COLORP.HIGHGRAY,"(C)2021 Mikhaltchenkov Dmitry" W_BUTTON 124,66,72,14 W_TEXT 154,69,COLORP.HIGHGRAY,"Ok" W_END AboutLoop LD IX,FVAboutTab CALL JUMPS.TestCoords SPDSS DSSF.SCANKEY JR Z,AboutLoop LD A,B OR A JR NZ,AboutLoop LD A,E CP 0x1B JR Z,AboutExt CP 0x0D JR Z,AboutExt RES 5,A CP 'O' JR NZ,AboutLoop AboutExt WINDOWCLOSE RET ;[]==========================================================[] ScrollSCRup LD DE,0x241C JR ScrlSCRDnUp ScrollSCRdown LD DE,0x1C24 ; На вход: ; D - Y откуда ; Е - Y куда ScrlSCRDnUp DI PUSH DE SPMOUSE MOUSEF.REFRESH POP DE GETPORT WINSP.CPU1 PUSH AF SETPORT WINSP.CPU1,0x50 LD HL,0x4000 LD BC,320 ACCEL ACCELCMD.SET_BUFFER LD A,0xC0 ACCEL ACCELCMD.OFF ScSCRN1 LD A,D SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.COPY_VERT LD A,(HL) ACCEL ACCELCMD.OFF LD A,E SETPORT WINSP.Y_PORT,,0 ACCEL ACCELCMD.COPY_VERT LD (HL),A ACCEL ACCELCMD.OFF INC HL DEC BC LD A,B OR C JR NZ,ScSCRN1 POP AF SETPORT WINSP.CPU1,,0 EI RET ;[]==========================================================[] InitFPages PUSH HL LD DE,(TempShift) LD HL,(TempShift+2) LD A,D ; Выделяем номер страницы RLA RL L RLA RL L LD A,L EXX LD E,A ; DE - Адрес страницы в списке LD D,HIGH (PagesList) LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 EXX RES 7,D ; Вкл.с 0x4000 SET 6,D POP HL RET TestFPages BIT 7,D RET Z RES 7,D SET 6,D EXX INC E ; DE - Адрес страницы в списке LD A,(DE) ; Тек.страница SETPORT WINSP.CPU1,,0 EXX RET GetFPages PUSH HL RES 6,D EXX LD A,E EXX BIT 7,D RES 7,D JR Z,.L1 INC A .L1 LD L,A SUB A LD H,A SRL L RRA SRL L RRA OR D LD D,A LD (TempShift),DE LD (TempShift+2),HL POP HL RET ;[]==========================================================[] ; Процедура инициализация таблицы процентов InitVProc LD A,0x01 LD (ProcFlag),A ; Флаг вывода процентов LD A,(ViewMode) OR A JR NZ,InProcHex ; Проценты для TextWrap InProcASCII LD HL,(FileLenght) LD DE,(FileLenght+2) LD B,0x19 InProcA PUSH BC CALL SearchUp POP BC RET C DJNZ InProcA JR InitProc ; Проценты для Hex InProcHex LD HL,(FileLenght) LD DE,(FileLenght+2) LD BC,0x0190 OR A SBC HL,BC LD BC,0x0000 EX DE,HL SBC HL,BC EX DE,HL RET C LD A,H OR L OR D OR E RET Z ; Процедура инициализации таблицы процентов ; На вход: ; DEHL - Длина файла - 1 страница InitProc PUSH HL PUSH DE EX DE,HL LD BC,100 ; Длина файла/100 (%) CALL JUMPS.Divis32 LD (Coeff1+1),DE ; Получаем кол-во байт на LD (Coeff2+1),HL ; один процент LD IX,ProcentTab LD HL,0x0000 LD E,L LD D,H LD BC,0x6300 ; Генерим таблицу LD (IX+0x00),L INC IX LD (IX+0x00),H INC IX LD (IX+0x00),E INC IX LD (IX+0x00),D INC IX LD (IX+0x00),C INC IX INC C ; для каждого процента CoeffLoop PUSH BC Coeff1 LD BC,0x0000 ADD HL,BC LD (IX+0x00),L INC IX LD (IX+0x00),H INC IX EX DE,HL Coeff2 LD BC,0x0000 ADC HL,BC EX DE,HL POP BC LD (IX+0x00),E INC IX LD (IX+0x00),D INC IX LD (IX+0x00),C INC IX INC C DJNZ CoeffLoop POP DE POP HL LD (IX+0x00),L ; Макс.процент INC IX LD (IX+0x00),H INC IX LD (IX+0x00),E INC IX LD (IX+0x00),D INC IX LD (IX+0x00),C SUB A LD (ProcFlag),A RET ;[]----------------------------------------------------------[] ; Процедура просчета и печати проценто PrintVProc LD HL,PutProcent PUSH HL ; Выходим на печать LD A,(ProcFlag) OR A LD A,100 RET NZ ; Уже все 100% LD IX,ProcentTab+250 ; Серидина таблицы проц.50% LD HL,(FileShift) ; Текущее смещение LD DE,(FileShift+2) CALL TestProcent ; В какой половине наход.? JR C,LowTest ; <50% LD A,(IX+0x04) RET Z ; =50% LD IX,ProcentTab+375 ; Таблица с 75% CALL TestProcent ; В какой половине наход.? JR C,Test2 ; 50%% OR A RET Z LD BC,-0x0005 ; Ищем вниз по таблице ADD IX,BC ; Нужный процент CALL TestProcent JR Test2 ; X<50% LowTest LD IX,ProcentTab+125 ; Таблица с 25% CALL TestProcent ; В какой половине наход.? JR C,Test2 ; 01%процент TestProcent PUSH HL PUSH DE PUSH BC LD C,(IX+0x00) LD B,(IX+0x01) OR A SBC HL,BC EX DE,HL LD C,(IX+0x02) LD B,(IX+0x03) SBC HL,BC JR NZ,.L1 LD A,D OR E .L1 POP BC POP DE POP HL RET ; Процедура вывода процентов PutProcent LD HL,ProcText PUSH HL LD BC,0x2F00 .L1 INC B SUB 100 JR NC,.L1 ADD A,100 EX AF,AF' LD A,B CP '0' JR Z,.L2 SET 0,C .L2 BIT 0,C JR NZ,.L3 LD A,0x20 .L3 LD (HL),A INC HL EX AF,AF' LD B,0x2F .L4 INC B SUB 10 JR NC,.L4 ADD A,10 EX AF,AF' LD A,B CP '0' JR Z,.L5 SET 0,C .L5 BIT 0,C JR NZ,.L6 LD A,0x20 .L6 LD (HL),A INC HL EX AF,AF' ADD A,'0' LD (HL),A POP HL LD DE,0x0250 LD BC,0x0011 LD A,0x80 JP JUMPS.PrnTxtLnNorm InitCodePage: LD A,0 CodePage EQU $-1 LD L,A ADD A,A ADD A,L ADD A,A ADD A,L LD HL,EncDos ADD A,L LD L,A ADC A,H SUB L LD H,A LD (ASCIIenc1),HL LD (ASCIIenc2),HL LD A,(CodePage) AND A JR NZ,.next LD HL,0 .call: LD (PutLine2),A LD (PutLine2 + 1),HL ; для режима просмотра TEXT LD (DECODE4HEX),A LD (DECODE4HEX + 1),HL ; для режима просмотра HEX RET .next: DEC A LD HL,Table866 JR Z,.next1 LD HL,TableKoi .next1: LD (DecodeSymbol.table),HL LD HL,DecodeSymbol LD A,0xCD JR .call EncDos: DZ "F8 DOS" EncWin: DZ "F8 WIN" EncKoi: DZ "F8 KOI" ProcText DZ " %" ProcFlag DB 0 ASCIImode DB 1 ; при запуске режим TEXT ;[]==========================================================[] include fvtext.a80 include fvhex.a80 include fvprn.a80 ;[]==========================================================[] ASCIItab: DW 80,560, 28,127,%0000000000000000,%0000000000000000,TLineUpMs,TBegFile DW 80,560,128,228,%0000000000000000,%0000000000000000,TLineDwnMs,TEndFile DW 0, 80, 28,228,%0000000000000000,%0000000000000000,TPageUpMs,ScrollLeft DW 560,640, 28,228,%0000000000000000,%0000000000000000,TPageDwnMs,ScrollRght DW 0, 80,242,256,%0000000000000001,%0000000000000000,About,0 DW 80,160,242,256,%0000000000000001,%0000000000000000,ChASCIImode,0 DW 160,240,242,256,%0000000000000001,%0000000000000000,ChViewer,0 DW 400,480,242,256,%0000000000000001,%0000000000000000,FVPrintFile,0 DW 480,560,242,256,%0000000000000001,%0000000000000000,ChCodePage,0 DW 560,640,242,256,%0000000000100001,%0000000000000000,ViewerExit,0 DW 0x8000 HEXtab: DW 80,560, 28,127,%0000000000000000,%0000000000000000,HLineUpMs,HBegFile DW 80,560,128,228,%0000000000000000,%0000000000000000,HLineDwnMs,HEndFile DW 0, 80, 28,228,%0000000000000000,%0000000000000000,HPageUpMs,0 DW 560,640, 28,228,%0000000000000000,%0000000000000000,HPageDwnMs,0 DW 0, 80,242,256,%0000000000000001,%0000000000000000,About,0 DW 160,240,242,256,%0000000000000001,%0000000000000000,ChViewer,0 DW 240,320,242,256,%0000000000000001,%0000000000000000,HGoTo,0 DW 400,480,242,256,%0000000000000001,%0000000000000000,FVPrintFile,0 DW 480,560,242,256,%0000000000000001,%0000000000000000,ChCodePage,0 DW 560,640,242,256,%0000000000100001,%0000000000000000,ViewerExit,0 DW 0x8000 FVAboutTab: DW 284,356,138,152,%0000000000100001,%0000000000000000,AboutExt,0 DW 0,160, 0,256,%0000000000100000,%0000000000000000,AboutExt,0 DW 480,640, 0,256,%0000000000100000,%0000000000000000,AboutExt,0 DW 0,640, 0, 72,%0000000000100000,%0000000000000000,AboutExt,0 DW 0,640,157,256,%0000000000100000,%0000000000000000,AboutExt,0 DW 0x8000 ;[]==========================================================[] INIT_VAR $ SETVAR ViewingFile, 0x30 SETVAR ViewMode, BYTE SETVAR ASCIIaddX, BYTE SETVAR EmptyLines, BYTE SETVAR FileLenght, DWORD ; Длина файла (32бит) SETVAR FileShift, DWORD ; Смещение от начала файла (32бит) SETVAR TempShift, DWORD ; Временная ячейка смещения (32бит) SETVAR FVNextShift, DWORD ; Следующая страница для ASCII (32бит) SETVAR FVMemIndef, BYTE SETVAR FHandle, BYTE SETVAR FVReadLen, DWORD SETVAR ProcentTab, 505