	.title	k11sho	do the show command in an overlay
	.ident	/2.0.01/

;	31-Jan-84  08:28:16  Brian Nelson
;
;	Remove SHOW code from K11CMD.MAC for placement into an overlay.
;	Had not realized how large Kermit was getting.





	.if ndf, K11INC
	.ift
	.include	/IN:K11MAC.MAC/
	.include	/IN:K11CDF.MAC/
	.endc

	.enabl	lc
	.enabl	gbl
	.psect	$code

	.sbttl	the show command



c$show::$name	<SHO>
	calls	getcm0	,<argbuf,#sholst>
	tst	r0
	bmi	110$
	jsr	pc	,@r1
	return

110$:	message	<Unknown SHOW topic>,cr
	return


sho$al:	message
	call	sho$at
	call	sho$bl
	call	sho$de
	call	sho$df
	call	sho$dl
	call	sho$es
	call	sho$fi
	call	sho$ha
	call	sho$li
	call	sho$pa
	call	sho$pk
	call	sho$ph
	call	sho$pr
	call	sho$ps
	call	sho$rf
	call	sho$rx
	call	sho$so
	call	sho$ti
	call	sho$ve
	message
	return



	$cmglob	=	0

	command	sholst	,ALL	,3	,sho$al
	command	sholst	,BINARY-TYPE,3	,sho$bt
	command	sholst	,BLOCK_CHECK_TYPE,3,sho$bl
	command	sholst	,BLOCK-CHECK-TYPE,3,sho$bl
	command	sholst	,CONSOLE,3	,sho$co
	command	sholst	,DATE	,3	,sho$da
	command	sholst	,DEBUG	,3	,sho$de
	command	sholst	,DEFAULT,3	,sho$df
	command	sholst	,DELAY	,3	,sho$dl
	command	sholst	,DIRECTORY,3	,sho$df
	command	sholst	,ESCAPE	,3	,sho$es
	command	sholst	,FILETYPE,3	,sho$fi
	command	sholst	,HANDSHAKE,3	,sho$ha
	command	sholst	,LINE	,3	,sho$li
	command	sholst	,PACKET	,3	,sho$pk
	command	sholst	,PARAMETERS,4	,sho$pa
	command	sholst	,PARITY	,3	,sho$pr
	command	sholst	,PAUSE	,3	,sho$ps
	command	sholst	,PHONE	,3	,sho$ph
	command	sholst	,RECORD_FORMAT,3,sho$rf
	command	sholst	,RECORD-FORMAT,3,sho$rf
	command	sholst	,RELEASE_NOTES,3,sho$rl
	command	sholst	,RSX	,3	,sho$rx
	command	sholst	,START-OF-PACKET,3,sho$so
	command	sholst	,START_OF_PACKET,3,sho$so
	command	sholst	,TIME	,3	,sho$ti
	command	sholst	,VERSION,3	,sho$ve
	command	sholst	,DIAL	,3	,sho$dp
	command	sholst

sho$dp:	tst	(sp)+			; Show DIAL is a special case
	jmp	xxsdia			; where we load an adjacent overlay

	global	<xxsdia>

	.sbttl	routines for the show command
	.enabl	lsb

sho$de:	tst	trace			; any debugging turned on now ?
	bne	10$			; yes
	message	<No debugging or logging is active>,cr
	br	100$			; exit

10$:	message	<Debug file is >
	print	#logfil
	clr	r0			; index := 0
	message

20$:	tst	200$(r0)		; end of the list yet ?
	beq	100$			; yes, bye
	print	205$(r0)		; print the header
	bit	200$(r0),trace		; see if a bit is turned on
	beq	30$			; no
	message	<enabled>,cr		; say so then
	br	40$			; next please
30$:	message	<disabled>,cr		; if off then also say so
40$:	tst	(r0)+			; next please
	br	20$			; all done yet ?

100$:	return				; simple


	.Save
	.psect	$Pdata,d
