- added stuff for ease/pardef
This commit is contained in:
49
strobj.c
Normal file
49
strobj.c
Normal file
@ -0,0 +1,49 @@
|
||||
/*---------------------------------------------------------------------------
|
||||
strobj.c
|
||||
|
||||
a string object based on pardef, logging is on by default
|
||||
|
||||
Markus Zolliker, March 2005
|
||||
----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "sics.h"
|
||||
#include "pardef.h"
|
||||
#include "initializer.h"
|
||||
|
||||
typedef struct {
|
||||
ParData p;
|
||||
char *str;
|
||||
} StrObj;
|
||||
|
||||
static ParClass strObjClass = { "string", sizeof(StrObj) };
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
static void StrObjParDef(void *object) {
|
||||
StrObj *so = ParCast(&strObjClass, object);
|
||||
ParName("");
|
||||
ParAccess(usUser);
|
||||
ParSave(1);
|
||||
ParList(NULL);
|
||||
ParStr(&so->str, NULL);
|
||||
}
|
||||
/*----------------------------------------------------------------------------*/
|
||||
static int StrObjInit(SConnection *con, int argc, char *argv[], int dynamic) {
|
||||
StrObj *so = NULL;
|
||||
char *creationCmd = NULL;
|
||||
|
||||
if (dynamic) {
|
||||
creationCmd = ParArg2Text(argc, argv, NULL, 0);
|
||||
}
|
||||
so = ParMake(con, argv[1], &strObjClass, StrObjParDef, creationCmd);
|
||||
if (so) {
|
||||
so->str = NULL;
|
||||
}
|
||||
return so != NULL;
|
||||
}
|
||||
/*----------------------------------------------------------------------------*/
|
||||
void StrObjStartup(void) {
|
||||
ParMakeClass(&strObjClass, NULL);
|
||||
MakeDriver("string", StrObjInit, 0);
|
||||
}
|
78
sugar.c
Normal file
78
sugar.c
Normal file
@ -0,0 +1,78 @@
|
||||
/*---------------------------------------------------------------------------
|
||||
sugar.c
|
||||
|
||||
syntactic sugar for accessing object subvariables (aliases)
|
||||
|
||||
Markus Zolliker, March 2005
|
||||
----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "sics.h"
|
||||
#include "sugar.h"
|
||||
#include "pardef.h"
|
||||
|
||||
typedef struct {
|
||||
pObjectDescriptor desc;
|
||||
char *name;
|
||||
char *alias;
|
||||
} Sugar;
|
||||
|
||||
int SugarCommand(SConnection *con, SicsInterp *sics, void *data, int argc, char *argv[]) {
|
||||
Sugar *sugar = data;
|
||||
char value[256], buf[256];
|
||||
|
||||
assert(sugar);
|
||||
ParArg2Text(argc-1, argv+1, value, sizeof value);
|
||||
snprintf(buf, sizeof buf, "%s %s", sugar->alias, value);
|
||||
return SCInvoke(con, sics, buf);
|
||||
}
|
||||
|
||||
void SugarDelete(void *data) {
|
||||
Sugar *sugar = data;
|
||||
|
||||
assert(sugar);
|
||||
if (sugar->desc) {
|
||||
DeleteDescriptor(sugar->desc);
|
||||
sugar->desc = NULL;
|
||||
}
|
||||
if (sugar->name) free(sugar->name);
|
||||
if (sugar->alias) free(sugar->alias);
|
||||
free(sugar);
|
||||
}
|
||||
|
||||
int SugarMake(char *name, char *alias) {
|
||||
Sugar *sugar;
|
||||
|
||||
sugar = FindCommandData(pServ->pSics, name, "Sugar");
|
||||
if (sugar == NULL) {
|
||||
if (FindCommand(pServ->pSics, name)) {
|
||||
return -2;
|
||||
}
|
||||
sugar = calloc(1, sizeof *sugar);
|
||||
if (!sugar) return -1;
|
||||
|
||||
sugar->desc = CreateDescriptor("Sugar");
|
||||
if (!sugar->desc) goto release;
|
||||
sugar->name = strdup(name);
|
||||
sugar->alias = strdup(alias);
|
||||
} else {
|
||||
if (strcmp(name, sugar->name) != 0) {
|
||||
free(sugar->name);
|
||||
sugar->name = strdup(name);
|
||||
}
|
||||
if (strcmp(alias, sugar->alias) != 0) {
|
||||
free(sugar->alias);
|
||||
sugar->alias = strdup(alias);
|
||||
}
|
||||
}
|
||||
|
||||
if (!sugar->name || !sugar->alias) goto release;
|
||||
|
||||
if (0 == AddCommand(pServ->pSics, name, SugarCommand, SugarDelete, sugar)) goto release;
|
||||
return 1;
|
||||
|
||||
release:
|
||||
SugarDelete(sugar);
|
||||
return -1;
|
||||
}
|
13
sugar.h
Normal file
13
sugar.h
Normal file
@ -0,0 +1,13 @@
|
||||
/*---------------------------------------------------------------------------
|
||||
sugar.h
|
||||
|
||||
syntactic sugar for accessing object subvariables
|
||||
|
||||
Markus Zolliker, March 2005
|
||||
----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* make an sugar object named "name", referring to "alias"
|
||||
which is normally an object and a parameter name separated with space
|
||||
*/
|
||||
int SugarMake(char *name, char *alias);
|
Reference in New Issue
Block a user