#include "../common/os.h"
#include "../common/rcformat.h"
#include "short.h"

#define private static
#define public

/*{{{  STD_C*/
#ifdef STD_C
#  define P(s) s
#else
#  define P(s) ()
#endif
/*}}}  */
/*{{{  constants*/
#define alias_lg 128
#define macro_lg 2048
#define name_lg  128
/*}}}  */
/*{{{  token-definition*/
typedef enum {
  ADD_COUNTER,
  AND,OR,
  BEGIN,
  BINDNAME,
  CASE,
  CHAR,
  COMMA,
  COUNTER,
  COUNTER_NULL,
  C_POSITIV,
  DEFAULT,
  DEFAUTO,
  DEFMACRO,
  DEFMARK,
  DEFOP,
  DO,
  DOLLAR,
  ELSE,
  END,
  ENDFILE,
  ERROR,
  ESAC,
  EXIT,
  FI,
  FORWARD,
  GOTO_COUNTER,
  GOTO_X,
  GOTO_Y,
  IF,
  INCLUDE,
  INITMACRO,
  INV_COUNTER,
  KBD,
  KEYALIAS,
  KEYDEF,
  LOC,
  MACRO,
  MES_EXIT,
  META,
  MULTIKBD,
  NAME,
  NODUP,
  NOT,
  OPCODE,
  OPERATION,
  PRE,
  PROMPT,
  PROMPT_COUNTER,
  READ_REPEAT,
  REPEAT,
  RETURN,
  SET_COUNTER,
  STORE_X,
  STORE_Y,
  SUM_COUNTER,
  TEST_BEGIN_FOLD,
  TEST_BEGIN_LINE,
  TEST_BEHIND_COUNTER,
  TEST_BOTTOM,
  TEST_CHANGED,
  TEST_CHAR,
  TEST_END_FOLD,
  TEST_END_LINE,
  TEST_FILED,
  TEST_FOLD_LINE,
  TEST_LANG,
  TEST_TEXT,
  TEST_TOP,
  VARIABLE,
  WHILE
} tokens;
/*}}}  */
/*{{{  typedefs*/
typedef struct { char *name; tokens value; } keywords;
typedef struct { char *key_name; char *code; int length; } ALIAS;
typedef struct {
  char *op_name;
  bool def;
  int length,place;
  TOKEN *ops;
} OP;
typedef struct { char *var_name; int no; } VARS;
typedef struct { char *name; TOKEN num; } KEYNAME;
/*}}}  */
/*{{{  KEYBIND*/
#ifndef KEYBIND_C
  extern void write_break_rc P((char));
  extern void write_mark_rc P((char*,char[4][tag_length-1]));
  extern bool write_name_rc P((char*));
  extern write_auto_rc P((int));
  extern bool write_macro_rc P((readtags,TOKEN,int,TOKEN*));
  extern void write_bind P((char *,char *,int));
  extern int k_counter;
  extern FILE *rc,*in,*popen();
  extern int int_no;
  extern bool verbose;
  extern char filebase[60];
#endif
/*}}}  */
/*{{{  PARCON*/
#ifndef PARCON
  extern TOKEN *parse_cond P((TOKEN*));
#endif
/*}}}  */
/*{{{  PARSMAC*/
#ifdef PARSMAC
  extern char *op_def_name;
  extern TOKEN *m_def;
#else
  extern TOKEN *parse_macro P((TOKEN*));
#endif
/*}}}  */
/*{{{  CODEHELP*/
#ifndef CODEHELP
  extern TOKEN *get_message P((TOKEN*));
  extern TOKEN *generate_jmp P((TOKEN,TOKEN*,TOKEN*));
  extern char *parse_keysequence P((char*,char*));
  extern TOKEN *put_var P((TOKEN*));
#endif
/*}}}  */
/*{{{  PARSER*/
#ifndef PARSER_C
  extern char abort_key;
  extern bool ab_set;
  extern bool process_file P((void));
#endif
/*}}}  */
/*{{{  KEYTAB*/
#ifndef KEYTAB_C
  extern bool add_keysequence P((TOKEN,char*,int));
  extern bool write_keynodes P((int));
  extern KEY *init_keytab P((int));
#endif
/*}}}  */
/*{{{  MESSAGES*/
#ifndef MESSAGE
  extern char F_BELONGS[];
  extern char F_BINDS[];
  extern char F_DEMAC[];
  extern char M_KBD_ERR[];
  extern char F_DNDMAC[];
  extern char F_DUPLICATE[];
  extern char F_ERRORPO[];
  extern char F_INCLUDE[];
  extern char F_INTS[];
  extern char F_ISMASKED[];
  extern char F_MARKT[];
  extern char F_MASKS[];
  extern char F_MDECLARE[];
  extern char F_NOBIND[];
  extern char F_NODES[];
  extern char F_NOKEYNUMBER[];
  extern char F_NOPIPE[];
  extern char F_NORC[];
  extern char F_OPERATION[];
  extern char F_SEQ[];
  extern char F_STMAC[];
  extern char F_KBDS[];
  extern char F_KBD_MISS[];
  extern char F_NODUP[];
  extern char F_DUP[];
  extern char M_KBD_BEGIN[];
  extern char M_ABORTUSED[];
  extern char M_ALIEND[];
  extern char M_KBDNAME[];
  extern char M_ANDBEGIN[];
  extern char M_ANDCOMMA[];
  extern char M_ANDEND[];
  extern char M_CASEEND[];
  extern char M_COMMANDLINE[];
  extern char M_MANY_KBD[];
  extern char M_DEFOEND[];
  extern char M_DEFONAME[];
  extern char M_DEPTH[];
  extern char M_DUPDEF[];
  extern char M_DUPKEY[];
  extern char M_EXPALIAS[];
  extern char M_FALSEEND[];
  extern char M_FIXFULL[];
  extern char M_INCORRECTFILES[];
  extern char M_KBD_KEY[];
  extern char M_INVMNAME[];
  extern char M_KEYEND[];
  extern char M_KEYNAME[];
  extern char M_KSNOBEGIN[];
  extern char M_MACBEGIN[];
  extern char M_MACNAME[];
  extern char M_MARKNAME[];
  extern char M_MDEFNAME[];
  extern char M_DUPAUTO[];
  extern char M_DUPAB[];
  extern char M_NOABORT[];
  extern char M_NOADDCOUNTER[];
  extern char M_NOALIAS[];
  extern char M_NOBFILE[];
  extern char M_NOBINDNAME[];
  extern char M_NOCHAR[];
  extern char M_NOCNTRL[];
  extern char M_NOCODE[];
  extern char M_NOCOMMAND[];
  extern char M_NODEBOUND[];
  extern char M_NOELSEFI[];
  extern char M_NOESAC[];
  extern char M_NOFI[];
  extern char M_NOFNAME[];
  extern char M_NOGOTO[];
  extern char M_NOJUMP[];
  extern char M_NOKCOMMAND[];
  extern char M_NOKEYCODE[];
  extern char M_NOMACROTAG[];
  extern char M_NOMEMORY[];
  extern char M_NOMESSAGE[];
  extern char M_NOMETA[];
  extern char M_NOMSTRING[];
  extern char M_NOPROMPT[];
  extern char M_NOREPEAT[];
  extern char M_NOTBEGIN[];
  extern char M_NOTEND[];
  extern char M_NOTEST[];
  extern char M_NOVAR[];
  extern char M_NOWHILE[];
  extern char M_ORBEGIN[];
  extern char M_ORCOMMA[];
  extern char M_OREND[];
  extern char M_SORTFAILED[];
  extern char M_TCNEEDSCHAR[];
  extern char M_WANTBEGIN[];
  extern char M_WANTCHAR[];
  extern char M_WANTEND[];
#endif
/*}}}  */
/*{{{  SCANNER*/
#ifndef SCANNER
  extern tokens get_token P((bool));
  extern void error_po P((void));
  extern int creat_var P((char*));
  extern void init_alias P((void));
  extern void sc_list_keys P((void));
  extern int read_in P((void));
  extern void creat_alias P((char*,char*,int));
  extern creat_op P((char*,bool,int,TOKEN*,int));
  extern char   tk_char;
  extern ALIAS  *tk_alias;
  extern KEYNAME *tk_key;
  extern OP     *tk_operation;
  extern VARS   *tk_var;
  extern char   tk_string[];
  extern TOKEN  tk_macro[];
  extern ALIAS  *func_key[64];
  extern OP     *new_op[64];
  extern VARS   *vars[128];
  extern char   *source;
#else
  extern bool verbose;
#endif
/*}}}  */
/*{{{  NAME*/
#ifndef NAME_C
  extern KEYNAME bindings[];
  extern keywords keytab[];
#endif
/*}}}  */

#undef P