200$:	.word	log$co	,log$fi	,log$pa	,log$st	,0
205$:	.word	210$	,220$	,230$	,240$
210$:	.asciz	/Remote connection logging /
220$:	.asciz	/File opens and  creations /
230$:	.asciz	/Packet logging to logfile /
240$:	.asciz	/State  logging to logfile /
	.even
	.restore




sho$li:	tstb	ttdial			; show the terminal show
	bne	300$			; something is there
	message	<No remote line has been set>,cr
	return
300$:	message	<Current remote link device name is >
	print	#ttdial			; print it and exit
	message
	message	<The current speed for the link  is >
	calls	ttspee	,<#ttdial>
	sub	#20	,sp		; try to format the response a little
	mov	sp	,r1		; allocate a buffer and point to it
	deccvt	r0,r1,#4		; convert to decimal, 4 wide
	print	r1	,#4		; print it
	add	#20	,sp		; pop the buffer
	message	< baud>,cr		; and finish off the message
	return

	.dsabl	lsb



	.sbttl	show time and version
	.enabl	lsb

sho$dy::calls	ascdat	,<#errtxt,#0>
	print	#errtxt
	MESSAGE	< >
	calls	asctim	,<#errtxt,#0>
	print	#errtxt
	message
	return


sho$ti:	calls	asctim	,<#errtxt,#0>
	message	<The time is >
	print	#errtxt
	message
	return

sho$da:	calls	ascdat	,<#errtxt,#0>
	message	<The date is >
	print	#errtxt
	message
	return

sho$df:	message	<Directory for send opens and receive creates: >
	tstb	defdir
	beq	10$
	print	#defdir
	message
	return
10$:	message	<none>,cr
	return


sho$ve::message	<Kermit-11 >
	sub	#40	,sp		; allocate a buffer
	mov	sp	,r1		; point to it
	movb	#release,(r1)+		; is this test or for real
	deccvt	#baselev,r1		; convert baseline level to ascii
	add	#6	,r1		; skip past it
	movb	#'.	,(r1)+		; a dot
	deccvt	#edit	,r1		; the edit number now
	mov	sp	,r1		; point back to the buffer
	calls	cvt$$	,<r1,#14.,#377>	; drop all the extra spaces out
	print	r1,r0			; simple
	print	#lasted
	message				; a crlf
	add	#40	,sp
	return


	.dsabl	lsb

	global	<lasted,release,baselev,edit>

	.sbttl	show filetype and show block-check
	.enabl	lsb


sho$fi:	cmpb	$image	,#text		; text files
	bne	10$			; not text
	message	<Filetype set to ASCII>,cr
	br	20$
10$:	cmpb	$image	,#binary	; binary ?
	bne	20$			; really ?
	message	<Filetype set to BINARY (fixed 512, no carriage control)>,cr
20$:	tst	filprot
	beq	25$
	message	<Files will not be superceded>,cr
25$:	return
	


sho$bl:	movb	setrec+p.chkt,r0	; get the checksum type please
	bne	30$			; it's been set already
	movb	#defchk	,r0		; no, set the default checktype in
30$:	sub	#'1	,r0		; convert to an index for printing
	asl	r0			; times 2 for word addressing
	print	100$(r0)		; and say so
	return


	.save
	.psect	$Pdata,d
100$:	.word	110$,120$,130$
110$:	.asciz	/1-Character-Checksum/<cr><lf>
120$:	.asciz	/2-Character-Checksum/<cr><lf>
130$:	.asciz	/3-Character-CRC-CCITT/<cr><lf>
	.even
	.restore

	.dsabl	lsb






	.sbttl	show parameters and show escape
	.enabl	lsb

sho$es::mov	conesc	,r1
	bne	10$
	mov	#con$es	,r1
10$:	add	#100	,r1		; echo it back out
	mov	r1	,-(sp)		; allocate a buffer
	mov	sp	,r1		; point to it
	message	<Connection escape character set to ^>
	print	r1	,#1		; simple
	message
	tst	(sp)+			; pop buffer and exit
	return				; bye


