home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1996 February / VPR9602A.ISO / fwindows / comwp260 / samples / sample5.c < prev    next >
C/C++ Source or Header  |  1995-10-09  |  5KB  |  203 lines

  1. #include <windows.h>
  2. #include <commdlg.h>
  3. #include <string.h>
  4. #include "comwin.h"
  5.  
  6. /* 端末側で定義する関数群 */
  7. LONG  FAR PASCAL LocalPuts(LPSTR);
  8. LPSTR FAR PASCAL LocalGets(LPSTR);
  9. LONG  FAR PASCAL LocalFputs(LPSTR, LPSTR);
  10. LPSTR FAR PASCAL LocalFgets(LPSTR, LONG, LPSTR);
  11. LONG  FAR PASCAL LocalSystem(LPSTR);
  12. BOOL  FAR PASCAL LocalCallCommand(FARPROC FAR *, LPSTR, LPLONG);
  13. LONG  FAR PASCAL LocalGetch(void);
  14. LONG  FAR PASCAL LocalInkey(void);
  15.  
  16. /* 内部関数 */
  17. BOOL GetCommand(char *);
  18. void MakeAllProcInstance(FARPROC *, HINSTANCE);
  19. void FreeAllProcInstance(FARPROC *);
  20. void IOFlush(void);
  21.  
  22. /* メイン */
  23. int PASCAL WinMain(HINSTANCE hInstance,
  24.                    HINSTANCE hPrevInstance,
  25.                    LPSTR lpszCmdLine,
  26.                    int nCmdShow)
  27. {
  28.     char szCommand[256];
  29.     FARPROC lpfnIO[9];
  30.     char cNull = '\0';
  31.     LONG lReturn;
  32.     CW_S_CONSOLE_INFO ci;
  33.  
  34.     /* 入出力実行関数群を Export する */
  35.     MakeAllProcInstance(lpfnIO, hInstance);
  36.  
  37.     /* 入出力実行関数群の登録 */
  38.     memset(&ci, 0, sizeof(ci));
  39.     ci.lMessage = CW_M_CONSOLE_INFO;
  40.     ci.lSize = sizeof(ci);
  41.     ci.lMode = CW_MODE_INIT;
  42.     ci.lFuncMax = 8;
  43.     ci.lBufMax = 80;
  44.     CallCommand(lpfnIO, &cNull, (LPLONG)&ci);
  45.  
  46.     /* コマンド実行部 */
  47.     while (GetCommand(szCommand) != 0) {
  48.         IOFlush();
  49.  
  50.         lReturn = -1;
  51.         CallCommand(lpfnIO, szCommand, &lReturn);
  52.  
  53.         IOFlush();
  54.     }
  55.  
  56.     /* 入出力実行関数群の登録削除 */
  57.     ci.lMode = CW_MODE_CLEAR;
  58.     CallCommand(lpfnIO, &cNull, (LPLONG)&ci);
  59.  
  60.     FreeAllProcInstance(lpfnIO);
  61.     return 0;
  62. }
  63.  
  64. /* ファイルオープンダイアログからコマンド文字列を得る */
  65. BOOL GetCommand(char *pszFileTitle)
  66. {
  67.     OPENFILENAME ofn;
  68.     char szDirName[256];
  69.     char szFile[256];
  70.  
  71.     szFile[0] = '\0';
  72.     memset(&ofn, 0, sizeof(OPENFILENAME));
  73.     GetWindowsDirectory(szDirName, sizeof(szDirName));
  74.  
  75.     ofn.lStructSize = sizeof(OPENFILENAME);
  76.     ofn.hwndOwner = NULL;
  77.     ofn.lpstrFilter = "All Files(*.*)\0*.*\0\0";
  78.     ofn.nFilterIndex = 1;
  79.     ofn.lpstrFile = szFile;
  80.     ofn.nMaxFile = sizeof(szFile);
  81.     ofn.lpstrFileTitle = pszFileTitle;
  82.     ofn.nMaxFileTitle = 256;
  83.     ofn.lpstrInitialDir = szDirName;
  84.     ofn.lpstrTitle = "Mini launcher by ComWin (sample5)";
  85.     ofn.Flags = OFN_HIDEREADONLY;
  86.  
  87.     return GetOpenFileName(&ofn);
  88. }
  89.  
  90. void MakeAllProcInstance(FARPROC *lpfnIO, HINSTANCE hInst)
  91. {
  92.     lpfnIO[0] = MakeProcInstance((FARPROC)LocalPuts,        hInst);
  93.     lpfnIO[1] = MakeProcInstance((FARPROC)LocalGets,        hInst);
  94.     lpfnIO[2] = MakeProcInstance((FARPROC)LocalFputs,       hInst);
  95.     lpfnIO[3] = MakeProcInstance((FARPROC)LocalFgets,       hInst);
  96.     lpfnIO[4] = MakeProcInstance((FARPROC)LocalSystem,      hInst);
  97.     lpfnIO[5] = MakeProcInstance((FARPROC)LocalCallCommand, hInst);
  98.     lpfnIO[6] = MakeProcInstance((FARPROC)LocalGetch,       hInst);
  99.     lpfnIO[7] = MakeProcInstance((FARPROC)LocalInkey,       hInst);
  100.     lpfnIO[8] = NULL;
  101. }
  102.  
  103. void FreeAllProcInstance(FARPROC *lpfnIO)
  104. {
  105.     int i;
  106.  
  107.     for (i = 0; lpfnIO[i] != NULL; i++) {
  108.         FreeProcInstance(lpfnIO[i]);
  109.     }
  110. }
  111.  
  112. #define BUFLEN 512
  113. static char szIOBuffer[BUFLEN];
  114.  
  115. void IOFlush(void)
  116. {
  117.     if (szIOBuffer[0] != '\0') {
  118.         MessageBox(NULL, szIOBuffer, "IOFlush", MB_OK);
  119.         szIOBuffer[0] = '\0';
  120.     }
  121. }
  122.  
  123. /* 関数内部処理は端末側で定義する */
  124.  
  125. LONG  FAR PASCAL LocalPuts(LPSTR lpszS)
  126. {
  127.     int nLen;
  128.  
  129.     nLen = lstrlen(lpszS);
  130.     if (nLen + 1 >= BUFLEN) {
  131.         return 0;
  132.     }
  133.  
  134.     if (lstrlen(szIOBuffer) + nLen + 1 >= BUFLEN) {
  135.         MessageBox(NULL, szIOBuffer, "Puts", MB_OK);
  136.         szIOBuffer[0] = '\0';
  137.     }
  138.     lstrcat(szIOBuffer, lpszS);
  139.     lstrcat(szIOBuffer, "\n");
  140.  
  141.     return nLen;
  142. }
  143.  
  144. LPSTR FAR PASCAL LocalGets(LPSTR lpszS)
  145. {
  146.     return lpszS;
  147. }
  148.  
  149. LONG  FAR PASCAL LocalFputs(LPSTR lpszS, LPSTR lpszFile)
  150. {
  151.     int nLen;
  152.  
  153.     nLen = lstrlen(lpszS);
  154.     if (nLen >= BUFLEN) {
  155.         return 0;
  156.     }
  157.  
  158.     if (lstrlen(szIOBuffer) + nLen >= BUFLEN) {
  159.         MessageBox(NULL, szIOBuffer, "Fputs", MB_OK);
  160.         szIOBuffer[0] = '\0';
  161.     }
  162.     lstrcat(szIOBuffer, lpszS);
  163.  
  164.     return nLen;
  165. }
  166.  
  167. LPSTR FAR PASCAL LocalFgets(LPSTR lpszS, LONG lSize, LPSTR lpszFile)
  168. {
  169.     return lpszS;
  170. }
  171.  
  172. LONG  FAR PASCAL LocalSystem(LPSTR lpszCommand)
  173. {
  174. #if !defined(WIN32)
  175.     HINSTANCE hInst;
  176. #else
  177.     DWORD hInst;
  178. #endif
  179.  
  180.     hInst = WinExec(lpszCommand, SW_SHOWNORMAL);
  181.     if (hInst < 32) {
  182.         MessageBox(NULL, lpszCommand, "sample5:error", MB_OK);
  183.     }
  184.     return hInst;
  185. }
  186.  
  187. BOOL  FAR PASCAL LocalCallCommand(FARPROC FAR *lpfnIO,
  188.                                   LPSTR lpszCommand,
  189.                                   LPLONG lpReturn)
  190. {
  191.     return FALSE;
  192. }
  193.  
  194. LONG FAR PASCAL LocalGetch(void)
  195. {
  196.     return 0;
  197. }
  198.  
  199. LONG FAR PASCAL LocalInkey(void)
  200. {
  201.     return 0;
  202. }
  203.