LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; char file[512]; WAVEHDR * pwhOut; MMTIME mmt; unsigned long * framebuf; switch (message) // switch selon le message { case WM_CREATE: SetTimer(hWnd,0,10,NULL); break; case WM_DROPFILES: file[0] = 0; DragQueryFile((HDROP)wParam, 0, (char*)file, sizeof(file)); loadmod(file); break; case WM_TIMER: mmt.wType = TIME_SAMPLES; if(waveOutGetPosition(wout,&mmt,sizeof(MMTIME)) == MMSYSERR_NOERROR) { file[0] = 0; if(IsWindowVisible(hWnd) && fg) { if(mmt.u.sample&NBSTEREO16BITSAMPLES) { framebuf = fg_generateFrame(fg,&trackbuf_state2,mmt.u.sample&(NBSTEREO16BITSAMPLES-1)); } else { framebuf = fg_generateFrame(fg,&trackbuf_state1,mmt.u.sample&(NBSTEREO16BITSAMPLES-1)); } updateScreen(hWnd, framebuf, fg->xres,fg->yres); } } break; case WM_COMMAND: //Action sur un menu wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch(wmId) { case IDI_PLAY: waveOutRestart(wout); break; case IDI_PAUSE: waveOutPause(wout); break; case IDI_EJECT: file[0] = 0; if(fileselector(hWnd,file,"Load mod file","*.mod","*.mod",0,0)) { loadmod(file); } break; case IDI_INFO: break; case IDI_FILTER: break; case IDI_STEREO: break; case IDI_QUIT: PostQuitMessage(0); break; } break; case WM_DESTROY: break; case WM_USER: //Message venant de l'icone de la barre des taches switch(lParam) { case WM_LBUTTONDOWN: if(GetFocus() == hWnd) { ShowWindow(hWnd,SW_HIDE); } else { ShowWindow(hWnd,SW_SHOWNORMAL); SetFocus(hWnd); } break; case WM_RBUTTONDOWN: ListPopup(hWnd); break; } break; case WM_USER+1: break; case WM_CLOSE: //message de fermeture ShowWindow(hWnd,SW_HIDE); break; case WM_MOUSEMOVE: break; case MM_WOM_OPEN: break; case MM_WOM_CLOSE: break; case MM_WOM_DONE: pwhOut = (struct wavehdr_tag *)lParam; if(pwhOut->lpData == (char*)&sndbuffer1) { trackbuf_state1.nb_of_state = 0; hxcmod_fillbuffer(&modloaded,(unsigned short*)pwhOut->lpData, pwhOut->dwBufferLength /4,&trackbuf_state1); } else { trackbuf_state2.nb_of_state = 0; hxcmod_fillbuffer(&modloaded,(unsigned short*)pwhOut->lpData, pwhOut->dwBufferLength /4,&trackbuf_state2); } waveOutWrite((HWAVEOUT)wParam,pwhOut,sizeof(WAVEHDR)); nb_wr_block++; break; case WM_KEYDOWN: break; default: // traitement par defaut de l'evenement (gerer par windows) return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
////////////////////////////////////////////////////////////////////////// // // Gestion Boite de dialogue Settings // ////////////////////////////////////////////////////////////////////////// BOOL CALLBACK DialogMainDialog( HWND hwndDlg, // handle of dialog box UINT message, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { char filename[1024]; char tempstr[1024]; char tempstr2[1024]; int extpos; unsigned int j,i; static unsigned int txtindex; int wmId, wmEvent; wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); switch (message) { case WM_DROPFILES: DragQueryFile((HDROP)wParam, 0, (char*)filename, 1024); sprintf(demo->buffertext," Loading floppy "); sprintf(demo->bufferfilename,""); loadfloppy(filename,0,0); break; case WM_CTLCOLORSTATIC: // // NOTE: HANDLE_WM_CTLCOLORSTATIC is defined in <WINDOWSX.H> if( GetDlgItem(hwndDlg,IDC_EDIT_STATUS)==(HWND)lParam || GetDlgItem(hwndDlg,IDC_SLIDER_TRACKPOS)==(HWND)lParam || GetDlgItem(hwndDlg,IDC_EDIT_TRACKPOS)==(HWND)lParam ) { return FALSE; } return HANDLE_WM_CTLCOLORSTATIC(hwndDlg, wParam, lParam, Dlg_OnCtlColor); break; case WM_COMMAND: switch (wmId) { case IDC_BUTTON_LOAD: sprintf(filename,"*.*"); i=0; if(fileselector(hwndDlg,0,0,filename,"Load image file","All disk image types\0*.*\0\0","*.*",0,1)) { sprintf(demo->buffertext," Loading floppy "); CheckMenuItem(GetMenu(hwndDlg),ID_DRIVE_SHUGARTMODE,MF_UNCHECKED|MF_BYCOMMAND); CheckMenuItem(GetMenu(hwndDlg),ID_DRIVE_IBMPCMODE,MF_UNCHECKED| MF_BYCOMMAND); sprintf(demo->bufferfilename,""); loadfloppy(filename,0,0); } break; case IDC_BUTTON_LOADRAW: CreateDialog(GetModuleHandle(NULL),(const char*)IDD_RAWFILECONFIG,GetActiveWindow(),&DialogRAWFileSettings); break; case IDC_BUTTON_CREATEFLOPPY: CreateDialog(GetModuleHandle(NULL),(const char*)IDD_CREATEFILESYSTEM,GetActiveWindow(),&DialogCreateFileSystem); break; case IDC_BUTTON_CONVERT: CreateDialog(GetModuleHandle(NULL),(const char*)IDD_BATCHCONVERT,GetActiveWindow(),&DialogBatchConvert); break; case IDC_BUTTON_SETTINGS: CreateDialog(GetModuleHandle(NULL),(const char*)IDD_DIALOG_CONFIG,GetActiveWindow(),&DialogSettings); break; case IDC_BUTTON_USBCONFIG: CreateDialog(GetModuleHandle(NULL),(const char*)IDD_DIALOG_STATS,GetActiveWindow(),&DialogStats); break; case IDC_BUTTON_FLOPPYDUMP: CreateDialog(GetModuleHandle(NULL),(const char*)IDD_DIALOG_FLOPPYDUMP,GetActiveWindow(),&DialogFloppyDump); break; case IDC_BUTTON_EXPORT: if(thefloppydisk) { sprintf(filename,"%s",demo->bufferfilename); i=0; while(filename[i]!=0) { if(filename[i]=='.')filename[i]='_'; i++; } //strcat(filename,".mfm"); if(fileselector(hwndDlg,1,0,filename,"Export disk/Save As", "HFE file (SDCard HxC Floppy Emulator file format)\0*.hfe\0VTR file (VTrucco Floppy Emulator file format)\0*.vtr\0MFM file (MFM/FM track file format)\0*.mfm\0AFI file (Advanced File image format)\0*.afi\0IMG file (RAW Sector file format)\0*.img\0CPC DSK file\0*.dsk\0IMD file\0*.imd\0\0", "*.hfe",&extpos,3) ) { switch(extpos) { case 1: write_HFE_file(flopemu,thefloppydisk,filename,hwif->interface_mode,hwif->double_step); break; case 2: write_vtrucco_file(flopemu,thefloppydisk,filename,hwif->interface_mode); break; case 3: write_MFM_file(flopemu,thefloppydisk,filename); break; case 4: write_AFI_file(flopemu,thefloppydisk,filename); break; case 5: write_RAW_file(flopemu,thefloppydisk,filename); break; case 6: write_CPCDSK_file(flopemu,thefloppydisk,filename); break; case 7: write_IMD_file(flopemu,thefloppydisk,filename); break; } } } else { MessageBox(hwndDlg,"No floppy loaded !\nPlease drag and drop your disk file into the window","Error",MB_OK|MB_ICONHAND); } break; break; default:; break; } break; case WM_INITDIALOG: txtindex=0; SetDlgItemText(hwndDlg,IDC_EDIT_STATUS,"No disk loaded."); SetTimer(hwndDlg,36,100,NULL); changefond(hwndDlg,IDC_EDIT_STATUS); changefond(hwndDlg,IDC_EDIT_TRACKPOS); changefond(hwndDlg,IDC_STATIC_MAIN01); changefond(hwndDlg,IDC_STATIC_MAIN02); changefond(hwndDlg,IDC_STATIC_MAIN03); changefond(hwndDlg,IDC_STATIC_MAIN04); changefond(hwndDlg,IDC_STATIC_MAIN05); changefond(hwndDlg,IDC_STATIC_MAIN06); changefond(hwndDlg,IDC_STATIC_MAIN07); changefond(hwndDlg,IDC_STATIC_MAIN08); /* changefond(hwndDlg,IDC_BUTTON_LOAD); changefond(hwndDlg,IDC_BUTTON_LOADRAW); changefond(hwndDlg,IDC_BUTTON_CONVERT); changefond(hwndDlg,IDC_BUTTON_CREATEFLOPPY); changefond(hwndDlg,IDC_BUTTON_EXPORT); changefond(hwndDlg,IDC_BUTTON_SDCONFIG); changefond(hwndDlg,IDC_BUTTON_USBCONFIG);*/ break; case WM_CLOSE: DestroyWindow(hwndDlg); break; case WM_TIMER: if(strlen(demo->bufferfilename)) { sprintf(tempstr,"%s - %d track(s) %d side(s) ",demo->bufferfilename,thefloppydisk->floppyNumberOfTrack,thefloppydisk->floppyNumberOfSide); if(txtindex>=strlen(tempstr))txtindex=0; i=0; j=txtindex; do { tempstr2[i]=tempstr[j]; i++; j++; if(j>=strlen(tempstr)) j=0; }while(i<strlen(tempstr)); tempstr2[i]=0; memcpy(&tempstr2[i],tempstr2,strlen(tempstr2)); SetDlgItemText(hwndDlg,IDC_EDIT_STATUS,tempstr2); txtindex++; } else { if(demo->loadstatus!=LOADER_NOERROR) { switch(demo->loadstatus) { case LOADER_UNSUPPORTEDFILE: SetDlgItemText(hwndDlg,IDC_EDIT_STATUS,"Load error! Image file not supported!"); break; case LOADER_FILECORRUPT: SetDlgItemText(hwndDlg,IDC_EDIT_STATUS,"Load error! File corrupted/Read error ?"); break; case LOADER_ACCESSERROR: SetDlgItemText(hwndDlg,IDC_EDIT_STATUS,"Load error! Read file error!"); break; default: sprintf(tempstr2,"Load error! error %d",demo->loadstatus); SetDlgItemText(hwndDlg,IDC_EDIT_STATUS,tempstr2); break; } } } if(thefloppydisk) { if(hwif) { sprintf(tempstr,"Track %d/%d",hwif->current_track,thefloppydisk->floppyNumberOfTrack); SetDlgItemText(hwndDlg,IDC_EDIT_TRACKPOS,tempstr); SendDlgItemMessage(hwndDlg,IDC_SLIDER_TRACKPOS, TBM_SETRANGE, TRUE, MAKELONG(0, thefloppydisk->floppyNumberOfTrack)); SendDlgItemMessage(hwndDlg,IDC_SLIDER_TRACKPOS, TBM_SETPOS, TRUE,(int)hwif->current_track); } } break; default: return FALSE; } return TRUE; }