Raw File
zork.3
TITLE TRIVIA startup

.MLLIT==1

TTYCHN==1
SAVCHN==2
MUDCHN==3
DSKCHN==4

A=1
B=2
C=3
TIME=3
NOW=4
XUNAME=5
P=17
VBPTR:	440700,,A
VSBPTR:	140600,,B
DSKDEV:	SIXBIT	/DSK/
MSGDIR:	SIXBIT	/_MSGS_/
BADNAM:	SIXBIT	/ABADBO/
BADDIR:	SIXBIT	/VANISH/
SXUNAM:	BLOCK	2

START:	MOVE	P,[-30,,PDL-1]
	.OPEN	TTYCHN,[SIXBIT /  !TTY/]
	 .LOSE	1000
	.SUSET	[.RXUNAME,,XUNAME]
	HLRZ	A,XUNAME
	CAIN	A,777777
	 JRST	LOGIN
	.CALL	DEATH
	 JRST	CKUSER
	.CALL	[SETZ				; GET FILE LENGTH IN A
		 SIXBIT /FILLEN/
		 MOVEI	DSKCHN
		 SETZM	A]
	 JRST	FAKMSG
	CAIN	A,
	 JRST	FAKMSG
	MOVE	B,BUFPTR
	.IOT	DSKCHN,B
	.CLOSE	DSKCHN,
	MOVE	B,[440700,,BUF]
MSGDTH:	PUSHJ	P,OUTMSG
MSGEND:	CAME	XUNAME,[SIXBIT /TAA/]
	 CAMN	XUNAME,[SIXBIT /MARC/]
	  JRST	WIN
	.BREAK	16,140000
FAKMSG:	MOVE	B,[440700,,MSG]
	.CLOSE	DSKCHN,
	JRST	MSGDTH

CKUSER:	LDB	A,[063600,,XUNAME]
	CAMN	A,[SIXBIT / GUEST/]
	 JRST	CKTIME
	.CALL	DIROPN				; REAL PERSON?
	 JRST	CKTIME				; NOPE
	.CALL	MSGOPN				; REALLY A REAL PERSON?
	 JRST	LOSNAM
	.CLOSE	DSKCHN,

WIN:	.CALL	SAVOPN
	 .VALUE	[ASCIZ /: No SAVE file?

/]
	.IOT	SAVCHN,[-1,,A]
	MOVSI	B,SIXBIT /   MUD/
	ILDB	C,VBPTR
	SUBI	C,40
	DPB	C,VSBPTR
	ILDB	C,VBPTR
	SUBI	C,40
	IDPB	C,VSBPTR
	.ACCES	SAVCHN,[0]

	.CALL	MUDOPN
	 .VALUE	[ASCIZ /: No TS MUDDLE ?

/]
	MOVSI 17,STUFF
	BLT 17,17
	JRST 1

LOSNAM:	MOVE	B,[440700,,NAMMSG]
	PUSHJ	P,OUTMSG
	MOVE	B,[440600,,XUNAME]
	MOVE	C,[440700,,SXUNAM]
SIXLOP:	ILDB	A,B
	JUMPE	A,SIXTOO
	ADDI	A,40
	IDPB	A,C
	JRST	SIXLOP
SIXTOO:	MOVE	B,[440700,,SXUNAM]
	PUSHJ	P,OUTMSG
	MOVE	B,[440700,,NAMEND]
	PUSHJ	P,OUTMSG
	.BREAK	16,160000

LOGIN:	MOVE	B,[440700,,LOGMSG]
	PUSHJ	P,OUTMSG
	.BREAK	16,160000

OFFHOR:	MOVE	B,[440700,,OFFMSG]
	PUSHJ	P,OUTMSG
	.BREAK	16,160000

CKTIME:	.RYEAR	A,
	 LDB	A,[320300,,A]			; IS IT A WEEKEND?
	JUMPE	A,CURFCK
	CAIN	A,6
	 JRST	CURFCK
	.RTIME	A,
	LDB	A,[301400,,A]			; IS IT OFFICE HOURS?
	CAIGE	A,'20
	 CAIGE	A,'09
	  JRST	CURFCK
	.RDATE	A,
	.CALL	HOLOPN				; IS IT A HOLIDAY?
	 JRST	FLUSH

CURFCK:	.CALL	CURFEW
	 JRST	WIN
	.CLOSE	DSKCHN,
	MOVE	B,[440700,,CURMSG]
	PUSHJ	P,OUTMSG
	.BREAK	16,160000

FLUSH:	.CALL	BADBOY
	 JRST	NEWBAD
	.CALL	RFDATE
	 JFCL
	.CALL	RQDATE
	 JFCL	
	.CALL	SFDATE
	 JFCL
	.CLOSE	DSKCHN,
	HLRZ	A,TIME				; DID THE TURKEY TRY <1/2 HR AGO?
	HLRZ	B,NOW
	CAME	A,B
	 JRST	OFFHOR
	SUB	NOW,TIME
	CAIGE	NOW,2400.
	 JRST	LOGOUT
	JRST	OFFHOR

