DIRECTORY CDebugDefs USING [CDCopyRead, Handle, LabelStack], CodeDefs USING [codeType, LabelInfoIndex, LabelInfoNull, LabelInfoRecord], ConvertUnsafe USING [SubString], IO USING [PutF, RopeFromROS, ROS, STREAM], RESOut USING [ Log10, PChar, PCr, PDecimal, PNext, PNextNull, PNextUnsigned, PRope, PUnsigned], Rope USING [ROPE], STDebugDefs USING [PSTSubString, ShowLinks, SubStringForHash, TableBase], Table USING [Base]; CDebugLabels: PROGRAM IMPORTS CDebugDefs, IO, RESOut, STDebugDefs EXPORTS CDebugDefs = BEGIN OPEN STDebugDefs, CodeDefs, CDebugDefs, RESOut; ROPE: TYPE = Rope.ROPE; PutAsLabelInfoIndex: PUBLIC PROCEDURE [h: Handle, lii: CodeDefs.LabelInfoIndex] = BEGIN lir: LabelInfoRecord; cb: Table.Base _ TableBase[h, codeType]; CDCopyRead[h: h, to: @lir, from: @cb[lii], nwords: SIZE[LabelInfoRecord]]; PCr[h]; PRope[h, "cb["]; PDecimal[h, LOOPHOLE[lii]]; PRope[h, "] = "]; IF lir.free THEN BEGIN PRope[h, "FREE!"]; RETURN END; PRope[h, "level: "]; PUnsigned[h, lir.catchLevel]; WITH li: lir SELECT FROM named => BEGIN desc: ConvertUnsafe.SubString; desc _ SubStringForHash[h, li.hti]; PNext[h, "hti: ", Log10[li.hti]+3+desc.length]; PUnsigned[h, li.hti]; PRope[h, " ("]; PSTSubString[h, desc]; PChar[h, ')]; PNextUnsigned[h, "cci", li.cci]; END; stmt => BEGIN PNextUnsigned[h, "RETRY", li.retry]; PNextUnsigned[h, "CONT", li.continue]; END; loop => BEGIN PNextUnsigned[h, "LOOP", li.loop]; PNextUnsigned[h, "EXIT", li.exit]; END; ENDCASE; IF STDebugDefs.ShowLinks[h] THEN PNextNull[h, "thread", lir.thread, LabelInfoNull]; END; PutLabelState: PUBLIC PROCEDURE [h: Handle] = BEGIN OPEN CodeDefs; lii: LabelInfoIndex; lir: LabelInfoRecord; cb: Table.Base = STDebugDefs.TableBase[h, codeType]; desc: ConvertUnsafe.SubString; extra: CARDINAL; first: BOOLEAN _ TRUE; ros: IO.STREAM _ IO.ROS[]; name: ROPE; PCr[h]; PRope[h, "labelStack: "]; lii _ LabelStack[h]; IF lii = LabelInfoNull THEN BEGIN PRope[h, "empty"]; RETURN END; WHILE lii # LabelInfoNull DO extra _ 0; CDCopyRead[h: h, to: @lir, from: @cb[lii], nwords: SIZE[LabelInfoRecord]]; ros.PutF["(%d) ", [cardinal[LONG[LOOPHOLE[lii, CARDINAL]]]]]; name _ ros.RopeFromROS[]; WITH li: lir SELECT FROM named => BEGIN desc _ SubStringForHash[h, li.hti]; extra _ desc.length + 2 + Log10[LOOPHOLE[li.hti]]; END; loop => extra _ 6 + Log10[LOOPHOLE[li.loop]]; stmt => extra _ 7 + Log10[LOOPHOLE[li.retry]]; ENDCASE; IF first THEN BEGIN PRope[h, name]; first _ FALSE; END ELSE PNext[h, name, extra]; WITH li: lir SELECT FROM named => BEGIN PSTSubString[h, desc]; PRope[h, ": "]; PUnsigned[h, LOOPHOLE[li.cci]]; END; loop => BEGIN PRope[h, "LOOP: "]; PUnsigned[h, LOOPHOLE[li.loop]]; PNextUnsigned[h, "EXIT", li.exit]; END; stmt => BEGIN PRope[h, "RETRY: "]; PUnsigned[h, LOOPHOLE[li.retry]]; PNextUnsigned[h, "CONT", li.continue]; END; ENDCASE; lii _ lir.thread; ENDLOOP; END; END. dCDebugLabels.mesa Edited by Sweet, 11-Sep-81 16:47:49 Sweet January 31, 1986 2:52:08 pm PST ΚΠ˜šœ6™6Icode™%—J˜šΟk ˜ Jšœ œ"˜2Jšœ œ<˜JJšœœ ˜ Jšœœœœ˜*šœœ˜J˜EJ˜ —Jšœœœ˜Jšœ œ8˜IJšœœ˜—J˜šœœ˜Jšœ œ˜+Jšœ ˜Jšœœ+˜5Jšœœœ˜—˜šΟnœœ œ,˜QJš˜J˜J˜(J˜Jšœœœœ˜JJ˜Jšœ œ˜J˜šœ ˜Jš˜J˜Jš˜Jšœ˜—J˜2šœ œ˜˜Jš˜Jšœ˜J˜#J˜/J˜%J˜$J˜ Jšœ˜—˜Jš˜J˜$J˜&Jšœ˜—˜Jš˜J˜"J˜"Jšœ˜—Jšœ˜—Jšœœ3˜SJšœ˜——˜šž œœ œ˜-Jšœœ ˜J˜J˜J˜4Jšœ˜Jšœœ˜Jšœœœ˜Jš œœœœœ˜Jšœœ˜ J˜J˜J˜J˜šœ˜Jšœœœ˜$—šœ˜J˜ Jšœ3œ˜JJšœœœœ˜=J˜šœ œ˜˜ Jš˜J˜#Jšœ œ ˜2Jšœ˜—Jšœœ ˜-Jšœœ ˜.Jšœ˜—šœ˜ Jšœœ˜(—Jšœ˜šœ œ˜˜ Jš˜J˜J˜Jšœ œ ˜Jšœ˜—˜Jš˜J˜Jšœ œ ˜ J˜"Jšœ˜—˜Jš˜J˜Jšœ œ ˜!J˜&Jšœ˜—Jšœ˜—J˜Jšœ˜—Jšœ˜——˜Jšœ˜—J˜—…— "V