Just deleting the option to play again seems easier than figuring out why a loop won't work like any normal program. Just push the up arrow and hit enter if you want to play again.
Index: io.c =================================================================== RCS file: /cvs/src/games/phantasia/io.c,v retrieving revision 1.6 diff -u -p -r1.6 io.c --- io.c 12 Jul 2014 03:41:04 -0000 1.6 +++ io.c 5 Nov 2015 23:23:55 -0000 @@ -217,7 +217,7 @@ inputoption() / / RETURN VALUE: none / -/ MODULES CALLED: fork(), exit(), wait(), death(), alarm(), execl(), wmove(), +/ MODULES CALLED: fork(), exit(), wait(), death(), alarm(), wmove(), / signal(), getenv(), wclear(), crmode(), clearok(), waddstr(), / cleanup(), wrefresh(), leavegame(), getanswer() / Index: misc.c =================================================================== RCS file: /cvs/src/games/phantasia/misc.c,v retrieving revision 1.16 diff -u -p -r1.16 misc.c --- misc.c 12 Jul 2014 03:41:04 -0000 1.16 +++ misc.c 5 Nov 2015 23:24:20 -0000 @@ -827,7 +827,7 @@ leavegame() / RETURN VALUE: none / / MODULES CALLED: freerecord(), enterscore(), more(), exit(), fread(), -/ fseek(), execl(), fopen(), floor(), wmove(), drandom(), wclear(), strcmp(), +/ fseek(), fopen(), floor(), wmove(), drandom(), wclear(), strcmp(), / fwrite(), fflush(), printw(), strlcpy(), fclose(), waddstr(), cleanup(), / fprintf(), wrefresh(), getanswer(), descrtype() / @@ -928,18 +928,7 @@ death(how) clear(); move(10, 0); addstr(deathmesg[(int) ROLL(0.0, (double) sizeof(deathmesg) / sizeof(char *))]); - addstr("Care to give it another try ? "); - ch = getanswer("NY", FALSE); - - if (ch == 'Y') { - cleanup(FALSE); - execl(_PATH_GAMEPROG, "phantasia", "-s", - (Wizard ? "-S" : (char *)NULL), (char *)NULL); - exit(0); - /* NOTREACHED */ - } cleanup(TRUE); - /* NOTREACHED */ } /**/ /************************************************************************