Ejemplo n.º 1
0
XMLEle *Triangulate::toXML()
{
    XMLEle *root;
    std::vector<Face *>::iterator it;

    root = addXMLEle(nullptr, "triangulation");

    for (it = vfaces.begin(); it != vfaces.end(); it++)
    {
        XMLEle *face;
        XMLEle *vertex;
        char pcdata[10];
        face   = addXMLEle(root, "face");
        vertex = addXMLEle(face, "vindex");
        snprintf(pcdata, sizeof(pcdata), "%d", pmap->at((*it)->v[0]).index);
        editXMLEle(vertex, pcdata);
        vertex = addXMLEle(face, "vindex");
        snprintf(pcdata, sizeof(pcdata), "%d", pmap->at((*it)->v[1]).index);
        editXMLEle(vertex, pcdata);
        vertex = addXMLEle(face, "vindex");
        snprintf(pcdata, sizeof(pcdata), "%d", pmap->at((*it)->v[2]).index);
        editXMLEle(vertex, pcdata);
    }

    return (root);
}
Ejemplo n.º 2
0
/* Read commands from FIFO and process them. Start/stop drivers accordingly */
void newFIFO(void)
{
    //char line[MAXRBUF], tDriver[MAXRBUF], tConfig[MAXRBUF], tDev[MAXRBUF], tSkel[MAXRBUF], envDev[MAXRBUF], envConfig[MAXRBUF], envSkel[MAXR];
    char line[MAXRBUF];
    DvrInfo *dp = NULL;
    int startCmd=0, i=0;

    while (i < MAXRBUF)
    {
        if (read(fifo.fd, line+i, 1) <= 0)
        {
            // Reset FIFO now, otherwise select will always return with no data from FIFO.
            indiFIFO();
            return;
        }

        if (line[i] == '\n')
        {
            line[i] = '\0';
            i=0;
        }
        else
        {
          i++;
          continue;
        }

     if (verbose)
            fprintf(stderr, "FIFO: %s\n", line);

     char cmd[MAXSBUF], arg[4][1], var[4][MAXSBUF], tDriver[MAXSBUF], tName[MAXSBUF], envDev[MAXSBUF], envConfig[MAXSBUF], envSkel[MAXSBUF], envPrefix[MAXSBUF];

     memset(&tDriver[0], 0, sizeof(MAXSBUF));
     memset(&tName[0], 0, sizeof(MAXSBUF));
     memset(&envDev[0], 0, sizeof(MAXSBUF));
     memset(&envConfig[0], 0, sizeof(MAXSBUF));
     memset(&envSkel[0], 0, sizeof(MAXSBUF));
     memset(&envPrefix[0], 0, sizeof(MAXSBUF));

     int n = sscanf(line, "%s %s -%1c \"%512[^\"]\" -%1c \"%512[^\"]\" -%1c \"%512[^\"]\" -%1c \"%512[^\"]\"", cmd, tDriver, arg[0], var[0], arg[1], var[1]
                    , arg[2], var[2], arg[3], var[3]);


     int n_args = (n - 2)/2;

     int j=0;
     for (j=0; j < n_args; j++)
     {
         //fprintf(stderr, "arg[%d]: %c\n", i, arg[j][0]);
         //fprintf(stderr, "var[%d]: %s\n", i, var[j]);

         if (arg[j][0] == 'n')
         {
             strncpy(tName, var[j], MAXSBUF-1);
             tName[MAXSBUF-1] = '\0';

             if (verbose)
                fprintf(stderr, "With name: %s\n", envDev);
         }
         else if (arg[j][0] == 'c')
         {
             strncpy(envConfig, var[j], MAXSBUF-1);
             envConfig[MAXSBUF-1] = '\0';

             if (verbose)
              fprintf(stderr, "With config: %s\n", envConfig);
         }
         else if (arg[j][0] == 's')
         {
             strncpy(envSkel, var[j], MAXSBUF-1);
             envSkel[MAXSBUF-1] = '\0';

             if (verbose)
              fprintf(stderr, "With skeketon: %s\n", envSkel);
         }
         else if (arg[j][0] == 'p')
         {
             strncpy(envPrefix, var[j], MAXSBUF-1);
             envPrefix[MAXSBUF-1] = '\0';

             if (verbose)
              fprintf(stderr, "With prefix: %s\n", envPrefix);
         }
     }

     if (!strcmp(cmd, "start"))
         startCmd = 1;
     else
         startCmd = 0;

    if (startCmd)
    {
          if (verbose)
             fprintf(stderr, "FIFO: Starting driver %s with name (%s)\n", tDriver, tName);
          dp = allocDvr();
          strncpy(dp->name, tDriver, MAXINDIDEVICE);
          //strncpy(dp->dev, tName, MAXINDIDEVICE);
          strncpy(dp->envDev, tName, MAXSBUF);
          strncpy(dp->envConfig, envConfig, MAXSBUF);
          strncpy(dp->envSkel, envSkel, MAXSBUF);
          strncpy(dp->envPrefix, envPrefix, MAXSBUF);
          startDvr (dp);
    }
    else
    {
     for (dp = dvrinfo; dp < &dvrinfo[ndvrinfo]; dp++)
     {
         fprintf(stderr, "dp->name: %s - tDriver: %s\n", dp->name, tDriver);
         if (!strcmp(dp->name, tDriver) && dp->active==1)
         {
             fprintf(stderr, "name: %s - dp->dev[0]: %s\n", tName, dp->dev[0]);

            /* If device name is given, check against it before shutting down */
             //if (tName[0] && strcmp(dp->dev[0], tName))
             if (tName[0] && isDeviceInDriver(tName, dp) == 0)
                  continue;
           if (verbose)
               fprintf(stderr, "FIFO: Shutting down driver: %s\n", tDriver);

            for (i=0; i < dp->ndev; i++)
            {
                /* Inform clients that this driver is dead */
                XMLEle *root = addXMLEle (NULL, "delProperty");
                addXMLAtt(root, "device", dp->dev[i]);

                prXMLEle(stderr, root, 0);
                Msg * mp = newMsg();

                q2Clients(NULL, 0, dp->dev[i], NULL, mp, root);
               if (mp->count > 0)
                   setMsgXMLEle (mp, root);
               else
                   freeMsg (mp);
              delXMLEle (root);
            }

            shutdownDvr(dp, 0);
         break;
         }
     }
    }
   }
}