home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 300-399 / ff343.lzh / SnakePit / SnakePitSrc.lzh / Snake_Windows.c < prev    next >
Text File  |  1988-07-04  |  29KB  |  620 lines

  1. /*
  2.  * MKSoft SnakePit (c) 1988
  3.  *
  4.  * Screen, Window, and Requester definitions  (Plus gadgets & menus)
  5.  */
  6.  
  7. #define    Snake_Windows_c    1
  8.  
  9. #include    "Snake.h"
  10.  
  11. /* These are the gadget ID definitions */
  12. #define    gACCEPT        255
  13.  
  14. #define    gLEVEL_UP    201
  15. #define    gLEVEL_DN    202
  16.  
  17. #define    gKEY_UP        203
  18. #define    gKEY_DN        204
  19. #define    gKEY_LF        205
  20. #define    gKEY_RT        206
  21. #define    gKEY_BASE    gKEY_UP
  22.  
  23. #define    gCONTINUE    211
  24. #define    gABORT        gCONTINUE+1
  25. #define    gQUIT        gABORT+1
  26.  
  27. #define    gESC        254
  28.  
  29. #define    gBACKSPACE    8
  30. #define    gCR        13
  31.  
  32. #define    RAW_LF        0x4F
  33. #define    RAW_RT        0x4E
  34. #define    RAW_LF_UP    (0x80 | 0x4F)
  35. #define    RAW_RT_UP    (0x80 | 0x4E)
  36. #define    RAW_SP_UP    (0x80 | 0x40)
  37. #define    RAW_CR_UP    (0x80 | 0x44)
  38. #define    RAW_EN_UP    (0x80 | 0x43)
  39. #define    RAW_C_UP    (0x80 | 0x33)
  40. #define    RAW_A_UP    (0x80 | 0x20)
  41. #define    RAW_Q_UP    (0x80 | 0x10)
  42.  
  43. static    short    SelectLevel        = 1;
  44. static    UBYTE    Level_Text[10]        = "Level:xxx";
  45. static    UBYTE    Lives_Text[10]        = "Lives:xxx";
  46. static    UBYTE    Score_Text[16]        = "Score:xxxxxxxxx";
  47. static    UBYTE    SelectLevelText[4]    = " 1";
  48.  
  49. static    struct    Screen    *MyScreen=NULL;
  50.     struct    Window    *MyWindow=NULL;
  51.  
  52. static struct TextAttr TOPAZ80 = {(STRPTR)"topaz.font",TOPAZ_EIGHTY,0,0};
  53. static struct TextAttr TOPAZ60 = {(STRPTR)"topaz.font",TOPAZ_SIXTY,0,0};
  54.  
  55. static UBYTE Title_Text[]="SnakePit © 1988 - MKSoft Development";
  56.  
  57. static struct NewScreen NewScreenStructure = {0,0,320,200,5,1,0,NULL,CUSTOMSCREEN|SCREENBEHIND,&TOPAZ80,Title_Text,NULL,NULL};
  58.  
  59. static USHORT Palette[32] = {
  60.                 0x0000,0x0EEE,0x0FCD,0x0F77,0x0F00,0x0A00,0x0600,0x0FC9,
  61.                 0x0FB7,0x0F80,0x0B50,0x0630,0x0FFC,0x0FF7,0x07C5,0x0097,
  62.                 0x0650,0x0CFC,0x07F7,0x00E0,0x0580,0x0170,0x0CCF,0x077F,
  63.                 0x000F,0x000A,0x0006,0x0FCF,0x0F7F,0x0F0F,0x070A,0x0606
  64.                 };
  65.  
  66. static struct IntuiText MainIText0 = {1,0,JAM1,19,0,&TOPAZ80,(UBYTE *)"End Edit",NULL};
  67. static struct IntuiText MainITextA = {7,1,JAM1,19,0,&TOPAZ80,(UBYTE *)"Erase",NULL};
  68. static struct IntuiText MainIText1 = {7,1,JAM1,0,0,&TOPAZ80,(UBYTE *)"Clear",NULL};
  69. static struct IntuiText MainIText2 = {7,1,JAM1,0,0,&TOPAZ80,(UBYTE *)"Save",NULL};
  70. static struct IntuiText MainIText3 = {7,1,JAM1,0,0,&TOPAZ80,(UBYTE *)"Load",NULL};
  71. static struct IntuiText MainIText4 = {13,0,JAM1,19,0,&TOPAZ80,(UBYTE *)"Level",NULL};
  72. static struct IntuiText MainIText5 = {21,1,JAM1,19,0,&TOPAZ60,(UBYTE *)"9",NULL};
  73. static struct IntuiText MainIText6 = {21,1,JAM1,19,0,&TOPAZ60,(UBYTE *)"8",NULL};
  74. static struct IntuiText MainIText7 = {21,1,JAM1,19,0,&TOPAZ60,(UBYTE *)"7",NULL};
  75. static struct IntuiText MainIText8 = {21,1,JAM1,19,0,&TOPAZ60,(UBYTE *)"6",NULL};
  76. static struct IntuiText MainIText9 = {21,1,JAM1,19,0,&TOPAZ60,(UBYTE *)"5",NULL};
  77. static struct IntuiText MainIText10= {21,1,JAM1,19,0,&TOPAZ60,(UBYTE *)"4",NULL};
  78. static struct IntuiText MainIText11= {21,1,JAM1,19,0,&TOPAZ60,(UBYTE *)"3",NULL};
  79. static struct IntuiText MainIText12= {21,1,JAM1,19,0,&TOPAZ60,(UBYTE *)"2",NULL};
  80. static struct IntuiText MainIText13= {21,1,JAM1,19,0,&TOPAZ60,(UBYTE *)"1",NULL};
  81. static struct IntuiText MainIText14= {2,26,JAM2,2,0,&TOPAZ60,ScoreList[7].str,NULL};
  82. static struct IntuiText MainIText15= {2,26,JAM2,2,0,&TOPAZ60,ScoreList[6].str,NULL};
  83. static struct IntuiText MainIText16= {2,26,JAM2,2,0,&TOPAZ60,ScoreList[5].str,NULL};
  84. static struct IntuiText MainIText17= {2,26,JAM2,2,0,&TOPAZ60,ScoreList[4].str,NULL};
  85. static struct IntuiText MainIText18= {2,26,JAM2,2,0,&TOPAZ60,ScoreList[3].str,NULL};
  86. static struct IntuiText MainIText19= {2,26,JAM2,2,0,&TOPAZ60,ScoreList[2].str,NULL};
  87. static struct IntuiText MainIText20= {2,26,JAM2,2,0,&TOPAZ60,ScoreList[1].str,NULL};
  88. static struct IntuiText MainIText21= {2,26,JAM2,2,0,&TOPAZ60,ScoreList[0].str,NULL};
  89. static struct IntuiText MainIText22= {31,0,JAM1,0,0,&TOPAZ80,(UBYTE *)"High Scores",NULL};
  90. static struct IntuiText MainIText23= {9,1,JAM1,0,0,&TOPAZ80,(UBYTE *)"Quit",NULL};
  91. static struct IntuiText MainIText30= {21,1,JAM1,0,0,&TOPAZ80,(UBYTE *)"Sound On/Off",NULL};
  92. static struct IntuiText MainIText31= {21,1,JAM1,0,0,&TOPAZ80,(UBYTE *)"Drums On/Off",NULL};
  93. static struct IntuiText MainIText24= {30,1,JAM1,0,0,&TOPAZ80,(UBYTE *)"Edit",NULL};
  94. static struct IntuiText MainIText25= {13,1,JAM1,0,0,&TOPAZ80,(UBYTE *)"Define Keys",NULL};
  95. static struct IntuiText MainIText26= {10,1,JAM1,0,0,&TOPAZ80,(UBYTE *)"Play",NULL};
  96.  
  97. static struct IntuiText SelectLevelIText30 = {18,26,JAM2,30,-17,&TOPAZ60,SelectLevelText,NULL};
  98.  
  99. static struct IntuiText SelectKeysIText34 = {14,26,JAM2,73,-57,&TOPAZ60,KeyList[gKEY_RT-gKEY_BASE].str,NULL};
  100. static struct IntuiText SelectKeysIText33 = {14,26,JAM2,-16,-57,&TOPAZ60,KeyList[gKEY_LF-gKEY_BASE].str,&SelectKeysIText34};
  101. static struct IntuiText SelectKeysIText32 = {14,26,JAM2,28,-16,&TOPAZ60,KeyList[gKEY_DN-gKEY_BASE].str,&SelectKeysIText33};
  102. static struct IntuiText SelectKeysIText31 = {14,26,JAM2,28,-97,&TOPAZ60,KeyList[gKEY_UP-gKEY_BASE].str,&SelectKeysIText32};
  103.  
  104. static struct IntuiText HighScoresIText42 = {2,5,JAM2,-16,-14,&TOPAZ80,ScoreList[7].str,NULL};
  105. static struct IntuiText HighScoresIText41 = {2,5,JAM2,-16,-26,&TOPAZ80,ScoreList[6].str,&HighScoresIText42};
  106. static struct IntuiText HighScoresIText40 = {2,5,JAM2,-16,-38,&TOPAZ80,ScoreList[5].str,&HighScoresIText41};
  107. static struct IntuiText HighScoresIText39 = {2,5,JAM2,-16,-50,&TOPAZ80,ScoreList[4].str,&HighScoresIText40};
  108. static struct IntuiText HighScoresIText38 = {2,5,JAM2,-16,-62,&TOPAZ80,ScoreList[3].str,&HighScoresIText39};
  109. static struct IntuiText HighScoresIText37 = {2,5,JAM2,-16,-74,&TOPAZ80,ScoreList[2].str,&HighScoresIText38};
  110. static struct IntuiText HighScoresIText36 = {2,5,JAM2,-16,-86,&TOPAZ80,ScoreList[1].str,&HighScoresIText37};
  111. static struct IntuiText HighScoresIText35 = {2,5,JAM2,-16,-98,&TOPAZ80,ScoreList[0].str,&HighScoresIText36};
  112.  
  113. static struct IntuiText MainIText29= {24,0,JAM2,102,193,&TOPAZ80,Score_Text,NULL};
  114. static struct IntuiText MainIText28= {15,0,JAM2,248,193,&TOPAZ80,Lives_Text,&MainIText29};
  115. static struct IntuiText MainIText27= {5,0,JAM2,0,193,&TOPAZ80,Level_Text,&MainIText28};
  116.  
  117. #define MainIntuiTextList MainIText27
  118.  
  119. /* This files contains the 8x8 images for the snake screen... */
  120. #include    "Snake_Parts.h"
  121.  
  122. static struct MenuItem MainSubItem3 = {NULL,52,8,80,8,ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,0,(APTR)&MainIText1,NULL,'C',NULL,MENUNULL};
  123. static struct MenuItem MainSubItem2 = {&MainSubItem3,52,0,80,8,ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,0,(APTR)&MainIText2,NULL,'S',NULL,MENUNULL};
  124. static struct MenuItem MainSubItem1 = {&MainSubItem2,52,-8,80,8,ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,0,(APTR)&MainIText3,NULL,'L',NULL,MENUNULL};
  125.  
  126. static struct IntuiText Copyright1= {13,25,JAM2,0,0,&TOPAZ80,(UBYTE *)"     SnakePit     ",NULL};
  127. static struct IntuiText Copyright2= {13,25,JAM2,0,0,&TOPAZ80,(UBYTE *)" Copyright © 1988 ",NULL};
  128. static struct IntuiText Copyright3= {13,25,JAM2,0,0,&TOPAZ80,(UBYTE *)"        by        ",NULL};
  129. static struct IntuiText Copyright4= {13,25,JAM2,0,0,&TOPAZ80,(UBYTE *)"MKSoft Development",NULL};
  130.  
  131. static struct MenuItem MainSubItem15= {NULL,132,57,144,8,ITEMTEXT|ITEMENABLED|HIGHNONE,0,(APTR)&Copyright4,NULL,NULL,NULL,MENUNULL};
  132. static struct MenuItem MainSubItem14= {&MainSubItem15,132,49,144,8,ITEMTEXT|ITEMENABLED|HIGHNONE,0,(APTR)&Copyright3,NULL,NULL,NULL,MENUNULL};
  133. static struct MenuItem MainSubItem13= {&MainSubItem14,132,41,144,8,ITEMTEXT|ITEMENABLED|HIGHNONE,0,(APTR)&Copyright2,NULL,NULL,NULL,MENUNULL};
  134. static struct MenuItem MainSubItem12= {&MainSubItem13,132,33,144,8,ITEMTEXT|ITEMENABLED|HIGHNONE,0,(APTR)&Copyright1,NULL,NULL,NULL,MENUNULL};
  135. static struct MenuItem MainSubItem11= {&MainSubItem12,132,24,144,9,ITEMTEXT|ITEMENABLED|HIGHNONE,0,(APTR)&MainIText14,NULL,NULL,NULL,MENUNULL};
  136. static struct MenuItem MainSubItem10= {&MainSubItem11,132,16,144,8,ITEMTEXT|ITEMENABLED|HIGHNONE,0,(APTR)&MainIText15,NULL,NULL,NULL,MENUNULL};
  137. static struct MenuItem MainSubItem9 = {&MainSubItem10,132,8,144,8,ITEMTEXT|ITEMENABLED|HIGHNONE,0,(APTR)&MainIText16,NULL,NULL,NULL,MENUNULL};
  138. static struct MenuItem MainSubItem8 = {&MainSubItem9,132,0,144,8,ITEMTEXT|ITEMENABLED|HIGHNONE,0,(APTR)&MainIText17,NULL,NULL,NULL,MENUNULL};
  139. static struct MenuItem MainSubItem7 = {&MainSubItem8,132,-8,144,8,ITEMTEXT|ITEMENABLED|HIGHNONE,0,(APTR)&MainIText18,NULL,NULL,NULL,MENUNULL};
  140. static struct MenuItem MainSubItem6 = {&MainSubItem7,132,-16,144,8,ITEMTEXT|ITEMENABLED|HIGHNONE,0,(APTR)&MainIText19,NULL,NULL,NULL,MENUNULL};
  141. static struct MenuItem MainSubItem5 = {&MainSubItem6,132,-24,144,8,ITEMTEXT|ITEMENABLED|HIGHNONE,0,(APTR)&MainIText20,NULL,NULL,NULL,MENUNULL};
  142. static struct MenuItem MainSubItem4 = {&MainSubItem5,132,-32,144,8,ITEMTEXT|ITEMENABLED|HIGHNONE,0,(APTR)&MainIText21,NULL,NULL,NULL,MENUNULL};
  143.  
  144. static struct MenuItem MainMenuItem2B= {NULL,-24,92,123,8,ITEMTEXT|ITEMENABLED|HIGHCOMP|COMMSEQ,0,(APTR)&MainIText0,NULL,'D',NULL,MENUNULL};
  145. static struct MenuItem MainMenuItem2A= {&MainMenuItem2B,-24,73,123,8,CHECKIT|ITEMTEXT|ITEMENABLED|HIGHBOX,126,(APTR)&MainITextA,NULL,NULL,NULL,MENUNULL};
  146. static struct MenuItem MainMenuItem20= {&MainMenuItem2A,-24,64,123,8,CHECKIT|ITEMENABLED|HIGHBOX,190,(APTR)&mShrinkFood,NULL,NULL,NULL,MENUNULL};
  147. static struct MenuItem MainMenuItem19= {&MainMenuItem20,-24,55,123,8,CHECKIT|ITEMENABLED|HIGHBOX,222,(APTR)&mGrowFood,NULL,NULL,NULL,MENUNULL};
  148. static struct MenuItem MainMenuItem18= {&MainMenuItem19,-24,46,123,8,CHECKIT|ITEMENABLED|HIGHBOX,238,(APTR)&mPopUpBrick,NULL,NULL,NULL,MENUNULL};
  149. static struct MenuItem MainMenuItem17= {&MainMenuItem18,-24,37,123,8,CHECKIT|ITEMENABLED|HIGHBOX,246,(APTR)&mDropBrick,NULL,NULL,NULL,MENUNULL};
  150. static struct MenuItem MainMenuItem16= {&MainMenuItem17,-24,28,123,8,CHECKIT|ITEMENABLED|HIGHBOX,250,(APTR)&mMoveBrick,NULL,NULL,NULL,MENUNULL};
  151. static struct MenuItem MainMenuItem15= {&MainMenuItem16,-24,19,123,8,CHECKIT|ITEMENABLED|HIGHBOX|CHECKED,252,(APTR)&mBrick,NULL,NULL,NULL,MENUNULL};
  152. static struct MenuItem MainMenuItem14= {&MainMenuItem15,-24,0,123,8,ITEMTEXT|ITEMENABLED|HIGHCOMP,0,(APTR)&MainIText4,NULL,NULL,&MainSubItem1,MENUNULL};
  153.  
  154. static struct MenuItem MainMenuItem29= {NULL,0,72,69,8,CHECKIT|ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,255,(APTR)&MainIText5,NULL,'9',NULL,MENUNULL};
  155. static struct MenuItem MainMenuItem28= {&MainMenuItem29,0,63,69,8,CHECKIT|ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,383,(APTR)&MainIText6,NULL,'8',NULL,MENUNULL};
  156. static struct MenuItem MainMenuItem27= {&MainMenuItem28,0,54,69,8,CHECKIT|ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,447,(APTR)&MainIText7,NULL,'7',NULL,MENUNULL};
  157. static struct MenuItem MainMenuItem26= {&MainMenuItem27,0,45,69,8,CHECKIT|ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,479,(APTR)&MainIText8,NULL,'6',NULL,MENUNULL};
  158. static struct MenuItem MainMenuItem25= {&MainMenuItem26,0,36,69,8,CHECKIT|ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,495,(APTR)&MainIText9,NULL,'5',NULL,MENUNULL};
  159. static struct MenuItem MainMenuItem24= {&MainMenuItem25,0,27,69,8,CHECKIT|ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP|CHECKED,503,(APTR)&MainIText10,NULL,'4',NULL,MENUNULL};
  160. static struct MenuItem MainMenuItem23= {&MainMenuItem24,0,18,69,8,CHECKIT|ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,507,(APTR)&MainIText11,NULL,'3',NULL,MENUNULL};
  161. static struct MenuItem MainMenuItem22= {&MainMenuItem23,0,9,69,8,CHECKIT|ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,509,(APTR)&MainIText12,NULL,'2',NULL,MENUNULL};
  162. static struct MenuItem MainMenuItem21= {&MainMenuItem22,0,0,69,8,CHECKIT|ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,510,(APTR)&MainIText13,NULL,'1',NULL,MENUNULL};
  163.  
  164. static struct MenuItem MainMenuItem34= {NULL,0,95,128,8,ITEMTEXT|ITEMENABLED|HIGHCOMP,0,(APTR)&MainIText22,NULL,NULL,&MainSubItem4,MENUNULL};
  165. static struct MenuItem MainMenuItem33= {&MainMenuItem34,0,76,128,8,ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,0,(APTR)&MainIText23,NULL,'Q',NULL,MENUNULL};
  166. static struct MenuItem MainMenuItem35= {&MainMenuItem33,0,57,128,8,ITEMTEXT|ITEMENABLED|HIGHCOMP,0,(APTR)&MainIText30,NULL,0,NULL,MENUNULL};
  167. static struct MenuItem MainMenuItem36= {&MainMenuItem35,0,47,128,8,ITEMTEXT|ITEMENABLED|HIGHCOMP,0,(APTR)&MainIText31,NULL,0,NULL,MENUNULL};
  168. static struct MenuItem MainMenuItem32= {&MainMenuItem36,0,28,128,8,ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,0,(APTR)&MainIText24,NULL,'E',NULL,MENUNULL};
  169. static struct MenuItem MainMenuItem31= {&MainMenuItem32,0,19,128,8,ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,4,(APTR)&MainIText25,NULL,'K',NULL,MENUNULL};
  170. static struct MenuItem MainMenuItem30= {&MainMenuItem31,0,0,128,8,ITEMTEXT|COMMSEQ|ITEMENABLED|HIGHCOMP,4,(APTR)&MainIText26,NULL,'P',NULL,MENUNULL};
  171.  
  172. static struct Menu MainMenu3 = {NULL,146,0,57,0,NULL,"Tools",&MainMenuItem14};
  173. static struct Menu MainMenu2 = {&MainMenu3,82,0,57,0,MENUENABLED,"Speed",&MainMenuItem21};
  174. static struct Menu MainMenu1 = {&MainMenu2,0,0,75,0,MENUENABLED,"Project",&MainMenuItem30};
  175.  
  176. #define MainMenuList MainMenu1
  177.  
  178. static struct NewWindow MainNewWindowStructure = {0,0,320,200,1,0,MENUPICK,REPORTMOUSE|BORDERLESS|BACKDROP|ACTIVATE,NULL,NULL,NULL,NULL,NULL,320,200,320,200,CUSTOMSCREEN};
  179.  
  180. /*
  181.  * These files contain the image data for the requesters.
  182.  * They were broken out to make editing easier.
  183.  * (a 310,000 byte file is a bit hard on an editor...
  184.  */
  185. #include    "ContinueImageData.h"
  186. #include    "SelectLevelImageData.h"
  187. #include    "SelectKeysImageData.h"
  188. #include    "HighScoresImageData.h"
  189. #include    "PauseImageData.h"
  190.  
  191. static struct Image ContinueImage = {0,0,78,33,5,ContinueImageData,0x001F,0x0000,NULL};
  192.  
  193. /* Select Level Requester info... */
  194. static struct Image SelectLevelImage20 = {-18,-45,114,84,5,SelectLevelImageData20,0x001F,0x0000,NULL};
  195.  
  196. static struct Gadget SelectLevelGadget81 = {NULL,18,45,78,33,GADGIMAGE|GADGHIMAGE,RELVERIFY|ENDGADGET,BOOLGADGET|REQGADGET,(APTR)&SelectLevelImage20,(APTR)&ContinueImage,&SelectLevelIText30,NULL,NULL,gACCEPT,NULL};
  197. static struct Gadget SelectLevelGadget80 = {&SelectLevelGadget81,10,21,22,21,GADGHNONE,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,gLEVEL_UP,NULL};
  198. static struct Gadget SelectLevelGadget79 = {&SelectLevelGadget80,82,21,22,21,GADGHNONE,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,gLEVEL_DN,NULL};
  199. #define SelectLevelGadgetList SelectLevelGadget79
  200.  
  201. static struct Requester SelectLevelRequesterStructure = {NULL,100,50,114,84,0,0,&SelectLevelGadgetList,NULL,NULL,NOISYREQ,0,NULL,NULL,NULL};
  202.  
  203. /* Select keys requester info... */
  204. static struct Image SelectKeysImage21 = {-26,-121,129,160,5,SelectKeysImageData21,0x001F,0x0000,NULL};
  205.  
  206. static struct Gadget SelectKeysGadget84 = {NULL,26,121,78,33,GADGIMAGE|GADGHIMAGE,RELVERIFY|ENDGADGET,BOOLGADGET|REQGADGET,(APTR)&SelectKeysImage21,(APTR)&ContinueImage,&SelectKeysIText31,NULL,NULL,gACCEPT,NULL};
  207. static struct Gadget SelectKeysGadget83 = {&SelectKeysGadget84,54,39,21,22,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,gKEY_UP,NULL};
  208. static struct Gadget SelectKeysGadget82 = {&SelectKeysGadget83,71,57,22,21,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,gKEY_RT,NULL};
  209. static struct Gadget SelectKeysGadget81 = {&SelectKeysGadget82,36,57,22,21,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,gKEY_LF,NULL};
  210. static struct Gadget SelectKeysGadget80 = {&SelectKeysGadget81,54,74,21,22,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,gKEY_DN,NULL};
  211. #define SelectKeysGadgetList SelectKeysGadget80
  212.  
  213. static struct Requester SelectKeysRequesterStructure = {NULL,90,20,129,160,0,0,&SelectKeysGadgetList,NULL,NULL,NOISYREQ,0,NULL,NULL,NULL};
  214.  
  215. /* High Scores requester info... */
  216. static struct Image HighScoresImage22 = {-42,-141,237,180,5,HighScoresImageData22,0x001F,0x0000,NULL};
  217.  
  218. static struct Gadget HighScoresGadget111= {NULL,42,141,78,33,GADGIMAGE|GADGHIMAGE,RELVERIFY|ENDGADGET,BOOLGADGET|REQGADGET,(APTR)&HighScoresImage22,(APTR)&ContinueImage,&HighScoresIText35,NULL,NULL,gACCEPT,NULL};
  219. static struct Gadget HighScoresGadget110= {&HighScoresGadget111,156,151,34,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,gBACKSPACE,NULL};
  220. static struct Gadget HighScoresGadget109= {&HighScoresGadget110,210,131,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'&',NULL};
  221. static struct Gadget HighScoresGadget108= {&HighScoresGadget109,192,131,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,' ',NULL};
  222. static struct Gadget HighScoresGadget107= {&HighScoresGadget108,174,131,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'Z',NULL};
  223. static struct Gadget HighScoresGadget106= {&HighScoresGadget107,156,131,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'Y',NULL};
  224. static struct Gadget HighScoresGadget105= {&HighScoresGadget106,210,111,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'X',NULL};
  225. static struct Gadget HighScoresGadget104= {&HighScoresGadget105,192,111,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'W',NULL};
  226. static struct Gadget HighScoresGadget103= {&HighScoresGadget104,174,111,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'V',NULL};
  227. static struct Gadget HighScoresGadget102= {&HighScoresGadget103,156,111,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'U',NULL};
  228. static struct Gadget HighScoresGadget101= {&HighScoresGadget102,210,91,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'T',NULL};
  229. static struct Gadget HighScoresGadget100= {&HighScoresGadget101,192,91,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'S',NULL};
  230. static struct Gadget HighScoresGadget99 = {&HighScoresGadget100,174,91,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'R',NULL};
  231. static struct Gadget HighScoresGadget98 = {&HighScoresGadget99,156,91,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'Q',NULL};
  232. static struct Gadget HighScoresGadget97 = {&HighScoresGadget98,210,71,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'P',NULL};
  233. static struct Gadget HighScoresGadget96 = {&HighScoresGadget97,192,71,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'O',NULL};
  234. static struct Gadget HighScoresGadget95 = {&HighScoresGadget96,174,71,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'N',NULL};
  235. static struct Gadget HighScoresGadget94 = {&HighScoresGadget95,156,71,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'M',NULL};
  236. static struct Gadget HighScoresGadget93 = {&HighScoresGadget94,210,51,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'L',NULL};
  237. static struct Gadget HighScoresGadget92 = {&HighScoresGadget93,192,51,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'K',NULL};
  238. static struct Gadget HighScoresGadget91 = {&HighScoresGadget92,174,51,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'J',NULL};
  239. static struct Gadget HighScoresGadget90 = {&HighScoresGadget91,156,51,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'I',NULL};
  240. static struct Gadget HighScoresGadget89 = {&HighScoresGadget90,210,31,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'H',NULL};
  241. static struct Gadget HighScoresGadget88 = {&HighScoresGadget89,192,31,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'G',NULL};
  242. static struct Gadget HighScoresGadget87 = {&HighScoresGadget88,174,31,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'F',NULL};
  243. static struct Gadget HighScoresGadget86 = {&HighScoresGadget87,156,31,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'E',NULL};
  244. static struct Gadget HighScoresGadget85 = {&HighScoresGadget86,210,11,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'D',NULL};
  245. static struct Gadget HighScoresGadget84 = {&HighScoresGadget85,192,11,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'C',NULL};
  246. static struct Gadget HighScoresGadget83 = {&HighScoresGadget84,174,11,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'B',NULL};
  247. static struct Gadget HighScoresGadget82 = {&HighScoresGadget83,156,11,16,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,'A',NULL};
  248. static struct Gadget HighScoresGadget81 = {&HighScoresGadget82,192,151,34,18,NULL,RELVERIFY,BOOLGADGET|REQGADGET,NULL,NULL,NULL,NULL,NULL,gCR,NULL};
  249.  
  250. #define HighScoresGadgetList HighScoresGadget81
  251.  
  252. static struct Requester HighScoresRequesterStructure = {NULL,40,13,237,180,0,0,&HighScoresGadgetList,NULL,NULL,NOISYREQ,0,NULL,NULL,NULL};
  253.  
  254. static struct Image PauseImage1 = {0,0,52,33,5,PauseImageData1,0x001F,0x0000,NULL};
  255. static struct Image PauseImage2 = {0,0,68,33,5,PauseImageData2,0x001F,0x0000,NULL};
  256. static struct Image PauseImage3 = {0,0,85,33,5,PauseImageData3,0x001F,0x0000,NULL};
  257.  
  258. static struct Gadget PauseGadget3 = {NULL,153,0,52,33,GADGIMAGE,RELVERIFY|ENDGADGET,BOOLGADGET|REQGADGET,(APTR)&PauseImage1,NULL,NULL,NULL,NULL,gQUIT,NULL};
  259. static struct Gadget PauseGadget2 = {&PauseGadget3,85,0,68,33,GADGIMAGE,RELVERIFY|ENDGADGET,BOOLGADGET|REQGADGET,(APTR)&PauseImage2,NULL,NULL,NULL,NULL,gABORT,NULL};
  260. static struct Gadget PauseGadget1 = {&PauseGadget2,0,0,85,33,GADGIMAGE,RELVERIFY|ENDGADGET,BOOLGADGET|REQGADGET,(APTR)&PauseImage3,NULL,NULL,NULL,NULL,gCONTINUE,NULL};
  261.  
  262. #define PauseGadgetList PauseGadget1
  263.  
  264. static struct Requester PauseRequesterStructure = {NULL,51,69,205,33,0,0,&PauseGadgetList,NULL,NULL,NOISYREQ,0,NULL,NULL,NULL};
  265.  
  266. VOID    Show_Title()
  267. {
  268.     ShowTitle(MyScreen,1L);
  269. }
  270.  
  271. VOID    Hide_Title()
  272. {
  273.     ShowTitle(MyScreen,0L);
  274. }
  275.  
  276. short    OpenMyWindow()
  277. {
  278.     if (MyScreen=OpenScreen(&NewScreenStructure))
  279.     {
  280.         LoadRGB4(&(MyScreen->ViewPort),Palette,32L);
  281.         MainNewWindowStructure.Screen=MyScreen;
  282.         if (MyWindow=OpenWindow(&MainNewWindowStructure))
  283.         {
  284.             SetMenuStrip(MyWindow,&MainMenuList);
  285.             SetWindowTitles(MyWindow,NULL,Title_Text);
  286.             ScreenToFront(MyScreen);
  287.         }
  288.     }
  289.     return( (MyWindow ? TRUE:FALSE) );
  290. }
  291.  
  292. VOID    CloseMyWindow()
  293. {
  294.     if (MyWindow)
  295.     {
  296.         ClearMenuStrip(MyWindow);
  297.         CloseWindow(MyWindow);
  298.         MyWindow=NULL;
  299.     }
  300.     if (MyScreen)
  301.     {
  302.         CloseScreen(MyScreen);
  303.         MyScreen=NULL;
  304.     }
  305. }
  306.  
  307. short    Request_SelectLevel(lv)    short    lv;
  308. {
  309. register    struct    IntuiMessage    *msg;
  310. register    struct    Gadget        *g;
  311. register        short        add_flag=0;
  312. register        short        loop=TRUE;
  313.             ULONG        tmpIDCMP;
  314.             UBYTE        tmp;
  315.  
  316.     Show_Title();
  317.     if ((lv>0)&&(lv<MAX_LEVEL)) SelectLevel=lv;
  318.     sprintf(SelectLevelText,"%2d",SelectLevel);
  319.     tmpIDCMP=MyWindow->IDCMPFlags;
  320.     ModifyIDCMP(MyWindow,GADGETUP|INTUITICKS|RAWKEY);
  321.     if (Request(&SelectLevelRequesterStructure,MyWindow)) while (loop)
  322.     {
  323.         WaitPort(MyWindow->UserPort);
  324.         while (msg=(struct IntuiMessage *)GetMsg(MyWindow->UserPort))
  325.         {
  326.             if (loop) switch (msg->Class)
  327.             {
  328.             case RAWKEY:        add_flag=0;
  329.                         switch ((UBYTE)(msg->Code))
  330.                         {
  331.                         case RAW_CR_UP:
  332.                         case RAW_EN_UP:
  333.                         case RAW_SP_UP:
  334.                         case RAW_A_UP:    loop=FALSE;
  335.                                 EndRequest(&SelectLevelRequesterStructure,MyWindow);
  336.                                 break;
  337.                         case RAW_RT:    add_flag=1;
  338.                                 break;
  339.                         case RAW_LF:    add_flag=-1;
  340.                                 break;
  341.                         default:    if (((UBYTE)(msg->Code)) & 0x80)
  342.                                 {
  343.                                     tmp=Convert_Key((UBYTE)(msg->Code))-'0';
  344.                                     if ((tmp>=0) && (tmp<10))
  345.                                     {
  346.                                         add_flag=SelectLevel%10;
  347.                                         SelectLevel=0;
  348.                                         if (add_flag>(MAX_LEVEL/10)) add_flag=0;
  349.                                         add_flag=add_flag*10 + tmp;
  350.                                         if (!add_flag) add_flag=MAX_LEVEL+1;
  351.                                     }
  352.                                 }
  353.                                 break;
  354.                         }
  355.                         if (add_flag)
  356.                         {
  357.                             SelectLevel+=add_flag;
  358.                             if (SelectLevel<1) SelectLevel=MAX_LEVEL;
  359.                             if (SelectLevel>MAX_LEVEL) SelectLevel=SelectLevel%MAX_LEVEL;
  360.                             sprintf(SelectLevelText,"%2d",SelectLevel);
  361.                             RefreshGadgets(&SelectLevelGadget81,MyWindow,&SelectLevelRequesterStructure);
  362.                         }
  363.                         break;
  364.             case GADGETUP:        g=(struct Gadget *)(msg->IAddress);
  365.                         if (g->GadgetID==gACCEPT) loop=FALSE;
  366.                         break;
  367.             case INTUITICKS:    add_flag=0;
  368.                         if (SelectLevelGadget80.Flags&SELECTED) add_flag=-1;
  369.                         if (SelectLevelGadget79.Flags&SELECTED) add_flag=1;
  370.                         if (add_flag)
  371.                         {
  372.                             SelectLevel+=add_flag;
  373.                             if (SelectLevel<1) SelectLevel=MAX_LEVEL;
  374.                             if (SelectLevel>MAX_LEVEL) SelectLevel=1;
  375.                             sprintf(SelectLevelText,"%2d",SelectLevel);
  376.                             RefreshGadgets(&SelectLevelGadget81,MyWindow,&SelectLevelRequesterStructure);
  377.                         }
  378.                         break;
  379.             }
  380.             ReplyMsg(msg);
  381.         }
  382.     }
  383.     ModifyIDCMP(MyWindow,tmpIDCMP);
  384.     Hide_Title();
  385.     return(SelectLevel);
  386. }
  387.  
  388. VOID    Request_SelectKeys()
  389. {
  390. register    struct    IntuiMessage    *msg;
  391. register    struct    Gadget        *g;
  392. register        short        change_flag=0;
  393. register        short        loop=TRUE;
  394.             UBYTE        tmp;
  395.             ULONG        tmpIDCMP;
  396.  
  397.     Show_Title();
  398.     tmpIDCMP=MyWindow->IDCMPFlags;
  399.     ModifyIDCMP(MyWindow,RAWKEY|GADGETUP);
  400.  
  401.     if (Request(&SelectKeysRequesterStructure,MyWindow)) while (loop)
  402.     {
  403.         WaitPort(MyWindow->UserPort);
  404.         while (msg=(struct IntuiMessage *)GetMsg(MyWindow->UserPort))
  405.         {
  406.             if (loop) switch (msg->Class)
  407.             {
  408.             case GADGETUP:    g=(struct Gadget *)(msg->IAddress);
  409.                     fix_KeyList();
  410.                     if (g->GadgetID==gACCEPT) loop=FALSE;
  411.                     else
  412.                     {
  413.                         change_flag=g->GadgetID;
  414.                         strcpy(KeyList[change_flag-gKEY_BASE].str,"¿?");
  415.                         RefreshGadgets(&SelectKeysGadget84,MyWindow,&SelectKeysRequesterStructure);
  416.                     }
  417.                     break;
  418.             case RAWKEY:    if (change_flag>0)
  419.                     {
  420.                         tmp=(UBYTE)msg->Code;
  421.                         if ((tmp<RAW_MAX) && (tmp!=RAW_ESC))
  422.                         {
  423.                             KeyList[change_flag-gKEY_BASE].raw=tmp;
  424.                             fix_KeyList();
  425.                             RefreshGadgets(&SelectKeysGadget84,MyWindow,&SelectKeysRequesterStructure);
  426.                             change_flag=0;
  427.                         }
  428.                     }
  429.                     break;
  430.             }
  431.             ReplyMsg(msg);
  432.         }
  433.     }
  434.  
  435.     ModifyIDCMP(MyWindow,tmpIDCMP);
  436.     Hide_Title();
  437. }
  438.  
  439. VOID    Request_HighScores(Score)    register    ULONG    Score;
  440. {
  441. register        short        loop;
  442. register        short        pos=8;
  443. register    struct    IntuiMessage    *msg;
  444.             UBYTE        tmp;
  445.             ULONG        tmpIDCMP;
  446.  
  447.     Show_Title();
  448.     for (loop=0;loop<8;loop++) if (Score>ScoreList[loop].score) { pos=loop; loop=8; }
  449.     if (pos<7) for (loop=6;loop>=pos;loop--)
  450.     {
  451.         ScoreList[loop+1].score=ScoreList[loop].score;
  452.         strcpy(ScoreList[loop+1].str,ScoreList[loop].str);
  453.     }
  454.     if (pos<8)
  455.     {
  456.         sprintf(ScoreList[pos].str,"    %9ld",Score);
  457.         ScoreList[pos].score=Score;
  458.     }
  459.     loop=0;
  460.     tmpIDCMP=MyWindow->IDCMPFlags;
  461.  
  462.     ModifyIDCMP(MyWindow,GADGETUP | RAWKEY);
  463.  
  464.     if (Request(&HighScoresRequesterStructure,MyWindow)) while (loop>=0)
  465.     {
  466.         WaitPort(MyWindow->UserPort);
  467.         while (msg=(struct IntuiMessage *)GetMsg(MyWindow->UserPort))
  468.         {
  469.             if (loop>=0)
  470.             {
  471.                 tmp=(UBYTE)(msg->Code);
  472.                 if ((msg->Class==RAWKEY)&&(tmp&0x80)) tmp=Convert_Key(tmp);
  473.                 else if (msg->Class==GADGETUP) tmp=((struct Gadget *)(msg->IAddress))->GadgetID;
  474.                 else tmp=0;
  475.                 switch (tmp)
  476.                 {
  477.                 case 0:        break;
  478.                 case gESC:    EndRequest(&HighScoresRequesterStructure,MyWindow);
  479.                 case gACCEPT:    if (pos<8) ScoreList[pos].str[loop]=' ';
  480.                         loop=-1;
  481.                         break;
  482.                 case gCR:    if (pos<8)
  483.                         {
  484.                             ScoreList[pos].str[loop]=' ';
  485.                             RefreshGadgets(&HighScoresGadget111,MyWindow,&HighScoresRequesterStructure);
  486.                         }
  487.                         pos=9;
  488.                         break;
  489.                 case gBACKSPACE:
  490.                         if ((loop>0)&&(pos<8))
  491.                         {
  492.                             ScoreList[pos].str[loop--]=' ';
  493.                             ScoreList[pos].str[loop]='';
  494.                             RefreshGadgets(&HighScoresGadget111,MyWindow,&HighScoresRequesterStructure);
  495.                         }
  496.                         break;
  497.                 default:    if (pos<8) if (ScoreList[pos].str[loop+1]==' ')
  498.                         {
  499.                             ScoreList[pos].str[loop++]=tmp;
  500.                             ScoreList[pos].str[loop]='';
  501.                             RefreshGadgets(&HighScoresGadget111,MyWindow,&HighScoresRequesterStructure);
  502.                         }
  503.                         break;
  504.                 }
  505.             }
  506.             ReplyMsg(msg);
  507.         }
  508.     }
  509.  
  510.     ModifyIDCMP(MyWindow,tmpIDCMP);
  511.     Hide_Title();
  512. }
  513.  
  514. short    Request_Pause()
  515. {
  516. register        short        typ=2;
  517. register    struct    IntuiMessage    *msg;
  518. register        ULONG        tmpIDCMP;
  519.  
  520.     Show_Title();
  521.     tmpIDCMP=MyWindow->IDCMPFlags;
  522.     ModifyIDCMP(MyWindow,GADGETUP | RAWKEY);
  523.  
  524.     if (Request(&PauseRequesterStructure,MyWindow))
  525.     {
  526.         typ=0;
  527.         while (!typ)
  528.         {
  529.             WaitPort(MyWindow->UserPort);
  530.             while (msg=(struct IntuiMessage *)GetMsg(MyWindow->UserPort))
  531.             {
  532.                 if (!typ)
  533.                 {
  534.                     if (msg->Class==GADGETUP) typ=((struct Gadget *)(msg->IAddress))->GadgetID-gCONTINUE+1;
  535.                     else if (msg->Class==RAWKEY) switch ((UBYTE)(msg->Code))
  536.                     {
  537.                     case RAW_SP_UP:
  538.                     case RAW_CR_UP:
  539.                     case RAW_C_UP:    typ=-1;    break;
  540.                     case RAW_A_UP:    typ=-2;    break;
  541.                     case RAW_Q_UP:    typ=-3;    break;
  542.                     }
  543.                 }
  544.                 ReplyMsg(msg);
  545.             }
  546.         }
  547.         if (typ<0)
  548.         {
  549.             typ=0-typ;
  550.             EndRequest(&PauseRequesterStructure,MyWindow);
  551.         }
  552.     }
  553.  
  554.     ModifyIDCMP(MyWindow,tmpIDCMP);
  555.     Hide_Title();
  556.     return(typ);
  557. }
  558.  
  559. VOID    UpDate_Status(level,score,lives)    short    level;
  560.                         ULONG    score;
  561.                         short    lives;
  562. {
  563. static    short    o_level=-1;
  564. static    ULONG    o_score=3000000000L;
  565. static    short    o_lives=-1;
  566.  
  567.     if (level!=o_level)
  568.     {
  569.         sprintf(Level_Text,"Level:%3d",level);
  570.         o_level=level;
  571.     }
  572.     if (score!=o_score)
  573.     {
  574.         sprintf(Score_Text,"Score:%9ld",score);
  575.         o_score=score;
  576.     }
  577.     if (lives!=o_lives)
  578.     {
  579.         sprintf(Lives_Text,"Lives:%3d",lives);
  580.         o_lives=lives;
  581.     }
  582.  
  583.     PrintIText(MyWindow->RPort,&MainIntuiTextList,0L,0L);
  584. }
  585.  
  586.     /* This will fade out (or in) the snake screen... */
  587. VOID    Set_Color_Level(chg)    register    short    chg;
  588. {
  589. register    short    x;
  590. register    USHORT    y;
  591. register    USHORT    z;
  592.         USHORT    OldPalette[32];
  593.  
  594.     chg&=15;
  595.     for(x=0;x<32;x++)
  596.     {
  597.         y=Palette[x];
  598.         z=(y & 0x0F00)>>8;
  599.         if (z>chg) z-=chg; else z=0;
  600.         OldPalette[x]=z<<8;
  601.         z=(y & 0x00F0)>>4;
  602.         if (z>chg) z-=chg; else z=0;
  603.         OldPalette[x]+=z<<4;
  604.         z=(y & 0x000F);
  605.         if (z>chg) z-=chg; else z=0;
  606.         OldPalette[x]+=z;
  607.     }
  608.     LoadRGB4(&(MyScreen->ViewPort),OldPalette,32L);
  609. }
  610.  
  611. VOID    Cycle_Colors()    /* This cycles the snake's colors... */
  612. {
  613. register    USHORT    x;
  614.  
  615.     x=Palette[20];
  616.     Palette[20]=Palette[21];
  617.     Palette[21]=x;
  618.     LoadRGB4(&(MyScreen->ViewPort),Palette,32L);
  619. }
  620.