sho$pa:	message	<SEND  packet  eol character  >
	movb	conpar+p.eol,r0
	octout	r0
	message	<   (octal)>,cr
	message	<SEND  maximum  packet  size  >
	movb	conpar+p.spsiz,r0
	decout	r0
	message
	message	<SEND/RECEIVE packet timeout  >
	movb	conpar+p.time,r0
	decout	r0
	message
	message	<RETRY  maximum for  packets  >
	decout	maxtry			; retry count
	message
	return

	global	<conpar	,maxtry>

	.dsabl	lsb



	.sbttl	show packet statistics
	.enabl	lsb

c$stat::
sho$pk:	sub	#120	,sp		; /43/ Allocate a buffer please
	print	#300$			; /43/ A header
	clr	r3			; /43/ Current item to Dump
	mov	#27.	,r4		; /43/ Number items to dump
10$:	mov	sp	,r5		; /43/ And a pointer to it
	tst	pcnt.r+2(r3)		; /43/ Anything there to dump?
	bne	15$			; /43/ Yes
	tst	pcnt.s+2(r3)		; /43/ No, what about SENT packets?
	beq	90$			; /43/ No, skip the whole thing
15$:	mov	r5	,r1		; /43/ Fill the buffer with spaces
	mov	#110	,r2		; /43/ Count for the fill
20$:	movb	#40	,(r1)+		; /43/ Stuff a space
	sob	r2	,20$		; /43/ And go back for more
	mov	r3	,r1		; /43/ Current TYPE
	beq	30$			; /43/ So skip TYPE field
	asr	r1			; /43/ Divide by two
	asr	r1			; /43/ Again
	add	#100	,r1		; /43/ Get the letter type now
	movb	r1	,(r5)+		; /43/ Insert into the buffer
	br	40$			; /43/ Insert data now
30$:	tstb	(r5)+			; /43/ First entry is NULL
40$:	add	#5	,r5		; /43/ Skip over a couple spaces
	mov	#pcnt.s	,r1		; /43/ SENT packet count
	call	200$			; /43/ Convert double quantity
	mov	#pcnt.r	,r1		; /43/ RECEIVED packet count
	call	200$			; /43/ Convert double quantity
	mov	totp.s	,r1		; /43/ Total SENT packet count
	call	200$			; /43/ Convert double quantity
	mov	totp.r	,r1		; /43/ Total RECEIVED packet count
	call	200$			; /43/ Convert double quantity
	movb	#CR	,(r0)+		; /43/ Insert carriage control
	movb	#LF	,(r0)+		; /43/ Insert carriage control
	clrb	@r0			; /43/ All done, .asciz
	mov	sp	,r0		; /43/ Now DUMP it
	print	r0			; /43/ Simple
90$:	add	#4	,r3		; /43/ Move up to next entry
	sob	r4	,10$		; /43/ More to do ?
					; /43/ No, dump character counts
	print	#310$			; /43/ A header
	message	<Characters Sent: >	; /43/
	mov	sp	,r4		; /43/ Buffer address
	mov	#charout,r1		; /43/ Data characters in
	call	190$			; /43/ Print it
	message	<    Received: >	; /43/ Data characters in
	mov	#charin	,r1		; /43/ Point to it
	call	190$			; /43/ And dump
	message				; /43/ CRLF
	mov	#times+2,r1		; /43/
	tst	(r1)+			; /43/ A real clock going ?
	beq	100$			; /43/ No, may be rt11 today
	message	<Time in seconds: >	; /43/
	call	190$			; /43/
	message				; /43/ CRLF
	call	brate			; /43/ Data rates also
100$:	add	#120	,sp		; /43/ Pop local buffer and exit
	return				; /43/ Bye


190$:	clr	r2			; /43/ Convert for character counts
	mov	r4	,r0		; /43/ Buffer address
	call	$cddmg			; /43/ Convert 32 bit integer
	clrb	@r0			; /43/ .asciz
	print	r4			; /43/ Dump and exit
	return				; /43/ Bye


