chiark / gitweb /
*** empty log message ***
authorjames <james>
Fri, 15 Feb 2008 15:14:19 +0000 (15:14 +0000)
committerjames <james>
Fri, 15 Feb 2008 15:14:19 +0000 (15:14 +0000)
src/cmd.c [new file with mode: 0644]
src/cmd.h [new file with mode: 0644]

diff --git a/src/cmd.c b/src/cmd.c
new file mode 100644 (file)
index 0000000..6017ccb
--- /dev/null
+++ b/src/cmd.c
@@ -0,0 +1,117 @@
+/*
+ * cmd.c:
+ *
+ * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
+ * All rights reserved.
+ *
+ */
+
+static char rcsid[] = "$Id$";
+
+/*
+ * $Log$
+ * Revision 1.1  2008/02/15 15:14:19  james
+ * *** empty log message ***
+ *
+ */
+
+#include "project.h"
+
+
+void
+cmd_parse (Cmd * c, Context * ctx, char *buf)
+{
+  if (!strcmp (buf, "quit"))
+    c->disconnect++;
+
+  if (!strcmp (buf, "flow"))
+    ctx->k->set_flow (ctx->k, ctx, 1);
+  if (!strcmp (buf, "noflow"))
+    ctx->k->set_flow (ctx->k, ctx, 0);
+  if (!strncmp (buf, "baud", 4))
+    ctx->k->set_baud (ctx->k, ctx, atoi (buf + 4));
+  if (!strncmp (buf, "break", 4))
+    ctx->k->send_break (ctx->k, ctx);
+
+}
+
+void
+cmd_show_status (Cmd * c, Context * ctx)
+{
+  if (!ctx->v)
+    return;
+
+  if (!c->active)
+    vt102_status_line (ctx->v, c->csl);
+  else
+    vt102_status_line (ctx->v, c->buf);
+
+
+}
+
+int
+cmd_key (Cmd * c, Context * ctx, int key)
+{
+
+  if (key == 13)
+    {
+      cmd_parse (c, ctx, c->buf + 1);
+      c->active = 0;
+      cmd_show_status (c, ctx);
+      return 0;
+    }
+
+  if (((key == 8) || (key == 127)) && (c->ptr > 1))
+    {
+      c->ptr--;
+      c->buf[c->ptr] = 0;
+    }
+
+  if ((key >= 32) && (key < 127))
+    {
+
+      c->buf[c->ptr] = key;
+      c->ptr++;
+      c->buf[c->ptr] = 0;
+
+    }
+
+  cmd_show_status (c, ctx);
+
+  return 0;
+}
+
+
+int
+cmd_activate (Cmd * c, Context * ctx)
+{
+  c->active = 1;
+  c->ptr = 1;
+  c->buf[0] = ':';
+  c->buf[1] = 0;
+
+  cmd_show_status (c, ctx);
+
+  return 0;
+}
+
+void
+cmd_new_status (Cmd * c, Context * ctx, char *msg)
+{
+  strcpy (c->csl, msg);
+  cmd_show_status (c, ctx);
+}
+
+
+
+Cmd *
+cmd_new (void)
+{
+  Cmd *ret;
+
+  ret = (Cmd *) malloc (sizeof (Cmd));
+
+  ret->disconnect = 0;
+  ret->active = 0;
+  ret->csl[0] = 0;
+}
diff --git a/src/cmd.h b/src/cmd.h
new file mode 100644 (file)
index 0000000..fb4e0ac
--- /dev/null
+++ b/src/cmd.h
@@ -0,0 +1,33 @@
+/*
+ * cmd.h:
+ *
+ * Copyright (c) 2008 James McKenzie <james@fishsoup.dhs.org>,
+ * All rights reserved.
+ *
+ */
+
+/*
+ * $Id$
+ */
+
+/*
+ * $Log$
+ * Revision 1.1  2008/02/15 15:14:19  james
+ * *** empty log message ***
+ *
+ */
+
+#ifndef __CMD_H__
+#define __CMD_H__
+
+#define CMD_KEY 2      /*CTRL B*/
+
+typedef struct {
+       int active;
+       int disconnect;
+       char csl[128];
+       char buf[128];
+       int ptr;
+} Cmd;
+
+#endif /* __CMD_H__ */