--- a
+++ b/joe/cmd.h
@@ -0,0 +1,59 @@
+/*
+ *	Command execution
+ *	Copyright
+ *		(C) 1992 Joseph H. Allen
+ *
+ *	This file is part of JOE (Joe's Own Editor)
+ */
+#ifndef _JOE_CMD_H
+#define _JOE_CMD_H 1
+
+/* Command entry */
+
+struct cmd {
+	unsigned char	*name;		/* Command name */
+	int	flag;		/* Execution flags */
+	int	(*func) ();	/* Function bound to name */
+	MACRO	*m;		/* Macro bound to name */
+	int	arg;		/* 0= arg is meaningless, 1= ok */
+	unsigned char	*negarg;	/* Command to use if arg was negative */
+};
+
+extern CMD cmds[];		/* Built-in commands */
+extern int joe_beep;		/* Enable beep on command error */
+
+/* Command execution flags */
+
+#define EMID		  1	/* Recenter screen */
+#define ECHKXCOL	  2	/* Don't execute command if cursor column is wrong */
+#define EFIXXCOL	  4	/* Fix column position after command has executed */
+#define EMINOR		  8	/* Full screen update not needed */
+#define EPOS		 16	/* A position history command */
+#define EMOVE		 32	/* A movement for position history purposes */
+#define EKILL		 64	/* Function is a kill */
+#define EMOD		128	/* Not allowed on readonly files */
+/* These use same bits as TYPE* in types.h */
+#define EBLOCK		0x4000	/* Finish block selection (call udropon) */
+#define EMETA		0x10000	/* JM: Executes even when if flag is zero */
+
+/* CMD *findcmd(char *s);
+ * Return command address for given name
+ */
+CMD *findcmd PARAMS((unsigned char *s));
+void addcmd PARAMS((unsigned char *s, MACRO *m));
+
+/* Execute a command.  Returns return value of command */
+int execmd PARAMS((CMD *cmd, int k));
+void do_auto_scroll();
+
+extern B *cmdhist; /* Command history buffer */
+
+int try_lock PARAMS((BW *bw,B *b));
+int modify_logic PARAMS((BW *bw,B *b));
+
+int uexecmd PARAMS((BW *bw));
+
+extern int nolocks; /* Disable file locking */
+extern int nomodcheck; /* Disable file modified check */
+
+#endif