flex_nav/plugins/fnviewer/fviewer.a80

1082 lines
19 KiB
Plaintext
Raw Permalink 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: 31.05.2025 savelij
LineBuffer := WorkBuffer+0x300
;[]==========================================================[]
JP FileViewer
DZ FLEX_VERS.VIEWER
FileViewer CALL LoadFile
RET C
LD IX,ViewingFile
SUB A
LD (ViewMode),A
LD (ASCIIaddX),A
LD HL,0x0000
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 0x44
JP Z,ViewerExit
LD HL,TViewLoop
PUSH HL
CP 0x3B
JP Z,About
CP 0x3C
JP Z,ChASCIImode
CP 0x3E
JP Z,ChViewer ;<3B>à®á¬®âà ¢ HEX
CP 0x42
JP Z,ChCodePage ;‘¬¥­  ª®¤®¢®© áâà ­¨æë WIN/DOS/KOI
CP 0x41
JP Z,FVPrintFile
CP 0x54
JP Z,ScrollLeft
CP 0x56
JP Z,ScrollRght
CP 87 ;Home
JP Z,THome
CP 81 ;End
JP Z,TEnd
CP 88 ;‘â५ª  ¢¢¥àå
JP Z,TLineUp
CP 82 ;‘â५ª  ¢­¨§
JP Z,TLineDwn
CP 89 ;PageUp
JP Z,TPageUp
CP 83 ;PageDown
JP Z,TPageDwn
LD A,B
AND 0x30
CP 0x30
RET Z
BIT 5,B
RET Z
LD A,D
AND 0x7F
CP 0x57 ;Ctrl+PageUp
JP Z,TBegFile ;¢ ­ ç «® ä ©« 
CP 0x51 ;Ctrl+PageDown
JP Z,TEndFile ;¢ ª®­¥æ ä ©« 
CP 0x19 ;Ctrl+P
JP Z,FVPrintFile
RET
;--------------------------------------------------------------
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 0x44 ;F10
JP Z,ViewerExit
LD HL,HViewLoop
PUSH HL
CP 0x3B
JP Z,About
CP 0x3E ;F4
JP Z,ChViewer ;<3B>à®á¬®âà ¢ ⥪áâ¥
CP 0x3F ;F5
JP Z,HGoTo ;<3B>¥à¥å®¤ ­   ¤à¥á ¯®«ì§®¢ â¥«ï
CP 0x41
JP Z,FVPrintFile
CP 88 ;‘â५ª  ¢¢¥àå
JP Z,FVHLineUp
CP 82 ;‘â५ª  ¢­¨§
JP Z,HLineDwn
CP 89 ;PageUp
JP Z,FVHPageUp
CP 83 ;PageDown
JP Z,HPageDwn
LD A,B
AND 0x30
CP 0x30
RET Z
BIT 5,B
RET Z
LD A,D
AND 0x7F
CP 0x57 ;Ctrl+PageUp
JP Z,HBegFile ;¢ ­ ç «® ä ©« 
CP 0x51 ;Ctrl+PageDown
JP Z,HEndFile ;¢ ª®­¥æ ä ©« 
CP 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
;[]==========================================================[]
ViewingFile DUPL 0x30,0
ViewMode DEFB 0x00
ASCIImode DEFB 0x01
ASCIIaddX DEFB 0x00
EmptyLines DEFB 0x00
FileLenght DUPL 4,0 ; „«¨­  ä ©«  (32¡¨â)
FileShift DUPL 4,0 ; ‘¬¥é¥­¨¥ ®â ­ ç «  ä ©«  (32¡¨â)
TempShift DUPL 4,0 ; ‚६¥­­ ï ï祩ª  ᬥ饭¨ï (32¡¨â)
FVNextShift DUPL 4,0 ; ‘«¥¤ãîé ï áâà ­¨æ  ¤«ï ASCII (32¡¨â)
FVMemIndef DEFB 0x00
FHandle DEFB 0x00
FVReadLen DUPL 4,0
;[]==========================================================[]
ViewerExit LD A,(FVMemIndef)
SPDSS DSSF.FREEMEM
OR A
RET
;[]==========================================================[]
LoadFile CALL JUMPS.SetClock
LD DE,ViewingFile
; SPDSS DSSF.F_FIRST,1,0x37
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,0x1E
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,0x1E
PUSH DE
PUSH AF
CALL C,JUMPS.DOSError ;!!!!!!!!!!!! <20>¥â ¯ ¬ïâ¨
POP AF
POP DE
JP C,LoadExit
LD IX,ProcessView
LD (IX+PROC.MAXL1),E
LD (IX+PROC.MAXH1),D
SUB A
LD (IX+PROC.MAXL2),A
LD (IX+PROC.MAXH2),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,0x5C
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.CURL1)
LD H,(IX+PROC.CURH1)
INC HL
LD (IX+PROC.CURL1),L
LD (IX+PROC.CURH1),H
LD A,H
OR L
JR NZ,.NextPr1
LD L,(IX+PROC.CURL2)
LD H,(IX+PROC.CURH2)
INC HL
LD (IX+PROC.CURL2),L
LD (IX+PROC.CURH2),H
.NextPr1 CALL JUMPS.PrnProcess
RET
;[]----------------------------------------------------------[]
ProcessView DEFW 0x00B2
DEFW 0x0075
DEFW 0x011C
DEFW 0x0000
DEFW 0x0000
DEFW 0x0000
DEFW 0x0000
DEFW 0x0000
DEFW 0x0000
DEFB 0x4F
;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,0x5C
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
CALL JUMPS.SetCMOSPrint
RET
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 LD A,(ViewMode)
OR A
JP NZ,HEXstatus
ASCIIstatus LD HL,UnWrapT
LD DE,0x005E
LD A,(ASCIImode)
OR A
JR Z,.L1
LD HL,WrapT
LD DE,0x0064
.L1 LD (ASCIIx),DE
LD DE,ASCIIm
LD BC,0x0009
LDIR
CALL InitCodePage
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_TEXT 94,245,COLORP.HIGHGRAY,"F2 UnWrap"
ASCIIx: EQU $ - STRLEN("F2 UnWrap") - 6
ASCIIm: EQU $ - STRLEN("F2 UnWrap") - 1
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_TEXT 504,245,COLORP.HIGHGRAY,"F8 DOS"
ASCIIenc: EQU $ - STRLEN("DOS") - 1
W_BUTTON 560,242,80,14
W_TEXT 580,245,COLORP.HIGHGRAY,"F10 Quit"
W_END
RET
UnWrapT DEFB "F2 UnWrap"
WrapT DEFB "F2 Wrap "
EncDos: DEFB "DOS"
EncWin: DEFB "WIN"
EncKoi: DEFB "KOI"
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 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 144,28,COLORP.HIGHGRAY,"v\{FLEX_VERS.VIEWER}"
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
;<3B>  ¢å®¤:
; 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
;[]==========================================================[]
;<3B>à®æ¥¤ãà  ¨­¨æ¨ «¨§ æ¨ï â ¡«¨æë ¯à®æ¥­â®¢
InitVProc LD A,0x01
LD (ProcFlag),A ;”« £ ¢ë¢®¤  ¯à®æ¥­â®¢
LD A,(ViewMode)
OR A
JR NZ,InProcHex
;<3B>à®æ¥­âë ¤«ï 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
;<3B>à®æ¥­âë ¤«ï 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
;<3B>à®æ¥¤ãà  ¨­¨æ¨ «¨§ æ¨¨ â ¡«¨æë ¯à®æ¥­â®¢
;<3B>  ¢å®¤:
; DE+HL - „«¨­  ä ©« -1áâà ­¨æ 
InitProc PUSH HL
PUSH DE
EX DE,HL
LD BC,100 ;„«¨­  ä ©« /100 (%)
CALL JUMPS.Divis32
LD (Coeff1+1),DE ;<3B>®«ãç ¥¬ ª®«-¢® ¡ ©â ­ 
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
;[]----------------------------------------------------------[]
;<3B>à®æ¥¤ãà  ¯à®áç¥â  ¨ ¯¥ç â¨ ¯à®æ¥­â®
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%
;<3B>à®æ¥¤ãà  ¯®¨áª  ¯à®æ¥­â  ¢¢¥àå ¯® â ¡«¨æ¥
Test1 LD A,(IX+0x04) ;’¥ªã騩 ¯à®æ¥­â
RET Z ;X=%
RET C ;X<%
CP 100 ;Š®­¥ç­ë© ¯à®æ¥­â
RET Z
LD BC,0x0005 ;ˆé¥¬ ¢¢¥àå ¯® â ¡«¨æ¥
ADD IX,BC ;<3B>ã¦­ë© ¯à®æ¥­â
CALL TestProcent
JR Test1
;<3B>à®æ¥¤ãà  ¯®¨áª  ¯à®æ¥­â  ¢­¨§ ¯® â ¡«¨æ¥
Test2 LD A,(IX+0x04) ;’¥ªã騩 ¯à®æ¥­â
RET Z ;X=%
RET NC ;X>%
OR A
RET Z
LD BC,-0x0005 ;ˆé¥¬ ¢­¨§ ¯® â ¡«¨æ¥
ADD IX,BC ;<3B>ã¦­ë© ¯à®æ¥­â
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%
;<3B>à®æ¥¤ãà  â¥áâ¨à®¢ ­¨ï ⥪ã饣® ᬥ饭¨ï
;<3B>  ¢å®¤:
; DE+HL - ’¥ªã饥 ᬥ饭¨¥
;<3B>  ¢ë室:
; 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
;<3B>à®æ¥¤ãà  ¢ë¢®¤  ¯à®æ¥­â®¢
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
CALL JUMPS.PrnTxtLnNorm
RET
InitCodePage: LD A,0
CodePage EQU $-1
LD L,A
LD H,0
ADD HL,HL
ADD A,L
LD L,A
LD DE,EncDos
ADD HL,DE
LD DE,ASCIIenc
LD BC,3
LDIR
LD A, (CodePage)
AND A
JR NZ,.next
LD HL,0
.call: LD (PutLine2),A
LD (PutLine2 + 1),HL
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
ProcText DEFB " %",0
ProcFlag DEFB 0x00
ProcentTab DUPL 505,0
;[]==========================================================[]
include fvtext.a80
include fvhex.a80
include fvprn.a80
;[]==========================================================[]
ASCIItab: DEFW 0x0050,0x0230,0x001C,0x007F,0x00,0x0000,TLineUpMs,TBegFile
DEFW 0x0050,0x0230,0x0080,0x00E4,0x00,0x0000,TLineDwnMs,TEndFile
DEFW 0x0000,0x0050,0x001C,0x00E4,0x00,0x0000,TPageUpMs,ScrollLeft
DEFW 0x0230,0x0280,0x001C,0x00E4,0x00,0x0000,TPageDwnMs,ScrollRght
DEFW 0x0000,0x0050,0x00F2,0x0100,0x01,0x0000,About,0x0000
DEFW 0x0050,0x00A0,0x00F2,0x0100,0x01,0x0000,ChASCIImode,0x0000
DEFW 0x00A0,0x00F0,0x00F2,0x0100,0x01,0x0000,ChViewer,0x0000
DEFW 0x0190,0x01E0,0x00F2,0x0100,0x01,0x0000,ChCodePage,0x0000
DEFW 0x01E0,0x0230,0x00F2,0x0100,0x01,0x0000,FVPrintFile,0x0000
DEFW 0x0230,0x0280,0x00F2,0x0100,0x21,0x0000,ViewerExit,0x0000
DEFW 0x8000
HEXtab: DEFW 0x0050,0x0230,0x001C,0x007F,0x00,0x0000,HLineUpMs,HBegFile
DEFW 0x0050,0x0230,0x0080,0x00E4,0x00,0x0000,HLineDwnMs,HEndFile
DEFW 0x0000,0x0050,0x001C,0x00E4,0x00,0x0000,HPageUpMs,0x0000
DEFW 0x0230,0x0280,0x001C,0x00E4,0x00,0x0000,HPageDwnMs,0x0000
DEFW 0x0000,0x0050,0x00F2,0x0100,0x01,0x0000,About,0x0000
DEFW 0x00A0,0x00F0,0x00F2,0x0100,0x01,0x0000,ChViewer,0x0000
DEFW 0x00F0,0x0140,0x00F2,0x0100,0x01,0x0000,HGoTo,0x0000
DEFW 0x01E0,0x0230,0x00F2,0x0100,0x01,0x0000,FVPrintFile,0x0000
DEFW 0x0230,0x0280,0x00F2,0x0100,0x21,0x0000,ViewerExit,0x0000
DEFW 0x8000
FVAboutTab: DEFW 0x011C,0x0164,0x008A,0x0098,0x21,0x0000,AboutExt,0x0000
DEFW 0x0000,0x00A0,0x0000,0x0100,0x20,0x0000,AboutExt,0x0000
DEFW 0x01E0,0x0280,0x0000,0x0100,0x20,0x0000,AboutExt,0x0000
DEFW 0x0000,0x0280,0x0000,0x0048,0x20,0x0000,AboutExt,0x0000
DEFW 0x0000,0x0280,0x009D,0x0100,0x20,0x0000,AboutExt,0x0000
DEFW 0x8000
;[]==========================================================[]