[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

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>