1 1.4 takemura /* $NetBSD: preference.c,v 1.4 2000/08/29 15:10:20 takemura Exp $ */ 2 1.2 takemura 3 1.2 takemura /*- 4 1.2 takemura * Copyright (c) 1999 Shin Takemura. 5 1.2 takemura * All rights reserved. 6 1.2 takemura * 7 1.2 takemura * This software is part of the PocketBSD. 8 1.2 takemura * 9 1.2 takemura * Redistribution and use in source and binary forms, with or without 10 1.2 takemura * modification, are permitted provided that the following conditions 11 1.2 takemura * are met: 12 1.2 takemura * 1. Redistributions of source code must retain the above copyright 13 1.2 takemura * notice, this list of conditions and the following disclaimer. 14 1.2 takemura * 2. Redistributions in binary form must reproduce the above copyright 15 1.2 takemura * notice, this list of conditions and the following disclaimer in the 16 1.2 takemura * documentation and/or other materials provided with the distribution. 17 1.2 takemura * 3. All advertising materials mentioning features or use of this software 18 1.2 takemura * must display the following acknowledgement: 19 1.2 takemura * This product includes software developed by the PocketBSD project 20 1.2 takemura * and its contributors. 21 1.2 takemura * 4. Neither the name of the project nor the names of its contributors 22 1.2 takemura * may be used to endorse or promote products derived from this software 23 1.2 takemura * without specific prior written permission. 24 1.2 takemura * 25 1.2 takemura * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 26 1.2 takemura * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27 1.2 takemura * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 28 1.2 takemura * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 29 1.2 takemura * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 30 1.2 takemura * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 31 1.2 takemura * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32 1.2 takemura * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33 1.2 takemura * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34 1.2 takemura * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35 1.2 takemura * SUCH DAMAGE. 36 1.2 takemura * 37 1.2 takemura */ 38 1.2 takemura #include <pbsdboot.h> 39 1.2 takemura #include <commctrl.h> 40 1.2 takemura #include <res/resource.h> 41 1.2 takemura 42 1.4 takemura 43 1.2 takemura struct preference_s pref; 44 1.2 takemura TCHAR* where_pref_load_from = NULL; 45 1.2 takemura static TCHAR filenamebuf[1024]; 46 1.2 takemura 47 1.4 takemura 48 1.4 takemura #define SETTING_IDX 1 49 1.4 takemura #define FB_TYPE 2 50 1.4 takemura #define FB_WIDTH 3 51 1.4 takemura #define FB_HEIGHT 4 52 1.4 takemura #define FB_LINEBYTES 5 53 1.4 takemura #define BOOT_TIME 6 54 1.4 takemura #define FB_ADDR 7 55 1.4 takemura #define PLATID_CPU 8 56 1.4 takemura #define PLATID_MACHINE 9 57 1.4 takemura #define SETTING_NAME 10 58 1.4 takemura #define KERNEL_NAME 11 59 1.4 takemura #define OPTIONS 12 60 1.4 takemura #define CHECK_LAST_CHANCE 13 61 1.4 takemura #define LOAD_DEBUG_INFO 14 62 1.4 takemura #define SERIAL_PORT 15 63 1.4 takemura #define REVERSE_VIDEO 16 64 1.4 takemura #define AUTOBOOT 17 65 1.4 takemura 66 1.4 takemura #define NOFID 18 67 1.4 takemura 68 1.4 takemura 69 1.4 takemura TCHAR *id_table[] = { 70 1.4 takemura 0, 71 1.4 takemura TEXT("setting_idx"), 72 1.4 takemura TEXT("fb_type"), 73 1.4 takemura TEXT("fb_width"), 74 1.4 takemura TEXT("fb_height"), 75 1.4 takemura TEXT("fb_linebytes"), 76 1.4 takemura TEXT("boot_time"), 77 1.4 takemura TEXT("fb_addr"), 78 1.4 takemura TEXT("platid_cpu"), 79 1.4 takemura TEXT("platid_machine"), 80 1.4 takemura TEXT("setting_name"), 81 1.4 takemura TEXT("kernel_name"), 82 1.4 takemura TEXT("options"), 83 1.4 takemura TEXT("check_last_chance"), 84 1.4 takemura TEXT("load_debug_info"), 85 1.4 takemura TEXT("serial_port"), 86 1.4 takemura TEXT("reverse_video"), 87 1.4 takemura TEXT("autoboot"), 88 1.4 takemura }; 89 1.4 takemura 90 1.4 takemura 91 1.4 takemura 92 1.2 takemura void 93 1.2 takemura pref_init(struct preference_s* pref) 94 1.2 takemura { 95 1.2 takemura memset(pref, 0, sizeof(*pref)); 96 1.2 takemura } 97 1.2 takemura 98 1.2 takemura 99 1.4 takemura /* 100 1.4 takemura argument file is handle that was already opened . 101 1.4 takemura if read is faile , this function will "not" close this handle . 102 1.4 takemura return 0 if error . if end of file , return -1 103 1.4 takemura */ 104 1.4 takemura int read1byte(HANDLE file,char *c){ 105 1.4 takemura DWORD n; 106 1.4 takemura if(!ReadFile(file,c,sizeof(char),&n,NULL)){ 107 1.4 takemura msg_printf(MSG_ERROR, TEXT("pref_load()"), 108 1.4 takemura TEXT("ReadFile(): error=%d"), GetLastError()); 109 1.4 takemura debug_printf(TEXT("ReadFile(): error=%d\r"), GetLastError()); 110 1.4 takemura 111 1.4 takemura return 0; 112 1.4 takemura } 113 1.4 takemura if (n != sizeof(char)) { 114 1.4 takemura if( n == 0){ 115 1.4 takemura return (-1); 116 1.4 takemura } 117 1.4 takemura msg_printf(MSG_ERROR, TEXT("pref_load()"), 118 1.4 takemura TEXT("ReadFile(): read %d bytes"), n); 119 1.4 takemura debug_printf(TEXT("ReadFile(): read %d bytes\r"), n); 120 1.4 takemura 121 1.4 takemura return 0; 122 1.4 takemura } 123 1.4 takemura return 1; 124 1.4 takemura } 125 1.4 takemura 126 1.4 takemura /* 127 1.4 takemura argument file is handle that was already opened . 128 1.4 takemura if write is faile, this function will "not" close this handle . 129 1.4 takemura return 0 if error . write one line of string . 130 1.4 takemura */ 131 1.4 takemura int write1string(HANDLE file,char *string){ 132 1.4 takemura DWORD n; 133 1.4 takemura if(!WriteFile(file,string,sizeof(char)*strlen(string),&n,NULL)){ 134 1.4 takemura msg_printf(MSG_ERROR, TEXT("pref_write()"), 135 1.4 takemura TEXT("WriteFile(): error=%d"), GetLastError()); 136 1.4 takemura debug_printf(TEXT("WriteFile(): error=%d\n"), GetLastError()); 137 1.4 takemura 138 1.4 takemura return 0; 139 1.4 takemura } 140 1.4 takemura if (n != sizeof(char)*strlen(string)) { 141 1.4 takemura msg_printf(MSG_ERROR, TEXT("pref_write()"), 142 1.4 takemura TEXT("WriteFile(): write %d bytes"), n); 143 1.4 takemura debug_printf(TEXT("WriteFile(): write %d bytes\n"), n); 144 1.4 takemura 145 1.4 takemura return (0); 146 1.4 takemura } 147 1.4 takemura 148 1.4 takemura return 1; 149 1.4 takemura } 150 1.4 takemura 151 1.2 takemura void 152 1.2 takemura pref_dump(struct preference_s* pref) 153 1.2 takemura { 154 1.2 takemura debug_printf(TEXT(" kernel_name: %s\n"), pref->kernel_name); 155 1.2 takemura debug_printf(TEXT(" options: %s\n"), pref->options); 156 1.2 takemura debug_printf(TEXT(" user def name: %s\n"), pref->setting_name); 157 1.2 takemura debug_printf(TEXT(" setting index: %d\n"), pref->setting_idx); 158 1.2 takemura debug_printf(TEXT(" type: %d\n"), pref->fb_type); 159 1.2 takemura debug_printf(TEXT(" width: %d\n"), pref->fb_width); 160 1.2 takemura debug_printf(TEXT(" height: %d\n"), pref->fb_height); 161 1.2 takemura debug_printf(TEXT(" bytes/line: %d\n"), pref->fb_linebytes); 162 1.2 takemura debug_printf(TEXT(" addr: %d\n"), pref->fb_addr); 163 1.2 takemura debug_printf(TEXT(" cpu: %08lx\n"), pref->platid_cpu); 164 1.2 takemura debug_printf(TEXT(" machine: %08lx\n"), pref->platid_machine); 165 1.2 takemura debug_printf(TEXT(" last chance: %S\n"), pref->check_last_chance ? 166 1.2 takemura "TRUE" : "FALSE"); 167 1.2 takemura debug_printf(TEXT("load debug info: %S\n"), pref->load_debug_info ? 168 1.2 takemura "TRUE" : "FALSE"); 169 1.2 takemura debug_printf(TEXT(" serial port: %S\n"), pref->serial_port ? 170 1.2 takemura "ON" : "OFF"); 171 1.2 takemura } 172 1.2 takemura 173 1.2 takemura 174 1.4 takemura 175 1.4 takemura /* To Do . modify this function*/ 176 1.2 takemura int 177 1.2 takemura pref_read(TCHAR* filename, struct preference_s* pref) 178 1.2 takemura { 179 1.2 takemura HANDLE file; 180 1.4 takemura DWORD length; 181 1.4 takemura static struct preference_s buf; 182 1.4 takemura char tempbuf[1024]; 183 1.4 takemura TCHAR unidata[1024]; 184 1.4 takemura TCHAR identif[1024]; 185 1.4 takemura char c; 186 1.4 takemura int i,flag,d; 187 1.4 takemura int result;/* count of loading pref item */ 188 1.4 takemura 189 1.4 takemura 190 1.4 takemura file = CreateFile( 191 1.4 takemura filename, /* file name */ 192 1.4 takemura GENERIC_READ, /* access (read-write) mode */ 193 1.4 takemura FILE_SHARE_READ,/* share mode */ 194 1.4 takemura NULL, /* pointer to security attributes */ 195 1.4 takemura OPEN_EXISTING, /* how to create */ 196 1.4 takemura FILE_ATTRIBUTE_NORMAL, /* file attributes*/ 197 1.4 takemura NULL /* handle to file with attributes to */ 198 1.4 takemura ); 199 1.4 takemura 200 1.2 takemura if (file == INVALID_HANDLE_VALUE) { 201 1.2 takemura return (-1); 202 1.2 takemura } 203 1.4 takemura 204 1.4 takemura 205 1.4 takemura 206 1.4 takemura 207 1.4 takemura flag = 1; 208 1.4 takemura result = 0; 209 1.4 takemura while(flag){ 210 1.4 takemura i = 0; 211 1.4 takemura d = read1byte(file,&c); 212 1.4 takemura if( d <=0){ 213 1.4 takemura if(d == -1){ 214 1.4 takemura flag = 0; 215 1.4 takemura break; 216 1.4 takemura } 217 1.4 takemura else 218 1.4 takemura { 219 1.4 takemura CloseHandle(file); 220 1.4 takemura return (-1); 221 1.4 takemura } 222 1.4 takemura } 223 1.4 takemura 224 1.2 takemura 225 1.4 takemura while(c != ':' && c != '\r' && c!= '\n'){ 226 1.4 takemura tempbuf[i] = c; 227 1.4 takemura d = read1byte(file,&c); 228 1.4 takemura if( d <=0){ 229 1.4 takemura if(d == -1){ 230 1.4 takemura flag = 0; 231 1.4 takemura break; 232 1.4 takemura } 233 1.4 takemura else 234 1.4 takemura { 235 1.4 takemura CloseHandle(file); 236 1.4 takemura return (-1); 237 1.4 takemura } 238 1.4 takemura } 239 1.4 takemura i++; 240 1.4 takemura } 241 1.4 takemura if(c == ':'){ 242 1.4 takemura 243 1.2 takemura 244 1.4 takemura tempbuf[i] = '\0'; 245 1.4 takemura length = MultiByteToWideChar(CP_ACP,0,tempbuf,-1,identif,0); 246 1.4 takemura MultiByteToWideChar(CP_ACP,0,tempbuf,-1,identif,length); 247 1.4 takemura 248 1.4 takemura i = 0; 249 1.4 takemura d = read1byte(file,&c); 250 1.4 takemura flag = 1; 251 1.4 takemura while(c != '\r' && c != '\n' && flag){/* get unidata */ 252 1.4 takemura if(d <= 0){ 253 1.4 takemura if(d == -1){ 254 1.4 takemura flag = 0;/* though needless ... */ 255 1.4 takemura break; 256 1.4 takemura } 257 1.4 takemura else{ 258 1.4 takemura CloseHandle(file); 259 1.4 takemura return -1; 260 1.4 takemura } 261 1.4 takemura } 262 1.4 takemura tempbuf[i] = c; 263 1.4 takemura d = read1byte(file,&c); 264 1.4 takemura i++; 265 1.4 takemura 266 1.4 takemura } 267 1.4 takemura if(c == '\r'){/* skip \n */ 268 1.4 takemura read1byte(file,&c); 269 1.4 takemura } 270 1.4 takemura tempbuf[i] = '\0'; 271 1.4 takemura length = MultiByteToWideChar(CP_ACP,0,tempbuf,-1,unidata,0); 272 1.4 takemura MultiByteToWideChar(CP_ACP,0,tempbuf,-1,unidata,length); 273 1.4 takemura 274 1.4 takemura for(i = 1; i < NOFID;i++){ 275 1.4 takemura if(wcscmp(identif,id_table[i])==0){ 276 1.4 takemura break; 277 1.4 takemura } 278 1.4 takemura } 279 1.4 takemura switch(i){ 280 1.4 takemura case SETTING_IDX: 281 1.4 takemura d = _wtoi(unidata); 282 1.4 takemura buf.setting_idx = d; 283 1.4 takemura result++; 284 1.4 takemura break; 285 1.4 takemura case FB_TYPE: 286 1.4 takemura d = _wtoi(unidata); 287 1.4 takemura buf.fb_type = d; 288 1.4 takemura result++; 289 1.4 takemura break; 290 1.4 takemura case FB_WIDTH: 291 1.4 takemura d = _wtoi(unidata); 292 1.4 takemura buf.fb_width = d; 293 1.4 takemura result++; 294 1.4 takemura break; 295 1.4 takemura case FB_HEIGHT: 296 1.4 takemura d = _wtoi(unidata); 297 1.4 takemura buf.fb_height = d; 298 1.4 takemura result++; 299 1.4 takemura break; 300 1.4 takemura case FB_LINEBYTES: 301 1.4 takemura d = _wtoi(unidata); 302 1.4 takemura buf.fb_linebytes = d; 303 1.4 takemura result++; 304 1.4 takemura break; 305 1.4 takemura case BOOT_TIME: 306 1.4 takemura d = _wtoi(unidata); 307 1.4 takemura buf.boot_time = d; 308 1.4 takemura result++; 309 1.4 takemura break; 310 1.4 takemura case FB_ADDR: 311 1.4 takemura d = _wtoi(unidata); 312 1.4 takemura buf.fb_addr = d; 313 1.4 takemura result++; 314 1.4 takemura break; 315 1.4 takemura case PLATID_CPU: 316 1.4 takemura d = _wtoi(unidata); 317 1.4 takemura buf.platid_cpu = d; 318 1.4 takemura result++; 319 1.4 takemura break; 320 1.4 takemura case PLATID_MACHINE: 321 1.4 takemura d = _wtoi(unidata); 322 1.4 takemura buf.platid_machine = d; 323 1.4 takemura result++; 324 1.4 takemura break; 325 1.4 takemura case SETTING_NAME: 326 1.4 takemura wcscpy(buf.setting_name,unidata); 327 1.4 takemura result++; 328 1.4 takemura break; 329 1.4 takemura case KERNEL_NAME: 330 1.4 takemura wcscpy(buf.kernel_name,unidata); 331 1.4 takemura result++; 332 1.4 takemura break; 333 1.4 takemura case OPTIONS: 334 1.4 takemura wcscpy(buf.options,unidata); 335 1.4 takemura result++; 336 1.4 takemura break; 337 1.4 takemura case CHECK_LAST_CHANCE: 338 1.4 takemura if(wcscmp(unidata,TEXT("t")) == 0){ 339 1.4 takemura buf.check_last_chance = TRUE; 340 1.4 takemura } 341 1.4 takemura else{ 342 1.4 takemura buf.check_last_chance = FALSE; 343 1.4 takemura } 344 1.4 takemura result++; 345 1.4 takemura break; 346 1.4 takemura case LOAD_DEBUG_INFO: 347 1.4 takemura if(wcscmp(unidata,TEXT("t")) == 0){ 348 1.4 takemura buf.load_debug_info = TRUE; 349 1.4 takemura } 350 1.4 takemura else{ 351 1.4 takemura buf.load_debug_info = FALSE; 352 1.4 takemura } 353 1.4 takemura result++; 354 1.4 takemura break; 355 1.4 takemura case SERIAL_PORT: 356 1.4 takemura if(wcscmp(unidata,TEXT("t")) == 0){ 357 1.4 takemura buf.serial_port = TRUE; 358 1.4 takemura } 359 1.4 takemura else{ 360 1.4 takemura buf.serial_port = FALSE; 361 1.4 takemura } 362 1.4 takemura result++; 363 1.4 takemura break; 364 1.4 takemura case REVERSE_VIDEO: 365 1.4 takemura if(wcscmp(unidata,TEXT("t")) == 0){ 366 1.4 takemura buf.reverse_video = TRUE; 367 1.4 takemura } 368 1.4 takemura else{ 369 1.4 takemura buf.reverse_video = FALSE; 370 1.4 takemura } 371 1.4 takemura result++; 372 1.4 takemura break; 373 1.4 takemura case AUTOBOOT: 374 1.4 takemura if(wcscmp(unidata,TEXT("t")) == 0){ 375 1.4 takemura buf.autoboot = TRUE; 376 1.4 takemura } 377 1.4 takemura else{ 378 1.4 takemura buf.autoboot = FALSE; 379 1.4 takemura } 380 1.4 takemura result++; 381 1.4 takemura break; 382 1.4 takemura default: 383 1.4 takemura break; 384 1.4 takemura } 385 1.4 takemura } 386 1.2 takemura } 387 1.4 takemura 388 1.4 takemura 389 1.2 takemura 390 1.4 takemura 391 1.2 takemura CloseHandle(file); 392 1.2 takemura 393 1.4 takemura #if 0 394 1.4 takemura /* shortage of item is not error */ 395 1.4 takemura if(result != NOFID -1){ 396 1.4 takemura return -1;/* data is shortage */ 397 1.4 takemura } 398 1.4 takemura #endif 399 1.4 takemura 400 1.2 takemura *pref = buf; 401 1.2 takemura 402 1.2 takemura return (0); 403 1.2 takemura } 404 1.2 takemura 405 1.2 takemura 406 1.4 takemura 407 1.2 takemura int 408 1.3 takemura pref_load(struct path_s load_path[], int pathlen) 409 1.2 takemura { 410 1.2 takemura int i; 411 1.2 takemura 412 1.2 takemura where_pref_load_from = NULL; 413 1.2 takemura for (i = 0; i < pathlen; i++) { 414 1.2 takemura wsprintf(filenamebuf, TEXT("%s%s"), 415 1.3 takemura load_path[i].name, PREFNAME); 416 1.2 takemura debug_printf(TEXT("pref_load: try to '%s'\n"), filenamebuf); 417 1.4 takemura 418 1.2 takemura if (pref_read(filenamebuf, &pref) == 0) { 419 1.2 takemura debug_printf(TEXT("pref_load: succeded, '%s'.\n"), 420 1.2 takemura filenamebuf); 421 1.2 takemura pref_dump(&pref); 422 1.2 takemura where_pref_load_from = filenamebuf; 423 1.2 takemura return (0); 424 1.2 takemura } 425 1.2 takemura } 426 1.2 takemura 427 1.2 takemura return (-1); 428 1.2 takemura } 429 1.2 takemura 430 1.2 takemura 431 1.2 takemura int 432 1.3 takemura pref_save(struct path_s load_path[], int pathlen) 433 1.3 takemura { 434 1.3 takemura int i; 435 1.3 takemura 436 1.3 takemura if (where_pref_load_from) { 437 1.3 takemura if (pref_write(where_pref_load_from, &pref) != 0) { 438 1.3 takemura msg_printf(MSG_ERROR, TEXT("Error()"), 439 1.3 takemura TEXT("Can't write %s"), where_pref_load_from); 440 1.3 takemura return -1; 441 1.3 takemura } 442 1.3 takemura return 0; 443 1.3 takemura } 444 1.3 takemura for (i = 0; i < pathlen; i++) { 445 1.3 takemura if (!(load_path[i].flags & PATH_SAVE)) { 446 1.3 takemura continue; 447 1.3 takemura } 448 1.3 takemura wsprintf(filenamebuf, TEXT("%s%s"), 449 1.3 takemura load_path[i].name, PREFNAME); 450 1.3 takemura debug_printf(TEXT("pref_save: try to '%s'\n"), filenamebuf); 451 1.3 takemura if (pref_write(filenamebuf, &pref) == 0) { 452 1.3 takemura debug_printf(TEXT("pref_write: succeded, '%s'.\n"), 453 1.3 takemura filenamebuf); 454 1.3 takemura return (0); 455 1.3 takemura } 456 1.3 takemura } 457 1.3 takemura 458 1.3 takemura msg_printf(MSG_ERROR, TEXT("Error()"), 459 1.3 takemura TEXT("Can't write %s"), PREFNAME); 460 1.3 takemura 461 1.3 takemura return (-1); 462 1.3 takemura } 463 1.3 takemura 464 1.3 takemura 465 1.3 takemura int 466 1.2 takemura pref_write(TCHAR* filename, struct preference_s* buf) 467 1.2 takemura { 468 1.2 takemura HANDLE file; 469 1.4 takemura char tempbuf[1024]; 470 1.4 takemura TCHAR unibuf[1024]; 471 1.4 takemura DWORD length; 472 1.4 takemura 473 1.2 takemura 474 1.2 takemura debug_printf(TEXT("pref_write('%s').\n"), filename); 475 1.2 takemura pref_dump(&pref); 476 1.2 takemura 477 1.2 takemura file = CreateFile( 478 1.2 takemura filename, /* file name */ 479 1.2 takemura GENERIC_WRITE, /* access (read-write) mode */ 480 1.2 takemura FILE_SHARE_WRITE,/* share mode */ 481 1.2 takemura NULL, /* pointer to security attributes */ 482 1.2 takemura CREATE_ALWAYS, /* how to create */ 483 1.2 takemura FILE_ATTRIBUTE_NORMAL, /* file attributes*/ 484 1.2 takemura NULL /* handle to file with attributes to */ 485 1.2 takemura ); 486 1.2 takemura 487 1.2 takemura if (file == INVALID_HANDLE_VALUE) { 488 1.2 takemura debug_printf(TEXT("CreateFile(): error=%d\n"), GetLastError()); 489 1.2 takemura return (-1); 490 1.2 takemura } 491 1.2 takemura 492 1.4 takemura 493 1.4 takemura wsprintf(unibuf,TEXT("setting_idx:%d\r\n"),buf->setting_idx); 494 1.4 takemura debug_printf(TEXT("setting_idx,tempbuf=%s"),unibuf); 495 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 496 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 497 1.4 takemura if(!write1string(file,tempbuf)){ 498 1.4 takemura CloseHandle(file); 499 1.4 takemura return (-1); 500 1.4 takemura } 501 1.4 takemura 502 1.4 takemura 503 1.4 takemura wsprintf(unibuf,TEXT("fb_type:%d\r\n"),buf->fb_type); 504 1.4 takemura debug_printf(TEXT("fb_type,tempbuf=%s,"),unibuf); 505 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 506 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 507 1.4 takemura if(!write1string(file,tempbuf)){ 508 1.4 takemura CloseHandle(file); 509 1.4 takemura return (-1); 510 1.4 takemura } 511 1.4 takemura 512 1.4 takemura 513 1.4 takemura wsprintf(unibuf,TEXT("fb_width:%d\r\n"),buf->fb_width); 514 1.4 takemura debug_printf(TEXT("fb_width,tempbuf=%s"),unibuf); 515 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 516 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 517 1.4 takemura if(!write1string(file,tempbuf)){ 518 1.4 takemura CloseHandle(file); 519 1.4 takemura return (-1); 520 1.4 takemura } 521 1.4 takemura 522 1.4 takemura 523 1.4 takemura 524 1.4 takemura wsprintf(unibuf,TEXT("fb_height:%d\r\n"),buf->fb_height); 525 1.4 takemura debug_printf(TEXT("fb_height,tempbuf=%s"),unibuf); 526 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 527 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 528 1.4 takemura if(!write1string(file,tempbuf)){ 529 1.4 takemura CloseHandle(file); 530 1.4 takemura return (-1); 531 1.4 takemura } 532 1.4 takemura 533 1.4 takemura 534 1.4 takemura 535 1.4 takemura wsprintf(unibuf,TEXT("fb_linebytes:%d\r\n"),buf->fb_linebytes); 536 1.4 takemura debug_printf(TEXT("fb_linebytes,tempbuf=%s"),unibuf); 537 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 538 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 539 1.4 takemura if(!write1string(file,tempbuf)){ 540 1.4 takemura CloseHandle(file); 541 1.4 takemura return (-1); 542 1.4 takemura } 543 1.4 takemura 544 1.4 takemura 545 1.4 takemura wsprintf(unibuf,TEXT("boot_time:%d\r\n"),buf->boot_time); 546 1.4 takemura debug_printf(TEXT("boot_time,tempbuf=%s\n"),unibuf); 547 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 548 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 549 1.4 takemura if(!write1string(file,tempbuf)){ 550 1.4 takemura CloseHandle(file); 551 1.4 takemura return (-1); 552 1.4 takemura } 553 1.4 takemura 554 1.4 takemura wsprintf(unibuf,TEXT("fb_addr:%d\r\n"),buf->fb_addr); 555 1.4 takemura debug_printf(TEXT("fb_addr,tempbuf=%s"),unibuf); 556 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 557 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 558 1.4 takemura if(!write1string(file,tempbuf)){ 559 1.4 takemura CloseHandle(file); 560 1.4 takemura return (-1); 561 1.4 takemura } 562 1.4 takemura 563 1.4 takemura 564 1.4 takemura 565 1.4 takemura wsprintf(unibuf,TEXT("platid_cpu:%d\r\n"),buf->platid_cpu); 566 1.4 takemura debug_printf(TEXT("platid_cpu,tempbuf=%s"),unibuf); 567 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 568 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 569 1.4 takemura if(!write1string(file,tempbuf)){ 570 1.4 takemura CloseHandle(file); 571 1.4 takemura return (-1); 572 1.4 takemura } 573 1.4 takemura 574 1.4 takemura 575 1.4 takemura wsprintf(unibuf,TEXT("platid_machine:%d\r\n"),buf->platid_machine); 576 1.4 takemura debug_printf(TEXT("platid_machine,tempbuf=%s"),unibuf); 577 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 578 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 579 1.4 takemura if(!write1string(file,tempbuf)){ 580 1.4 takemura CloseHandle(file); 581 1.4 takemura return (-1); 582 1.4 takemura } 583 1.4 takemura 584 1.4 takemura 585 1.4 takemura 586 1.4 takemura wsprintf(unibuf,TEXT("setting_name:%s\r\n"),buf->setting_name); 587 1.4 takemura debug_printf(TEXT("setting_name,unibuf=%s,wcslen=%d"),unibuf, 588 1.4 takemura wcslen(unibuf)); 589 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 590 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 591 1.4 takemura 592 1.4 takemura if(!write1string(file,tempbuf)){ 593 1.4 takemura CloseHandle(file); 594 1.4 takemura return (-1); 595 1.4 takemura } 596 1.4 takemura 597 1.4 takemura 598 1.4 takemura 599 1.4 takemura wsprintf(unibuf,TEXT("kernel_name:%s\r\n"),buf->kernel_name); 600 1.4 takemura debug_printf(TEXT("kernel_name,unibuf=%s,wcslen=%d"),unibuf, 601 1.4 takemura wcslen(unibuf)); 602 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 603 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 604 1.4 takemura if(!write1string(file,tempbuf)){ 605 1.4 takemura CloseHandle(file); 606 1.4 takemura return (-1); 607 1.4 takemura } 608 1.4 takemura 609 1.4 takemura 610 1.4 takemura 611 1.4 takemura wsprintf(unibuf,TEXT("options:%s\r\n"),buf->options); 612 1.4 takemura debug_printf(TEXT("options,unibuf=%s,wcslen=%d"),unibuf, 613 1.4 takemura wcslen(unibuf)); 614 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 615 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 616 1.4 takemura if(!write1string(file,tempbuf)){ 617 1.4 takemura CloseHandle(file); 618 1.4 takemura return (-1); 619 1.4 takemura } 620 1.4 takemura 621 1.4 takemura 622 1.4 takemura if(buf->check_last_chance){ 623 1.4 takemura wsprintf(unibuf,TEXT("check_last_chance:t\r\n")); 624 1.4 takemura } 625 1.4 takemura else{ 626 1.4 takemura wsprintf(unibuf,TEXT("check_last_chance:n\r\n")); 627 1.4 takemura } 628 1.4 takemura 629 1.4 takemura 630 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 631 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 632 1.4 takemura if(!write1string(file,tempbuf)){ 633 1.4 takemura CloseHandle(file); 634 1.4 takemura return (-1); 635 1.4 takemura } 636 1.4 takemura 637 1.4 takemura 638 1.4 takemura 639 1.4 takemura 640 1.4 takemura if(buf->load_debug_info){ 641 1.4 takemura wsprintf(unibuf,TEXT("load_debug_info:t\r\n")); 642 1.4 takemura } 643 1.4 takemura else{ 644 1.4 takemura wsprintf(unibuf,TEXT("load_debug_info:n\r\n")); 645 1.4 takemura } 646 1.4 takemura 647 1.4 takemura 648 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 649 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 650 1.4 takemura 651 1.4 takemura 652 1.4 takemura if(!write1string(file,tempbuf)){ 653 1.4 takemura CloseHandle(file); 654 1.4 takemura return (-1); 655 1.4 takemura } 656 1.4 takemura 657 1.4 takemura 658 1.4 takemura 659 1.4 takemura if(buf->serial_port){ 660 1.4 takemura wsprintf(unibuf,TEXT("serial_port:t\r\n")); 661 1.4 takemura } 662 1.4 takemura else{ 663 1.4 takemura wsprintf(unibuf,TEXT("serial_port:n\r\n")); 664 1.4 takemura } 665 1.4 takemura 666 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 667 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 668 1.4 takemura 669 1.4 takemura if(!write1string(file,tempbuf)){ 670 1.4 takemura CloseHandle(file); 671 1.4 takemura return (-1); 672 1.4 takemura } 673 1.4 takemura 674 1.4 takemura 675 1.4 takemura 676 1.4 takemura if(buf->reverse_video){ 677 1.4 takemura wsprintf(unibuf,TEXT("reverse_video:t\r\n")); 678 1.4 takemura } 679 1.4 takemura else{ 680 1.4 takemura wsprintf(unibuf,TEXT("reverse_video:n\r\n")); 681 1.4 takemura } 682 1.4 takemura 683 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 684 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 685 1.4 takemura if(!write1string(file,tempbuf)){ 686 1.2 takemura CloseHandle(file); 687 1.2 takemura return (-1); 688 1.2 takemura } 689 1.2 takemura 690 1.4 takemura if(buf->autoboot){ 691 1.4 takemura wsprintf(unibuf,TEXT("autoboot:t\r\n")); 692 1.4 takemura } 693 1.4 takemura else{ 694 1.4 takemura wsprintf(unibuf,TEXT("autoboot:n\r\n")); 695 1.4 takemura } 696 1.4 takemura 697 1.4 takemura length = WideCharToMultiByte(CP_ACP,0,unibuf,-1,NULL,0,NULL,NULL); 698 1.4 takemura WideCharToMultiByte(CP_ACP,0,unibuf,-1,tempbuf,length,NULL,NULL); 699 1.4 takemura if(!write1string(file,tempbuf)){ 700 1.2 takemura CloseHandle(file); 701 1.2 takemura return (-1); 702 1.2 takemura } 703 1.2 takemura 704 1.2 takemura CloseHandle(file); 705 1.2 takemura return (0); 706 1.2 takemura } 707 1.2 takemura 708