[BACK]Return to cmdasir.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / windows / post-msg-asirgui

Annotation of OpenXM_contrib2/windows/post-msg-asirgui/cmdasir.c, Revision 1.3

1.3     ! ohara       1: /* $OpenXM: OpenXM_contrib2/windows/post-msg-asirgui/cmdasir.c,v 1.2 2013/08/27 07:41:22 ohara Exp $ */
        !             2: // cl test.c user32.lib
        !             3:
        !             4: #include <windows.h>
        !             5: #include <stdlib.h>
        !             6: #include <stdio.h>
        !             7: #include <string.h>
        !             8: #include <io.h>
        !             9: #include <process.h>
        !            10:
        !            11: char *winname2uxname(char winname[]);
        !            12: FILE *findAsirHandler();
        !            13: int sendFileName(HWND hnd,char uname[]);
        !            14: int loadFile(HWND hnd, char *uname);
        !            15: int terminateAsir(HWND hnd);
        !            16: int hasTemp(char *s);
        !            17: int pasteFile(HWND hnd, char *uname);
        !            18:
        !            19: int main(int argc, char *argv[])
        !            20: {
        !            21:   HWND hnd;
        !            22:   int c,ii;
        !            23:   char *uname=NULL;
        !            24:   FILE *fp=NULL;
        !            25:   FILE *fp2=NULL;
        !            26:   char snameWin[1024];
        !            27:   char *snameUx;
        !            28:   char msg[1024];
        !            29:   char cmd[1024];
        !            30:   int paste_contents=0;
        !            31:
        !            32:   /* MessageBox(NULL,TEXT("test"),TEXT("Error in cmdasir.c"),MB_OK); */
        !            33:   sprintf(snameWin,"%s\\cmdasir-%d.txt",getenv("TEMP"),getpid());
        !            34:   snameUx = winname2uxname(snameWin);
        !            35:   if ((argc > 1) && (strcmp(argv[1],"--delete-tmp")==0)) {
        !            36:     sprintf(cmd,"del %s\\cmdasir-*",getenv("TEMP"));
        !            37:     system(cmd);
        !            38:     return(0);
        !            39:   }
        !            40:   fp = findAsirHandler();
        !            41:   if (fp == NULL) {
        !            42:     fprintf(stderr,"handler file is not found.\n"); return(-1);
        !            43:   }
        !            44:   fscanf(fp,"%d",&hnd);
        !            45:   fclose(fp);
        !            46:   if ((argc > 1) && (strcmp(argv[1],"--quit")==0)) {
        !            47:     return terminateAsir(hnd);
        !            48:   }
        !            49:   printf("Handler is %d\n",hnd);
        !            50:   paste_contents=0;
        !            51:   for (ii=1; ii<argc; ii++) {
        !            52:        if (strcmp(argv[ii],"--paste-contents")==0) {
        !            53:                paste_contents=1; continue;
        !            54:        }
        !            55:     uname = NULL;
        !            56:     if (hasTemp(argv[ii])) {
        !            57:       fp = fopen(winname2uxname(argv[ii]),"r");
        !            58:       fp2 = fopen(snameUx,"w");
        !            59:       if (fp2 == NULL) {
        !            60:         sprintf(msg,"File %s to load is not found.",argv[ii]);
        !            61:         MessageBox(NULL,TEXT(msg),TEXT("Error in cmdasir.c"), MB_OK);
        !            62:         return(-1);
        !            63:       }
        !            64:       while ((c=fgetc(fp)) >= 0) fputc(c,fp2);
        !            65:        if (!paste_contents) fprintf(fp2,"\nend$\n");
        !            66:       fclose(fp2);
        !            67:       uname=snameUx;
        !            68:     }
        !            69:     printf("filename=%s\n",argv[ii]);
        !            70:     if(access(argv[ii],0)==0) {
        !            71:        if (paste_contents) return pasteFile(hnd, (uname != NULL)? uname: winname2uxname(argv[ii]));
        !            72:        else return loadFile(hnd, (uname != NULL)? uname: winname2uxname(argv[ii]));
        !            73:     }
        !            74:   }
        !            75:   /* work file is kept. Prepare a commnd to delete all the work files under temp
        !            76:    */
        !            77:   while ((c=getchar()) != EOF) {
        !            78:     if (!PostMessage(hnd,WM_CHAR,c,1)) {
        !            79:       MessageBox(NULL,TEXT("asirgui is not running."), TEXT("ERROR in cmdasir.c"),MB_OK);
        !            80:       return(-1);
        !            81:     }
        !            82:   }
        !            83:   return 0;
        !            84: }
        !            85:
        !            86: int loadFile(HWND hnd, char *uname) {
        !            87:     char *s="load(@);\n";
        !            88:     int i;
        !            89:     for (i=0; i<strlen(s); i++) {
        !            90:         if (s[i] != '@') PostMessage(hnd,WM_CHAR,s[i],1);
        !            91:         else {
        !            92:             PostMessage(hnd,WM_CHAR,'"',1);
        !            93:             sendFileName(hnd,uname);
        !            94:             if (!PostMessage(hnd,WM_CHAR,'"',1)) {
        !            95:                 MessageBox(NULL,TEXT("asirgui is not running."),TEXT("ERROR in cmdasir.c"),MB_OK);
        !            96:                 return -1;
        !            97:             }
        !            98:         }
        !            99:     }
        !           100:     return 0;
        !           101: }
        !           102:
        !           103: int terminateAsir(HWND hnd) {
        !           104:     int i;
        !           105:     char *s="quit;\n";
        !           106:     for (i=0; i<strlen(s); i++) {
        !           107:         if (!PostMessage(hnd,WM_CHAR,s[i],1)) {
        !           108:             MessageBox(NULL,TEXT("asirgui is not running."),TEXT("ERROR in cmdasir.c"),MB_OK);
        !           109:             return -1;
        !           110:         }
        !           111:     }
        !           112:     return 0;
        !           113: }
        !           114:
        !           115: char *winname2uxname(char wname[]) {
        !           116:   int i;
        !           117:   char *uname;
        !           118:   uname = (char *) malloc(strlen(wname)+1);
        !           119:   for (i=0; i<strlen(wname); i++) {
        !           120:     if (wname[i] == '\\') uname[i] = '/';
        !           121:     else uname[i] = wname[i];
        !           122:     uname[i+1] = 0;
        !           123:   }
        !           124:   return(uname);
        !           125: }
        !           126:
        !           127: #if 0
        !           128: int hasTemp(char *s) {
        !           129:   int i;
        !           130:   size_t n=strlen(s);
        !           131:   for (i=0; i<n-3; i++) {
        !           132:     if (strncmp(&(s[i]),"Temp",4)==0) return(1);
        !           133:   }
        !           134:   return(0);
        !           135: }
        !           136: #endif
        !           137:
        !           138: int hasTemp(char *s) {
        !           139:        return strstr(s, "Temp")!=NULL;
        !           140: }
        !           141:
        !           142: FILE *findAsirHandler() {
        !           143:   int i;
        !           144:   FILE *hnd = NULL;
        !           145:   char msg[1024];
        !           146:   char path1[1024];
        !           147:   char path0[1024];
        !           148:   char *path[] = { NULL, NULL, "c:/Program files/asir/bin/asirgui.hnd", "c:/Program files (x86)/asir/bin/asirgui.hnd", "c:/asir/bin/asirgui.hnd" };
        !           149:   sprintf(path0,"%s/asirgui.hnd",(char *)getenv("TEMP"));
        !           150:   path[0]=winname2uxname(path0);
        !           151:   if (getenv("ASIR_ROOTDIR") != NULL) {
        !           152:     sprintf(path1,"%s/bin/asirgui.hnd",(char *)getenv("ASIR_ROOTDIR"));
        !           153:     path[1]=winname2uxname(path1);
        !           154:   }else{
        !           155:     sprintf(path1,"%s/Desktop/asir/bin/asirgui.hnd",(char *)getenv("HOMEPATH"));
        !           156:     path[1]=winname2uxname(path1);
        !           157:   }
        !           158:   for(i=0; i<sizeof(path); i++) {
        !           159:     if(path[i]!=NULL) {
        !           160:       hnd = fopen(path[i],"r");
        !           161:       if (hnd != NULL) return(hnd);
        !           162:     }
        !           163:   }
        !           164:   sprintf(msg,"asir handler is not found.");
        !           165:   MessageBox(NULL,TEXT(msg),TEXT("ERROR in cmdasir.c"),MB_OK);
        !           166:   return NULL;
        !           167: }
        !           168: #if 0
        !           169: int sendFileName_ascii(HWND hnd,char uname[]) {
        !           170:     int j;
        !           171:     for (j=0; j<strlen(uname);j++) PostMessage(hnd,WM_CHAR,uname[j],1);
        !           172: }
        !           173: #endif
        !           174: int sendFileName(HWND hnd,char uname[]) {
        !           175:     size_t len=strlen(uname)+1;
        !           176:     HGLOBAL hMem;
        !           177:     LPTSTR pMem;
        !           178:     if (!OpenClipboard(NULL) ) return 1;
        !           179:     hMem = GlobalAlloc(GMEM_FIXED,len);
        !           180:     pMem = (LPTSTR)hMem;
        !           181:     lstrcpy(pMem,(LPCTSTR)uname);
        !           182:     EmptyClipboard();
        !           183:     SetClipboardData(CF_TEXT,hMem);
        !           184:     CloseClipboard();
        !           185:        if (!PostMessage(hnd,WM_CHAR,0x19,1)) { /* 0x19 ctrl-Y, ctrl-V 0x16 */
        !           186:       MessageBox(NULL,TEXT("asirgui is not running."),TEXT("ERROR in cmdasir.c"),MB_OK);
        !           187:          return -1;
        !           188:        }
        !           189:        return 0;
        !           190: }
        !           191:
        !           192: int pasteFile(HWND hnd, char *uname) {
        !           193:     FILE *fp;
        !           194:        char *s=NULL;
        !           195:        char *sold=NULL;
        !           196:        int size=1024;
        !           197:        int c,i;
        !           198:        fp = fopen(uname,"r");
        !           199:        if (fp == NULL) {
        !           200:                MessageBox(NULL,TEXT("File is not found: "),TEXT(uname),MB_OK);
        !           201:                return -1;
        !           202:        }
        !           203:        s = (char *)malloc(size+1);
        !           204:        i = 0;
        !           205:        while ((c=fgetc(fp)) != EOF) {
        !           206:                s[i] = c; s[i+1]=0;
        !           207:                if (i >= size-1) {
        !           208:                        sold = s;
        !           209:                        size = size*2;
        !           210:                        s = (char*)malloc(size+1);
        !           211:                        strcpy(s,sold);
        !           212:                        free(sold);
        !           213:                }
        !           214:                i++;
        !           215:        }
        !           216:        sendFileName(hnd,s);
        !           217:        free(s);
        !           218:        PostMessage(hnd,WM_CHAR,0xa,1);
        !           219:        return 0;
        !           220: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>