home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1996 February
/
VPR9602A.ISO
/
fwindows
/
comwp260
/
samples
/
sample5.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-10-09
|
5KB
|
203 lines
#include <windows.h>
#include <commdlg.h>
#include <string.h>
#include "comwin.h"
/* 端末側で定義する関数群 */
LONG FAR PASCAL LocalPuts(LPSTR);
LPSTR FAR PASCAL LocalGets(LPSTR);
LONG FAR PASCAL LocalFputs(LPSTR, LPSTR);
LPSTR FAR PASCAL LocalFgets(LPSTR, LONG, LPSTR);
LONG FAR PASCAL LocalSystem(LPSTR);
BOOL FAR PASCAL LocalCallCommand(FARPROC FAR *, LPSTR, LPLONG);
LONG FAR PASCAL LocalGetch(void);
LONG FAR PASCAL LocalInkey(void);
/* 内部関数 */
BOOL GetCommand(char *);
void MakeAllProcInstance(FARPROC *, HINSTANCE);
void FreeAllProcInstance(FARPROC *);
void IOFlush(void);
/* メイン */
int PASCAL WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow)
{
char szCommand[256];
FARPROC lpfnIO[9];
char cNull = '\0';
LONG lReturn;
CW_S_CONSOLE_INFO ci;
/* 入出力実行関数群を Export する */
MakeAllProcInstance(lpfnIO, hInstance);
/* 入出力実行関数群の登録 */
memset(&ci, 0, sizeof(ci));
ci.lMessage = CW_M_CONSOLE_INFO;
ci.lSize = sizeof(ci);
ci.lMode = CW_MODE_INIT;
ci.lFuncMax = 8;
ci.lBufMax = 80;
CallCommand(lpfnIO, &cNull, (LPLONG)&ci);
/* コマンド実行部 */
while (GetCommand(szCommand) != 0) {
IOFlush();
lReturn = -1;
CallCommand(lpfnIO, szCommand, &lReturn);
IOFlush();
}
/* 入出力実行関数群の登録削除 */
ci.lMode = CW_MODE_CLEAR;
CallCommand(lpfnIO, &cNull, (LPLONG)&ci);
FreeAllProcInstance(lpfnIO);
return 0;
}
/* ファイルオープンダイアログからコマンド文字列を得る */
BOOL GetCommand(char *pszFileTitle)
{
OPENFILENAME ofn;
char szDirName[256];
char szFile[256];
szFile[0] = '\0';
memset(&ofn, 0, sizeof(OPENFILENAME));
GetWindowsDirectory(szDirName, sizeof(szDirName));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = NULL;
ofn.lpstrFilter = "All Files(*.*)\0*.*\0\0";
ofn.nFilterIndex = 1;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFileTitle = pszFileTitle;
ofn.nMaxFileTitle = 256;
ofn.lpstrInitialDir = szDirName;
ofn.lpstrTitle = "Mini launcher by ComWin (sample5)";
ofn.Flags = OFN_HIDEREADONLY;
return GetOpenFileName(&ofn);
}
void MakeAllProcInstance(FARPROC *lpfnIO, HINSTANCE hInst)
{
lpfnIO[0] = MakeProcInstance((FARPROC)LocalPuts, hInst);
lpfnIO[1] = MakeProcInstance((FARPROC)LocalGets, hInst);
lpfnIO[2] = MakeProcInstance((FARPROC)LocalFputs, hInst);
lpfnIO[3] = MakeProcInstance((FARPROC)LocalFgets, hInst);
lpfnIO[4] = MakeProcInstance((FARPROC)LocalSystem, hInst);
lpfnIO[5] = MakeProcInstance((FARPROC)LocalCallCommand, hInst);
lpfnIO[6] = MakeProcInstance((FARPROC)LocalGetch, hInst);
lpfnIO[7] = MakeProcInstance((FARPROC)LocalInkey, hInst);
lpfnIO[8] = NULL;
}
void FreeAllProcInstance(FARPROC *lpfnIO)
{
int i;
for (i = 0; lpfnIO[i] != NULL; i++) {
FreeProcInstance(lpfnIO[i]);
}
}
#define BUFLEN 512
static char szIOBuffer[BUFLEN];
void IOFlush(void)
{
if (szIOBuffer[0] != '\0') {
MessageBox(NULL, szIOBuffer, "IOFlush", MB_OK);
szIOBuffer[0] = '\0';
}
}
/* 関数内部処理は端末側で定義する */
LONG FAR PASCAL LocalPuts(LPSTR lpszS)
{
int nLen;
nLen = lstrlen(lpszS);
if (nLen + 1 >= BUFLEN) {
return 0;
}
if (lstrlen(szIOBuffer) + nLen + 1 >= BUFLEN) {
MessageBox(NULL, szIOBuffer, "Puts", MB_OK);
szIOBuffer[0] = '\0';
}
lstrcat(szIOBuffer, lpszS);
lstrcat(szIOBuffer, "\n");
return nLen;
}
LPSTR FAR PASCAL LocalGets(LPSTR lpszS)
{
return lpszS;
}
LONG FAR PASCAL LocalFputs(LPSTR lpszS, LPSTR lpszFile)
{
int nLen;
nLen = lstrlen(lpszS);
if (nLen >= BUFLEN) {
return 0;
}
if (lstrlen(szIOBuffer) + nLen >= BUFLEN) {
MessageBox(NULL, szIOBuffer, "Fputs", MB_OK);
szIOBuffer[0] = '\0';
}
lstrcat(szIOBuffer, lpszS);
return nLen;
}
LPSTR FAR PASCAL LocalFgets(LPSTR lpszS, LONG lSize, LPSTR lpszFile)
{
return lpszS;
}
LONG FAR PASCAL LocalSystem(LPSTR lpszCommand)
{
#if !defined(WIN32)
HINSTANCE hInst;
#else
DWORD hInst;
#endif
hInst = WinExec(lpszCommand, SW_SHOWNORMAL);
if (hInst < 32) {
MessageBox(NULL, lpszCommand, "sample5:error", MB_OK);
}
return hInst;
}
BOOL FAR PASCAL LocalCallCommand(FARPROC FAR *lpfnIO,
LPSTR lpszCommand,
LPLONG lpReturn)
{
return FALSE;
}
LONG FAR PASCAL LocalGetch(void)
{
return 0;
}
LONG FAR PASCAL LocalInkey(void)
{
return 0;
}