mirror of
https://github.com/GnoConsortium/gno.git
synced 2024-10-31 11:07:44 +00:00
322 lines
7.0 KiB
C
322 lines
7.0 KiB
C
|
/*
|
||
|
* 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 <texttool.h>
|
||
|
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<RETURN>\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("<Press space bar to continue>\n");
|
||
|
windgoto(helprow = Rows - 1, 47);
|
||
|
longline("<Any other key will quit>");
|
||
|
|
||
|
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("<Press space bar to continue>\n");
|
||
|
windgoto(helprow = Rows - 1, 47);
|
||
|
longline("<Any other key will quit>");
|
||
|
|
||
|
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("<Press space bar to continue>\n");
|
||
|
windgoto(helprow = Rows - 1, 47);
|
||
|
longline("<Any other key will quit>");
|
||
|
|
||
|
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("<Press space bar to continue>\n");
|
||
|
windgoto(helprow = Rows - 1, 47);
|
||
|
longline("<Any other key will quit>");
|
||
|
|
||
|
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("<Press space bar to continue>\n");
|
||
|
windgoto(helprow = Rows - 1, 47);
|
||
|
longline("<Any other key will quit>");
|
||
|
|
||
|
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("<Press space bar to continue>\n");
|
||
|
windgoto(helprow = Rows - 1, 47);
|
||
|
longline("<Any other key will quit>");
|
||
|
|
||
|
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("<Press any key>");
|
||
|
|
||
|
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<Press any key>");
|
||
|
|
||
|
vgetc();
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
#endif
|