Google
 

Trailing-Edge - PDP-10 Archives - bb-x130a-sb - gripe.mac
There are 10 other files named gripe.mac in the archive. Click here to see a list.
	TITLE	GRIPE - PROGRAM FOR REGISTERING COMPLAINTS  %4(43)
	SUBTTL	D BLACK/CMF/PFC		17-APR-74



;COPYRIGHT (C) 1974,1978,1979 BY
;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
;
;
;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
;ONLY  IN  ACCORDANCE  WITH  THE  TERMS  OF  SUCH LICENSE AND WITH THE
;INCLUSION OF THE ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE OR ANY  OTHER
;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
;OTHER PERSON.  NO TITLE TO AND OWNERSHIP OF THE  SOFTWARE  IS  HEREBY
;TRANSFERRED.
;
;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT  NOTICE
;AND  SHOULD  NOT  BE  CONSTRUED  AS A COMMITMENT BY DIGITAL EQUIPMENT
;CORPORATION.
;
;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY  OF  ITS
;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.

VGRIPE==4
VEDIT==43
VMINOR==0
VWHO==0

;***COPYRIGHT 1971,1972,1973,1974 DIGITAL EQUIPMENT CORP., MAYNARD, MASS.***

	SEARCH	C		;USE C AS UNIVERSAL
	SALL			;CLEAN LISTINGS

.JBVER==137
	LOC	.JBVER
	BYTE	(3)VWHO(9)VGRIPE(6)VMINOR(18)VEDIT
	RELOC


;PARAMETERS

ND	CMPRIV,157B8	;DEFAULT PROTECTION OF COMPLAINT FILE


;FLAG BITS
ALL6==1		;PRINT 6 SIXBIT BYTES

;AC'S

F=0
T=1
T1=T+1
T2=T1+1
T3=T2+1
P1=5
P2=6
C=7
P=17

;IO CHANNELS

TTY==1
DSK==2

;SPECIAL CHARS

CNTRLC==3		;CONTROL C
TERMCH==33		;TERMINATING CHARACTER
;REVISION HISTORY

;%3(34) APR 72

;35	ADD MONITOR NAME AND CPU SERIAL NUMBER TO HEADING
;36	CHANGE SIGN-ON MESSAGE TO DEPRESS KEY RATHER THAN TYPE
;37	CHANGE TO USE C AS UNIVERSAL
;40	PROTECT AGAINST CCL ENTRY
;41	HANDLE ^Z; REMOVE 175,176
;42	HANDLE - NUMBERS TO BE SAFE
;43	FIX BUG IN TIME OUTPUT ROUTINE
GRIPE:	JFCL			;IGNORE CCL START
	SKIPL	HELPFG		;SEE IF IN HERE YET
	JRST	GRIPE1		;YES--PROCEED
	SKIPN	.SGNAM		;NO--GET ARGUMENTS USER CALLED
	MOVE	.SGNAM,['GRIPE ']  ;  US WITH
	MOVEM	.SGNAM,LBLOCK+.RBNAM
	MOVEM	.SGPPN,LBLOCK+.RBPPN  ;SO WE CAN FIND WHAT STRUCTURE
	SKIPN	.SGLOW		;  GRIPE.SAV IS ON
	MOVSI	.SGLOW,'SAV'
	MOVEM	.SGLOW,LBLOCK+.RBEXT	;  WE NEED A GOOD F/S TO USE
	MOVEI	0,.RBDEV	;TO WRITE THE COMPLAINTS ON
	MOVEM	0,LBLOCK+.RBCNT
	SETZB	.SGDEV-1,.SGDEV+1
	SKIPN	.SGDEV
	MOVSI	.SGDEV,'SYS'
	OPEN	DSK,.SGDEV-1	;TRY TO OPEN
	  JRST	GRIPE1		;IF FAIL, USE DSK
	LOOKUP	DSK,LBLOCK	;TRY TO LOOKUP
	  JRST	GRIPE1		;IF FAIL, USE DSK
	SKIPE	T,LBLOCK+.RBDEV	;GET STR IF PRESENT
	MOVEM	T,DSKDEV	;AND STORE FOR LATER

GRIPE1:	RESET
	MOVE	P,PDL
	INIT	TTY,
	SIXBIT	.TTY.
	IBUF
	  EXIT
	INIT	DSK,
DSKDEV:	SIXBIT	.DSK.
	XWD	OBUF,
	  JRST	NODSK

	MOVX	T,%LDQUE	;GET COMPLAINT NUMBER
	GETTAB	T,		;FROM MONITOR
	  MOVE	T,[3,,3]	;GET DEFAULT IF NOT AVAILABLE
	MOVEM	T,CMPPPN	;GOT IT--STORE
	MOVEI	P1,5
RETRY:	MSTIME	T,		;TIME OF DAY IN MILLISECS
	MOVEM	T,TIME
	IDIVI	T,^D20		;REDUCE UNITS
	IDIVI	T,^D1000	;RANDOM NUMBER LE 999
	MOVE	T,T1
	PUSHJ	P,FILDPT	;CREATE FILE NAME
	MOVSI	T1,(SIXBIT .CMP.)
	SETZ	T2,
	MOVE	T3,CMPPPN	;PPN FOR COMPLAINT BASKET
	LOOKUP	DSK,T		;SEE IF THIS NAME EXISTS
	  TRNE	T1,-1		;SKIP IF NO SUCH FILE
	JRST	CANT
	MOVSI	T2,(CMPRIV)	;SET IN DEFAULT PRIVILEGE
	MOVE	T3,CMPPPN
	ENTER	DSK,T		;SEE IF CAN ENTER SUCH A FILE
	  JRST	CANT		;NO, SEE WHATS WRONG
	DATE	T,		;TODAYS DATE
	MOVEM	T,DATE
	PUSHJ	P,DATIM
;PRINT MONITOR NAME AND CPU SERIAL NUMBER
	PUSHJ	P,SPACE
	MOVEI	C,5		;5 WORDS OF CONFIG DATA
	MOVE	P2,[XWD .GTCNF,0]	;SWAPPED GETTAB ARGUMENT
CNFLOP:	MOVS	T,P2
	GETTAB	T,
	  JRST	NONAME
	MOVEM	T,CONFIG(P2)	;STORE PART OF NAME
	AOS	P2
	SOJG	C,CNFLOP	;COUNT AND GET NEXT
	MOVEI	T,CONFIG
	PUSHJ	P,MSG		;PRINT MONITOR NAME

NONAME:	MOVEI	T,[ASCIZ / Cpu/]
	PUSHJ	P,MSG
	MOVE	T,[ %CNSER]	;GET SERIAL NUMBER
	GETTAB	T,
	  JRST	TYJOB
	PUSHJ	P,DECOUT	;PRINT SERIAL NUMBER
TYJOB:	MOVEI	T,[ASCIZ . Job.]
	PUSHJ	P,MSG
	PJOB	T,
	PUSHJ	P,DECOUT
	PUSHJ	P,SPACE
	GETLIN	T,
	JUMPE	T,NOTTY
	PUSHJ	P,SIXOUT
NOTTY:	PUSHJ	P,SPACE
	GETPPN	T,
	  JFCL
	MOVEM	T,PPN
	HLRZS	T
	PUSHJ	P,OCTOUT
	PUSHJ	P,COMMA
	HRRZ	T,PPN
	PUSHJ	P,OCTOUT
	PUSHJ	P,SPACE
	HRROI	T,.GTNM1
	GETTAB	T,
	 JRST	YES		;FORGET IT IF NOT IMPLEMENTED
	PUSHJ	P,FRCSIX
	HRROI	T,.GTNM2
	GETTAB	T,
	 JRST	YES
	SKIPE	T		;AVOID TRAILING SPACES
	PUSHJ	P,FRCSIX	;PRINT E.G. "NAME"
	PUSHJ	P,CRLF
