procedure addscore (scorevalue : integer); forward;

type
   string80 = string[80];
   string20 = string[20];

VAR

plane0          : BitMap;
plane2          : BitMap;
plane1          : BitMap;
plane3          : BitMap;
ColorMap        : Cmap;
ScrollMap       : Smap;

parameter       : string80;
TopTenFile      : file;
name            : array [1..20] of char;
ScoreDate       : string[8];
Pointshi        : integer;
Pointslo        : integer;
lines           : integer;
TopTenRecord    : array [1..384] of byte;
inserted        : boolean;

P               : integer;
Q               : integer;
R               : integer;
S               : integer;
i               : integer;
j               : integer;
fruitstart      : integer;
fruitend        : integer;
fruitlength     : integer;
fruitnr         : integer;
score           : integer;
scoreaddon      : integer;
scorecarry      : integer;
bullets         : integer;
bulletsmax      : integer;
hits            : integer;
PowerPill       : integer;
Lives           : integer;
nextpacman      : integer;
xkoordpacman    : integer;
ykoordpacman    : integer;
pacmandir       : integer;
nextpacmandir   : integer;
aggression      : integer;
speed           : integer;
speedcounter1   : integer;
speedcounter2   : integer;
speedloop1      : integer;
speedloop2      : integer;
movecount       : integer;
nextghost       : integer;
enemydir        : array [2..5] of integer;
xkoord          : array [2..5] of integer;
ykoord          : array [2..5] of integer;
enemyeaten      : array [2..5] of boolean;
horizontallines : array [0..9] of integer;
verticallines   : array [0..8] of integer;
enemy           : array [0..719] of integer;
pacman          : array [0..639] of integer;
dots            : array [1..29] of integer;
digit           : array [0..219] of integer;
layoutenemy     : array [1..675] of integer;
layoutpacman    : array [1..675] of integer;
gethomefast     : array [1..135] of integer;
gethome         : array [1..135] of integer;
bulletsplane    : array [1..34] of integer;
closed          : boolean;
collision       : boolean;
fruitdisplay    : boolean;
scorestring     : longstring;

CONST

black:   byte=0;   green:     byte=1;   red:       byte=2;   redviolet: byte=3;
purple:  byte=4;   brown:     byte=5;   yellow:    byte=6;   white:     byte=7;
switch1: byte=8;   switch2:   byte=9;   switch3:   byte=10;  orange:    byte=11;
blue:    byte=12;  turquoise: byte=13;  burgandy:  byte=14;  pink:      byte=15;

digitwidth      : integer = 8;
kraftmax        : integer = 700;
pacmanstartx    : integer = 206;
pacmanstarty    : integer = 99;
enemystartx     : integer = 140;
enemystarty     : integer = 99;
pacmenplacex    : integer = 353;
mask4           : array [0..8] of integer = (
                 $01FF,$80FF,$C07F,$E03F,$F01F,$F80F,$FC07,$FE03,$FF01);
mask5           : array [9..15] of integer = (
                 $FF80,$FFC0,$FFE0,$FFF0,$FFF8,$FFFC,$FFFE);
mask6           : array [9..15] of integer = (
                 $FFFF,$7FFF,$3FFF,$1FFF,$0FFF,$07FF,$03FF);
maskleft        : array [0..15] of integer = (
                 $7FFF,$BFFF,$DFFF,$EFFF,$F7FF,$FBFF,$FDFF,$FEFF,
                 $FF7F,$FFBF,$FFDF,$FFEF,$FFF7,$FFFB,$FFFD,$FFFE);
maskright       : array [0..15] of integer = (
                 $7FFF,$3FFF,$9FFF,$CFFF,$E7FF,$F3FF,$F9FF,$FCFF,
                 $FE7F,$FF3F,$FF9F,$FFCF,$FFE7,$FFF3,$FFF9,$FFFC);
digitarray      : array [0..109] of integer = (
          $00FE,$0082,$0082,$0082,$0082,$0082,$0082,$0082,$0082,$0082,$00FE,
          $0002,$0002,$0002,$0002,$0002,$0002,$0002,$0002,$0002,$0002,$0002,
          $00FE,$0002,$0002,$0002,$0002,$00FE,$0080,$0080,$0080,$0080,$00FE,
          $00FE,$0002,$0002,$0002,$0002,$00FE,$0002,$0002,$0002,$0002,$00FE,
          $0082,$0082,$0082,$0082,$0082,$00FE,$0002,$0002,$0002,$0002,$0002,
          $00FE,$0080,$0080,$0080,$0080,$00FE,$0002,$0002,$0002,$0002,$00FE,
          $0080,$0080,$0080,$0080,$0080,$00FE,$0082,$0082,$0082,$0082,$00FE,
          $00FE,$0002,$0002,$0002,$0002,$0002,$0002,$0002,$0002,$0002,$0002,
          $00FE,$0082,$0082,$0082,$0082,$00FE,$0082,$0082,$0082,$0082,$00FE,
          $00FE,$0082,$0082,$0082,$0082,$00FE,$0002,$0002,$0002,$0002,$0002);
