Get child item (Scilab gateway) — How to get the address of a list child.
SciErr getListItemAddress(void* _pvCtx, int* _piAddress, int _iItemNum, int** _piItemAddress)
Scilab environment pointer, pass in "pvApiCtx" provided by api_scilab.h.
Address of the list.
Item number.
Return address of the item.
Error structure where is stored errors messages history and first error number.
int get_list_info(int* _piAddress); void insert_indent(void); static int iLocalTab = 0; int common_list(char *fname,unsigned long fname_len) { SciErr sciErr; int *piAddr = NULL; CheckRhs(1,1); sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } get_list_info(piAddr); LhsVar(1) = 0; return 0; } int get_list_info(int* _piAddress) { SciErr sciErr; int i = 0; int iRet = 0; int iItem = 0; //get list item number, failed if variable is not a kind of list sciErr = getListItemNumber(pvApiCtx, _piAddress, &iItem); if(sciErr.iErr) { printError(&sciErr, 0); sciprint("This variable is not a list"); return 0; } sciprint("List (%d items) -> address : 0x%08X) : \n", iItem, _piAddress); for(i = 0 ; i < iItem ; i++) { int iType = 0; int* piAddrChild = NULL; sciErr = getListItemAddress(pvApiCtx, _piAddress, i + 1, &piAddrChild); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } sciErr = getVarType(pvApiCtx, piAddrChild, &iType); if(sciErr.iErr) { printError(&sciErr, 0); return 0; } if(iType == sci_list || iType == sci_tlist || iType == sci_mlist) { insert_indent(); sciprint("Child %d -> ", i + 1); iLocalTab++; iRet = get_list_info(piAddrChild); iLocalTab--; if(iRet) { return 1; } } else { insert_indent(); sciprint("Child %d -> address : 0x%08X\n", i + 1, piAddrChild); } } return 0; } void insert_indent(void) { int i = 0; for(i = 0 ; i < iLocalTab ; i++) { sciprint("\t"); } }