Files
pcas/src/iocsh/iocUtil.c
2000-06-01 15:55:39 +00:00

142 lines
3.9 KiB
C

/* iocUtil.c */
/* Author: W. Eric Norum Date: 02MAY2000 */
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include "osiUnistd.h"
#include "osiThread.h"
#define epicsExportSharedSymbols
#include "ioccrf.h"
#include "iocUtilRegister.h"
/* < (runScript) command */
static ioccrfArg runScriptArg0 = { "file name",ioccrfArgString,0};
static ioccrfArg *runScriptArgs[1] = {&runScriptArg0};
static ioccrfFuncDef runScriptFuncDef = {"<",1,runScriptArgs};
static void runScriptCallFunc(ioccrfArg **args)
{
#ifdef __rtems__
runScriptRTEMS ((char *)args[0]->value);
#else
ioccrf ((char *)args[0]->value);
#endif
}
/* chdir */
static ioccrfArg chdirArg0 = { "current directory name",ioccrfArgString,0};
static ioccrfArg *chdirArgs[1] = {&chdirArg0};
static ioccrfFuncDef chdirFuncDef = {"cd",1,chdirArgs};
static void chdirCallFunc(ioccrfArg **args)
{
int status;
status = chdir((char *)args[0]->value);
if (status) {
printf ("Invalid directory path ignored\n");
}
}
/* print current working directory */
static ioccrfFuncDef pwdFuncDef = { "pwd", 0, 0 };
static void pwdCallFunc (ioccrfArg **args)
{
char buf[256];
char *pwd = getcwd ( buf, sizeof(buf) - 1 );
if ( pwd ) {
printf ( "%s\n", pwd );
}
}
/* show (thread information) */
static ioccrfArg showArg0 = { "task",ioccrfArgString,0};
static ioccrfArg showArg1 = { "task",ioccrfArgString,0};
static ioccrfArg showArg2 = { "task",ioccrfArgString,0};
static ioccrfArg showArg3 = { "task",ioccrfArgString,0};
static ioccrfArg showArg4 = { "task",ioccrfArgString,0};
static ioccrfArg showArg5 = { "task",ioccrfArgString,0};
static ioccrfArg showArg6 = { "task",ioccrfArgString,0};
static ioccrfArg showArg7 = { "task",ioccrfArgString,0};
static ioccrfArg showArg8 = { "task",ioccrfArgString,0};
static ioccrfArg showArg9 = { "task",ioccrfArgString,0};
static ioccrfArg *showArgs[10] = {
&showArg0,&showArg1,&showArg2,&showArg3,&showArg4,
&showArg5,&showArg6,&showArg7,&showArg8,&showArg9,
};
static ioccrfFuncDef showFuncDef = {"show",10,showArgs};
static void showCallFunc(ioccrfArg **args)
{
int i = 0;
int first = 1;
int level = 0;
char *cp;
threadId tid;
unsigned long ltmp;
char *endp;
if (((cp = (char *)args[i]->value) != NULL)
&& (*cp == '-')) {
level = atoi (cp + 1);
i++;
}
if ((cp = (char *)args[i]->value) == NULL) {
threadShowAll (level);
return;
}
for ( ; i < 10 ; i++) {
if ((cp = (char *)args[i]->value) == NULL)
return;
ltmp = strtoul (cp, &endp, 16);
if (*endp) {
tid = threadGetId (cp);
if (!tid) {
printf ("*** argument %d (%s) is not a valid task name ***\n", i+1, cp);
continue;
}
}
else {
tid = (threadId)ltmp;
}
if (first) {
threadShow (0, level);
first = 0;
}
threadShow (tid, level);
}
}
/* threadInit */
static ioccrfFuncDef threadInitFuncDef =
{"threadInit",0,0};
static void threadInitCallFunc(ioccrfArg **args)
{
threadInit();
}
/* putenv */
static ioccrfArg putenvArg0 = { "environment_variable=name",ioccrfArgString,0};
static ioccrfArg *putenvArgs[1] = {&putenvArg0};
static ioccrfFuncDef putenvFuncDef = {"putenv",1,putenvArgs};
static void putenvCallFunc(ioccrfArg **args)
{
const char *cp = (char *)args[0]->value;
if (!cp)
return;
if (putenv (cp))
printf ("putenv(%s) failed.\n", cp);
}
void epicsShareAPI iocUtilRegister(void)
{
ioccrfRegister(&runScriptFuncDef,runScriptCallFunc);
ioccrfRegister(&chdirFuncDef,chdirCallFunc);
ioccrfRegister(&pwdFuncDef,pwdCallFunc);
ioccrfRegister(&showFuncDef,showCallFunc);
ioccrfRegister(&threadInitFuncDef,threadInitCallFunc);
ioccrfRegister(&putenvFuncDef,putenvCallFunc);
}