size_type get_cstr_entries(std::string label, char ***pstrs, CommandCtx *ctx) { std::string nentry; std::string item; prompt_for("# " + label + "s", &nentry, ctx); unsigned long n = 0; try{ n = std::stoul(nentry); }catch(...){ std::cerr<< std::endl << "INVALID INPUT" << std::endl << std::endl; *pstrs = nullptr; return 0; } try{ *pstrs = NewStrings(n, TOSDB_MAX_STR_SZ); for(size_type i = 0; i < n; ++i){ prompt_b<< ctx->name; prompt<< label << "(" << (i+1) << ") " >> item; strcpy_s((*pstrs)[i], item.length() + 1, item.c_str()); } }catch(...){ DeleteStrings(*pstrs, n); *pstrs = nullptr; return 0; } return n; }
// ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ // ¥ CStrArrayStore::AllocateStorage /*e*/ // ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ // creates new elements pointing to an empty CCString. The array is completely destructed by the stack frame upon it's // deletion void CStrArrayStore::AllocateStorage( CProgram &ioState, UInt32 inNumElements) { /* mArray.InsertItemsAt(inNumElements,LArray::index_Last,(CCString*)0); for (ArrayIndexT index=1; index<=inNumElements; index++) { CCString *str=new CCString; ThrowIfMemFull_(str); mArray[index]=str; }*/ UInt32 wasCount=mArray.GetCount(); if (inNumElements>wasCount) // add new ones { mArray.InsertItemsAt(inNumElements-mArray.GetCount(),LArray::index_Last,(CCString*)0); // zero the ones which existed CreateStrings(inNumElements-wasCount,wasCount+1); ClearStrings(wasCount,1); } else if (inNumElements<wasCount) // delete old ones { DeleteStrings(wasCount-inNumElements,inNumElements+1); mArray.RemoveItemsAt(wasCount-inNumElements,inNumElements+1); ClearStrings(inNumElements,1); } else ClearStrings(wasCount,1); }