]> 4ch.mooo.com Git - 16.git/blobdiff - 16/keen456/KEEN4-6/CK_TEXT.C
added keen 4-6 rebuild code for reference.... i need to stop doing this... xD
[16.git] / 16 / keen456 / KEEN4-6 / CK_TEXT.C
diff --git a/16/keen456/KEEN4-6/CK_TEXT.C b/16/keen456/KEEN4-6/CK_TEXT.C
deleted file mode 100755 (executable)
index d4fdf65..0000000
+++ /dev/null
@@ -1,971 +0,0 @@
-/* Reconstructed Commander Keen 4-6 Source Code\r
- * Copyright (C) 2021 K1n9_Duk3\r
- *\r
- * This file is primarily based on:\r
- * Wolfenstein 3-D Source Code\r
- * Copyright (C) 1992 id Software\r
- *\r
- * This program is free software; you can redistribute it and/or modify\r
- * it under the terms of the GNU General Public License as published by\r
- * the Free Software Foundation; either version 2 of the License, or\r
- * (at your option) any later version.\r
- *\r
- * This program is distributed in the hope that it will be useful,\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
- * GNU General Public License for more details.\r
- *\r
- * You should have received a copy of the GNU General Public License along\r
- * with this program; if not, write to the Free Software Foundation, Inc.,\r
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
- */\r
-\r
-#include "CK_DEF.H"\r
-\r
-/*\r
-=============================================================================\r
-\r
-TEXT FORMATTING COMMANDS\r
-------------------------\r
-^C<hex digit>                          Change text color\r
-^E[enter]                              End of layout (all pages)\r
-^G<y>,<x>,<pic>[enter] Draw a graphic and push margins\r
-^P[enter]                              start new page, must be the first chars in a layout\r
-^L<x>,<y>[ENTER]               Locate to a specific spot, x in pixels, y in lines\r
-\r
-=============================================================================\r
-*/\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                LOCAL CONSTANTS\r
-\r
-=============================================================================\r
-*/\r
-\r
-#if GRMODE == CGAGR\r
-#ifdef KEEN5\r
-#define BACKCOLOR 2    // CGA magenta\r
-#else\r
-#define BACKCOLOR WHITE\r
-#endif\r
-#else\r
-#define BACKCOLOR RED\r
-#endif\r
-\r
-#define WORDLIMIT 80\r
-#define FONTHEIGHT 10\r
-#define TOPMARGIN 10\r
-#define BOTTOMMARGIN 10\r
-#define LEFTMARGIN 10\r
-#define RIGHTMARGIN 10\r
-#define PICMARGIN 8\r
-#define SPACEWIDTH 7\r
-#define TEXTROWS ((200-TOPMARGIN-BOTTOMMARGIN)/FONTHEIGHT)\r
-#define SCREENPIXWIDTH 320\r
-#define SCREENMID (SCREENPIXWIDTH/2)\r
-\r
-/*\r
-=============================================================================\r
-\r
-                                                LOCAL VARIABLES\r
-\r
-=============================================================================\r
-*/\r
-\r
-Sint16 pagenum,numpages;\r
-Uint16 leftmargin[TEXTROWS],rightmargin[TEXTROWS];\r
-char far *text;\r
-Uint16 rowon;\r
-Sint16 picx,picy,picnum,picdelay;\r
-boolean layoutdone;\r
-\r
-Sint16 helpmenupos;\r
-\r
-//===========================================================================\r
-\r
-/*\r
-=====================\r
-=\r
-= RipToEOL\r
-=\r
-=====================\r
-*/\r
-\r
-void RipToEOL(void)\r
-{\r
-       while (*text++ != '\n');\r
-}\r
-\r
-\r
-/*\r
-=====================\r
-=\r
-= ParseNumber\r
-=\r
-=====================\r
-*/\r
-\r
-Sint16 ParseNumber(void)\r
-{\r
-       char c, buffer[80];\r
-       char *bufptr;\r
-\r
-//\r
-// scan until a number is found\r
-//\r
-       c = *text;\r
-       while (c < '0' || c > '9')\r
-               c = *++text;\r
-\r
-//\r
-// copy the number out\r
-//\r
-       bufptr = buffer;\r
-       do\r
-       {\r
-               *bufptr = c;\r
-               bufptr++;\r
-               text++;\r
-               c = *text;\r
-       } while (c >= '0' && c <= '9');\r
-       *bufptr = 0;\r
-\r
-       return atoi(buffer);\r
-}\r
-\r
-\r
-/*\r
-=====================\r
-=\r
-= ParsePicCommand\r
-=\r
-= Call with text pointing just after a ^P\r
-= Upon exit text points to the start of next line\r
-=\r
-=====================\r
-*/\r
-\r
-void ParsePicCommand(void)\r
-{\r
-       picy = ParseNumber();\r
-       picx = ParseNumber();\r
-       picnum = ParseNumber();\r
-       RipToEOL();\r
-}\r
-\r
-void ParseTimedCommand(void)\r
-{\r
-       picy = ParseNumber();\r
-       picx = ParseNumber();\r
-       picnum = ParseNumber();\r
-       picdelay = ParseNumber();\r
-       RipToEOL();\r
-}\r
-\r
-/*\r
-=====================\r
-=\r
-= TimedPicCommand\r
-=\r
-= Call with text pointing just after a ^P\r
-= Upon exit text points to the start of next line\r
-=\r
-=====================\r
-*/\r
-\r
-void TimedPicCommand(void)\r
-{\r
-       ParseTimedCommand();\r
-\r
-//\r
-// update the screen, and wait for time delay\r
-//\r
-#if GRMODE == CGAGR\r
-       VW_UpdateScreen();\r
-#else\r
-       VW_WaitVBL(1);\r
-       VW_ScreenToScreen(bufferofs, displayofs, 40, 200);\r
-#endif\r
-\r
-//\r
-// wait for time\r
-//\r
-       TimeCount = 0;\r
-       while (picdelay > TimeCount)\r
-       ;\r
-\r
-//\r
-// draw pic\r
-//\r
-       VWB_DrawPic(picx & ~7, picy, picnum);\r
-}\r
-\r
-\r
-/*\r
-=====================\r
-=\r
-= HandleCommand\r
-=\r
-=====================\r
-*/\r
-\r
-void HandleCommand(void)\r
-{\r
-       Sint16 i,margin,top,bottom;\r
-       Sint16 picwidth,picheight,picmid;\r
-\r
-       switch (toupper(*(++text)))\r
-       {\r
-       case 'B':\r
-               picy = ParseNumber();\r
-               picx = ParseNumber();\r
-               picwidth = ParseNumber();\r
-               picheight = ParseNumber();\r
-               VWB_Bar(picx, picy, picwidth, picheight, BACKCOLOR);\r
-               RipToEOL();\r
-               break;\r
-\r
-       case 'P':               // ^P is start of next page, ^E is end of file\r
-       case 'E':\r
-               layoutdone = true;\r
-               text--;\r
-               break;\r
-\r
-       case 'C':               // ^c<hex digit> changes text color\r
-               i = toupper(*(++text));\r
-               if (i >= '0' && i <= '9')\r
-               {\r
-                       fontcolor = i + 0 - '0';\r
-               }\r
-               else if (i >= 'A' && i <= 'F')\r
-               {\r
-                       fontcolor = i + 10 - 'A';\r
-               }\r
-#if GRMODE == CGAGR\r
-               {\r
-                       static Sint16 colormap[16] = {2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0};\r
-                       // Note: This mapping is a bit problematic for Keen 5 CGA,\r
-                       // since some colors get mapped to CGA magenta, which is\r
-                       // used as the background color in that version. Luckily\r
-                       // those colors aren't used in the Keen 5 texts anyway.\r
-\r
-                       fontcolor = colormap[fontcolor];\r
-               }\r
-#endif\r
-               fontcolor ^= BACKCOLOR;\r
-               text++;\r
-               break;\r
-\r
-       case 'L':\r
-               py = ParseNumber();\r
-               rowon = (py - 10)/10;\r
-               py = rowon * 10 + 10;\r
-               px = ParseNumber();\r
-               while (*(text++) != '\n')       // scan to end of line\r
-               ;\r
-               break;\r
-\r
-       case 'T':               // ^Tyyy,xxx,ppp,ttt waits ttt tics, then draws pic\r
-               TimedPicCommand();\r
-               break;\r
-\r
-       case 'G':               // ^Gyyy,xxx,ppp draws graphic\r
-               ParsePicCommand();\r
-               VWB_DrawPic(picx & ~7, picy, picnum);\r
-               picwidth = pictable[picnum-STARTPICS].width * BYTEPIXELS;\r
-               picheight = pictable[picnum-STARTPICS].height;\r
-               picmid = picx + picwidth/2;\r
-               //\r
-               // adjust margins\r
-               //\r
-               if (picmid > SCREENMID)\r
-               {\r
-                       margin = picx-PICMARGIN;                        // new right margin\r
-               }\r
-               else\r
-               {\r
-                       margin = picx+picwidth+PICMARGIN;       // new left margin\r
-               }\r
-               top = (picy-TOPMARGIN)/FONTHEIGHT;\r
-               if (top < 0)\r
-               {\r
-                       top = 0;\r
-               }\r
-               bottom = (picy+picheight-TOPMARGIN)/FONTHEIGHT;\r
-               if (bottom >= TEXTROWS)\r
-               {\r
-                       bottom = TEXTROWS-1;\r
-               }\r
-\r
-               for (i=top; i<=bottom; i++)\r
-               {\r
-                       if (picmid > SCREENMID)\r
-                       {\r
-                               rightmargin[i] = margin;\r
-                       }\r
-                       else\r
-                       {\r
-                               leftmargin[i] = margin;\r
-                       }\r
-               }\r
-\r
-               //\r
-               // adjust this line if needed\r
-               //\r
-               if (leftmargin[rowon] > px)\r
-               {\r
-                       px = leftmargin[rowon];\r
-               }\r
-               break;\r
-       }\r
-}\r
-\r
-\r
-/*\r
-=====================\r
-=\r
-= NewLine\r
-=\r
-=====================\r
-*/\r
-\r
-void NewLine(void)\r
-{\r
-       char c;\r
-\r
-       if (++rowon == TEXTROWS)\r
-       {\r
-       //\r
-       // overflowed the page, so skip until next page break\r
-       //\r
-               layoutdone = true;\r
-               do\r
-               {\r
-                       if (*text == '^')\r
-                       {\r
-                               c = toupper(text[1]);\r
-                               if (c == 'E' || c == 'P')\r
-                               {\r
-                                       layoutdone = true;\r
-                                       return;\r
-                               }\r
-                       }\r
-                       text++;\r
-               } while (1);\r
-       }\r
-       px = leftmargin[rowon];\r
-       py += FONTHEIGHT;\r
-}\r
-\r
-\r
-/*\r
-=====================\r
-=\r
-= HandleCtrls\r
-=\r
-=====================\r
-*/\r
-\r
-void HandleCtrls(void)\r
-{\r
-       char c;\r
-\r
-       c = *(text++);                  // get the character and advance\r
-\r
-       if (c == '\n')\r
-       {\r
-               NewLine();\r
-               return;\r
-       }\r
-}\r
-\r
-/*\r
-=====================\r
-=\r
-= HandleWord\r
-=\r
-=====================\r
-*/\r
-\r
-void HandleWord(void)\r
-{\r
-       Uint16 wwidth, wheight, newpos, wordindex;\r
-       char word[WORDLIMIT];\r
-\r
-       //\r
-       // copy the next word into [word]\r
-       //\r
-       word[0] = *(text++);\r
-       wordindex = 1;\r
-       while (*text > ' ')\r
-       {\r
-               word[wordindex] = *(text++);\r
-               if (++wordindex == WORDLIMIT)\r
-               {\r
-                       Quit("PageLayout: Word limit exceeded");\r
-               }\r
-       }\r
-       word[wordindex] = 0;            // stick a null at end for C\r
-\r
-       //\r
-       // see if it fits on this line\r
-       //\r
-       VW_MeasurePropString(word, &wwidth, &wheight);\r
-       \r
-       while (rightmargin[rowon] < px+wwidth)\r
-       {\r
-               NewLine();\r
-               if (layoutdone)\r
-               {\r
-                       return;         // overflowed page\r
-               }\r
-       }\r
-\r
-       //\r
-       // print it\r
-       //\r
-       newpos = px+wwidth;\r
-       VWB_DrawPropString(word);\r
-       px = newpos;\r
-\r
-       //\r
-       // suck up any extra spaces\r
-       //\r
-       while (*text == ' ')\r
-       {\r
-               px += SPACEWIDTH;\r
-               text++;\r
-       }\r
-}\r
-\r
-/*\r
-=====================\r
-=\r
-= PageLayout\r
-=\r
-= Clears the screen, draws the pics on the page, and word wraps the text.\r
-= Returns a pointer to the terminating command\r
-=\r
-=====================\r
-*/\r
-\r
-void PageLayout(boolean shownumber)\r
-{\r
-       Sint16 oldcolor, i;\r
-       char c;\r
-\r
-       oldcolor = fontcolor;\r
-\r
-#if GRMODE == CGAGR\r
-       fontcolor = BLACK^BACKCOLOR;\r
-#else\r
-       fontcolor = YELLOW^BACKCOLOR;\r
-#endif\r
-\r
-//\r
-// clear the screen\r
-//\r
-       VWB_Bar(0, 0, 320, 200, BACKCOLOR);\r
-#ifndef KEEN6\r
-       VWB_DrawPic(  0, 0, H_TOPWINDOWPIC);\r
-       VWB_DrawPic(  0, 8, H_LEFTWINDOWPIC);\r
-       VWB_DrawPic(312, 8, H_RIGHTWINDOWPIC);\r
-       if (shownumber)\r
-       {\r
-               VWB_DrawPic(8, 176, H_BOTTOMINFOPIC);\r
-       }\r
-       else\r
-       {\r
-               VWB_DrawPic(8, 192, H_BOTTOMWINDOWPIC);\r
-       }\r
-#endif\r
-\r
-       for (i=0; i<TEXTROWS; i++)\r
-       {\r
-               leftmargin[i] = LEFTMARGIN;\r
-               rightmargin[i] = SCREENPIXWIDTH-RIGHTMARGIN;\r
-       }\r
-\r
-       px = LEFTMARGIN;\r
-       py = TOPMARGIN;\r
-       rowon = 0;\r
-       layoutdone = false;\r
-\r
-//\r
-// make sure we are starting layout text (^P first command)\r
-//\r
-       while (*text <= ' ')\r
-       {\r
-               text++;\r
-       }\r
-       if (*text != '^' || toupper(*(++text)) != 'P')\r
-       {\r
-               Quit("PageLayout: Text not headed with ^P");\r
-       }\r
-       while (*(text++) != '\n')\r
-       ;\r
-\r
-//\r
-// process text stream\r
-//\r
-       do\r
-       {\r
-               c = *text;\r
-               if (c == '^')\r
-               {\r
-                       HandleCommand();\r
-               }\r
-               else if (c <= ' ')\r
-               {\r
-                       HandleCtrls();\r
-               }\r
-               else\r
-               {\r
-                       HandleWord();\r
-               }\r
-       } while (!layoutdone);\r
-\r
-       pagenum++;\r
-\r
-       if (shownumber)\r
-       {\r
-               strcpy(str, "pg ");\r
-               itoa(pagenum, str2, 10);\r
-               strcat(str, str2);\r
-               strcat(str, " of ");\r
-               itoa(numpages, str2, 10);\r
-               strcat(str, str2);\r
-#if GRMODE == CGAGR\r
-               fontcolor = BLACK^BACKCOLOR;\r
-#else\r
-               fontcolor = LIGHTRED^BACKCOLOR;\r
-#endif\r
-               py = 186;\r
-               px = 218;\r
-               VWB_DrawPropString(str);\r
-       }\r
-\r
-       fontcolor = oldcolor;\r
-}\r
-\r
-//===========================================================================\r
-\r
-/*\r
-=====================\r
-=\r
-= BackPage\r
-=\r
-= Scans for a previous ^P\r
-=\r
-=====================\r
-*/\r
-\r
-void BackPage(void)\r
-{\r
-       pagenum--;\r
-       do\r
-       {\r
-               text--;\r
-               if (text[0] == '^' && toupper(text[1]) == 'P')\r
-               {\r
-                       return;\r
-               }\r
-       } while (1);\r
-}\r
-\r
-//===========================================================================\r
-\r
-\r
-/*\r
-=====================\r
-=\r
-= CacheLayoutGraphics\r
-=\r
-= Scans an entire layout file (until a ^E) marking all graphics used, and\r
-= counting pages, then caches the graphics in\r
-=\r
-=====================\r
-*/\r
-void CacheLayoutGraphics(void)\r
-{\r
-       char    far *bombpoint, far *textstart;\r
-       char    ch;\r
-\r
-       textstart = text;\r
-       bombpoint = text+30000;\r
-       numpages = pagenum = 0;\r
-\r
-#ifndef KEEN6\r
-       CA_MarkGrChunk(H_TOPWINDOWPIC);\r
-       CA_MarkGrChunk(H_LEFTWINDOWPIC);\r
-       CA_MarkGrChunk(H_RIGHTWINDOWPIC);\r
-       CA_MarkGrChunk(H_BOTTOMINFOPIC);\r
-       CA_MarkGrChunk(H_BOTTOMWINDOWPIC);\r
-#endif\r
-\r
-       do\r
-       {\r
-               if (*text == '^')\r
-               {\r
-                       ch = toupper(*(++text));\r
-                       if (ch == 'P')          // start of a page\r
-                       {\r
-                               numpages++;\r
-                       }\r
-                       if (ch == 'E')          // end of file, so load graphics and return\r
-                       {\r
-                               CA_CacheMarks(NULL);\r
-                               text = textstart;\r
-                               return;\r
-                       }\r
-                       if (ch == 'G')          // draw graphic command, so mark graphics\r
-                       {\r
-                               ParsePicCommand();\r
-                               CA_MarkGrChunk(picnum);\r
-                       }\r
-                       if (ch == 'T')          // timed draw graphic command, so mark graphics\r
-                       {\r
-                               ParseTimedCommand();\r
-                               CA_MarkGrChunk(picnum);\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       text++;\r
-               }\r
-\r
-       } while (text < bombpoint);\r
-\r
-       Quit("CacheLayoutGraphics: No ^E to terminate file!");\r
-}\r
-\r
-//===========================================================================\r
-\r
-#ifndef KEEN6\r
-/*\r
-=================\r
-=\r
-= HelpMenu\r
-=\r
-=================\r
-*/\r
-Sint16 HelpMenu(void)\r
-{\r
-       CursorInfo cursor;\r
-       ControlInfo control;\r
-       Sint16 ydelta;\r
-       Uint16 key;\r
-\r
-       VWB_Bar(0, 0, 320, 200, BACKCOLOR);\r
-\r
-       CA_CacheGrChunk(H_HELPPIC);\r
-       CA_CacheGrChunk(H_HANDPIC);\r
-       CA_CacheGrChunk(H_TOPWINDOWPIC);\r
-       CA_CacheGrChunk(H_LEFTWINDOWPIC);\r
-       CA_CacheGrChunk(H_RIGHTWINDOWPIC);\r
-       CA_CacheGrChunk(H_BOTTOMWINDOWPIC);\r
-\r
-       VWB_DrawPic(  0,   0, H_TOPWINDOWPIC);\r
-       VWB_DrawPic(  0,   8, H_LEFTWINDOWPIC);\r
-       VWB_DrawPic(312,   8, H_RIGHTWINDOWPIC);\r
-       VWB_DrawPic(  8, 192, H_BOTTOMWINDOWPIC);\r
-       VWB_DrawPic( 96,   8, H_HELPPIC);\r
-\r
-       ydelta = 0;\r
-       IN_ClearKeysDown();\r
-       do\r
-       {\r
-               if (helpmenupos < 0)\r
-               {\r
-                       helpmenupos = 0;\r
-               }\r
-#ifdef GOODTIMES\r
-               else if (helpmenupos > 3)\r
-               {\r
-                       helpmenupos = 3;\r
-               }\r
-#else\r
-               else if (helpmenupos > 4)\r
-               {\r
-                       helpmenupos = 4;\r
-               }\r
-#endif\r
-               VWB_DrawPic(48, 24*helpmenupos+48, H_HANDPIC);\r
-               VW_UpdateScreen();\r
-               VWB_Bar(48, 24*helpmenupos+48, 39, 24, BACKCOLOR);\r
-               IN_ReadControl(0, &control);\r
-               IN_ReadCursor(&cursor);\r
-               if (LastScan)\r
-               {\r
-                       key = LastScan;\r
-                       IN_ClearKeysDown();\r
-                       switch (key)\r
-                       {\r
-                       case sc_UpArrow:\r
-                               helpmenupos--;\r
-                               break;\r
-                       case sc_DownArrow:\r
-                               helpmenupos++;\r
-                               break;\r
-                       case sc_Enter:\r
-                               VW_ClearVideo(BACKCOLOR);\r
-                               return helpmenupos;\r
-                       case sc_Escape:\r
-                               VW_ClearVideo(BACKCOLOR);\r
-                               return -1;\r
-                       }\r
-               }\r
-               ydelta += cursor.y;\r
-               if (cursor.button0 || cursor.button1 || control.button0 || control.button1)\r
-               {\r
-                       VW_ClearVideo(BACKCOLOR);\r
-                       return helpmenupos;\r
-               }\r
-               if (ydelta < -40)\r
-               {\r
-                       ydelta += 40;\r
-                       helpmenupos--;\r
-               }\r
-               else if (ydelta > 40)\r
-               {\r
-                       ydelta -= 40;\r
-                       helpmenupos++;\r
-               }\r
-       } while (1);\r
-}\r
-\r
-/*\r
-=================\r
-=\r
-= HelpScreens\r
-=\r
-=================\r
-*/\r
-void HelpScreens(void)\r
-{\r
-       static Uint16 layouttable[5] =\r
-       {\r
-               T_HELPART,\r
-               T_CONTRART,\r
-               T_STORYART,\r
-#ifndef GOODTIMES\r
-               T_ORDERART,\r
-#endif\r
-               T_IDART\r
-       };\r
-\r
-       Uint16 olddisplayofs, oldbufferofs, oldfontnumber, temp;\r
-       Sint16 pos;\r
-       boolean newpage;\r
-\r
-       oldfontnumber = fontnumber;\r
-       olddisplayofs = displayofs;\r
-       oldbufferofs = bufferofs;\r
-       fontnumber = 0;\r
-\r
-#if GRMODE == EGAGR\r
-       EGAMAPMASK(15);\r
-#endif\r
-\r
-       CA_UpLevel();\r
-       CA_SetGrPurge();\r
-       VW_ClearVideo(BACKCOLOR);\r
-\r
-#if GRMODE == EGAGR\r
-       RF_FixOfs();\r
-       bufferofs = 0;\r
-       displayofs = 0x8000;\r
-       VW_SetScreen(displayofs, 0);\r
-#endif\r
-\r
-#ifdef KEEN5\r
-       StartMusic(19);\r
-#endif\r
-\r
-       do\r
-       {\r
-               pos = HelpMenu();\r
-\r
-               VW_ClearVideo(BACKCOLOR);\r
-\r
-               if (pos == -1)\r
-               {\r
-                       CA_DownLevel();\r
-                       IN_ClearKeysDown();\r
-                       bufferofs = oldbufferofs;\r
-                       displayofs = olddisplayofs;\r
-                       fontnumber = oldfontnumber;\r
-                       VW_ClearVideo(BACKCOLOR);\r
-                       RF_FixOfs();\r
-#ifdef KEEN5\r
-                       StopMusic();    // Note: it's safer to call StopMusic BEFORE CA_DownLevel\r
-#endif\r
-                       return;\r
-               }\r
-\r
-               pos = layouttable[pos];\r
-               CA_CacheGrChunk(pos);\r
-               text = grsegs[pos];\r
-               CacheLayoutGraphics();\r
-\r
-               newpage = true;\r
-               do\r
-               {\r
-                       if (newpage)\r
-                       {\r
-                               newpage = false;\r
-                               PageLayout(true);\r
-#if GRMODE == CGAGR\r
-                               VW_UpdateScreen();\r
-#else\r
-                               VW_SetScreen(bufferofs, 0);\r
-                               temp = displayofs;\r
-                               displayofs = bufferofs;\r
-                               bufferofs = temp;\r
-#endif\r
-                       }\r
-\r
-                       LastScan = 0;\r
-                       while (!LastScan);\r
-\r
-                       switch (LastScan)\r
-                       {\r
-                       case sc_UpArrow:\r
-                       case sc_LeftArrow:\r
-                       case sc_PgUp:\r
-                               if (pagenum > 1)\r
-                               {\r
-                                       BackPage();\r
-                                       BackPage();\r
-                                       newpage = true;\r
-                               }\r
-                               break;\r
-                       case sc_DownArrow:\r
-                       case sc_RightArrow:\r
-                       case sc_PgDn:\r
-                               if (pagenum < numpages)\r
-                               {\r
-                                       newpage = true;\r
-                               }\r
-                               break;\r
-                       }\r
-               } while (LastScan != sc_Escape);\r
-\r
-               MM_FreePtr(&grsegs[pos]);\r
-               IN_ClearKeysDown();\r
-       } while (true);\r
-}\r
-\r
-#endif\r
-\r
-//===========================================================================\r
-\r
-/*\r
-=================\r
-=\r
-= FinaleLayout\r
-=\r
-=================\r
-*/\r
-void FinaleLayout(void)\r
-{\r
-       char _seg *textseg;\r
-       Sint16 i;\r
-\r
-       VW_ClearVideo(BACKCOLOR);\r
-       RF_FixOfs();\r
-       CA_UpLevel();\r
-       CA_SetGrPurge();\r
-       CA_CacheGrChunk(H_FLASHARROW2PIC);\r
-       CA_CacheGrChunk(H_FLASHARROW1PIC);\r
-\r
-#ifdef KEEN5\r
-       if (gamestate.leveldone[13] == ex_fusebroke)\r
-       {\r
-               CA_CacheGrChunk(T_ENDART2);\r
-               textseg = grsegs[T_ENDART2];\r
-       }\r
-       else\r
-       {\r
-               CA_CacheGrChunk(T_ENDART);\r
-               textseg = grsegs[T_ENDART];\r
-       }\r
-#else\r
-       CA_CacheGrChunk(T_ENDART);\r
-       textseg = grsegs[T_ENDART];\r
-#endif\r
-\r
-       text = textseg;\r
-       CacheLayoutGraphics();\r
-\r
-       StartMusic(ENDINGMUSIC);\r
-\r
-       while (pagenum < numpages)\r
-       {\r
-               PageLayout(false);\r
-               IN_ClearKeysDown();\r
-#if GRMODE == CGAGR\r
-               VW_UpdateScreen();\r
-#else\r
-               VW_SetScreen(bufferofs, 0);\r
-#endif\r
-\r
-               do\r
-               {\r
-                       VWB_DrawPic(298, 184, H_FLASHARROW1PIC);\r
-#if GRMODE == CGAGR\r
-                       VW_UpdateScreen();\r
-#endif\r
-                       for (i=0; i<TickBase; i++)\r
-                       {\r
-                               if (IN_IsUserInput())\r
-                               {\r
-                                       goto nextpage;\r
-                               }\r
-                               VW_WaitVBL(1);\r
-                       }\r
-\r
-                       VWB_DrawPic(298, 184, H_FLASHARROW2PIC);\r
-#if GRMODE == CGAGR\r
-                       VW_UpdateScreen();\r
-#endif\r
-                       for (i=0; i<TickBase; i++)\r
-                       {\r
-                               if (IN_IsUserInput())\r
-                               {\r
-                                       goto nextpage;\r
-                               }\r
-                               VW_WaitVBL(1);\r
-                       }\r
-               } while (1);\r
-\r
-nextpage:\r
-               ;       // Borland C++ 2.0 needs a semicolon here...\r
-       }\r
-\r
-       StopMusic();\r
-\r
-#ifdef KEEN5\r
-       if (gamestate.leveldone[13] == ex_fusebroke)\r
-       {\r
-               MM_FreePtr(&grsegs[T_ENDART2]);\r
-       }\r
-       else\r
-       {\r
-               MM_FreePtr(&grsegs[H_FLASHARROW1PIC]);  // BUG! this should free T_ENDART, the arrow should be freed after the else branch!\r
-       }\r
-#else\r
-       MM_FreePtr(&grsegs[T_ENDART]);\r
-       MM_FreePtr(&grsegs[H_FLASHARROW1PIC]);\r
-#endif\r
-       MM_FreePtr(&grsegs[H_FLASHARROW2PIC]);\r
-       CA_DownLevel();\r
-       IN_ClearKeysDown();\r
-#if GRMODE != CGAGR\r
-       VW_ClearVideo(BACKCOLOR);\r
-       RF_FixOfs();\r
-#endif\r
-       CA_FreeGraphics();\r
-}
\ No newline at end of file