Changeset 466


Ignore:
Timestamp:
Oct 17, 2009, 1:49:49 PM (11 years ago)
Author:
rossy
Message:

command line arguments (btw Oni's AUrBuildArgumentList doesn't follow C standards, this confused me for ages)

Location:
Daodan
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • Daodan/src/Daodan.c

    r465 r466  
    4040bool patch_argb8888 = true;
    4141bool patch_killvtune = true;
     42bool patch_getcmdline = true;
     43bool patch_disablecmdline = true;
    4244
    4345bool patch_safeprintf = true;
     
    174176                DDrPatch_Byte  (OniExe + 0x00026340, 0xC3);
    175177       
     178        // Disable Oni's internal CLrGetCommandLine function (to eventually replace it with our own)
     179        if (patch_getcmdline)
     180                DDrPatch_NOOP  (OniExe + 0x000d3280, 51);
     181       
     182        // Disable Oni's command line parser so it doesn't interfere with ours
     183        if (patch_disablecmdline)
     184                DDrPatch_Int32 (OniExe + 0x000d3570, 0xc3c03366);
     185       
    176186        return true;
    177187}
     
    194204                {
    195205                        ini_section = s_unknown;
    196                         DDrStartupMessage("unrecognised ini section \"%s\"", section);
     206                        DDrStartupMessage("unrecognised section \"%s\"", section);
    197207                }
    198208        }
     
    203213                        if (!stricmp(name, "usedaodanbsl"))
    204214                                opt_usedaodanbsl = !stricmp(inifile_cleanstr(value), "true");
     215                        else if (!stricmp(name, "debug"))
     216                                AKgDebug_DebugMaps = !stricmp(inifile_cleanstr(value), "true");
     217                        else if (!stricmp(name, "debugfiles"))
     218                                BFgDebugFileEnable = !stricmp(inifile_cleanstr(value), "true");
     219                        else if (!stricmp(name, "findsounds"))
     220                                SSgSearchOnDisk = !stricmp(inifile_cleanstr(value), "true");
     221                        else if (!stricmp(name, "ignore_private_data"))
     222                                opt_ignore_private_data = !stricmp(inifile_cleanstr(value), "true");
     223                        else if (!stricmp(name, "sound"))
     224                                opt_sound = !stricmp(inifile_cleanstr(value), "true");
     225                        else if (!stricmp(name, "switch"))
     226                                M3gResolutionSwitch = !stricmp(inifile_cleanstr(value), "true");
     227                        else
     228                                DDrStartupMessage("unrecognised option \"%s\"", name);
    205229                        break;
    206230                case s_patch:
     
    237261                        else if (!stricmp(name, "killvtune"))
    238262                                patch_killvtune = !stricmp(inifile_cleanstr(value), "true");
     263                        else if (!stricmp(name, "getcmdline"))
     264                                patch_getcmdline = !stricmp(inifile_cleanstr(value), "true");
     265                        else if (!stricmp(name, "disablecmdline"))
     266                                patch_disablecmdline = !stricmp(inifile_cleanstr(value), "true");
    239267                        else if (!stricmp(name, "safeprintf"))
    240268                                patch_safeprintf = !stricmp(inifile_cleanstr(value), "true");
     
    402430{
    403431        DDrStartupMessage("daodan attached!");
     432       
     433        opt_ignore_private_data = false;
     434        opt_sound = true;
     435       
    404436        DDrConfig();
     437        DDrStartupMessage("parsing command line...");
     438        int i;
     439        char* section;
     440        char* option;
     441        bool falseoption;
     442        for (i = 1; i < argc; i ++)
     443        {
     444                if (argv[i][0] == '-')
     445                {
     446                        section = argv[i] + 1;
     447                        if ((option = strchr(argv[i], '.')))
     448                        {
     449                                *option = '\0';
     450                                falseoption = (option[1] == 'n' || option[1] == 'N') && (option[2] = 'o' || option[2] == 'O');
     451                                if (i < (argc - 1) && argv[i + 1][0] != '-')
     452                                        DDrIniCallback(section, true, option + (falseoption ? 3 : 1), argv[++i]);
     453                                else
     454                                        DDrIniCallback(section, true, option + (falseoption ? 3 : 1), (falseoption ? "false" : "true"));
     455                                *option = '.';
     456                        }
     457                        else
     458                        {
     459                                falseoption = (section[0] == 'n' || section[0] == 'N') && (section[1] = 'o' || section[1] == 'O');
     460                                ini_section = s_options;
     461                                if (i < (argc - 1) && argv[i + 1][0] != '-')
     462                                        DDrIniCallback(NULL, false, section + (falseoption ? 2 : 0), argv[++i]);
     463                                else
     464                                        DDrIniCallback(NULL, false, section + (falseoption ? 2 : 0), (falseoption ? "false" : "true"));
     465                        }
     466                }
     467                else
     468                {
     469                        DDrStartupMessage("parse error \"%s\"", argv[i]);
     470                        break;
     471                }
     472        }
     473        DDrStartupMessage("finished parsing");
    405474        DDrPatch_Init();
    406475       
  • Daodan/src/Oni.h

    r452 r466  
    2525extern void* ONgGameState;
    2626
     27extern char M3gResolutionSwitch;
     28
     29extern char opt_sound;
     30extern uint32_t opt_ignore_private_data;
     31
     32extern char AKgDebug_DebugMaps;
     33extern char BFgDebugFileEnable;
     34extern char SSgSearchOnDisk;
     35
    2736#endif
  • Daodan/src/Oni_Symbols.S

    r452 r466  
    2020symbol ( _ONgGameState                             , 0x001ece7c )
    2121
     22symbol ( _AKgDebug_DebugMaps                       , 0x002b2204 )
     23symbol ( _BFgDebugFileEnable                       , 0x0015c8d0 )
     24symbol ( _SSgSearchOnDisk                          , 0x001eb758 )
     25
     26symbol ( _opt_sound                                , 0x002370fc )
     27symbol ( _opt_ignore_private_data                  , 0x002370f0 )
     28
    2229// Oni Persistance
    2330symbol ( @ONrPersist_GetGamma@0                    , 0x0010f450 )
     
    2936symbol ( @UUrMachineTime_High_Frequency@0          , 0x000264b0 )
    3037symbol ( @UUrMachineTime_Sixtieths@0               , 0x000263e0 )
    31 symbol ( _ONgFileStartup                           , 0x001711b8 )
    32 
    3338symbol ( @UUrPlatform_Initialize@0                 , 0x00026010 )
    3439symbol ( @UUrPlatform_Terminate@0                  , 0x00026310 )
     40symbol ( _AUrMessageBox                            , 0x000378c0 )
    3541
    36 symbol ( _AUrMessageBox                            , 0x000378c0 )
     42symbol ( _ONgFileStartup                           , 0x001711b8 )
    3743
    3844// Motoko
  • Daodan/src/inifile_reader.c

    r451 r466  
    1111        int i;
    1212        for (i = strlen(str) - 1; i >= 0; i --)
    13                 if (!isspace(str[i]))
    14                 {
    15                         str[i + 1] = '\0';
     13                if (isspace(str[i]))
     14                        str[i] = '\0';
     15                else
    1616                        break;
    17                 }
    1817       
    1918        while (isspace(*str))
Note: See TracChangeset for help on using the changeset viewer.