4.3BSD/usr/contrib/icon/book/16/lgraph.icn

procedure lgraph(sgraph)
   local nodes, ndescr, nlist, a, name, i
   nodes := table()		# table of nodes
   sgraph ?
      while ndescr := tab(many(~';')) do {
         move(1)
         ndescr ? {		# process one node
            a := []		# new list goes in table
            nodes[tab(upto(':'))] := a
            move(1)
				# add value and names
            while put(a,tab(many(~','))) do
               move(1)
            }
         }
   every name := !nodes do	# change names to lists
      every i := 2 to *name do
         name[i] := nodes[name[i]]
   return nodes
end