/* * STEVIE - Simply Try this Editor for VI Enthusiasts * * Code Contributions By : Tim Thompson twitch!tjt * Tony Andrews onecom!wldrdg!tony * G. R. (Fred) Walter watmath!grwalter */ #include "stevie.h" #include extern char *Version; static int helprow; #ifdef HELP #ifdef MEGAMAX overlay "help" #endif static void longline(char *); bool_t help(void) { char s; toutstr(T_ED); windgoto(helprow = 0, 0); longline("\ Positioning within file\n\ =======================\n\ ^F\t\tForward screenfull Worked on by:\n\ ^B\t\tBackward screenfull Tim Thompson\n"); longline("\ ^D\t\tscroll down half screen Tony Andrews\n\ ^U\t\tscroll up half screen G.R. (Fred) Walter\n"); longline("\ G\t\tGoto line (end default)\n\ ]]\t\tnext function\n\ [[\t\tprevious function\n\ /re\t\tnext occurence of regular expression 're'\n"); longline("\ ?re\t\tprior occurence of regular expression 're'\n\ n\t\trepeat last / or ?\n\ N\t\treverse last / or ?\n\ %\t\tfind matching (, ), {, }, [, or ]\n"); longline("\ \n\ Adjusting the screen\n\ ====================\n\ ^L\t\tRedraw the screen\n\ ^E\t\tscroll window down 1 line\n\ ^Y\t\tscroll window up 1 line\n"); longline("\ z\tredraw, current line at top\n\ z-\t\t... at bottom\n\ z.\t\t... at center\n"); /* s = ReadChar(0); windgoto(0, 32); longline(Version); */ #ifdef AMIGA longline(" "); longline(__DATE__); longline(" "); longline(__TIME__); #endif windgoto(helprow = Rows - 2, 47); longline("\n"); windgoto(helprow = Rows - 1, 47); longline(""); if (vgetc() != ' ') return TRUE; toutstr(T_ED); windgoto(helprow = 0, 0); longline("\ Character Positioning\n\ =====================\n\ ^\t\tfirst non-white\n\ 0\t\tbeginning of line\n\ $\t\tend of line\n\ h\t\tbackward\n"); longline("\ l\t\tforward\n\ ^H\t\tsame as h\n\ space\t\tsame as l\n\ fx\t\tfind 'x' forward\n"); longline("\ Fx\t\tfind 'x' backward\n\ tx\t\tupto 'x' forward\n\ Tx\t\tupto 'x' backward\n\ ;\t\tRepeat last f, F, t, or T\n"); longline("\ ,\t\tinverse of ;\n\ |\t\tto specified column\n\ %\t\tfind matching (, ), {, }, [, or ]\n"); windgoto(helprow = Rows - 2, 47); longline("\n"); windgoto(helprow = Rows - 1, 47); longline(""); if (vgetc() != ' ') return TRUE; toutstr(T_ED); windgoto(helprow = 0, 0); longline("\ Line Positioning\n\ ================\n\ H\t\thome window line\n\ L\t\tlast window line\n\ M\t\tmiddle window line\n"); longline("\ +\t\tnext line, at first non-white\n\ -\t\tprevious line, at first non-white\n\ CR\t\treturn, same as +\n\ j\t\tnext line, same column\n\ k\t\tprevious line, same column\n"); longline("\ \n\ Marking and Returning\n\ =====================\n\ ``\t\tprevious context\n\ ''\t\t... at first non-white in line\n"); longline("\ mx\t\tmark position with letter 'x'\n\ `x\t\tto mark 'x'\n\ 'x\t\t... at first non-white in line\n"); windgoto(helprow = Rows - 2, 47); longline("\n"); windgoto(helprow = Rows - 1, 47); longline(""); if (vgetc() != ' ') return TRUE; toutstr(T_ED); windgoto(helprow = 0, 0); longline("\ Insert and Replace\n\ ==================\n\ a\t\tappend after cursor\n\ i\t\tinsert before cursor\n\ A\t\tappend at end of line\n\ I\t\tinsert before first non-blank\n"); longline("\ o\t\topen line below\n\ O\t\topen line above\n\ rx\t\treplace single char with 'x'\n\ R\t\treplace characters (not yet)\n\ ~\t\treplace character under cursor with other case\n"); longline("\ \n\ Words, sentences, paragraphs\n\ ============================\n\ w\t\tword forward\n\ b\t\tback word\n\ e\t\tend of word\n\ )\t\tto next sentence (not yet)\n\ }\t\tto next paragraph (not yet)\n"); longline("\ (\t\tback sentence (not yet)\n\ {\t\tback paragraph (not yet)\n\ W\t\tblank delimited word\n\ B\t\tback W\n\ E\t\tto end of W"); windgoto(helprow = Rows - 2, 47); longline("\n"); windgoto(helprow = Rows - 1, 47); longline(""); if (vgetc() != ' ') return TRUE; toutstr(T_ED); windgoto(helprow = 0, 0); longline("\ Undo & Redo\n\ =============\n\ u\t\tundo last change\n\ U\t\trestore current line (not yet)\n\ .\t\trepeat last change\n"); longline("\ \n\ File manipulation\n\ =================\n"); longline("\ :w\t\twrite back changes\n\ :wq\t\twrite and quit\n\ :x\t\twrite if modified, and quit\n\ :q\t\tquit\n\ :q!\t\tquit, discard changes\n\ :e name\t\tedit file 'name'\n"); longline("\ :e!\t\tre-edit, discard changes\n\ :e #\t\tedit alternate file\n\ :w name\t\twrite file 'name'\n"); longline("\ :n\t\tedit next file in arglist\n\ :n args\t\tspecify new arglist (not yet)\n\ :rew\t\trewind arglist\n\ :f\t\tshow current file and lines\n"); longline("\ :f file\t\tchange current file name\n\ :ta tag\t\tto tag file entry 'tag'\n\ ^]\t\t:ta, current word is tag"); windgoto(helprow = Rows - 2, 47); longline("\n"); windgoto(helprow = Rows - 1, 47); longline(""); if (vgetc() != ' ') return TRUE; toutstr(T_ED); windgoto(helprow = 0, 0); longline("\ Operators (double to affect lines)\n\ ==================================\n\ d\t\tdelete\n\ c\t\tchange\n"); longline("\ <\t\tleft shift\n\ >\t\tright shift\n\ y\t\tyank to buffer\n"); longline("\n\ Yank and Put\n\ ============\n\ p\t\tput back text\n\ P\t\tput before\n\ Y\t\tyank lines"); windgoto(helprow = Rows - 2, 47); longline("\n"); windgoto(helprow = Rows - 1, 47); longline(""); if (vgetc() != ' ') return TRUE; toutstr(T_ED); windgoto(helprow = 0, 0); longline("\n\ Miscellaneous operations\n\ ========================\n\ C\t\tchange rest of line\n\ D\t\tdelete rest of line\n\ s\t\tsubstitute chars\n"); longline("\ S\t\tsubstitute lines (not yet)\n\ J\t\tjoin lines\n\ x\t\tdelete characters\n\ X\t\t... before cursor\n\ :!cmd\t\tsystem(\"cmd\")\n\ :[range]s/search/replace/[g]\n\ :[range]g/search[/p|/d]\n\ :[range]d\tdelete range of lines\n"); windgoto(helprow = Rows - 1, 47); longline(""); vgetc(); return TRUE; } static void longline(char *p) { # ifdef AMIGA outstr(p); # else char *s; for (s = p; *s; s++) { if (*s == '\n') windgoto(++helprow, 0); else outchar(*s); } # endif } #else bool_t help(void) { toutstr(T_ED); windgoto(0, 0); outstr(Version); outstr("\n\nWorked on by:\n"); outstr("\tTim Thompson\n"); outstr("\tTony Andrews\n"); outstr("\tG.R. (Fred) Walter\n"); outstr("\nSorry, help not configured\n"); outstr("\n"); vgetc(); return TRUE; } #endif