[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
[MD:570]synchronous fiber
- X-ml-count: 570
- Subject: [MD:570]synchronous fiber
- From: YAMAMOTO Akishige <yamamoto@xxxxxxxxx>
- Date: 09 Mar 1998 20:17:13 +0900
- X-mailer: Semi-gnus 6.0.8 (based on Quassia Gnus v0.34)
添付の patch で -s option でとりあえず同期 fiber になります。
んが、これだと、あまり、うまくないです^^;;。
複数の fiber が同じアプリケーションを起動する場合、前のプロセスを終
了しないと、次のプロセスが立ち上がりません。(違うアプリケーションの
場合は OK) 終了させれば、立ち上がるので、がまん出来ると言えば、がま
ん出来ますが、気になると言えば、気になります;;
何とかしたいですが、今日はここまで :-P
;; やまもと
*** fiber.c 1998/03/09 04:41:34 1.1
--- fiber.c 1998/03/09 00:19:15
***************
*** 90,96 ****
#define FIBER_SUBKEY_OVERRIDEEXT "OverrideExt"
#define FIBER_SUBKEY_EXTENSION "Extension"
-
/* structures */
typedef struct tagEXTFILE {
char szExt[FIBER_EXTLEN+1];
--- 90,95 ----
***************
*** 684,689 ****
--- 683,716 ----
printf(" -l list exts\n");
printf(" -r <num> remove ext\n");
printf(" -i initialize\n");
+ printf(" -s synchronous mode\n");
+ }
+
+
+ VOID ShellExecuteSyncOrAsync( HWND hwnd,
+ LPCTSTR lpVerb,
+ LPCTSTR lpFile,
+ LPCTSTR lpParameters,
+ LPCTSTR lpDirectory,
+ INT nShow,
+ BOOL fSynchronous)
+ {
+ if (fSynchronous) {
+ SHELLEXECUTEINFO sei;
+ memset(&sei, 0, sizeof(SHELLEXECUTEINFO));
+ sei.cbSize = sizeof(SHELLEXECUTEINFO);
+ sei.fMask = SEE_MASK_NOCLOSEPROCESS;
+ sei.hwnd = hwnd;
+ sei.lpVerb = lpVerb;
+ sei.lpFile = lpFile;
+ sei.lpParameters = lpParameters;
+ sei.lpDirectory = lpDirectory;
+ sei.nShow = nShow;
+ ShellExecuteEx(&sei);
+ WaitForSingleObject(sei.hProcess, INFINITE);
+ } else {
+ ShellExecute(hwnd, lpVerb, lpFile, lpParameters, lpDirectory, nShow);
+ }
}
***************
*** 702,707 ****
--- 729,735 ----
BOOL fAdd = FALSE;
BOOL fRemove = FALSE;
BOOL fInitialize = FALSE;
+ BOOL fSynchronous = FALSE;
int iRemoveNum;
#ifdef _DEBUG
FILE *fp;
***************
*** 757,762 ****
--- 785,793 ----
} else if ( ! strcmp(argv[i],"-i") ){
/* -i */
fInitialize = TRUE;
+ } else if ( ! strcmp(argv[i],"-s") ){
+ /* -s */
+ fSynchronous = TRUE;
} else {
/* filename */
if ( strlen(argv[i]) > sizeof(szInputFile) ){
***************
*** 834,840 ****
if ( fExt ){
sprintf(szOpenFile,"%s.%s",szInputFile,szExt);
CopyFile(szInputFile,szOpenFile,FALSE);
! ShellExecute(NULL,"open",szOpenFile,NULL,NULL,SW_SHOWNORMAL);
exit( 0 );
}
--- 865,872 ----
if ( fExt ){
sprintf(szOpenFile,"%s.%s",szInputFile,szExt);
CopyFile(szInputFile,szOpenFile,FALSE);
! ShellExecuteSyncOrAsync(NULL,"open",szOpenFile,NULL,NULL,SW_SHOWNORMAL,
! fSynchronous);
exit( 0 );
}
***************
*** 843,849 ****
pt = strchr(szInputFile,':');
if ( pt ){
if ( pt > (szInputFile+1) ){ /* "http:","ftp:",... */
! ShellExecute(NULL,"open",szInputFile,NULL,NULL,SW_SHOWNORMAL);
exit( 0 );
}
}
--- 875,882 ----
pt = strchr(szInputFile,':');
if ( pt ){
if ( pt > (szInputFile+1) ){ /* "http:","ftp:",... */
! ShellExecuteSyncOrAsync(NULL,"open",szInputFile,NULL,NULL,
! SW_SHOWNORMAL,fSynchronous);
exit( 0 );
}
}
***************
*** 897,908 ****
/* go! */
switch ( state ){
case STATE_INPUTFILE:
! ShellExecute(NULL,"open",szInputFile,NULL,NULL,SW_SHOWNORMAL);
break;
case STATE_ADDEXT:
sprintf(szOpenFile,"%s.%s",szInputFile,ef[i].szExt);
CopyFile(szInputFile,szOpenFile,FALSE);
! ShellExecute(NULL,"open",szOpenFile,NULL,NULL,SW_SHOWNORMAL);
break;
default:
printf("Error: file not found or supported.\n");
--- 930,943 ----
/* go! */
switch ( state ){
case STATE_INPUTFILE:
! ShellExecuteSyncOrAsync(NULL,"open",szInputFile,NULL,NULL,SW_SHOWNORMAL,
! fSynchronous);
break;
case STATE_ADDEXT:
sprintf(szOpenFile,"%s.%s",szInputFile,ef[i].szExt);
CopyFile(szInputFile,szOpenFile,FALSE);
! ShellExecuteSyncOrAsync(NULL,"open",szOpenFile,NULL,NULL,SW_SHOWNORMAL,
! fSynchronous);
break;
default:
printf("Error: file not found or supported.\n");