=================================================================== RCS file: /home/cvs/OpenXM_contrib2/windows/post-msg-asirgui/cmdasir.c,v retrieving revision 1.3 retrieving revision 1.6 diff -u -p -r1.3 -r1.6 --- OpenXM_contrib2/windows/post-msg-asirgui/cmdasir.c 2013/08/28 05:33:02 1.3 +++ OpenXM_contrib2/windows/post-msg-asirgui/cmdasir.c 2013/11/27 14:59:43 1.6 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM_contrib2/windows/post-msg-asirgui/cmdasir.c,v 1.2 2013/08/27 07:41:22 ohara Exp $ */ +/* $OpenXM: OpenXM_contrib2/windows/post-msg-asirgui/cmdasir.c,v 1.5 2013/11/27 04:23:07 takayama Exp $ */ // cl test.c user32.lib #include <windows.h> @@ -15,6 +15,8 @@ int loadFile(HWND hnd, char *uname); int terminateAsir(HWND hnd); int hasTemp(char *s); int pasteFile(HWND hnd, char *uname); +int containEnd(char s[]); +int abortAsir(HWND hnd); int main(int argc, char *argv[]) { @@ -28,6 +30,7 @@ int main(int argc, char *argv[]) char msg[1024]; char cmd[1024]; int paste_contents=0; + int abort=0; /* MessageBox(NULL,TEXT("test"),TEXT("Error in cmdasir.c"),MB_OK); */ sprintf(snameWin,"%s\\cmdasir-%d.txt",getenv("TEMP"),getpid()); @@ -37,6 +40,7 @@ int main(int argc, char *argv[]) system(cmd); return(0); } + fp = findAsirHandler(); if (fp == NULL) { fprintf(stderr,"handler file is not found.\n"); return(-1); @@ -46,12 +50,15 @@ int main(int argc, char *argv[]) if ((argc > 1) && (strcmp(argv[1],"--quit")==0)) { return terminateAsir(hnd); } + if ((argc > 1) && (strcmp(argv[1],"--abort")==0)) { + return abortAsir(hnd); + } printf("Handler is %d\n",hnd); paste_contents=0; for (ii=1; ii<argc; ii++) { - if (strcmp(argv[ii],"--paste-contents")==0) { - paste_contents=1; continue; - } + if (strcmp(argv[ii],"--paste-contents")==0) { + paste_contents=1; continue; + } uname = NULL; if (hasTemp(argv[ii])) { fp = fopen(winname2uxname(argv[ii]),"r"); @@ -201,7 +208,7 @@ int pasteFile(HWND hnd, char *uname) { return -1; } s = (char *)malloc(size+1); - i = 0; + i = 0;s[0]=0; while ((c=fgetc(fp)) != EOF) { s[i] = c; s[i+1]=0; if (i >= size-1) { @@ -213,8 +220,46 @@ int pasteFile(HWND hnd, char *uname) { } i++; } - sendFileName(hnd,s); + if (containEnd(s)) { + MessageBox(NULL,TEXT("The string contains end$ or end;"),TEXT(uname),MB_OK); + return(0); + } + if (strlen(s)>0) sendFileName(hnd,s); else { + MessageBox(NULL,TEXT("Empty string: "),TEXT(uname),MB_OK); + return 0; + } free(s); PostMessage(hnd,WM_CHAR,0xa,1); return 0; +} + +int containEnd(char s[]) { + int i; + for (i=0; i<strlen(s)-4; i++) { + if (strncmp(&(s[i]),"end$",4)==0) return 1; + if (strncmp(&(s[i]),"end;",4)==0) return 1; + } + return(0); +} + +int abortAsir(HWND hnd) { + int c; + int result; + result=MessageBox(NULL,TEXT("Do you abort this computation?"),TEXT("Abort"),MB_OKCANCEL); + if (result == IDCANCEL) return(0); + c=0x3; + if (!PostMessage(hnd,WM_CHAR,c,1)) { + MessageBox(NULL,TEXT("asirgui is not running."), TEXT("ERROR in cmdasir.c"),MB_OK); + return(-1); + } + + printf("Sending ctrl-C\n"); + /* Sleep(3*1000); */ + result=MessageBox(NULL,TEXT("Interrupt is displayed in asirgui?"),TEXT("Sent ctrl-C."),MB_OKCANCEL); + if (result == IDCANCEL) return(0); + c='t'; PostMessage(hnd,WM_CHAR,c,1); + c=0xd; PostMessage(hnd,WM_CHAR,c,1); + c='y'; PostMessage(hnd,WM_CHAR,c,1); + c=0xd; PostMessage(hnd,WM_CHAR,c,1); + return(0); }