int main (int argc, char **argv) { int c, i; opterr = 0; bool iactive = false; strcpy (homedir, argv[0]); for (i = strlen (homedir)-1; i >= 0; i--) { bool ended = false; if (homedir[i] == '/') ended = true; homedir[i] = '\0'; if (ended) break; } sprintf (db_root, DEFAULT_DB_ROOT); sprintf (import_root, DEFAULT_IMPORT_ROOT); while ((c = getopt (argc, argv, "d:i:l:k:r")) != -1) { switch (c) { case 'd': strcpy (db_root, optarg); break; case 'l': strcpy (homedir, optarg); break; case 'i': strcpy (import_root, optarg); break; case 'k': nice (atoi(optarg)); break; case 'r': log_disable (); interactive_enable (); iactive = true; break; case '?': printf ("Usage:\n"); printf (" ./crossepg_importer [options]\n"); printf ("Options:\n"); printf (" -d db_root crossepg db root folder\n"); printf (" default: %s\n", db_root); printf (" -l homedir home directory\n"); printf (" default: %s\n", homedir); printf (" -i import_root import root folder\n"); printf (" default: %s\n", import_root); printf (" -k nice see \"man nice\"\n"); printf (" -r interactive mode\n"); printf (" -h show this help\n"); return 0; } } while (homedir[strlen (homedir) - 1] == '/') homedir[strlen (homedir) - 1] = '\0'; while (db_root[strlen (db_root) - 1] == '/') db_root[strlen (db_root) - 1] = '\0'; while (import_root[strlen (import_root) - 1] == '/') import_root[strlen (import_root) - 1] = '\0'; log_open (db_root); log_banner ("CrossEPG Importer"); sprintf (import_homedir, "%s/import/", homedir); if (epgdb_open (db_root)) log_add ("EPGDB opened"); else { log_add ("Error opening EPGDB"); epgdb_close (); log_close (); return 0; } epgdb_load (); aliases_make (homedir); if (iactive) interactive_manager (); else { volatile bool useless = false; importer_parse_directory (import_root, db_root, NULL, NULL, NULL, &useless); importer_parse_directory (import_homedir, db_root, NULL, NULL, NULL, &useless); log_add ("Saving data..."); if (epgdb_save (NULL)) log_add ("Data saved"); else log_add ("Error saving data"); } epgdb_clean (); memory_stats (); log_close (); return 0; }
int main (int argc, char **argv) { int c, i; opterr = 0; bool iactive = false; strcpy (homedir, argv[0]); for (i = strlen (homedir)-1; i >= 0; i--) { bool ended = false; if (homedir[i] == '/') ended = true; homedir[i] = '\0'; if (ended) break; } strcpy (demuxer, DEFAULT_DEMUXER); strcpy (provider, DEFAULT_OTV_PROVIDER); while ((c = getopt (argc, argv, "h:d:x:l:p:k:riyz")) != -1) { switch (c) { case 'd': db_root = optarg; break; case 'x': strcpy (demuxer, optarg); break; case 'l': strcpy (homedir, optarg); break; case 'i': printf ("WARNING! Option -i is deprecated\n"); break; case 'p': strcpy (provider, optarg); break; case 'k': nice (atoi(optarg)); break; case 'r': log_disable (); interactive_enable (); iactive = true; break; case 'y': huffman_debug_summaries = true; break; case 'z': huffman_debug_titles = true; break; case '?': printf ("Usage:\n"); printf (" ./crossepg_downloader [options]\n"); printf ("Options:\n"); printf (" -d db_root crossepg db root folder\n"); printf (" default: %s\n", db_root); printf (" -x demuxer dvb demuxer\n"); printf (" default: %s\n", demuxer); printf (" -l homedir home directory\n"); printf (" default: %s\n", homedir); printf (" -p provider opentv provider\n"); printf (" default: %s\n", provider); printf (" -k nice see \"man nice\"\n"); printf (" -r interactive mode\n"); printf (" -y debug mode for huffman dictionary (summaries)\n"); printf (" -z debug mode for huffman dictionary (titles)\n"); printf (" -h show this help\n"); return 0; } } while (homedir[strlen (homedir) - 1] == '/') homedir[strlen (homedir) - 1] = '\0'; while (db_root[strlen (db_root) - 1] == '/') db_root[strlen (db_root) - 1] = '\0'; mkdir (db_root, S_IRWXU|S_IRWXG|S_IRWXO); log_open (db_root); log_banner ("CrossEPG Downloader"); xmltv_encodings_init (); if (iactive) interactive_manager (); else { char opentv_file[256]; sprintf (opentv_file, "%s/providers/%s.conf", homedir, provider); if (providers_read (opentv_file)) { if (providers_get_protocol () == 1) { log_add ("Provider %s identified as opentv", provider); if (!db_load ()) goto error; download_opentv (); if (epgdb_save (NULL)) log_add ("Data saved"); else log_add ("Error saving data"); db_close (); } else if (providers_get_protocol () == 2) { log_add ("Provider %s identified as xmltv", provider); log_add ("Preferred language: %s", providers_get_xmltv_plang ()); if (!db_load ()) goto error; xmltv_channels_init (); for (i=0; i<10; i++) { if (strlen(providers_get_xmltv_channels (i)) == 0) { log_add ("No more url available"); log_add ("Error downloading/parsing channels file"); goto error; } log_add ("Download channels from url: %s (%d)", providers_get_xmltv_channels (i), i); if (xmltv_downloader_channels (providers_get_xmltv_channels (i), db_root, NULL, NULL, &stop)) break; } xmltv_parser_set_iso639 (providers_get_xmltv_plang ()); for (i=0; i<10; i++) { if (strlen(providers_get_xmltv_url (i)) == 0) { log_add ("No more url available"); log_add ("Error downloading/parsing events file"); goto error; } log_add ("Download events from url: %s", providers_get_xmltv_url (i)); if (xmltv_downloader_events (providers_get_xmltv_url (i), db_root, NULL, NULL, &stop)) { if (epgdb_save (NULL)) log_add ("Data saved"); else log_add ("Error saving data"); break; } } xmltv_channels_cleanup (); db_close (); } else if (providers_get_protocol () == 3) { log_add ("Provider %s identified as xepgdb", provider); log_add ("Headers url: %s", providers_get_xepgdb_headers_url ()); log_add ("Descriptors url: %s", providers_get_xepgdb_descriptors_url ()); if (!db_load ()) goto error; if (dbmerge_downloader (providers_get_xepgdb_headers_url (), providers_get_xepgdb_descriptors_url (), db_root, NULL, NULL, &stop)) { if (epgdb_save (NULL)) log_add ("Data saved"); else log_add ("Error saving data"); } else log_add ("Error downloading/parsing xepgdb files"); db_close (); } else if (providers_get_protocol () == 4) { char filename[1024], tmp[1024], *tmp2; log_add ("Provider %s identified as script", provider); log_add ("Script file name: %s", providers_get_script_filename ()); tmp2 = replace_str (providers_get_script_arguments (), "%%dbroot%%", db_root); strcpy (tmp, tmp2); tmp2 = replace_str (tmp, "%%homedir%%", homedir); sprintf (filename, "LD_LIBRARY_PATH=%s %s/scripts/%s %s", homedir, homedir, providers_get_script_filename (), tmp2); log_add ("Executing script %s ...", filename); system (filename); log_add ("Script terminated"); } } else log_add ("Cannot load provider configuration (%s)", opentv_file); } memory_stats (); error: log_close (); return 0; }
void conv_enter(Object *npc, Object *pc, struct conv *conv) { struct KeyHandler kh; assert(conv); if (! conv->keywords && conv_keyword_highlighting) { conv_highlight_keywords(conv); } /* If NPC initiates conversation, make sure we have a valid session * subject, else describe() will crash when determining if unknown NPC * is hostile or not. */ if (! Session->subject) { Session->subject = (class Being*)pc; } log_banner("^c+yCONVERSATION^c-"); session_run_hook(Session, conv_start_hook, "pp", pc, npc); conv_done = 0; kh.fx = conv_get_player_query; conv_set_query("hail"); for (;;) { /* Truncate the query to 4 characters */ conv_query[4] = 0; conv_mark_if_keyword(conv, conv_query); /* If query was NAME, assume the NPC is now known */ if (!strcasecmp(conv_query, "NAME")) { ((class Character*)npc)->setKnown(true); } /* Query the NPC */ closure_exec(conv->proc, "ypp", conv_query, npc, pc); if (conv_done) break; /*** Setup for next query ***/ memset(conv_query, 0, sizeof(conv_query)); conv_room = sizeof(conv_query) - 1; conv_ptr = conv_query; cmdwin_clear(); cmdwin_push("Say: "); console_print("You Say: "); /*** Get next query ***/ eventPushKeyHandler(&kh); eventHandle(); eventPopKeyHandler(); conv_query[MAX_KEYWORD_SZ] = 0; conv_len = strlen(conv_query); if (! conv_len) sprintf(conv_query, "bye"); // End input row log_msg("\n"); //log_msg("^c+%c%s:^c- %s", CONV_PC_COLOR, // pc->getName(), conv_query); /*** Check if player ended conversation ***/ if (Quit) break; if (strlen(conv_query) == 0) conv_set_query("BYE"); if (!strcasecmp(conv_query, "BYE")) { conv_end(); } } cmdwin_clear(); cmdwin_repaint(); session_run_hook(Session, conv_end_hook, "pp", pc, npc); }
int main (int argc, char **argv) { int c; opterr = 0; char *outputfile; FILE *fd; //char *eventsfile; //bool useless = false; sprintf (db_root, DEFAULT_DB_ROOT); while ((c = getopt (argc, argv, "d:k")) != -1) { switch (c) { case 'd': strcpy (db_root, optarg); break; case 'k': nice (atoi(optarg)); break; case '?': print_help (); return 0; } } if (optind != argc-1) { print_help (); return 0; } else outputfile = argv[argc-1]; while (db_root[strlen (db_root) - 1] == '/') db_root[strlen (db_root) - 1] = '\0'; log_open (db_root); log_banner ("CrossEPG Exporter"); if (epgdb_open (db_root)) log_add ("EPGDB opened (root=%s)", db_root); else { log_add ("Error opening EPGDB"); epgdb_close (); log_close (); return 0; } epgdb_load (); log_add ("Exporting data into %s", outputfile); //log_add ("Exporting data into"); //return 0; fd = fopen (outputfile, "w"); if (fd != NULL) { int count = 0; char *desc, *ldesc, *desc_escaped, *ldesc_escaped; fprintf (fd, "nid, tsid, sid, start time, length, description, long description, iso693, event id, mjd, genre_id, flags, revision\n"); epgdb_channel_t *channel = epgdb_channels_get_first (); while (channel != NULL) { epgdb_title_t *title = channel->title_first; while (title != NULL) { //char row[MAX_ROW_SIZE]; desc = epgdb_read_description (title); ldesc = epgdb_read_long_description (title); desc_escaped = escape_string (desc); ldesc_escaped = escape_string (ldesc); fprintf (fd, "%u, %u, %u, %u, %u, \"%s\", \"%s\", \"%c%c%c\", %u, %u, %u, %u, %u\n", channel->nid, channel->tsid, channel->sid, title->start_time, title->length, desc_escaped, ldesc_escaped, title->iso_639_1, title->iso_639_2, title->iso_639_3, title->event_id, title->mjd, title->genre_id, title->flags, title->revision); count++; _free (desc); _free (ldesc); _free (desc_escaped); _free (ldesc_escaped); title = title->next; } channel = channel->next; } fclose (fd); log_add ("Exported %d events", count); } else log_add ("Cannot open %s", outputfile); epgdb_clean (); memory_stats (); log_close (); return 0; }