NEW
  AUTO 3,1
				.LIST OFF
				.OP	65C02
				.OR	$2000
				.TF bin/man
*--------------------------------------
				.INB inc/macros.i
				.INB inc/mli.i
				.INB inc/a2osx.i
				.INB inc/libtui.i
*--------------------------------------
				.DUMMY
				.OR ZPBIN
ZS.START
hFileBuf		.BS 1
hLineBuf		.BS 1

TimeOut			.BS 1

hCTX			.BS 1
hSCR			.BS 1
hTBOX			.BS 1

BufSize			.BS 2
ZPLinePtr		.BS 2
ZPPtr1			.BS 2
ZPPtr2			.BS 2
ZPPtr3			.BS 2
ZS.END			.ED
*--------------------------------------
*			File Header (16 Bytes)
*--------------------------------------
CS.START		cld
				jmp (.1,x)
				.DA #$61				6502,Level 1 (65c02)
				.DA #1					BIN Layout Version 1
				.DA #S.PS.F.EVENT		S.PS.F
				.DA #0
				.DA CS.END-CS.START		Code Size (without Constants)
				.DA DS.END-DS.START		Data Segment Size
				.DA #64					Stack Size
				.DA #ZS.END-ZS.START	Zero Page Size
				.DA 0
*--------------------------------------
.1				.DA CS.INIT
				.DA CS.RUN
				.DA CS.DOEVENT
				.DA	CS.QUIT

L.LIBTUI		.DA LIBTUI

L.ENV.MANPATH	.DA ENV.MANPATH
L.FILE.INDEX	.DA FILE.INDEX
L.MSG.ScrTitle	.DA MSG.ScrTitle

L.MSG.USAGE		.DA MSG.USAGE
L.MSG.CRLF		.DA MSG.CRLF
L.MSG.NULL		.DA MSG.NULL
L.MSG.GOTO		.DA MSG.GOTO	
L.MSG.OK		.DA MSG.OK		
L.MSG.ERROR		.DA MSG.ERROR	
				.DA 0
*--------------------------------------
CS.INIT			>LDYA L.LIBTUI
                >SYSCALL LoadLib
                bcs .9

                sta hLIBTUI

.9
CS.INIT.RTS		rts
*--------------------------------------
CS.RUN.USAGE	>LDYA L.MSG.USAGE
				>SYSCALL PutS
				lda #E.SYN
				sec
				rts
*--------------------------------------
CS.RUN			>LDYAI 256
				>SYSCALL GetMem
				bcs CS.INIT.RTS

				>STYA ZPLinePtr
				stx hLineBuf
				
				lda #1
				>SYSCALL ArgV
				bcc .1
				
				>LDYA L.FILE.INDEX

.1				jsr CS.GetLink
				bcs CS.RUN.USAGE
				
				jsr CS.GetFile
				bcs CS.INIT.RTS

				jsr CS.Scr.Init
				bcs CS.INIT.RTS
*--------------------------------------
CS.RUN.LOOP0	jsr CS.Scr.SetBuf
				jsr CS.Scr.SetStatusOkErr
*--------------------------------------
CS.RUN.LOOP		>SLEEP 

				lda hSCR
                >LIBCALL hLIBTUI,LIBTUI.Exec
                bcs CS.RUN.LOOP.9

				tay
				beq CS.RUN.LOOP			No Event

				cmp #3
				beq CS.RUN.LOOP.9

				cmp #EV.HL.SELECTED
				bne .1

				>LEA.G LinkBuf
				jsr CS.GetLink
				
				jsr CS.Scr.SetStatusGoto
				bcc CS.RUN.LOOP

				rts

.1				cmp #EV.HL.PRESSED
				bne CS.RUN.LOOP
				
				jsr CS.GetFile
				jsr CS.Scr.SetStatusOkErr
				bcc CS.RUN.LOOP0

CS.RUN.LOOP.9	rts
*--------------------------------------
CS.DOEVENT		lda (pEvent)
				bpl .9					is it a TIMER event?

				lda TimeOut
				beq .9

				dec TimeOut

.9				sec						do not discard TIMER event
				rts
*--------------------------------------
CS.QUIT			lda hLineBuf
				jsr .7
				
				lda hFileBuf
				jsr .7
				
				lda hCTX
				beq .1
				
				>LIBCALL hLIBTUI,LIBTUI.Close

.1				lda hLIBTUI
                beq .2

                >SYSCALL UnloadLib

.2				clc
				rts

.7				beq .8

				>SYSCALL FreeMem
				
.8				rts
*--------------------------------------
CS.Scr.Init		>LIBCALL hLIBTUI,LIBTUI.Init
                bcs .99

                sta hCTX

				>PUSHA					hCTX
                >PUSHBI S.OBJ.F.bTitle+S.OBJ.F.bStatus
                >LIBCALL hLIBTUI,LIBTUI.NewScrn
                bcs .99

                sta hSCR

				jsr CS.Scr.SetTitle
				jsr CS.Scr.SetStatus

				>PUSHB hSCR
                >PUSHBI 0    			X1
                >PUSHBI 0    			Y1
                >PUSHBI 80    			W
                >PUSHBI 22    			H
                lda hFileBuf
                >SYSCALL GetMemPtr
                >PUSHYA
                >PUSHW BufSize
                >PUSHBI 0				F
                >LIBCALL hLIBTUI,LIBTUI.NewTBox
