Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-06 - decus/20-153/debug.mac
There are 4 other files named debug.mac in the archive. Click here to see a list.
	TITLE	DEBUG for RPGLIB V1
	SUBTTL	Routine to support the DEBUG verb


;	DEBUG for RPGLIB V1
;
;
;	This routine provides runtime support for the DEBUG verb.
;
;	Copyright (C) 1976, Bob Currier and Cerritos College
;	All rights reserved
;
;
;	Call:
;		MOVEI	16,parameter.address
;		PUSHJ	17,DEBUG.
;
;	Parameters:
;		Word 1:	Byte pointer to result item
;		Word 2:	Byte pointer to factor 1 item
;		Word 3:	0,,pointer to OTFTAB item for file
;		Word 4:
;			Bits 0-1:	00 = Field
;					01 = Table item
;					10 = Array entry
;					11 = Whole array
;			Bit 2:		Factor 1 item is numeric
;			Bits 3-6:	Size of factor 1 item
;			Bits 7-16:	Size of result item
;			Bits 17-26:	Size of array if result is whole array
;			Bit 27:		Result item is numeric
;			Bits 28-35:	Unused
;
;	Returns:
;		Call+1 always
;
;

	SEARCH	RPGPRM, RPGSWI, UUOSYM, MACTEN

	%%LBLP==:%%LBLP
	DEBUG==:DEBUG
	BIS==:BIS

	TA==4				; must match RPGIO
	TB==5				; must match RPGIO
	T1==TAC2
	T2==TAC3
	CNTI==TAC4

	SALL

	TWOSEG
	RELOC	400000
;DEBUG.		Main support routine
;
;
;

	ENTRY	DEBUG.

DEBUG.:	HRRZ	TA,2(PARM)		; get OTFTAB pointer
	LDB	OPTR,OT.BFP		; get pointer to buffer
	HRLI	T1,DETB1.		; get pointer to general info
	HRR	T1,OPTR			; get pointer to buffer into RH
	MOVEI	T2,5(OPTR)		; get pointer to fifth word
	BLT	T1,(T2)			; move basic data to buffer
	MOVE	IPTR,1(PARM)		; get pointer to factor 1 item
	JUMPE	IPTR,DEBG.2		; [163] if none, print indicators then try result item
	LDB	T1,PTIBS.		; get input byte size
	MOVE	T2,[POINT 6,1,11]	; get byte pointer
	ADD	T2,OPTR			; add to buffer pointer
	LDB	CNT,LITSZ.		; get size of item

DEBG.1:	ILDB	CH,IPTR			; get a character
	XCT	CNVTB.-6(T1)		; convert to sixbit
	IDPB	CH,T2			; stash in buffer
	SOJG	CNT,DEBG.1		; loop until done

DEBG.2:	LDB	CNT,OT.BSC		; get buffer size
	SUBI	CNT,31			; adjust for characters we've already output
	ADD	OPTR,[POINT 6,5,5]	; make byte pointer point into buffer
	MOVE	IPTR,[POINT 1,INDBAS]	; get start of indicators
	MOVEI	CNTI,222		; get number of indicators
	MOVE	T1,[POINT 6,INDNM.]	; get start of indicator names

DEBG.3:	CAIG	CNT,3			; room left in buffer?
	  PUSHJ	PP,DEBG11		; no - dump a buffer
	ILDB	T2,IPTR			; get an indicator
	JUMPE	T2,DEBG.4		; if not on then try next one
	ILDB	CH,T1			; get an indicator name
	IDPB	CH,OPTR			; output to buffer
	ILDB	CH,T1			; get another char
	IDPB	CH,OPTR			; output that too
	SETZ	CH,			; get sixbit space
	IDPB	CH,OPTR			; output it
	SUBI	CNT,3			; decrement buffer space count
	SOJG	CNTI,DEBG.3		; loop if any indicators left
	PUSHJ	PP,DEBG.9		; else output a buffer
	JRST	DEBG.8			; and exit

DEBG.4:	IBP	T1			; get past 1 char of name
	IBP	T1			; and the next
	SOJG	CNTI,DEBG.3		; loop if any more
DEBG.7:	PUSHJ	PP,DEBG.9		; else output a buffer and fall thru to DEBG.8
;DEBG.8		Handle output of result item
;
;
;

DEBG.8:	MOVE	IPTR,(PARM)		; get pointer to result item
	JUMPE	IPTR,RET.1		; exit if none
	LDB	OPTR,OT.BFP		; get pointer to buffer
	LDB	T1,OPTYP.		; get type of field
	MOVE	T1,TYPTB.(T1)		; get the name
	MOVEM	T1,(OPTR)		; output to buffer
	MOVE	T1,VALUE.		; get 'VALUE'
	MOVEM	T1,1(OPTR)		; stick that in your buffer too
	SWOFF	FDNUM;			; default to not numeric
	LDB	T1,OPNUM.		; get numeric flag
	SKIPE	T1			; is it?
	  SWON	FDNUM;			; yes - say so
	LDB	CNTI,OPSIZ.		; get size of field
	LDB	CNT,OT.BSC		; get buffer size
	SUBI	CNT,14			; allow for junk we've already output
	ADD	OPTR,[POINT 6,2,11]	; make pointer point to right spot
	LDB	T1,OPTYP.		; get type of field
	CAIN	T1,3			; whole array?
	  JRST	DEBG10			; yes -
	PUSHJ	PP,DEBOUT		; no - output the field

