- /* is this old syntax? */
- /* To determine: We have to peek at argv[0]*/
- cp = Jim_GetString( goi.argv[0], NULL );
- for( x = 0 ; target_types[x] ; x++ ){
- if( 0 == strcmp(cp,target_types[x]->name) ){
- break;
- }
- }
- if( target_types[x] ){
- /* YES IT IS OLD SYNTAX */
- Jim_Obj *new_argv[10];
- int new_argc;
-
- /* target_old_syntax
- *
- * It appears that there are 2 old syntaxes:
- *
- * target <typename> <endian> <chain position> <variant>
- *
- * and
- *
- * target <typename> <endian> <reset mode> <chain position> <variant>
- *
- */
-
- /* The minimum number of arguments is 4 */
- if( argc < 4 ){
- Jim_WrongNumArgs( interp, 1, argv, "[OLDSYNTAX] ?TYPE? ?ENDIAN? ?CHAIN-POSITION? ?VARIANT?");
- return JIM_ERR;
- }
-
- /* the command */
- new_argv[0] = argv[0];
- new_argv[1] = Jim_NewStringObj( interp, "create", -1 );
- {
- char buf[ 30 ];
- sprintf( buf, "target%d", new_target_number() );
- new_argv[2] = Jim_NewStringObj( interp, buf , -1 );
- }
- new_argv[3] = goi.argv[0]; /* typename */
- new_argv[4] = Jim_NewStringObj( interp, "-endian", -1 );
- new_argv[5] = goi.argv[1];
- new_argv[6] = Jim_NewStringObj( interp, "-chain-position", -1 );
-
- /* If goi.argv[2] is not a number, we need to skip it since it is the reset mode. */
- jim_wide w;
- int chain_position_argv = 2;
- if (JIM_ERR == Jim_GetWide(interp, goi.argv[chain_position_argv], &w)) {
- if (chain_position_argv + 1 < goi.argc) {
- chain_position_argv += 1;
- } else {
- Jim_WrongNumArgs( interp, 1, argv, "[OLDSYNTAX] ?TYPE? ?ENDIAN? ?RESET? ?CHAIN-POSITION? ?VARIANT?");
- return JIM_ERR;
- }
- }
-
- new_argv[7] = goi.argv[chain_position_argv];
-
- /* Only provide a variant configure option if there was a variant specified */
- if (chain_position_argv + 1 < goi.argc) {
- new_argv[8] = Jim_NewStringObj( interp, "-variant", -1 );
- new_argv[9] = goi.argv[chain_position_argv + 1];
- new_argc = 10;
- } else {
- new_argc = 8;
- }
-
- /*
- * new arg syntax:
- * argv[0] = command
- * argv[1] = create
- * argv[2] = cmdname
- * argv[3] = typename
- * argv[4] = -endian
- * argv[5] = little
- * argv[6] = -position
- * argv[7] = NUMBER
- * argv[8] = -variant
- * argv[9] = "somestring"
- */
-
- /* don't let these be released */
- for( x = 0 ; x < new_argc ; x++ ){
- Jim_IncrRefCount( new_argv[x]);
- }
- /* call our self */
- LOG_DEBUG("Target OLD SYNTAX - converted to new syntax");
-
- r = jim_target( goi.interp, new_argc, new_argv );
-
- /* release? these items */
- for( x = 0 ; x < new_argc ; x++ ){
- Jim_DecrRefCount( interp, new_argv[x] );
- }
- return r;
- }
-