Annotation of dgamelaunch-openbsd/dgamelaunch.h, Revision 1.1
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 */
! 23: #define DGL_PASSWDLEN 20 /* max. length of passwords */
! 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