home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 17 / CD_ASCQ_17_101194.iso / dos / prg / demosrce / lemdemo / lemdemo.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-07-27  |  47.9 KB  |  1,064 lines

  1. {///////////////////////////////////////////////////////////////////////////}
  2. { Ca y est...  je me suis  décidé  à mettre  le source de  la LEMDEMO dans le
  3.   domaine public!  A  mon  point  de  vue,  c'est  un  petit  programme  sans 
  4.   importance,  mais  de  nombreuses  personnes m'ont demandé si j'envisageais
  5.   de  le diffuser (a priori  c'est  susceptible  d'intéresser).  Ceux-ci sont
  6.   évidemment  curieux  de  savoir  comment  "ça"  marche!   En  fait,  c' est 
  7.   relativement simple (une fois  que l'on a visualisé  le fichier PCX),  sauf
  8.   peut-être  en ce qui concerne  la gestion  des écrans virtuels dans le bloc
  9.   principal qui n'est  donc  pas  un modèle du genre  en lisibilité.  Voilà!,
  10.   sachez donc tirer profit  de ce petit cadeau  et évitez de faire  partie du
  11.   club très large  des LAMERS en "pompant" bêtement  et en changeant le texte
  12.   du message... 
  13.  
  14.   Pour  de plus  amples  informations,  d'éventuelles  suggestions,  ou  tout 
  15.   simplement pour le fun,  vous pouvez m'écrire  à  l'adresse suivante (celle
  16.   qui défile dans le scrolling n'est plus valable!): 
  17.   
  18.                                Patrick Ruelle
  19.                          43, av. de Grande Bretagne
  20.                                 98000 Monaco
  21.                             Principauté de Monaco
  22.  
  23.   Evidemment  je  n'ai  pas pris  la décision  de diffuser  ce source dans le
  24.   but de demander de l'argent,  mais il va de soit que  toutes sortes de dons
  25.   sont acceptés (carte postale,  matos,  argent,  spécialités locales,  docs,
  26.   etc...).  N'oubliez pas non plus  que cette diffusion ne m'enlève nullement
  27.   mes droits d'auteur  de cette mmm... de démo;  ce petit  package  peut être
  28.   diffusé librement à condition de rester sous sa forme initiale:
  29.  
  30.   LEMDEMO .EXE  19/08/93  10909
  31.   LEMDEMO .PAS  27/07/94  49031
  32.   LEMDEMO .PCX  25/04/92   9862
  33.  
  34.   La version  actuelle  est remaniée  exprès pour la diffusion de ce package,
  35.   mais en fait ce programme date de début 1992 (c'est dire si ça date!)...
  36.  
  37.                                           Patrick Ruelle (Monac) / GRYPHAEA
  38.                                                                             }
  39. {///////////////////////////////////////////////////////////////////////////}
  40.  
  41. Program LEMDEMO;
  42.  
  43. {///////////////////////////////////////////////////////////////////////////}
  44.  
  45. {DECLARATION DES UNITES}
  46. Uses Crt,Dos;
  47.  
  48. {///////////////////////////////////////////////////////////////////////////}
  49.  
  50. {DECLARATION DES TYPES GLOBAUX}
  51. Type
  52.      ecranptr2 = ^ecrantype2;
  53.      ecrantype2= Array[0..64767] Of Byte;
  54.      im        = Array[0..10203] Of Byte;
  55.      type1     = Array[0..767] Of Byte;
  56.      tb        = Array[1..8] Of Byte;
  57.      chai      = Array[1..810] Of Byte;
  58.  
  59. {///////////////////////////////////////////////////////////////////////////}
  60.  
  61. {L'IMAGE GLOBALE (DECOR+ANIMATIONS+FONTE) COMPRESSEE EN RSF (ENTETE=1 WORD)}
  62. Const image : im=
  63. (64,65,64,152,1,67,65,208,42,64,152,1,19,65,151,3,208,37,65,208,38,
  64. 37,208,64,151,1,20,65,208,7,16,26,208,208,65,16,3,26,16,26,16,26,
  65. 65,208,4,65,16,3,26,65,16,3,26,65,16,3,26,65,16,3,26,65,208,
  66. 7,65,151,36,65,17,3,65,151,102,65,17,5,65,151,127,150,65,208,7,16,
  67. 26,208,208,16,26,208,208,65,16,3,26,65,208,5,16,26,208,16,26,16,26,
  68. 208,16,26,208,16,26,16,26,65,208,7,65,150,34,65,17,7,65,150,22,65,
  69. 17,7,65,150,70,65,17,8,65,150,126,65,208,7,16,26,208,208,16,16,26,
  70. 208,65,16,3,26,65,208,5,16,26,208,65,16,3,26,208,16,26,208,65,16,
  71. 3,26,65,208,7,65,150,33,65,17,10,65,150,17,65,17,11,65,150,26,65,
  72. 17,7,65,150,35,65,17,10,65,150,59,65,17,10,65,150,55,149,65,208,7,
  73. 16,26,208,208,16,26,208,208,16,26,16,26,65,208,5,16,26,208,16,16,26,
  74. 208,208,16,26,208,16,26,65,208,9,65,149,34,65,17,8,65,149,17,65,17,
  75. 13,65,149,23,65,17,12,65,149,34,65,17,6,65,149,59,65,17,15,65,149,
  76. 53,65,208,7,65,16,3,26,65,16,3,26,16,26,16,26,65,16,3,26,208,
  77. 16,26,208,16,26,16,26,65,16,3,26,16,26,65,208,9,65,149,12,65,17,
  78. 5,65,149,18,65,17,5,65,149,20,65,17,11,65,149,23,65,17,14,65,149,
  79. 101,65,17,7,65,149,57,148,65,208,46,65,148,11,65,17,8,65,148,46,65,
  80. 17,4,65,148,27,65,17,10,65,148,93,65,17,3,65,148,36,65,17,3,65,
  81. 148,33,65,208,5,16,26,16,26,65,16,3,26,16,26,16,26,65,16,3,26,
  82. 65,208,4,16,16,26,208,65,16,3,26,16,26,16,26,65,16,3,26,65,208,
  83. 5,65,148,13,65,17,5,65,148,179,65,17,8,65,148,31,65,17,8,65,148,
  84. 29,147,65,208,5,65,16,3,26,208,16,26,208,65,16,3,26,208,16,26,65,
  85. 208,5,16,26,16,26,16,26,208,208,65,16,3,26,16,26,16,26,65,208,5,
  86. 65,147,198,65,17,5,65,147,34,65,17,5,65,147,32,65,208,5,65,16,3,
  87. 26,208,16,26,208,16,26,16,26,208,16,26,65,208,5,16,26,16,26,16,16,
  88. 26,208,65,16,3,26,16,26,16,26,65,208,5,64,147,1,17,146,65,208,5,
  89. 16,26,16,26,208,16,26,208,16,26,16,26,208,16,26,65,208,5,16,26,16,
  90. 26,16,26,208,208,16,26,16,26,16,26,16,26,65,208,5,64,146,1,18,65,
  91. 208,5,16,26,16,26,65,16,3,26,16,26,16,26,65,16,3,26,65,208,4,
  92. 16,16,26,208,65,16,3,26,16,26,16,26,65,16,3,26,65,208,5,64,146,
  93. 1,17,145,65,208,46,65,145,94,65,25,23,65,145,157,65,208,19,16,16,26,
  94. 208,16,26,16,26,65,208,19,65,145,93,25,65,6,23,25,65,145,155,144,65,
  95. 208,19,16,26,16,26,16,26,16,26,65,208,19,65,144,92,25,65,6,25,25,
  96. 65,144,155,65,208,19,16,16,26,208,208,16,26,65,208,20,65,144,91,25,65,
  97. 6,27,25,65,144,153,143,65,208,19,16,26,16,26,208,16,26,65,208,20,65,
  98. 143,14,2,65,143,7,2,65,143,7,2,65,143,7,2,65,143,51,25,65,6,
  99. 29,25,65,143,27,2,65,143,7,2,65,143,7,2,65,143,90,65,2,3,65,
  100. 143,16,65,208,19,16,16,26,208,208,16,26,65,208,20,65,143,14,2,65,143,
  101. 7,2,65,143,7,2,65,143,7,2,65,143,51,65,25,31,65,143,27,2,65,
  102. 143,7,2,65,143,7,2,65,143,89,2,65,143,3,2,65,143,14,142,65,208,
  103. 46,65,142,13,65,2,3,65,142,5,65,2,3,65,142,5,65,2,3,65,142,
  104. 5,65,2,3,65,142,51,25,4,4,21,65,4,4,21,65,4,4,21,65,4,
  105. 4,21,65,4,4,21,65,4,4,25,65,142,27,65,2,3,65,142,5,65,2,
  106. 3,65,142,5,65,2,3,65,142,87,65,2,4,142,65,2,3,65,142,13,65,
  107. 208,7,65,16,3,26,65,208,4,65,16,3,26,16,26,16,26,65,16,3,26,
  108. 16,26,208,208,16,26,208,208,65,16,3,26,65,208,7,65,142,13,65,2,3,
  109. 65,142,5,65,2,3,65,142,5,65,2,3,65,142,5,65,2,3,65,142,25,
  110. 22,65,142,25,25,4,4,21,65,4,4,21,65,4,4,21,65,4,4,21,65,
  111. 4,4,21,65,4,4,25,65,142,27,65,2,3,65,142,5,65,2,3,65,142,
  112. 5,65,2,3,65,142,86,2,65,142,3,65,2,3,142,142,2,65,142,11,141,
  113. 65,208,7,16,26,16,26,65,208,4,16,26,16,26,16,26,16,26,16,26,208,
  114. 208,16,26,208,208,16,26,208,208,16,26,65,208,9,65,141,13,65,2,3,65,
  115. 141,5,65,2,3,65,141,5,65,2,3,65,141,5,65,2,3,65,141,24,22,
  116. 21,22,65,141,24,25,65,21,27,25,65,141,27,65,2,3,65,141,5,65,2,
  117. 3,65,141,5,65,2,3,65,141,89,37,37,65,2,3,141,141,2,65,141,11,
  118. 65,208,7,65,16,3,26,65,208,4,65,16,3,26,16,26,16,26,16,16,26,
  119. 208,16,26,208,208,16,26,208,208,16,16,26,65,208,8,65,141,12,65,2,5,
  120. 65,141,3,65,2,5,65,141,3,65,2,5,65,141,3,65,2,5,65,141,20,
  121. 129,128,22,22,21,22,22,131,132,65,141,21,25,21,65,4,4,21,65,4,4,
  122. 21,65,4,4,21,4,65,25,7,4,21,4,25,65,141,11,25,25,65,141,13,
  123. 65,2,5,65,141,3,65,2,5,65,141,3,65,2,5,65,141,87,37,208,65,
  124. 141,4,2,141,2,65,141,10,140,65,208,7,16,26,65,208,6,16,16,26,208,
  125. 16,26,16,26,16,26,208,208,16,26,208,208,16,26,208,208,16,26,65,208,9,
  126. 65,140,12,65,2,5,65,140,3,65,2,5,65,140,3,65,2,5,65,140,3,
  127. 65,2,5,65,140,18,131,130,65,140,3,22,21,22,65,140,3,133,128,65,140,
  128. 19,25,21,65,4,3,65,25,9,4,4,21,4,25,65,6,5,25,4,21,4,
  129. 25,65,140,10,25,209,209,25,65,140,12,65,2,5,65,140,3,65,2,5,65,
  130. 140,3,65,2,5,65,140,86,208,37,65,140,5,2,65,140,13,65,208,7,16,
  131. 26,65,208,3,16,26,208,16,26,16,26,65,16,3,26,65,16,3,26,65,16,
  132. 3,26,65,16,3,26,65,16,3,26,65,208,7,65,140,12,65,2,5,65,140,
  133. 3,65,2,5,65,140,3,65,2,5,65,140,3,65,2,5,65,140,17,132,65,
  134. 140,5,22,21,22,65,140,5,129,65,140,18,25,65,21,4,25,65,16,3,28,
  135. 65,16,3,25,65,21,4,25,65,6,5,25,65,21,3,25,65,140,9,25,65,
  136. 211,4,25,65,140,11,65,2,5,65,140,3,65,2,5,65,140,3,65,2,5,
  137. 65,140,86,37,208,65,140,4,2,65,140,13,65,139,3,208,37,65,208,38,37,
  138. 208,65,139,14,65,2,5,65,139,3,65,2,5,65,139,3,65,2,5,65,139,
  139. 3,65,2,5,65,139,16,133,65,139,6,22,21,22,65,139,6,130,65,139,17,
  140. 25,4,4,21,4,25,65,16,3,28,65,16,3,25,65,4,4,25,65,6,5,
  141. 25,65,4,3,25,65,139,8,25,65,209,6,25,65,139,10,65,2,5,65,139,
  142. 3,65,2,5,65,139,3,65,2,5,65,139,85,208,208,65,139,22,65,208,42,
  143. 65,139,14,65,2,5,65,139,3,65,2,5,65,139,3,65,2,5,65,139,3,
  144. 65,2,5,65,139,16,128,65,139,3,65,22,4,21,65,22,4,65,139,3,131,
  145. 65,139,17,25,4,4,21,4,25,16,16,65,28,3,16,16,25,65,4,4,25,
  146. 65,6,5,25,65,4,3,25,65,139,7,25,25,65,211,6,25,25,65,139,9,
  147. 65,2,5,65,139,3,65,2,5,65,139,3,65,2,5,65,139,66,65,71,3,
  148. 65,139,16,37,37,65,139,19,65,138,20,65,37,7,65,138,32,65,2,5,65,
  149. 138,3,65,2,5,65,138,3,65,2,5,65,138,3,65,2,5,65,138,11,22,
  150. 65,138,4,129,65,138,3,22,65,21,7,22,65,138,3,132,65,138,4,22,65,
  151. 138,12,25,65,21,4,25,2,65,28,5,2,25,65,21,4,25,65,6,5,25,
  152. 65,21,3,25,65,138,6,25,25,65,209,8,25,25,65,138,8,65,2,5,65,
  153. 138,3,65,2,5,65,138,3,65,2,5,65,138,62,65,71,4,65,70,3,71,
  154. 71,65,138,14,208,208,65,138,39,65,37,7,65,138,32,65,2,5,65,138,3,
  155. 65,2,5,65,138,3,65,2,5,65,138,3,65,2,5,65,138,11,65,22,27,
  156. 65,138,12,25,21,65,4,3,25,16,65,28,5,16,25,4,4,21,4,25,6,
  157. 25,65,6,3,25,4,21,4,25,65,138,7,25,65,211,3,25,25,65,211,3,
  158. 25,65,138,9,65,2,5,65,138,3,65,2,5,65,138,3,65,2,5,65,138,
  159. 58,65,71,4,70,70,2,65,70,6,65,71,3,65,138,11,37,37,65,138,8,
  160. 71,65,138,10,65,137,20,65,37,7,65,137,33,65,2,3,65,137,5,65,2,
  161. 3,65,137,5,65,2,3,65,137,5,65,2,3,65,137,12,22,65,21,25,22,
  162. 65,137,12,25,21,65,4,3,65,25,9,4,4,21,4,25,65,6,5,25,4,
  163. 21,4,25,65,137,7,25,209,209,25,0,0,25,209,209,25,65,137,10,65,2,
  164. 3,65,137,5,65,2,3,65,137,5,65,2,3,65,137,39,2,65,137,3,2,
  165. 65,137,9,65,71,6,65,70,7,2,70,70,2,65,70,5,65,71,3,65,137,
  166. 8,208,208,65,137,6,71,71,70,71,71,65,137,28,65,37,7,65,137,34,37,
  167. 65,137,7,37,65,137,7,37,65,137,7,37,65,137,12,65,22,29,65,137,11,
  168. 25,65,21,17,25,65,6,5,25,65,21,3,25,65,137,7,25,211,211,25,0,
  169. 0,25,211,211,25,65,137,11,37,65,137,7,37,65,137,7,37,65,137,39,2,
  170. 65,137,3,2,65,137,7,65,71,3,65,70,14,2,70,70,2,70,70,2,65,
  171. 70,4,71,71,65,137,6,37,37,65,137,3,65,71,3,65,70,5,71,65,137,
  172. 7,136,136,2,136,2,136,2,136,2,136,2,136,2,136,2,136,2,136,2,136,
  173. 2,37,2,37,2,37,2,136,2,136,2,136,2,136,2,136,2,136,2,136,2,
  174. 136,2,136,2,136,2,136,2,136,2,136,2,136,2,136,2,136,2,136,2,37,
  175. 2,136,2,136,2,136,2,37,2,136,2,136,2,136,2,37,2,136,2,136,2,
  176. 136,2,37,2,136,2,136,2,136,2,136,2,136,2,136,2,21,2,21,2,21,
  177. 2,21,2,21,2,21,2,21,2,21,2,21,2,21,2,21,2,21,2,21,2,
  178. 21,2,136,2,136,2,136,2,136,2,136,2,136,2,4,2,21,2,4,2,4,
  179. 2,4,2,4,2,21,2,4,2,4,2,6,2,6,2,6,2,4,2,4,2,
  180. 136,2,136,2,136,2,136,2,209,2,25,2,0,2,209,2,25,2,136,2,136,
  181. 2,136,2,136,2,136,2,37,2,136,2,136,2,136,2,37,2,136,2,136,2,
  182. 136,2,37,2,136,2,136,2,136,2,136,2,136,2,65,136,28,2,136,2,136,
  183. 2,65,136,4,65,71,3,65,70,17,2,65,70,3,2,2,70,2,65,70,5,
  184. 65,71,3,65,136,3,208,208,136,71,71,65,70,9,71,71,65,136,5,2,136,
  185. 2,136,2,136,2,136,2,136,2,136,2,136,2,136,2,136,2,136,2,37,2,
  186. 37,2,37,2,136,2,136,2,136,2,136,2,136,2,136,2,136,2,136,2,136,
  187. 2,136,2,136,2,136,2,136,2,136,2,136,2,136,2,136,2,37,2,136,2,
  188. 136,2,136,2,37,2,136,2,136,2,136,2,37,2,136,2,136,2,136,2,37,
  189. 2,136,2,136,2,136,2,136,2,136,2,136,2,21,2,21,2,21,2,21,2,
  190. 21,2,21,2,21,2,21,2,21,2,21,2,21,2,21,2,21,2,21,2,136,
  191. 2,136,2,136,2,136,2,136,2,136,2,4,2,21,2,4,2,4,2,4,2,
  192. 4,2,21,2,4,2,4,2,6,2,6,2,6,2,4,2,4,2,136,2,136,
  193. 2,136,2,136,2,211,2,25,2,0,2,211,2,25,2,136,2,136,2,136,2,
  194. 136,2,136,2,37,2,136,2,136,2,136,2,37,2,136,2,136,2,136,2,37,
  195. 2,136,2,136,2,136,2,136,2,136,2,136,2,65,136,26,2,136,136,2,136,
  196. 136,65,71,3,65,70,20,2,65,70,3,2,65,70,11,71,71,136,37,37,71,
  197. 65,70,13,71,65,136,4,65,10,226,65,23,18,65,71,76,65,2,226,23,65,
  198. 18,16,23,65,70,76,65,2,226,23,65,18,3,65,23,10,65,18,3,23,65,
  199. 70,76,65,2,226,23,18,18,23,65,0,10,23,18,18,23,65,70,76,65,2,
  200. 226,23,18,23,65,0,12,23,18,23,65,70,76,65,2,226,65,23,3,128,131,
  201. 129,132,130,133,130,133,129,132,128,131,65,23,3,65,70,76,64,152,2,128,64,
  202. 151,1,244,65,23,33,65,151,35,65,17,4,65,151,68,65,150,179,23,65,206,
  203. 33,23,65,150,32,65,17,7,65,150,30,26,26,65,150,63,65,17,10,65,150,
  204. 58,65,17,6,65,150,76,23,65,206,35,23,65,150,30,65,17,10,65,150,27,
  205. 65,26,4,65,150,34,65,149,26,65,17,16,65,149,51,65,17,11,65,149,73,
  206. 23,65,206,37,23,65,149,30,65,17,10,65,149,27,26,26,65,149,19,65,17,
  207. 5,65,149,41,65,17,10,65,149,55,65,17,5,65,149,15,65,17,7,65,149,
  208. 54,23,65,206,39,23,65,149,12,17,17,65,149,16,65,17,7,65,149,29,26,
  209. 26,65,149,17,65,17,9,65,149,9,65,148,114,65,17,11,65,148,50,23,65,
  210. 206,41,23,65,148,10,65,17,4,65,148,51,26,26,65,148,16,65,17,11,65,
  211. 148,124,65,17,4,65,148,55,65,23,43,65,148,9,65,17,7,65,148,47,65,
  212. 23,6,65,148,16,65,17,8,65,148,9,65,147,178,23,65,17,35,23,65,147,
  213. 13,65,17,5,65,147,46,23,23,65,210,6,23,23,65,147,16,65,17,5,65,
  214. 147,188,23,65,17,35,23,65,147,62,23,23,65,210,10,23,23,65,147,29,65,
  215. 146,178,23,65,17,35,23,65,146,60,23,23,65,210,14,23,23,65,146,205,23,
  216. 65,17,3,65,212,3,23,65,212,3,65,17,4,65,212,3,23,65,212,3,65,
  217. 17,4,65,212,3,23,65,212,3,65,17,3,23,65,146,58,23,23,65,210,18,
  218. 23,23,65,146,25,65,145,178,23,17,17,212,65,209,3,23,65,209,3,212,17,
  219. 17,212,65,209,3,23,65,209,3,212,17,17,212,65,209,3,23,65,209,3,212,
  220. 17,17,23,65,145,57,23,65,210,22,23,65,145,20,65,23,4,65,145,178,23,
  221. 65,17,3,65,212,3,23,65,212,3,65,17,4,65,212,3,23,65,212,3,65,
  222. 17,4,65,212,3,23,65,212,3,65,17,3,23,65,145,56,65,23,26,65,145,
  223. 18,23,65,211,4,65,144,161,65,23,18,65,17,3,65,209,3,23,65,209,3,
  224. 65,17,4,65,209,3,23,65,209,3,65,17,4,65,209,3,23,65,209,3,65,
  225. 17,3,23,65,144,58,23,65,17,20,23,65,144,19,23,65,211,5,65,144,160,
  226. 23,65,206,17,23,17,17,65,212,4,23,65,212,4,17,17,65,212,4,23,65,
  227. 212,4,17,17,65,212,4,23,65,212,4,17,17,23,65,144,58,23,65,17,9,
  228. 23,23,65,17,9,23,65,144,18,23,65,211,6,65,143,159,23,65,206,18,23,
  229. 65,17,3,65,209,3,23,65,209,3,65,17,4,65,209,3,23,65,209,3,65,
  230. 17,4,65,209,3,23,65,209,3,65,17,3,23,65,143,52,65,23,7,65,17,
  231. 8,23,20,20,23,65,17,8,65,23,7,65,143,11,23,65,211,7,65,143,5,
  232. 65,19,27,65,143,126,23,65,206,19,23,65,17,35,23,65,143,5,65,2,6,
  233. 65,143,28,65,2,6,65,143,6,23,65,210,6,23,65,17,8,23,20,20,23,
  234. 65,17,8,23,65,210,6,23,65,143,9,23,65,211,8,65,142,6,19,65,17,
  235. 23,19,65,142,126,23,65,206,20,23,65,17,35,23,65,142,4,65,2,9,65,
  236. 142,11,22,22,65,142,12,65,2,9,65,142,3,23,65,210,7,23,65,17,8,
  237. 23,20,20,23,65,17,8,23,65,210,7,23,65,142,8,65,23,9,65,142,6,
  238. 19,65,17,23,19,65,142,126,65,23,22,65,17,35,23,65,142,3,65,2,11,
  239. 65,142,9,22,17,22,22,65,142,10,65,2,11,142,65,23,10,65,17,8,65,
  240. 23,4,65,17,8,65,23,10,65,142,9,23,65,17,6,65,141,6,19,65,17,
  241. 23,19,65,141,129,23,65,17,17,23,65,17,35,23,65,141,3,65,2,12,65,
  242. 141,8,65,17,3,22,65,141,10,65,2,12,141,141,23,65,17,6,23,65,17,
  243. 20,23,65,17,6,23,65,141,11,23,65,17,6,65,141,6,19,65,17,23,65,
  244. 19,21,65,141,13,22,65,141,95,23,65,17,17,23,65,17,35,23,65,141,3,
  245. 2,37,2,141,37,2,37,2,141,37,2,2,65,141,9,21,17,65,141,11,2,
  246. 37,2,141,37,2,37,2,141,37,2,2,141,141,23,65,17,6,23,65,17,20,
  247. 23,65,17,6,23,65,141,11,23,65,17,6,65,140,6,19,65,17,4,65,19,
  248. 4,65,17,5,65,19,7,65,17,3,19,65,17,18,19,65,140,12,19,19,22,
  249. 19,19,65,140,22,71,65,140,70,23,65,17,17,23,65,17,15,65,23,5,65,
  250. 17,15,23,65,140,3,2,2,37,37,140,37,140,37,37,65,140,12,21,17,65,
  251. 140,11,2,2,37,37,140,37,140,37,37,65,140,5,23,65,17,6,23,65,17,
  252. 6,65,23,8,65,17,6,23,65,17,6,23,65,140,11,23,65,17,4,23,23,
  253. 65,140,6,19,65,17,3,19,65,25,4,19,65,17,4,19,65,25,5,19,65,
  254. 17,3,19,65,17,18,19,65,140,11,19,140,140,22,140,140,19,65,140,18,65,
  255. 71,3,70,71,71,65,140,68,23,17,17,212,212,23,212,212,17,17,212,212,65,
  256. 23,3,212,212,17,23,17,65,212,3,65,23,5,65,212,3,17,17,23,65,212,
  257. 5,23,17,17,65,212,3,65,23,5,65,212,3,17,23,65,140,7,65,37,3,
  258. 65,140,14,17,21,65,140,15,65,37,3,65,140,7,23,17,17,23,23,17,17,
  259. 23,65,17,5,23,65,210,3,23,23,65,210,3,23,65,17,5,23,17,17,23,
  260. 23,17,17,23,65,140,11,23,65,17,3,23,206,206,65,139,6,19,17,17,19,
  261. 65,25,6,19,65,17,3,19,65,25,5,19,65,17,3,19,65,17,18,19,65,
  262. 139,10,19,65,139,3,19,65,139,3,19,65,139,12,65,71,5,65,70,6,71,
  263. 71,65,139,66,23,17,212,209,209,23,209,209,212,17,209,209,65,19,3,209,209,
  264. 17,23,17,65,209,3,19,19,23,19,19,65,209,3,17,17,23,65,212,5,23,
  265. 17,17,65,209,3,19,19,23,19,19,65,209,3,17,23,65,139,8,37,65,139,
  266. 15,21,21,65,139,16,37,65,139,8,23,17,23,20,20,23,17,23,65,17,4,
  267. 23,65,210,4,23,23,65,210,4,23,65,17,4,23,17,23,20,20,23,17,23,
  268. 65,139,11,23,65,17,3,23,206,206,65,139,6,19,17,17,19,65,25,6,19,
  269. 65,17,3,19,65,25,5,19,65,17,3,19,65,17,18,19,65,139,10,19,65,
  270. 139,3,19,65,139,3,19,65,139,8,65,71,4,65,70,13,71,71,65,139,64,
  271. 23,17,17,212,212,23,212,212,17,17,212,212,65,19,3,212,212,17,23,17,65,
  272. 212,3,19,19,23,19,19,65,212,3,17,17,23,65,212,5,23,17,17,65,212,
  273. 3,19,19,23,19,19,65,212,3,17,23,65,139,8,37,65,139,14,65,21,4,
  274. 17,65,139,14,37,65,139,8,23,17,23,20,20,23,17,23,65,17,4,23,65,
  275. 210,4,23,23,65,210,4,23,65,17,4,23,17,23,20,20,23,17,23,65,139,
  276. 11,23,65,17,3,23,206,206,65,138,6,19,17,17,19,65,25,6,19,65,17,
  277. 3,19,65,25,5,19,65,17,3,19,65,17,18,19,65,138,10,19,65,138,3,
  278. 19,65,138,3,19,65,138,3,65,71,5,65,70,19,71,71,65,138,3,2,65,
  279. 138,9,71,71,65,138,47,23,17,17,209,209,23,209,209,17,17,209,209,65,19,
  280. 3,209,209,17,23,17,65,209,3,19,19,23,19,19,65,209,3,17,17,23,65,
  281. 212,5,23,17,17,65,209,3,19,19,23,19,19,65,209,3,17,23,65,138,8,
  282. 37,65,138,14,17,17,138,138,17,65,138,14,37,65,138,8,23,17,23,20,20,
  283. 23,17,23,65,17,4,23,65,210,4,23,23,65,210,4,23,65,17,4,23,17,
  284. 23,20,20,23,17,23,65,138,11,23,65,17,3,23,206,206,65,138,6,19,17,
  285. 17,19,65,25,6,19,65,17,3,65,19,7,65,17,3,19,65,17,18,19,65,
  286. 138,10,19,65,138,3,19,65,138,3,19,65,71,3,65,70,26,71,2,138,138,
  287. 2,65,138,6,71,71,70,70,65,71,3,65,138,44,23,17,65,212,3,23,65,
  288. 212,3,17,212,212,65,19,3,212,212,17,23,17,65,212,3,19,19,23,19,19,
  289. 65,212,3,17,17,23,212,23,65,212,3,23,17,17,65,212,3,19,19,23,19,
  290. 19,65,212,3,17,23,65,138,8,37,65,138,14,65,22,5,65,138,14,37,65,
  291. 138,8,23,17,65,23,4,17,23,65,17,4,23,65,210,4,23,23,65,210,4,
  292. 23,65,17,4,23,17,65,23,4,17,23,65,138,11,23,65,17,3,23,206,211,
  293. 65,137,6,19,17,17,19,65,25,6,19,65,17,13,19,65,17,18,19,65,137,
  294. 9,65,21,11,65,70,25,2,70,70,2,70,2,71,2,65,137,4,71,71,65,
  295. 70,7,65,71,4,65,137,40,23,17,17,209,209,23,209,209,17,17,209,209,65,
  296. 23,3,209,209,17,23,17,65,209,3,65,23,5,65,209,3,17,17,23,65,212,
  297. 5,23,17,17,65,209,3,65,23,5,65,209,3,17,23,65,137,8,37,65,137,
  298. 14,22,65,21,3,22,65,137,14,37,65,137,8,23,65,17,6,23,65,17,4,
  299. 23,210,26,26,210,23,23,210,26,26,210,23,65,17,4,23,65,17,6,23,65,
  300. 137,11,23,65,17,3,23,206,206,65,137,6,19,17,17,19,65,25,6,19,65,
  301. 17,13,19,65,17,9,2,65,17,3,2,65,17,4,19,65,137,9,17,21,17,
  302. 17,21,17,17,21,17,17,21,65,70,26,2,70,2,65,70,3,71,2,137,2,
  303. 71,65,70,13,65,71,4,65,137,36,23,65,17,17,23,65,17,14,23,65,212,
  304. 5,23,65,17,14,23,65,137,8,37,65,137,12,65,22,9,65,137,12,37,65,
  305. 137,8,23,65,17,6,23,65,17,4,23,65,210,4,23,23,65,210,4,23,65,
  306. 17,4,23,65,17,6,23,65,137,11,23,65,17,3,23,206,206,65,136,6,19,
  307. 17,17,19,65,25,6,19,65,17,13,19,65,17,10,2,17,2,17,2,65,17,
  308. 3,19,65,136,9,65,21,11,65,70,27,2,65,70,5,2,2,71,2,65,70,
  309. 17,65,71,4,65,136,32,23,65,17,17,23,65,17,14,23,65,212,5,23,65,
  310. 17,14,23,65,136,4,65,22,9,65,136,8,22,65,21,7,22,65,136,8,65,
  311. 22,9,65,136,4,23,65,17,6,23,65,17,4,23,65,210,4,23,23,65,210,
  312. 4,23,65,17,4,23,65,17,6,23,65,136,11,23,65,17,3,23,206,206,65,
  313. 136,6,19,17,17,19,65,25,6,19,65,17,13,19,65,17,10,2,17,2,65,
  314. 17,5,19,65,136,9,17,17,21,17,17,21,17,17,21,17,17,65,70,27,2,
  315. 65,70,5,2,70,70,71,65,70,21,65,71,3,65,136,29,23,65,17,17,23,
  316. 65,17,14,23,65,212,5,23,65,17,14,23,65,136,4,22,136,22,136,22,136,
  317. 22,136,22,65,136,8,22,65,21,7,22,65,136,8,22,136,22,136,22,136,22,
  318. 136,22,65,136,4,23,65,17,6,23,65,17,4,23,65,210,4,23,23,65,210,
  319. 4,23,65,17,4,23,65,17,6,23,65,136,11,23,65,17,3,23,206,206,65,
  320. 71,135,65,23,185,65,70,135,23,65,18,16,23,65,21,167,65,70,135,23,65,
  321. 18,3,65,23,10,65,18,3,23,65,21,167,65,70,135,23,18,18,23,65,0,
  322. 10,23,18,18,23,65,21,167,65,70,135,23,18,23,65,0,12,23,18,23,65,
  323. 21,167,65,70,135,65,23,3,128,131,129,132,130,133,130,133,129,132,128,131,65,
  324. 23,3,65,21,167,64,152,1,40,65,0,24,64,152,1,40,65,0,24,64,151,
  325. 1,40,65,0,24,64,151,1,40,65,0,24,65,150,41,65,17,5,65,150,250,
  326. 65,0,24,65,150,39,65,17,8,65,150,249,65,0,24,65,149,38,65,17,10,
  327. 65,149,248,65,0,24,65,149,39,65,17,8,65,149,249,65,0,24,65,148,41,
  328. 65,17,5,65,148,250,65,0,24,65,148,9,65,23,5,64,148,1,26,65,0,
  329. 24,65,147,8,23,65,211,5,23,64,147,1,25,65,0,24,65,147,7,23,65,
  330. 211,7,23,64,147,1,24,65,0,24,65,146,6,23,65,211,9,23,64,146,1,
  331. 23,65,0,24,65,146,6,65,23,11,64,146,1,23,65,0,24,65,23,8,17,
  332. 17,65,23,3,17,17,65,23,19,64,145,1,6,65,0,24,65,211,7,23,17,
  333. 23,65,19,3,23,17,23,65,211,18,23,64,145,1,5,65,0,24,65,211,7,
  334. 23,17,23,65,19,3,23,17,23,65,211,19,23,64,144,1,4,65,0,24,65,
  335. 211,7,23,17,23,65,19,3,23,17,23,65,211,20,23,64,144,1,3,65,0,
  336. 24,65,211,7,65,23,9,65,211,21,23,64,143,1,2,65,0,24,65,211,38,
  337. 23,64,143,1,1,65,0,24,65,23,39,64,142,1,1,65,0,24,65,17,18,
  338. 23,65,17,17,23,65,142,190,65,0,3,65,142,66,65,0,24,65,17,18,23,
  339. 65,17,17,23,65,141,190,65,0,3,65,141,66,65,0,24,65,17,18,23,65,
  340. 17,17,23,65,141,190,65,0,3,65,141,6,14,65,141,59,65,0,24,65,23,
  341. 3,65,17,15,23,17,65,23,15,17,23,65,140,95,65,15,4,65,140,28,65,
  342. 15,4,65,140,57,65,0,7,65,140,3,14,140,14,65,140,58,65,0,24,65,
  343. 206,3,23,17,17,65,212,3,65,23,5,65,212,3,17,23,17,23,65,19,4,
  344. 65,9,5,65,19,4,23,17,23,65,140,93,15,15,17,17,15,17,15,15,65,
  345. 140,24,15,15,17,17,15,17,15,15,65,140,56,65,15,5,65,140,3,14,140,
  346. 14,140,14,65,140,57,65,0,24,65,206,3,23,17,17,65,206,3,19,19,23,
  347. 19,19,65,206,3,17,23,17,23,65,19,3,9,65,18,5,9,65,19,3,23,
  348. 17,23,65,139,92,65,15,10,65,139,22,65,15,10,65,139,55,15,0,17,0,
  349. 15,65,139,3,14,14,139,14,65,139,58,65,0,24,65,206,3,23,17,17,65,
  350. 212,3,19,19,23,19,19,65,212,3,17,23,17,23,65,19,3,9,65,18,5,
  351. 9,65,19,3,23,17,23,65,139,72,65,15,6,65,139,13,15,17,15,17,17,
  352. 15,17,17,15,17,17,15,65,139,20,15,17,15,17,17,15,17,17,15,17,17,
  353. 15,65,139,9,15,15,65,139,26,65,15,10,65,139,7,15,17,200,17,15,139,
  354. 139,6,139,14,14,65,139,59,65,0,24,65,206,3,23,17,17,65,206,3,19,
  355. 19,23,19,19,65,206,3,17,23,17,23,19,19,65,9,9,19,19,23,17,23,
  356. 65,138,62,65,15,10,65,17,6,15,65,138,11,65,15,14,65,138,7,126,138,
  357. 138,127,138,127,65,138,5,65,15,14,65,138,6,65,15,6,65,138,22,15,15,
  358. 65,17,10,65,15,13,6,15,15,65,138,61,65,0,24,65,206,3,23,17,17,
  359. 65,212,3,19,19,23,19,19,65,212,3,17,23,17,23,19,9,12,4,65,9,
  360. 5,4,12,9,19,23,17,23,65,138,56,65,15,6,65,17,17,15,65,138,10,
  361. 15,17,17,15,17,17,15,15,17,17,15,17,17,15,65,138,6,126,127,138,127,
  362. 126,138,126,65,138,5,15,17,17,15,17,17,15,15,17,17,15,17,17,15,65,
  363. 138,5,15,17,15,17,17,15,17,15,65,138,19,15,15,65,17,19,15,17,12,
  364. 17,15,17,6,17,17,65,15,9,65,138,10,15,15,65,138,40,65,0,24,65,
  365. 206,3,23,17,17,65,206,3,65,23,5,65,206,3,17,23,17,23,19,65,9,
  366. 4,65,0,3,65,9,4,19,23,17,23,65,137,55,15,17,15,65,17,22,15,
  367. 65,137,8,65,15,7,23,23,65,15,7,65,137,6,126,127,126,137,126,127,65,
  368. 137,4,65,15,7,23,23,65,15,7,65,137,4,65,15,8,65,137,17,15,15,
  369. 65,17,20,15,65,17,5,6,65,17,8,15,15,17,17,15,65,137,8,15,17,
  370. 17,65,15,3,65,137,37,65,0,24,65,206,3,23,65,17,14,23,17,23,19,
  371. 65,21,11,19,23,17,23,65,137,36,65,15,5,65,137,14,15,17,17,15,65,
  372. 17,22,15,65,137,7,15,17,17,15,17,15,65,23,4,15,17,15,17,17,15,
  373. 65,137,7,126,137,126,127,65,137,5,15,17,17,15,17,15,65,23,4,15,17,
  374. 15,17,17,15,65,137,3,15,17,15,17,15,15,17,15,17,15,65,137,14,15,
  375. 15,65,17,22,15,17,17,12,17,6,15,65,17,6,15,15,65,17,4,15,65,
  376. 137,6,15,15,65,17,6,65,15,4,65,137,33,65,0,24,65,206,3,23,65,
  377. 17,14,23,17,23,19,19,26,26,65,19,5,26,26,19,19,23,17,23,65,136,
  378. 35,15,65,17,5,65,15,6,65,136,7,15,65,17,4,15,65,17,22,15,65,
  379. 136,6,65,15,6,65,23,4,65,15,6,65,136,6,37,136,37,136,37,37,65,
  380. 136,4,65,15,6,65,23,4,65,15,6,65,136,3,65,15,4,23,23,65,15,
  381. 4,65,136,12,15,15,65,17,24,15,65,17,4,6,15,65,17,4,15,15,65,
  382. 17,7,15,65,136,4,15,65,17,12,65,15,3,65,136,30,65,0,24,65,206,
  383. 3,23,65,17,14,23,17,23,19,19,26,26,65,19,5,26,26,19,19,23,17,
  384. 23,65,136,34,15,65,17,12,65,15,4,65,136,3,15,65,17,5,15,65,17,
  385. 22,15,65,136,5,15,17,15,17,17,15,65,23,4,15,17,17,15,17,15,65,
  386. 136,4,65,37,4,136,37,37,65,136,5,15,17,15,17,17,15,65,23,4,15,
  387. 17,17,15,17,15,65,136,3,15,17,17,15,23,23,15,17,17,15,65,136,11,
  388. 15,65,17,26,15,17,17,12,6,17,15,65,17,3,15,65,17,9,15,65,136,
  389. 3,15,65,17,16,15,15,65,136,28,65,0,24,65,23,62,65,15,216,65,23,
  390. 18,65,0,24,65,21,44,23,65,18,16,23,65,17,216,23,65,18,16,23,65,
  391. 0,24,65,21,44,23,65,18,3,65,23,10,65,18,3,23,65,17,216,23,65,
  392. 18,3,65,23,10,65,18,3,23,65,0,24,65,21,44,23,18,18,23,65,0,
  393. 10,23,18,18,23,65,17,216,23,18,18,23,65,0,10,23,18,18,23,65,0,
  394. 24,65,21,44,23,18,23,65,0,12,23,18,23,65,17,216,23,18,23,65,0,
  395. 12,23,18,23,65,0,24,65,21,44,65,23,3,128,131,129,132,130,133,130,133,
  396. 129,132,128,131,65,23,3,65,17,216,65,23,3,128,131,129,132,130,133,130,133,
  397. 129,132,128,131,65,23,3,64,0,53,229,99,0,99,65,0,3,99,0,99,65,
  398. 0,29,99,99,65,0,6,99,99,65,0,6,99,99,65,0,6,99,99,65,0,
  399. 6,99,99,65,0,6,99,99,65,0,6,99,99,65,0,6,99,99,65,0,213,
  400. 99,99,65,0,4,99,99,0,0,65,99,3,65,0,3,65,99,3,65,0,4,
  401. 65,99,4,0,0,65,99,4,0,0,99,0,99,65,0,3,99,0,99,65,0,
  402. 4,65,99,4,65,0,4,65,99,4,65,0,4,65,99,4,65,0,4,65,99,
  403. 4,65,0,4,65,99,4,65,0,4,65,99,4,65,0,4,65,99,4,65,0,
  404. 4,65,99,4,65,0,211,99,99,15,99,0,0,99,99,15,99,0,99,99,15,
  405. 65,0,3,99,99,15,65,0,4,99,99,15,65,0,3,99,99,15,65,0,3,
  406. 65,99,3,65,0,3,65,99,3,65,0,4,99,15,15,99,65,0,4,99,15,
  407. 15,99,65,0,4,99,15,15,99,65,0,4,99,15,15,99,65,0,4,99,15,
  408. 15,99,65,0,4,99,15,15,99,0,0,15,0,99,15,15,99,0,15,0,15,
  409. 99,15,15,99,15,65,0,3,15,99,99,15,65,0,4,99,99,15,65,0,5,
  410. 15,99,99,15,65,0,5,15,99,99,65,0,179,99,65,15,3,0,0,99,65,
  411. 15,3,0,0,65,15,3,65,0,3,65,15,3,65,0,4,65,15,3,0,0,
  412. 99,65,15,3,65,0,3,99,15,65,0,4,99,15,65,0,5,15,15,65,0,
  413. 6,15,15,65,0,6,15,15,65,0,6,15,15,65,0,6,15,15,65,0,3,
  414. 15,0,0,15,15,0,0,15,0,15,0,15,15,0,15,0,0,15,0,15,15,
  415. 0,15,0,0,15,99,15,15,99,15,0,15,99,15,15,99,15,65,0,3,15,
  416. 99,15,15,99,15,65,0,3,15,99,15,15,99,15,65,0,178,15,9,65,0,
  417. 4,15,9,65,0,3,15,9,65,0,4,15,9,65,0,5,15,9,65,0,4,
  418. 15,9,65,0,4,65,15,3,65,0,3,65,15,3,65,0,3,15,9,9,15,
  419. 65,0,4,15,9,9,15,65,0,4,15,9,9,15,65,0,3,15,15,9,9,
  420. 15,15,0,65,15,3,9,9,65,15,3,0,15,15,9,9,15,15,65,0,3,
  421. 15,9,9,15,65,0,4,15,9,9,15,65,0,3,15,99,15,15,99,15,0,
  422. 15,99,65,15,4,65,0,3,15,99,15,15,99,15,65,0,3,65,15,4,99,
  423. 15,65,0,178,15,9,65,0,4,15,9,0,0,15,9,9,65,0,4,9,15,
  424. 65,0,5,15,9,65,0,4,9,15,65,0,4,9,15,65,0,3,15,15,9,
  425. 65,0,4,15,9,9,15,65,0,3,15,0,9,9,0,15,0,0,15,0,9,
  426. 9,0,15,0,15,0,0,9,9,0,0,15,65,0,3,9,9,65,0,6,9,
  427. 9,65,0,6,9,9,65,0,6,9,9,65,0,5,15,9,9,15,65,0,3,
  428. 15,65,9,3,15,65,0,4,15,9,9,15,65,0,4,15,65,9,3,15,65,
  429. 0,179,9,15,65,0,3,15,9,9,0,0,15,9,9,0,15,0,0,9,15,
  430. 0,15,65,0,3,15,9,65,0,4,15,9,65,0,4,9,15,65,0,3,15,
  431. 9,9,65,0,4,15,9,9,15,65,0,3,15,0,9,9,0,15,0,15,0,
  432. 0,9,9,0,0,15,65,0,3,9,9,65,0,6,9,9,65,0,6,9,9,
  433. 65,0,6,9,9,65,0,6,9,9,65,0,6,9,9,65,0,5,65,9,3,
  434. 65,0,6,9,9,65,0,6,65,9,3,65,0,180,9,9,65,0,4,9,9,
  435. 65,0,3,9,9,0,15,0,0,9,9,0,15,65,0,3,9,9,65,0,4,
  436. 9,9,65,0,4,9,9,15,0,15,15,65,9,3,65,0,4,9,9,65,0,
  437. 6,9,9,65,0,6,9,9,65,0,6,9,9,65,0,6,9,9,65,0,6,
  438. 9,9,65,0,6,9,9,65,0,6,9,9,65,0,6,9,9,65,0,6,9,
  439. 9,65,0,6,9,9,65,0,6,9,9,65,0,179,15,65,9,4,0,15,65,
  440. 9,4,0,9,9,0,15,0,0,9,9,0,15,65,0,3,15,9,9,65,0,
  441. 3,15,9,9,65,0,3,65,9,4,0,0,65,9,4,65,0,4,9,9,65,
  442. 0,6,9,9,65,0,6,9,9,65,0,6,9,9,65,0,6,9,9,65,0,
  443. 6,9,9,65,0,6,9,9,65,0,6,9,9,65,0,5,65,9,4,65,0,
  444. 4,65,9,4,65,0,4,65,9,4,65,0,4,65,9,4,65,0,178,15,0,
  445. 0,15,15,0,15,0,0,15,15,0,15,15,65,0,4,15,15,65,0,6,15,
  446. 15,65,0,4,15,15,0,0,15,15,0,0,65,15,4,0,0,15,15,0,0,
  447. 65,15,4,65,0,4,65,15,4,65,0,4,65,15,4,65,0,4,65,15,4,
  448. 65,0,4,65,15,4,65,0,4,65,15,4,65,0,4,65,15,4,65,0,4,
  449. 65,15,4,65,0,4,65,15,4,65,0,4,65,15,4,65,0,4,65,15,4,
  450. 65,0,4,65,15,4,64,0,5,178,65,18,3,1,18,18,1,1,65,18,3,
  451. 1,18,18,1,1,65,18,3,1,65,18,3,1,65,18,3,1,18,1,18,1,
  452. 1,18,65,1,4,18,1,18,1,18,1,18,65,1,3,18,1,18,1,18,1,
  453. 18,1,65,18,3,1,65,18,3,1,65,18,3,1,65,18,3,1,65,18,3,
  454. 1,65,18,3,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,18,1,
  455. 18,1,18,1,65,18,3,1,1,18,65,1,3,18,1,1,65,18,3,1,65,
  456. 18,3,1,18,65,1,3,65,18,3,1,65,18,3,1,65,18,3,1,65,18,
  457. 3,1,65,18,3,65,1,6,18,65,1,6,18,1,18,1,1,18,65,1,4,
  458. 18,1,1,18,65,1,9,18,65,1,18,18,1,18,65,1,3,65,18,3,1,
  459. 65,0,112,20,1,20,1,20,1,20,1,20,65,1,3,20,1,20,1,20,65,
  460. 1,3,20,65,1,3,20,65,1,3,20,1,20,1,1,20,65,1,4,20,1,
  461. 20,1,20,1,20,65,1,3,65,20,3,1,65,20,3,1,20,1,20,1,20,
  462. 1,20,1,20,1,20,1,20,1,20,1,20,65,1,4,20,1,1,20,1,20,
  463. 1,20,1,20,1,20,1,20,1,20,1,20,1,20,1,20,65,1,3,20,1,
  464. 20,1,20,1,20,20,65,1,4,20,65,1,3,20,1,20,65,1,3,20,65,
  465. 1,3,20,65,1,5,20,1,20,1,20,1,20,1,20,65,1,6,20,65,1,
  466. 6,20,1,20,1,1,20,65,1,3,20,65,1,4,20,65,1,7,20,65,1,
  467. 18,20,65,1,3,20,65,1,4,20,1,65,0,112,65,22,3,1,22,22,1,
  468. 1,22,65,1,3,22,1,22,1,22,22,1,1,22,22,1,1,22,1,22,1,
  469. 65,22,3,1,1,22,65,1,4,22,1,22,22,1,1,22,65,1,3,65,22,
  470. 3,1,22,1,22,1,22,1,22,1,65,22,3,1,22,1,22,1,65,22,3,
  471. 1,65,22,3,1,1,22,1,1,22,1,22,1,22,1,22,1,65,22,3,1,
  472. 1,22,65,1,3,22,65,1,3,22,1,1,22,1,22,1,1,22,1,1,65,
  473. 22,3,1,1,22,1,1,22,1,22,1,65,22,3,1,65,22,3,65,1,3,
  474. 22,1,65,22,3,1,65,22,3,65,1,6,22,65,1,15,22,65,1,4,22,
  475. 1,1,22,65,1,3,22,22,1,1,22,65,1,6,65,22,3,65,1,5,22,
  476. 65,1,5,22,1,1,22,1,1,65,0,112,23,1,23,1,23,1,23,1,23,
  477. 65,1,3,23,1,23,1,23,65,1,3,23,65,1,3,23,1,23,1,23,1,
  478. 23,1,1,23,1,1,23,1,23,1,23,1,23,1,23,65,1,3,23,1,23,
  479. 1,23,1,23,1,23,1,23,1,23,65,1,3,23,1,23,1,23,23,65,1,
  480. 4,23,1,1,23,1,1,23,1,23,1,1,23,1,1,65,23,3,1,23,1,
  481. 23,1,1,23,1,1,23,65,1,3,23,1,23,1,1,23,1,1,23,65,1,
  482. 5,23,1,65,23,3,65,1,3,23,1,23,1,23,65,1,3,23,1,23,1,
  483. 23,65,1,3,23,65,1,22,23,65,1,4,23,65,1,6,23,1,1,65,23,
  484. 3,1,65,23,3,65,1,10,23,65,1,3,23,65,1,6,65,0,112,24,1,
  485. 24,1,24,24,1,1,65,24,3,1,24,24,1,1,65,24,3,1,24,65,1,
  486. 3,65,24,3,1,24,1,24,1,1,24,1,1,65,24,3,1,24,1,24,1,
  487. 65,24,3,1,24,1,24,1,24,1,24,1,65,24,3,1,24,65,1,3,24,
  488. 24,1,1,24,1,24,1,65,24,3,1,1,24,1,1,65,24,3,1,1,24,
  489. 1,1,24,1,24,1,24,1,24,1,1,24,1,1,65,24,3,1,1,24,1,
  490. 1,65,24,3,1,65,24,3,1,65,24,3,65,1,3,24,1,65,24,3,1,
  491. 65,24,3,65,1,3,24,1,65,24,3,1,65,24,3,65,1,6,24,65,1,
  492. 3,24,65,1,12,24,1,1,24,65,1,3,24,1,1,24,65,1,4,24,65,
  493. 1,6,65,24,3,1,65,24,3,65,1,3,24,1,24,65,1,4,24,1,1,
  494. 64,0,7,240,65,15,82,65,0,238,15,65,1,80,15,65,0,238,15,65,1,
  495. 4,18,65,1,3,65,18,3,1,18,1,18,65,1,5,65,18,3,1,65,18,
  496. 3,1,65,18,3,1,65,18,3,65,1,5,18,1,18,1,65,18,3,1,18,
  497. 1,18,1,65,18,3,65,1,5,18,18,1,1,65,18,3,1,18,1,18,1,
  498. 65,18,3,65,1,5,15,65,0,238,15,65,1,4,20,65,1,3,20,65,1,
  499. 3,65,20,3,65,1,6,20,1,1,20,1,20,1,1,20,1,1,20,1,20,
  500. 65,1,5,65,20,3,1,1,20,1,1,65,20,3,1,1,20,65,1,6,20,
  501. 1,20,1,20,65,1,3,65,20,3,1,20,1,20,65,1,5,15,65,0,238,
  502. 15,65,1,4,22,65,1,3,22,22,1,1,65,22,3,65,1,6,22,1,1,
  503. 65,22,3,1,1,22,1,1,65,22,3,65,1,5,65,22,3,1,1,22,1,
  504. 1,22,1,22,1,1,22,65,1,6,22,1,22,1,22,22,1,1,65,22,3,
  505. 1,22,1,22,65,1,5,15,65,0,238,15,65,1,4,23,65,1,3,23,65,
  506. 1,3,23,1,23,65,1,6,23,1,1,23,23,65,1,3,23,1,1,23,65,
  507. 1,7,23,1,23,1,1,23,1,1,23,1,23,1,1,23,65,1,6,23,1,
  508. 23,1,23,65,1,3,23,1,23,1,23,1,23,65,1,5,15,65,0,238,15,
  509. 65,1,4,65,24,3,1,65,24,3,1,24,1,24,1,65,24,3,1,1,24,
  510. 1,1,24,1,24,1,65,24,3,1,24,65,1,7,24,1,24,1,65,24,3,
  511. 1,24,1,24,1,65,24,3,65,1,5,24,24,1,1,65,24,3,1,24,1,
  512. 24,1,65,24,3,65,1,5,15,65,0,238,15,65,1,80,15,65,0,238,65,
  513. 15,82,64,0,4,179,42,0,42,0,0,65,42,3,0,0,42,0,42,42,21,
  514. 0,65,42,3,65,21,5,63,1,50,0,21,65,63,3,21,21,63,21,65,63,
  515. 3,21,65,63,3,65,59,3,65,55,3,65,52,3,65,48,3,65,45,3,65,
  516. 42,3,65,38,3,65,35,3,65,31,3,65,28,3,65,25,3,65,21,3,65,
  517. 18,3,65,14,3,65,11,3,65,8,3,63,0,0,59,0,0,56,0,0,53,
  518. 0,0,50,0,0,40,25,15,44,0,0,41,0,0,38,0,0,34,0,0,31,
  519. 0,0,28,0,0,25,0,0,22,0,0,19,0,0,16,0,0,63,54,54,63,
  520. 46,46,63,39,39,63,31,31,63,23,23,63,16,16,63,8,8,63,0,0,63,
  521. 42,23,63,38,16,63,34,8,63,30,0,57,27,0,51,24,0,45,21,0,39,
  522. 19,0,63,63,54,63,63,46,63,63,39,63,63,31,63,62,23,63,61,0,57,
  523. 54,0,51,49,0,57,54,0,51,49,0,45,43,0,39,39,0,33,33,0,28,
  524. 27,0,22,21,0,16,16,0,52,63,23,49,63,16,45,63,8,40,63,0,36,
  525. 57,0,32,51,0,29,45,0,24,39,0,54,63,54,47,63,46,39,63,39,32,
  526. 63,31,24,63,23,16,63,16,8,63,8,0,63,0,0,63,0,0,59,0,0,
  527. 56,0,0,53,0,1,50,0,1,47,0,1,44,0,1,41,0,1,38,0,1,
  528. 34,0,1,31,0,1,28,0,1,25,0,1,22,0,1,19,0,1,16,0,54,
  529. 63,63,46,63,63,39,63,63,31,63,62,23,63,63,16,63,63,8,63,63,0,
  530. 63,63,0,57,57,0,51,51,0,45,45,0,39,39,0,33,33,0,28,28,59,
  531. 0,0,63,42,23,23,47,63,16,44,63,8,42,63,0,39,63,0,35,57,0,
  532. 31,51,0,27,45,0,23,39,54,54,63,46,47,63,39,39,63,31,32,63,23,
  533. 24,63,16,16,63,8,9,63,0,1,63,0,0,63,0,0,59,0,0,56,0,
  534. 0,53,0,0,50,0,0,47,0,0,44,0,0,41,0,0,38,0,0,34,0,
  535. 0,31,0,0,28,0,0,25,0,0,22,0,0,19,0,0,16,60,54,63,57,
  536. 46,63,54,39,63,52,31,63,50,23,63,47,16,63,45,8,63,42,0,63,38,
  537. 0,57,32,0,51,29,0,45,24,0,39,20,0,33,17,0,28,13,0,22,10,
  538. 0,16,63,54,63,63,46,63,63,39,63,63,31,63,63,23,63,63,16,63,63,
  539. 8,63,63,0,63,56,0,57,50,0,51,45,0,45,39,0,39,33,0,33,27,
  540. 0,28,22,0,22,16,0,16,63,58,55,63,56,52,63,54,49,63,53,47,63,
  541. 51,44,63,49,41,63,47,39,63,46,36,63,44,32,63,41,28,63,39,24,60,
  542. 37,23,58,35,22,55,34,21,52,32,20,50,31,19,47,30,18,45,28,17,42,
  543. 26,16,40,25,15,39,24,14,36,23,13,34,22,12,32,20,11,29,19,10,27,
  544. 18,9,23,16,8,21,15,7,18,14,6,16,12,6,14,11,5,10,8,3,65,
  545. 0,21,65,20,3,49,10,10,49,19,10,49,29,10,49,39,10,49,49,10,39,
  546. 49,10,29,49,10,19,49,10,10,49,12,10,49,23,10,49,34,10,49,45,10,
  547. 42,49,10,31,49,10,20,49,11,10,49,22,10,49,33,10,49,44,10,49,49,
  548. 10,43,49,10,32,49,10,21,49,10,10,65,63,3,64,64,0,1,0);
  549.  
  550. {L'ORDRE (EN ABCISSES(PIXELS)) DES ETAPES DE LA MARCHE DU LEMMING}
  551.  table : tb  =(0,24,12,42,6,30,18,36);
  552.  
  553. {LE CONTENU DU TEXTE (810 CARACTERES), CHAQUE CARACTERE=UN CODE (NON ASCII
  554.  ET NON EBCDIC)}
  555.  chaine: chai=(36,7,8,36,12,4,13,37,36,8,5,36,24,14,20,36,11,8,10,4,3,36,19,7,4,
  556.                36,6,0,12,4,36,39,11,4,12,12,8,13,6,18,39,36,5,17,14,12,36,15,
  557.                18,24,6,13,14,18,8,18,36,19,7,4,13,36,24,14,20,40,11,11,36,15,
  558.                17,14,1,0,1,11,24,36,11,8,10,4,36,19,7,8,18,36,5,20,13,13,24,
  559.                36,12,8,13,8,36,3,4,12,14,36,19,14,14,38,38,38,36,8,36,19,14,
  560.                14,10,36,19,7,4,36,11,4,12,12,8,13,6,40,18,36,12,14,21,4,18,
  561.                36,1,24,36,3,17,0,22,8,13,6,36,19,7,4,12,36,3,20,17,8,13,6,36,
  562.                19,7,4,36,15,0,20,18,4,36,14,15,19,8,14,13,36,14,5,36,19,7,4,
  563.                36,6,0,12,4,37,36,14,10,38,38,38,36,8,36,0,6,17,4,4,36,22,8,19,
  564.                7,36,24,14,20,38,38,38,36,19,7,0,19,36,22,0,18,13,40,19,36,17,
  565.                4,0,11,11,24,36,4,0,18,24,36,0,19,36,0,11,11,38,38,38,36,1,20,
  566.                19,36,8,36,3,8,3,36,8,19,37,37,37,36,0,18,36,24,14,20,40,21,4,
  567.                36,13,14,19,8,2,4,3,36,19,7,8,18,36,3,4,12,14,36,8,18,36,17,0,
  568.                19,7,4,17,36,12,8,13,8,36,41,8,13,18,19,4,0,3,36,14,5,36,12,4,
  569.                6,0,36,14,17,36,6,8,6,0,42,38,38,38,36,1,20,19,36,18,14,36,18,
  570.                22,4,4,19,37,36,19,7,4,36,15,17,14,6,17,0,12,12,8,13,6,36,15,
  571.                0,17,19,36,8,18,36,3,14,13,4,36,8,13,36,0,36,7,8,6,7,36,11,4,
  572.                21,4,11,36,11,0,13,6,20,0,6,4,36,22,8,19,7,36,0,36,11,8,19,19,
  573.                11,4,36,12,14,17,4,36,19,7,0,13,36,7,20,13,3,17,4,3,36,11,8,13,
  574.                4,18,36,14,5,36,0,18,18,4,12,1,11,24,36,17,14,20,19,8,13,4,18,
  575.                38,36,13,14,22,36,22,4,40,17,4,36,2,11,14,18,4,36,19,14,36,19,
  576.                7,4,36,4,13,3,38,38,38,36,8,36,9,20,18,19,36,22,0,13,19,36,19,
  577.                14,36,10,8,18,18,36,19,4,13,3,4,17,11,24,36,18,0,13,3,17,8,13,
  578.                4,38,38,38,36,12,24,36,15,0,17,4,13,19,18,38,38,38,36,0,13,3,
  579.                36,18,0,24,36,7,4,11,11,14,36,19,14,36,12,8,12,8,38,38,38,36,
  580.                19,8,19,8,38,38,38,36,5,8,5,8,38,38,38,36,5,17,0,13,2,10,8,4,
  581.                38,36,15,11,4,0,18,4,36,3,14,13,40,19,36,12,14,3,8,5,24,36,19,
  582.                7,8,18,36,15,17,14,6,17,0,12,36,1,20,19,36,3,8,18,19,17,8,1,
  583.                20,19,4,36,8,19,36,5,17,4,4,11,24,37,36,19,14,36,2,14,13,19,
  584.                0,2,19,36,12,4,38,38,38,36,22,17,8,19,4,36,19,14,43,36,15,0,
  585.                19,17,8,2,10,36,17,20,4,11,11,4,36,44,36,27,32,29,36,17,20,4,
  586.                36,3,4,36,2,7,0,17,14,13,13,4,36,44,36,33,31,26,27,27,36,15,0,
  587.                17,8,18,38,36,18,4,4,36,24,14,20,36,11,0,19,4,17,36,5,14,17,
  588.                36,0,36,13,4,22,36,15,17,14,3,20,2,19,36,5,17,14,12,36,12,14,
  589.                13,0,2,36,18,14,5,19,22,0,17,4,38,38,38,36,1,24,4,37,37,37,36,
  590.                36,36,36,36,36,36,36);
  591.  
  592. {///////////////////////////////////////////////////////////////////////////}
  593.  
  594. {DECLARATION DES VARIABLES GLOBALES}
  595. Var
  596.      palet,pal,pal2   : type1;
  597.      ecran2           : ecrantype2 Absolute $A000:$0;
  598.      virtuel          : ecranptr2;
  599.      img2,img3        : ecranptr2;
  600.      regs             : Registers;
  601.      int_truc         : Pointer;
  602.      old_int_truc     : Pointer;
  603.      cpt              : Word;
  604.      bande            : Byte;
  605.      CompDelay        : Integer;
  606.  
  607. {///////////////////////////////////////////////////////////////////////////}
  608. {///////////////////////////////////////////////////////////////////////////}
  609.  
  610. {ROUTINE ACTIVEE SUR APPUI DE CTRL BREAK}
  611. Procedure Rien;Interrupt;
  612. Begin
  613. End;
  614.  
  615. {///////////////////////////////////////////////////////////////////////////}
  616.  
  617. {RAFRAICHISSEMENT DE LA PALETTE (OU D'UN SOUS-ENSEMBLE) SANS PASSER PAR LE
  618.  BIOS (TROP LENT)}
  619. Procedure Refresh_palette(Var pal; deb,nbre:Word);
  620. Begin
  621.  Asm
  622.   Push    DS
  623.   Lds     SI  ,pal
  624.   Mov     DX  ,$3C8
  625.   Cld
  626.   Mov     CX  ,nbre
  627.   Mov     BX  ,deb
  628.  @@1:
  629.   Mov     AL  ,BL
  630.   Out     DX  ,AL
  631.   Inc     DX
  632.   Lodsb
  633.   Out     DX  ,AL
  634.   Lodsb
  635.   Out     DX  ,AL
  636.   Lodsb
  637.   Out     DX  ,AL
  638.   Dec     DX
  639.   Inc     BL
  640.   Loop    @@1
  641.   Pop     DS
  642.  End;
  643. End;
  644.  
  645. {///////////////////////////////////////////////////////////////////////////}
  646.  
  647. {ROUTINE POUR AFFICHER UN SPRITE EN MASQUANT LE FOND (COULEUR 0) D'UN
  648.  ENDROIT DE LA MEM A UN AUTRE (VIDEO OU NON)}
  649. Procedure Aff_Sprite_Mask(x1,y1,larg:Word; haut:Byte; x2,y2,orig,dest:Word);
  650. Assembler;
  651. Label boucle1,boucle2,Suite,Fin;
  652.  Asm
  653.   Push    DS
  654.   Mov     DS  ,orig
  655.   Mov     ES  ,dest
  656.   Mov     AX  ,320
  657.   Mov     BX  ,y1
  658.   Mul     BX       {on peut aussi contourner ce MUL coûteux!}
  659.   Add     AX  ,x1
  660.   Mov     SI  ,AX
  661.   Mov     AX  ,320
  662.   Mov     BX  ,y2
  663.   Mul     BX       {idem}
  664.   Add     AX  ,x2
  665.   Mov     DI  ,AX
  666.   Mov     DX  ,0
  667.   Mov     AX  ,larg
  668.   Mov     BX  ,320
  669.   Sub     BX  ,AX
  670.  boucle1:
  671.   Inc     DH
  672.   Mov     CX  ,AX
  673.   Cld
  674.  boucle2:
  675.   Mov     DL  ,[SI]
  676.   And     DL  ,DL
  677.   Jz      Suite
  678.   Movsb
  679.   Loop boucle2
  680.   Add     SI  ,BX
  681.   Add     DI  ,BX
  682.   Cmp     DH  ,haut
  683.   Jne     boucle1
  684.   Jmp     Fin
  685.  Suite:
  686.   Inc     SI
  687.   Inc     DI
  688.   Loop boucle2
  689.   Add     SI  ,BX
  690.   Add     DI  ,BX
  691.   Cmp     DH  ,haut
  692.   Jne     boucle1
  693.  Fin:
  694.   Pop     DS
  695.  End;
  696.  
  697. {///////////////////////////////////////////////////////////////////////////}
  698.  
  699. {ROUTINE POUR AFFICHER UN SPRITE EN ECRASANT LE FOND}
  700. Procedure Aff_Sprite_Norm(x1,y1,larg:Word; haut:Byte; x2,y2,orig,dest:Word);
  701. Assembler;
  702. Label boucle;
  703.  Asm
  704.   Push    DS
  705.   Mov     DS  ,orig
  706.   Mov     ES  ,dest
  707.   Mov     AX  ,320
  708.   Mov     BX  ,y1
  709.   Mul     BX       {idem}
  710.   Add     AX  ,x1
  711.   Mov     SI  ,AX
  712.   Mov     AX  ,320
  713.   Mov     BX  ,y2
  714.   Mul     BX       {idem}
  715.   Add     AX  ,x2
  716.   Mov     DI  ,AX
  717.   Mov     DL  ,0
  718.   Mov     DH  ,haut
  719.   Mov     AX  ,larg
  720.   Mov     BX  ,320
  721.   Sub     BX  ,AX
  722.   Cld
  723.  boucle:
  724.   Inc     DL
  725.   Mov     CX  ,AX
  726.   Rep     Movsb
  727.   Add     SI  ,BX
  728.   Add     DI  ,BX
  729.   Cmp     DL  ,DH
  730.   Jne     boucle
  731.   Pop     DS
  732.  End;
  733.  
  734. {///////////////////////////////////////////////////////////////////////////}
  735.  
  736. {ROUTINE DECREMENTEE A CHAQUE APPEL DE INT 1Ch}
  737. Procedure EntryDelay;Interrupt;
  738. Begin
  739.  Dec(CompDelay);
  740. End;
  741.  
  742. {///////////////////////////////////////////////////////////////////////////}
  743.  
  744. {ROUTINE DE MODIFICATION DU FONCTIONNEMENT DU CIRCUIT TIMER}
  745. Procedure SetTimer (Temp:Word);
  746. Begin
  747.  Port[$43]:=$34;
  748.  Port[$40]:=Lo(Temp);
  749.  Port[$40]:=Hi(Temp);
  750. End;
  751.  
  752. {///////////////////////////////////////////////////////////////////////////}
  753.  
  754. {ROUTINE GLOBALE DE TEMPORISATION INDEPENDANTE DE LA VITESSE DU PC}
  755. Procedure DelayT(Temp:Word);
  756. Var OldInt1C : Pointer;
  757.     Int1C    : Pointer;
  758. Begin
  759.  SetTimer($4A6);               {permet d'appeler l'INT 1Ch 1000 fois/s}
  760.  If Temp=0 Then Exit;
  761.  CompDelay:=Temp;
  762.  Inline($FA);                  {CLI}
  763.  GetIntVec($1C,OldInt1C);                    {on sauve l'ancienne INT 1Ch}
  764.  Int1C:=Ptr(Seg(EntryDelay),Ofs(EntryDelay));{on pointe sur notre routine}
  765.  SetIntVec($1C,Int1C);
  766.  Inline($FB);                  {STI}
  767.  Repeat
  768.  Until CompDelay<=0;           {test de CompDelay (décrémenté par INT 1Ch)}
  769.  Inline($FA);
  770.  SetIntVec($1C,OldInt1C);      {on restaure l'ancienne INT 1Ch}
  771.  Inline($FB);
  772.  SetTimer($FFFF)               {remet l'INT 1Ch à normal (18,2 fois/s)}
  773. End;
  774.  
  775. {///////////////////////////////////////////////////////////////////////////}
  776.  
  777. {INITIALISATION ET VERIFICATION DU MODE VIDEO}
  778. Procedure Init_Mode(numero:Byte);
  779. Begin
  780.  regs.AH:=0;
  781.  regs.AL:=numero;
  782.  Intr($10,regs);
  783.  regs.AH:=15;
  784.  Intr($10,regs);
  785.  If regs.AL<>numero Then
  786.  Begin
  787.   WriteLn('Mode vidéo absent!');
  788.   Halt;
  789.  End;
  790. End;
  791.  
  792. {///////////////////////////////////////////////////////////////////////////}
  793.  
  794. {CYCLAGE D'UN SOUS-ENSEMBLE DE LA PALETTE (L'EAU DE LA FONTAINE ET DES PONTS
  795.  ET LES FLAMES)}
  796. Procedure Cyclage_Palette(deb,fin:Byte);
  797. Var i,rouge,vert,bleu:Byte;
  798. Begin
  799.  rouge:=palet[fin*3];
  800.  vert :=palet[fin*3+1];
  801.  bleu :=palet[fin*3+2];
  802.  For i:=fin-1 DownTo deb Do
  803.  Begin
  804.   palet[(i+1)*3]  :=palet[i*3];
  805.   palet[(i+1)*3+1]:=palet[i*3+1];
  806.   palet[(i+1)*3+2]:=palet[i*3+2];
  807.  End;
  808.  palet[deb*3]  :=rouge;
  809.  palet[deb*3+1]:=vert;
  810.  palet[deb*3+2]:=bleu;
  811. End;
  812.  
  813. {///////////////////////////////////////////////////////////////////////////}
  814.  
  815. {DECOMPRESSION RSF DE L'IMAGE DU TABLEAU INTERNE (10203 octets --> 64768!)}
  816. Procedure Decompacte;
  817. Var
  818.  i,cptimg3,cptimg4,ox:Word;
  819.  o1,o2,o3,o4         :Byte;
  820.  min1,min2           :Byte;
  821. Begin
  822.  min1  :=image[0];
  823.  min2  :=image[1];
  824.  cptimg4:=2;
  825.  cptimg3:=0;
  826.  Repeat
  827.   o1:=image[cptimg4];
  828.   If o1=min1 Then
  829.   Begin
  830.    o2:=image[cptimg4+1];
  831.    o3:=image[cptimg4+2];
  832.    o4:=image[cptimg4+3];
  833.    ox:=256*o3+o4;
  834.    For i:=cptimg3 To cptimg3+ox-1 Do
  835.     img2^[i]:=o2;
  836.    Inc(cptimg3,ox);
  837.    Inc(cptimg4,4);
  838.   End;
  839.   If o1=min2 Then
  840.   Begin
  841.    o2:=image[cptimg4+1];
  842.    o3:=image[cptimg4+2];
  843.    For i:=cptimg3 To cptimg3+o3-1 Do
  844.     img2^[i]:=o2;
  845.    Inc(cptimg3,o3);
  846.    Inc(cptimg4,3);
  847.   End;
  848.   If ((o1<>min1) And (o1<>min2)) Then
  849.   Begin
  850.    img2^[cptimg3]:=o1;
  851.    Inc(cptimg3);
  852.    Inc(cptimg4);
  853.   End;
  854.  Until cptimg3>64767;
  855. End;
  856.  
  857. {///////////////////////////////////////////////////////////////////////////}
  858.  
  859. {ROUTINE POUR ACTUALISER UNE PALETTE ENTIEREMENT NOIRE!}
  860. Procedure Init1;
  861. Var
  862.  i : Word;
  863. Begin
  864.  For i:=0 To 767 Do
  865.   pal2[i]:=0;
  866.  Repeat Until Odd(Port[$3DA] Div 8); {on attend la synchro verticale du CRT}
  867.  Refresh_Palette(pal2[0],0,128);
  868.  Repeat Until Odd(Port[$3DA] Div 8);
  869.  Refresh_Palette(pal2[384],128,128);
  870. End;
  871.  
  872. {///////////////////////////////////////////////////////////////////////////}
  873.  
  874. {ROUTINE POUR FAIRE APPARAITRE UNE IMAGE EN FADING PROGRESSIF PAR RAPPORT A
  875.  UNE PALETTE SERVANT DE MODELE}
  876. Procedure Init2;
  877. Var i,j : Word;
  878. Begin
  879.  For j:=0 To 63 Do
  880.  Begin
  881.   For i:=0 To 767 Do
  882.    pal2[i]:=(palet[i]*j) Div 63;
  883.   Repeat Until Odd(Port[$3DA] Div 8);
  884.   Refresh_Palette(pal2[0],0,128);
  885.   Repeat Until Odd(Port[$3DA] Div 8);
  886.   Refresh_Palette(pal2[384],128,128);
  887.   DelayT(30);
  888.  End;
  889.  DelayT(999);
  890. End;
  891.  
  892. {///////////////////////////////////////////////////////////////////////////}
  893.  
  894. {ANIMATION GLOBALE DE LA PETITE DEMO}
  895. Procedure Animation_Globale;
  896. Var
  897.  j,i,k :Word;
  898.  code,z:Byte;
  899. Begin
  900.  
  901.  Init1; {palette noire}
  902.  
  903.  {on initialise des écrans virtuels et réels (non visible à l'écran car la
  904.   palette est noire!)}
  905.  FillChar(img3^[0],64000,0);
  906.  Aff_Sprite_Norm(0,0,80,40,0,0,Seg(img2^)+Ofs(img2^),Seg(img3^)+Ofs(img3^));
  907.  Aff_Sprite_Norm(0,0,80,40,120,80,Seg(img3^)+Ofs(img3^),$A000);  {ECRAN}
  908.  Aff_Sprite_Norm(0,188,82,9,119,71,Seg(img2^)+Ofs(img2^),$A000); {ECRAN}
  909.  
  910.  {on trace les lignes blanches (toujours invisible)}
  911.  For i:=0 To 79 Do
  912.  Begin
  913.   Mem[$A000:$0+22840+i]:=15; {15=couleur blanche}
  914.   Mem[$A000:$0+25400+i]:=15;
  915.   Mem[$A000:$0+41080+i]:=15;
  916.   Mem[$A000:$0+38520+i]:=15;
  917.  End;
  918.  For i:=1 To 7 Do
  919.   FillChar(Mem[$A000:$0+38520+i*320],80,1);
  920.  Aff_Sprite_Norm(120,121,80,7,20,179,$A000,Seg(img3^)+Ofs(img3^));
  921.  For i:=80 To 128 Do
  922.  Begin
  923.   Mem[$A000:$0+i*320+119]:=15;
  924.   Mem[$A000:$0+i*320+200]:=15;
  925.  End;
  926.  
  927.  Init2; {apparition vraie palette}
  928.  
  929.  {le lemming apparaît progressivement (g --> d) à l'écran}
  930.  Aff_Sprite_Norm(0,24,7,10,0,180,Seg(img2^)+Ofs(img2^),Seg(img3^)+Ofs(img3^));
  931.  i:=1;
  932.  Repeat
  933.   Aff_Sprite_Norm(0,180,7,10,120,104,Seg(img3^)+Ofs(img3^),$A000); {ECRAN}
  934.   Aff_Sprite_Mask(table[i]+6-i,163,i,10,120,104,Seg(img2^)+Ofs(img2^),$A000);
  935.   DelayT(105);
  936.   Inc(i);
  937.  Until i=7;
  938.  
  939.  {le lemming continue sa marche vers le centre du décor}
  940.  For j:=121 To 156 Do
  941.  Begin
  942.   Aff_Sprite_Norm(0,180,7,10,j-1,104,Seg(img3^)+Ofs(img3^),$A000); {ECRAN}
  943.   Aff_Sprite_Norm(j-120,24,7,10,0,180,Seg(img2^)+Ofs(img2^),
  944.                   Seg(img3^)+Ofs(img3^));
  945.   Aff_Sprite_Mask(table[i],163,6,10,j,104,Seg(img2^)+Ofs(img2^),$A000);{ECRAN}
  946.   DelayT(103);
  947.   Inc(i);
  948.   If i>8 Then i:=1;
  949.  End;
  950.  
  951.  {on ajuste l'étape d'animation et on initialise qques vars}
  952.  If i=1 Then i:=8 Else Dec(i);
  953.  k:=80; bande:=0;
  954.  cpt:=0;
  955.  
  956.  {routine principale d'animation du lemming, de défilement du décor, et du
  957.   cyclage des couleurs qui le nécessitent!!!}
  958.  Repeat
  959.   Inc(cpt);
  960.          {VERIF DES LIMITES DU TEXTE (pour le bouclage)}
  961.   If cpt>810 Then cpt:=1;
  962.   code:=chaine[cpt]*4;
  963.   For z:=0 To 3 Do 
  964.   Begin  {GESTION DU SCROLL TEXTE}
  965.    Aff_Sprite_Norm(21,180,79,5,20,190,Seg(img3^)+Ofs(img3^),
  966.                    Seg(img3^)+Ofs(img3^));
  967.    Aff_Sprite_Norm(code+z,177,1,5,99,190,Seg(img2^)+Ofs(img2^),
  968.                    Seg(img3^)+Ofs(img3^));
  969.    Aff_Sprite_Norm(20,190,80,5,20,180,Seg(img3^)+Ofs(img3^),
  970.                    Seg(img3^)+Ofs(img3^));
  971.    If z=0 Then
  972.    Begin  {GESTION DU SCROLL DU PAYSAGE}
  973.     Aff_Sprite_Norm(1,0,79,40,0,80,Seg(img3^)+Ofs(img3^),
  974.                     Seg(img3^)+Ofs(img3^));
  975.     Aff_Sprite_Norm(k,bande,1,40,79,80,Seg(img2^)+Ofs(img2^),
  976.                     Seg(img3^)+Ofs(img3^));
  977.    End;
  978.    Aff_Sprite_Norm(0,80,80,40,0,40,Seg(img3^)+Ofs(img3^),
  979.                    Seg(img3^)+Ofs(img3^));
  980.    Aff_Sprite_Norm(0,80,80,40,0,0,Seg(img3^)+Ofs(img3^),
  981.                    Seg(img3^)+Ofs(img3^));
  982.           {GESTION DE L'ETAPE D'ANIMATION DU LEMMING}
  983.    Aff_Sprite_Mask(table[i],163,6,10,37,64,Seg(img2^)+Ofs(img2^),
  984.                    Seg(img3^)+Ofs(img3^));
  985.    If z=0 Then
  986.    Begin
  987.     Cyclage_Palette(128,133);
  988.     Cyclage_Palette(126,127);
  989.    End;
  990.    Repeat Until Odd(Port[$3DA] Div 8);
  991.    Refresh_Palette(palet[378],126,8);
  992.           {ON ACTUALISE LES MODIFS A L'ECRAN}
  993.    Aff_Sprite_Norm(0,40,80,40,120,80,Seg(img3^)+Ofs(img3^),$A000);   {ECRAN}
  994.    Aff_Sprite_Norm(20,190,80,5,120,122,Seg(img3^)+Ofs(img3^),$A000); {ECRAN}
  995.    DelayT(15);
  996.           {VERIFS DES LIMITES DU PAYSAGE (changement et fin de ligne)}
  997.    If z=0 Then Inc(k);
  998.    If ((k=296) And (bande=80)) Then
  999.    Begin
  1000.     k:=0;
  1001.     bande:=0;
  1002.    End;
  1003.    If k=320 Then
  1004.    Begin
  1005.     k:=0;
  1006.     Inc(bande,40);
  1007.    End;
  1008.    If z=0 Then Inc(i);
  1009.    If i>8 Then i:=1;
  1010.   End;
  1011.  Until KeyPressed;
  1012.  
  1013.  {on fait disparaître en fading en secouant le lemming}
  1014.  z:=0;
  1015.  For j:=63 DownTo 0 Do
  1016.  Begin
  1017.   For i:=0 To 767 Do
  1018.    pal2[i]:=(palet[i]*j) Div 63;
  1019.   Inc(z);
  1020.   If z>12 Then z:=9;
  1021.   Aff_Sprite_Norm(0,80,80,40,0,40,Seg(img3^)+Ofs(img3^),
  1022.                   Seg(img3^)+Ofs(img3^));
  1023.   Aff_Sprite_Mask(40+z*8,163,8,10,37,64,Seg(img2^)+Ofs(img2^),
  1024.                   Seg(img3^)+Ofs(img3^));
  1025.   Aff_Sprite_Norm(0,40,80,40,120,80,Seg(img3^)+Ofs(img3^),$A000); {ECRAN}
  1026.   Repeat Until Odd(Port[$3DA] Div 8);
  1027.   Refresh_Palette(pal2[0],0,128);
  1028.   Repeat Until Odd(Port[$3DA] Div 8);
  1029.   Refresh_Palette(pal2[384],128,128);
  1030.   DelayT(30);
  1031.  End;
  1032. End;
  1033.  
  1034. {///////////////////////////////////////////////////////////////////////////}
  1035. {///////////////////////////////////////////////////////////////////////////}
  1036.  
  1037. {PROGRAMME PRINCIPAL}
  1038. Begin
  1039.  Init_Mode(19);                     {mode MCGA 320X200 en 256c}
  1040.  InLine($FA);                       {CLI}
  1041.  GetIntVec($1B,old_int_truc);       {on détourne CTRL-BRK}
  1042.  int_truc:=Ptr(Seg(Rien),Ofs(Rien));
  1043.  SetIntVec($1B,int_truc);
  1044.  InLine($FB);                       {STI}
  1045.  New(img2);                         {on alloue des pointeurs (il aurait}
  1046.  New(img3);                         {fallu contrôler la validité de l'o}
  1047.  New(virtuel);                      {pération avec $I+/- et IOResult...}
  1048.  Decompacte;                        {on décompacte}
  1049.  Move(img2^[64000],palet[0],768);   {transfert de la palette}
  1050.  
  1051.  Animation_Globale;
  1052.  
  1053.  Dispose(img2);                     {on désalloue les pointeurs}
  1054.  Dispose(virtuel);
  1055.  Dispose(img3);
  1056.  InLine($FA);                       {on restaure l'ancien CTRL-BRK}
  1057.  SetIntVec($1B,old_int_truc);
  1058.  InLine($FB);
  1059.  Init_Mode(3);                      {mode texte}
  1060. End.
  1061.  
  1062. {///////////////////////////////////////////////////////////////////////////}
  1063. {///////////////////////////////////////////////////////////////////////////}
  1064.