--- /dev/null
+#define BOOKENDS_C\r
+\r
+#include <stdio.h>\r
+#include <fastgraf.h>\r
+#include <alloc.h>\r
+#include <stdlib.h>\r
+#include "roads.h"\r
+#include "fx.h" /* FOR FADING */\r
+#include "version.h" /* FOR HEADER */\r
+\r
+extern int far *topography; /* BACKGROUND TILE LIST (ARRAY) */\r
+extern int far *terrain; /* FOREGROUND TILE LIST (ARRAY) */\r
+extern int viewpage; /* CURRENTLY VIEWED PAGE */\r
+\r
+int startup_vmode=-1; /* STARTUP VIDEO MODE TO RETURN TO AT PROGRAM END */\r
+\r
+/*\r
+ *\r
+ * Initializes/Sets-up the video mode and paging.\r
+ *\r
+ */\r
+void init_video (void)\r
+{\r
+ /* INITIALIZE VIDEO MODE */\r
+ if (fg_testmode (VMODE, VPAGES)==0)\r
+ {\r
+ printf ("Sorry, your video card does not support mode %d.\n", VMODE);\r
+ exit (1);\r
+ }\r
+\r
+ startup_vmode=fg_getmode();\r
+ fg_setcolor(0);\r
+ fg_setmode (VMODE);\r
+ fg_erase();\r
+\r
+ /* SETUP SPRITE IMAGES */\r
+ fg_setpage (TILEPAGE);\r
+ fg_erase();\r
+ fg_showgif (IMAGES, 0);\r
+ fg_setpage (viewpage);\r
+ fg_erase();\r
+ fg_tcdefine (0,1); /* TREAT COLOR 0 AS TRANSPARENT */\r
+}\r
+\r
+/*\r
+ *\r
+ * "Officially" shuts down the program. Restores video, frees\r
+ * allocated data including fonts, unhooks Sound Blaster,\r
+ * and (optionally) exits with a message and errorcode\r
+ *\r
+ */\r
+void program_shutdown (char *msg, int errcode)\r
+{\r
+ fg_kbinit(0); /* UNLATCH LOW-LEVEL KEYBOARD HANDLER */\r
+\r
+ /* FREE DATA */\r
+ if (topography!=NULL) farfree (topography);\r
+ if (terrain!=NULL) farfree (terrain);\r
+\r
+ /* RESTORE ORIGINAL VIDEO MODE TO USER */\r
+ if (startup_vmode!=-1)\r
+ {\r
+ fade_out_all ();\r
+ fg_setmode (startup_vmode);\r
+ fg_reset();\r
+ }\r
+\r
+ /* FREE FONTS AND SOUND BLASTER SOMEWHERE IN HERE */\r
+\r
+ printf (HEADER); /* PRINT HEADER */\r
+\r
+ /* REPORT MESSAGE */\r
+ if (*msg!=NULL)\r
+ printf ("ROADS: %s\n", msg);\r
+\r
+ /* QUIT WITH ERROR CODE, IF SUPPLIED ONE */\r
+ if (errcode!=-1)\r
+ exit (errcode);\r
+\r
+ /* OTHERWISE, RETURN TO CALLER WHO WILL HANDLE EXITING */\r
+ else return;\r
+}\r
+\r
+/*\r
+ *\r
+ * Initialize dynamic data, which is freed with program_shutdown()\r
+ *\r
+ */\r
+void init_data (void)\r
+{\r
+ topography=farcalloc (WORLD_TILES_TOTAL,sizeof (int));\r
+ terrain=farcalloc (WORLD_TILES_TOTAL,sizeof (int));\r
+\r
+ if (topography==NULL || terrain==NULL)\r
+ program_shutdown ("Not enough memory -- It's not my fault, I swear!", 1);\r
+}\r
+\r