from ring.cc
| 5119 | |
| 5120 | // from ring.cc |
| 5121 | void rSetHdl(idhdl h) |
| 5122 | { |
| 5123 | ring rg = NULL; |
| 5124 | if (h!=NULL) |
| 5125 | { |
| 5126 | // Print(" new ring:%s (l:%d)\n",IDID(h),IDLEV(h)); |
| 5127 | rg = IDRING(h); |
| 5128 | if (rg==NULL) return; //id <>NULL, ring==NULL |
| 5129 | omCheckAddrSize((ADDRESS)h,sizeof(idrec)); |
| 5130 | if (IDID(h)) // OB: ???? |
| 5131 | omCheckAddr((ADDRESS)IDID(h)); |
| 5132 | rTest(rg); |
| 5133 | } |
| 5134 | else return; |
| 5135 | |
| 5136 | // clean up history |
| 5137 | if (currRing!=NULL) |
| 5138 | { |
| 5139 | if(sLastPrinted.RingDependend()) |
| 5140 | { |
| 5141 | sLastPrinted.CleanUp(); |
| 5142 | } |
| 5143 | |
| 5144 | if (rg!=currRing)/*&&(currRing!=NULL)*/ |
| 5145 | { |
| 5146 | if (rg->cf!=currRing->cf) |
| 5147 | { |
| 5148 | denominator_list dd=DENOMINATOR_LIST; |
| 5149 | if (DENOMINATOR_LIST!=NULL) |
| 5150 | { |
| 5151 | if (TEST_V_ALLWARN) |
| 5152 | Warn("deleting denom_list for ring change to %s",IDID(h)); |
| 5153 | do |
| 5154 | { |
| 5155 | n_Delete(&(dd->n),currRing->cf); |
| 5156 | dd=dd->next; |
| 5157 | omFreeBinAddr(DENOMINATOR_LIST); |
| 5158 | DENOMINATOR_LIST=dd; |
| 5159 | } while(DENOMINATOR_LIST!=NULL); |
| 5160 | } |
| 5161 | } |
| 5162 | } |
| 5163 | } |
| 5164 | |
| 5165 | // test for valid "currRing": |
| 5166 | if ((rg!=NULL) && (rg->idroot==NULL)) |
| 5167 | { |
| 5168 | ring old=rg; |
| 5169 | rg=rAssure_HasComp(rg); |
| 5170 | if (old!=rg) |
| 5171 | { |
| 5172 | rKill(old); |
| 5173 | IDRING(h)=rg; |
| 5174 | } |
| 5175 | } |
| 5176 | /*------------ change the global ring -----------------------*/ |
| 5177 | rChangeCurrRing(rg); |
| 5178 | currRingHdl = h; |