/* * Return the default preference base directory */ const char *PrefDefUserDirReal (Preferences *pref) { if (!pref->defaultbasedir) { const char *home; #if HAVE_GETPWUID && HAVE_GETUID struct passwd *pwd = getpwuid (getuid ()); #endif #if defined(_WIN32) || (defined(__CYGWIN__) && defined(_X86_)) home = getenv ("USERPROFILE"); if (!home || !*home) #endif home = getenv ("HOME"); #if HAVE_GETPWUID && HAVE_GETUID if ((!home || !*home) && pwd && pwd->pw_dir) home = pwd->pw_dir; #endif #if defined(_WIN32) || (defined(__CYGWIN__) && defined(_X86_)) if (!home || !*home) home = os_packagehomedir (); #endif if (!home || !*home) home = _OS_PREFPATH; if (!home || !*home) pref->defaultbasedir = strdup (".micq" _OS_PATHSEPSTR); else if (home[strlen (home) - 1] != _OS_PATHSEP) pref->defaultbasedir = strdup (s_sprintf ("%s%c.micq%c", home, _OS_PATHSEP, _OS_PATHSEP)); else pref->defaultbasedir = strdup (s_sprintf ("%s.micq%c", home, _OS_PATHSEP)); } return pref->defaultbasedir; }
static void updateval(char *var, int val, char *onchange) { ident *id = getident(var); string assign; if(!id) return; else if(id->_type==ID_VAR) s_sprintf(assign)("%s %d", var, val); else if(id->_type==ID_ALIAS) s_sprintf(assign)("%s = %d", var, val); else return; executelater.add(newstring(assign)); if(onchange[0]) executelater.add(newstring(onchange)); };
/* * Print a given SNAC. */ void SnacPrint (Packet *pak) { UWORD fam, cmd, flag, opos = pak->rpos; UDWORD ref, len; pak->rpos = 6; fam = PacketReadB2 (pak); cmd = PacketReadB2 (pak); flag = PacketReadB2 (pak); ref = PacketReadB4 (pak); len = PacketReadAtB2 (pak, pak->rpos); rl_printf ("%s %sSNAC (%x,%x) [%s] flags %x ref %lx", s_dumpnd (pak->data + 6, flag & 0x8000 ? 10 + len : 10), COLDEBUG, fam, cmd, SnacName (fam, cmd), flag, ref); if (flag & 0x8000) { rl_printf (" extra (%ld)", len); pak->rpos += len + 2; } rl_printf ("%s\n", COLNONE); if (prG->verbose & DEB_PACK8DATA || ~prG->verbose & DEB_PACK8) { char *f, *syn = strdup (s_sprintf ("gs%dx%ds", fam, cmd)); rl_print (f = PacketDump (pak, syn, COLDEBUG, COLNONE)); free (f); free (syn); } pak->rpos = opos; }
/* * Open preference file. */ static FILE *PrefOpenRC (Preferences *pref) { if (!pref->rcfile) pref->rcfile = strdup (s_sprintf ("%smicqrc", PrefUserDir (pref))); return fopen (pref->rcfile, "r"); }
/* * Open status file. */ static FILE *PrefOpenStat (Preferences *pref) { if (!pref->statfile) pref->statfile = strdup (s_sprintf ("%sstatus", PrefUserDir (pref))); return fopen (pref->statfile, "r"); }
/* * Resets prompt to default prompt */ void ReadLinePromptReset (void) { Contact *cont; if (prG->flags & FLAG_UINPROMPT && (cont = uiG.last_sent)) ReadLinePromptSet (s_sprintf ("[%s]", cont->nick)); else ReadLinePromptSet (i18n (2467, "mICQ>")); }
/* * Determine for a character is display string and columns width */ static void rl_analyze_ucs (wint_tt ucs, const char **display, UWORD *columns) { char *utf = NULL; #if HAVE_WCWIDTH int width; #endif utf = strdup (ConvUTF8 (ucs)); *display = ConvTo (utf, ENC(enc_loc))->txt; if (ucs < 32 || ucs == 127 || ucs == 173) /* control code */ { *display = s_sprintf ("%s^%c%s", COLINVCHAR, (char)((ucs - 1 + 'A') & 0x7f), COLNONE); *columns = 2; } else if (ucs < 127) *columns = 1; #if HAVE_WCWIDTH else if (!prG->locale_broken && (width = rl_wcwidth (ucs, *display)) != -1) *columns = 256 | width; #else else if (ucs >= 160) /* no way I'll hard-code double-width or combining marks here */ *columns = 257; #endif else if (prG->locale_broken && !strcmp (ConvFrom (ConvTo (utf, ENC(enc_loc)), ENC(enc_loc))->txt, utf)) *columns = 257; else if (!(ucs & 0xffff0000)) /* more control code, or unknown */ { *display = s_sprintf ("%s\\u%c%c%c%c%s", COLINVCHAR, rl_hex (ucs / 4096), rl_hex (ucs / 256), rl_hex (ucs / 16), rl_hex (ucs), COLNONE); *columns = 6; } else /* unknown stellar planes */ { *display = s_sprintf ("%s\\U%c%c%c%c%c%c%c%c%s", COLINVCHAR, rl_hex (ucs / 268435456), rl_hex (ucs / 16777216), rl_hex (ucs / 1048576), rl_hex (ucs / 65536), rl_hex (ucs / 4096), rl_hex (ucs / 256), rl_hex (ucs / 16), rl_hex (ucs), COLNONE); *columns = 10; } free (utf); }
// here use Liu eng. 's cam method. int today_is_holiday( int group_id, int year, int month, int day ) { char buf[20]; char date_str[20]; s_sprintf( date_str, "%02d%04d%02d%02d", group_id,year, month, day ); if( txt_file_search_line( "holiday.txt", date_str, buf, sizeof( buf ) ) == 1 ) return 1; return 0; }
const char *ReadLinePrintWidth (const char *text, const char *left, const char *right, UWORD *width) { UWORD pwidth = *width, twidth; strc_t txt; txt = ReadLineAnalyzeWidth (text, &twidth); if (twidth > pwidth) *width = pwidth = twidth; return s_sprintf ("%s%s%s%*.*s", left, txt->txt, right, pwidth - twidth, pwidth - twidth, ""); }
void setnames(const char *fname, const char *cname = 0) { if(!cname) cname = fname; string name, pakname, mapname, cfgname; s_strncpy(name, cname, 100); char *slash = strpbrk(name, "/\\"); if(slash) { s_strncpy(pakname, name, slash-name+1); s_strcpy(cfgname, slash+1); } else { s_strcpy(pakname, "base"); s_strcpy(cfgname, name); }; if(strpbrk(fname, "/\\")) s_strcpy(mapname, fname); else s_sprintf(mapname)("base/%s", fname); s_sprintf(cgzname)("packages/%s.tmf", mapname); if(savebak==1) s_sprintf(bakname)("packages/%s.BAK", mapname); else s_sprintf(bakname)("packages/%s_%d.BAK", mapname, lastmillis); s_sprintf(pcfname)("packages/%s/package.cfg", pakname); s_sprintf(mcfname)("packages/%s/%s.cfg", pakname, cfgname); path(cgzname); path(bakname); };
void slider(int &val, int vmin, int vmax, int color, char *label) { autotab(); int x = curx; int y = cury; line_(10); if(visible()) { if(!label) { static string s; s_sprintf(s)("%d", val); label = s; } int w = text_width(label); bool hit; int px, py; if(ishorizontal()) { hit = ishit(FONTH, ysize, x, y); px = x + (FONTH-w)/2; py = y + (ysize-FONTH) - ((ysize-FONTH)*(val-vmin))/((vmax==vmin) ? 1 : (vmax-vmin)); //vmin at bottom } else { hit = ishit(xsize, FONTH, x, y); px = x + FONTH/2 - w/2 + ((xsize-w)*(val-vmin))/((vmax==vmin) ? 1 : (vmax-vmin)); //vmin at left py = y; } if(hit) color = 0xFF0000; text_(label, px, py, color, hit && actionon); if(hit && actionon) { int vnew = (vmin < vmax ? 1 : -1)+vmax-vmin; if(ishorizontal()) vnew = int(vnew*(y+ysize-FONTH/2-hity)/(ysize-FONTH)); else vnew = int(vnew*(hitx-x-FONTH/2)/(xsize-w)); vnew += vmin; vnew = vmin < vmax ? clamp(vnew, vmin, vmax) : clamp(vnew, vmax, vmin); if(vnew != val) val = vnew; } } }
/* * Handle tab key - continue tabbing backwards */ static void rl_key_shifttab (void) { str_s str = { NULL, 0, 0 }; const char *display; int off; UWORD columns; if (rl_tab_state <= 0) { printf ("\a"); return; } rl_linecompress (&rl_temp, rl_tab_pos, rl_ucspos); rl_tab_cont = rl_tab_getprev (&rl_temp); rl_left (rl_tab_common); for ( ; rl_tab_len; rl_tab_len--) rl_delete (); if (!rl_tab_cont) { printf ("\a"); rl_tab_state = 0; rl_recheck (TRUE); return; } str.txt = rl_tab_alias ? rl_tab_alias->alias : rl_tab_cont->nick; str.len = strlen (str.txt); for (off = 0; off < str.len; ) { wint_tt ucs = ConvGetUTF8 (&str, &off); rl_analyze_ucs (ucs, &display, &columns); rl_insert_basic (ucs, s_sprintf ("%s%s%s", rl_colon.txt, display, rl_coloff.txt), strlen (display) + rl_colon.len + rl_coloff.len, columns & 0xff); rl_tab_len++; } rl_left (rl_tab_len - rl_tab_common); rl_recheck (TRUE); }
int cam_read_time_area_list_from_week_table( int group_id, DWORD time, char* buf, int buf_size ) { DATETIME dt; char key[16]; char *week_table_file_name; // use normal week plan week_table_file_name = "week_table.txt"; RelatvieToDateTime( &dt, time ); if( today_is_holiday( group_id, dt.year, dt.month, dt.day ) == 1 ){ _d_str( "use holiday week plan" ); week_table_file_name = "holiday_week_table.txt"; } _d_str( week_table_file_name ); dt.weekday = date_to_week_day( &dt ); s_sprintf( key, "%02d%d", group_id, dt.weekday ); _d_str( key ); if( txt_file_search_line( week_table_file_name, key, buf, buf_size ) == 1 ){ return 1; } return -1; }
//tab is always at top of page void tab(const char *name, int color) { if(curdepth != 0) return; if(color) tcolor = color; tpos++; if(!name) { static string title; s_sprintf(title)("%d", tpos); name = title; } int w = text_width(name) - 2*INSERT; if(layoutpass) { ty = max(ty, ysize); ysize = 0; } else { cury = -ysize; int h = FONTH-2*INSERT, x1 = curx + tx, x2 = x1 + w + ((skinx[3]-skinx[2]) + (skinx[5]-skinx[4]))*SKIN_SCALE, y1 = cury - ((skiny[5]-skiny[1])-(skiny[3]-skiny[2]))*SKIN_SCALE-h, y2 = cury; bool hit = tcurrent && windowhit==this && hitx>=x1 && hity>=y1 && hitx<x2 && hity<y2; if(hit && (!guiclicktab || mousebuttons&G3D_DOWN)) { *tcurrent = tpos; //roll-over to switch tab color = 0xFF0000; } skin_(x1-skinx[visible()?2:6]*SKIN_SCALE, y1-skiny[1]*SKIN_SCALE, w, h, visible()?10:19, 9); text_(name, x1 + (skinx[3]-skinx[2])*SKIN_SCALE - INSERT, y1 + (skiny[2]-skiny[1])*SKIN_SCALE - INSERT, tcolor, visible()); } tx += w + ((skinx[5]-skinx[4]) + (skinx[3]-skinx[2]))*SKIN_SCALE; }
int main(const carg, const char *varg[]) { char *s; int i; s = NULL; i = 0; fprintf(stdout, "s_strcpy(NULL, \"\") == FALSE: "); if (s_strcpy(NULL, "") == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strncpy(NULL, \"\", 10) == FALSE: "); if (s_strncpy(NULL, "", 10) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strcat(NULL, \"\") == FALSE: "); if (s_strcat(NULL, "") == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strncat(NULL, \"\", 10) == FALSE: "); if (s_strncat(NULL, "", 10) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strcpy(&s, NULL) == FALSE: "); if (s_strcpy(&s, NULL) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strncpy(&s, NULL, 10) == FALSE: "); if (s_strncpy(&s, NULL, 10) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strcat(&s, NULL) == FALSE: "); if (s_strcat(&s, NULL) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strncat(&s, NULL, 10) == FALSE: "); if (s_strncat(&s, NULL, 10) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strcpy(&s, \"ab\"), strcmp(s, \"ab\") == 0: "); s_strcpy(&s, "ab"); if (strcmp(s, "ab") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strncpy(&s, \"ab\", 1), strcmp(s, \"a\") == 0: "); s_strncpy(&s, "ab", 1); if (strcmp(s, "a") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strcat(&s, \"ab\"), strcmp(s, \"aab\") == 0: "); s_strcat(&s, "ab"); if (strcmp(s, "aab") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strncat(&s, \"ab\", 1), strcmp(s, \"aaba\") == 0: "); s_strncat(&s, "ab", 1); if (strcmp(s, "aaba") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strcpy(&s, \"abcdefghij klmnop\"), s_strcpy(&s, s), strcmp(s, \"abcdefghij klmnop\") == 0: "); s_strcpy(&s, "abcdefghij klmnop"); s_strcpy(&s, s); if (strcmp(s, "abcdefghij klmnop") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strncpy(&s, s, 10), strcmp(s, \"abcdefghij\") == 0: "); s_strncpy(&s, s, 10); if (strcmp(s, "abcdefghij") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strcat(&s, s), strcmp(s, \"abcdefghijabcdefghij\") == 0: "); s_strcat(&s, s); if (strcmp(s, "abcdefghijabcdefghij") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_strncat(&s, s, 10), strcmp(s, \"abcdefghijabcdefghijabcdefghij\") == 0: "); s_strncat(&s, s, 10); if (strcmp(s, "abcdefghijabcdefghijabcdefghij") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_path(NULL, \"\", SYS_PATH_DELIM) == FALSE: "); if (s_path(NULL, "", SYS_PATH_DELIM) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_pathname(NULL, \"\", SYS_PATH_DELIM) == FALSE: "); if (s_pathname(NULL, "", SYS_PATH_DELIM) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_name(NULL, \"\", SYS_PATH_DELIM) == FALSE: "); if (s_name(NULL, "", SYS_PATH_DELIM) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_nameext(NULL, \"\", SYS_PATH_DELIM) == FALSE: "); if (s_nameext(NULL, "", SYS_PATH_DELIM) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_ext(NULL, \"\", SYS_PATH_DELIM) == FALSE: "); if (s_ext(NULL, "", SYS_PATH_DELIM) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_path(&s, NULL, SYS_PATH_DELIM) == FALSE: "); if (s_path(&s, NULL, SYS_PATH_DELIM) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_pathname(&s, NULL, SYS_PATH_DELIM) == FALSE: "); if (s_pathname(&s, NULL, SYS_PATH_DELIM) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_name(&s, NULL, SYS_PATH_DELIM) == FALSE: "); if (s_name(&s, NULL, SYS_PATH_DELIM) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_nameext(&s, NULL, SYS_PATH_DELIM) == FALSE: "); if (s_nameext(&s, NULL, SYS_PATH_DELIM) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_ext(&s, NULL, SYS_PATH_DELIM) == FALSE: "); if (s_ext(&s, NULL, SYS_PATH_DELIM) == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } s_strcpy(&s, "/path/name.ext"); s_path(&s, s, SYS_PATH_DELIM); fprintf(stdout, "s_strcpy(&s, \"/path/name.ext\"), s_path(&s, s, SYS_PATH_DELIM), strcmp(s, \"/path/\") == 0: "); if (strcmp(s, "/path/") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } s_strcpy(&s, "/path/name.ext"); s_pathname(&s, s, SYS_PATH_DELIM); fprintf(stdout, "s_strcpy(&s, \"/path/name.ext\"), s_pathname(&s, s, SYS_PATH_DELIM), strcmp(s, \"/path/name\") == 0: "); if (strcmp(s, "/path/name") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } s_strcpy(&s, "/path/name.ext"); s_name(&s, s, SYS_PATH_DELIM); fprintf(stdout, "s_strcpy(&s, \"/path/name.ext\"), s_name(&s, s, SYS_PATH_DELIM), strcmp(s, \"name\") == 0: "); if (strcmp(s, "name") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } s_strcpy(&s, "/path/name.ext"); s_nameext(&s, s, SYS_PATH_DELIM); fprintf(stdout, "s_strcpy(&s, \"/path/name.ext\"), s_nameext(&s, s, SYS_PATH_DELIM), strcmp(s, \"name.ext\") == 0: "); if (strcmp(s, "name.ext") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } s_strcpy(&s, "/path/name.ext"); s_ext(&s, s, SYS_PATH_DELIM); fprintf(stdout, "s_strcpy(&s, \"/path/name.ext\"), s_ext(&s, s, SYS_PATH_DELIM), strcmp(s, \".ext\") == 0: "); if (strcmp(s, ".ext") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } i += check_pathnameext("", "", "", "", "", ""); i += check_pathnameext("/", "/", "/", "", "", ""); i += check_pathnameext("path/", "path/", "path/", "", "", ""); i += check_pathnameext("name", "", "name", "name", "name", ""); i += check_pathnameext(".ext", "", "", "", ".ext", ".ext"); i += check_pathnameext("path/name", "path/", "path/name", "name", "name", ""); i += check_pathnameext("path/.ext", "path/", "path/", "", ".ext", ".ext"); i += check_pathnameext("name.ext", "", "name", "name", "name.ext", ".ext"); i += check_pathnameext("path/name.ext", "path/", "path/name", "name", "name.ext", ".ext"); i += check_pathnameext("path.e/", "path.e/", "path.e/", "", "", ""); i += check_pathnameext("path.e/name", "path.e/", "path.e/name", "name", "name", ""); i += check_pathnameext("path.e/.ext", "path.e/", "path.e/", "", ".ext", ".ext"); i += check_pathnameext("path.e/name.ext", "path.e/", "path.e/name", "name", "name.ext", ".ext"); fprintf(stdout, "s_sprintf(NULL, \"%%d abc %%s\", -2147483648, \"def\") == FALSE: "); if (s_sprintf(NULL, "%d abc %s", -2147483648, "def") == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "s_sprintf(&s, NULL, -2147483648, \"def\") == FALSE: "); if (s_sprintf(&s, NULL, -2147483648, "def") == FALSE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } s_sprintf(&s, "%d abc %s", -2147483648, "def"); fprintf(stdout, "s_sprintf(&s, \"%%d abc %%s\", -2147483648, \"def\"), strcmp(s, \"-2147483648 abc def\") == 0: "); if (strcmp(s, "-2147483648 abc def") == 0) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } fprintf(stdout, "is_equal_files(\"%s\", \"%s\") == TRUE: ", varg[0], varg[0]); if (is_equal_files(varg[0], varg[0]) == TRUE) fprintf(stdout, "OK\n"); else { fprintf(stdout, "failed.\n"); i++; } s_free(&s); fprintf(stderr, "Found %d errors.\n", i); return i; }
io_err_t UtilIOShowError (Connection *conn, io_err_t rc) { int e = errno; const char *t = NULL; switch (rc) { case IO_CONNECTED: rl_print (""); if (prG->verbose || (conn->serv && conn == conn->serv->conn)) if (rl_pos () > 0) rl_print (i18n (1634, "ok.\n")); return IO_CONNECTED; case IO_OK: return IO_OK; case IO_NO_MEM: case IO_NO_PARAM: assert (0); case IO_NO_SOCKET: if (1) t = i18n (1638, "Couldn't create socket"); else case IO_NO_NONBLOCK: if (1) t = i18n (1950, "Couldn't set socket nonblocking"); else case IO_NO_HOSTNAME: if (1) t = i18n (2743, "Can't find hostname"); else case IO_CONN_TO: if (1) t = i18n (2744, "Connection timed out"); else case IO_NO_CONN: t = i18n (1952, "Couldn't open connection"); if (prG->verbose || (conn->serv && conn == conn->serv->conn)) { Contact *cont = conn->cont; char *semi = strchr (conn->server, ';'); if (semi) *semi = 0; rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2745, "Opening connection to %s:%s%ld%s "), s_wordquote (conn->server), COLQUOTE, UD2UL (conn->port), COLNONE); if (semi) *semi = ';'; rl_print (i18n (1949, "failed:\n")); rl_printf ("%s [%d]\n", s_sprintf ("%s: %s (%d).", t, conn->dispatcher->funcs->f_err (conn, conn->dispatcher), e), __LINE__); } UtilIOClose (conn); return IO_RW; case IO_CLOSED: #ifdef ECONNRESET if (!errno) errno = ECONNRESET; #endif case IO_RW: if (prG->verbose || (conn->serv && conn == conn->serv->conn)) { Contact *cont; if ((cont = conn->cont)) { rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (1878, "Error while reading from socket: %s (%d, %d)\n"), conn->dispatcher->funcs->f_err (conn, conn->dispatcher), rc, errno); } } UtilIOClose (conn); return IO_RW; default: assert (0); } }
int sub_do_cam( int device_no, DWORD card_id, DWORD time, char* show_buf, int max_show_buf ) { char buf[64]; char time_area_list[32]; int group_id; int allow_id; int not_allow_id; char white_name_content[32]; int no, time_area_no; DWORD begin_time, end_time; int password = 0; //cam_read_white_name_record( card_id, buf ); _d_u( card_id ); if( cam_read_group_id_from_white_name_record( card_id, buf, sizeof(buf) ) < 0 ){ error_message( (char*)"can not search this card_id", card_id ); goto do_cam_error_exit; } //old design: 职员工号,职员姓名,物理卡号,组别,用户密码,反潜会控制 // card_id,group_id,show_mode_id,data.... //_d_str( buf ); strcpy( white_name_content, buf ); _d_str( white_name_content ); if( white_name_list_get_value( buf, &group_id, &allow_id, ¬_allow_id, &password ) < 0 ) goto not_allow_enter; //goto do_cam_error_exit; //_d_str( white_name_content ); if( cam_read_time_area_list_from_week_table( group_id, time, time_area_list, sizeof(time_area_list) ) < 0 ){ error_message( (char*)"read time_area_list error", group_id ); goto not_allow_enter; //goto do_cam_error_exit; } // loop check the time_area _d_str( time_area_list ); no = 0; while( 1 ){ _d_int( no ); time_area_no = cam_get_no_from_time_area_list( time_area_list, no ); if( time_area_no <= 0 ) break; _d_int( time_area_no ); //get time area, and check ok. if( cam_read_time_area_from_time_area_file( time_area_no, &begin_time, &end_time ) < 0 ){ error_message( (char*)"read time_area from time_area_file error", time_area_no ); break; } _d_int( begin_time ); _d_int( end_time ); _d_int( time ); if( begin_time <= time && time <= end_time ){ if( show_buf ){ // check the password. #if 0 if( password ){ buf[0] = 0; if( main_basic_gui_get_string( buf, sizeof(buf) ) < 0 ){ // or hint password input problem? goto not_allow_enter; } if( password != atoi( buf ) ){ // or hint password error? goto not_allow_enter; } } #endif if( card_group_operate() < 0 ) goto not_allow_enter; #if 0 // the password is ok. // deal the show info. if( txt_file_read_line( "/c/show", allow_id, buf, sizeof(buf) ) > 0 ){ //_d_str( buf ); cam_show( buf, white_name_content, show_buf, max_show_buf ); } else{ s_sprintf( show_buf, "%u, Allowed", card_id ); } #endif } return allow_id; } no ++; } _d_line(); not_allow_enter: _d_line(); #if 0 if( show_buf ){ _d_line(); // deal the show info. if( txt_file_read_line( "/c/show", not_allow_id, buf, sizeof(buf) ) > 0 ){ //_d_str( buf ); cam_show( buf, white_name_content, show_buf, max_show_buf ); } else{ s_sprintf( show_buf, "%u, Not Allowed", card_id ); } return -1; } #endif return -1; do_cam_error_exit: _d_line(); #if 0 if( show_buf ){ _d_line(); if( txt_file_read_line( "/c/show", 0, buf, sizeof(buf) ) > 0 ){ char *po = show_buf; char *buf_po; int len ; //_d_str( buf ); white_name_content[0] = 0; s_sprintf( po, "%u", card_id ); len = strlen( po ); po += len; buf_po = buf; _d_hex( buf_po[0] ); _d_hex( buf_po[1] ); _d_hex( buf_po[2] ); _d_hex( buf_po[3] ); if( (unsigned char)buf_po[0] == (unsigned char)0xef && (unsigned char)buf_po[1] == (unsigned char)0xbb && (unsigned char)buf_po[2] == (unsigned char)0xbf ) buf_po += 3; cam_show( buf_po, white_name_content, po, max_show_buf-len ); } else{ s_sprintf( show_buf, "%u, Error", card_id ); } } #endif //return -1; // illegal card return -2; }
void PeerFileResend (Event *event) { Contact *cont; Connection *fpeer = event->conn; Packet *pak; Event *event2; int rc; const char *opt_text; if (!fpeer) { EventD (event); return; } ASSERT_FILEDIRECT (fpeer); cont = event->cont; assert (cont); if (!OptGetStr (event->opt, CO_FILENAME, &opt_text)) opt_text = ""; if (event->attempts >= MAX_RETRY_P2PFILE_ATTEMPTS || (!event->pak && !event->seq)) { rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2168, "File transfer #%ld (%s) dropped after %ld attempts because of timeout.\n"), UD2UL (event->seq), opt_text, UD2UL (event->attempts)); TCPClose (fpeer); } else if (!(fpeer->connect & CONNECT_MASK)) { rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2072, "File transfer #%ld (%s) canceled because of closed connection.\n"), UD2UL (event->seq), opt_text); } else if (~fpeer->connect & CONNECT_OK) { if (!event->seq) event->attempts++; event->due = time (NULL) + 20; QueueEnqueue (event); return; } else if (!event->seq) { fpeer->oscar_dc_seq = 0; PeerPacketSend (fpeer, event->pak); PacketD (event->pak); event->pak = NULL; } else if (event->seq != fpeer->oscar_dc_seq) { event->due = time (NULL) + 10; QueueEnqueue (event); return; } else if (event->pak) { Connection *ffile; struct stat finfo; PeerPacketSend (fpeer, event->pak); PacketD (event->pak); event->pak = NULL; QueueEnqueue (event); ffile = ServerChild (fpeer->serv, fpeer->cont, TYPE_FILE); fpeer->oscar_file = ffile; if (stat (opt_text, &finfo)) { rc = errno; rl_printf (i18n (2071, "Couldn't stat file %s: %s (%d)\n"), s_wordquote (opt_text), strerror (rc), rc); } ffile->oscar_file_len = finfo.st_size; ffile->sok = open (opt_text, O_RDONLY); if (ffile->sok == -1) { int rc = errno; rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2083, "Cannot open file %s: %s (%d).\n"), opt_text, strerror (rc), rc); TCPClose (fpeer); ConnectionD (ffile); ConnectionD (fpeer); return; } return; } else if (!fpeer->oscar_file || fpeer->connect & CONNECT_SELECT_W) { event->attempts++; event->due = time (NULL) + 3; QueueEnqueue (event); return; } else { int len = 0; pak = PeerPacketC (fpeer, 6); len = read (fpeer->oscar_file->sok, pak->data + 1, 2048); if (len == -1) { len = errno; rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2086, "Error while reading file %s: %s (%d).\n"), opt_text, strerror (len), len); TCPClose (fpeer); } else { pak->len += len; fpeer->oscar_file->oscar_file_done += len; PeerPacketSend (fpeer, pak); PacketD (pak); if (len > 0) { if (fpeer->oscar_file->oscar_file_len) ReadLinePromptUpdate (s_sprintf ("[%s%ld %02d%%%s] %s%s", COLCONTACT, UD2UL (fpeer->oscar_file->oscar_file_done), (int)((100.0 * fpeer->oscar_file->oscar_file_done) / fpeer->oscar_file->oscar_file_len), COLNONE, COLSERVER, i18n (2467, "climm>"))); else ReadLinePromptUpdate (s_sprintf ("[%s%ld%s] %s%s", COLCONTACT, UD2UL (fpeer->oscar_file->oscar_file_done), COLNONE, COLSERVER, i18n (2467, "climm>"))); event->attempts = 0; QueueEnqueue (event); return; } ReadLinePromptReset (); rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2087, "Finished sending file %s.\n"), opt_text); ConnectionD (fpeer->oscar_file); fpeer->oscar_dc_seq++; event2 = QueueDequeue (fpeer, QUEUE_PEER_FILE, fpeer->oscar_dc_seq); if (event2) { QueueEnqueue (event2); QueueRetry (fpeer, QUEUE_PEER_FILE, fpeer->cont); return; } else { rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2088, "Finished sending all %d files.\n"), fpeer->oscar_dc_seq - 1); ConnectionD (fpeer); } } } EventD (event); }
/* * Dispatches incoming packets on the file transfer connection. */ void PeerFileDispatch (Connection *fpeer) { Contact *cont; Packet *pak; int err = 0; ASSERT_FILEDIRECT (fpeer); assert (fpeer->cont); cont = fpeer->cont; if (fpeer->connect & CONNECT_SELECT_W && UtilIOSelectIs (fpeer->sok, WRITEFDS)) { fpeer->connect &= ~CONNECT_SELECT_W; if (fpeer->oscar_file->oscar_file_len) ReadLinePromptUpdate (s_sprintf ("[%s%ld:%02d%%%s] %s%s", COLCONTACT, UD2UL (fpeer->oscar_file->oscar_file_done), (int)((100.0 * fpeer->oscar_file->oscar_file_done) / fpeer->oscar_file->oscar_file_len), COLNONE, COLSERVER, i18n (2467, "climm>"))); UtilIOSendTCP2 (fpeer, NULL); QueueRetry (fpeer, QUEUE_PEER_FILE, fpeer->cont); if (!UtilIOSelectIs (fpeer->sok, READFDS)) return; } if (!(pak = UtilIOReceiveTCP2 (fpeer))) return; if (prG->verbose & DEB_PACKTCP) TCPPrint (pak, fpeer, FALSE); switch (PacketRead1 (pak)) { strc_t name, text; UDWORD len, off, nr, speed; case 0: PacketRead4 (pak); /* EMPTY */ nr = PacketRead4 (pak); /* COUNT */ len = PacketRead4 (pak); /* BYTES */ speed= PacketRead4 (pak); /* SPEED */ name = PacketReadL2Str (pak, NULL); /* NICK */ PacketD (pak); rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2161, "Receiving %ld files with total size %ld bytes at speed %lx from %s.\n"), UD2UL (nr), UD2UL (len), UD2UL (speed), ConvFromCont (name, cont)); if (len != fpeer->oscar_file_len) { rl_printf ("FIXME: byte len different than in file request: requested %ld, sending %ld.\n", UD2UL (fpeer->oscar_file_len), UD2UL (len)); fpeer->oscar_file_len = len; } pak = PeerPacketC (fpeer, 1); PacketWrite4 (pak, 64); PacketWriteLNTS (pak, cont->nick); PeerPacketSend (fpeer, pak); PacketD (pak); return; case 1: speed = PacketRead4 (pak); /* SPEED */ name = PacketReadL2Str (pak, NULL); /* NICK */ PacketD (pak); rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2170, "Sending file at speed %lx to %s.\n"), UD2UL (speed), s_wordquote (ConvFromCont (name, cont))); fpeer->oscar_dc_seq = 1; QueueRetry (fpeer, QUEUE_PEER_FILE, cont); return; case 2: PacketRead1 (pak); /* EMPTY */ name = PacketReadL2Str (pak, NULL); text = PacketReadL2Str (pak, NULL); len = PacketRead4 (pak); PacketRead4 (pak); /* EMPTY */ PacketRead4 (pak); /* SPEED */ off = 0; PacketD (pak); { Connection *ffile = ServerChild (fpeer->serv, fpeer->cont, TYPE_FILE); char buf[200], *p; int pos = 0; struct stat finfo; assert (ffile); pos = snprintf (buf, sizeof (buf), "%sfiles" _OS_PATHSEPSTR "%s" _OS_PATHSEPSTR, PrefUserDir (prG), cont->screen); snprintf (buf + pos, sizeof (buf) - pos, "%s", ConvFromCont (name, cont)); for (p = buf + pos; *p; p++) if (*p == '/') *p = '_'; finfo.st_size = 0; if (!stat (buf, &finfo)) if ((UDWORD)finfo.st_size < len) off = finfo.st_size; fpeer->oscar_file = ffile; ffile->sok = open (buf, O_CREAT | O_WRONLY | (off ? O_APPEND : O_TRUNC), 0660); if (ffile->sok == -1) { int rc = errno; if (rc == ENOENT) { mkdir (s_sprintf ("%sfiles", PrefUserDir (prG)), 0700); mkdir (s_sprintf ("%sfiles" _OS_PATHSEPSTR "%s", PrefUserDir (prG), cont->screen), 0700); ffile->sok = open (buf, O_CREAT | O_WRONLY | (off ? O_APPEND : O_TRUNC), 0660); } if (ffile->sok == -1) { rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2083, "Cannot open file %s: %s (%d).\n"), buf, strerror (rc), rc); ConnectionD (fpeer); return; } } ffile->connect = CONNECT_OK; ffile->oscar_file_len = len; ffile->oscar_file_done = off; rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2162, "Receiving file %s (%s) with %ld bytes as %s.\n"), name->txt, text->txt, UD2UL (len), buf); } pak = PeerPacketC (fpeer, 3); PacketWrite4 (pak, off); PacketWrite4 (pak, 0); PacketWrite4 (pak, 64); PacketWrite4 (pak, 1); PeerPacketSend (fpeer, pak); PacketD (pak); return; case 3: off = PacketRead4 (pak); PacketRead4 (pak); /* EMPTY */ PacketRead4 (pak); /* SPEED */ nr = PacketRead4 (pak); /* NR */ PacketD (pak); rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2163, "Sending file %ld at offset %ld.\n"), UD2UL (nr), UD2UL (off)); err = lseek (fpeer->oscar_file->sok, off, SEEK_SET); if (err == -1) { err = errno; rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2084, "Error while seeking to offset %ld: %s (%d).\n"), UD2UL (off), strerror (err), err); TCPClose (fpeer); return; } fpeer->oscar_file->oscar_file_done = off; fpeer->oscar_file->connect = CONNECT_OK; QueueRetry (fpeer, QUEUE_PEER_FILE, cont); return; case 4: rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2169, "File transfer aborted by peer (%d).\n"), PacketRead1 (pak)); PacketD (pak); PeerFileClose (fpeer); return; case 5: rl_printf ("FIXME: Ignoring speed change to %d.\n", PacketRead1 (pak)); PacketD (pak); return; case 6: if (fpeer->oscar_file->oscar_file_done + pak->len - 1 > fpeer->oscar_file->oscar_file_len) { rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2165, "The peer sent more bytes (%ld) than the file length (%ld).\n"), UD2UL (fpeer->oscar_file->oscar_file_done + pak->len - 1), UD2UL (fpeer->oscar_file->oscar_file_len)); PacketD (pak); TCPClose (fpeer); return; } if (pak->len <= 1) { PacketD (pak); return; } len = write (fpeer->oscar_file->sok, pak->data + 1, pak->len - 1); if (len + 1 != pak->len) { rl_log_for (cont->nick, COLCONTACT); rl_printf (i18n (2575, "Error writing to file (%lu bytes written out of %u).\n"), UD2UL (len), pak->len - 1); PacketD (pak); TCPClose (fpeer); return; } fpeer->oscar_file->oscar_file_done += len; if (fpeer->oscar_file->oscar_file_len == fpeer->oscar_file->oscar_file_done) { ReadLinePromptReset (); rl_log_for (cont->nick, COLCONTACT); rl_print (i18n (2166, "Finished receiving file.\n")); #if HAVE_FSYNC fsync (fpeer->oscar_file->sok); #endif close (fpeer->oscar_file->sok); fpeer->oscar_file->sok = -1; fpeer->oscar_file->connect = CONNECT_OK; } else if (fpeer->oscar_file->oscar_file_len) { ReadLinePromptUpdate (s_sprintf ("[%s%ld %02d%%%s] %s%s", COLINCOMING, UD2UL (fpeer->oscar_file->oscar_file_done), (int)((100.0 * fpeer->oscar_file->oscar_file_done) / fpeer->oscar_file->oscar_file_len), COLNONE, COLSERVER, i18n (2467, "climm>"))); } PacketD (pak); return; default: rl_log_for (cont->nick, COLCONTACT); rl_print (i18n (2167, "Error - unknown packet.\n")); rl_print (s_dump (pak->data, pak->len)); PacketD (pak); PeerFileClose (fpeer); } if ((prG->verbose & DEB_TCP) && err) { rl_printf ("%s %s: %d\n", s_now, i18n (2029, "Protocol error on peer-to-peer connection"), err); PeerFileClose (fpeer); } }
/* * Handle tab key - start or continue tabbing */ static void rl_key_tab (void) { str_s str = { NULL, 0, 0 }; strc_t ins; const char *display; int i, off; UWORD columns; if (rl_tab_state == -1) { rl_insert (9); return; } if (!rl_tab_state) { if (!rl_ucs.len) { rl_insert ('m'); rl_insert ('s'); rl_insert ('g'); rl_insert (' '); } for (i = 0; i < rl_ucspos; i++) { if (rl_ucs_at (&rl_ucs, i) == ' ') { rl_tab_index = 0; rl_tab_state = 1; rl_tab_pos = i + 1; rl_linecompress (&rl_temp, rl_tab_pos, rl_ucspos); if ((rl_tab_cont = rl_tab_getnext (&rl_temp))) { ins = ConvTo (COLQUOTE, ENC(enc_loc)); s_init (&rl_colon, "", 0); s_catn (&rl_colon, ins->txt, ins->len); ins = ConvTo (COLNONE, ENC(enc_loc)); s_init (&rl_coloff, "", 0); s_catn (&rl_coloff, ins->txt, ins->len); while (rl_ucspos > rl_tab_pos) rl_left (1), rl_tab_len++; rl_tab_common = rl_tab_len; break; } } } if (!rl_tab_state) { printf ("\a"); return; } } else { rl_linecompress (&rl_temp, rl_tab_pos, rl_ucspos); rl_tab_cont = rl_tab_getnext (&rl_temp); rl_left (rl_tab_common); } for ( ; rl_tab_len; rl_tab_len--) rl_delete (); if (!rl_tab_cont) { printf ("\a"); rl_tab_state = 0; rl_recheck (TRUE); return; } str.txt = rl_tab_alias ? rl_tab_alias->alias : rl_tab_cont->nick; str.len = strlen (str.txt); for (off = 0; off < str.len; ) { wint_tt ucs = ConvGetUTF8 (&str, &off); rl_analyze_ucs (ucs, &display, &columns); rl_insert_basic (ucs, s_sprintf ("%s%s%s", rl_colon.txt, display, rl_coloff.txt), strlen (display) + rl_colon.len + rl_coloff.len, columns & 0xff); rl_tab_len++; } rl_left (rl_tab_len - rl_tab_common); rl_recheck (TRUE); }