YES:	OUTSTR	[ASCIZ .
Yes? .]
	AOSG	HELPFG
	OUTSTR	[ASCIZ . (Depress ESCape key when through)
.]
CHLOOP:	PUSHJ	P,TTI		;GET NEXT CHAR
	CAIE	T,.CHCNZ	;SEE IF EOF,
	CAIN	T,TERMCH	;SKIP IF NOT TERMINATING CHAR
	JRST	ENDIT
	CAIN	T,15		;SEE IF CARRIAGE RETURN
	JRST	CHLOOP		;YES--IGNORE
	CAIL	T,12		;SEE IF END OF LINE
	CAILE	T,14		; ..
	JRST	CHLP1		;NO--GO OUTPUT
	CAIE	T,12		;SEE IF LINE FEED
	PUSHJ	P,CRLF		;NO--ISSUE BLANK LINE
	PUSHJ	P,CRLF		;END THIS LINE
	JRST	CHLOOP		;GO FOR NEXT CHARACTER
CHLP1:	PUSHJ	P,CHOUT		;OUTPUT CHAR
	JRST	CHLOOP

ENDIT:	PUSHJ	P,CRLF
	PUSHJ	P,CRLF
	PUSHJ	P,CRLF
	PUSHJ	P,CRLF
	CLOSE	DSK,
	RELEAS	DSK,
	RELEAS	TTY,
	OUTSTR	[ASCIZ .
Thank you
.]
	MONRT.
	EXIT
CANT:	HRRZS	T1
	CAIN	T1,ERFBM%	;SKIP IF FILE BEING MODIFIED
	JRST	MODER
	CAIN	T1,ERNRM%	;SKIP UNLESS NO ROOM IN COMPLAINT AREA
	JRST	NOROOM
	CAIN	T1,ERIPP%
	JRST	NOUFD
	JRST	NOWRT

