static BOOL CALLBACK DialogProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) { if (Msg == WM_INITDIALOG) { // EnableWindow(hScrnWnd, FALSE); hInpDIPSWDlg = hDlg; InpDIPSWInit(); if (!NetworkGame() && bAutoPause) { bRunPause = 1; } return TRUE; } if (Msg == WM_CLOSE) { EnableWindow(hScrnWnd, TRUE); DestroyWindow(hInpDIPSWDlg); return 0; } if (Msg == WM_DESTROY) { InpDIPSWCancel(); InpDIPSWExit(); return 0; } if (Msg == WM_COMMAND) { int Id = LOWORD(wParam); int Notify = HIWORD(wParam); if (Id == IDOK && Notify == BN_CLICKED) { // OK button bOK = true; SendMessage(hDlg, WM_CLOSE, 0, 0); return 0; } if (Id == IDCANCEL && Notify == BN_CLICKED) { // cancel = close SendMessage(hDlg, WM_CLOSE, 0, 0); return 0; } // New DIPswitch value selected if (Id == IDC_INPCX1_VALUE && Notify == CBN_SELCHANGE) { BurnDIPInfo bdi = {0, 0, 0, 0, NULL}; struct GameInp *pgi; int nSel = SendMessage(GetDlgItem(hInpDIPSWDlg, IDC_INPCX1_VALUE), CB_GETCURSEL, 0, 0); int j = 0; for (int i = 0; i <= nSel; i++) { do { BurnDrvGetDIPInfo(&bdi, nDIPGroup + 1 + j++); } while (bdi.nFlags == 0); } pgi = GameInputs + bdi.nInput + nDIPOffset; pgi->Input.Constant.nConst = (pgi->Input.Constant.nConst & ~bdi.nMask) | (bdi.nSetting & bdi.nMask); if (bdi.nFlags & 0x40) { while (BurnDrvGetDIPInfo(&bdi, nDIPGroup + 1 + j++) == 0) { if (bdi.nFlags == 0) { pgi = GameInputs + bdi.nInput + nDIPOffset; pgi->Input.Constant.nConst = (pgi->Input.Constant.nConst & ~bdi.nMask) | (bdi.nSetting & bdi.nMask); } else { break; } } } InpDIPSWListMake(); return 0; } // New DIPswitch selected if (Id == IDC_INPC_RESET && Notify == BN_CLICKED) { InpDIPSWResetDIPs(); InpDIPSWListMake(); // refresh view SendMessage(GetDlgItem(hInpDIPSWDlg, IDC_INPCX1_VALUE), CB_RESETCONTENT, 0, 0); return 0; } } if (Msg == WM_NOTIFY && lParam) { int Id = LOWORD(wParam); NMHDR* pnm = (NMHDR*)lParam; if (Id == IDC_INPCHEAT_LIST && pnm->code == LVN_ITEMCHANGED) { if (((NM_LISTVIEW*)lParam)->uNewState & LVIS_SELECTED) { InpDIPSWSelect(); } return 0; } if (Id == IDC_INPCHEAT_LIST && pnm->code == NM_CUSTOMDRAW) { NMLVCUSTOMDRAW* plvcd = (NMLVCUSTOMDRAW*)lParam; switch (plvcd->nmcd.dwDrawStage) { case CDDS_PREPAINT: { SetWindowLong(hInpDIPSWDlg, DWL_MSGRESULT, CDRF_NOTIFYITEMDRAW); return 1; } case CDDS_ITEMPREPAINT: { BurnDIPInfo bdi; BurnDrvGetDIPInfo(&bdi, plvcd->nmcd.lItemlParam); if (bdi.nFlags == 0xFD) { plvcd->clrTextBk = RGB(0xFF, 0xDF, 0xBB); SetWindowLong(hInpDIPSWDlg, DWL_MSGRESULT, CDRF_NEWFONT); } return 1; } } } } return 0; }
int main() { string mainmenu[]={"Connect [ 들어가기 ]","Listen [ 기다리기 ]","2 P ( OffLine ) [ 2P 오프라인 ]","Exit [종 료]"}; int mport[]={GAME_CONNECT,GAME_LISTEN,GAME_TWOPLAY,GAME_EXIT}; int gt=0; WSADATA wsaData; SOCKADDR_IN addr; int port=36214; int caddrsize=0; char ip[25]; SOCKET sServer,sClient; //메뉴 : 접속 , 기다리기 , 2인 플레이(오프라인) , 종료 MainMenu: title("CNOM 0.0.1 - By Qoo . http://cyworld.com/qoohk"); sysclear(); SetConsoleSize(17,68); gt=MenuSecond(0,4,10,5,20,4,"please select menu ~# [메뉴를 선택해주세요.]",mainmenu,mport,0); switch(gt) { case 0: ErrorMsg("Select Error"); break; case GAME_EXIT: WSACleanup(); exit(0); break; case GAME_TWOPLAY: SoloGame(); break; case GAME_LISTEN: sysclear(); SetConsoleSize(20,75); SetColor(15); printf("WSA Start Up ... "); if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) { ErrorMsg("WSA Start Error!"); } printf("OK\nSocket Create ... "); sServer=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); if(sServer == INVALID_SOCKET) ErrorMsg("Socket Create Error"); printf("OK\nBind.. "); memset(&addr,0,sizeof(addr)); addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_family = AF_INET; addr.sin_port = htons(port); if(bind(sServer,(SOCKADDR*)&addr,sizeof(addr))==SOCKET_ERROR) { ErrorMsg("Bind Error"); } if(listen(sServer,5)==SOCKET_ERROR) { ErrorMsg("Listen Error"); } printf("OK\n"); printf("... accept..."); SOCKADDR_IN caddr; caddrsize=sizeof(caddr); sClient=accept(sServer,(SOCKADDR*)&caddr,&caddrsize); if(sClient==INVALID_SOCKET) ErrorMsg("ACCEPT ERROR"); printf("OK\n"); NetworkGame(sClient,inet_ntoa(caddr.sin_addr),SERVER); break; case GAME_CONNECT: sysclear(); SetColor(15); SetConsoleSize(20,75); printf("Enter the IP address to access. (Up to 25 bytes) [IP주소를 입력해주세요.]\n->"); SetColor(2); scanf("%s",ip); SetColor(15); printf("WSA Start Up ... "); if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) { ErrorMsg("WSA Start Error!"); } printf("OK\nSocket Create ... "); sClient=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); if(sClient == INVALID_SOCKET) ErrorMsg("Socket Create Error"); printf("OK\nConnect ... "); memset(&addr,0,sizeof(addr)); addr.sin_addr.s_addr = inet_addr(ip); addr.sin_family = AF_INET; addr.sin_port = htons(port); if(connect(sClient,(SOCKADDR*)&addr,sizeof(addr))==SOCKET_ERROR) { printf("\nSorry.. Connect Error.. \n"); printf("Do you want to go back?( Y or N )\n - select y or n"); while(1) { char th=getch(); if(th=='Y' || th=='y') goto MainMenu; else if(th=='N' || th=='n') exit(0); } } printf("OK\n"); NetworkGame(sClient,ip,CLIENT); break; } WSACleanup(); return EXIT_SUCCESS; }