200$:	add	r3	,r1		; /43/ Get address to convert
	clr	r2			; /43/ Insure no leading zeroes
	mov	r5	,r0		; /43/ Set buffer address
	call	$cddmg			; /43/ Convert
	add	#14	,r5		; /43/ Position for next time
	return				; /43/ Exit


	.save
	.psect	$Pdata,D
300$:	.ascii	/Type  Last Sent   Last Rec    Tot Sent    Tot Rec/
	.byte	cr,lf,cr,lf,0
310$:	.ascii	/Total character count, less packet framing, but after data/
	.byte	cr,lf
	.ascii	/formatting (ie, includes repeat compression and prefixing)/
	.byte	cr,lf
	.ascii	/from last transaction./
	.byte	cr,lf,cr,lf,0
	.even
	.restore

	.dsabl	lsb

	global	<pcnt.r,pcnt.s,totp.r,totp.s,$cddmg>



	.sbttl	More for STAT and SHO PACKETS
	.enabl	lsb			; /56/

brate:	mov	charout+2,r1		; /43/ Compute effective baud rate
	mov	charout+0,r0		; /43/ for the last transaction.
	add	charin+2,r1		; /43/ Don't care which way it was
	adc	r0			; /43/ Overflow?
	add	charin	,r0		; /43/ Done
	div	times+6,r0		; /43/ At last (forget the 16 high)
	message	<Physical data  rate: >	; /43/ A header
	decout	r0			; /43/ Dump the DATA
	message	< char/second>,cr	; /43/
	mov	fileout+2,r1		; /43/ Compute effective baud rate
	mov	fileout+0,r0		; /43/ for the last transaction.
	add	filein+2,r1		; /43/ Don't care which way it was
	adc	r0			; /43/ Overflow?
	add	filein	,r0		; /43/ Done
	div	times+6,r0		; /43/ At last (forget the 16 high)
	message	<File transfer  rate: >	; /43/ A header
	decout	r0			; /43/ Dump the DATA
	message	< char/second>,cr	; /43/
	mov	rdrate+2,r1		; /56/
	beq	100$			; /56/
	mov	rdrate+0,r0		; /56/
	div	rdrate+4,r0		; /56/
	message	<Characters per read: >	; /56/
	decout	r0			; /56/
	message				; /56/
100$:	return				; /43/

	.dsabl	lsb			; /56/

	global	<rdrate>		; /56/


	.sbttl	more show command (delay and pause)



sho$ps:	message	<Pause time before packet transmission >
	decout	pauset
	message
	return

sho$dl:	message	<Delay time  before sending  SEND-INIT >
	decout	sendly
	message
	return


	.enabl	lsb

sho$rf:	cmpb	df$rfm	,#fb$stm	; r.var or stream ascii today ?
	bne	10$
	message	<Created files will be Stream Ascii>,cr
	return
10$:	message	<Created files will be Variable with implied CRLF>,cr
	return


	global	<df$rfm	,fb$stm	,pauset	,sendly>

	.dsabl	lsb

	.sbttl	more show
	.enabl	lsb


sho$ha:	movb	handch	,r0		; any handshake garbage today?
	beq	100$			; no
	cmpb	r0	,#'Q&37		; xonning today ?
	bne	10$			; no
	message	<Handshake character set to XON (^Q)>,cr
	return
10$:	cmpb	r0	,#cr		; carriage return turnaround?
	bne	20$
	message	<Handshake character set to CR (^M)>,cr
	return
20$:	cmpb	r0	,#'S&37		; xoff is it ? (??)
	bne	30$			; no
	message	<Handshake character set to XOFF (^S)>,cr
	return
30$:
100$:	return
	
	.dsabl	lsb



	.sbttl	show parity

