void cmd_run(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv)[MAX_STR_SIZE]) { FILE *fp; const char *error_str; cur_window = window; self_window = self; if (argc != 1) { if (argc < 1) { error_str = "Path must be specified."; } else { error_str = "Only one argument allowed."; } line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, error_str); return; } fp = fopen(argv[1], "r"); if (fp == NULL) { error_str = "Path does not exist."; line_info_add(self, NULL, NULL, NULL, SYS_MSG, 0, 0, error_str); return; } run_python(fp, argv[1]); fclose(fp); }
int main(int argc, char* argv[]) { // Initialise Python bridge. start_python_bridge(); // Run a few Python commands to initialise Mnemosyne. run_python( "import sys\n" "sys.path.insert(0, \"/home/pbienst/source/mnemosyne-proj-pbienst/mnemosyne\")\n" "from mnemosyne.libmnemosyne import Mnemosyne\n" "mnemosyne = Mnemosyne(upload_science_logs=False, interested_in_old_reps=False)\n" "mnemosyne.components.insert(0, (\"mnemosyne.libmnemosyne.translator\", \"GetTextTranslator\"))\n" "mnemosyne.components.append((\"mnemosyne.embedded_in_C.main_wdgt\", \"MainWdgt\"))\n" "mnemosyne.components.append((\"mnemosyne.embedded_in_C.review_wdgt\", \"ReviewWdgt\"))\n" "mnemosyne.components.append((\"mnemosyne.embedded_in_C.dlgs\", \"AddCardsDlg\"))\n" "mnemosyne.components.append((\"mnemosyne.embedded_in_C.dlgs\", \"EditCardDlg\"))\n" "mnemosyne.components.append((\"mnemosyne.embedded_in_C.dlgs\", \"SyncDlg\"))\n" "mnemosyne.initialise(data_dir=\"/home/pbienst/source/mnemosyne-proj-pbienst/mnemosyne/dot_mnemosyne2\", filename=\"default.db\")\n" "mnemosyne.start_review()\n" "mnemosyne.controller().show_add_cards_dialog()\n" "mnemosyne.review_controller().show_answer()\n" "mnemosyne.review_controller().grade_answer(0)\n" ); // For syncing, the python code looks something like this: // mnemosyne.controller().sync(server, port, username, password) // Illustration on how to get data from Python to C. char result[256]; eval_python_as_unicode("mnemosyne.database().card_count()\n", result, sizeof(result)); printf("card count: %s\n", result); // Termination. run_python("mnemosyne.finalise()"); stop_python_bridge(); }
void invoke_autoruns(WINDOW *window, ToxWindow *self) { struct dirent *dir; char abspath_buf[PATH_MAX + 1], err_buf[PATH_MAX + 1]; size_t path_len; DIR *d; FILE *fp; if (user_settings->autorun_path[0] == '\0') { return; } d = opendir(user_settings->autorun_path); if (d == NULL) { snprintf(err_buf, PATH_MAX + 1, "Autorun path does not exist: %s", user_settings->autorun_path); api_display(err_buf); return; } cur_window = window; self_window = self; while ((dir = readdir(d)) != NULL) { path_len = strlen(dir->d_name); if (!strcmp(dir->d_name + path_len - 3, ".py")) { snprintf(abspath_buf, PATH_MAX + 1, "%s%s", user_settings->autorun_path, dir->d_name); fp = fopen(abspath_buf, "r"); if (fp == NULL) { snprintf(err_buf, PATH_MAX + 1, "Invalid path: %s", abspath_buf); api_display(err_buf); continue; } run_python(fp, abspath_buf); fclose(fp); } } closedir(d); }