swarm-support
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Swarm-Support] Lisp saving objects subclassed from Arguments_c


From: Marcus G. Daniels
Subject: Re: [Swarm-Support] Lisp saving objects subclassed from Arguments_c
Date: Wed, 18 Apr 2007 21:39:35 -0600
User-agent: Thunderbird 1.5.0.10 (X11/20070302)

Paul wrote:
However, I've not succeeded in getting lisp to read in files that I save in that way.
I've committed the needed changes to Savannah to fix this... Updated test case attached which has a `-R' option for re-reading the Arguments_c subclass instance.

Marcus

#include <simtools.h> // initSwarmArguments
#include <defobj.h>
#include <defobj/Arguments.h>
#include <misc.h> // atoi, strdup

@interface MyArguments: Arguments_c
{
  BOOL readFlag;
  int foobar;
  char *gnorkGnork;
}
@end

@implementation MyArguments
+ createBegin: aZone
{
  id args = [super createBegin: aZone];

  [args addOption: "foobar" key: 'X' arg: "value" flags: 0
        doc: "the important foobar value"
        group: 100];
  [args addOption: "gnorkgnork" key: 'Y' arg: "value" flags: 0
        doc: "the less crucial gnorkgnork value"
        group: 101];
  [args addOption: "read" key: 'R' arg: NULL flags: 0
        doc: "read the args in again"
        group: 101];
  return args;
}

- (int)parseKey: (int)key arg: (const char *)arg
{
  if (key == 'X') {
    foobar = atoi (arg);
    return 0;
  } else if (key == 'Y') { 
    gnorkGnork = strdup (arg);
    return 0;
  } else if (key == 'R') { 
    readFlag = YES;
    return 0;
  }
  else
    return [super parseKey: key arg: arg];
}


- (void)saveParameters: (char*)aString
{
  char dataArchiveName[strlen (aString + 4 + 1)];
  id dataArchiver;

  sprintf (dataArchiveName,"%s.scm", aString);
  dataArchiver = [LispArchiver create: [self getZone] 
                               setPath: dataArchiveName];

  if (readFlag) {
    printf ("reading\n");
    MyArguments *args = [dataArchiver getObject: "parameters"];

    printf ("%d %s\n", args->foobar, args->gnorkGnork);
  } else {
    printf ("saving to `%s'\n", dataArchiveName);
    [dataArchiver putShallow: "parameters" object: self];
    [dataArchiver sync];
  }
  [dataArchiver drop];
}


@end

int
main (int argc, const char **argv)
{
  initSwarmArguments (argc, argv, [MyArguments class]);
  [(id) arguments saveParameters: "myFile"];
  return 0;
}

/*
Local Variables: 
compile-command: "gcc -D_GNU_SOURCE address@hidden -g -I$HOME/packages/include 
-L$HOME/packages/lib -Wl,-rpath,$HOME/packages/lib test.m -lswarm"
End:
*/

reply via email to

[Prev in Thread] Current Thread [Next in Thread]