[BACK]Return to io.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / windows / asir32gui

Annotation of OpenXM_contrib2/windows/asir32gui/io.c, Revision 1.1

1.1     ! noro        1: #include <windows.h>
        !             2: #include <stdlib.h>
        !             3: #include <stdio.h>
        !             4: #include <io.h>
        !             5: #include <fcntl.h>
        !             6: #include <process.h>
        !             7:
        !             8: #define ECGEN_KEYNAME "SoftWare\\Fujitsu\\FSEcParamGen\\V1.0L10"
        !             9: #define ASIR_KEYNAME "SoftWare\\Fujitsu\\Asir\\1999.03.31"
        !            10:
        !            11: #define MAXHIST 256
        !            12: #define HISTORY "history"
        !            13:
        !            14: static int use_current_dir;
        !            15:
        !            16: int asir_main_window;
        !            17: HANDLE hProc;
        !            18: static HANDLE hRead,hWrite;
        !            19: HANDLE hNotify,hNotify_Ack;
        !            20: static HANDLE hIntr,hIntr_Ack,hKill;
        !            21:
        !            22: void _setargv(void);
        !            23: void init_input_history();
        !            24: void write_input_history();
        !            25: void read_input_history();
        !            26: void init_hist(int);
        !            27: void read_hist(char *);
        !            28: void write_hist(char *);
        !            29: void show_window(int);
        !            30:
        !            31: BOOL get_rootdir(name,len,errmsg)
        !            32: char *name;
        !            33: int len;
        !            34: char *errmsg;
        !            35: {
        !            36:        LONG    ret;
        !            37:        HKEY    hOpenKey;
        !            38:        DWORD   Type,dw;
        !            39:        char    dir[BUFSIZ],message[BUFSIZ];
        !            40:        char    *slash;
        !            41:        int             ldir;
        !            42:        static  char rootdir[BUFSIZ];
        !            43:        static  int rootdir_is_initialized;
        !            44:
        !            45:        if ( rootdir_is_initialized ) {
        !            46:                strcpy(name,rootdir);
        !            47:                return TRUE;
        !            48:        }
        !            49:
        !            50:        ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, ECGEN_KEYNAME, 0,
        !            51:                KEY_QUERY_VALUE, &hOpenKey);
        !            52:        if ( ret != ERROR_SUCCESS )
        !            53:                ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE, ASIR_KEYNAME, 0,
        !            54:                        KEY_QUERY_VALUE, &hOpenKey);
        !            55:        if( ret != ERROR_SUCCESS ) {
        !            56:                GetCurrentDirectory(BUFSIZ,dir);
        !            57:                slash = strrchr(dir,'\\');
        !            58:                if ( slash )
        !            59:                        *slash = 0;
        !            60:                ldir = strlen(dir)+1;
        !            61:                if ( access("UseCurrentDir",0) >= 0 ) {
        !            62:                        use_current_dir = 1;
        !            63:                        strcpy(rootdir,dir);
        !            64:                        strcpy(name,dir);
        !            65:                        rootdir_is_initialized = 1;
        !            66:                        return TRUE;
        !            67:                }
        !            68:
        !            69:                sprintf(message,"May I register '%s' as the ASIR main directory?",dir);
        !            70:                if( IDNO == MessageBox(NULL,message,"Asir",
        !            71:                        MB_YESNO | MB_ICONEXCLAMATION | MB_DEFBUTTON2) ) {
        !            72:                        sprintf(errmsg,"The ASIR main directory was not set.");
        !            73:                        return FALSE;
        !            74:                }
        !            75:                if ( ret = RegCreateKeyEx(HKEY_LOCAL_MACHINE,ASIR_KEYNAME,0,
        !            76:                        REG_NONE,REG_OPTION_NON_VOLATILE,KEY_READ|KEY_WRITE,NULL,&hOpenKey,&dw) ) {
        !            77:                        FormatMessage(
        !            78:                                FORMAT_MESSAGE_FROM_SYSTEM |
        !            79:                                FORMAT_MESSAGE_IGNORE_INSERTS,
        !            80:                                NULL,
        !            81:                                ret,
        !            82:                                MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        !            83:                                (LPSTR)errmsg,
        !            84:                                BUFSIZ,
        !            85:                                NULL);
        !            86:                        return FALSE;
        !            87:                }
        !            88:                if ( ret = RegSetValueEx(hOpenKey,"Directory",NULL,REG_SZ,dir,ldir) ) {
        !            89:                        FormatMessage(
        !            90:                                FORMAT_MESSAGE_FROM_SYSTEM |
        !            91:                                FORMAT_MESSAGE_IGNORE_INSERTS,
        !            92:                                NULL,
        !            93:                                ret,
        !            94:                                MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        !            95:                                (LPSTR)errmsg,
        !            96:                                BUFSIZ,
        !            97:                                NULL);
        !            98:                        return FALSE;
        !            99:                }
        !           100:        }
        !           101:        RegQueryValueEx(hOpenKey, "Directory", NULL, &Type, name, &len);
        !           102:        RegCloseKey(hOpenKey);
        !           103:        strcpy(rootdir,name);
        !           104:        rootdir_is_initialized = 1;
        !           105:        return TRUE;
        !           106: }
        !           107:
        !           108: BOOL Init_IO(char *errmsg) {
        !           109:        int i;
        !           110:        char *av[BUFSIZ];
        !           111:        char AsirExe[BUFSIZ];
        !           112:        DWORD mypid,len;
        !           113:        HANDLE hR0,hW0,hR1,hW1;
        !           114:     SECURITY_ATTRIBUTES SecurityAttributes;
        !           115:        char remread[10],remwrite[10];
        !           116:        char notify[100],notify_ack[100],intr[100],intr_ack[100],kill[100];
        !           117:        char name[BUFSIZ],qname[BUFSIZ],home[BUFSIZ];
        !           118:
        !           119:        _setargv();
        !           120:        if ( !strcmp(__argv[0],"debuggui") ) {
        !           121:                asir_main_window = 0;
        !           122:                hRead = atoi(__argv[1]);
        !           123:                hWrite = atoi(__argv[2]);
        !           124:                hNotify = OpenEvent(EVENT_ALL_ACCESS|EVENT_MODIFY_STATE,TRUE,__argv[3]);
        !           125:                hNotify_Ack = OpenEvent(EVENT_ALL_ACCESS|EVENT_MODIFY_STATE,TRUE,__argv[4]);
        !           126:                hIntr = OpenEvent(EVENT_ALL_ACCESS|EVENT_MODIFY_STATE,TRUE,__argv[5]);
        !           127:                hIntr_Ack = OpenEvent(EVENT_ALL_ACCESS|EVENT_MODIFY_STATE,TRUE,__argv[6]);
        !           128:                hKill = OpenEvent(EVENT_ALL_ACCESS|EVENT_MODIFY_STATE,TRUE,__argv[7]);
        !           129:                return TRUE;
        !           130:        } else if ( !strcmp(__argv[0],"messagegui") ) {
        !           131:                asir_main_window = 0;
        !           132:                hRead = atoi(__argv[1]);
        !           133:                hWrite = atoi(__argv[2]);
        !           134:                hNotify = OpenEvent(EVENT_ALL_ACCESS|EVENT_MODIFY_STATE,TRUE,__argv[3]);
        !           135:                hNotify_Ack = OpenEvent(EVENT_ALL_ACCESS|EVENT_MODIFY_STATE,TRUE,__argv[4]);
        !           136:                return TRUE;
        !           137:        } else {
        !           138:                asir_main_window = 1;
        !           139:                mypid = GetCurrentProcessId();
        !           140:                sprintf(notify,"asir_notify_%d",mypid);
        !           141:                sprintf(notify_ack,"asir_notify_ack_%d",mypid);
        !           142:                sprintf(intr,"asir_intr_%d",mypid);
        !           143:                sprintf(intr_ack,"asir_intr_ack_%d",mypid);
        !           144:                sprintf(kill,"asir_kill_%d",mypid);
        !           145:                hNotify = CreateEvent(NULL,TRUE,FALSE,notify);
        !           146:                hNotify_Ack = CreateEvent(NULL,TRUE,FALSE,notify_ack);
        !           147:                hIntr = CreateEvent(NULL,TRUE,FALSE,intr);
        !           148:                hIntr_Ack = CreateEvent(NULL,TRUE,FALSE,intr_ack);
        !           149:                hKill = CreateEvent(NULL,TRUE,FALSE,kill);
        !           150:
        !           151:        SecurityAttributes.nLength = sizeof(SecurityAttributes);
        !           152:        SecurityAttributes.lpSecurityDescriptor = NULL;
        !           153:        SecurityAttributes.bInheritHandle = TRUE;
        !           154:        CreatePipe(&hR0, &hW0, &SecurityAttributes, 65536);
        !           155:        CreatePipe(&hR1, &hW1, &SecurityAttributes, 65536);
        !           156:
        !           157:                hRead = hR0;
        !           158:                hWrite = hW1;
        !           159:                sprintf(remread,"%d",(DWORD)hR1);
        !           160:                sprintf(remwrite,"%d",(DWORD)hW0);
        !           161:
        !           162:                len = sizeof(name);
        !           163:                if ( get_rootdir(name,len,errmsg) == FALSE ) {
        !           164:                        return FALSE;
        !           165:                }
        !           166:                sprintf(AsirExe,"%s\\bin\\engine.exe",name);
        !           167: //             sprintf(AsirExe,"c:\\home\\noro\\engine2000\\debug\\engine.exe");
        !           168:                if ( !getenv("HOME") ) {
        !           169:                        sprintf(home,"HOME=%s",name);
        !           170:                        _putenv(home);
        !           171:                }
        !           172:                av[0] = "asir";
        !           173:                av[1] = remread;
        !           174:                av[2] = remwrite;
        !           175:                av[3] = notify;
        !           176:                av[4] = notify_ack;
        !           177:                av[5] = intr;
        !           178:                av[6] = intr_ack;
        !           179:                av[7] = kill;
        !           180:                for ( i = 1; i < __argc; i++ )
        !           181:                        av[i+7] = __argv[i];
        !           182:                if ( use_current_dir )  {
        !           183:                        av[i+7] = "-rootdir"; i++;
        !           184:                        sprintf(qname,"\"%s\"",name);
        !           185:                        av[i+7] = qname; i++;
        !           186:                }
        !           187:                av[i+7] = NULL;
        !           188:                hProc = (HANDLE)_spawnv(_P_NOWAIT,AsirExe,av);
        !           189:                if ( hProc == (HANDLE)-1 ) {
        !           190:                        sprintf(errmsg,"%s is not found.",AsirExe);
        !           191:                        return FALSE;
        !           192:                }
        !           193:                return TRUE;
        !           194:        }
        !           195: }
        !           196:
        !           197: void put_line(char *buf) {
        !           198:        DWORD len;
        !           199:        int size = strlen(buf);
        !           200:        buf[size] = '\n';
        !           201:        buf[size+1] = 0;
        !           202:        size++;
        !           203:        WriteFile(hWrite,&size,sizeof(int),&len,NULL);
        !           204:        WriteFile(hWrite,buf,size,&len,NULL);
        !           205: }
        !           206:
        !           207: #define FROMASIR_EXIT 0
        !           208: #define FROMASIR_TEXT 1
        !           209: #define FROMASIR_HEAPSIZE 2
        !           210: #define FROMASIR_SHOW 3
        !           211: #define FROMASIR_HIDE 4
        !           212: #define FROMASIR_DEBUGPROC 5
        !           213:
        !           214: static char insert_buf[BUFSIZ*10];
        !           215: static int insert_buf_len = 0;
        !           216:
        !           217: int AsirHeapSize;
        !           218:
        !           219: void insert_to_theView(char *);
        !           220: void flush_log();
        !           221:
        !           222: void read_and_insert()
        !           223: {
        !           224:        DWORD len;
        !           225:        unsigned int cmdsize,cmd,size;
        !           226:
        !           227:        ReadFile(hRead,&cmdsize,sizeof(unsigned int),&len,NULL);
        !           228:        cmd = cmdsize>>16;
        !           229:        size = cmdsize&0xffff;
        !           230:
        !           231:        switch ( cmd ) {
        !           232:                case FROMASIR_EXIT:
        !           233:                        write_input_history();
        !           234:                        flush_log();
        !           235:                        PostMessage(NULL,WM_QUIT,0,0);
        !           236:                        break;
        !           237:                case FROMASIR_TEXT:
        !           238:                        if ( size ) {
        !           239:                                ReadFile(hRead,insert_buf,size,&len,NULL);
        !           240:                                insert_buf[size] = 0;
        !           241:                                insert_to_theView(insert_buf);
        !           242:                        }
        !           243:                        break;
        !           244:                case FROMASIR_HEAPSIZE:
        !           245:                        if ( size )
        !           246:                                ReadFile(hRead,&AsirHeapSize,size,&len,NULL);
        !           247:                        break;
        !           248:                case FROMASIR_SHOW:
        !           249:                        show_window(1);
        !           250:                        break;
        !           251:                case FROMASIR_HIDE:
        !           252:                        show_window(0);
        !           253:                        break;
        !           254:                default:
        !           255:                        if ( size )
        !           256:                                ReadFile(hRead,insert_buf,size,&len,NULL);
        !           257:                        break;
        !           258:        }
        !           259: }
        !           260:
        !           261: void init_input_history()
        !           262: {
        !           263:        init_hist(MAXHIST);
        !           264: }
        !           265:
        !           266: void write_input_history()
        !           267: {
        !           268:        write_hist(HISTORY);
        !           269: }
        !           270:
        !           271: void read_input_history()
        !           272: {
        !           273:        read_hist(HISTORY);
        !           274: }
        !           275:
        !           276: void send_intr() {
        !           277:        PulseEvent(hIntr);
        !           278: }
        !           279:
        !           280: void terminate_asir() {
        !           281:        PulseEvent(hKill);
        !           282: }

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