fruitarray      : array [0..419] of integer = (
          $0000,$0000,$0600,$0000,$0100,$0000,$0000,$0080,$0000,$0080,$0000,
          $0080,$0100,$00C0,$0100,$00C0,$0100,$00C0,$0300,$00E0,$0300,$00E0,
          $0700,$00F0,$0F00,$00F8,$0F00,$00F8,$1F00,$00FC,$1F00,$00FC,$1F00,
          $00FC,$1F00,$00FC,$0F00,$00F8,$0300,$00E0,$0000,$0000,
          $0000,$0000,$1A00,$C0DD,$7700,$007B,$0E00,$00DC,$0F00,$0078,$0300,
          $00F0,$0100,$00E0,$0300,$00F0,$0700,$00F8,$0700,$00F8,$0F00,$00FC,
          $0F00,$00FC,$0F00,$00FC,$0F00,$00FC,$0F00,$00FC,$0F00,$00FC,$0700,
          $00F8,$0700,$00F8,$0300,$00F0,$0100,$00E0,$0000,$0000,
          $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,
          $0080,$0100,$00C0,$0300,$00E0,$0700,$00F0,$0700,$00F0,$0F00,$00F8,
          $0F00,$00F8,$0F00,$00F8,$0F00,$00F8,$0700,$00F0,$0700,$00F0,$0300,
          $00E0,$0100,$00C0,$0000,$0080,$0000,$0000,$0000,$0000,
          $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0100,
          $00E0,$0F00,$00FC,$3F00,$00FF,$7F00,$80FF,$7F00,$80FF,$7F00,$80FF,
          $7F00,$80FF,$3F00,$00FF,$3F00,$00FF,$3F00,$00FF,$1F00,$00FE,$1F00,
          $00FE,$0F00,$00FC,$0700,$00F8,$0100,$00E0,$0000,$0000,
          $0000,$0000,$0000,$0000,$0200,$0000,$0100,$0000,$0100,$0000,$0000,
          $0080,$0000,$0080,$0000,$0080,$0100,$00C0,$0300,$00E0,$0300,$00E0,
          $0700,$00F0,$0700,$00F0,$0700,$00F0,$0700,$00F0,$0700,$00F0,$0300,
          $00E0,$0300,$00E0,$0100,$00C0,$0000,$0000,$0000,$0000,
          $0000,$0000,$0000,$0000,$0000,$0080,$0000,$0040,$0000,$0040,$0000,
          $00E0,$0100,$00F0,$0300,$00F8,$0700,$00FC,$0700,$00FC,$0300,$00F8,
          $0300,$00F8,$0100,$00F0,$0100,$00F0,$0000,$00E0,$0000,$00E0,$0000,
          $0040,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,
          $0000,$0030,$0000,$0060,$0000,$00C0,$0000,$00C0,$0000,$00C0,$0800,
          $0088,$1D00,$00DC,$1D00,$00DC,$2A00,$00AA,$7700,$0077,$7700,$0077,
          $2A00,$00AA,$1D00,$00DC,$1D00,$00DC,$0A00,$00A8,$0700,$0070,$0700,
          $0070,$0200,$00A0,$0100,$00C0,$0100,$00C0,$0000,$0080,
          $0000,$0000,$0001,$0000,$C001,$0000,$C001,$0000,$E001,$0000,$F001,
          $0000,$F800,$0000,$F800,$0000,$7C00,$0000,$7E00,$0000,$3F00,$0000,
          $1F00,$0080,$0F00,$00C0,$0700,$00E0,$0300,$00F0,$0100,$00FC,$0000,
          $00FF,$0000,$803F,$0000,$C00F,$0000,$0000,$0000,$0000,
          $0000,$0000,$0100,$00E0,$0300,$00F0,$0F00,$00FC,$3F00,$00FF,$7F00,
          $80FF,$7F00,$80FF,$FF00,$C0FF,$FF00,$C0FF,$FF01,$E0FF,$FF01,$E0FF,
          $FF01,$E0FF,$FF01,$E0FF,$FF00,$C0FF,$FF00,$C0FF,$7F00,$80FF,$7F00,
          $80FF,$3F00,$00FF,$0F00,$00FC,$0300,$00F0,$0000,$0000,
          $0000,$0000,$0000,$0000,$0000,$0006,$0000,$000C,$0000,$0018,$0000,
          $0030,$0000,$0060,$0000,$00C0,$0300,$00F0,$0700,$00F8,$0F00,$00FC,
          $0F00,$00FC,$1F00,$00FE,$1F00,$00FE,$1F00,$00FE,$0F00,$00FC,$0F00,
          $00FC,$0700,$00F8,$0100,$00E0,$0000,$0000,$0000,$0000);

