void draw(t_env *e) { e->i = 0; img_init(e); while (e->i + 1 < e->p.lenmax) { iso_init(e); if (e->a[e->i]->y == e->a[e->i + 1]->y) { iso_converth(e); draw_line(e); } if (e->i + e->p.lenx < e->p.lenmax) { iso_convertv(e); draw_line(e); } e->i++; } mlx_hook(e->win, 2, 1, keyfnc, e); mlx_put_image_to_window(e->mlx, e->win, e->img.adr, 0, 0); optionsdisplay(e); mlx_loop(e->mlx); }
GtkTreeStore * read_cd ( char *dev,int block ) { TrackData *cd_data=main_app->cd_data; int result; IsoImageFilesystem *fs; IsoDataSource *src; IsoFileSource *root; IsoReadOpts *ropts; iso_init(); iso_set_msgs_severities ( "NEVER", "ALL", "" ); result = iso_data_source_new_from_file ( dev, &src ); if ( result < 0 ) { printf ( "Error creating data source\n" ); show_error("Error creating data source "); return NULL; } result = iso_read_opts_new ( &ropts, 0 ); iso_read_opts_set_start_block ( ropts,cd_data[ block].track_start ); if ( result < 0 ) { fprintf ( stderr, "Error creating read options\n" ); show_error("Error creating read options "); return NULL; } result = iso_image_filesystem_new ( src, ropts, 1, &fs ); iso_read_opts_free ( ropts ); if ( result < 0 ) { printf ( "Error creating filesystem\n" ); show_error("Error creating filesystem"); return NULL; } GtkListStore *store; GtkTreeIter iter; GString *string=g_string_new(""); store = gtk_list_store_new ( 2, G_TYPE_STRING ,G_TYPE_STRING ); g_string_printf(string,"%ld * 2kB",cd_data[ block].track_start); gtk_list_store_append ( store, &iter ); gtk_list_store_set ( store, &iter, 0, "Track Start",1,string->str,-1 ); g_string_printf(string,"%ld * 2kB",cd_data[ block].track_end); gtk_list_store_append ( store, &iter ); gtk_list_store_set ( store, &iter, 0, "Track End",1,string->str,-1 ); g_string_printf(string,"%ld * 2kB",cd_data[ block].track_size); gtk_list_store_append ( store, &iter ); gtk_list_store_set ( store, &iter, 0, "Track Size",1,string->str,-1 ); gtk_list_store_append ( store, &iter ); gtk_list_store_set ( store, &iter, 0, "Vol. id: ",1,iso_image_fs_get_volume_id ( fs ),-1 ); gtk_list_store_append ( store, &iter ); gtk_list_store_set ( store, &iter, 0, "Publisher ",1,iso_image_fs_get_publisher_id ( fs ),-1 ); gtk_list_store_append ( store, &iter ); gtk_list_store_set ( store, &iter, 0, "Data preparer ",1,iso_image_fs_get_data_preparer_id ( fs ),-1 ); gtk_list_store_append ( store, &iter ); gtk_list_store_set ( store, &iter, 0, "System ",1,iso_image_fs_get_system_id ( fs ),-1 ); gtk_list_store_append ( store, &iter ); gtk_list_store_set ( store, &iter, 0, "Application ",1,iso_image_fs_get_application_id ( fs ),-1 ); gtk_list_store_append ( store, &iter ); gtk_list_store_set ( store, &iter, 0, "Copyright ",1,iso_image_fs_get_copyright_file_id ( fs ),-1 ); gtk_list_store_append ( store, &iter ); gtk_list_store_set ( store, &iter, 0, "Abstract ",1,iso_image_fs_get_abstract_file_id ( fs ),-1 ); gtk_list_store_append ( store, &iter ); gtk_list_store_set ( store, &iter, 0, "Biblio ",1,iso_image_fs_get_biblio_file_id ( fs ),-1 ); cd_data[ block].track_info=store; result = fs->get_root ( fs, &root ); if ( result < 0 ) { printf ( "Can't get root %d\n", result ); show_error("Can't get root "); return NULL; } GtkTreeIter root_iter; GtkTreeStore * tree_store ; tree_store = gtk_tree_store_new ( 1,G_TYPE_STRING ); root_iter.stamp=0; create_tree ( root, tree_store,root_iter ); iso_file_source_unref ( root ); fs->close ( fs ); iso_filesystem_unref ( ( IsoFilesystem* ) fs ); iso_data_source_unref ( src ); iso_finish(); return tree_store; }
/** * Window procedure to handle events on the main program window * * @param hdlg Handle to current program instance * @param message Event type this window has just received * @param wParam message specific data * @param lParam message specific data * @return */ static LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HMENU hmenu; switch (message) /* handle the messages */ { case WM_CREATE: strcpy(config.isoname, ""); return 0; case WM_COMMAND: hmenu=GetMenu(hwnd); switch (LOWORD(wParam)) { case IDM_FILE_RESET: resetrpc(); return 0; case IDM_FILE_EXIT: closevideo(); PostQuitMessage(0); return 0; case IDM_DISC_LD0: changedisc(ghwnd,0); return 0; case IDM_DISC_LD1: changedisc(ghwnd,1); return 0; case IDM_CONFIG: DialogBox(hinstance,TEXT("ConfigureDlg"),ghwnd,configdlgproc); return 0; case IDM_NETWORKING: DialogBox(hinstance, TEXT("NetworkDlg"), ghwnd, networkdlgproc); return 0; case IDM_FULLSCR: if (mousecapture) { ClipCursor(&oldclip); mousecapture=0; } togglefullscreen(1); return 0; case IDM_CPUIDLE: if (MessageBox(ghwnd, "This will reset RPCEmu!\nOkay to continue?", "RPCEmu", MB_OKCANCEL) == IDOK) { config.cpu_idle ^= 1; resetrpc(); CheckMenuItem(hmenu, IDM_CPUIDLE, config.cpu_idle ? MF_CHECKED : MF_UNCHECKED); } return 0; case IDM_CDROM_DISABLED: if (config.cdromenabled) { if (MessageBox(ghwnd, "This will reset RPCEmu!\nOkay to continue?", "RPCEmu", MB_OKCANCEL) == IDOK) { config.cdromenabled = 0; resetrpc(); CheckMenuItem(hmenu, IDM_CDROM_DISABLED + config.cdromtype, MF_UNCHECKED); config.cdromtype = IDM_CDROM_DISABLED - IDM_CDROM_DISABLED; CheckMenuItem(hmenu, IDM_CDROM_DISABLED + config.cdromtype, MF_CHECKED); } } return 0; case IDM_CDROM_EMPTY: if (!config.cdromenabled) { if (MessageBox(ghwnd, "This will reset RPCEmu!\nOkay to continue?", "RPCEmu", MB_OKCANCEL) == IDOK) { config.cdromenabled = 1; resetrpc(); } else return 0; } atapi->exit(); iso_init(); CheckMenuItem(hmenu, IDM_CDROM_DISABLED + config.cdromtype, MF_UNCHECKED); config.cdromtype = IDM_CDROM_EMPTY - IDM_CDROM_DISABLED; CheckMenuItem(hmenu, IDM_CDROM_DISABLED + config.cdromtype, MF_CHECKED); return 0; case IDM_CDROM_ISO: if (selectiso(ghwnd)) { if (!config.cdromenabled) { if (MessageBox(ghwnd, "This will reset RPCEmu!\nOkay to continue?", "RPCEmu", MB_OKCANCEL) == IDOK) { config.cdromenabled = 1; resetrpc(); } else return 0; } atapi->exit(); iso_open(config.isoname); } CheckMenuItem(hmenu, IDM_CDROM_DISABLED + config.cdromtype, MF_UNCHECKED); config.cdromtype = IDM_CDROM_ISO - IDM_CDROM_DISABLED; CheckMenuItem(hmenu, IDM_CDROM_DISABLED + config.cdromtype, MF_CHECKED); return 0; case IDM_MOUSE_FOL: CheckMenuItem(hmenu,IDM_MOUSE_FOL,MF_CHECKED); CheckMenuItem(hmenu,IDM_MOUSE_CAP,MF_UNCHECKED); config.mousehackon = 1; if (mousecapture) { ClipCursor(&oldclip); mousecapture=0; } return 0; case IDM_MOUSE_CAP: CheckMenuItem(hmenu,IDM_MOUSE_FOL,MF_UNCHECKED); CheckMenuItem(hmenu,IDM_MOUSE_CAP,MF_CHECKED); config.mousehackon = 0; return 0; case IDM_MOUSE_TWOBUTTON: config.mousetwobutton ^= 1; CheckMenuItem(hmenu, IDM_MOUSE_TWOBUTTON, config.mousetwobutton ? MF_CHECKED : MF_UNCHECKED); return 0; case IDM_HELP_ONLINE_MANUAL: launch_url(URL_MANUAL); return 0; case IDM_HELP_VISIT_WEBSITE: launch_url(URL_WEBSITE); return 0; case IDM_HELP_ABOUT: if (!IsWindow(hwnd_about)) { hwnd_about = CreateDialog(hinstance, MAKEINTRESOURCE(IDD_ABOUT), ghwnd, about_dlg_proc); window_centre_parent(hwnd_about, ghwnd); ShowWindow(hwnd_about, SW_SHOW); } return 0; } if (LOWORD(wParam)>=IDM_CDROM_REAL && LOWORD(wParam)<(IDM_CDROM_REAL+100)) { if (!config.cdromenabled) { if (MessageBox(ghwnd, "This will reset RPCEmu!\nOkay to continue?", "RPCEmu", MB_OKCANCEL) == IDOK) { config.cdromenabled = 1; resetrpc(); } else return 0; } atapi->exit(); ioctl_open(LOWORD(wParam)-IDM_CDROM_REAL); CheckMenuItem(hmenu, IDM_CDROM_DISABLED + config.cdromtype, MF_UNCHECKED); config.cdromtype = LOWORD(wParam) - IDM_CDROM_DISABLED; CheckMenuItem(hmenu, IDM_CDROM_DISABLED + config.cdromtype, MF_CHECKED); return 0; } break; case WM_DESTROY: closevideo(); PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; case WM_SETFOCUS: resetbuffer(); break; case WM_KILLFOCUS: if (mousecapture) { ClipCursor(&oldclip); mousecapture=0; } break; case WM_LBUTTONUP: if (!mousecapture && !fullscreen && !config.mousehackon) { RECT arcclip; GetClipCursor(&oldclip); GetWindowRect(hwnd,&arcclip); arcclip.left+=GetSystemMetrics(SM_CXFIXEDFRAME)+10; arcclip.right-=GetSystemMetrics(SM_CXFIXEDFRAME)+10; arcclip.top+=GetSystemMetrics(SM_CXFIXEDFRAME)+GetSystemMetrics(SM_CYMENUSIZE)+GetSystemMetrics(SM_CYCAPTION)+10; arcclip.bottom-=GetSystemMetrics(SM_CXFIXEDFRAME)+10; ClipCursor(&arcclip); mousecapture=1; updatemips=1; } break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }