- устранено перепутанные кнопки для нажатий мышью для F7 и F9. FileViewer.flx 1.06 - добавлено переключение кодировки в режиме HEX просмотра. FlexNavigaror 1.16.01 - исправлен вылет при создании нового файла по Shift+F4 или просмотр с вводом имени по Shift+F3, плагин был не загружен.
1087 lines
20 KiB
Plaintext
1087 lines
20 KiB
Plaintext
|
||
; 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
|