.99             bcs .9

				sta hTBOX

                >LIBCALL hLIBTUI,LIBTUI.Activate
				bcs .9

				>PUSHB hTBOX
                >PUSHBI S.OBJ.pVar
                >PUSHEA.G LinkBuf
                >LIBCALL hLIBTUI,LIBTUI.SetProp

.9              rts
*--------------------------------------
CS.Scr.SetTitle	>PUSHB hSCR
                >PUSHBI S.OBJ.pTITLE
                >PUSHW L.MSG.ScrTitle
                >LIBCALL hLIBTUI,LIBTUI.SetProp
				rts
*--------------------------------------
CS.Scr.SetBuf	>PUSHB hTBOX
				>PUSHBI S.OBJ.pBuf
                lda hFileBuf
				>SYSCALL GetMemPtr
				>PUSHYA
                >LIBCALL hLIBTUI,LIBTUI.SetProp
				bcs .9
				
				>PUSHB hTBOX
				>PUSHBI S.OBJ.BufSize
				>PUSHW BufSize
                >LIBCALL hLIBTUI,LIBTUI.SetProp
				
.9				rts
*--------------------------------------
CS.Scr.SetStatusGoto
				>PUSHEA.G SCR.StatusBuf
				>PUSHW L.MSG.GOTO
				>PUSHEA.G PathBuf
				>PUSHEA.G HtagBuf
				>PUSHBI 4
				>SYSCALL SPrintF
				bra CS.Scr.SetStatus
*--------------------------------------
CS.Scr.SetStatusOkErr
				bcc .1

				pha
				>PUSHEA.G SCR.StatusBuf
				>PUSHW L.MSG.ERROR
				pla
				pha
				>PUSHA
				>PUSHBI 1
				>SYSCALL SPrintF
				jsr CS.Scr.SetStatus
				pla
				sec
				rts

.1				>PUSHEA.G SCR.StatusBuf
				>PUSHW L.MSG.OK
				>PUSHBI 0
				>SYSCALL SPrintF
*--------------------------------------
CS.Scr.SetStatus
				>PUSHB hSCR
                >PUSHBI S.OBJ.pSTATUS
                >PUSHEA.G SCR.StatusBuf
                >LIBCALL hLIBTUI,LIBTUI.SetProp
				rts
*--------------------------------------
* [[text]host:port/path#htag]
* [#htag]text]
*--------------------------------------
CS.GetLink		>STYA ZPPtr1

				>LEA.G PathBuf
				>STYA ZPPtr2
				
				>LEA.G HTagBuf
				>STYA ZPPtr3

				lda #0
				sta (ZPPtr2)
	
				>PUSHW L.ENV.MANPATH
				>PUSHW ZPPtr2
				>SYSCALL GetEnv
				
				ldy #$ff
				
.1				iny
				lda (ZPPtr2),y
				bne .1
			
.2				jsr CS.GetCharPtr1
				beq .4
				
				cmp #'#'
				beq .3
				
				sta (ZPPtr2),y
				iny
				bra .2
				
.3				lda #0

.4				sta (ZPPtr2),y

				ldy #$ff

.5				iny
				jsr CS.GetCharPtr1
				sta (ZPPtr3),y
				bne .5

				clc

.9				rts
*--------------------------------------
CS.GetCharPtr1	lda (ZPPtr1)
				beq .8
				
				inc ZPPtr1
				bne .8
				
				inc ZPPtr1+1
				
.8				rts
*--------------------------------------
CS.GetFile		>LEA.G PathBuf
				>SYSCALL LoadTxtFile
				bcs .9
		
				stx hFileBuf
				iny
				bne .1
				
				inc
				
.1				>STYA BufSize

.9				rts
*--------------------------------------
CS.END
LIBTUI          .AZ "libtui"
hLIBTUI         .BS 1
ENV.MANPATH		.AZ "MANPATH"
FILE.INDEX		.AZ "index"
*--------------------------------------
MSG.ScrTitle	.CZ "A2osX-MAN - UP/DOWN: Scroll, LEFT/RIGHT: Prev/Next link, <Ctrl-Q>uit"
*--------------------------------------
MSG.USAGE		.CS "Usage : MAN <manfile>[#htag]"
MSG.CRLF		.CS "\r\n"
MSG.NULL		.HS 00
MSG.GOTO		.CZ "CR: Goto %s#%s"
MSG.OK			.CZ "Ok"
MSG.ERROR		.CZ "Error: $%h"
*--------------------------------------
				.DUMMY
				.OR 0
DS.START
LinkBuf			.BS 32
PathBuf			.BS MLI.MAXPATH+1
HTagBuf			.BS 32
SCR.StatusBuf	.BS 80
DS.END			.ED
*--------------------------------------
MAN
SAVE usr/src/bin/man.s
ASM
