===================================================================
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);
 }