vile: hook into build
authorAlan Cox <alan@linux.intel.com>
Fri, 9 Mar 2018 14:23:44 +0000 (14:23 +0000)
committerAlan Cox <alan@linux.intel.com>
Fri, 9 Mar 2018 14:23:44 +0000 (14:23 +0000)
Until we get rid of curses it's a bit large

Applications/util/Makefile.6809
Applications/util/Makefile.z80
Applications/util/vile.c

index 4b3c158..94eb18f 100644 (file)
@@ -118,18 +118,22 @@ SRCTC = tget.c \
         tchelp.c \
        marksman.c
 
+SRCCURSES = vile.c
+
 SKIPPED =
 
 
 OBJS = $(SRCS:.c=.o)
 OBJSNS = $(SRCSNS:.c=.o)
 OBJTC = $(SRCTC:.c=.o)
+OBJCURSES = $(SRCCURSES:.c=.o)
 
 APPS = $(OBJS:.o=)
 APPSNS = $(OBJSNS:.o=)
 APPTC = $(OBJTC:.o=)
+APPCURSES = $(OBJCURSES:.o=)
 
-all: $(APPS) $(APPSNS) $(APPTC) size.report
+all: $(APPS) $(APPSNS) $(APPTC) $(APPCURSES) size.report
 
 $(APPS): $(CRT0)
 $(APPSNS): $(CRT0NS)
@@ -140,6 +144,9 @@ $(APPS) $(APPSNS): %: %.o
 $(APPTC): %: %.o
        $(LINKER) -o $@ $(LINKER_OPT) $(CRT0) -ltermcap6809 $^
 
+$(APPCURSES): %: %.o
+       $(LINKER) -o $@ $(LINKER_OPT) $(CRT0) -lcurses6809 -ltermcap6809 $^
+
 size.report: $(APPS) $(APPSNS) $(APPTC)
        ls -l $^ > $@
 
index b3e0fcc..be6d059 100644 (file)
@@ -105,6 +105,7 @@ SRCS  = banner.c \
        uptime.c \
        uud.c \
        uue.c \
+       vile.c \
        wc.c \
        which.c \
        who.c \
@@ -144,6 +145,9 @@ tchelp: tchelp.rel
 tget: tget.rel
        $(FCC)  $(PLATFORM) $(OPTS) $< -o $@ -ltermcap
 
+vile: vile.rel
+       $(FCC)  $(PLATFORM) $(OPTS) $< -o $@ -lcurses -ltermcap
+
 %: %.rel
        $(FCC) $(PLATFORM) $(OPTS) $< -o $@
 
index 0d70ea3..963e349 100644 (file)
  *     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 {
@@ -154,6 +157,7 @@ int prevline(int);
 int save(char *);
 char *ptr(int);
 
+void warning(const char *);
 void display(void);
 void movegap(void);
 int insertch(char);
@@ -196,15 +200,20 @@ int join(void);
 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 },
@@ -213,9 +222,7 @@ keytable_t modeless[] = {
         { 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 },
@@ -258,10 +265,12 @@ keytable_t modeless[] = {
  */
 
 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 },
@@ -291,7 +300,7 @@ keytable_t modual[] = {
         { '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 },
@@ -712,6 +721,20 @@ int save(char *fn)
         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;
@@ -723,6 +746,18 @@ int noop(void)
         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;