xref: /dragonfly/games/larn/help.c (revision 86d7f5d3)
1*86d7f5d3SJohn Marino /*	help.c		Larn is copyrighted 1986 by Noah Morgan. */
2*86d7f5d3SJohn Marino /* $FreeBSD: src/games/larn/help.c,v 1.4 1999/11/16 02:57:21 billf Exp $ */
3*86d7f5d3SJohn Marino /* $DragonFly: src/games/larn/help.c,v 1.4 2006/08/26 17:05:05 pavalos Exp $ */
4*86d7f5d3SJohn Marino #include "header.h"
5*86d7f5d3SJohn Marino 
6*86d7f5d3SJohn Marino static void retcont(void);
7*86d7f5d3SJohn Marino static int openhelp(void);
8*86d7f5d3SJohn Marino /*
9*86d7f5d3SJohn Marino  *	help function to display the help info
10*86d7f5d3SJohn Marino  *
11*86d7f5d3SJohn Marino  *	format of the .larn.help file
12*86d7f5d3SJohn Marino  *
13*86d7f5d3SJohn Marino  *	1st character of file:	# of pages of help available (ascii digit)
14*86d7f5d3SJohn Marino  *	page (23 lines) for the introductory message (not counted in above)
15*86d7f5d3SJohn Marino  *	pages of help text (23 lines per page)
16*86d7f5d3SJohn Marino  */
17*86d7f5d3SJohn Marino void
help(void)18*86d7f5d3SJohn Marino help(void)
19*86d7f5d3SJohn Marino {
20*86d7f5d3SJohn Marino 	int i, j;
21*86d7f5d3SJohn Marino #ifndef VT100
22*86d7f5d3SJohn Marino 	char tmbuf[128];		/* intermediate translation buffer when not a VT100 */
23*86d7f5d3SJohn Marino #endif /* VT100 */
24*86d7f5d3SJohn Marino 	if ((j = openhelp()) < 0)	/* open the help file and get # pages */
25*86d7f5d3SJohn Marino 		return;
26*86d7f5d3SJohn Marino 	for (i = 0; i < 23; i++)	/* skip over intro message */
27*86d7f5d3SJohn Marino 		lgetl();
28*86d7f5d3SJohn Marino 	for (; j > 0; j--) {
29*86d7f5d3SJohn Marino 		clear();
30*86d7f5d3SJohn Marino 		for (i = 0; i < 23; i++)
31*86d7f5d3SJohn Marino #ifdef VT100
32*86d7f5d3SJohn Marino 			lprcat(lgetl());	/* print out each line that we read in */
33*86d7f5d3SJohn Marino #else /* VT100 */
34*86d7f5d3SJohn Marino 		{
35*86d7f5d3SJohn Marino 			tmcapcnv(tmbuf, lgetl());
36*86d7f5d3SJohn Marino 			lprcat(tmbuf);
37*86d7f5d3SJohn Marino 		}		/* intercept \33's */
38*86d7f5d3SJohn Marino #endif /* VT100 */
39*86d7f5d3SJohn Marino 		if (j > 1) {
40*86d7f5d3SJohn Marino 			lprcat("    ---- Press ");
41*86d7f5d3SJohn Marino 			standout("return");
42*86d7f5d3SJohn Marino 			lprcat(" to exit, ");
43*86d7f5d3SJohn Marino 			standout("space");
44*86d7f5d3SJohn Marino 			lprcat(" for more help ---- ");
45*86d7f5d3SJohn Marino 			i = 0;
46*86d7f5d3SJohn Marino 			while ((i != ' ') && (i != '\n') && (i != '\33'))
47*86d7f5d3SJohn Marino 				i = getchr();
48*86d7f5d3SJohn Marino 			if ((i == '\n') || (i == '\33')) {
49*86d7f5d3SJohn Marino 				lrclose();
50*86d7f5d3SJohn Marino 				setscroll();
51*86d7f5d3SJohn Marino 				drawscreen();
52*86d7f5d3SJohn Marino 				return;
53*86d7f5d3SJohn Marino 			}
54*86d7f5d3SJohn Marino 		}
55*86d7f5d3SJohn Marino 	}
56*86d7f5d3SJohn Marino 	lrclose();
57*86d7f5d3SJohn Marino 	retcont();
58*86d7f5d3SJohn Marino 	drawscreen();
59*86d7f5d3SJohn Marino }
60*86d7f5d3SJohn Marino 
61*86d7f5d3SJohn Marino /*
62*86d7f5d3SJohn Marino  *	function to display the welcome message and background
63*86d7f5d3SJohn Marino  */
64*86d7f5d3SJohn Marino void
welcome(void)65*86d7f5d3SJohn Marino welcome(void)
66*86d7f5d3SJohn Marino {
67*86d7f5d3SJohn Marino 	int i;
68*86d7f5d3SJohn Marino #ifndef VT100
69*86d7f5d3SJohn Marino 	char tmbuf[128];	/* intermediate translation buffer when not a VT100 */
70*86d7f5d3SJohn Marino #endif /* VT100 */
71*86d7f5d3SJohn Marino 	if (openhelp() < 0)	/* open the help file */
72*86d7f5d3SJohn Marino 		return;
73*86d7f5d3SJohn Marino 	clear();
74*86d7f5d3SJohn Marino 	for (i = 0; i < 23; i++)
75*86d7f5d3SJohn Marino #ifdef VT100
76*86d7f5d3SJohn Marino 		lprcat(lgetl());/* print out each line that we read in */
77*86d7f5d3SJohn Marino #else /* VT100 */
78*86d7f5d3SJohn Marino 	{
79*86d7f5d3SJohn Marino 		tmcapcnv(tmbuf, lgetl());
80*86d7f5d3SJohn Marino 		lprcat(tmbuf);
81*86d7f5d3SJohn Marino 	}			/* intercept \33's */
82*86d7f5d3SJohn Marino #endif /* VT100 */
83*86d7f5d3SJohn Marino 	lrclose();
84*86d7f5d3SJohn Marino 	retcont();		/* press return to continue */
85*86d7f5d3SJohn Marino }
86*86d7f5d3SJohn Marino 
87*86d7f5d3SJohn Marino /*
88*86d7f5d3SJohn Marino  *	function to say press return to continue and reset scroll when done
89*86d7f5d3SJohn Marino  */
90*86d7f5d3SJohn Marino static void
retcont(void)91*86d7f5d3SJohn Marino retcont(void)
92*86d7f5d3SJohn Marino {
93*86d7f5d3SJohn Marino 	cursor(1, 24);
94*86d7f5d3SJohn Marino 	lprcat("Press ");
95*86d7f5d3SJohn Marino 	standout("return");
96*86d7f5d3SJohn Marino 	lprcat(" to continue: ");
97*86d7f5d3SJohn Marino 	while (getchr() != '\n')
98*86d7f5d3SJohn Marino 		; /* nothing */
99*86d7f5d3SJohn Marino 	setscroll();
100*86d7f5d3SJohn Marino }
101*86d7f5d3SJohn Marino 
102*86d7f5d3SJohn Marino /*
103*86d7f5d3SJohn Marino  *	routine to open the help file and return the first character - '0'
104*86d7f5d3SJohn Marino  */
105*86d7f5d3SJohn Marino static int
openhelp(void)106*86d7f5d3SJohn Marino openhelp(void)
107*86d7f5d3SJohn Marino {
108*86d7f5d3SJohn Marino 	if (lopen(helpfile) < 0) {
109*86d7f5d3SJohn Marino 		lprintf("Can't open help file \"%s\" ", helpfile);
110*86d7f5d3SJohn Marino 		lflush();
111*86d7f5d3SJohn Marino 		sleep(4);
112*86d7f5d3SJohn Marino 		drawscreen();
113*86d7f5d3SJohn Marino 		setscroll();
114*86d7f5d3SJohn Marino 		return (-1);
115*86d7f5d3SJohn Marino 	}
116*86d7f5d3SJohn Marino 	resetscroll();
117*86d7f5d3SJohn Marino 	return (lgetc() - '0');
118*86d7f5d3SJohn Marino }
119