4.3BSD/usr/contrib/icon/book/f/uscore.icn

procedure uscore(s)
   static labels, trans, max
   initial {
      labels := "1"
      trans := "_\b1"
      max := *labels
      trans := uscore(string(&cset -- '\b_'))
      labels := string(&cset -- '\b_')
      max := *labels
      }
   if *s <= max then
      return map(left(trans,3 * *s),left(labels,*s),s)
   else return uscore(left(s,*s - max)) ||
      map(trans,labels,right(s,max))
end