/*    cscope - interactive C symbol cross-reference
 *
 *    display help
 *
 */

#include "global.h"
#include <ncurses.h>
/*
	max num of lines of help screen -
	this number needs to be increased if more than n help items are needed
*/

const char tooltip_winput[] = "Search [Enter] -Mode [^k] +Mode [^j] Right [Tab] Down [%]";
const char tooltip_wmode[]	= "-Mode [Up] +Mode [Down] Right [Tab] Up [%]";
const char tooltip_wresult[] =
	"Edit [Enter] Up [Up] Down [Down] Left [Tab] Previous [-] Next [+]";

static char help_msg[] =
	"Press the RETURN key repeatedly to move to the desired input field, type the\n"
	"pattern to search for, and then press the RETURN key.  For the first 4 and\n"
	"last 2 input fields, the pattern can be a regcomp(3) regular expression.\n"
	"If the search is successful, you can use these single-character commands:\n\n"
	"0-9a-zA-Z\tEdit the file containing the displayed line.\n"
	"space bar\tDisplay next set of matching lines.\n"
	"+\t\tDisplay next set of matching lines.\n"
	"^V\t\tDisplay next set of matching lines.\n"
	"-\t\tDisplay previous set of matching lines.\n"
	"^E\t\tOpen all results for editing. You may break the iteration by exiting with non-zero (:cq).\n"
	">\t\tWrite the list of lines being displayed to a file.\n"
	">>\t\tAppend the list of lines being displayed to a file.\n"
	"<\t\tRead lines from a file.\n"
	"^\t\tFilter all lines through a shell command.\n"
	"|\t\tPipe all lines to a shell command.\n"
	"\nAt any time you can use these single-character commands:\n\n"
	"TAB\t\tSwap positions between input and output areas.\n"
	"RETURN\t\tMove to the next input field.\n"
	"^N\t\tMove to the next input field.\n"
	"^P\t\tMove to the previous input field.\n"
	"^Y / ^A\t\tSearch with the last pattern typed.\n"
	"^B\t\tRecall previous input field and search pattern.\n"
	"^F\t\tRecall next input field and search pattern.\n"
	"^C\t\tToggle ignore/use letter case when searching.\n"
	"^R\t\tRebuild the cross-reference.\n"
	"!\t\tStart an interactive shell (type ^D to return).\n"
	"^L\t\tRedraw the screen.\n"
	"?\t\tDisplay this list of commands.\n"
	"^D\t\tExit the program.\n"
	"\nNote: If the first character of the pattern you want to search for matches\n"
	"a command, type a \\ character first.\n"
	"Note: Some ctrl keys may be occupied by your terminal configuration.\n"
;

static char changeing_help_msg[] =
	"When changing text, you can use these single-character commands:\n\n"
	"0-9a-zA-Z\tMark or unmark the line to be changed.\n"
	"*\t\tMark or unmark all displayed lines to be changed.\n"
	"space bar\tDisplay next set of lines.\n"
	"+\t\tDisplay next set of lines.\n"
	"-\t\tDisplay previous set of lines.\n"
	"^A\t\tMark or unmark all lines to be changed.\n"
	"^D\t\tChange the marked lines and exit.\n"
	"ESC\t\tExit without changing the marked lines.\n"
	"!\t\tStart an interactive shell (type ^D to return).\n"
	"^L\t\tRedraw the screen.\n"
	"?\t\tDisplay this list of commands.\n"
;

const char * help(void) {
	switch (input_mode) {
		case INPUT_CHANGE:
		case INPUT_CHANGE_TO:
			return changeing_help_msg;
		default:
			return help_msg;
	}
}

/* normal usage message */
void usage(void) {
	fputs("Usage: " PROGRAM_NAME
		  " [-bcCdehklLqRuUV] [-f file] [-F file] [-i file] [-I dir] [-s dir]\n"
		  "              [-p number] [-P path] [-[0-8] pattern] [source files]\n",
		stderr);
}

/* long usage message */
void longusage(void) {
	usage();
	fprintf(stderr,
		"\
\n\
-b            Build the cross-reference only.\n\
-C            Ignore letter case when searching.\n\
-c            Use only ASCII characters in the cross-ref file (don't compress).\n\
-d            Do not update the cross-reference.\n\
-F symfile    Read symbol reference lines from symfile.\n\
-f reffile    Use reffile as cross-ref file name instead of %s.\n",
		REFFILE);
	fprintf(stderr,
		"\
-h            This help screen.\n\
-I incdir     Look in incdir for any #include files.\n\
-i namefile   Browse through files listed in namefile, instead of %s\n",
		NAMEFILE);
	fprintf(stderr,
		"\
-k            Kernel Mode - don't use %s for #include files.\n",
		DEFAULT_INCLUDE_DIRECTORY);
	fputs("\
-L            Do a single search with line-oriented output.\n\
-l            Line-oriented interface.\n\
-num pattern  Go to input field num (counting from 0) and find pattern.\n\
-P path       Prepend path to relative file names in pre-built cross-ref file.\n\
-p n          Display the last n file path components.\n\
-q            Build an inverted index for quick symbol searching.\n\
-R            Recurse directories for files.\n\
-s dir        Look in dir for additional source  files.\n\
-U            Check file time stamps.\n\
-u            Unconditionally build the cross-reference file.\n\
-V            Print the version number.\n\
\n\
Please see the manpage for more information.\n",
		stderr);
}
