flex_nav/plugins/fnviewer/fviewer.a80
savelij13 f428f0b18b FileEditor.flx 1.10
- устранено перепутанные кнопки для нажатий мышью для F7 и F9.
FileViewer.flx 1.06
- добавлено переключение кодировки в режиме HEX просмотра.
FlexNavigaror 1.16.01
- исправлен вылет при создании нового файла по Shift+F4 или просмотр с
  вводом имени по Shift+F3, плагин был не загружен.
2025-07-29 21:58:48 +03:00

1087 lines
20 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; 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 ; <20>à®á¬®âà ¢ 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 ; <20>à®á¬®âà ¢ ⥪áâ¥
CP SC.F8;0x42
JP Z,ChCodePage ; ‘¬¥­  ª®¤®¢®© áâà ­¨æë WIN/DOS/KOI
CP SC.F5;0x3F ; F5
JP Z,HGoTo ; <20>¥à¥å®¤ ­   ¤à¥á ¯®«ì§®¢ â¥«ï
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 ;!!!!!!!!!!!! <20>¥â ¯ ¬ïâ¨
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 ;!!!!!!!!!!!! <20>¥â ¯ ¬ïâ¨
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
; <20>  ¢å®¤:
; 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
;[]==========================================================[]
; <20>à®æ¥¤ãà  ¨­¨æ¨ «¨§ æ¨ï â ¡«¨æë ¯à®æ¥­â®¢
InitVProc LD A,0x01
LD (ProcFlag),A ; ”« £ ¢ë¢®¤  ¯à®æ¥­â®¢
LD A,(ViewMode)
OR A
JR NZ,InProcHex
; <20>à®æ¥­âë ¤«ï 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
; <20>à®æ¥­âë ¤«ï 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
; <20>à®æ¥¤ãà  ¨­¨æ¨ «¨§ æ¨¨ â ¡«¨æë ¯à®æ¥­â®¢
; <20>  ¢å®¤:
; DEHL - „«¨­  ä ©«  - 1 áâà ­¨æ 
InitProc PUSH HL
PUSH DE
EX DE,HL
LD BC,100 ; „«¨­  ä ©« /100 (%)
CALL JUMPS.Divis32
LD (Coeff1+1),DE ; <20>®«ãç ¥¬ ª®«-¢® ¡ ©â ­ 
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
;[]----------------------------------------------------------[]
; <20>à®æ¥¤ãà  ¯à®áç¥â  ¨ ¯¥ç â¨ ¯à®æ¥­â®
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%<X<75%
; <20>à®æ¥¤ãà  ¯®¨áª  ¯à®æ¥­â  ¢¢¥àå ¯® â ¡«¨æ¥
Test1 LD A,(IX+0x04) ; ’¥ªã騩 ¯à®æ¥­â
RET Z ; X=%
RET C ; X<%
CP 100 ; Š®­¥ç­ë© ¯à®æ¥­â
RET Z
LD BC,0x0005 ; ˆé¥¬ ¢¢¥àå ¯® â ¡«¨æ¥
ADD IX,BC ; <20>ã¦­ë© ¯à®æ¥­â
CALL TestProcent
JR Test1
; <20>à®æ¥¤ãà  ¯®¨áª  ¯à®æ¥­â  ¢­¨§ ¯® â ¡«¨æ¥
Test2 LD A,(IX+0x04) ; ’¥ªã騩 ¯à®æ¥­â
RET Z ; X=%
RET NC ; X>%
OR A
RET Z
LD BC,-0x0005 ; ˆé¥¬ ¢­¨§ ¯® â ¡«¨æ¥
ADD IX,BC ; <20>ã¦­ë© ¯à®æ¥­â
CALL TestProcent
JR Test2
; X<50%
LowTest LD IX,ProcentTab+125 ; ’ ¡«¨æ  á 25%
CALL TestProcent ; ª ª®© ¯®«®¢¨­¥ ­ å®¤.?
JR C,Test2 ; 01%<X<25%
JR Test1 ; 25%<X<50%
; <20>à®æ¥¤ãà  â¥áâ¨à®¢ ­¨ï ⥪ã饣® ᬥ饭¨ï
; <20>  ¢å®¤:
; DEHL - ’¥ªã饥 ᬥ饭¨¥
; <20>  ¢ë室:
; Z - ’¥ª.ᬥé=¯à®æ¥­â
; C - ’¥ª.ᬥé<¯à®æ¥­â
; NC - ’¥ª.ᬥé>¯à®æ¥­â
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
; <20>à®æ¥¤ãà  ¢ë¢®¤  ¯à®æ¥­â®¢
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