4.4BSD/usr/src/contrib/dungeon/dso1.F

C PRINCR- PRINT CONTENTS OF ROOM
C
C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
C WRITTEN BY R. M. SUPNIK
C
C DECLARATIONS
C
	SUBROUTINE PRINCR(FULL,RM)
	IMPLICIT INTEGER (A-Z)
	LOGICAL QEMPTY,QHERE,FULL
#include "gamestate.h"
#include "rooms.h"
#include "rflag.h"
C
#include "objects.h"
#include "oflags.h"
#include "oindex.h"
#include "advers.h"
#include "flags.h"
C PRINCR, PAGE 2
C
	J=329
C						!ASSUME SUPERBRIEF FORMAT.
	DO 500 I=1,OLNT
C						!LOOP ON OBJECTS
	  IF(.NOT.QHERE(I,RM).OR.(and(OFLAG1(I),(VISIBT+NDSCBT)).NE.
&		VISIBT).OR.(I.EQ.AVEHIC(WINNER))) GO TO 500
	  IF(.NOT.FULL.AND.(SUPERF.OR.(BRIEFF.AND.
&		(and(RFLAG(HERE),RSEEN).NE.0)))) GO TO 200
C
C DO LONG DESCRIPTION OF OBJECT.
C
	  K=ODESCO(I)
C						!GET UNTOUCHED.
	  IF((K.EQ.0).OR.(and(OFLAG2(I),TCHBT).NE.0)) K=ODESC1(I)
	  CALL RSPEAK(K)
C						!DESCRIBE.
	  GO TO 500
C DO SHORT DESCRIPTION OF OBJECT.
C
200	  CALL RSPSUB(J,ODESC2(I))
C						!YOU CAN SEE IT.
	  J=502
C
500	CONTINUE
C
C NOW LOOP TO PRINT CONTENTS OF OBJECTS IN ROOM.
C
	DO 1000 I=1,OLNT
C						!LOOP ON OBJECTS.
	  IF(.NOT.QHERE(I,RM).OR.(and(OFLAG1(I),(VISIBT+NDSCBT)).NE.
&		VISIBT)) GO TO 1000
	  IF(and(OFLAG2(I),ACTRBT).NE.0) CALL INVENT(OACTOR(I))
	  IF(((and(OFLAG1(I),TRANBT).EQ.0)
&		.AND.(and(OFLAG2(I),OPENBT).EQ.0))
&		.OR.QEMPTY(I)) GO TO 1000
C
C OBJECT IS NOT EMPTY AND IS OPEN OR TRANSPARENT.
C
	  J=573
	  IF(I.NE.TCASE) GO TO 600
C						!TROPHY CASE?
	  J=574
	  IF((BRIEFF.OR.SUPERF).AND. .NOT.FULL) GO TO 1000
600	  CALL PRINCO(I,J)
C						!PRINT CONTENTS.
C
1000	CONTINUE
	RETURN
C
	END
C INVENT- PRINT CONTENTS OF ADVENTURER
C
C DECLARATIONS
C
	SUBROUTINE INVENT(ADV)
	IMPLICIT INTEGER (A-Z)
	LOGICAL QEMPTY
#include "gamestate.h"
#include "objects.h"
#include "oflags.h"
C
#include "advers.h"
C INVENT, PAGE 2
C
	I=575
C						!FIRST LINE.
	IF(ADV.NE.PLAYER) I=576
C						!IF NOT ME.
	DO 10 J=1,OLNT
C						!LOOP
	  IF((OADV(J).NE.ADV).OR.(and(OFLAG1(J),VISIBT).EQ.0))
&		GO TO 10
	  CALL RSPSUB(I,ODESC2(AOBJ(ADV)))
	  I=0
	  CALL RSPSUB(502,ODESC2(J))
10	CONTINUE
C
	IF(I.EQ.0) GO TO 25
C						!ANY OBJECTS?
	IF(ADV.EQ.PLAYER) CALL RSPEAK(578)
C						!NO, TELL HIM.
	RETURN
C
25	DO 100 J=1,OLNT
C						!LOOP.
	  IF((OADV(J).NE.ADV).OR.(and(OFLAG1(J),VISIBT).EQ.0).OR.
&		((and(OFLAG1(J),TRANBT).EQ.0).AND.
&		(and(OFLAG2(J),OPENBT).EQ.0))) GO TO 100
	  IF(.NOT.QEMPTY(J)) CALL PRINCO(J,573)
C						!IF NOT EMPTY, LIST.
100	CONTINUE
	RETURN
C
	END
C PRINCO-	PRINT CONTENTS OF OBJECT
C
C DECLARATIONS
C
	SUBROUTINE PRINCO(OBJ,DESC)
	IMPLICIT INTEGER(A-Z)
#include "objects.h"
C
	CALL RSPSUB(DESC,ODESC2(OBJ))
C						!PRINT HEADER.
	DO 100 I=1,OLNT
C						!LOOP THRU.
	  IF(OCAN(I).EQ.OBJ) CALL RSPSUB(502,ODESC2(I))
100	CONTINUE
	RETURN
C
	END