📄 cfgfiles.c
字号:
{"reconnect_delay", PREFS_OFFINT (recon_delay), TYPE_INT}, {"servernotice", PREFS_OFFINT (servernotice), TYPE_BOOL}, {"show_away_message", PREFS_OFFINT (show_away_message), TYPE_BOOL}, {"show_away_once", PREFS_OFFINT (show_away_once), TYPE_BOOL}, {"show_invite_in_front_session", PREFS_OFFINT (show_invite_in_front_session), TYPE_BOOL}, {"show_notify_in_front_session", PREFS_OFFINT (show_notify_in_front_session), TYPE_BOOL}, {"show_separator", PREFS_OFFINT (show_separator), TYPE_BOOL}, {"skipmotd", PREFS_OFFINT (skipmotd), TYPE_BOOL}, {"skipserverlist", PREFS_OFFINT (skipserverlist), TYPE_BOOL}, {"soundcmd", PREFS_OFFSET (soundcmd), TYPE_STR}, {"sounddir", PREFS_OFFSET (sounddir), TYPE_STR}, {"stamp_format", PREFS_OFFSET (stamp_format), TYPE_STR}, {"stripcolor", PREFS_OFFINT (stripcolor), TYPE_BOOL}, {"style_inputbox", PREFS_OFFINT (style_inputbox), TYPE_BOOL}, {"style_namelistgad", PREFS_OFFINT (style_namelistgad), TYPE_BOOL}, {"tabchannels", PREFS_OFFINT (tabchannels), TYPE_BOOL}, {"tabs_position", PREFS_OFFINT (tabs_position), TYPE_INT}, {"thin_separator", PREFS_OFFINT (thin_separator), TYPE_BOOL}, {"throttle", PREFS_OFFINT (throttle), TYPE_BOOL}, {"throttlemeter", PREFS_OFFINT (throttlemeter), TYPE_INT}, {"timestamp", PREFS_OFFINT (timestamp), TYPE_BOOL}, {"timestamp_logs", PREFS_OFFINT (timestamp_logs), TYPE_BOOL}, {"timestamp_log_format", PREFS_OFFSET (timestamp_log_format), TYPE_STR}, {"tint", PREFS_OFFINT (tint), TYPE_BOOL}, {"tint_blue", PREFS_OFFINT (tint_blue), TYPE_INT}, {"tint_green", PREFS_OFFINT (tint_green), TYPE_INT}, {"tint_red", PREFS_OFFINT (tint_red), TYPE_INT}, {"topicbar", PREFS_OFFINT (topicbar), TYPE_BOOL}, {"transparent", PREFS_OFFINT (transparent), TYPE_BOOL},#ifdef USE_TRANS {"trans_file", PREFS_OFFSET (trans_file), TYPE_STR},#endif {"treeview", PREFS_OFFINT (treeview), TYPE_BOOL}, {"use_fontset", PREFS_OFFINT (use_fontset), TYPE_BOOL}, {"use_server_tab", PREFS_OFFINT (use_server_tab), TYPE_BOOL},#ifdef USE_TRANS {"use_trans", PREFS_OFFINT (use_trans), TYPE_BOOL},#endif {"userhost", PREFS_OFFINT (userhost), TYPE_BOOL}, {"userlist_sort", PREFS_OFFINT (userlist_sort), TYPE_INT}, {"userlist_icons", PREFS_OFFINT (userlist_icons), TYPE_BOOL}, {"userlistbuttons", PREFS_OFFINT (userlistbuttons), TYPE_BOOL}, {"username", PREFS_OFFSET (username), TYPE_STR}, {"wallops", PREFS_OFFINT (wallops), TYPE_BOOL}, {"whois_on_notifyonline", PREFS_OFFINT (whois_on_notifyonline), TYPE_BOOL}, {"windows_as_tabs", PREFS_OFFINT (windows_as_tabs), TYPE_BOOL}, {"wordwrap", PREFS_OFFINT (wordwrap), TYPE_BOOL}, {0, 0, 0},};voidload_config (void){ struct stat st; char *cfg, *username; int res, val, i, fh;#ifdef USE_JCODE gchar *locale;#endif memset (&prefs, 0, sizeof (struct xchatprefs)); /* Just for ppl upgrading --AGL */ strcpy (prefs.logmask, "%s,%c.xchatlog"); strcpy (prefs.nick_suffix, ":"); strcpy (prefs.cmdchar, "/"); prefs.auto_indent = 1; prefs.max_auto_indent = 256; prefs.mail_check = 1; prefs.show_separator = 1; prefs.dialog_show_separator = 1; prefs.dcc_blocksize = 1024; prefs.throttle = 1; /*FIXME*/ prefs.msg_time_limit = 30; prefs.msg_number_limit = 5; prefs.ctcp_time_limit = 30; prefs.ctcp_number_limit = 5; prefs.topicbar = 1; prefs.lagometer = 1; prefs.throttlemeter = 1; prefs.nickgad = 1; prefs.autoopendccrecvwindow = 1; prefs.autoopendccsendwindow = 1; prefs.autoopendccchatwindow = 1; prefs.chanmodebuttons = 1; prefs.userhost = 1; prefs.userlistbuttons = 1; prefs.hilightnick = 1; prefs.persist_chans = 1; prefs.userlist_icons = 1; prefs.perc_color = 1; prefs.dialog_width = 300; prefs.dialog_height = 100; prefs.dcc_send_fillspaces = 1; prefs.mainwindow_save = 1; strcpy (prefs.stamp_format, "[%H:%M:%S] "); strcpy (prefs.timestamp_log_format, "%b %d %H:%M:%S ");#ifdef USE_JCODE locale = setlocale (LC_CTYPE, ""); if (locale != NULL && !g_strncasecmp (locale, "ja", 2)) prefs.kanji_conv = 1;#endif check_prefs_dir (); username = g_get_user_name (); if (!username) username = "root"; fh = open (default_file (), OFLAGS | O_RDONLY); if (fh != -1) { fstat (fh, &st); cfg = malloc (st.st_size + 1); cfg[0] = '\0'; i = read (fh, cfg, st.st_size); if (i >= 0) cfg[i] = '\0'; /* make sure cfg is NULL terminated */ close (fh); i = 0; do { switch (vars[i].type) { case TYPE_STR: cfg_get_str (cfg, vars[i].name, (char *) &prefs + vars[i].offset); break; case TYPE_BOOL: case TYPE_INT: val = cfg_get_int_with_result (cfg, vars[i].name, &res); if (res) *((int *) &prefs + vars[i].offset) = val; break; } i++; } while (vars[i].type != 0); free (cfg); } else {#ifndef WIN32#ifdef __EMX__ /* OS/2 uses UID 0 all the time */ fe_message (_("The default download directory is your\n" "home dir, you should change this at some stage."), TRUE);#else if (getuid () == 0) fe_message (_("* Running IRC as root is stupid! You should\n" " create a User Account and use that to login.\n\n" "* The default download directory is your\n" " home dir, you should change this at some stage."), TRUE); else fe_message ("The default download directory is your\n" "home dir, you should change this at some stage.", TRUE);#endif#endif /* !WIN32 */ /* put in default values, anything left out is automatically zero */ prefs.autoresume = 1; prefs.show_away_once = 1; prefs.show_away_message = 1; prefs.indent_pixels = 80; prefs.dialog_indent_pixels = 80; prefs.indent_nicks = 1; prefs.dialog_indent_nicks = 1; prefs.thin_separator = 1; prefs.fastdccsend = 1; prefs.wordwrap = 1; prefs.dialog_wordwrap = 1; prefs.autosave = 1; prefs.autodialog = 1; prefs.autoreconnect = 1; prefs.recon_delay = 10; prefs.tabchannels = 1; prefs.newtabstofront = 1; prefs.use_server_tab = 1; prefs.windows_as_tabs = 1; prefs.privmsgtab = 1; prefs.nickcompletion = 1; prefs.style_inputbox = 1; prefs.nu_color = 4; prefs.dccpermissions = 0600; prefs.max_lines = 300; prefs.mainwindow_width = 630; prefs.mainwindow_height = 422; prefs.dcctimeout = 180; prefs.dccstalltimeout = 60; prefs.notify_timeout = 15; prefs.tint_red = prefs.tint_green = prefs.tint_blue = prefs.dialog_tint_red = prefs.dialog_tint_green = prefs.dialog_tint_blue = 195; strcpy (prefs.nick1, username); strcpy (prefs.nick2, username); strcat (prefs.nick2, "_"); strcpy (prefs.nick3, username); strcat (prefs.nick3, "__"); strcpy (prefs.realname, username); strcpy (prefs.username, username);#ifdef WIN32 strcpy (prefs.sounddir, "./sound"); strcpy (prefs.dccdir, "./dcc");#else strcpy (prefs.dccdir, g_get_home_dir ()); strcpy (prefs.sounddir, prefs.dccdir);#endif strcpy (prefs.doubleclickuser, "/QUOTE WHOIS %s"); strcpy (prefs.awayreason, _("I'm busy")); strcpy (prefs.quitreason, _("Client Exiting")); strcpy (prefs.partreason, prefs.quitreason);#ifdef USE_JCODE prefs.use_fontset = 1; strcpy (prefs.font_normal, DEF_FONT_JCODE);#else#ifdef WIN32 strcpy (prefs.font_normal, DEF_FONT_WIN32);#else strcpy (prefs.font_normal, DEF_FONT);#endif#endif strcpy (prefs.dialog_font_normal, prefs.font_normal); strcpy (prefs.soundcmd, "esdplay"); strcpy (prefs.dnsprogram, "host"); } if (prefs.mainwindow_height < 138) prefs.mainwindow_height = 138; if (prefs.mainwindow_width < 106) prefs.mainwindow_width = 106;}intsave_config (void){ int fh, i; check_prefs_dir (); fh = open (default_file (), OFLAGS | O_TRUNC | O_WRONLY | O_CREAT, 0600); if (fh == -1) return 0; cfg_put_str (fh, "version", VERSION); i = 0; do { switch (vars[i].type) { case TYPE_STR: cfg_put_str (fh, vars[i].name, (char *) &prefs + vars[i].offset); break; case TYPE_INT: case TYPE_BOOL: cfg_put_int (fh, *((int *) &prefs + vars[i].offset), vars[i].name); } i++; } while (vars[i].type != 0); close (fh); return 1;}static voidset_showval (session *sess, struct prefs *var, char *tbuf){ int len, dots, j; static char *offon[] = { "OFF", "ON" }; len = strlen (var->name); memcpy (tbuf, var->name, len); dots = 29 - len; if (dots < 0) dots = 0; tbuf[len++] = '\003'; tbuf[len++] = '2'; for (j=0;j<dots;j++) tbuf[j + len] = '.'; len += j; switch (var->type) { case TYPE_STR: sprintf (tbuf + len, "\0033:\017 %s\n", (char *) &prefs + var->offset); break; case TYPE_INT: sprintf (tbuf + len, "\0033:\017 %d\n", *((int *) &prefs + var->offset)); break; case TYPE_BOOL: sprintf (tbuf + len, "\0033:\017 %s\n", offon[ *((int *) &prefs + var->offset)]); break; } PrintText (sess, tbuf);}static voidset_list (session * sess, char *tbuf){ int i; i = 0; do { set_showval (sess, &vars[i], tbuf); i++; } while (vars[i].type != 0);}intcfg_get_bool (char *var){ int i = 0; do { if (!strcasecmp (var, vars[i].name)) { return *((int *) &prefs + vars[i].offset); } i++; } while (vars[i].type != 0); return -1;}intcmd_set (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ int wild = FALSE; int i = 0, finds = 0, found; char *var = word[2]; char *val = word_eol[3]; if (!*var) { set_list (sess, tbuf); return TRUE; } if ((strchr (var, '*') || strchr (var, '?')) && !*val) wild = TRUE; if (*val == '=') val++; do { if (wild) found = !match (var, vars[i].name); else found = strcasecmp (var, vars[i].name); if (found == 0) { finds++; switch (vars[i].type) { case TYPE_STR: if (*val) { strcpy ((char *) &prefs + vars[i].offset, val); sprintf (tbuf, "%s set to: %s\n", var, val); PrintText (sess, tbuf); } else { set_showval (sess, &vars[i], tbuf); } break; case TYPE_INT: case TYPE_BOOL: if (*val) { if (vars[i].type == TYPE_BOOL) { if (atoi (val)) *((int *) &prefs + vars[i].offset) = 1; else *((int *) &prefs + vars[i].offset) = 0; if (!strcasecmp (val, "YES") || !strcasecmp (val, "ON")) *((int *) &prefs + vars[i].offset) = 1; if (!strcasecmp (val, "NO") || !strcasecmp (val, "OFF")) *((int *) &prefs + vars[i].offset) = 0; } else { *((int *) &prefs + vars[i].offset) = atoi (val); } sprintf (tbuf, "%s set to: %d\n", var, *((int *) &prefs + vars[i].offset)); PrintText (sess, tbuf); } else { set_showval (sess, &vars[i], tbuf); } break; } } i++; } while (vars[i].type != 0); if (!finds) PrintText (sess, "No such variable.\n"); return TRUE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -