Annotation of dgamelaunch-openbsd/dgamelaunch.h, Revision 1.2
1.1 rubenllo 1: /* IMPORTANT defines */
2:
3: #ifndef __DGAMELAUNCH_H
4: #define __DGAMELAUNCH_H
5:
6: #include "config.h"
7: #include <sys/param.h>
8: #include <sys/types.h>
9: #include <sys/stat.h>
10: #include <time.h>
11:
12: #ifdef USE_SHMEM
13: #include <semaphore.h>
14: #endif
15:
16: #ifndef ARRAY_SIZE
17: # define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
18: #endif
19:
20: #define dglsign(x) (x < 0 ? -1 : (x > 0 ? 1 : 0))
21:
22: #define DGL_PLAYERNAMELEN 30 /* max. length of player name */
1.2 ! rubenllo 23: #define DGL_PASSWDLEN 55 /* max. length of passwords */
1.1 rubenllo 24: #define DGL_MAILMSGLEN 80 /* max. length of mail message */
25:
26: #define DGL_MAXWATCHCOLS 10
27:
28: #define DGL_BANNER_LINELEN 256 /* max. length of banner lines*/
29:
30: #ifdef USE_NCURSES_COLOR
31: # define CLR_NORMAL COLOR_PAIR(11) | A_NORMAL
32: # define CLR_RED COLOR_PAIR(COLOR_RED) | A_NORMAL
33: #else
34: # define CLR_NORMAL 0
35: # define CLR_RED 0
36: #endif
37: extern int color_remap[];
38:
39: typedef enum
40: {
41: DGLACCT_ADMIN = 0x01, /* admin account */
42: DGLACCT_LOGIN_LOCK = 0x02, /* account is banned and cannot login */
43: DGLACCT_PASSWD_LOCK = 0x04, /* account password cannot be changed */
44: DGLACCT_EMAIL_LOCK = 0x08 /* account email cannot be changed */
45: } dgl_acct_flag;
46:
47: typedef enum
48: {
49: DGLTIME_DGLSTART = 0, /* when someone telnets in */
50: DGLTIME_LOGIN, /* right after user login */
51: DGLTIME_REGISTER, /* right after new nick is registered */
52: DGLTIME_GAMESTART, /* right before a game is started */
53: DGLTIME_GAMEEND, /* right after a game is ended */
54: NUM_DGLTIMES
55: } dglcmd_times;
56:
57: typedef enum
58: {
59: DGLCMD_NONE = 0,
60: DGLCMD_RAWPRINT, /* rawprint "foo" */
61: DGLCMD_MKDIR, /* mkdir foo */
62: DGLCMD_CHDIR, /* chdir foo */
63: DGLCMD_IF_NX_CP, /* ifnxcp foo bar */
64: DGLCMD_CP, /* cp foo bar */
65: DGLCMD_UNLINK, /* unlink foo */
66: DGLCMD_EXEC, /* exec foo bar */
67: DGLCMD_SETENV, /* setenv foo bar */
68: DGLCMD_WATCH_MENU, /* watch_menu */
69: DGLCMD_LOGIN, /* ask_login */
70: DGLCMD_REGISTER, /* ask_register */
71: DGLCMD_QUIT, /* quit */
72: DGLCMD_CHMAIL, /* chmail */
73: DGLCMD_CHPASSWD, /* chpasswd */
74: DGLCMD_PLAYGAME, /* play_game "foo" */
75: DGLCMD_PLAY_IF_EXIST, /* play_if_exist "game" "file" */
76: DGLCMD_SUBMENU, /* submenu "foo" */
77: DGLCMD_RETURN /* return */
78: } dglcmd_actions;
79:
80: typedef enum
81: {
82: SORTMODE_NONE = 0,
83: SORTMODE_USERNAME,
84: SORTMODE_GAMENUM,
85: SORTMODE_WINDOWSIZE,
86: SORTMODE_STARTTIME,
87: SORTMODE_DURATION,
88: SORTMODE_IDLETIME,
89: SORTMODE_EXTRA_INFO,
90: #ifdef USE_SHMEM
91: SORTMODE_WATCHERS,
92: #endif
93: NUM_SORTMODES
94: } dg_sortmode;
95:
96: static const char *SORTMODE_NAME[NUM_SORTMODES] = {
97: "Unsorted",
98: "Username",
99: "Game",
100: "Windowsize",
101: "Starttime",
102: "Duration",
103: "Idletime",
104: "Extrainfo",
105: #ifdef USE_SHMEM
106: "Watchers",
107: #endif
108: };
109:
110: struct dg_banner_var {
111: char *name;
112: char *value;
113: int special;
114: struct dg_banner_var *next;
115: };
116:
117: struct dg_cmdpart
118: {
119: dglcmd_actions cmd;
120: char *param1;
121: char *param2;
122: struct dg_cmdpart *next;
123: };
124:
125: struct dg_user
126: {
127: #ifdef USE_SQLITE3
128: long id;
129: #endif
130: char *username;
131: char *email;
132: char *env;
133: char *password;
134: int flags; /* dgl_acct_flag bitmask */
135: };
136:
137: struct dg_banner
138: {
139: char **lines;
140: unsigned int len;
141: };
142:
143: struct dg_menuoption
144: {
145: char *keys;
146: struct dg_cmdpart *cmdqueue;
147: struct dg_menuoption *next;
148: };
149:
150: struct dg_menu
151: {
152: char *banner_fn;
153: struct dg_banner banner;
154: int cursor_x, cursor_y;
155: struct dg_menuoption *options;
156: };
157:
158: struct dg_menulist
159: {
160: char *menuname;
161: struct dg_menu *menu;
162: struct dg_menulist *next;
163: };
164:
165: struct dg_shm
166: {
167: #ifdef USE_SHMEM
168: sem_t dg_sem;
169: #endif
170: long max_n_games;
171: long cur_n_games;
172: };
173:
174: struct dg_shm_game
175: {
176: long in_use;
177: long nwatchers;
178: char ttyrec_fn[150];
179: };
180:
181: struct dg_game
182: {
183: char *ttyrec_fn;
184: char *name;
185: char *date;
186: char *time;
187: time_t idle_time;
188: int ws_row, ws_col; /* Window size */
189: int gamenum;
190: int is_in_shm;
191: int shm_idx;
192: int nwatchers;
193:
194: char *extra_info;
195: int extra_info_weight;
196: };
197:
198: struct dg_config
199: {
200: char* game_path;
201: char* game_name;
202: char* game_id;
203: char* shortname;
204: char* rcfile;
205: char* ttyrecdir;
206: char* spool;
207: char* inprogressdir;
208: int num_args; /* # of bin_args */
209: char **bin_args; /* args for game binary */
210: char *rc_fmt;
211: struct dg_cmdpart *cmdqueue;
212: struct dg_cmdpart *postcmdqueue;
213: int max_idle_time;
214: char *extra_info_file;
215: int encoding; // -1 = run --print-charset
216: };
217:
218: struct dg_watchcols {
219: int dat;
220: int sortmode;
221: int x;
222: char *colname;
223: char *fmt;
224: };
225:
226: struct dg_globalconfig
227: {
228: char* chroot;
229: char* dglroot;
230: char* banner;
231: unsigned long max;
232: int max_newnick_len; /* maximum length of new registered names. must be less than 20 chars. */
233: char* shed_user;
234: char* shed_group;
235: uid_t shed_uid;
236: gid_t shed_gid;
237: char* passwd;
238: char* lockfile;
239: int allow_registration; /* allow registering new nicks */
240: int sortmode; /* default watching-screen sortmode */
241: struct dg_banner_var *banner_var_list;
242: char *locale;
243: int utf8esc; /* send select-utf8-charset escape code */
244: char *defterm; /* default TERM in case user TERM is unknown */
245: int flowctrl; /* XON/XOFF for games? */
246:
247: struct dg_cmdpart *cmdqueue[NUM_DGLTIMES];
248:
249: /* NULL terminated list of dg_watchcols pointers */
250: struct dg_watchcols *watch_columns[DGL_MAXWATCHCOLS + 1];
251: int n_watch_columns;
252:
253: struct dg_menulist *menulist;
254: int menu_max_idle_time;
255: };
256:
257:
258:
259: /* Global variables */
260: extern int shm_n_games; /* TODO: make configurable */
261:
262: extern char* config; /* file path */
263: extern struct dg_config **myconfig;
264: extern char *chosen_name;
265: extern int loggedin;
266: extern int silent;
267: extern int set_max;
268:
269: extern int selected_game;
270: extern int return_from_submenu;
271:
272: extern struct dg_globalconfig globalconfig;
273:
274: extern int num_games;
275:
276: extern mode_t default_fmode;
277:
278: extern int dgl_local_COLS;
279: extern int dgl_local_LINES;
280:
281: extern char last_ttyrec[512];
282:
283: /* dgamelaunch.c */
284: extern void create_config(void);
285: extern void ttyrec_getmaster(void);
286: extern char *get_mainmenu_name(void);
287: extern char *gen_ttyrec_filename(void);
288: extern char *gen_inprogress_lock(int game, pid_t pid, char *ttyrec_filename);
289: extern void catch_sighup(int signum);
290: extern void loadbanner(char *fname, struct dg_banner *ban);
291: extern void drawbanner(struct dg_banner *ban);
292: extern void banner_var_add(char *name, char *value, int special);
293: extern char *banner_var_value(char *name);
294: extern void banner_var_free(void);
295: extern int check_retard(int reset);
296: extern char *dgl_format_str(int game, struct dg_user *me, char *str, char *plrname);
297:
298: extern void term_resize_check();
299: extern void sigwinch_func(int sig);
300:
301: extern struct dg_menu *dgl_find_menu(char *menuname);
302:
303: extern int dgl_exec_cmdqueue(struct dg_cmdpart *queue, int game, struct dg_user *me);
304:
305: extern void free_populated_games(struct dg_game **games, int len);
306: extern struct dg_game **populate_games(int game, int *l, struct dg_user *me);
307:
308: #ifdef USE_DEBUGFILE
309: extern void debug_write(char *str);
310: #else
311: #define debug_write(str)
312: #endif
313:
314: extern struct dg_game **sort_games(struct dg_game **games, int len, dg_sortmode sortmode);
315:
316: int runmenuloop(struct dg_menu *menu);
317:
318: extern void signals_block(void);
319: extern void signals_release(void);
320:
321: extern void shm_sem_wait(struct dg_shm *shm_dg_data);
322: extern void shm_sem_post(struct dg_shm *shm_dg_data);
323: extern void shm_update(struct dg_shm *shm_dg_data, struct dg_game **games, int len);
324: extern void shm_mk_keys(key_t *shm_key, key_t *shm_sem_key);
325: extern void shm_init(struct dg_shm **shm_dg_data, struct dg_shm_game **shm_dg_game);
326:
327: extern int dgl_getch(void);
328: extern void idle_alarm_set_enabled(int enabled);
329: extern void idle_alarm_reset(void);
330: extern void inprogressmenu(int gameid);
331: extern void change_email(void);
332: extern int changepw(int dowrite);
333: extern void domailuser(char *username);
334: extern void drawmenu(void);
335: extern void freefile(void);
336: extern void initcurses(void);
337: extern void loginprompt(int from_ttyplay);
338: extern void newuser(void);
339: extern void autologin(char *user, char *pass);
340: extern int passwordgood(char *cpw);
341: extern int readfile(int nolock);
342: extern struct dg_user *userexist(char *cname, int isnew);
343: extern void write_canned_rcfile(int game, char *target);
344: extern void writefile(int requirenew);
345: extern void graceful_exit(int status);
346: extern int purge_stale_locks(int game);
347: /*extern int menuloop(void);*/
348: extern void ttyrec_getpty(void);
349: #ifndef HAVE_SETENV
350: extern int mysetenv (const char* name, const char* value, int overwrite);
351: #else
352: # define mysetenv setenv
353: #endif
354: #ifndef HAVE_SETPROCTITLE
355: void compat_init_setproctitle(int argc, char *argv[]);
356: void setproctitle(const char *fmt, ...);
357: #endif
358:
359: /* strlcpy.c */
360: extern size_t strlcpy (char *dst, const char *src, size_t siz);
361: extern size_t strlcat (char *dst, const char *src, size_t siz);
362:
363: /* mygetnstr.c */
364: extern int mygetnstr(char *buf, int maxlen, int doecho);
365:
366: #endif
CVSweb