home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume23 / trn / part09 / help.c < prev    next >
C/C++ Source or Header  |  1991-08-22  |  16KB  |  488 lines

  1. /* $Header: help.c,v 4.3.3.1 90/07/24 21:52:37 davison Trn $
  2.  *
  3.  * $Log:    help.c,v $
  4.  * Revision 4.3.3.1  90/07/24  21:52:37  davison
  5.  * Initial Trn Release
  6.  * 
  7.  * Revision 4.3.1.2  85/09/10  11:05:39  lwall
  8.  * Improved %m in in_char().
  9.  * 
  10.  * Revision 4.3.1.1  85/05/10  11:33:10  lwall
  11.  * Branch for patches.
  12.  * 
  13.  * Revision 4.3  85/05/01  11:38:59  lwall
  14.  * Baseline for release with 4.3bsd.
  15.  * 
  16.  */
  17.  
  18. #include "EXTERN.h"
  19. #include "common.h"
  20. #include "rn.h"
  21. #include "term.h"
  22. #include "INTERN.h"
  23. #include "help.h"
  24.  
  25. void
  26. help_init()
  27. {
  28.     ;
  29. }
  30.  
  31. int
  32. help_page()
  33. {
  34.     int cmd;
  35.  
  36. #ifdef PAGERHELP
  37.     doshell(sh,filexp(PAGERHELP));
  38. #else
  39.     page_init();
  40.     if ((cmd = print_lines("\
  41. Paging commands:\n\
  42. ",STANDOUT)) ||
  43.     (cmd = print_lines("\n\
  44. SP    Display the next page.\n\
  45. x    Display the next page decrypted (rot13).\n\
  46. d    Display half a page more.\n\
  47. CR    Display one more line.\n\
  48. ^R,v,^X    Restart the current article (v=verbose header, ^X=rot13).\n\
  49. ",NOMARKING)) ||
  50.     (cmd = print_lines("\
  51. b    Back up one page.\n\
  52. ^L,X    Refresh the screen (X=rot13).\n\
  53. ",NOMARKING)) ||
  54. #ifdef USETHREADS
  55.     (cmd = print_lines("\
  56. t    Display the entire article tree and all its subjects.\n\
  57. ",NOMARKING)) ||
  58. #endif
  59.     (cmd = print_lines("\
  60. g pat    Go to (search forward within article for) pattern.\n\
  61. G    Search again for current pattern within article.\n\
  62. ^G    Search for next line beginning with \"Subject:\".\n\
  63. TAB    Search for next line beginning with a different character.\n\
  64. q    Quit the pager, go to end of article.  Leave article read or unread.\n\
  65. j    Junk this article (mark it read).  Goes to end of article.\n\
  66. \n\
  67. ",NOMARKING)) ||
  68.     (cmd = print_lines("\
  69. The following commands skip the rest of the current article, then behave\n\
  70. just as if typed to the 'What next?' prompt at the end of the article:\n\
  71. ",STANDOUT)) ||
  72.     (cmd = print_lines("\n\
  73. n    Scan forward for next unread article.\n\
  74. N    Go to next article.\n\
  75. ^N    Scan forward for next unread article with same title.\n\
  76. p,P,^P    Same as n,N,^N, only going backwards.\n\
  77. -    Go to previously displayed article.\n\
  78. ",NOMARKING)) ||
  79. #ifdef USETHREADS
  80.     (cmd = print_lines("\
  81. <,>    Browse the previous/next selected thread.  If no threads are selected,\n\
  82.     all threads that had unread news upon entry to the group are considered\n\
  83.     selected for browsing.  Entering an empty group browses all threads.\n\
  84. [,],{,} Go to parent/child/root/leaf in thread.\n\
  85. \n\
  86. ",NOMARKING)) ||
  87. #endif
  88.     (cmd = print_lines("\
  89. The following commands also take you to the end of the article.\n\
  90. Type h at end of article for a description of these commands:\n\
  91. ",STANDOUT)) ||
  92. #ifdef USETHREADS
  93.     (cmd = print_lines("\
  94.     # $ & / = ? c C f F k K ^K J , m M number e r R ^R s S u U v w W Y ^ |\n\
  95. \n\
  96. (To return to the middle of the article after one of these commands, type ^L.)\n\
  97. ",NOMARKING)) )
  98. #else
  99.     (cmd = print_lines("\
  100.     # $ & / = ? c C f F k K ^K m M number e r R ^R s S u v w W Y ^ |\n\
  101. \n\
  102. (To return to the middle of the article after one of these commands, type ^L.)\n\
  103. ",NOMARKING)) )
  104. #endif
  105.     return cmd;
  106. #endif
  107.     return 0;
  108. }
  109.  
  110. int
  111. help_art()
  112. {
  113.     int cmd;
  114. #ifdef ARTHELP
  115.     doshell(sh,filexp(ARTHELP));
  116. #else
  117.     page_init();
  118.     if ((cmd = print_lines("\
  119. Article Selection commands:\n\
  120. ",STANDOUT)) ||
  121. #ifdef USETHREADS
  122.     (cmd = print_lines("\n\
  123. n,SP    Find next unread article (follows discussion-tree in threaded groups).\n\
  124. ",NOMARKING)) ||
  125. #else
  126.     (cmd = print_lines("\n\
  127. n,SP    Scan forward for next unread article.\n\
  128. ",NOMARKING)) ||
  129. #endif
  130.     (cmd = print_lines("\
  131. N    Go to next article.\n\
  132. ^N    Scan forward for next unread article with same subject.\n\
  133. p,P,^P    Same as n,N,^N, only going backwards.\n\
  134. -    Go to previously displayed article.\n\
  135. ",NOMARKING)) ||
  136. #ifdef USETHREADS
  137.     (cmd = print_lines("\
  138. <,>    Browse the previous/next selected thread.  If no threads are selected,\n\
  139.     all threads that had unread news upon entry to the group are considered\n\
  140.     selected for browsing.  Entering an empty group browses all threads.\n\
  141. [,]    Go to article's parent/child.\n\
  142. {,}    Go to tree's root/leaf.\n\
  143. t    Display the entire article tree and all its subjects.\n\
  144. ",NOMARKING)) ||
  145. #endif
  146.     (cmd = print_lines("\
  147. number    Go to specified article.\n\
  148. range{,range}:command{:command}\n\
  149.     Apply one or more commands to one or more ranges of articles.\n\
  150.     Ranges are of the form: number | number-number.  You may use . for\n\
  151.     the current article, and $ for the last article.\n\
  152. ",NOMARKING)) ||
  153. #ifdef USETHREADS
  154.     (cmd = print_lines("\
  155.      Valid commands are: e, j, m, M, s, S, t, T, |, +, and -.\n\
  156. :cmd    Perform a command on all the selected articles.\n\
  157. ",NOMARKING)) ||
  158. #else
  159.     (cmd = print_lines("\
  160.      Valid commands are: e, j, m, M, s, S, and |.\n\
  161. ",NOMARKING)) ||
  162. #endif
  163.     (cmd = print_lines("\
  164. /pattern/modifiers\n\
  165.     Scan forward for article containing pattern in the subject line.\n\
  166.     (Use ?pat? to scan backwards; append h to scan headers, a to scan\n\
  167.     entire articles, r to scan read articles, c to make case sensitive.)\n\
  168. ",NOMARKING)) ||
  169.     (cmd = print_lines("\
  170. /pattern/modifiers:command{:command}\n\
  171.     Apply one or more commands to the set of articles matching pattern.\n\
  172.     Use a K modifier to save entire command to the KILL file for this\n\
  173.     newsgroup.  Commands m and M, if first, imply an r modifier.\n\
  174.      Valid commands are the same as for the range command.\n\
  175. ",NOMARKING)) ||
  176.     (cmd = print_lines("\
  177. f,F    Submit a followup article (F = include this article).\n\
  178. r,R    Reply through net mail (R = include this article).\n\
  179. e dir{|command}\n\
  180.     Extract to directory using /bin/sh, uudecode, or specified command.\n\
  181. s ...    Save to file or pipe via sh.\n\
  182. S ...    Save via preferred shell.\n\
  183. w,W    Like s and S but save without the header.\n\
  184. | ...    Same as s|...\n\
  185. ",NOMARKING)) ||
  186.     (cmd = print_lines("\
  187. C    Cancel this article, if yours.\n\
  188. ^R,v    Restart article (v=verbose).\n\
  189. ^X    Restart article, rot13 mode.\n\
  190. c    Catch up (mark all articles as read).\n\
  191. b    Back up one page.\n\
  192. ^L    Refresh the screen.  You can get back to the pager with this.\n\
  193. X    Refresh screen in rot13 mode.\n\
  194. ",NOMARKING)) ||
  195.     (cmd = print_lines("\
  196. ^    Go to first unread article.  Disables subject search mode.\n\
  197. $    Go to end of newsgroup.  Disables subject search mode.\n\
  198. ",NOMARKING)) ||
  199.     (cmd = print_lines("#       Print last article number.\n\
  200. &    Print current values of command-line switches.\n\
  201. &switch {switch}\n\
  202.     Set or unset more switches.\n\
  203. &&    Print current macro definitions.\n\
  204. &&def    Define a new macro.\n\
  205. j    Junk this article (mark it read).  Stays at end of article.\n\
  206. ",NOMARKING)) ||
  207.     (cmd = print_lines("\
  208. m    Mark article as still unread.\n\
  209. M    Mark article as still unread upon exiting newsgroup or Y command.\n\
  210. Y    Yank back articles marked temporarily read via M.\n\
  211. k    Kill current subject (mark articles as read).\n\
  212. ",NOMARKING)) ||
  213. #ifdef USETHREADS
  214.     (cmd = print_lines("\
  215. ,    Mark current article and its replies as read.\n\
  216. J    Junk entire thread (mark all subjects as read in this thread).\n\
  217. T    Trash current thread (like 'J'), and save command in KILL file.\n\
  218. ",NOMARKING)) ||
  219. #endif
  220.     (cmd = print_lines("\
  221. K    Mark current subject as read, and save command in KILL file.\n\
  222. ^K    Edit local KILL file (the one for this newsgroup).\n\
  223. =    List subjects of unread articles.\n\
  224. ",NOMARKING)) ||
  225. #ifdef USETHREADS
  226.     (cmd = print_lines("\
  227. +    Enter thread selection mode.\n\
  228. U    Unread some news -- prompts for thread, subthread, all, or select.\n\
  229. ",NOMARKING)) ||
  230. #endif
  231.     (cmd = print_lines("\
  232. u    Unsubscribe from this newsgroup.\n\
  233. q    Quit this newsgroup for now.\n\
  234. Q    Quit newsgroup, staying at current newsgroup.\n\
  235. ",NOMARKING)) )
  236.     return cmd;
  237. #endif
  238.     return 0;
  239. }
  240.  
  241. int
  242. help_ng()
  243. {
  244.     int cmd;
  245. #ifdef NGHELP
  246.     doshell(sh,filexp(NGHELP));
  247. #else
  248.     page_init();
  249.     if (cmd = print_lines("\
  250. Newsgroup Selection commands:\n\
  251. ",STANDOUT) )
  252.     return cmd;
  253.     if (ng != nextrcline) {
  254.     if ((cmd = print_lines("\
  255. \n\
  256. y,SP    Do this newsgroup now.\n\
  257. .cmd    Do this newsgroup, executing cmd as first command.\n\
  258. ",NOMARKING)) ||
  259. #ifdef USETHREADS
  260.     (cmd = print_lines("\
  261. +    Enter this newsgroup through the thread selector (like typing .+<CR>).\n\
  262. ",NOMARKING)) ||
  263. #endif
  264.     (cmd = print_lines("\
  265. =    Start this newsgroup, but list subjects before reading articles.\n\
  266. ",NOMARKING)) ||
  267. #ifdef USETHREADS
  268.     (cmd = print_lines("\
  269. U    Enter this newsgroup by way of the \"Set unread?\" prompt.\n\
  270. ",NOMARKING)) ||
  271. #endif
  272.     (cmd = print_lines("\
  273. u    Unsubscribe from this newsgroup.\n\
  274. ",NOMARKING)) )
  275.         return cmd;
  276.     }
  277.     if ((cmd = print_lines("\
  278. c    Catch up (mark this newsgroup all read).\n\
  279. \n\
  280. n    Go to the next newsgroup with unread news.\n\
  281. N    Go to the next newsgroup.\n\
  282. p    Go to the previous newsgroup with unread news.\n\
  283. P    Go to the previous newsgroup.\n\
  284. ",NOMARKING)) ||
  285.     (cmd = print_lines("\
  286. -    Go to the previously displayed newsgroup.\n\
  287. 1    Go to the first newsgroup.\n\
  288. ^    Go to the first newsgroup with unread news.\n\
  289. $    Go to the last newsgroup.\n\
  290. ",NOMARKING)) ||
  291.     (cmd = print_lines("\
  292. g name    Go to the named newsgroup.  Subscribe to new newsgroups this way too.\n\
  293. /pat    Search forward for newsgroup matching pattern.\n\
  294. ?pat    Search backward for newsgroup matching pattern.\n\
  295.     (Use * and ? style patterns.  Append r to include read newsgroups.)\n\
  296. ",NOMARKING)) ||
  297.     (cmd = print_lines("\
  298. l pat    List unsubscribed newsgroups containing pattern.\n\
  299. m name    Move named newsgroup elsewhere (no name moves current newsgroup).\n\
  300. o pat    Only display newsgroups matching pattern.  Omit pat to unrestrict.\n\
  301. a pat    Like o, but also scans for unsubscribed newsgroups matching pattern.\n\
  302. L    List current .newsrc.\n\
  303. ",NOMARKING)) ||
  304.     (cmd = print_lines("\
  305. &    Print current command-line switch settings.\n\
  306. &switch {switch}\n\
  307.     Set (or unset) more command-line switches.\n\
  308. &&    Print current macro definitions.\n\
  309. &&def    Define a new macro.\n\
  310. !cmd    Shell escape.\n\
  311. ",NOMARKING)) ||
  312.     (cmd = print_lines("\
  313. q    Quit trn.\n\
  314. x    Quit, restoring .newsrc to its state at startup of trn.\n\
  315. ^K    Edit the global KILL file.  Use commands like /pattern/j to suppress\n\
  316.     pattern in every newsgroup.\n\
  317. v    Print version.\n\
  318. ",NOMARKING)) )
  319.     return cmd;
  320. #endif
  321. #ifdef PUSHBACK
  322.     if (cmd = get_anything())
  323.     return cmd;
  324.     show_macros();
  325. #endif
  326.     return 0;
  327. }
  328.  
  329. #ifdef ESCSUBS
  330. int
  331. help_subs()
  332. {
  333.     int cmd;
  334. #ifdef SUBSHELP
  335.     doshell(sh,filexp(SUBSHELP));
  336. #else
  337.     page_init();
  338.     if ((cmd = print_lines("\
  339. Valid substitutions are:\n\
  340. ",STANDOUT)) ||
  341.     (cmd = print_lines("\
  342. \n\
  343. a    Current article number\n\
  344. A    Full name of current article (%P/%c/%a)\n\
  345. b    Destination of last save command, often a mailbox\n\
  346. B    Bytes to ignore at beginning of last saved article\n\
  347. ",NOMARKING)) ||
  348.     (cmd = print_lines("\
  349. c    Current newsgroup, directory form\n\
  350. C    Current newsgroup, dot form\n\
  351. d    Full name of newsgroup directory (%P/%c)\n\
  352. D    Distribution line from current article\n\
  353. e    The last command executed to extract data from an article\n\
  354. E    The number of extra (unselected) articles, not counting the current\n\
  355.     one if it is unselected\n\
  356. ",NOMARKING)) ||
  357.     (cmd = print_lines("\
  358. f    Who the current article is from\n\
  359. F    Newsgroups to followup to (from Newsgroups and Followup-To)\n\
  360. h    (This help message)\n\
  361. H    Host name (yours)\n\
  362. i    Message-I.D. line from current article, with <>\n\
  363. I    Reference indicator mark (see -F switch)\n\
  364. ",NOMARKING)) ||
  365.     (cmd = print_lines("\
  366. l    News administrator's login name, if any\n\
  367. L    Login name (yours)\n\
  368. ",NOMARKING)) ||
  369. #ifdef USETHREADS
  370.     (cmd = print_lines("\
  371. m    Current mode, first letter of (init,newsgroup,thread,article,pager,\n\
  372.         unread,Add,Catchup,Delete-bogus,Mailbox,Resubscribe)\n\
  373. ",NOMARKING)) ||
  374. #else
  375.     (cmd = print_lines("\
  376. m    Current mode, first letter of (init, newsgroup, article, pager,\n\
  377.         Add, Catchup, Delete bogus, Mailbox, Resubscribe)\n\
  378. ",NOMARKING)) ||
  379. #endif
  380.     (cmd = print_lines("\
  381. M    Number of article marked with M\n\
  382. n    Newsgroups from current article\n\
  383. N    Full name (yours)\n\
  384. ",NOMARKING)) ||
  385.     (cmd = print_lines("\
  386. o    Organization (yours)\n\
  387. O    Original working directory (where you ran trn from)\n\
  388. p    Your private news directory (from -d)\n\
  389. P    Public news spool directory\n\
  390. ",NOMARKING)) ||
  391.     (cmd = print_lines("\
  392. r    Last reference (parent article id)\n\
  393. R    References list for followup article\n\
  394. s    Subject, with all Re's and (nf)'s stripped off\n\
  395. S    Subject, with one Re stripped off\
  396. ",NOMARKING)) ||
  397.     (cmd = print_lines("\
  398. t    New To line derived from From and Reply-To (Internet format)\n\
  399. T    New To line derived from Path\n\
  400. u    Number of unread articles\n\
  401. U    Number of unread articles not counting the current article (when\n\
  402.     threads are selected, the count only reflects selected articles)\n\
  403. x    News library directory\n\
  404. X    Trn library directory\n\
  405. z    Length of current article in bytes\n\
  406. Z    Number of selected threads\n\
  407. ",NOMARKING)) ||
  408.     (cmd = print_lines("\
  409. ~    Your home directory\n\
  410. .    Directory containing . files\n\
  411. #    A counter in multiple-article commands\n\
  412. $    Current process number\n\
  413. /    Last search string\n\
  414. ESC    Run preceding command through % interpretation\n\
  415. ",NOMARKING)) )
  416.     return cmd;
  417. #endif
  418.     return 0;
  419. }
  420. #endif
  421.  
  422. #ifdef USETHREADS
  423. int
  424. help_select()
  425. {
  426.     int cmd;
  427.  
  428.     page_init();
  429.     if ((cmd = print_lines("\
  430. Thread selection commands:\n\
  431. ",STANDOUT)) ||
  432.     (cmd = print_lines("\n\
  433. a-z,0-9    Select/deselect the discussion thread by its letter or number.  By\n\
  434.     default the letters h, k, m, n, p, q and y are omitted.\n\
  435. SP    Perform the default command (usually > or Z).\n\
  436. CR    Start reading.  Selects the current thread if none are selected.\n\
  437. Z,TAB    Start reading.  If no articles are selected, read everything.\n\
  438. y, '.'    Toggle the current thread's selection.\n\
  439. k, ','    Mark the current thread as killed.\n\
  440. ",NOMARKING)) ||
  441.     (cmd = print_lines("\
  442. m, \\    Unmark the current thread.\n\
  443. -    Set a range, as in 2 - 5.  Repeats the last marking action.\n\
  444. @    Toggle all visible thread selections.\n\
  445. n, ]    Move down to the next thread.\n\
  446. p, [    Move up to the previous thread.\n\
  447. <, >    Go to previous/next page.\n\
  448. ^, $    Go to first/last page.\n\
  449. ",NOMARKING)) ||
  450.     (cmd = print_lines("\
  451. X    Mark all unselected articles as read and start reading.\n\
  452. D    Mark unselected articles on the current page as read.  Start\n\
  453.     reading if articles were selected, else go to next page.\n\
  454. J    Junk all selected articles (mark them as read).\n\
  455. ^K    Edit local KILL file (the one for this newsgroup).\n\
  456. :cmd    Perform a command on all the selected articles.\n\
  457. ",NOMARKING)) ||
  458.     (cmd = print_lines("\
  459. /pattern/modifiers\n\
  460.     Scan all articles for a subject containing pattern.\n\
  461.     (Append h to scan headers, a to scan entire articles, c to make case\n\
  462.     sensitive, r to scan read articles (assumed when you are selecting\n\
  463.     read articles to set unread.)\n\
  464. /pattern/modifiers:command{:command}\n\
  465.     Apply one or more commands to the set of articles matching pattern.\n\
  466. ",NOMARKING)) ||
  467.     (cmd = print_lines("\
  468.     Use a K modifier to save entire command to the KILL file for this\n\
  469.     newsgroup.  Commands m and M, if first, imply an r modifier.\n\
  470.      Valid commands are: e, j, m, M, s, S, T, !, and the thread selection\n\
  471.     commands: + and -.\n\
  472. N    Leave this group as-is and go on to the next.\n\
  473. U    Switch between selecting read/unread articles.\n\
  474. L    Switch the current display mode between a terse mode without\n\
  475.     authors and a short and long mode with authors.\n\
  476. ",NOMARKING)) ||
  477.     (cmd = print_lines("\
  478. &    View or set command line switches.\n\
  479. &&    View or set macro definitions.\n\
  480. !cmd    Escape to a subshell.\n\
  481. q    Quit selection mode.\n\
  482. Q    Quit group and return to news group selection prompt for this group.\n\
  483. ",NOMARKING)) )
  484.     return cmd;
  485.     return 0;
  486. }
  487. #endif
  488.