zxuno-git/render.asm

505 lines
6.5 KiB
NASM

showPage:
xor a
ld (show_offset), a
ld a, 1
ld (cursor_pos), a
call renderScreen
call showCursor
showLp:
call controls
dup 5
halt
edup
jr showLp
controls:
call inkey
cp 0
ret z
cp 'q'
jr z, pageCursorUp
cp 'a'
jr z, pageCursorDown
cp 13
jp z, selectItem
cp 'b'
jr z, historyBack
cp 'o'
jp z, openURI
ret
historyBack:
ld hl, server
ld de, path
ld bc, port
call openPage
jp showPage
pageCursorUp:
ld a, (cursor_pos)
dec a
cp 0
jp z, pageScrollUp
push af
call hideCursor
pop af
ld (cursor_pos), a
call showCursor
ret
pageCursorDown:
ld a, (cursor_pos)
inc a
cp 21
jp z, pageScrollDn
push af
call hideCursor
pop af
ld (cursor_pos), a
call showCursor
ret
pageScrollDn:
ld hl, (show_offset)
ld de, 20
add hl, de
ld (show_offset), hl
ld a, 1
ld (cursor_pos), a
call renderScreen
call showCursor
ret
pageScrollUp:
ld a, (show_offset)
and a
ret z
ld hl, (show_offset)
ld de, 20
sub hl, de
ld (show_offset), hl
ld a, 20
ld (cursor_pos), a
call renderScreen
call showCursor
ret
selectItem:
ld a, (cursor_pos)
dec a
ld b, a
ld a, (show_offset)
add b
ld b, a
call findLine
ld a, h
cp l
ret z
ld a, (hl)
cp '1'
jr z, downPg
cp '0'
jr z, downPg
cp '9'
jp z, downFl
cp '7'
jr z, userInput
ret
userInput:
call cleanIBuff
call input
call extractInfo
ld hl, file_buffer
call findEnd
ld a, 9
ld (hl), a
inc hl
ex hl, de
ld hl, iBuff
ld bc, 64
ldir
ld hl, hist
ld de, path
ld bc, 322
ldir
ld hl, server_buffer
ld de, file_buffer
ld bc, port_buffer
call openPage
jp showPage
downPg:
push af
call extractInfo
ld hl, hist
ld de, path
ld bc, 322
ldir
ld hl, server_buffer
ld de, file_buffer
ld bc, port_buffer
call openPage
pop af
cp '1'
jp z,showPage
cp '0'
jp z, showText
ret
downFl:
call extractInfo
call cleanIBuff
ld hl, file_buffer
call findFnme
jp isImage
dfl:
ld hl, file_buffer
call findFnme
ld de, iBuff
ld bc, 65
ldir
call input
ld hl, server_buffer
ld de, file_buffer
ld bc, port_buffer
call makeRequest
ld hl, iBuff
call downloadData
call showCursor
ret
isImage:
ld a, (hl)
and a
jr z, checkImg
push hl
call pushRing
pop hl
inc hl
jr isImage
imgExt db ".scr", 0
imgExt2 db ".SCR", 0
checkImg:
ld hl, imgExt
call searchRing
cp 1
jr z, loadImage
ld hl, imgExt2
call searchRing
cp 1
jr z, loadImage
jp dfl
loadImage:
ld hl, server_buffer
ld de, file_buffer
ld bc, port_buffer
call makeRequest
ld hl, #4000
call loadData
ld c, #ff
xor a
out (c), a
wKey: call inkey
or a
jr z, wKey
jp showPage
findFnme:
push hl
pop de
ffnmlp:
ld a, (hl)
cp 0
jr z, ffnmend
cp '/'
jr z, fslsh
inc hl
jp ffnmlp
fslsh:
inc hl
push hl
pop de
jp ffnmlp
ffnmend:
push de
pop hl
ret
showType:
ld a, (cursor_pos)
dec a
ld b, a
ld a, (show_offset)
add b
ld b, a
call findLine
ld a, h
cp l
jr z, showTypeUnknown
ld a, (hl)
cp 'i'
jr z, showTypeInfo
cp '9'
jr z, showTypeDown
cp '1'
jr z, showTypePage
cp '0'
jr z, showTypeText
cp '7'
jr z, showTypeInput
jr showTypeUnknown
showTypeInput:
ld hl, type_inpt
call showTypePrint
call showURI
ret
showTypeText:
ld hl, type_text
call showTypePrint
call showURI
ret
showTypeInfo:
ld hl, type_info
jp showTypePrint
showTypePage:
ld hl, type_page
call showTypePrint
call showURI
ret
showTypeDown:
ld hl, type_down
call showTypePrint
call showURI
ret
showURI:
call extractInfo
ld hl, server_buffer
call printZ64
ld hl, file_buffer
call printZ64
ret
showTypeUnknown:
ld hl, type_unkn
jp showTypePrint
showTypePrint:
push hl
ld b, 21
ld c, 0
call gotoXY
ld hl, cleanLine
call printZ64
ld b, 21
ld c, 0
call gotoXY
pop hl
call printZ64
ret
renderHeader:
call clearScreen
ld bc, 0
call gotoXY
ld hl, head
call printZ64
ld d, 0
call inverseLine
ret
renderScreen:
call renderHeader
ld b, 20
renderLp:
push bc
ld a, 20
sub b
ld b, a
ld a, (show_offset)
add b
ld b, a
call renderLine
pop bc
djnz renderLp
ret
; b - line number
renderLine:
call findLine
ld a, h
or l
ret z
ld a, (hl)
and a
ret z
inc hl
call printT64
call mvCR
ret
; B - line number
; HL - pointer to line(or zero if doesn't find it)
findLine:
ld hl, page_buffer
fndLnLp:
ld a, b
and a
ret z
ld a, (hl)
and a ; Buffer ends?
jr z, fndEnd
cp 10 ; New line?
jr z, fndLnNL
inc hl
jp fndLnLp
fndLnNL:
dec b
inc hl
jp fndLnLp
fndEnd:
ld hl, 0
ret
extractInfo:
ld a, (cursor_pos)
dec a
ld b, a
ld a, (show_offset)
add b
ld b, a
call findLine
ld a, h
cp l
ret z
call findNextBlock
inc hl
ld de, file_buffer
call extractCol
inc hl
ld de, server_buffer
call extractCol
inc hl
ld de, port_buffer
call extractCol
ret
extractCol:
ld a, (hl)
cp 0
jr z, endExtract
cp 09
jr z, endExtract
cp 13
jr z, endExtract
ld (de), a
inc de
inc hl
jr extractCol
endExtract:
xor a
ld (de), a
ret
findNextBlock:
ld a, (hl)
cp 09 ; TAB
ret z
cp 13 ; New line
ret z
cp 0 ; End buffer
ret z
inc hl
jp findNextBlock
show_offset db 0
display $
cursor_pos db 1
head db " UGophy - ZX-UNO Gopher client v. 0.5 (c) Alexander Sharikhin", 13,0
cleanLine db " ",0
type_inpt db "User input: ", 0
type_text db "Text file: ", 0
type_info db "Information ", 0
type_page db "Page: ", 0
type_down db "File to download: ", 0
type_unkn db "Unknown type ", 0
display $
file_buffer defs 255 ; URI path
server_buffer defs 70 ; Host name
port_buffer defs 7 ; Port
end_inf_buff equ $