sho$pr:	mov	parity	,r0
	message	<Parity is set to >
	asl	r0
	print	parlst(r0)
	clr	r0
	return

	.save
	.psect	$pdata

parlst:	.word	50$,10$,20$,30$,40$,50$
10$:	.asciz	/ODD/<cr><lf>
20$:	.asciz	/EVEN/<cr><lf>
30$:	.asciz	/MARK/<cr><lf>
40$:	.asciz	/SPACE/<cr><lf>
50$:	.asciz	/NONE/<cr><lf>
	.restore

	.assume	par$od	eq	1
	.assume	par$ev	eq	2
	.assume	par$ma	eq	3
	.assume	par$sp	eq	4
	.assume	par$no	eq	5

	global	<parity>


	.sbttl	show rsx

	.enabl	lsb

sho$rx:	message	<TC.DLU is set to >
	tstb	tcdlu
	bne	10$
	message	<current system setting.>,cr
	br	20$
10$:	decout	tcdlu
	message
20$:	clr	r0
	return


sho$co:	tst	proflg
	beq	40$
	message	<PRO/350 console is set to >
	tst	con8bit
	bne	30$
	message	<7 bit mode>,cr
	br	40$
30$:	message	<8 bit mode>,cr
40$:	clr	r0
	return

sho$at:	message	<Attribute packet transmission >
	tst	sendat
	bne	50$
	message	<DISABLED>,cr
	br	60$
50$:	message	<ENABLED>,cr
60$:	return

	.dsabl	lsb


sho$so:	message	<RECEIVE start of packet character is ^>
	mov	recsop	,-(sp)
	add	#100	,@sp
	mov	sp	,r0
	print	r0
	message
	message	<SEND    start of packet character is ^>
	mov	sensop	,@sp
	add	#100	,@sp
	mov	sp	,r0
	print	r0
	tst	(sp)+
	message
	return

	.sbttl	show binary filetype list
	.enabl	lsb


sho$bt:	message	<Default binary filetype list: >
	mov	bintyp	,r1
	tstb	@r1			; is there anything there at all
	bne	10$			; yes
	message	<none>,cr		; no
	br	100$			; exit
10$:	mov	bintyp	,r1		; get the address of the list
20$:	mov	#5	,r2		; the list is simply a concatenated
	message				; string of filetypes rather than
30$:	tstb	@r1			; the more general one of a list
	beq	40$			; of pointers.
	message	< *>			; format it into *.xyz
	print	r1	,#4		; dump current one
	add	#4	,r1		; next
	sob	r2	,30$		; and print the next one
	br	20$			; insert a newline
40$:	message				; insert a <cr><lf>
100$:	return				; and exit



	.dsabl	lsb
	.enabl	lsb

sho$ph:	message	<Current defined phone numbers>,cr
	message
	mov	#pnhead	,r2
	tst	(r2)			; /48/ Anything there?
	bne	10$			; /48/ Yes
	message	<None defined>,cr	; /48/ No
	br	20$			; /48/ Exit
10$:	mov	(r2)	,r2		; /48/ Get pointer to next
	beq	20$			; /48/ Nothing
	mov	r2	,r3		; /48/ Copy pointer
	add	#2	,r3		; /48/ Point to the text
	print	r3			; /48/ Dump
	message				; /48/ CR/LF
	br	10$			; /48/ Next please
20$:	message				; /48/ Done with phone numbers
100$:	return

	.dsabl	lsb

	global	<pnhead>		; /48/ Listhead for phone numbers



	.sbttl	show RELEASE_NOTES
	.enabl	lsb

sho$rl::print	#200$
	print	#210$
	print	#220$
	return

	.save
	.psect	$pdata	,d