DEBG.9:	PUSH	PP,PARM			; save parameter pointer
	MOVEI	TB,3			; [171] get write flag
	PUSHJ	PP,XFIL			; do some output
	POP	PP,PARM			; restore pointer
	HRRZ	TA,2(PARM)		; get OTFTAB pointer
	MOVEM	TA,CUROTF##		; save in case of SPOUT call
	LDB	T1,OT.DEV		; get device
	CAIL	T1,3			; printer?
	CAILE	T1,5			; console?
	  POPJ	PP,			; no - exit
	PUSH	PP,PARM			; yes - save parm again
	MOVEI	TB,1			; just one space
	PUSHJ	PP,SPOUT		; output a space
	POP	PP,PARM			; restore pointer
	POPJ	PP,			; and exit
;DEBG10		Handle whole array output
;
;
;

DEBG10:	LDB	T2,OPASZ.		; get array size
	PUSHJ	PP,DEBOUT		; output a field
	SOJLE	T2,DEBG.9		; when done, exit
	CAIG	CNT,1			; room for space?
	  PUSHJ	PP,DEBG11		; No output a buffer full
	IBP	OPTR			; output a space
	SOJA	CNT,DEBG10+1		; loop

DEBG11:	PUSH	PP,IPTR			; save a bunch of AC's
	PUSH	PP,CNTI
	PUSH	PP,T1
	PUSH	PP,T2
	PUSHJ	PP,DEBG.9		; output a buffer
	POP	PP,T2
	POP	PP,T1
	POP	PP,CNTI
	POP	PP,IPTR
	HRRZ	TA,2(PARM)		; restore OTFTAB pointer
	LDB	OPTR,OT.BFP		; reget buffer pointer
	HRLI	OPTR,440600		; make into byte pointer
	LDB	CNT,OT.BSC		; get buffer size
	POPJ	PP,			; and exit
;DEBOUT		Routine to output a field
;
;
;

DEBOUT:	SWOFF	FDNEG;			; start as positive
	LDB	T1,PTIBS.		; get byte size

DEBOT1:	ILDB	CH,IPTR			; get a character
	XCT	CNVTB.-6(T1)		; convert to sixbit
	TSWT	FDNUM;			; is this numeric?
	  JRST	DEBOT2			; no -
	CVTSNM	6,CH,CH			; yes - convert to a number
	TLZE	CH,(1B0)		; overpunched "-" ?
	  TSWC	FDNEG;			; yes - flag it

DEBOT2:	IDPB	CH,OPTR			; output character
	SOSG	CNT			; anymore room in buffer?
	  PUSHJ	PP,DEBG11		; no - output a buffer full
	SOJG	CNTI,DEBOT1		; loop until all of field output
	TSWF	FDNUM;			; numeric?
	TSWT	FDNEG;			; and negative?
	  POPJ	PP,			; no - exit
	MOVEI	CH,'-'			; yes - get minus sign
	IDPB	CH,OPTR			; output to buffer
	SUBI	CNT,1			; count it
	POPJ	PP,			; and exit
;Define constants
;
;
;

LITSZ.:	POINT	4,3(PARM),6		; size of factor 1 item
LITNM.:	POINT 	1,3(PARM),2		; numeric flag for factor 1 item
OPSIZ.:	POINT	10,3(PARM),16		; size of result item
OPASZ.:	POINT	10,3(PARM),26		; size of array
OPNUM.:	POINT	1,3(PARM),27		; numeric flag for result item
OPTYP.:	POINT	2,3(PARM),1		; field type of result item

CNVTB.:	JFCL				; SIXBIT/SIXBIT
	LDB	CH,PTR.76##		; ASCII/SIXBIT
	Z
	LDB	CH,PTR.96##		; EBCDIC/SIXBIT

DETB1.:	SIXBIT	/ DEBUG-          INDICATORS ON-/

TYPTB.:	SIXBIT	/ FIELD/
	SIXBIT	/ TABLE/
	SIXBIT	/ FIELD/
	SIXBIT	/ ARRAY/

VALUE.:	SIXBIT	/ VALUE/

INDNM.:	SIXBIT	/010203/
	SIXBIT	/040506/
	SIXBIT	/070809/
	SIXBIT	/101112/
	SIXBIT	/131415/
	SIXBIT	/161718/
	SIXBIT	/192021/
	SIXBIT	/222324/
	SIXBIT	/252627/
	SIXBIT	/282930/
	SIXBIT	/313233/
	SIXBIT	/343536/
	SIXBIT	/373839/
	SIXBIT	/402142/
	SIXBIT	/434445/
	SIXBIT	/464748/
	SIXBIT	/495051/
	SIXBIT	/525354/
	SIXBIT	/555657/
	SIXBIT	/585960/
	SIXBIT	/616263/
	SIXBIT	/646566/
	SIXBIT	/676869/
	SIXBIT	/707172/
	SIXBIT	/737475/
	SIXBIT	/767778/
	SIXBIT	/798081/
	SIXBIT	/828384/
	SIXBIT	/858687/
	SIXBIT	/888990/
	SIXBIT	/919293/
	SIXBIT	/949596/
	SIXBIT	/979899/
	SIXBIT	/H1H2H3/
	SIXBIT	/H4H5H6/
	SIXBIT	/H7H8H9/
	SIXBIT	/L1L2L3/
	SIXBIT	/L4L5L6/
	SIXBIT	/L7L8L9/
	SIXBIT	/LROAOB/
	SIXBIT	/OCODOE/
	SIXBIT	/OFOGOV/
	SIXBIT	/M1M2M3/
	SIXBIT	/M4M5M6/
	SIXBIT	/M7M8M9/
	SIXBIT	/MRL01P/
	SIXBIT	/U1U2U3/
	SIXBIT	/U4U5U6/
	SIXBIT	/U7U8  /


EXTERN	PTIBS., OT.BFP, OT.BSC, OT.DEV, INDBAS, RET.1, XFIL, SPOUT

	END