MODER:	SOJG	P1,NOROO1
NOWRT:	MOVEI	T,[ASCIZ .
? Sorry, can't write in complaint area.]
	JRST	ERREX

NOROOM:	SOJLE	P1,NRMEX
NOROO1:	MOVEI	T,1
	SLEEP	T,
	JRST	RETRY

NRMEX:	MOVEI	T,[ASCIZ .
? Sorry, complaint basket is full.]
	JRST	ERREX

NODSK:	MOVS	T,DSKDEV	;GET DEVICE USED
	CAIN	T,'DSK'		;SEE IF DSK
	JRST	NODSK1		;YES--THAT'S THE BEST WE CAN DO
	MOVSI	T,'DSK'		;NO--GO TRY DSK
	MOVEM	T,DSKDEV	; ..
	JRST	GRIPE1		; ..
NODSK1:	MOVEI	T,[ASCIZ .
? Sorry, can't open DSK.]
	JRST	ERREX

NOUFD:	MOVEI	T,[ASCIZ .
? Sorry, no UFD for complaint basket.]
ERREX:	OUTSTR	(T)
	OUTSTR	[ASCIZ \, please call the operator.
\]
	EXIT
FILDPT:	MOVSI	T2,(SIXBIT .CMP.)
	MOVE	T3,[POINT 6,T2,17]
	PUSHJ	P,FILDP1
	MOVE	T,T2
	POPJ	P,

FILDP1:	IDIVI	T,^D10
	HRLM	T1,(P)
	SKIPE	T
	PUSHJ	P,FILDP1
	HLRZ	T,(P)
	ADDI	T,20
	IDPB	T,T3
	POPJ	P,
DATIM:	MOVE	T,TIME		;TIME OF DAY IN MILLISECS.
	IDIVI	T,^D60000
	IDIVI	T,^D60
	PUSH	P,T1		;SAVE MINUTES
	PUSHJ	P,DECOU2
	POP	P,T
	PUSHJ	P,DECOU2
	PUSHJ	P,SPACE2
	MOVE	T,DATE
	IDIVI	T,^D31		;THE USUAL DATE PRINTER
	PUSH	P,T
	MOVEI	T,1(T1)		;DAY OF MONTH
	PUSHJ	P,DECOU2
	POP	P,T
	IDIVI	T,^D12		;MONTH AND YEAR
	PUSH	P,T
	MOVE	T1,MONTAB(T1)
	MOVEM	T1,DATEMP
	SETZM	DATEMP+1	;FOR ASCIZ, DDTOUT
	MOVEI	T,DATEMP
	PUSHJ	P,MSG
	POP	P,T
	MOVEI	T,^D64(T)	;YEAR
	JRST	DECOU2
FRCSIX:	TLOA	F,ALL6	;FORCE PRINTING OF ALL BYTES
SIXOUT:	TLZ	F,ALL6	;STOP ON 00
	MOVE	T1,T
	MOVE	T2,[POINT 6,T1]
SIXOU1:	TLNN	T2,770000
	POPJ	P,
	ILDB	T,T2
	TLNN	F,ALL6		;SKIP TEST IF PRINTING ALL 6
	JUMPE	T,CPOPJ
	ADDI	T,40
	PUSHJ	P,CHOUT
	JRST	SIXOU1

COMMA:	MOVEI	T,","
	JRST	CHOUT

CRLF:	JSP	T,MSG
	ASCIZ .
.

SPACE2:	PUSHJ	P,SPACE
SPACE:	MOVEI	T," "
	JRST	CHOUT

MSG:	MOVE	T1,T
	HRLI	T1,440700
MSGL:	ILDB	T,T1
	JUMPE	T,CPOPJ
	PUSHJ	P,CHOUT
	JRST	MSGL
DECOU2:	SKIPL	T
	CAILE	T,11
	JRST	DECOUT
	PUSH	P,T
	MOVEI	T,"0"
	PUSHJ	P,CHOUT
	POP	P,T
DECOUT:	SKIPA	T2,[^D10]
OCTOUT:	MOVEI	T2,^D8
	JUMPL	T,[PUSH  P,T
		   MOVEI T,"-"
		   PUSHJ P,CHOUT
		   POP   P,T
		   JRST  .+1]
RDXOUT:	IDIVI	T,(T2)
	MOVMS	T1
	HRLM	T1,(P)
	SKIPE	T
	PUSHJ	P,RDXOUT
	HLRZ	T,(P)
	ADDI	T,"0"
CHOUT:	SOSG	OBUF+2
	OUTPUT	DSK,
	IDPB	T,OBUF+1
CPOPJ:	POPJ	P,

TTI:	SOSG	IBUF+2
	IN	TTY,
	  SKIPA
	SKIPA	T,[TERMCH]
	ILDB	T,IBUF+1
	CAIN	T,CNTRLC	;SKIP IF NOT CONTROL C
	MONRT.
	POPJ	P,
;STORAGE

MONTAB:	ASCII /-Jan-/
	ASCII /-Feb-/
	ASCII /-Mar-/
	ASCII /-Apr-/
	ASCII /-May-/
	ASCII /-Jun-/
	ASCII /-Jul-/
	ASCII /-Aug-/
	ASCII /-Sep-/
	ASCII /-Oct-/
	ASCII /-Nov-/
	ASCII /-Dec-/

PDL:	IOWD	17,PDLIST

CMPPPN:	BLOCK	1
HELPFG:	-1

	XLIST		;LITERALS
	LIT
	LIST

LBLOCK:	BLOCK	1+.RBDEV
OBUF:	BLOCK	3
IBUF:	BLOCK	3
PDLIST:	BLOCK	20
PPN:	BLOCK	1
TIME:	BLOCK	1
DATE:	BLOCK	1
CONFIG:	BLOCK	5
CONEND:	Z
DATEMP:	BLOCK	2
	END	GRIPE