DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T d

⟦861b1325d⟧ TextFile

    Length: 2942 (0xb7e)
    Types: TextFile
    Names: »disply.c.orig«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Adv/Program/disply.c.orig« 

TextFile

#include "adv.h"

extern int (*nl_proc)();	/* called by prt before writing newline */

static int dlleft;		/* display lines left */
static int fullsize = TRUE;	/* true => top window is full screen */

/*
 * Before prt dumps a newline into the top window, prt calls this
 * routine.  We make sure that there is enough room in the top
 * window, enlarging it if necessary.
 */
dl_newline()
{

	if (fullsize)		/* already as big as possible */
		return;
	if (--dlleft > 0)	/* top window still has room left */
		return;
	Wsize(TopWin, COLS, ROWS);
	fullsize = TRUE;
}

/*
 * Display the current room in the top window.
 */
disply()
{
	register int temp, i;
	register struct room *rp;
	register struct item *ip;
	register char *s;
	static int f1, f2, f3, f4, f5, f6, f7, f8;
	int (*oldnlproc)();

	/*
	 * Fetch the window frame characters if we haven't got them
	 * yet.  (This needs to be done another way; someday I'll
	 * finish rewriting windows.)
	 */
	if (f1 == 0)
		Wgetframe(&f1, &f2, &f3, &f4, &f5, &f6, &f7, &f8);

	/*
	 * Flush pending line (if any).  Switch output to top window,
	 * and clear it.
	 */
	prt(0);			/* Flush pending output */
	CurWin = TopWin;	/* prt() sends to CurWin */
	Wclear(TopWin, 2);
	WAcursor(TopWin, 0, 0);

	/*
	 * We now have TopWin->IYE lines available to us for printing
	 * description text.  Set the newline procedure so that we can
	 * enlarge the top window if necessary.
	 */
	dlleft = TopWin->IYE;
	oldnlproc = nl_proc;
	nl_proc = dl_newline;

	/*
	 * If it's dark, just say so.  Otherwise find all the items
	 * in the room and display their descriptions.
	 */
	if (isdark) {
		prt("I can't see, it's too dark.\n");
		goto cleanup;
	}
	rp = &rooms[rm];
	s = rp->desc;
	if (*s == '*')
		s++;
	else
		prt("I'm in a ");
	prt(s);
	prt(".\n");
	temp = 0;
	for (ip = &items[1]; ip < iteme; ip++) {
		if (ip->rm == rm) {
			if (temp == 0) {
				temp++;
				prt("\nVisible items here: ");
			}
			else
				prt(". ");
			prt(0);		/* fix w_cursor */
			if (TopWin->w_cursor.col + strlen(ip->desc) > COLS-3)
				prt("\n");
			prt(ip->desc);
		}
	}
	if (temp)
		prt(".\n");

	/*
	 * Print the "obvious" exits.
	 */
	temp = 0;
	for (i = 0; i < 6; i++) {
		if (rp->dirs[i]) {
			if (temp == 0) {
				temp++;
				prt("\nObvious exits: ");
			}
			prt(dirs[i]);
			prt(" ");
		}
	}
	if (temp)
		prt("\n");

cleanup:
	/*
	 * Put up a nice bottom border, adjusting the window size to
	 * the number of lines used.  Set the margins so that the
	 * bottom border shows, but the rest is re-"glassed".
	 */
	temp = TopWin->w_cursor.row + 1;
	if (temp < 3)			/* this is a kludge */
		temp = 3;
	if (temp != TopWin->OYE) {	/* avoid work if possible */
		Wsize(TopWin, COLS, temp);
		Wborder(TopWin, '#', '#', '#', '#', '#', f7, f7, f7);
		Wsetmargins(TopWin, 0, 0, COLS, TopWin->OYE - 1);
		fullsize = FALSE;
	}

	/*
	 * Switch output back to the base window.
	 */
	CurWin = BaseWin;
	nl_proc = oldnlproc;		/* restore */
}