De naam atlantisd is verkeerd. Het is geen daemon. Een
atlantis daemon zou op verzoek van een speler een atlantis
server moeten kreeeren voor een gewenst bord en aantal
spelers. Het daemon moet daarbij een vrij portnummer kiezen
en dit aan de spelers vertellen (a-la talk). Wie de andere
spelers zijn moet het daemon vragen aan de speler die om
het kreeeren van de server heeft gevraagd.

Functie "pln" (in commands.c) wordt nergens gebruikt. Deze
functie lijkt vervangen te zijn door "user". Pln lijkt me
ernstig "outdated".

In de reacties van de server staan soms 1, soms 2 spaties
achter het drie-cijferige nummer. Op sommige plaatsen staat
voor een dubbele punt een spatie.

In de verbose versie van de reacties van de server is altijd
sprake van "stones", behalve op een plaats waar gesproken
wordt van "pieces". In commentaar is soms sprake van "coins"

De client komt in problemen wanneer meer dan 20 stones op
een veld worden geplaatst. Het theoretisch maximum ligt
rond de 40. Het practisch maximum op 10.

Berekening van de score is niet correct wanneer op de grens
van een gebied nog een bron van een andere speler staat.
Zulke gebieden zijn nog betwist en derhalve niet toe te
rekenen aan een speler. Verbetering kost een of twee regels
code.

De c-layout is verschikkelijk en vanwege het gebruik van
enkele krachtige macros niet direct met indent op te
knappen... Maar dit _kan_ verbeterd worden:
De ALLSECTORS en ALLHEXS macros zouden gemodificeerd kunnen
worden zodat de code wel door indent ge-reformatteerd kan
worden:
#define ALLSECTORS(i,j) \
	j = 0; j < MAXS; j++) \
		for(i = 0; i < MAXS; i++) \
			if(sectors[i][j]
Deze macro kan gebruikt worden in
	for(ALLSECTORS(i,j))
		statement;
Hier heeft indent geen moeite mee (ik heb 't getest).
Op soortgelijke wijze kan ALLHEXS worden vervangen door:
#define ALLHEXS(x,y) \
	x = 0; x < MAXB; x++) \
		for(y = 0; y < MAXB; y++) \
			if(ISBOARD(x,y)
In jouw rijtje ontbreekt trouwens de macro ALLDIRS:
#define ALLDIRS(k) \
	k = 0; k < 7; k++
Tenslotte moet de macro "ever" gedefinieerd worden als
#define ever	;;
Uiteraard moet op elke plaats waar deze macros gebruikt worden
de code iets worden aangepast, maar dat komt de leesbaarheid
alleen maar ten goede.

Het is niet fraai dat de server aan de clients vertelt dat voor
het board een array nodig is die groter is dan feitelijk nodig.
De server zou de minimaal noodzakelijke range voor x en y moeten
bepalen en die waarde moeten doorgeven.

#define macros die exploderen tot meerdere c-statements
moeten die statements tussen {} groeperen, zodat 
if(expr)
	macro;
geen ongewenste effecten geeft. Een voorbeeld is de macro
CONVERTXYIJ in atlantisc.c.

In de beschrijving van de toestand van het veld wordt de
letter 'k' gebruikt voor een crater, de letter 'b' voor
een source en de letter 's' voor player. De rest van het
programma is wel redelijk op de engelse taal gebaseerd
('e' voor empty). Als we het eens zijn over de woorden
source, crater en player, dan zouden die letters moeten
worden aangepast. Nu kan 't nog... Eigenlijk zouden die
letters macros moeten zijn. Dan krijg je in de client
code zoals:
	case CRATER:
en in de server (in getboard):
	cprintf("%c ", CRATER);
Kortom, iemand die de code probeert te begrijpen hoeft niet
meer te ontdekken dat het over een krater gaat.

Tenslotte zitten er nogal wat nederlandse woorden in de
namen van functies en macros.