200$:
.byte	CR,LF
.ascii	/ A problem was discovered with attribute  packet  processing/<CR><LF>
.ascii	/in versions of Kermit-11  prior to  3.49.  This implies that/<CR><LF>
.ascii	/versions 3.49 or later of Kermit-11 will not  be  completely/<CR><LF>
.asciz	/compatable  with older versions. The best workaround until a/<CR><LF>
210$:
.ascii	/copy of version 3.49 or later can be obtained is to  disable/<CR><LF>
.ascii	/attribute   packet   processing  with  the  SET  NOATTRIBUTE/<CR><LF>
.ascii	/command, and manually use the SET FILE TYPE  FIXED  (or  SET/<CR><LF>
.asciz	/FILE  BINARY)  command  on  both  Kermit-11's  in  order  to/<CR><LF>
220$:
.ascii	/transfer binary files (such as  task  images).  For  further/<CR><LF>
.ascii	/information please see K11.BWR and K11INS.DOC /<CR><LF>
.byte	CR,LF,0

	.even
	.restore
	.dsabl	lsb



	.sbttl	the copy command
	.enabl	lsb

c$copy::$name	<COP>
	call	gettwo			; insure the 'to:' argument is here
	tst	r0			; did it work out ok ?
	bne	100$			; we really could have done this in
	mov	argbuf	,r2		; the command macro.
	calls	copy	,<cmdbuf,r2,#0>	; do the rename now
	tst	r0			; did it work ?
	bne	40$			; yes
	decout	r1			; print the block count
	print	#210$			; and a header
	print	r2			; and the file copied to
	print	#200$			; a cr/lf
	br	100$			; bye
40$:	direrr	r0			; no, print the error message

100$:	return

	.save
	.psect	$Pdata,d
200$:	.byte	cr,lf,0
210$:	.asciz	/ blocks copied /
	.even
	.restore
	.dsabl	lsb

	global	<argbuf	,cmdbuf	,gettwo>





	.sbttl	the rename command

c$rena::$name	<REN>
	call	gettwo			; insure a 'to:' argument is here
	tst	r0			; did it work out ok?
	bne	100$			; no
	mov	argbuf	,r2		; point to the arguement buffer
	calls	rename	,<cmdbuf,r2,#0>	; do the rename now
	tst	r0			; did it work ?
	beq	100$			; yes
	direrr	r0			; no, print the error message

100$:	return

	global	<argbuf	,cmdbuf	,gettwo>



c$del::	$name	<DEL>
	calls	delete	,<argbuf,#0>
	direrr	r0
	return

	global	<argbuf	,cmdbuf>

	.sbttl	get/and or read second command argument
	.enabl	lsb

;	input:	argbuf	command args
;	output:	cmdbuf	first arg
;		argbuf	second arg
;		r0	error code from read if done, else zero


gettwo::save	<r1,r2>			; save temps please
	mov	argbuf	,r2		; point to the arguement buffer
	tstb	@r2			; anything there (should be) ?
	beq	100$			; no
	dec	r2
10$:	inc	r2			; next byte
	tstb	@r2			; We have to finish parsing this
	beq	20$			; end of it, prompt for 'To:'
	cmpb	@r2	,#40		; find a space yet ?
	bne	10$			; no
	clrb	(r2)+			; yes, make it .asciz
	copyz	argbuf	,cmdbuf		; save the first part of the arg
	br	30$			; got old and new so we are all set

20$:	mov	argbuf	,r2		; point to the 'to:' part to read
	copyz	r2	,cmdbuf		; save the from part
	print	#200$			; and read the rest of it
	calls	echo	,<#0>		; ensure terminal can echo
	calls	kbread	,<r2>		; do it
	tst	r0			; did it work ?
	bne	100$			; no
	calls	cvt$$	,<r2,r1,#377>	; yes, remove all junk
	tst	r0			; anything left ?
	beq	20$			; no
	add	r2	,r0		; yes, make it .asciz
	clrb	@r0			; simple

30$:	copyz	r2	,argbuf		; return arg number two in argbuf
	clr	r0			; no errors please
100$:	unsave	<r2,r1>			; pop temps and exit
	return

	.save
	.psect	$Pdata,D
200$:	.asciz	/To:   /
	.even
	.restore
	.dsabl	lsb



	.end
