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