VARS VAR N CODE st 9,[N] ENDCODE PROCS PROC insert ( t i ) CODE ld [t],%t0 cmp %t0,0 be L0 ba L1 L0: st 3,[$a0] call PCAT$alloc mov %o0,%t1 ld [i],%t3 add %t1,0,%t2 st %t3,[%t2] add %t1,1,%t2 st 0,[%t2] add %t1,2,%t2 st 0,[%t2] mov %t1,%i0 return ba L2 L1: ld [t],%t5 cmp %t5,0 bne L6 call PCAT$nil_pointer L6: add %t5,0,%t5 ld [%t5],%t4 ld [i],%t6 cmp %t4,%t6 ble L3 ba L4 L3: st 3,[$a0] call PCAT$alloc mov %o0,%t7 ld [t],%t10 cmp %t10,0 bne L7 call PCAT$nil_pointer L7: add %t10,0,%t10 ld [%t10],%t9 add %t7,0,%t8 st %t9,[%t8] ld [t],%t12 cmp %t12,0 bne L8 call PCAT$nil_pointer L8: add %t12,1,%t12 ld [%t12],%t11 add %t7,1,%t8 st %t11,[%t8] ld [t],%t15 cmp %t15,0 bne L9 call PCAT$nil_pointer L9: add %t15,2,%t15 ld [%t15],%t14 ld [i],%t16 st %t16,[$a1] st %t14,[$a0] call insert mov %o0,%t13 add %t7,2,%t8 st %t13,[%t8] mov %t7,%i0 return ba L5 L4: st 3,[$a0] call PCAT$alloc mov %o0,%t17 ld [t],%t20 cmp %t20,0 bne L10 call PCAT$nil_pointer L10: add %t20,0,%t20 ld [%t20],%t19 add %t17,0,%t18 st %t19,[%t18] ld [t],%t23 cmp %t23,0 bne L11 call PCAT$nil_pointer L11: add %t23,1,%t23 ld [%t23],%t22 ld [i],%t24 st %t24,[$a1] st %t22,[$a0] call insert mov %o0,%t21 add %t17,1,%t18 st %t21,[%t18] ld [t],%t26 cmp %t26,0 bne L12 call PCAT$nil_pointer L12: add %t26,2,%t26 ld [%t26],%t25 add %t17,2,%t18 st %t25,[%t18] mov %t17,%i0 return L5: L2: return ENDCODE PROCS PROC readtree ( ) VARS VAR i CODE st 0,[i] ENDCODE VARS VAR t CODE st 0,[t] ENDCODE VARS VAR a CODE st 0,[a] ENDCODE CODE L0: ld [i],%t0 ld [N],%t1 cmp %t0,%t1 bl L1 ba L2 L1: call PCAT$read_int st %o0,[a] ld [t],%t3 ld [a],%t4 st %t4,[$a1] st %t3,[$a0] call insert mov %o0,%t2 st %t2,[t] ld [i],%t5 add %t5,1,%t6 st %t6,[i] ba L0 L2: ld [t],%t7 mov %t7,%i0 return return ENDCODE PROCS PROC writetree ( t ) CODE ld [t],%t0 cmp %t0,0 be L0 ba L1 L0: return ba L2 L1: ld [t],%t2 cmp %t2,0 bne L3 call PCAT$nil_pointer L3: add %t2,1,%t2 ld [%t2],%t1 st %t1,[$a0] call writetree ld [t],%t4 cmp %t4,0 bne L4 call PCAT$nil_pointer L4: add %t4,0,%t4 ld [%t4],%t3 st %t3,[$a0] call PCAT$write_int call PCAT$write_newline ld [t],%t6 cmp %t6,0 bne L5 call PCAT$nil_pointer L5: add %t6,2,%t6 ld [%t6],%t5 st %t5,[$a0] call writetree L2: return ENDCODE VARS VAR t CODE st 0,[t] ENDCODE CODE call readtree mov %o0,%t0 st %t0,[t] ld [t],%t1 st %t1,[$a0] call writetree return ENDCODE