#! /usr/bin/awk -f # # Parse the DOSEmu configuration file. # BEGIN { SEPARATORS="[ \t]*" } function handle_multiline (type) { get_line() for (i = 2; i < num_fields && fields[i] != "}";) { write_entry(type tolower(fields[i++]), fields[i++]) } next } tolower($1) == "debug" { handle_multiline("debug_") next } tolower($1) == "dosbanner" { get_line() write_entry("dosbanner", fields[1]) next } tolower($1) == "timint" { get_line() write_entry("timint", fields[1]) next } tolower($1) == "keyboard" { handle_multiline("keyboard_") next } tolower($1) == "serial" { get_line() ++serial_count for (i = 2; i < num_fields && fields[i] != "}"; i++) { test = tolower(fields[i]) if (test == "com") { write_entry("serial_com_" serial_count, fields[++i]) continue } if (test == "device") { write_entry("serial_device_" serial_count, fields[++i]) continue } if (test == "base") { write_entry("serial_base_" serial_count, fields[++i]) continue } if (test == "irq") { write_entry("serial_irq_" serial_count, fields[++i]) continue } if (test == "mouse") { write_entry("serial_mouse_" serial_count, "on") continue } } write_entry("serial_num", serial_count) next; } tolower($1) == "mouse" { get_line() for (i = 2; i < num_fields && fields[i] != "}"; i++) { test = tolower(fields[i]) if (test == "microsoft" || test == "logitech" || test == "mmseries" || test == "mouseman" || test == "hitachi" || test == "mousesystems" || test == "busmouse" || test == "ps2") { write_entry("mouse_type", test) continue } if (test == "device") { write_entry("mouse_device", fields[++i]) continue } if (test == "internaldriver") { write_entry( "mouse_internaldriver", "on") continue } if (test == "emulate3buttons") { write_entry( "mouse_emulate3buttons", "on") continue } if (test == "cleardtr") { write_entry( "mouse_cleardtr", "on") continue } } next; } tolower($1) == "ttylocks" { get_line() for (i = 2; i < num_fields && fields[i] != "}"; i++) { test = tolower(fields[i]) if (test == "directory" ) { write_entry( "ttylocks_directory", fields[++i]) continue; } if (test == "namestub" ) { write_entry( "ttylocks_namestub", fields[++i]) continue; } if (test == "binary" ) { write_entry( "ttylocks_binary", "on") continue; } } next; } tolower($1) == "hogthreshold" { get_line() write_entry( "hogthreshold", fields[1]) next } tolower($1) == "ipxsupport" { get_line() write_entry( "ipxsupport", fields[1]) next } tolower($1) == "pktdriver" { get_line() write_entry( "pktdriver", fields[1]) next } tolower($1) == "terminal" { handle_multiline("terminal_") next } tolower($1) == "x" { get_line() for (i = 2; i < num_fields && fields[i] != "}"; i++) { test = tolower(fields[i]) if (test == "updatefreq") { write_entry("x_updatefreq", fields[++i]) continue } if (test == "display") { write_entry( "x_display", fields[++i]) continue } if (test == "title") { write_entry( "x_title", fields[++i]) continue; } if (test == "icon_name") { write_entry( "x_icon_name", fields[++i]) continue; } if (test == "font") { write_entry( "x_font", fields[++i]) continue; } if (test == "blinkrate") { write_entry( "x_blinkrate", fields[++i]) continue; } if (test == "keycode") { write_entry( "x_keycode", "on") continue; } if (test == "sharecmp") { write_entry( "x_sharecmp", "on") continue; } } next; } tolower($1) == "video" { get_line() for (i = 2; i < num_fields && fields[i] != "}"; i++) { test = tolower(fields[i]) if (test == "vga" || test == "cga" || test == "ega" || test == "mda") { write_entry("video_type", test) continue } if (test == "console") { write_entry( "video_console", "on") continue } if (test == "graphics") { write_entry( "video_graphics", "on") continue } if (test == "vbios_post") { write_entry( "video_vbios_post", "on") continue } if (test == "dualmon") { write_entry( "video_dualmon", "on") continue } if (test == "fullrestore") { write_entry( "video_restore", "full") continue } if (test == "partialrestore") { write_entry( "video_restore", "partial") continue } if (test == "chipset") { write_entry( "video_chipset", fields[++i]) continue } if (test == "vbios_seg") { write_entry( "video_vbios_seg", fields[++i]) continue } if (test == "vbios_size") { write_entry( "video_vbios_size", fields[++i]) continue } if (test == "vbios_copy") { write_entry( "video_vbios_copy", "on") continue } if (test == "vbios_mmap") { write_entry( "video_vbios_mmap", "on") continue } if (test == "vbios_file") { write_entry( "video_vbios_file", fields[++i]) continue } } next; } tolower($1) == "ports" { get_line() # for (i = 2; i < num_fields && fields[i] != "}"; i++) { # test = tolower(fields[i]) # # if (test == "range") { # write_entry( "ports_range_" ++range_count ,fields[++i] "-" fields[++i]) # continue # } # if (test == "ormask" || test == "andmask" || test = "device" ) { # # Fake it .. # i++ # continue # } # if (test == "rdonly" || test == "wronly" || test == "rdwr" || # test == "fast" ) { # # Fake it .. # continue # } # # Catchall ... # write_entry( "ports_" ++port_count, test) # } # write_entry( "ports_range_num", range_count) # write_entry( "ports_num", port_count) # next # ***HACK*** Make it easier to handle ports port_data = "" for (i = 2; i < num_fields && fields[i] != "}"; i++) { port_data = port_data " " fields[i] } write_entry( "ports_" ++port_count, port_data); write_entry( "ports_num", port_count); next } tolower($1) == "mathco" { get_line() write_entry( "mathco", fields[1]) next } tolower($1) == "cpu" { get_line() write_entry( "cpu", fields[1]) next } tolower($1) ~ /^boot.$/ { get_line() write_entry( "boot", substr (fields[0], 5)) next } tolower($1) == "umb_max" { get_line() write_entry( "umb_max", fields[1]) next } tolower($1) == "dpmi" { get_line() write_entry( "dpmi", fields[1]) next } tolower($1) == "xms" { get_line() write_entry( "xms", fields[1]) next } tolower($1) == "ems" { if ( $2 == "{" ) { # Is the multiline version - all the markers contain 'ems_' already ... handle_multiline(""); } else { get_line() write_entry( "ems_size", fields[1]) } next } tolower($1) == "hardware_ram" { get_line() # for (i = 2; i < num_fields && fields[i] != "}"; i++) { # test = tolower(fields[i]) # # if (test == "range") { # write_entry( "hardware_ram_range_ " ++ram_range_count , fields[++i] "-" fields[++i]) # continue # } # # Catchall ... # write_entry( "hardware_ram_" ++ram_count , test) # } # write_entry( "hardware_ram_num", ram_count) # write_entry( "hardware_ram_range_num", ram_range_count) # ***HACK*** Make it easier to handle hardware_ram hardware_ram_data = "" for (i = 2; i < num_fields && fields[i] != "}"; i++) { hardware_ram_data = hardware_ram_data " " fields[i] } write_entry( "hardware_ram_" ++hardware_ram_count, hardware_ram_data); write_entry( "hardware_ram_num", hardware_ram_count); next; } tolower($1) == "dosmem" { get_line() write_entry( "dosmem", fields[1]) next } tolower($1) == "sillyint" { # if ( $2 == "{" ) { # # Is a multiline variant # get_line() # # for (i = 2; i < num_fields && fields[i] != "}"; i++) { # test = tolower(fields[i]) # # if (test == "range") { # write_entry( "sillyint_range_ " ++sillyint_range_count , fields[++i] "-" fields[++i]) # continue # } # if (test == "use_sigio") { # write_entry( "sillyint_sigio", "1") # continue # } # # Catchall ... # write_entry( "sillyint_irq" ++sillyint_count , test) # } # write_entry( "sillyint_irq_num", sillyint_count) # write_entry( "sillyint_range_num", sillyint_range_count) # } else { # get_line() # # write_entry( "sillyint_irq_1", fields[1]) # write_entry( "sillyint_range_num", "0") # write_entry( "sillyint_irq_num", "1") # } # next; # ***HACK*** if ($2 == "{") { get_line() int_data = "" for (i = 2; i < num_fields && fields[i] != "}"; i++) { int_data = int_data " " fields[i] } write_entry( "sillyint_" ++int_count, int_data) } else { get_line() write_entry( "sillyint_" ++int_count, fields[1]) } next } tolower($1) == "speaker" { get_line() write_entry( "speaker", fields[1]) next } tolower($1) == "disk" { get_line() disk_count ++ for (i = 2; i < num_fields && fields[i] != "}"; i++) { test = tolower(fields[i]) if (test == "image" || test == "partition" || test == "bootfile" || test == "wholedisk" ) { write_entry( "disk_" test "_" disk_count, fields[++i]) continue } if (test == "readonly" ) { write_entry( "disk_readonly_" disk_count, "on") continue } } write_entry( "disk_num", disk_count) next; } tolower($1) == "bootdisk" || tolower($1) == "floppy" { get_line() name = tolower($1) if (tolower($1) == "bootdisk") { sufffix = "" } else { suffix = "_" ++floppy_count } for (i = 2; i < num_fields && fields[i] != "}"; i++) { test = tolower(fields[i]) if (test == "heads" || test == "sectors" || test == "tracks" || test == "file" || test == "device" ) { write_entry( name "_" test suffix , fields[++i]) if (test == "file") { write_entry( name "_" real suffix , "off") } else if (file == "device") { write_entry( name "_" real suffix, "on") } continue } if (test == "threeinch") { write_entry( name "_size" suffix, "threeinch") continue } if (test == "fiveinch") { write_entry( name "_size" suffix, "fiveinch") continue } } if (name == "floppy") { write_entry( "floppy_num", floppy_count) } next; } tolower($1) == "emusys" { get_line() write_entry( "emusys", fields[1]) next } tolower($1) == "fastfloppy" { get_line() write_entry( "fastfloppy", fields[1]) next } tolower($1) == "printer" { get_line() printer_count ++ for (i = 2; i < num_fields && fields[i] != "}"; i++) { test = tolower(fields[i]) if (test == "options" || test == "command" || test == "file" ) { write_entry( "printer_" test "_" printer_count , fields[++i]) continue } if (test == "base" || test == "timeout" ) { write_entry( "printer_" test "_" printer_count , fields[++i]) continue } } write_entry( "printer_num", printer_count) next; } tolower($1) == "sound_emu" { handle_multiline("sound_emu_") next } tolower($1) == "config" { handle_multiline("config_") next }