Wenn es dir nur darum geht, ein einfaches Beispielprogramm zu schreiben, dann braucht man dabei nicht allzuviele C-Kentnisse.
Als Sender kannst du ja die geposteten Routinen verwenden.
Als Empfänger schaltest du am Besten den TWI-Interrupt an. Dieser wird aufgerufen, wenn ein TWI-Ereignis aufgetreten ist. Dann wertest du in diesem Interrupt den Ereigniscode aus (im TWSR) und entscheidest, was getan werden soll (Was getan werden kann, steht im Datenblatt, da gibts ganze Tabellen für die Fehlercodes). Das gute an TWI ist, dass der Slave die SCL-Leitung solange auf LOW hält, bis er fertig ist, was dazu führt, dass der Interrupt nicht unbedingt besonders schnell ausgeführt werden muss.
Im Grunde genommen kann man den Interrupt fast ausschließlich mit if-else Anweisungen schreiben. Übersichtlicher wird es mit einer switch-Anweisung.
Schreib doch mal auf, wie dein Empfänger auf die einzelnen Ereignisse reagieren soll. Wenn du das nicht schaffst, in C-code zu übersetzten, helfen wir dir auf die Sprünge.

Gruß, Yaro