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; }