This is help.c in view mode; [Download] [Up]
/* Copyright (c) 1995 John E. Davis (davis@space.mit.edu) * All rights reserved. */ #include "config.h" #include "features.h" #include <stdio.h> #include <string.h> #ifdef HAVE_STDLIB_H # include <stdlib.h> #endif #include <slang.h> #include "jdmacros.h" #include "slrn.h" #include "misc.h" static char *Global_Help [] = { " For more information about slrn, check out the newsgroups:", " news.software.readers", " alt.lang.s-lang", " Email bug reports, suggestions, comments to davis@space.mit.edu", "", NULL }; static char *Art_Help[] = { "Searching:", " / Search forward in the article.", " a Author search forward.", " A Author search backward.", " s Subject search forward.", " S Subject search backward.", " = Skip to next article of specified subject", " ! Skip to next article with high score", "Commands that affect the article:", " h Hide window (zoom header window)", " SPACE Select article or scroll to next page", " DEL, b Scroll article back one page", " ESC-UP Scroll article up one line", " ESC-DOWN Scroll article down one line", " RIGHT Pan article to the right", " LEFT Pan article to the left", " W Wrap or Unwrap article", " t Toggle on/off the display of unimportant headers.", " T Toggle on/off the display of quoted lines.", " TAB Skip beyond quoted text.", " ESC-r Toggle ROT 13 decryption on and off.", " g Skip to next digest article.", " ESC Ctrl-C Cancel article (you must be the author).", #if SLRN_HAS_GROUPLENS " 0 Assign article a GroupLens rating.", #endif "Posting, Replying, Piping, and Saving:", " P Post a new article (NOT followup)", " f Followup to current article.", " Note: ESC 1 f ==> all headers will be inserted.", " ESC 2 f ==> the message will be inserted without quoting.", " F Forward the article to someone", " r Reply to the poster", " o Append the article, thread, or tagged articles to a file", " : Decode article, numerically tagged articles, or thread.", " # Numerically tag the article for saving/decoding.", " ESC # Remove numerical tags.", " | Pipe the article to and external command.", "Commands that pertain to the header window:", " d Mark article as read and move to next unread.", " ESC-d Mark thread as read and move to next unread.", " u Mark the article as unread", " p Move to a previously unread article", " n Move to the next unread article or next group if at end.", " L Goto the article that was last read.", " N Skip to next news group.", " UP Move to the previous article", " DOWN Move to the next article", " ; Set a mark at current position", " , Return to the previous mark setting mark first", " q Quit back to group mode", " Ctrl-^ Decrease the size of the header window by one line", " ^ Increase the size of the header window by one line", " ESC t Toggle collapse/uncollapse of thread", " Note: A prefix argument may be used to operate on all threads.", " ESC > Move to the end of the header list", " ESC < Move to the beginning of the header list", " Ctrl-U Perform Page-Up on the header window.", " Ctrl-D Perform Page-Dn on the header window.", " ESC-a Toggle header display format", " ESC-s Toggle header threading on/off.", " ESC-p Find parent header reading from server if necessary", " ESC 1 ESC p Reconstruct thread.", " ESC Ctrl-P Find all children of current header (queries server)", " c Catch-up (Mark ALL articles as read).", " ESC-u Mark ALL articles as UN-read", " C Mark articles TO the current position as read", " ESC-U Mark articles TO current position as UN-read", " K Create a score entry based on current header.", " ESC 1 K Edit score file", " * Mark header so it is un-affected by catchup commands.", " ESC 1 * Un-mark all headers marked with '*'.", " x Remove all read articles from list.", "Miscellaneous:", " . (Period) Repeat last key sequence", " U Search for URL and follow it", NULL }; static char *Group_Help [] = { " Note: The keys are case sensitive! That is, 's' and 'S' are not the same.", " Some commands take a prefix argument. This means press ESC, then", " press a digit followed by desired command key sequence.", "", "Subscribing/Unsubscribing Hints:", " 1. Press CAPITAL 'L' and enter the name of the groups to display, e.g.,", " *.music.* to see all 'music' groups.", " 2. Move to the group you want to subscribe to and then press 's'.", " Repeat this step for each group.", " 3. Press the Capital-L key again to display only subscribed groups.", "Commands that affect the current group:", " P Post an article to the current newsgroup", " SPACE, RETURN Select the current newsgroup.", " ESC 1 SPACE Select group with article number query.", " ESC 2 SPACE Select group but do not apply score.", " ESC 3 SPACE Select group with query but do not apply score.", " s Subscribe to the current newsgroup", " ESC 1 s Subscribe to pattern", " u Un-subscribe from the current newsgroup", " ESC 1 u Un-subscribe to pattern", " c Catchup-- mark all articles as read", " ESC u Un-Catchup-- mark all articles as un-read", "Movement Commands:", " ESC < Move to top of the list", " ESC > Move to bottom of the list", " Ctrl-V, Ctrl-D Scroll to next page", " ESC V, Ctrl-U Scroll to previous page", " DOWN Move to next group", " UP Move to previous group", "Miscellaneous Commands:", " a Add a new newsgroup (See 'L' help too!)", " Ctrl-L, Ctrl-R Redraw the screen.", " Ctrl-Z Suspend newsreader.", " l Toggle listing of groups that have no unread articles.", " L Toggle listing of unsubscribed groups.", " ESC 1 L Hide unsubscribed groups", " / Group keyword search. Use 'l' to search hidden groups.", " q Quit newsreader", " G Get new news", " K Toggle scoring mode", " X Force a save of the newsrc file.", " ESC-a Toggle display of group description on/off.", " Ctrl-X Ctrl-T Transpose position of groups.", " m Move newsgroup to different location.", " . (Period) Repeat last key sequence", NULL }; #define MAX_HELP_LINES 256 static char *User_Article_Help[MAX_HELP_LINES]; static char *User_Group_Help[MAX_HELP_LINES]; static void do_help (char **help) { int i; char **p, *sect = NULL; char quit; char **this_help; this_help = p = Global_Help; slrn_enable_mouse (0); while (1) { SLsmg_cls (); i = 0; if (*p == NULL) break; if ((sect != NULL) && (**p == ' ')) { SLsmg_set_color (1); SLsmg_gotorc (i, 0); SLsmg_write_string (sect); SLsmg_set_color (0); SLsmg_write_string (" (continued)"); i += 2; } while (i < SLtt_Screen_Rows - 4) { char pp; if (*p == NULL) { if (this_help == help) break; this_help = p = help; sect = NULL; } pp = **p; if ((pp != ' ') && pp) { sect = *p; if ((i + 6) > SLtt_Screen_Rows) break; i++; SLsmg_set_color (1); } SLsmg_gotorc (i, 0); SLsmg_write_string (*p); i++; if (pp && (pp != ' ')) { SLsmg_set_color (0); i++; } p++; } SLsmg_gotorc (i + 1, 0); SLsmg_set_color (1); if ((*p == NULL) && (this_help == Global_Help)) { this_help = p = help; sect = NULL; } if (*p == NULL) { SLsmg_write_string ("\ Press '?' to start over, or any other key to return to news reader." ); } else SLsmg_write_string ("\ Press 'q' to quit help, '?' to start over, or any other key to continue." ); slrn_smg_refresh (); SLang_flush_input (); quit = SLang_getkey (); if (quit == '?') { this_help = p = Global_Help; sect = NULL; } else if ((*p == NULL) || ((quit | 0x20)== 'q')) break; } Slrn_Full_Screen_Update = 1; slrn_set_color (0); /* slrn_redraw (); */ SLang_flush_input (); slrn_enable_mouse (1); } int slrn_parse_helpfile (char *helpfile) { FILE *fp; char buf[256]; char ch; char **current_help = NULL; int num_lines = 0; unsigned char *b; if (NULL == (fp = fopen (helpfile, "r"))) return -1; while (fgets (buf, sizeof (buf) - 1, fp) != NULL) { ch = *buf; /* Skip over common comments */ if ((ch == '#') || (ch == '%') || (ch == ';') || (ch == '!')) continue; b = (unsigned char *) slrn_skip_whitespace (buf); if (*b == 0) continue; if (ch == '[') { /* end current help */ if (current_help != NULL) { if (current_help[num_lines] != NULL) SLFREE (current_help[num_lines]); current_help[num_lines] = NULL; } num_lines = 0; ch = *(buf + 1) | 0x20; if (ch == 'a') { current_help = User_Article_Help; } else if (ch == 'g') current_help = User_Group_Help; else current_help = NULL; continue; } if (current_help == NULL) continue; if (MAX_HELP_LINES == num_lines + 1) { current_help[num_lines] = NULL; current_help = NULL; continue; } if (current_help [num_lines] != NULL) SLFREE (current_help[num_lines]); if (NULL != (current_help [num_lines] = (char *) SLMALLOC (strlen (buf) + 1))) { strcpy (current_help[num_lines], buf); num_lines++; } } if (current_help != NULL) { if (current_help[num_lines] != NULL) SLFREE (current_help[num_lines]); current_help[num_lines] = NULL; } slrn_fclose (fp); return 0; } void slrn_article_help (void) { char **h; if (User_Article_Help[0] != NULL) h = User_Article_Help; else h = Art_Help; do_help (h); } void slrn_group_help (void) { char **h; if (User_Group_Help[0] != NULL) h = User_Group_Help; else h = Group_Help; do_help (h); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.