-Jim_Interp *interp;
-command_context_t *active_cmd_ctx;
-
-static int new_int_array_element(Jim_Interp * interp, const char *varname, int idx, u32 val)
-{
- char *namebuf;
- Jim_Obj *nameObjPtr, *valObjPtr;
- int result;
-
- namebuf = alloc_printf("%s(%d)", varname, idx );
-
- nameObjPtr = Jim_NewStringObj(interp, namebuf, -1);
- valObjPtr = Jim_NewIntObj(interp, val );
- Jim_IncrRefCount(nameObjPtr);
- Jim_IncrRefCount(valObjPtr);
- result = Jim_SetVariable(interp, nameObjPtr, valObjPtr);
- Jim_DecrRefCount(interp, nameObjPtr);
- Jim_DecrRefCount(interp, valObjPtr);
- free(namebuf);
- // printf( "%s = 0%08x\n", namebuf, val );
- return result;
-}
-
-static int Jim_Command_mem2array(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
-{
- target_t *target;
- long l;
- u32 width;
- u32 len;
- u32 addr;
- u32 count;
- u32 v;
- const char *varname;
- u8 buffer[4096];
- int i,n,e,retval;
-
- /* argv[1] = name of array to receive the data
- * argv[2] = desired width
- * argv[3] = memory address
- * argv[4] = length in bytes to read
- */
- if( argc != 5 ){
- Jim_WrongNumArgs( interp, 1, argv, "varname width addr nelems" );
- return JIM_ERR;
- }
- varname = Jim_GetString( argv[1], &len );
- /* given "foo" get space for worse case "foo(%d)" .. add 20 */
-
- e = Jim_GetLong( interp, argv[2], &l );
- width = l;
- if( e != JIM_OK ){
- return e;
- }
-
- e = Jim_GetLong( interp, argv[3], &l );
- addr = l;
- if( e != JIM_OK ){
- return e;
- }
- e = Jim_GetLong( interp, argv[4], &l );
- len = l;
- if( e != JIM_OK ){
- return e;
- }
- switch(width){
- case 8:
- width = 1;
- break;
- case 16:
- width = 2;
- break;
- case 32:
- width = 4;
- break;
- default:
- Jim_SetResult(interp,
- Jim_NewEmptyStringObj(interp));
- Jim_AppendStrings( interp, Jim_GetResult(interp),
- "Invalid width param, must be 8/16/32", NULL );
- return JIM_ERR;
- }
- if( len == 0 ){
- Jim_SetResult(interp,
- Jim_NewEmptyStringObj(interp));
- Jim_AppendStrings( interp, Jim_GetResult(interp),
- "mem2array: zero width read?", NULL );
- return JIM_ERR;
- }
- if( (addr + (len * width)) < addr ){
- Jim_SetResult(interp,
- Jim_NewEmptyStringObj(interp));
- Jim_AppendStrings( interp, Jim_GetResult(interp),
- "mem2array: addr + len - wraps to zero?", NULL );
- return JIM_ERR;
- }
- /* absurd transfer size? */
- if( len > 65536 ){
- Jim_SetResult(interp,
- Jim_NewEmptyStringObj(interp));
- Jim_AppendStrings( interp, Jim_GetResult(interp),
- "mem2array: absurd > 64K item request", NULL );
- return JIM_ERR;
- }
-
- if( (width == 1) ||
- ((width == 2) && ((addr & 1) == 0)) ||
- ((width == 4) && ((addr & 3) == 0)) ){
- /* all is well */
- } else {
- char buf[100];
- Jim_SetResult(interp,
- Jim_NewEmptyStringObj(interp));
- sprintf( buf,
- "mem2array address: 0x%08x is not aligned for %d byte reads",
- addr, width );
-
- Jim_AppendStrings( interp, Jim_GetResult(interp),
- buf , NULL );
- return JIM_ERR;
- }