Changeset 54217


Ignore:
Timestamp:
Jul 23, 2009, 4:37:53 AM (10 years ago)
Author:
toby@…
Message:

support for variable defaults and callbacks

Location:
users/toby/objcports
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • users/toby/objcports/MPPort.m

    r54211 r54217  
    55#include "MPPort.h"
    66#include "MPArrayAdditions.h"
     7#include "MPStringAdditions.h"
    78
    89static NSString *kPortVariableType = @"Type";
    910static NSString *kPortVariableConstant = @"Constant";
     11static NSString *kPortVariableDefault = @"Default";
     12static NSString *kPortVariableCallback = @"Callback";
    1013
    1114static void command_create(Tcl_Interp *interp, const char *cmdName, ClientData clientData);
     
    211214}
    212215
     216- (id)variableCallback:(NSString *)name
     217{
     218        return @"callback result";
     219}
     220
    213221- (NSString *)variable:(NSString *)name
    214222{
    215         NSString *ret = @"";
    216         id val;
    217         if ([_variableInfo objectForKey:name] != nil) {
    218                 val = [_variables objectForKey:name];
    219                 if ([self variableIsArray:name]) {
    220                         if (val) {
    221                                 NSLog(@"%@ %@", name, val);
    222                                 assert([val isKindOfClass:[NSArray class]]);
    223                                 ret = [val componentsJoinedByString:@" "];
     223        NSDictionary *info;
     224        id setValue;
     225        id defValue;
     226        NSString *ret = nil;
     227
     228        info = [_variableInfo objectForKey:name];
     229        if (info != nil) {
     230                if ((setValue = [_variables objectForKey:name])) {
     231                        if ([self variableIsArray:name]) {
     232                                NSLog(@"%@ %@", name, setValue);
     233                                assert([setValue isKindOfClass:[NSArray class]]);
     234                                ret = [setValue componentsJoinedByString:@" "];
     235                        } else {
     236                                assert([setValue isKindOfClass:[NSString class]]);
     237                                ret = setValue;
    224238                        }
     239                } else if ((defValue = [info objectForKey:kPortVariableDefault]) != nil) {
     240                        ret = defValue;
     241                } else if ([[info objectForKey:kPortVariableCallback] boolValue] == YES) {
     242                        ret = [self variableCallback:name];
    225243                } else {
    226                         if (val) {
    227                                 assert([val isKindOfClass:[NSString class]]);
    228                                 ret = val;
    229                         }
    230                 }
     244                        ret = [NSString stringWithUTF8String:""];
     245                }
     246                ret = [[[NSString alloc] initWithTclObject:Tcl_SubstObj(_interp, Tcl_NewStringObj([ret UTF8String], -1), TCL_SUBST_VARIABLES)] autorelease];
    231247        } else {
    232248                NSLog(@"WARNING: unknown variable %@", name);
     
    452468        NSString *var = [(MPPort *)clientData variable:[NSString stringWithUTF8String:name1]];
    453469        assert(var != nil);
    454         Tcl_SetVar2Ex(interp, name1, name2, Tcl_SubstObj(interp, Tcl_NewStringObj([var UTF8String], -1), TCL_SUBST_VARIABLES), 0);
     470        Tcl_SetVar2(interp, name1, name2, [var UTF8String], 0);
    455471        return NULL;
    456472}
  • users/toby/objcports/variables.plist

    r49122 r54217  
    277277        <key>prefix</key>
    278278        <dict>
     279                <key>Default</key>
     280                <string>/opt/local</string>
    279281                <key>Constant</key>
    280282                <true/>
Note: See TracChangeset for help on using the changeset viewer.