horizontallinesconst : array [0..69] of integer = (
          $FEFE,$6C6A,$144C,$1854,$2EA4,$0A94,$7E54,$1484,$4A94,$FEFE,
          $FEFE,$5090,$D210,$4A08,$020A,$4214,$D22A,$5ACC,$52B4,$FEFE,
          $FEFE,$6FDC,$3CF4,$2860,$2234,$3234,$1E30,$0414,$27B4,$FEFE,
          $FEFE,$746C,$646C,$C652,$C392,$6204,$0FD2,$16E0,$6430,$FEFE,
          $FEFE,$4730,$01A8,$0720,$620A,$3A08,$14C2,$3884,$582A,$FEFE,
          $FEFE,$5FE4,$BA4C,$825C,$030C,$0394,$2648,$6C18,$6CA8,$FEFE,
          $FEFE,$3E5C,$32A0,$6140,$CA04,$171A,$18B0,$59E8,$7AB8,$FEFE);
verticallinesconst   : array [0..62] of integer = (
          $8183,$D79D,$FBF7,$E1A9,$FDEF,$B021,$E5BF,$F3FB,$8C01,
          $85C1,$9E3F,$80C7,$F331,$FDED,$87CD,$9811,$E307,$84C1,
          $8001,$8001,$C38F,$F58F,$CDE9,$E0C7,$F6DF,$D961,$8801,
          $8181,$87D1,$9985,$B81F,$9D6D,$C0B1,$F00D,$C9CF,$89C1,
          $9005,$CC43,$BA7F,$DC4D,$81F3,$C497,$A31D,$C369,$8183,
          $9101,$A01B,$F3F1,$BC01,$FD77,$FC3B,$89D7,$DB63,$81CD,
          $A181,$C0AB,$CE5F,$97BB,$B9F1,$E467,$B707,$C20F,$81C1);

(* Keyboard Routines *)

type registers = record case integer of
                1: (ax,bx,cx,dx,bp,si,di,ds,es,flags : integer);
                2: (al,ah,bl,bh,cl,ch,dl,dh : byte);
                end;

type    F_Key_Type = (
       _Help, _Do, _Compose, _PrintScreen, _Char, _F4, _nl2, _Interrupt,
       _nl3, _Resume, _nl4, _Cancel, _nl5, _MainScreen, _nl6, _Exit, _nl7,
       _AddtlnOptions, _nl8, _F17, _nl9, _F18, _nl10, _F19, _nl11, _F20,
       _nl12, _Find, _nl13, _InsertHere, _nl14, _Remove, _nl15, _Select,
       _nl16, _PrevScreen, _nl17, _NextScreen, _nl18, _UpArrow, _nl19,
       _DownArrow, _nl20, _RightArrow, _nl21, _LeftArrow, _nl22, _KP0,
       _nl23, _nl24, _KP1, _nl25, _nl26, _KP2, _nl27, _nl28, _KP3, _nl29,
       _nl30, _KP4, _nl31, _nl32, _KP5, _nl33, _nl34, _KP6, _nl35, _nl36,
       _KP7, _nl37, _nl38, _KP8, _nl39, _nl40, _KP9, _nl41, _nl42, _KPMinus,
       _nl43, _nl44, _KPComma, _nl45, _nl46, _KPPeriod, _nl47, _nl48,
       _KPEnter, _nl49, _nl50, _PF1, _nl51, _nl52, _PF2, _nl53, _nl54, _PF3,
       _nl55, _nl56, _PF4, _nl57, _nl58, _Break);

const   F_Keys : array [$0..$65] of F_Key_Type = (
       _Help, _Do, _Compose, _PrintScreen, _Char, _F4, _nl2, _Interrupt,
       _nl3, _Resume, _nl4, _Cancel, _nl5, _MainScreen, _nl6, _Exit, _nl7,
       _AddtlnOptions, _nl8, _F17, _nl9, _F18, _nl10, _F19, _nl11, _F20,
       _nl12, _Find, _nl13, _InsertHere, _nl14, _Remove, _nl15, _Select,
       _nl16, _PrevScreen, _nl17, _NextScreen, _nl18, _UpArrow, _nl19,
       _DownArrow, _nl20, _RightArrow, _nl21, _LeftArrow, _nl22, _KP0,
       _nl23, _nl24, _KP1, _nl25, _nl26, _KP2, _nl27, _nl28, _KP3, _nl29,
       _nl30, _KP4, _nl31, _nl32, _KP5, _nl33, _nl34, _KP6, _nl35, _nl36,
       _KP7, _nl37, _nl38, _KP8, _nl39, _nl40, _KP9, _nl41, _nl42, _KPMinus,
       _nl43, _nl44, _KPComma, _nl45, _nl46, _KPPeriod, _nl47, _nl48,
       _KPEnter, _nl49, _nl50, _PF1, _nl51, _nl52, _PF2, _nl53, _nl54, _PF3,
       _nl55, _nl56, _PF4, _nl57, _nl58, _Break);

type    KeyType = record                        { Returned by ReadKbd }
                   Chr_Key   : char;           {  Character          }
                   Fun_Key   : F_Key_Type;     {  Function Key Value }
                   Ctrl_Key,                   { \                   }
                   Shift_Key,                  {  >  True If On      }
                   Lock_Key  : boolean;        { /                   }
                 end;
var
   Keystroke : keytype;