[BACK]Return to dgamelaunch.h CVS log [TXT][DIR] Up to [contributed] / dgamelaunch-openbsd

Annotation of dgamelaunch-openbsd/dgamelaunch.h, Revision 1.1.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