Beispiel #1
0
static void DoSrvCommand(SrvJob *job_in)
{
  int status;
  SrvCommandJob *job = (SrvCommandJob *)job_in;
  char *set_table = strcpy(malloc(strlen(job->table)+24),"set command ");
  char *job_text = (char *)malloc(strlen(job->command) + strlen(job->table) + 60);
  ProgLoc = 61;
  sprintf(job_text,"Doing command %s in command table %s",job->command,job->table);
  ProgLoc = 62;
  current_job_text = job_text;
  ProgLoc = 63;
  strcat(set_table,job->table);
  ProgLoc = 64;
  status = mdsdcl_do_command(set_table);
  ProgLoc = 65;
  free(set_table);
  ProgLoc = 66;
  if (status & 1)
  {
    ProgLoc = 67;
    status = mdsdcl_do_command(job->command);
    ProgLoc = 68;
  }
  ProgLoc = 69;
  SendReply(job_in,SrvJobFINISHED,status,0,0);
  ProgLoc = 70;
}
Beispiel #2
0
int mdsdcl___execute(struct descriptor_s *niddsc_ptr, InExecuteStruct *setup)
{
  int status;
  char *line;
  for (line=strtok(setup->verbs,"\n");line;line=strtok(0,"\n"))
  {
    char cmd[128];
    strcpy(cmd,"set command ");
    strcat(cmd,line);
    return_on_error(mdsdcl_do_command(cmd),status);
  }
  for (line=strtok(setup->commands,"\n");line;line=strtok(0,"\n"))
  {
    if (strlen(line))
      return_on_error(mdsdcl_do_command(line),status);
  }
  return status;
}
Beispiel #3
0
/****************************************************************
 * mdsdcl_do_macro:
 ****************************************************************/
int   mdsdcl_do_macro()		/* Return: status			*/
{
    int   i;
    int   icnt;
    int   irepeat;
    int   sts;
    char  prmName[4];
    struct _mdsdcl_io  *io;
    struct _mdsdcl_macro  *macro;
    static DYNAMIC_DESCRIPTOR(dsc_util);
    static char  fmt0[] = "Qualifier not supported:  use '@'";
    static char  fmt1[] = "No such command: '%s'";
    static char  fmt2[] = "Macro '%s' is already in use";
    static char  fmt3[] = "Exceeded MAX_DEPTH for indirect files & macros";
    struct _mdsdcl_ctrl  *ctrl = &MdsdclGetThreadStatic()->ctrl;

    sts = cli_get_value("NAME",&dsc_util);
    if (~sts & 1)
        return(MdsMsg(MDSDCL_STS_ERROR,"Error getting NAME"));

    if (cli_present("INTERACTIVE") & 1)
        return(MdsMsg(MDSDCL_STS_ERROR,fmt0,0));

    if (cli_present("INDIRECT") & 1)
    {
        sts = mdsdcl_openIndirectLevel(dsc_util.dscA_pointer);
        if (!sts & 1)
            return(MdsMsg(sts,"failed to open file %s",dsc_util.dscA_pointer));
        for ( ; sts & 1 ; )
            sts = mdsdcl_do_command(0);
        return((sts==MDSDCL_STS_INDIRECT_EOF) ? 1 : sts);
    }

    l2u(dsc_util.dscA_pointer,0);		/* convert to uc	*/
    macro = find_macro(dsc_util.dscA_pointer);
    if (!macro)
    {
        MdsMsg(0,"No such command");
        return(MDSDCL_STS_ERROR);
    }

    if (macro->isOpen)
        return(MdsMsg(MDSDCL_STS_ERROR,fmt2,dsc_util.dscA_pointer));

    /*=======================================================
     * Get repeat count ...
     *======================================================*/
    sts = cli_get_value("REPEAT",&dsc_util);
    if (sts & 1)
    {
        if (sscanf(dsc_util.dscA_pointer,"%d",&irepeat) != 1)
            irepeat = 1;
    }
    else
        irepeat = 1;

    /*========================================================
     * Create new ioLevel[] in ctrl struct ...
     *=======================================================*/
    if (ctrl->depth >= MAX_DEPTH)
        return(MdsMsg(MDSDCL_STS_INDIRECT_ERROR,fmt3,0));

    for (icnt=0 ; icnt<irepeat ; icnt++)
    {
        macro->isOpen = 1;
        io = ctrl->ioLevel + ++ctrl->depth;
        io->fp = 0;
        io->ioMacro = macro;
        io->lineno = 0;

        for (i=0 ; i<8 ; i++)
        {
            sprintf(prmName,"P%d",i+1);
            sts = cli_get_value(prmName,io->ioParameter+i);
            if (~sts & 1)
                break;
        }
        for ( ; i<8 ; i++)
            str_free1_dx(io->ioParameter+i);

        do {
            sts = mdsdcl_do_command(0);
        }  while (sts & 1);

        if (sts == MDSDCL_STS_INDIRECT_EOF)
            continue;
        else
            break;
    }

    return((sts==MDSDCL_STS_INDIRECT_EOF) ? 1 : sts);
}