int cmd_memory(char *param) { displayString(TEXT_MEMORY_ENVIRONMENT , mcb_length(env_glbSeg), env_freeCount(env_glbSeg)); displayString(TEXT_MEMORY_CONTEXT , mcb_length(ctxt), env_freeCount(ctxt)); displayTag(TEXT_MEMORY_CTXT_ALIAS, CTXT_TAG_ALIAS); displayTag(TEXT_MEMORY_CTXT_HISTORY, CTXT_TAG_HISTORY); displayTag(TEXT_MEMORY_CTXT_DIRSTACK, CTXT_TAG_DIRSTACK); displayTag1(TEXT_MEMORY_CTXT_LASTDIR, CTXT_TAG_LASTDIR); /* displayTag1(TEXT_MEMORY_CTXT_BATCH, CTXT_TAG_BATCH); not used, yet -- 2001/06/11 ska*/ displayTag1(TEXT_MEMORY_CTXT_SWAPINFO, CTXT_TAG_SWAPINFO); displayString(TEXT_MEMORY_HEAP, (unsigned long)coreleft()); return 0; }
int cmd_memory(char *param) { displayString(TEXT_MEMORY_ENVIRONMENT , mcb_length(env_glbSeg), env_freeCount(env_glbSeg)); displayString(TEXT_MEMORY_CONTEXT , mcb_length(ctxtSegm), env_freeCount(ctxtSegm)); displayTag(TEXT_MEMORY_CTXT_ALIAS, CTXT_TAG_ALIAS); displayTag(TEXT_MEMORY_CTXT_HISTORY, CTXT_TAG_HISTORY); displayTag(TEXT_MEMORY_CTXT_DIRSTACK, CTXT_TAG_DIRSTACK); displayTag1(TEXT_MEMORY_CTXT_LASTDIR, CTXT_TAG_LASTDIR); displayTag1(TEXT_MEMORY_CTXT_ARG, CTXT_TAG_ARG); displayTag1(TEXT_MEMORY_CTXT_SWAPINFO, CTXT_TAG_SWAPINFO); displayTag1(TEXT_MEMORY_CTXT_EXEC, CTXT_TAG_EXEC); displayTag1(TEXT_MEMORY_CTXT_STRING, CTXT_TAG_STRING); displayTag2(TEXT_MEMORY_CTXT_FLAG, CTXT_TAG_FLAG); displayTag2(TEXT_MEMORY_CTXT_IVAR, CTXT_TAG_IVAR); displayString(TEXT_MEMORY_HEAP, (unsigned long)coreleft(), getFree); displaySize(TEXT_MEMORY_DOSMEM, DOSalloc(0, 0x80 | 0x10)); return 0; }
int chgCtxt(const Context_Tag tag, const char * const name, const char * const value) { word segm, ofs; int newlen; assert(name); ctxtCheckInfoTag(tag); segm = ctxtFromTag(tag); assert(segm); newlen = value? strlen(name) + strlen(value) + 2: 0; if((ofs = env_findVar(segm, name)) != (word)-1) newlen -= env_varlen(segm, ofs); /* Make sure the context has enough room to add the value to */ if(newlen > 0) { /* contents size will grow */ ctxt_info_t *hinfo, *dinfo; /* aliases may not exceed sizemax */ if(tag == CTXT_TAG_ALIAS) { if(CTXT_INFO(CTXT_TAG_ALIAS, sizemax) - CTXT_INFO(CTXT_TAG_ALIAS, sizecur) < newlen) { error_alias_out_of_memory(); return E_NoMem; } } /* Otherwise a removeable entry is removed; those are: oldest item of history oldest item of dirstack */ hinfo = segm == ctxtFromTag(CTXT_TAG_HISTORY) ? &CTXT_INFO_STRUCT(CTXT_TAG_HISTORY): 0; dinfo = segm == ctxtFromTag(CTXT_TAG_DIRSTACK) ? &CTXT_INFO_STRUCT(CTXT_TAG_DIRSTACK): 0; while(env_freeCount(segm) < newlen) { /* There are two structures that can shrink: history & dirstack */ if(hinfo && (hinfo->c_sizecur <= hinfo->c_sizemax /* inconsitency of redundant info */ || hinfo->c_nummin >= hinfo->c_nummax)) /* in range -> ignore */ hinfo = 0; if(dinfo && (dinfo->c_sizecur <= dinfo->c_sizemax /* inconsitency of redundant info */ || dinfo->c_nummin >= dinfo->c_nummax)) /* in range -> ignore */ dinfo = 0; if(hinfo && dinfo) { /* Choose one */ if(weight(hinfo) < weight(dinfo)) ctxtGet(1, CTXT_TAG_DIRSTACK, ++dinfo->c_nummin, 0); else ctxtGet(1, CTXT_TAG_HISTORY, ++hinfo->c_nummin, 0); } else if(dinfo) ctxtGet(1, CTXT_TAG_DIRSTACK, ++dinfo->c_nummin, 0); else if(hinfo) ctxtGet(1, CTXT_TAG_HISTORY, ++hinfo->c_nummin, 0); else { /* no space left */ error_context_out_of_memory(); return E_NoMem; } } } /* return values 1 and 3 are OK */ switch(env_change(segm, name, value)) { case 2: /* variable to delete not found <-> no problem */ case 1: case 3: /* var replaced | deleted | inserted ==> OK */ CTXT_INFO(tag, sizecur) += newlen; return 0; case 0: /* Cannot insert */ dprintf(("chgCtxt(): out-of-mem shouldn't occure here!\n")); error_context_out_of_memory(); return E_NoMem; default: return E_Syntax; } }