Die Funktion ParsingCmd( TCmdTag&, LPSTR, LPSTR, LPSTR, LPSTR )

BOOL TSteering::ParsingCmd( TCmdTag& cmd, LPSTR pcmd, LPSTR p1, LPSTR p2, LPSTR p3 )
{
  // Function tested; Last changes 950811
  int nFailure = 0;
  char buf[MaxString];

  // Der als String übergebene Befehl wird
  // in den entsprechenden enum-Wert überführt
  while (1)
  {
    // strcmp() liefert 0 bei Übereinstimmung
    if (!strcmp( pcmd, "GotoPeak" ))
    {
      cmd.Id = GotoPeak;
      cmd.P1 = ParsingCmdParam( p1 );
      break;
    }
    if (!strcmp( pcmd, "SaveData" ))
    {
      cmd.Id = SaveData;
      cmd.P1 = ParsingCmdParam( p1 );
      switch (cmd.P1) 
      {
        case 0: 
          // Parameter unvollständig
          nFailure = 5; 
          break;
        case ForScan: case ForAreaScan:
          break;
        default: 
          // für diesen Befehl nicht unterstützter Parameter
          nFailure = 2;
          break;
      }
      break;
    }
    if (!strcmp( pcmd, "SetFileName" ))
    {
      cmd.Id = SetFileName;
      cmd.P1 = ParsingCmdParam( p1 );
      switch (cmd.P1) 
      {
        case 0: 
          nFailure = 5;
          break;
        case ForScan: case ForAreaScan:
          strcpy( cmd.P3, strtok( p2, " " ) );
          break;
        default: 
          nFailure = 2; 
          break;
      }
      break;
    }
    if (!strcmp( pcmd, "SetupAreaScan" ))
    {
      cmd.Id = SetupAreaScan;
      cmd.P1 = (TCParam) ParsingXScanType( p1 );
      switch (cmd.P1) 
      {
        case 0: 
          nFailure = 5;
          break;
        case StandardScan: case Omega2ThetaScan:
          sprintf( cmd.P3, "%s ", p2 );
          strcat( cmd.P3, p3 );
          break;
        default:
          nFailure = 2;
          break;
      }
      break;
    }
    if (!strcmp( pcmd, "SetupScan" ))
    {
      cmd.Id = SetupScan;
      cmd.P1 = (TCParam) ParsingXScanType( p1 );
      switch (cmd.P1) 
      {
        case 0: 
          nFailure = 5; 
          break;
        case StandardScan: case Omega2ThetaScan:
          if (!p2 && !p3)
          {
            nFailure = 5;
            break;
          }
          sprintf( cmd.P3, "%s ", p2 );
          strcat( cmd.P3, p3 );
          break;
        default: 
          nFailure = 2;
          break;
      }
      break;
    }
    if (!strcmp( pcmd, "Scan" ))
    {
      cmd.Id = Scan;
      cmd.P1 = ParsingCmdParam( p1 );
      switch (cmd.P1)
      {
        case 0:
          nFailure = 5;
          break;
        case ForScan: case ForAreaScan:
          cmd.P2 = (TCParam) ParsingXScanType( p2 );
          switch (cmd.P2)
          {
            case 0:
              nFailure = 5;
              break;
            case Omega2ThetaScan: case StandardScan:
              break;
            default:
              nFailure = 2;
              break;
          }
          break;
        default:
          nFailure = 2;
          break;
      }
      break;
    }
    if (!strcmp( pcmd, "AreaScan" ))
    {
      cmd.Id = AreaScan;
      cmd.P1 = ParsingCmdParam( p1 );
      switch (cmd.P1)
      {
        case 0:
          nFailure = 5;
          break;
        case ForAreaScan:
          cmd.P2 = (TCParam) ParsingXScanType( p2 );
          switch (cmd.P2)
          {
            case 0:
              nFailure = 5;
              break;
            case Omega2ThetaScan: case StandardScan:
              break;
            default:
              nFailure = 2;
              break;
          }
          break;
        default:
          nFailure = 2;
          break;
      }
      break;
    }
    if (!strcmp( pcmd, "ShowValue" ))
    {
      cmd.Id = ShowValue;
      cmd.P1 = ParsingCmdParam( p1 );
      switch (cmd.P1)
      {
        case 0:
          nFailure = 5;
          break;
        case Reflection: case Hwb:
          break;
        default:
          nFailure = 2;
          break;
      }
      break;
    }
    if (!strcmp( pcmd, "LoadPoint" ))
    {
      cmd.Id = LoadPoint;
      cmd.P1 = ParsingCmdParam( p1 );
      switch (cmd.P1)
      {
        case 0: 
          nFailure = 5;
          break;
        case Argument:
          cmd.P2 = (TCParam) atoi( p2 );
          if ((cmd.P2 > nMaxArg) || (cmd.P2 < 0))
            nFailure = 3;
          break;
        case Start: case Peak:
          break;
        default:
          nFailure = 2;
          break;
      }
      break;
    }
    if (!strcmp( pcmd, "SetWidth" ))
    {
      cmd.Id = SetWidth;
      if (0.0 != atof( p1 ))
        strcpy( cmd.P3, p1 );
      else
        nFailure = 2;
      break;
    }
    if (!strcmp( pcmd, "MoveToPoint" ))
    {
      cmd.Id = MoveToPoint;
      cmd.P1 = ParsingCmdParam( p1 );
      switch (cmd.P1) {
        case Start: case Peak: case Result: case LastGoal:
          break;
        case Relative:
          if (0.0 == atof( p2 ))
            nFailure = 5;
          else
            strcpy( cmd.P3, p2 );
          break;
        case 0:
          if (0.0 == atof( p1 ))
            nFailure = 5;
          else
            strcpy( cmd.P3, p1 );
          break;
        default:
          nFailure = 2;
          break;
      }
      break;
    }
    if (!strcmp( pcmd, "Calculate" ))
    {
      cmd.Id = Calculate;
      cmd.P1 = ParsingCmdParam( p1 );
      switch (cmd.P1)
      {
        case Middle: case Hwb: case Difference: case Opposite:
          break;
        default:
          nFailure = 2;
          break;
      }
      break;
    }
    if (!strcmp( pcmd, "Stop" ))
    {
      cmd.Id = Stop;
      break;
    }
    if (!strcmp( pcmd, "GotoLine" ))
    {
      cmd.Id = GotoLine;
      cmd.P1 = (TCParam) atof( p1 );
      if ((cmd.P1 <= 0) || (cmd.P1 > aMacroList[nMacroNumber].Length))
        nFailure = 2;
      break;
    }
    if (!strcmp( pcmd, "GotoIntensity" ))
    {
      cmd.Id = GotoIntensity;
      cmd.P1 = ParsingCmdParam( p1 );
      switch (cmd.P1)
      {
        case SmallSide: case LargeSide:
          if (0.0 != atof( p2 ))
          {
            strcpy( cmd.P3, p2 );
            break;
          }
          cmd.P2 = ParsingCmdParam( p2 );
          switch (cmd.P2)
          {
            case Interpolation: case BackMove:
              if (0.0 != atof( p3 ))
                strcpy( cmd.P3, strtok( p3, " " ) );
              else
              {
                nFailure = 5;
                break;
              }
              break;
            case 0:
              nFailure = 2;
              break;
            default:
               nFailure = 4;
               break;
          }
          break;
        case 0:
          nFailure = 2;
          break;
        default:
          nFailure = 5;
          break;
      }
      break;
    }
    if (!strcmp( pcmd, "ControlFlank" ))
    {
      cmd.Id = ControlFlank;
      break;
    }
    if (!strcmp( pcmd, "ChooseAxis" ))
    {
      cmd.Id = ChooseAxis;
      // mlParsingAxis ist in m_layer.h erklärt (Motoren)
      cmd.P1 = (TCParam) mlParsingAxis( p1 );
      if (!cmd.P1)
        nFailure = 2;
      break;
    }
    if (!strcmp( pcmd, "ChooseDevice" ))
    {
      cmd.Id = ChooseDevice;
      // in c_layer.h/cpp zu finden (Detektoren)
      cmd.P1 = (TCParam) dlParsingDevice( p1 );
      if (!cmd.P1)
        nFailure = 2;
      else
      {
        if (p2)
        {
          sprintf( cmd.P3, "%s ", p2 );
          if (p3)
            strcat( cmd.P3, p3 );
        }
      }
      break;
    }
    // unbekannter Makro-Befehl
    cmd.Id = Stop;
    nFailure = 1;
    break;
  } // while (1) ends here
  if (nFailure)
  {
    switch (nFailure) 
    {
      case 1:
        sprintf( buf, "Makrobefehl >%s< wird nicht unterstützt !", pcmd );
        break;
      case 2:
        sprintf( buf, "Parameter %s für >%s< wird nicht unterstützt !", p1, pcmd );
        break;
      case 3:
        sprintf( buf, "Parameter %s für >%s< wird nicht unterstützt !", p2, pcmd );
        break;
      case 4:
        sprintf( buf, "Parameter %s für >%s< wird nicht unterstützt !", p3, pcmd );
        break;
      case 5:
        sprintf( buf, "Parameter für >%s< sind unvollständig !", pcmd );
        break;
    }
    MessageBox( GetFocus(), buf, "Reading Macro", MBINFO );
    return FALSE;
  }
  return TRUE;
}


Zurück zu LoadMacro()

Startseite


Kay Schützler
Last modified: Tue Sep 21 13:21:26 MET DST 1999