/** * 初期化 */ void CTraceWnd::Initialize() { WNDCLASS wc; ZeroMemory(&wc, sizeof(wc)); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = ::DefWindowProc; wc.hInstance = GetInstanceHandle(); wc.hCursor = ::LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = static_cast<HBRUSH>(::GetStockObject(WHITE_BRUSH)); wc.lpszClassName = s_szClassName; if (!::RegisterClass(&wc)) { return; } #if 1 m_nFlags = 4; #else m_nFlags = 1; m_tfh = textfile_create(OEMTEXT("traceout.txt"), 0x800); #endif tracecfg.posx = CW_USEDEFAULT; tracecfg.posy = CW_USEDEFAULT; tracecfg.width = CW_USEDEFAULT; tracecfg.height = CW_USEDEFAULT; ini_read(file_getcd(np2trace), inititle, initbl, NELEMENTS(initbl)); if (!CreateEx(WS_EX_CONTROLPARENT, s_szClassName, s_szTitle, WS_OVERLAPPEDWINDOW, tracecfg.posx, tracecfg.posy, tracecfg.width, tracecfg.height, NULL, NULL)) { return; } ShowWindow(SW_SHOW); UpdateWindow(); }
/** * フレームワークは、ユーザーがコントロール メニューからコマンドを選択したとき、または最大化または最小化ボタンを選択すると、このメンバー関数を呼び出します * @param[in] nID 必要なシステム コマンドの種類を指定します * @param[in] lParam カーソルの座標 */ void CTraceWnd::OnSysCommand(UINT nID, LPARAM lParam) { switch (nID) { case IDM_TRACE_TRACE: m_nFlags ^= 1; break; case IDM_TRACE_VERBOSE: m_nFlags ^= 2; break; case IDM_TRACE_ENABLE: m_nFlags ^= 4; break; case IDM_TRACE_FILEOUT: if (m_tfh != NULL) { textfile_close(m_tfh); m_tfh = NULL; } else { m_tfh = textfile_create(OEMTEXT("traceout.txt"), 0x800); } break; case IDM_TRACE_CLEAR: m_wndView.SetWindowText(TEXT("")); break; } }
void debugsub_status(void) { static int filenum = 0; TEXTFILEH tfh; OEMCHAR work[512]; const OEMCHAR *p; OEMSPRINTF(work, file_i286reg, filenum); tfh = textfile_create(file_getcd(work), 0); if (tfh != NULL) { p = debugsub_regs(); textfile_write(tfh, p); OEMSPRINTF(work, str_picstat, pic.pi[0].imr, pic.pi[0].irr, pic.pi[0].isr, pic.pi[1].imr, pic.pi[1].irr, pic.pi[1].isr, mouseif.upd8255.portc, sysport.c); textfile_write(tfh, work); textfile_close(tfh); } OEMSPRINTF(work, file_i286cs, filenum); writeseg(work, CS_BASE, 0xffff); OEMSPRINTF(work, file_i286ds, filenum); writeseg(work, DS_BASE, 0xffff); OEMSPRINTF(work, file_i286es, filenum); writeseg(work, ES_BASE, 0xffff); OEMSPRINTF(work, file_i286ss, filenum); writeseg(work, SS_BASE, 0xffff); filenum++; }
static LRESULT onSysCommand(HWND hWnd, WPARAM wParam, LPARAM lParam) { HMENU hMenu; hMenu = GetSystemMenu(hWnd, FALSE); switch(wParam) { case IDM_TRACE_TRACE: tracewin.en ^= 1; CheckMenuItem(hMenu, IDM_TRACE_TRACE, (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); break; case IDM_TRACE_VERBOSE: tracewin.en ^= 2; CheckMenuItem(hMenu, IDM_TRACE_VERBOSE, (tracewin.en & 2)?MF_CHECKED:MF_UNCHECKED); break; case IDM_TRACE_ENABLE: tracewin.en ^= 4; CheckMenuItem(hMenu, IDM_TRACE_ENABLE, (tracewin.en & 4)?MF_CHECKED:MF_UNCHECKED); break; case IDM_TRACE_FILEOUT: if (tracewin.tf != NULL) { textfile_close(tracewin.tf); tracewin.tf = NULL; } else { tracewin.tf = textfile_create(OEMTEXT("traceout.txt"), 0x800); } CheckMenuItem(hMenu, IDM_TRACE_FILEOUT, (tracewin.tf)?MF_CHECKED:MF_UNCHECKED); break; case IDM_TRACE_CLEAR: View_ClrString(); break; default: return DefWindowProc(hWnd, WM_SYSCOMMAND, wParam, lParam); } return FALSE; }
void trace_init(void) { HWND hwnd; ZeroMemory(&tracewin, sizeof(tracewin)); WNDCLASS wc; wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = traceproc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = g_hInstance; wc.hIcon = NULL; wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = ClassName; if (!RegisterClass(&wc)) { return; } #if 1 tracewin.en = 4; #else tracewin.en = 1; tracewin.tf = textfile_create(OEMTEXT("traceout.txt"), 0x800); #endif tracecfg.posx = CW_USEDEFAULT; tracecfg.posy = CW_USEDEFAULT; tracecfg.width = CW_USEDEFAULT; tracecfg.height = CW_USEDEFAULT; ini_read(file_getcd(np2trace), inititle, initbl, NELEMENTS(initbl)); hwnd = CreateWindowEx(WS_EX_CONTROLPARENT, ClassName, ProgTitle, WS_OVERLAPPEDWINDOW, tracecfg.posx, tracecfg.posy, tracecfg.width, tracecfg.height, NULL, NULL, g_hInstance, NULL); tracewin.hwnd = hwnd; if (hwnd == NULL) { return; } ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd); }
static LRESULT CALLBACK traceproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { RECT rc; HMENU hmenu; switch (msg) { case WM_CREATE: hmenu = GetSystemMenu(hWnd, FALSE); InsertMenu(hmenu, 0, MF_BYPOSITION | MF_STRING, IDM_TRACE1, trace1); InsertMenu(hmenu, 1, MF_BYPOSITION | MF_STRING, IDM_TRACE2, trace2); InsertMenu(hmenu, 2, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); InsertMenu(hmenu, 3, MF_BYPOSITION | MF_STRING, IDM_TRACEEN, traceen); InsertMenu(hmenu, 4, MF_BYPOSITION | MF_STRING, IDM_TRACEFH, tracefh); InsertMenu(hmenu, 5, MF_BYPOSITION | MF_STRING, IDM_TRACECL, tracecl); InsertMenu(hmenu, 6, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); CheckMenuItem(hmenu, IDM_TRACE1, (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); CheckMenuItem(hmenu, IDM_TRACE2, (tracewin.en & 2)?MF_CHECKED:MF_UNCHECKED); CheckMenuItem(hmenu, IDM_TRACEEN, (tracewin.en & 4)?MF_CHECKED:MF_UNCHECKED); GetClientRect(hWnd, &rc); hView = CreateWindowEx(WS_EX_CLIENTEDGE, ClassEdit, NULL, WS_CHILD | WS_VISIBLE | ES_READONLY | ES_LEFT | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL, 0, 0, rc.right, rc.bottom, hWnd, (HMENU)IDC_VIEW, g_hInstance, NULL); if (!hView) { break; } SendMessage(hView, EM_SETLIMITTEXT, (WPARAM)VIEW_BUFFERSIZE, 0); hfView = CreateFont(VIEW_SIZE, 0, 0, 0, 0, 0, 0, 0, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FIXED_PITCH, viewfont); if (!hfView) { break; } SendMessage(hView, WM_SETFONT, (WPARAM)hfView, MAKELPARAM(TRUE, 0)); hBrush = CreateSolidBrush(VIEW_BGCOLOR); SetFocus(hView); return(TRUE); case WM_SYSCOMMAND: switch(wp) { case IDM_TRACE1: tracewin.en ^= 1; hmenu = GetSystemMenu(hWnd, FALSE); CheckMenuItem(hmenu, IDM_TRACE1, (tracewin.en & 1)?MF_CHECKED:MF_UNCHECKED); break; case IDM_TRACE2: tracewin.en ^= 2; hmenu = GetSystemMenu(hWnd, FALSE); CheckMenuItem(hmenu, IDM_TRACE2, (tracewin.en & 2)?MF_CHECKED:MF_UNCHECKED); break; case IDM_TRACEEN: tracewin.en ^= 4; hmenu = GetSystemMenu(hWnd, FALSE); CheckMenuItem(hmenu, IDM_TRACEEN, (tracewin.en & 4)?MF_CHECKED:MF_UNCHECKED); break; case IDM_TRACEFH: if (tracewin.tf != NULL) { textfile_close(tracewin.tf); tracewin.tf = NULL; } else { tracewin.tf = textfile_create(OEMTEXT("traceout.txt"), 0x800); } hmenu = GetSystemMenu(hWnd, FALSE); CheckMenuItem(hmenu, IDM_TRACEFH, (tracewin.tf)?MF_CHECKED:MF_UNCHECKED); break; case IDM_TRACECL: View_ClrString(); break; default: return(DefWindowProc(hWnd, msg, wp, lp)); } break; case WM_MOVE: if (!(GetWindowLong(hWnd, GWL_STYLE) & (WS_MAXIMIZE | WS_MINIMIZE))) { GetWindowRect(hWnd, &rc); tracecfg.posx = rc.left; tracecfg.posy = rc.top; } break; case WM_SIZE: // window resize if (!(GetWindowLong(hWnd, GWL_STYLE) & (WS_MAXIMIZE | WS_MINIMIZE))) { GetWindowRect(hWnd, &rc); tracecfg.width = rc.right - rc.left; tracecfg.height = rc.bottom - rc.top; } MoveWindow(hView, 0, 0, LOWORD(lp), HIWORD(lp), TRUE); View_ScrollToBottom(hView); break; case WM_SETFOCUS: SetFocus(hView); return(0L); case WM_CTLCOLORSTATIC: case WM_CTLCOLOREDIT: SetTextColor((HDC)wp, VIEW_FGCOLOR); SetBkColor((HDC)wp, VIEW_BGCOLOR); return((LRESULT)hBrush); case WM_CLOSE: break; case WM_DESTROY: if (hBrush) { DeleteObject(hBrush); } if (hfView) { DeleteObject(hfView); } break; #if 0 case WM_ENTERSIZEMOVE: winloc_movingstart(); break; case WM_MOVING: winloc_movingproc((RECT *)lp); break; case WM_ERASEBKGND: return(FALSE); #endif default: return(DefWindowProc(hWnd, msg, wp, lp)); } return(0L); }
// イメージファイルの実体を開き、各種情報構築 BRESULT setsxsidev(SXSIDEV sxsi, const OEMCHAR *path, const _CDTRK *trk, UINT trks) { FILEH fh; long totals; CDINFO cdinfo; UINT mediatype; UINT i; #ifdef TOCLOGOUT OEMCHAR logpath[MAX_PATH]; OEMCHAR logbuf[2048]; TEXTFILEH tfh; #endif // trk、trksは有効な値が設定済みなのが前提 if ((trk == NULL) || (trks == 0)) { goto sxsiope_err1; } fh = file_open_rb(path); if (fh == FILEH_INVALID) { goto sxsiope_err1; } cdinfo = (CDINFO)_MALLOC(sizeof(_CDINFO), path); if (cdinfo == NULL) { goto sxsiope_err2; } ZeroMemory(cdinfo, sizeof(_CDINFO)); cdinfo->fh = fh; trks = min(trks, NELEMENTS(cdinfo->trk) - 1); CopyMemory(cdinfo->trk, trk, trks * sizeof(_CDTRK)); #ifdef TOCLOGOUT file_cpyname(logpath, path, NELEMENTS(logpath)); file_cutext(logpath); file_catname(logpath, str_logB, NELEMENTS(logpath)); tfh = textfile_create(logpath, 0x800); if (tfh == NULL) { return(FAILURE); } TOCLOG(OEMTEXT("STR _CDTRK LOG\r\n"), 0); for (i = 0; i < trks; i++) { TOCLOG(OEMTEXT("trk[%02d]\r\n"), i); TOCLOG(OEMTEXT(" adr_ctl = 0x%02X\r\n"), cdinfo->trk[i].adr_ctl); TOCLOG(OEMTEXT(" point = %02d\r\n"), cdinfo->trk[i].point); TOCLOG(OEMTEXT(" [pos0][pos][ ] = [%18I32d]"), cdinfo->trk[i].pos0); TOCLOG(OEMTEXT("[%18I32d][ ]\r\n"), cdinfo->trk[i].pos); TOCLOG(OEMTEXT(" sec[ ][str][end] = [ ][%18I32d]"), cdinfo->trk[i].str_sec); TOCLOG(OEMTEXT("[%18I32d]\r\n"), cdinfo->trk[i].end_sec); TOCLOG(OEMTEXT(" sectors = %I32d\r\n"), cdinfo->trk[i].sectors); TOCLOG(OEMTEXT(" sector_size = %d\r\n"), cdinfo->trk[i].sector_size); TOCLOG(OEMTEXT(" sector [pregap][start][end] = [%18I32d]"), cdinfo->trk[i].pregap_sector); TOCLOG(OEMTEXT("[%18I32d]"), cdinfo->trk[i].start_sector); TOCLOG(OEMTEXT("[%18I32d]\r\n"), cdinfo->trk[i].end_sector); TOCLOG(OEMTEXT(" img_sec[pregap][start][end] = [%18I32d]"), cdinfo->trk[i].img_pregap_sec); TOCLOG(OEMTEXT("[%18I32d]"), cdinfo->trk[i].img_start_sec); TOCLOG(OEMTEXT("[%18I32d]\r\n"), cdinfo->trk[i].img_end_sec); TOCLOG(OEMTEXT(" offset [pregap][start][end] = [0x%016I64X]"), cdinfo->trk[i].pregap_offset); TOCLOG(OEMTEXT("[0x%016I64X]"), cdinfo->trk[i].start_offset); TOCLOG(OEMTEXT("[0x%016I64X]\r\n"), cdinfo->trk[i].end_offset); TOCLOG(OEMTEXT(" pregap_sectors = %I32d\r\n"), cdinfo->trk[i].pregap_sectors); TOCLOG(OEMTEXT(" track_sectors = %I32d\r\n"), cdinfo->trk[i].track_sectors); } TOCLOG(OEMTEXT("END _CDTRK LOG\r\n"), 0); textfile_close(tfh); #endif #if 1 if (sxsi->totals == -1) { totals = set_trkinfo(fh, cdinfo->trk, trks, 0); if (totals < 0) { goto sxsiope_err3; } sxsi->totals = totals; } #else totals = issec(fh, cdinfo->trk, trks); // とりあえず sxsi->read = sec2048_read; totals = issec2048(cdinfo->fh); if (totals < 0) { sxsi->read = sec2352_read; totals = issec2352(cdinfo->fh); } if (totals < 0) { sxsi->read = sec2448_read; totals = issec2448(cdinfo->fh); } if (totals < 0) { sxsi->read = sec_read; totals = issec(cdinfo->fh, cdinfo->trk, trks); } if (totals < 0) { goto sxsiope_err3; } #endif mediatype = 0; for (i = 0; i < trks; i++) { if (cdinfo->trk[i].adr_ctl == TRACK_DATA) { mediatype |= SXSIMEDIA_DATA; } else if (cdinfo->trk[i].adr_ctl == TRACK_AUDIO) { mediatype |= SXSIMEDIA_AUDIO; } } // リードアウトトラックを生成 cdinfo->trk[trks].adr_ctl = 0x10; cdinfo->trk[trks].point = 0xaa; // cdinfo->trk[trks].pos = totals; cdinfo->trk[trks].pos = sxsi->totals; cdinfo->trks = trks; file_cpyname(cdinfo->path, path, NELEMENTS(cdinfo->path)); sxsi->reopen = cd_reopen; sxsi->close = cd_close; sxsi->destroy = cd_destroy; sxsi->hdl = (INTPTR)cdinfo; // sxsi->totals = totals; sxsi->cylinders = 0; sxsi->size = 2048; sxsi->sectors = 1; sxsi->surfaces = 1; sxsi->headersize = 0; sxsi->mediatype = mediatype; #ifdef TOCLOGOUT file_cpyname(logpath, path, NELEMENTS(logpath)); file_cutext(logpath); file_catname(logpath, str_logA, NELEMENTS(logpath)); tfh = textfile_create(logpath, 0x800); if (tfh == NULL) { return(FAILURE); } TOCLOG(OEMTEXT("STR _CDTRK LOG\r\n"), 0); for (i = 0; i < trks; i++) { TOCLOG(OEMTEXT("trk[%02d]\r\n"), i); TOCLOG(OEMTEXT(" adr_ctl = 0x%02X\r\n"), cdinfo->trk[i].adr_ctl); TOCLOG(OEMTEXT(" point = %02d\r\n"), cdinfo->trk[i].point); TOCLOG(OEMTEXT(" [pos0][pos][ ] = [%18I32d]"), cdinfo->trk[i].pos0); TOCLOG(OEMTEXT("[%18I32d][ ]\r\n"), cdinfo->trk[i].pos); TOCLOG(OEMTEXT(" sec[ ][str][end] = [ ][%18I32d]"), cdinfo->trk[i].str_sec); TOCLOG(OEMTEXT("[%18I32d]\r\n"), cdinfo->trk[i].end_sec); TOCLOG(OEMTEXT(" sectors = %I32d\r\n"), cdinfo->trk[i].sectors); TOCLOG(OEMTEXT(" sector_size = %d\r\n"), cdinfo->trk[i].sector_size); TOCLOG(OEMTEXT(" sector [pregap][start][end] = [%18I32d]"), cdinfo->trk[i].pregap_sector); TOCLOG(OEMTEXT("[%18I32d]"), cdinfo->trk[i].start_sector); TOCLOG(OEMTEXT("[%18I32d]\r\n"), cdinfo->trk[i].end_sector); TOCLOG(OEMTEXT(" img_sec[pregap][start][end] = [%18I32d]"), cdinfo->trk[i].img_pregap_sec); TOCLOG(OEMTEXT("[%18I32d]"), cdinfo->trk[i].img_start_sec); TOCLOG(OEMTEXT("[%18I32d]\r\n"), cdinfo->trk[i].img_end_sec); TOCLOG(OEMTEXT(" offset [pregap][start][end] = [0x%016I64X]"), cdinfo->trk[i].pregap_offset); TOCLOG(OEMTEXT("[0x%016I64X]"), cdinfo->trk[i].start_offset); TOCLOG(OEMTEXT("[0x%016I64X]\r\n"), cdinfo->trk[i].end_offset); TOCLOG(OEMTEXT(" pregap_sectors = %I32d\r\n"), cdinfo->trk[i].pregap_sectors); TOCLOG(OEMTEXT(" track_sectors = %I32d\r\n"), cdinfo->trk[i].track_sectors); } TOCLOG(OEMTEXT("END _CDTRK LOG\r\n"), 0); textfile_close(tfh); #endif return(SUCCESS); sxsiope_err3: _MFREE(cdinfo); sxsiope_err2: file_close(fh); sxsiope_err1: return(FAILURE); }