* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
+#include <stdint.h>
#include <ctype.h>
#include <curses.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
+#include <errno.h>
#ifndef BUF
#define BUF 16384
#endif /* BUF */
#ifndef HUP
-#define HUP "ae.hup"
+#define HUP "vile.hup"
#endif /* HUP */
typedef struct keytable_t {
int save(char *);
char *ptr(int);
+void warning(const char *);
void display(void);
void movegap(void);
int insertch(char);
int eword(void);
int findleft(void);
int findright(void);
+int zz(void);
#undef CTRL
#define CTRL(x) ((x) & 0x1f)
keytable_t modeless[] = {
+#ifdef KEY_LEFT
{ KEY_LEFT, 0, left },
{ KEY_RIGHT, 0, right },
{ KEY_DOWN, 0, down },
{ KEY_UP, 0, up },
+ { KEY_BACKSPACE, 0, backsp },
+ { KEY_DC, 0, delete },
+#endif
{ CTRL('w'), 0, wleft },
{ CTRL('e'), 0, wright },
{ CTRL('n'), 0, pgdown },
{ CTRL('d'), NORPT, lnend },
{ CTRL('t'), NORPT, top },
{ CTRL('b'), NORPT, bottom },
- { KEY_BACKSPACE, 0, backsp },
{ '\b', 0, backsp },
- { KEY_DC, 0, delete },
{ CTRL('f'), NORPT, file },
{ CTRL('r'), NORPT, redraw },
{ CTRL('\\'), NORPT, quit },
*/
keytable_t modual[] = {
+#ifdef KEY_LEFT
{ KEY_LEFT, 0, left },
{ KEY_RIGHT, 0, right },
{ KEY_DOWN, 0, down },
{ KEY_UP, 0, up },
+#endif
{ 27, NORPT, noop },
{ 'h', 0, left },
{ '\b', 0, left },
{ 'W', NORPT, file },
{ 'R', NORPT, redraw },
{ 'Q', NORPT, quit },
- { 'Z', NORPT, flip },
+ { 'Z', NORPT, zz },
{ 'd', 0, delete_line }, /* Should be dd */
{ 'a', NORPT, append_mode },
{ 'A', NORPT, append_end },
return (ok);
}
+int zz(void)
+{
+ int c = getch();
+ if (c != 'Z' && c != 'z') {
+ beep();
+ return 0;
+ }
+ /* Check if changed ? */
+ if (!save(filename))
+ warning(strerror(errno));
+ else
+ exit(0);
+}
+
int flip(void)
{
table = table == modual ? modeless : modual;
return 0;
}
+void warning(const char *p)
+{
+ /* This sort of assumes the error fits one line */
+ /* Ideally inverse video etc and clr to end */
+ mvaddstr(LINES-1, 0, p);
+ clrtoeol();
+ refresh();
+ beep();
+ getch();
+ display();
+}
+
void display(void)
{
char *p;