NEWBAD:	.CALL	MAKBAD
	 .LOSE	1000
	.CLOSE	DSKCHN,
	JRST	OFFHOR

LOGOUT:	.VALUE	[ASCIZ /:You don't believe me, eh?  That makes me MAD!!!
:LOGOUT
/]
	.BREAK	16,160000

OUTMSG:	PUSH	P,A			; GIVEN BYTE POINTER, PRINT FROB OUT
	PUSH	P,C
	PUSH	P,B
	MOVEI	C,
OUTLOP:	ILDB	A,B			; LIKES BYTE POINTER TO FROB IN B
	CAIE	A,0
	 CAIN	A,3
	  JRST	OUTEND
	AOJA	C,OUTLOP
OUTEND:	POP	P,B			; GET BYTE POINTER IN B, COUNT IS IN C
	.CALL	[SETZ
		 SIXBIT	/SIOT/
		 MOVEI	TTYCHN
		 B
		 SETZ	C]
	 .LOSE	1000
	POP	P,C
	POP	P,A
	POPJ	P,

DEATH:	SETZ
	SIXBIT /OPEN/
	MOVSI	.BII
	MOVEI	DSKCHN
	DSKDEV
	[SIXBIT /ZORK/]
	[SIXBIT /DEATH/]
	SETZ	MSGDIR

DIROPN:	SETZ
	SIXBIT /OPEN/
	MOVSI	.BII
	MOVEI	DSKCHN
	DSKDEV
	[SIXBIT /.FILE./]
	[SIXBIT /(DIR)/]
	SETZ	XUNAME

MSGOPN:	SETZ
	SIXBIT /OPEN/
	MOVSI	.BII
	MOVEI	DSKCHN
	DSKDEV
	MSGDIR
	XUNAME
	SETZ	XUNAME

MUDOPN:	SETZ
	SIXBIT /OPEN/
	MOVSI	4
	MOVEI	MUDCHN
	DSKDEV
	[SIXBIT /TS/]
	B
	SETZ [SIXBIT /SYS1/]

SAVOPN:	SETZ
	SIXBIT /OPEN/
	MOVSI	6
	MOVEI	SAVCHN
	DSKDEV
	[SIXBIT /MADADV/]
	[SIXBIT /SAVE/]
	SETZ [SIXBIT /MADMAN/]

HOLOPN:	SETZ
	SIXBIT /OPEN/
	MOVSI	.BII
	MOVEI	DSKCHN
	DSKDEV
	[SIXBIT /HLIDAY/]
	A
	SETZ [SIXBIT /COMBAT/]

CURFEW:	SETZ
	SIXBIT /OPEN/
	MOVSI	.BII
	MOVEI	DSKCHN
	DSKDEV
	[SIXBIT /TRIVIA/]
	[SIXBIT /CURFEW/]
	SETZ MSGDIR

BADBOY:	SETZ
	SIXBIT /OPEN/
	MOVSI	.BII
	MOVEI	DSKCHN
	DSKDEV
	BADNAM
	XUNAME
	SETZ	BADDIR

RFDATE:	SETZ
	SIXBIT /RFDATE/
	MOVEI	DSKCHN
	SETZM	TIME

RQDATE:	SETZ
	SIXBIT /RQDATE/
	SETZM	NOW

SFDATE:	SETZ
	SIXBIT /SFDATE/
	MOVEI	DSKCHN
	SETZ	NOW

MAKBAD:	SETZ
	SIXBIT /OPEN/
	MOVSI	1
	MOVEI	DSKCHN
	DSKDEV
	BADNAM
	XUNAME
	SETZ	BADDIR

STUFF:	OFFSET -.
	2
	.CALL LOAD
	.VALUE
	.IOT MUDCHN,A
	.CLOSE MUDCHN,
	ADDI	A,1
	JRST @A

LOAD:	SETZ
	SIXBIT /LOAD/
	1000,,-1
	SETZI MUDCHN

	OFFSET 0

MSG:	ASCIZ	/
ZORK is down for repairs.  Sigh.
/
OFFMSG:	ASCIZ	/
ZORK is not available during office hours (9 AM to 8 PM, Eastern time.)
/
NAMMSG:	ASCIZ	/
Losers with the name /
NAMEND:	ASCIZ	/ cannot play ZORK!
/
LOGMSG:	ASCIZ	/
Losers who are not logged in cannot play ZORK!
/
CURMSG:	ASCIZ	/
The system is VERY loaded.  Please try again later.
/
BUF:	BLOCK	200
BUFPTR:	BUF-.,,BUF

PDL:	BLOCK 30

END	START
back to top