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