- Reworked the connection object and the IO system

- Reworked the support for TRICS
- Added a second generation motor
This commit is contained in:
koennecke
2009-02-03 08:05:39 +00:00
parent f6d595665e
commit 361ee9ebea
119 changed files with 16455 additions and 3674 deletions

87
background.c Normal file
View File

@ -0,0 +1,87 @@
/**
* This is for backgrounding operations in SICS. They run in an own
* task.
*
* copyright: see file COPYRIGHT
*
* Mark Koennecke, February 2009
*/
#include <sics.h>
#include "splitter.h"
#include "background.h"
/*---------------------------------------------------------------------------*/
typedef struct {
SConnection *con;
char *command;
} BckTask, *pBckTask;
/*---------------------------------------------------------------------------*/
static void KillBckTask(void *data){
pBckTask self = (pBckTask)data;
if(self == NULL){
return;
}
if(self->con){
SCDeleteConnection(self->con);
}
if(self->command){
free(self->command);
}
}
/*---------------------------------------------------------------------------*/
static int BackgroundTask(void *data){
pBckTask self = (pBckTask)data;
assert(self != NULL);
InterpExecute(pServ->pSics,self->con,self->command);
return 0;
}
/*----------------------------------------------------------------------------*/
int BackgroundCommand(SConnection *pCon, char *command){
pBckTask self = NULL;
self = calloc(1,sizeof(BckTask));
if(self == NULL){
return 0;
}
self->con = SCCopyConnection(pCon);
self->command = strdup(command);
if(self->con == NULL || self->command == NULL){
free(self);
return 0;
}
TaskRegister(pServ->pTasker,
BackgroundTask,
NULL,
KillBckTask,
self,
1);
return 1;
}
/*------------------------------------------------------------------------*/
int BackgroundAction(SConnection *pCon, SicsInterp *pSics,
void *pData, int argc, char *argv[]){
int status;
char command[1024];
memset(command,0,1024);
Arg2Text(argc-1,&argv[1], command, 1024);
status = BackgroundCommand(pCon,command);
if(status == 0){
SCWrite(pCon,"ERROR: out of memory starting task", eError);
return 0;
}
SCSendOK(pCon);
return 1;
}
/*--------------------------------------------------------------------------*/
void InstallBackground(SicsInterp *pSics){
AddCommand(pSics,
"bg",
BackgroundAction,
NULL,
NULL);
}