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)27help(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)76welcome(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)103retcont(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)117openhelp(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