// // 行列 拆解資訊 轉碼主程式 // // 李傅魁 1998/03/15 // #include #include #include #include #include #include "resource.h" #include "function.h" char szAppName[] = "行列拆解資訊轉碼程式" ; char *szFilterI = "文字檔 (*.TXT;*.NT)\0*.txt;*.nt\0All Files (*.*)\0*.*\0"; char *szFilterO = "表格檔 (*.TAB)\0*.tab\0All Files (*.*)\0*.*\0"; char *szFilterH = "詞庫檔 (*.TBL)\0*.tbl\0All Files (*.*)\0*.*\0"; HANDLE hInst; //HWND msghwnd; char szInWordFileName[256]; char szOutWordFileName[256]; char szInHighFileName[256]; char szOutHighFileName[256]; char szInPhrFileName[256]; char szOutPhrFileName[256]; char szIdxFileName[256]; char hlpfile[256]; DWORD line; long FAR PASCAL CALLBACK WndProc (HWND, UINT, UINT, LONG) ; int cvtword (char *,char *,DWORD *); int cvthigh (char *,char *,DWORD *); int cvtphrase (char *,char *,char *,DWORD *); void error(HWND hwnd,int ErrCode,int item) { char Buffer[255]; char szMsg[255]; if(LoadString(hInst, ErrCode, (LPSTR)Buffer, sizeof(Buffer))) switch(ErrCode) { case IDS_ERROPENFILE: case IDS_ERRUNICODE: case IDS_ERRFORMATROOT: case IDS_ERRFORMATROOTS: case IDS_ERRFORMATPHRASE: case IDS_ERRFORMATCODE: switch(item) { case IDM_WORD: wsprintf((LPSTR)szMsg,(LPSTR)Buffer,(LPSTR)szInWordFileName,line); break; case IDM_HIGH: wsprintf((LPSTR)szMsg,(LPSTR)Buffer,(LPSTR)szInHighFileName,line); break; case IDM_PHRASE: wsprintf((LPSTR)szMsg,(LPSTR)Buffer,(LPSTR)szInPhrFileName,line); break; } break; case IDS_ERRCREATEFILE: switch(item) { case IDM_WORD: wsprintf((LPSTR)szMsg,(LPSTR)Buffer,(LPSTR)szOutWordFileName,line); break; case IDM_HIGH: wsprintf((LPSTR)szMsg,(LPSTR)Buffer,(LPSTR)szOutHighFileName,line); break; case IDM_PHRASE: wsprintf((LPSTR)szMsg,(LPSTR)Buffer,(LPSTR)szOutPhrFileName,line); break; } break; case IDS_ERRCREATEIDX: wsprintf((LPSTR)szMsg,(LPSTR)Buffer,(LPSTR)szIdxFileName); break; default: strcpy(szMsg,"發生不明錯誤!"); break; } else strcpy(szMsg,"發生不明錯誤!"); MessageBox(hwnd,(LPSTR)szMsg,szAppName,MB_OK | MB_ICONHAND |MB_APPLMODAL); } int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { HWND hwnd ; MSG msg ; WNDCLASS wndclass ; if (!hPrevInstance) { wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;//LoadIcon (hInstance, "ICON") ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = GetStockObject (WHITE_BRUSH) ; wndclass.lpszMenuName = "MENU" ; wndclass.lpszClassName = szAppName ; RegisterClass (&wndclass) ; } hInst=hInstance; _getcwd( hlpfile, sizeof(hlpfile)); if(hlpfile[strlen(hlpfile)-1]=='\\') hlpfile[strlen(hlpfile)-1]=0; strcat(hlpfile,"\\ARCVT.TXT"); hwnd = CreateWindow (szAppName, // window class name szAppName, // window caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL) ; // creation parameters ShowWindow (hwnd, nCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; } long FAR PASCAL CALLBACK WndProc (HWND hwnd, UINT message, UINT wParam, LONG lParam) { static FARPROC dlgprc; static HWND msghwnd; HCURSOR hcurSave; int ErrCode; static HFILE hlp; NPSTR npmem; WORD Len; switch (message) { case WM_CREATE: strcpy(szInWordFileName,"arntall.nt"); strcpy(szOutWordFileName,"array30.tab"); strcpy(szInHighFileName,"arhw-nt.nt"); strcpy(szOutHighFileName,"arrayhw.tab"); strcpy(szInPhrFileName,"ar25000.nt"); strcpy(szOutPhrFileName,"arphr.tbl"); strcpy(szIdxFileName,"arptr.tbl"); msghwnd = CreateWindow ("edit", NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL, //ES_AUTOVSCROLL, //ES_AUTOHSCROLL | 0, 0, 0,0, hwnd, (HANDLE)1, hInst, NULL) ; SendMessage(msghwnd,EM_SETREADONLY,TRUE,0L); if((hlp=_lopen((LPSTR)hlpfile, OF_READ))>0) { Len = (WORD) FileLen(hlp); npmem = (NPSTR)LocalAlloc(LMEM_FIXED,Len+1); _lread(hlp,(LPSTR)npmem,Len); _lclose(hlp); *(npmem+Len)=0; SendMessage(msghwnd,WM_SETTEXT,0,(LPARAM)(LPSTR)npmem); } PopFileInit (); return 0; case WM_SIZE: MoveWindow(msghwnd,0, 0, LOWORD(lParam),HIWORD(lParam),TRUE); return 0; case WM_COMMAND: switch(wParam) { case IDM_WORD: //單字 if(!PopFileOpenDlg(hwnd,szInWordFileName,"請選擇資料來源",szFilterI)) break; if((ErrCode=IsUniCode (szInWordFileName))!=0) { error(hwnd,ErrCode,wParam); break; } if(!PopFileSaveDlg(hwnd,szOutWordFileName,"請指定輸出檔名",szFilterO)) break; hcurSave = SetCursor(LoadCursor(NULL, IDC_WAIT)); ErrCode=cvtword(szInWordFileName,szOutWordFileName,&line); SetCursor(hcurSave); if(!ErrCode) MessageBox(hwnd,"單字的拆解資訊轉換完成!",szAppName,0); else error(hwnd,ErrCode,wParam); break; case IDM_PHRASE: //詞句 if(!PopFileOpenDlg(hwnd,szInPhrFileName,"請選擇資料來源",szFilterI)) break; if((ErrCode=IsUniCode (szInPhrFileName))!=0) { error(hwnd,ErrCode,wParam); break; } if(!PopFileSaveDlg(hwnd,szOutPhrFileName,"請指定輸出詞句檔名",szFilterH)) break; if(!PopFileSaveDlg(hwnd,szIdxFileName,"請指定輸出索引檔名",szFilterH)) break; hcurSave = SetCursor(LoadCursor(NULL, IDC_WAIT)); ErrCode=cvtphrase(szInPhrFileName,szOutPhrFileName,szIdxFileName,&line); SetCursor(hcurSave); if(!ErrCode) MessageBox(hwnd,"詞句的拆解資訊轉換完成!",szAppName,0); else error(hwnd,ErrCode,wParam); break; case IDM_HIGH: //簡碼 if(!PopFileOpenDlg(hwnd,szInHighFileName,"請選擇資料來源",szFilterI)) break; if((ErrCode=IsUniCode (szInHighFileName))!=0) { error(hwnd,ErrCode,wParam); break; } if(!PopFileSaveDlg(hwnd,szOutHighFileName,"請指定輸出檔名",szFilterO)) break; hcurSave = SetCursor(LoadCursor(NULL, IDC_WAIT)); ErrCode=cvthigh(szInHighFileName,szOutHighFileName,&line); SetCursor(hcurSave); if(!ErrCode) MessageBox(hwnd,"簡碼的拆解資訊轉換完成!",szAppName,0); else error(hwnd,ErrCode,wParam); break; } return 0; case WM_DESTROY: DestroyWindow(msghwnd); PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }