int main() { BApplication app("application/x-vnd.Haiku-PPMTranslator"); BView * v = NULL; BRect r(0, 0, 1, 1); if (MakeConfig(NULL, &v, &r)) { BAlert * err = new BAlert("Error", B_TRANSLATE("Something is wrong with the PPMTranslator!"), B_TRANSLATE("OK")); err->Go(); return 1; } PPMWindow *w = new PPMWindow(r); v->ResizeTo(r.Width(), r.Height()); w->AddChild(v); BPoint o = get_window_origin(); { BScreen scrn; BRect f = scrn.Frame(); f.InsetBy(10,23); /* if not in a good place, start where the cursor is */ if (!f.Contains(o)) { uint32 i; v->GetMouse(&o, &i, false); o.x -= r.Width()/2; o.y -= r.Height()/2; /* clamp location to screen */ if (o.x < f.left) o.x = f.left; if (o.y < f.top) o.y = f.top; if (o.x > f.right) o.x = f.right; if (o.y > f.bottom) o.y = f.bottom; } } w->MoveTo(o); w->Show(); app.Run(); return 0; }
bool TextureGroupHandler::Save(const char *fn) { // open a cfg writer CfgWriter writer(fn); if (writer.IsFailed()) { fltk::message ("Unable to save texture groups to %s\n", fn); return false; } // create a config list and save it CfgList cfg; for (uint a=0;a<groups.size();a++) { CfgList *gc=MakeConfig(groups[a]); char n [10]; sprintf (n, "group%d", a); cfg.AddValue (n, gc); } cfg.Write(writer,true); return true; }
int main(int argc, char **argv) { int i, use_stdin, use_mbox; char *configfile = NULL; char **tlang, *locale_code; int cmd_show_variables; int print_usage; int amount_old = 0; /* number of old mails */ int amount_new = 0; /* number of new mails */ #ifdef HAVE_LOCALE_H setlocale(LC_ALL, ""); #endif lockfile[0] = '\0'; use_stdin = 0; print_usage = 0; use_mbox = 0; firstdatenum = lastdatenum = 0; configfile = strsav(CONFIGFILE); cmd_show_variables = 0; opterr = 0; #define GETOPT_OPTSTRING ("a:Ab:c:d:gil:L:m:n:o:ps:tTuvVxX0:1M?") /* get pre config options here */ while ((i = getopt(argc, argv, GETOPT_OPTSTRING)) != -1) { switch ((char)i) { case 'c': configfile = strreplace(configfile, optarg); break; case 'v': cmd_show_variables = TRUE; break; case 'V': version(); /*NOTREACHED*/ case 'a': case 'A': case 'b': case 'd': case 'g': case 'i': case 'l': case 'L': case 'm': case 'n': case 'o': case 'p': case 's': case 't': case 'T': case 'u': case 'x': case 'X': case '0': case '1': case 'M': break; case '?': default: /* * Because we need to setup the language support, * printing of the usage message must be deferred * until the proper language is determined. */ print_usage = 1; break; } } /* * ...then read the configuration file. */ readconfigs(configfile, cmd_show_variables); /* reset the getopt() index variable */ optind = 1; /* now get the post-config options! */ while ((i = getopt(argc, argv, GETOPT_OPTSTRING)) != -1) { switch ((char)i) { case 'A': set_append = 1; break; case 'a': set_archives = strreplace(set_archives, optarg); break; case 'b': set_about = strreplace(set_about, optarg); break; case 'c': /* config file from pre-config options */ break; case 'd': set_dir = strreplace(set_dir, optarg); break; case 'g': set_usegdbm = 1; break; case 'i': use_stdin = TRUE; break; case 'l': set_label = strreplace(set_label, optarg); break; case 'L': set_language = strreplace(set_language, optarg); break; case 'm': set_mbox = strreplace(set_mbox, optarg); break; case 'n': set_hmail = strreplace(set_hmail, optarg); break; case 'o': ConfigAddItem(optarg); break; case 'p': set_showprogress = TRUE; break; case 's': set_htmlsuffix = strreplace(set_htmlsuffix, optarg); break; case 't': set_usetable = TRUE; break; case 'T': set_indextable = TRUE; break; case 'u': set_increment = TRUE; break; case 'v': cmd_show_variables = TRUE; break; case 'x': set_overwrite = TRUE; break; case 'X': set_writehaof = TRUE; break; case '0': set_delete_msgnum = add_list(set_delete_msgnum, optarg); break; case '1': set_readone = TRUE; break; case 'M': set_usemeta = TRUE; break; case 'N': set_nonsequential = TRUE; break; case '?': default: break; } } #ifdef DEBUG dump_config(); exit(0); #endif /* * Now override the configuration file variables with any explicitly * passed on the command line. This way you need not change the * configuration file settings for a minor change in a single run. */ /* * Check and make sure that the supplied language is a * valid language. Otherwise strange things happen quickly. */ if (strlen(set_language) > 2) { locale_code = strsav(set_language); set_language[2] = 0; /* shorten to 2-letter code */ } else locale_code = NULL; if ((tlang = valid_language(set_language, &locale_code)) == NULL) { snprintf(errmsg, sizeof(errmsg), "\"%s\" %s.", set_language, lang[MSG_LANGUAGE_NOT_SUPPORTED]); cmderr(errmsg); } #ifdef HAVE_LOCALE_H if (!setlocale(LC_ALL, locale_code)) { snprintf(errmsg, sizeof(errmsg), "WARNING: locale \"%s\", not supported.\n", locale_code); fprintf(stderr, "%s", errmsg);/* AUDIT biege: avoid format-bug warning */ } #endif lang = tlang; /* A good language, make it so. */ if (print_usage) /* Print the usage message and terminate */ usage(); #ifndef GDBM if (set_usegdbm) { fprintf(stderr, "%s: %s\n", PROGNAME, lang[MSG_OPTION_G_NOT_BUILD_IN]); usage(); } #endif #ifndef HAVE_LIBFNV if (set_nonsequential) progerr("Hypermail isn't built with the libfnv hash library.\n" "You cannot use the nonsequential option.\n"); #endif /* HAVE_LIBFNV */ if (set_mbox && !strcasecmp(set_mbox, "NONE")) { use_stdin = TRUE; } /* the list of headers that we always show and that we want to avoid showing twice when printing the body */ set_skip_headers = add_list(set_skip_headers, "from"); set_skip_headers = add_list(set_skip_headers, "date"); set_skip_headers = add_list(set_skip_headers, "subject"); /* * Did they decide to use stdin by specifying it on the command line ? * If not then check and see if that is the default they wanted from * the options.h or environment values. */ if (!use_stdin) { if (optind < argc && set_increment == -1 && !set_mbox) { set_mbox = strsav(argv[optind]); } else if (!set_mbox || !strcasecmp(set_mbox, "NONE")) use_stdin = TRUE; else use_stdin = FALSE; } else { if (set_mbox) free(set_mbox); set_mbox = NULL; } /* ** Deprecated options */ if (set_showhr) { fprintf (stderr, "The \"showhr\" option has been deprecated. Ignoring it.\n"); set_showhr = FALSE; } if (set_usetable) { fprintf (stderr, "The \"usetable\" option has been deprecated. Ignoring it.\n"); set_usetable = FALSE; } /* * Read the contents of the file into the variables to be used * in printing out the pages. */ ihtmlheaderfile = expand_contents(set_ihtmlheader); ihtmlfooterfile = expand_contents(set_ihtmlfooter); ihtmlheadfile = expand_contents(set_ihtmlhead); ihtmlhelpupfile = expand_contents(set_ihtmlhelpup); ihtmlhelplowfile = expand_contents(set_ihtmlhelplow); ihtmlnavbar2upfile = expand_contents(set_ihtmlnavbar2up); mhtmlheaderfile = expand_contents(set_mhtmlheader); mhtmlfooterfile = expand_contents(set_mhtmlfooter); if (set_dir) set_dir = strreplace(set_dir, dirpath(set_dir)); /* * Default names for directories and labels need to be figured out. */ if (use_stdin && (!set_dir || !strcasecmp(set_dir, "NONE"))) set_dir = strreplace(set_dir, DIRNAME); if (!set_dir || !strcasecmp(set_dir, "NONE")) set_dir = strreplace(set_dir, (strrchr(set_mbox, '/')) ? strrchr(set_mbox, '/') + 1 : set_mbox); if (set_dir[strlen(set_dir) - 1] != PATH_SEPARATOR) trio_asprintf(&set_dir, "%s%c", set_dir, PATH_SEPARATOR); if (!set_label || !strcasecmp(set_label, "NONE")) set_label = set_mbox ? (strreplace(set_label, (strrchr(set_mbox, '/')) ? strrchr(set_mbox, '/') + 1 : set_mbox)) : "stdin"; /* * Which index file will be called "index.html"? */ index_name[1][DATE_INDEX] = setindex(set_defaultindex, "date", set_htmlsuffix); index_name[1][THREAD_INDEX] = setindex(set_defaultindex, "thread", set_htmlsuffix); index_name[1][SUBJECT_INDEX] = setindex(set_defaultindex, "subject", set_htmlsuffix); index_name[1][AUTHOR_INDEX] = setindex(set_defaultindex, "author", set_htmlsuffix); if (set_attachmentsindex) { index_name[1][ATTACHMENT_INDEX] = setindex(set_defaultindex, "attachment", set_htmlsuffix); } if (set_folder_by_date || set_msgsperfolder) { index_name[0][DATE_INDEX] = setindex(set_default_top_index, "date", set_htmlsuffix); index_name[0][THREAD_INDEX] = setindex(set_default_top_index, "thread", set_htmlsuffix); index_name[0][SUBJECT_INDEX] = setindex(set_default_top_index, "subject", set_htmlsuffix); index_name[0][AUTHOR_INDEX] = setindex(set_default_top_index, "author", set_htmlsuffix); if (set_attachmentsindex) { index_name[0][ATTACHMENT_INDEX] = setindex(set_default_top_index, "attachment", set_htmlsuffix); } index_name[0][FOLDERS_INDEX] = setindex(set_default_top_index, "folders", set_htmlsuffix); } else { index_name[0][DATE_INDEX] = index_name[1][DATE_INDEX]; index_name[0][THREAD_INDEX] = index_name[1][THREAD_INDEX]; index_name[0][AUTHOR_INDEX] = index_name[1][AUTHOR_INDEX]; index_name[0][SUBJECT_INDEX] = index_name[1][SUBJECT_INDEX]; index_name[0][ATTACHMENT_INDEX] = index_name[1][ATTACHMENT_INDEX]; } init_index_names(); if (set_msgsperfolder && set_folder_by_date) { progerr("msgsperfolder and folder_by_date may not be used at the same time!"); } /* * General settings for mail command and rewriting. */ if (!set_domainaddr || !strcasecmp(set_domainaddr, "NONE")) use_domainaddr = 0; else use_domainaddr = 1; if (!set_mailto || !strcasecmp(set_mailto, "NONE")) use_mailto = 0; else use_mailto = 1; if (!set_mailcommand || !strcasecmp(set_mailcommand, "NONE")) use_mailcommand = 0; else use_mailcommand = 1; #ifndef HAVE_LIBFNV /* the nonsequential mode won't work unless we compiled the FNV hash library (./configure --enable-libfnv) */ if (set_nonsequential) progerr("the nonsequential mode is only available if you enabled the\n compilation" "of the fnv hash library. Try doing a\n\t./configure --enable-libfnv\n" "and recompile if you want to use this option."); #endif /* HAVE_LIBFNV */ /* * A little performance speed up. The following was being done * over and over in the write functions. This way it is done once. * A bigger win on larger archives. */ if (set_hmail && !strcasecmp(set_hmail, "NONE")) { free(set_hmail); set_hmail = NULL; } if (set_archives && !strcasecmp(set_archives, "NONE")) { free(set_archives); set_archives = NULL; } if (set_custom_archives && !strcasecmp(set_custom_archives, "NONE")) { free(set_custom_archives); set_custom_archives = NULL; } if (set_about && !strcasecmp(set_about, "NONE")) { free(set_about); set_about = NULL; } /* Simply show what the values of the variables are and exit */ if (cmd_show_variables) { if (!set_mbox) set_mbox = "NONE"; MakeConfig(TRUE); free(configfile); return (0); } /* Injecting a little sanity... */ if (use_mbox && use_stdin) { cmderr(lang[MSG_CANNOT_READ_FROM_BOTH_FILE_AND_STDIN]); } if (set_append && use_mbox) { cmderr(lang[MSG_CANNOT_BOTH_READ_AND_WRITE_TO_MBOX]); } gettimezone(); getthisyear(); /* * MIME processing requires the files be created as they * are read in loadheaders() so assure the directories are * there first... */ checkdir(set_dir); /* * Let's do it. */ if (set_uselock) lock_archive(set_dir); if (set_increment == -1) { int save_append = set_append; set_append = 0; if (set_mbox_shortened) progerr("can not use increment = -1 option with mbox_shortened option\n"); amount_new = parsemail(set_mbox, use_stdin, 1, -1, set_dir, set_inlinehtml, 0); set_increment = !matches_existing(set_startmsgnum); if (set_increment && set_folder_by_date && !set_usegdbm) progerr("folder_by_date with incremental update requires usegdbm option"); reinit_structs(); set_append = save_append; } if (set_increment) { int num_displayable; if (set_linkquotes) replylist = NULL; /* we have to start with the msgnum - 1 so that the rest of the code works ok when there are no old headers. */ max_msgnum = set_startmsgnum - 1; num_displayable = loadoldheaders(set_dir); amount_old = max_msgnum + 1; /* counts gaps as messages */ /* start numbering at this number */ amount_new = num_displayable + parsemail(set_mbox, use_stdin, set_readone, set_increment, set_dir, set_inlinehtml, amount_old); if (set_linkquotes) analyze_headers(max_msgnum + 1); /* write the index of msgno/msgid_hash filenames */ if (set_nonsequential) write_messageindex(0, max_msgnum + 1); writearticles(amount_old, max_msgnum + 1); /* JK: in function of other hypermail configuration options, delete_incremental will continuous escape and add more markup to non-deleted messages that are replies to deleted messages. Thus, a setup option to disable it */ if (set_delete_incremental && deletedlist) update_deletions(amount_old); if (set_show_msg_links) { fixnextheader(set_dir, amount_old, -1); for (i = amount_old; i <= max_msgnum; ++i) { if (set_showreplies) fixreplyheader(set_dir, i, 0, amount_old); fixthreadheader(set_dir, i, amount_old); } } } else { if (set_mbox_shortened) { if (!set_usegdbm) progerr("mbox_shortened option requires that the usegdbm option be on"); max_msgnum = set_startmsgnum - 1; loadoldheaders(set_dir); } amount_new = parsemail(set_mbox, use_stdin, set_readone, set_increment, set_dir, set_inlinehtml, set_startmsgnum); /* number from 0 */ if (!set_mbox_shortened && !matches_existing(0)) { progerr("First message in mailbox does not " "match first message in archive\n" "or obsolete gdbm file present.\n" "Maybe you want to enable the mbox_shortened option?\n"); } if (set_linkquotes) analyze_headers(max_msgnum + 1); /* write the index of msgno/msgid_hash filenames */ if (set_nonsequential) write_messageindex(0, max_msgnum + 1); writearticles(0, max_msgnum + 1); } if (amount_new) { /* Always write the index files */ if (set_linkquotes) { threadlist = NULL; threadlist_end = NULL; printedthreadlist = NULL; for (i = 0; i <= max_msgnum; ++i) { struct emailinfo *ep; if (hashnumlookup(i, &ep)) { ep->flags &= ~USED_THREAD; #ifdef FASTREPLYCODE ep->isreply = 0; #endif } threadlist_by_msgnum[i] = NULL; } /* redo threading with more complete info than in 1st pass */ crossindexthread1(datelist); for (i = 0; i <= max_msgnum; ++i) { struct emailinfo *ep, *etmp; hashnumlookup(i, &ep); etmp = nextinthread(i); if (etmp && ep->initial_next_in_thread != etmp->msgnum) fixthreadheader(set_dir, etmp->msgnum, amount_new); /* if (ep->flags & THREADING_ALTERED) */ } } count_deleted(max_msgnum + 1); if (show_index[0][DATE_INDEX]) writedates(amount_new, NULL); if (show_index[0][THREAD_INDEX]) writethreads(amount_new, NULL); if (show_index[0][SUBJECT_INDEX]) writesubjects(amount_new, NULL); if (show_index[0][AUTHOR_INDEX]) writeauthors(amount_new, NULL); if (set_attachmentsindex) { writeattachments(amount_new, NULL); } if (set_writehaof) writehaof(amount_new, NULL); if (set_folder_by_date || set_msgsperfolder) write_toplevel_indices(amount_new); if (set_monthly_index || set_yearly_index) write_summary_indices(amount_new); if (set_latest_folder) symlink_latest(); } else { printf("No mails to output!\n"); } if (set_uselock) unlock_archive(); if (configfile) free(configfile); if (ihtmlheaderfile) free(ihtmlheaderfile); if (ihtmlfooterfile) free(ihtmlfooterfile); if (ihtmlheadfile) free(ihtmlheadfile); if (ihtmlhelpupfile) free(ihtmlhelpupfile); if (ihtmlhelplowfile) free(ihtmlhelplowfile); if (ihtmlnavbar2upfile) free(ihtmlnavbar2upfile); if (mhtmlheaderfile) free(mhtmlheaderfile); if (mhtmlfooterfile) free(mhtmlfooterfile); return (0); }
static int Start_LuaIntf( vlc_object_t *p_this, const char *name ) { intf_thread_t *p_intf = (intf_thread_t*)p_this; intf_sys_t *p_sys; lua_State *L; config_ChainParse( p_intf, "lua-", ppsz_intf_options, p_intf->p_cfg ); if( name == NULL ) { char *n = var_InheritString( p_this, "lua-intf" ); if( unlikely(n == NULL) ) return VLC_EGENERIC; name = p_intf->psz_header = n; } else /* Cleaned up by vlc_object_release() */ p_intf->psz_header = strdup( name ); p_intf->p_sys = (intf_sys_t*)malloc( sizeof(intf_sys_t) ); if( !p_intf->p_sys ) { free( p_intf->psz_header ); p_intf->psz_header = NULL; return VLC_ENOMEM; } p_sys = p_intf->p_sys; p_sys->psz_filename = vlclua_find_file( "intf", name ); if( !p_sys->psz_filename ) { msg_Err( p_intf, "Couldn't find lua interface script \"%s\".", name ); goto error; } msg_Dbg( p_intf, "Found lua interface script: %s", p_sys->psz_filename ); L = luaL_newstate(); if( !L ) { msg_Err( p_intf, "Could not create new Lua State" ); goto error; } vlclua_set_this( L, p_intf ); vlclua_set_intf( L, p_sys ); luaL_openlibs( L ); /* register our functions */ luaL_register( L, "vlc", p_reg ); /* register submodules */ luaopen_config( L ); luaopen_volume( L ); luaopen_httpd( L ); luaopen_input( L ); luaopen_msg( L ); luaopen_misc( L ); luaopen_net( L ); luaopen_object( L ); luaopen_osd( L ); luaopen_playlist( L ); luaopen_sd( L ); luaopen_stream( L ); luaopen_strings( L ); luaopen_variables( L ); luaopen_video( L ); luaopen_vlm( L ); luaopen_volume( L ); luaopen_gettext( L ); luaopen_xml( L ); luaopen_equalizer( L ); #if defined(WIN32) && !defined(WINAPI_FAMILY_APP) luaopen_win( L ); #endif /* clean up */ lua_pop( L, 1 ); /* Setup the module search path */ if( vlclua_add_modules_path( L, p_sys->psz_filename ) ) { msg_Warn( p_intf, "Error while setting the module search path for %s", p_sys->psz_filename ); lua_close( L ); goto error; } /* * Get the lua-config string. * If the string is empty, try with the old http-* or telnet-* options * and build the right configuration line */ bool b_config_set = false; char *psz_config = var_InheritString( p_intf, "lua-config" ); if( !psz_config ) psz_config = MakeConfig( p_intf, name ); if( psz_config ) { char *psz_buffer; if( asprintf( &psz_buffer, "config={%s}", psz_config ) != -1 ) { char *psz_log = StripPasswords( psz_buffer ); if( psz_log != NULL ) { msg_Dbg( p_intf, "Setting config variable: %s", psz_log ); free( psz_log ); } if( luaL_dostring( L, psz_buffer ) == 1 ) msg_Err( p_intf, "Error while parsing \"lua-config\"." ); free( psz_buffer ); lua_getglobal( L, "config" ); if( lua_istable( L, -1 ) ) { if( !strcmp( name, "cli" ) ) { lua_getfield( L, -1, "rc" ); if( lua_istable( L, -1 ) ) { /* msg_Warn( p_intf, "The `rc' lua interface script " "was renamed `cli', please update " "your configuration!" ); */ lua_setfield( L, -2, "cli" ); } else lua_pop( L, 1 ); } lua_getfield( L, -1, name ); if( lua_istable( L, -1 ) ) { lua_setglobal( L, "config" ); b_config_set = true; } } } free( psz_config ); } if( !b_config_set ) { lua_newtable( L ); lua_setglobal( L, "config" ); } /* Wrapper for legacy telnet config */ if ( !strcmp( name, "telnet" ) ) { /* msg_Warn( p_intf, "The `telnet' lua interface script was replaced " "by `cli', please update your configuration!" ); */ char *wrapped_file = vlclua_find_file( "intf", "cli" ); if( !wrapped_file ) { msg_Err( p_intf, "Couldn't find lua interface script \"cli\", " "needed by telnet wrapper" ); lua_close( p_sys->L ); goto error; } lua_pushstring( L, wrapped_file ); lua_setglobal( L, "wrapped_file" ); free( wrapped_file ); } p_sys->L = L; if( vlc_clone( &p_sys->thread, Run, p_intf, VLC_THREAD_PRIORITY_LOW ) ) { lua_close( p_sys->L ); goto error; } return VLC_SUCCESS; error: free( p_sys->psz_filename ); free( p_sys ); free( p_intf->psz_header ); p_intf->psz_header = NULL; return VLC_EGENERIC; }
/** * CCore * * Creates a new shroudBNC application object. * * @param Config the main config object * @param argc argument counts * @param argv program arguments */ CCore::CCore(CConfig *Config, int argc, char **argv) { int i; m_Log = NULL; m_PidFile = NULL; WritePidFile(); m_Config = Config; m_SSLContext = NULL; m_SSLClientContext = NULL; m_Status = Status_Running; CacheInitialize(m_ConfigCache, Config, "system."); char *SourcePath = strdup(BuildPathLog("sbnc.log")); rename(SourcePath, BuildPathLog("sbnc.log.old")); free(SourcePath); m_PollFds.Preallocate(SFD_SETSIZE); m_Log = new CLog("sbnc.log", true); if (m_Log == NULL) { printf("Log system could not be initialized. Shutting down."); exit(EXIT_FAILURE); } m_Log->Clear(); Log("Log system initialized."); g_Bouncer = this; m_Config = Config; m_Args.SetList(argv, argc); m_Ident = new CIdentSupport(); m_Config = new CConfig("sbnc.conf", NULL); CacheInitialize(m_ConfigCache, m_Config, "system."); const char *Users; CUser *User; if ((Users = m_Config->ReadString("system.users")) == NULL) { if (!MakeConfig()) { Log("Configuration file could not be created."); Fatal(); } printf("Configuration has been successfully saved. Please restart shroudBNC now.\n"); exit(EXIT_SUCCESS); } const char *Args; int Count; Args = ArgTokenize(Users); if (AllocFailed(Args)) { Fatal(); } Count = ArgCount(Args); for (i = 0; i < Count; i++) { const char *Name = ArgGet(Args, i + 1); User = new CUser(Name); if (AllocFailed(User)) { Fatal(); } m_Users.Add(Name, User); } ArgFree(Args); m_Listener = NULL; m_ListenerV6 = NULL; m_SSLListener = NULL; m_SSLListenerV6 = NULL; time(&m_Startup); m_LoadingModules = false; m_LoadingListeners = false; InitializeSocket(); m_Capabilities = new CVector<const char *>(); m_Capabilities->Insert("multi-prefix"); m_Capabilities->Insert("znc.in/server-time-iso"); }
int context::circle() { char r[200];int last=0; mst=0; default_queue.node.homedir="d:\\temp\\out"; while(1){ if (!bmodeminit()) return 7; init_circle(0); while(1){ if (f->cn->p = f->cn->getkey()) if (f->cn->p->EventType==KEY_EVENT&&f->cn->p->Event.KeyEvent.bKeyDown){ switch(f->cn->p->Event.KeyEvent.uChar.AsciiChar){ case 'a': case 'A': if (mst==0||mst==3) answer_node();break; case 'c': case 'C': if (mst==0) call_node();break; case 'r': case 'R': TestDialogItem();break; case 'x': if (mst==0&&(f->cn->p->Event.KeyEvent.dwControlKeyState&(LEFT_ALT_PRESSED))) return 0; break; } switch(f->cn->p->Event.KeyEvent.wVirtualKeyCode){ case VK_F1: ShowHelp();break; case VK_F2: MakeConfig();break; case VK_SPACE: case VK_ESCAPE: switch(mst){ case 0: time(&yo);if (v.circle>end_time-yo) init_circle(1);break; case 1: stop_call();break; case 2: stop_answer();break; case 3: f->conresult(15,"NO MORE RINGS",0);init_circle(0);break; } break; } } Sleep(10); if (mst!=-1){ time(&yo); if (current!=yo){ current=yo; if (yo>=end_time){ switch(mst){ case 0: init_circle(1);break; case 1: stop_call();Sleep(400);call_node();break; case 2: stop_answer();break; case 3: f->conresult(15,"NO MORE RINGS");init_circle(0);break; } continue; } int i = end_time - yo; sprintf(s,"%02i:%02i",i/60,i%60); f->conresult(15,s); } } if (int q=bmodemgetchar()){ if (q==13||q==10){ r[last]=0; if (last){ if (checkstring(v.ncarrier+"|"+v.no_dial+"|"+v.busy,r,'|')){ f->conresult(14,r); if (mst==1) Sleep(400),call_node(); else init_circle(0); } else if (v.ring==r){ if (mst!=3) ringno=0; next_ring(); } else if (!strncmp(r,v.connect,v.connect.GetLength())){ f->conresult(14,v.connect); if (mst==1) emsi_connect_out(r,default_queue); else emsi_connect_in(r); last=0; break; } last=0; } } else { if (last>198) last=0; r[last++]=q; } } } } }