|
|
1.1 root 1: /***************************************************************************
2: * This program is Copyright (C) 1986, 1987, 1988 by Jonathan Payne. JOVE *
3: * is provided to you without charge, and with no warranty. You may give *
4: * away copies of JOVE, including sources, provided that this notice is *
5: * included in all the files. *
6: ***************************************************************************/
7:
8: #define FUNCTION 1
9: #define VARIABLE 2
10: #define MACRO 3
11: #define KEYMAP 4
12: #ifdef MAC
13: # define BUFFER 6 /* menus can point to buffers, too */
14: # define STRING 7 /* a menu string or divider */
15: #endif
16:
17: #define TYPEMASK 07
18: #define obj_type(o) ((o)->Type & TYPEMASK)
19: #define MAJOR_MODE 010
20: #define MINOR_MODE 020
21: #define MODIFIER 040
22: #define MODFUNC (FUNCTION|MODIFIER)
23: #define DefMajor(x) (FUNCTION|MAJOR_MODE|((x) << 8))
24: #define DefMinor(x) (FUNCTION|MINOR_MODE|((x) << 8))
25:
26: struct macro {
27: int Type; /* in this case a macro */
28: char *Name; /* name is always second ... */
29: int m_len, /* length of macro so we can use ^@ */
30: m_buflen, /* memory allocated for it */
31: m_flags;
32: char *m_body; /* actual body of the macro */
33: struct macro
34: *m_nextm;
35: };
36:
37: struct cmd {
38: int Type;
39: char *Name;
40: void (*c_proc) proto((void));
41: #ifdef MAC
42: char c_map; /* prefix map for About Jove... */
43: char c_key; /* key binding for About Jove... */
44: #endif
45: };
46:
47: typedef struct data_obj {
48: int Type;
49: char *Name;
50: } data_obj; /* points to cmd, macro, keymap or variable */
51:
52: extern data_obj *LastCmd; /* last command invoked */
53:
54: extern const struct cmd commands[];
55: extern struct macro *macros;
56:
57: extern struct macro
58: *macstack[],
59: KeyMacro;
60:
61: extern const struct cmd
62: *FindCmd proto((void (*proc) proto((void))));
63:
64: extern data_obj
65: *findcom proto((char *prompt)),
66: *findmac proto((char *prompt)),
67: *findvar proto((char *prompt));
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.