[comp.sources.games] v01i024: sidtool - pacman game for Suns, Patch2

games-request@tekred.TEK.COM (05/22/87)

Submitted by: Rich Burridge <munnari!sunk.oz!richb@seismo.css.gov>
Comp.sources.games: Volume 1, Issue 24
Archive-name: sidtool/Patch2


	[Before you flood my mailbox asking about Patch1, please
	 remember that the version posted to comp.sources.games
	 already had Patch1 applied before it was posted.  -br]

This is official patch #2 for sidtool. This patch does the following:

  +Bumps the patchlevel to 2.
  +Correctly resizes function key string array values in sid_stuff.c
  +Now uses perror for error conditions and exits with a positive number.
  +Fcloses the help file each time (was a problem in demomode).
  +Include code for the joystick interface.
  +Uses the default font if screen.r.14 is not available.
  +Finally fixes the function key reset problem (hopefully).
  +Tries to smooth out the speed of the game.
  +Move autoplay score to player 1's score position.
  +Displays direction icon at top of maze.

To use the mouse as a joystick, simply move the mouse in the
direction you want to go. The right hand button of the mouse can
also be used to stop and start the game (^S / ^Q).

It an attempt to smooth out the speed this might means some adjusting on
other machines besides the 3/50, on which sidtool was tested.

    Rich.

Rich Burridge,            JANET richb%sunk.oz@uk.ac.ucl.cs
ACSnet  richb@sunk.oz     UUCP {seismo,hplabs,ukc}!munnari!sunk.oz!richb
PHONE: +61 3 811 9927     ARPAnet richb%sunk.oz@seismo.css.gov
MAIL: Sun Microsystems, 123 Camberwell Rd, Hawthorn, VICTORIA 3122, AUST


------CUT HERE------CUT HERE------CUT HERE------
*** patchlevel.h.old	Thu May 21 06:45:45 1987
--- patchlevel.h	Thu May 21 06:48:05 1987
***************
*** 1 ****
! #define  PATCHLEVEL  1
--- 1 ----
! #define  PATCHLEVEL  2
*** Makefile.old	Thu May 21 08:55:48 1987
--- Makefile	Thu May 21 13:01:57 1987
***************
*** 14,19 ****
--- 14,21 ----
  OBJS            = sid_blt.o sid_main.o sid_stuff.o sid_sun.o
  SRCS            = sid_blt.c sid_main.c sid_stuff.c sid_sun.c
  HDRS            = bltstuff.h sidtool.h
+ ICONS		= up_arrow.icon down_arrow.icon left_arrow.icon right_arrow.icon \
+ 		  sidtool.icon
  LIBS            = -lsuntool -lsunwindow -lpixrect
  
  all:            sidtool
***************
*** 49,54 ****
  		cc $(LDFLAGS) -o sidtool $(OBJS) $(LIBS)
  
  sid_blt.o:      sid_blt.c $(HDRS)
! sid_main.o:     sid_main.c $(HDRS)
  sid_stuff.o:    sid_stuff.c $(HDRS)
  sid_sun.o:      sid_sun.c $(HDRS)
--- 51,56 ----
  		cc $(LDFLAGS) -o sidtool $(OBJS) $(LIBS)
  
  sid_blt.o:      sid_blt.c $(HDRS)
! sid_main.o:     sid_main.c $(HDRS) $(ICONS)
  sid_stuff.o:    sid_stuff.c $(HDRS)
  sid_sun.o:      sid_sun.c $(HDRS)
*** sid_blt.c.old	Thu May 21 06:46:08 1987
--- sid_blt.c	Thu May 21 13:15:31 1987
***************
*** 4,9 ****
--- 4,10 ----
   *  Various routines that do "rasterop" type graphics used by sidtool.
   *
   *  Written by Rich Burridge - SUN Microsystems Australia (Melbourne).
+  *  Joystick interface and various bug fixes by Dan Heller
   *
   *  Version 2.1.  -  April 1987.
   *
***************
*** 211,217 ****
          drawbox(x,y) ;
        else if (maze[x][y] == 'x') walls[x+2][y] = 1 ;   /* Borders. */
   
!   PPAUSE(pausetime*30) ;
    BLT_SCRN(XBASE-(SQUARE/2)-2,YBASE-(SQUARE/2)-2,
                    SQUARE*(XSIZE+1)+6,SQUARE*(YSIZE+1)+6,RINV) ;
    fixexits() ;
--- 212,218 ----
          drawbox(x,y) ;
        else if (maze[x][y] == 'x') walls[x+2][y] = 1 ;   /* Borders. */
   
!   PPAUSE(pausetime*10) ;
    BLT_SCRN(XBASE-(SQUARE/2)-2,YBASE-(SQUARE/2)-2,
                    SQUARE*(XSIZE+1)+6,SQUARE*(YSIZE+1)+6,RINV) ;
    fixexits() ;
***************
*** 220,231 ****
      for (x = 1; x <= XSIZE; x++)
        if (dots[player][x+1][y] == SMALLDOT)
          {
!           PPAUSE(pausetime*5) ;
            drawdot(x,y,SMALLDOT) ;
          }
        else if (dots[player][x+1][y] == BIGDOT)
          {
!           PPAUSE(pausetime*5) ;
            drawdot(x,y,BIGDOT) ;
          }
  
--- 221,232 ----
      for (x = 1; x <= XSIZE; x++)
        if (dots[player][x+1][y] == SMALLDOT)
          {
!           PPAUSE(pausetime) ;
            drawdot(x,y,SMALLDOT) ;
          }
        else if (dots[player][x+1][y] == BIGDOT)
          {
!           PPAUSE(pausetime) ;
            drawdot(x,y,BIGDOT) ;
          }
  
***************
*** 242,248 ****
  
    for (x = 1; x <= numcir[player]; x++)
      {
!       PPAUSE(pausetime*30) ;
        BLT_MEM_TO_SCRN(30+(x-1)*60,20,50,50,RXOR,circles[RIGHT][0],0,0) ;
      }
  
--- 243,249 ----
  
    for (x = 1; x <= numcir[player]; x++)
      {
!       PPAUSE(pausetime*10) ;
        BLT_MEM_TO_SCRN(30+(x-1)*60,20,50,50,RXOR,circles[RIGHT][0],0,0) ;
      }
  
***************
*** 272,278 ****
    clear_screen() ;
    dohelp() ;
    WRITELN(5,860,"Type DEL to begin") ;
!   for (i = 0; i < 100; i++) LONGPAUSE() ;
  
    newbugs(0) ;
    UNTRANSPT(130,350,dotx,doty) ;
--- 273,279 ----
    clear_screen() ;
    dohelp() ;
    WRITELN(5,860,"Type DEL to begin") ;
!   for (i = 0; i < 6; i++) LONGPAUSE() ;
  
    newbugs(0) ;
    UNTRANSPT(130,350,dotx,doty) ;
***************
*** 301,306 ****
--- 302,308 ----
  {
    int g ;
  
+   PPAUSE(pausetime) ;
    if (movei % 8) cirx-- ;
    drawcir(circles[LEFT][inc],cirx,ciry) ;
    if (movei % 4 == 0) inc = (inc + 1) % 4 ;
***************
*** 336,342 ****
  {
    int g,i ;
  
!    PPAUSE(8*movex) ;
     if (movei % 26) cirx++ ;
     drawcir(circles[RIGHT][inc],cirx,ciry) ;
     if (movei % 4 == 0) inc = (inc + 1) % 4 ;
--- 338,344 ----
  {
    int g,i ;
  
!    PPAUSE(pausetime * movex / 2) ;
     if (movei % 26) cirx++ ;
     drawcir(circles[RIGHT][inc],cirx,ciry) ;
     if (movei % 4 == 0) inc = (inc + 1) % 4 ;
***************
*** 351,357 ****
               bugs[g].eyesonly = 1 ;
               SPRINTF(buffer,"%1d",movej) ;
               WRITELN(bugs[g].scrx-20,440,buffer) ;
!              for (i = 0; i < 60; i++) LONGPAUSE() ;
               SPRINTF(buffer,"%1d",movej) ;
               WRITELN(bugs[g].scrx-20,440,buffer) ;
               movej *= 2 ;
--- 353,359 ----
               bugs[g].eyesonly = 1 ;
               SPRINTF(buffer,"%1d",movej) ;
               WRITELN(bugs[g].scrx-20,440,buffer) ;
!              LONGPAUSE() ;
               SPRINTF(buffer,"%1d",movej) ;
               WRITELN(bugs[g].scrx-20,440,buffer) ;
               movej *= 2 ;
***************
*** 362,368 ****
    if (++movei > 665)
      {
        SCHRFUNC(RRPL) ;
!       for (i = 0; i < 100; i++) LONGPAUSE() ;
        credits = 0 ;
        progstate = INITGAME ;
      }
--- 364,370 ----
    if (++movei > 665)
      {
        SCHRFUNC(RRPL) ;
!       LONGPAUSE() ;
        credits = 0 ;
        progstate = INITGAME ;
      }
***************
*** 387,402 ****
  
        BLT_MEM_TO_SCRN(x,y,45,45,RRPL,bugpics[g][0],0,0) ;
        BLT_MEM_TO_SCRN(x,y,45,21,RXOR,eyes[g],0,0) ;
!       for (i = 0; i < 40; i++) LONGPAUSE() ;
        SPRINTF(buffer,"- %s",names[g]) ;
        WRITELN(x+60,y+25,buffer) ;
!       for (i = 0; i < 40; i++) LONGPAUSE() ;
      }
  
    if ((fn = fopen(h_name,"r")) == NULL)
      {
!       FPRINTF(stderr,"\nsidtool: can't open %s\n",h_name) ;
!       exit(-1) ;
      }
    x = 105 ;
    y = 465 ;
--- 389,404 ----
  
        BLT_MEM_TO_SCRN(x,y,45,45,RRPL,bugpics[g][0],0,0) ;
        BLT_MEM_TO_SCRN(x,y,45,21,RXOR,eyes[g],0,0) ;
!       LONGPAUSE() ;
        SPRINTF(buffer,"- %s",names[g]) ;
        WRITELN(x+60,y+25,buffer) ;
!       LONGPAUSE() ;
      }
  
    if ((fn = fopen(h_name,"r")) == NULL)
      {
!       perror(h_name) ;
!       exit(1) ;
      }
    x = 105 ;
    y = 465 ;
***************
*** 406,411 ****
--- 408,414 ----
        WRITELN(x,i*15+y,line) ;
        i++ ;
      }
+   FCLOSE(fn) ;
    if (!autoplay) make_control_panel() ;
    if (!autoplay) display_settings() ;
  }
***************
*** 498,503 ****
--- 501,507 ----
              }
          }    
      }    
+   draw_joystick(curdir) ;
    if (checkcollision(cirmx,cirmy,&g)) handlecollision(&bugs[g]) ;
  }
  
***************
*** 553,559 ****
        oldcy = posy ;
        PPAUSE(pausetime*70) ;
      } 
!   for (i = 0; i < 80; i++) LONGPAUSE() ;
  }
  
  
--- 557,563 ----
        oldcy = posy ;
        PPAUSE(pausetime*70) ;
      } 
!   LONGPAUSE() ;
  }
  
  
***************
*** 567,573 ****
  {
    int x,y,t ;
  
!   PPAUSE(pausetime*30) ;
    for (y = 1; y <= YSIZE; y++)
      if (maze[0][y] == ' ')
        {
--- 571,577 ----
  {
    int x,y,t ;
  
!   PPAUSE(pausetime*10) ;
    for (y = 1; y <= YSIZE; y++)
      if (maze[0][y] == ' ')
        {
***************
*** 584,590 ****
          BLT_SCRN(3,t-2-SQUARE/2,XBASE-(SQUARE/2)-5,SQUARE*2+6,RINV) ;
        }
  
!   PPAUSE(pausetime*30) ;
    for (y = 1; y <= YSIZE; y++)
      if (maze[XSIZE+1][y] == ' ')
        {
--- 588,594 ----
          BLT_SCRN(3,t-2-SQUARE/2,XBASE-(SQUARE/2)-5,SQUARE*2+6,RINV) ;
        }
  
!   PPAUSE(pausetime*10) ;
    for (y = 1; y <= YSIZE; y++)
      if (maze[XSIZE+1][y] == ' ')
        {
***************
*** 635,642 ****
  
    if ((fd = open(a_name,0)) == -1)
      {
!       FPRINTF(stderr,"sidtool: unable to open %s.\n",a_name) ;
!       exit(-1) ;
      }
  
    for (i = UR; i <= LU; i++) corner[i] = load_picture(fd) ;
--- 639,646 ----
  
    if ((fd = open(a_name,0)) == -1)
      {
!       perror(a_name) ;
!       exit(1) ;
      }
  
    for (i = UR; i <= LU; i++) corner[i] = load_picture(fd) ;
***************
*** 661,668 ****
  
    if ((fn = fopen(m_name,"r")) == NULL)
      {
!       FPRINTF(stderr,"\nsidtool: can't open %s\n",m_name) ;
!       exit(-1) ;
      }
  
    for (y = 0; y <= YSIZE+1; y++)
--- 665,672 ----
  
    if ((fn = fopen(m_name,"r")) == NULL)
      {
!       perror(m_name) ;
!       exit(1) ;
      }
  
    for (y = 0; y <= YSIZE+1; y++)
***************
*** 749,755 ****
    for (i = 1; i <= 20; i++)
      {
        BLT_MEM_TO_SCRN(oldcx-GOFFSET+5,oldcy-GOFFSET+5,45,45,RXOR,curcircle,0,0) ;
!       for (j = 0; j < 10; j++) LONGPAUSE() ;
      }
    LONGPAUSE() ;
    if (fruitmaze[player] < 8) fruitmaze[player]++ ;
--- 753,759 ----
    for (i = 1; i <= 20; i++)
      {
        BLT_MEM_TO_SCRN(oldcx-GOFFSET+5,oldcy-GOFFSET+5,45,45,RXOR,curcircle,0,0) ;
!       PPAUSE(pausetime*100) ;
      }
    LONGPAUSE() ;
    if (fruitmaze[player] < 8) fruitmaze[player]++ ;
***************
*** 799,805 ****
          for (i = 1; i < 7; i++)
            {
              BLT_MEM_TO_SCRN(oldcx-GOFFSET+5,oldcy-GOFFSET+5,45,45,RXOR,curcircle,0,0) ;
!             for (i = 0; i < 10; i++) LONGPAUSE() ;
            }
          numcir[player]++ ;
          BLT_MEM_TO_SCRN(30+(numcir[player]-1)*60,20,50,50,RXOR,circles[RIGHT][0],0,0) ;
--- 803,809 ----
          for (i = 1; i < 7; i++)
            {
              BLT_MEM_TO_SCRN(oldcx-GOFFSET+5,oldcy-GOFFSET+5,45,45,RXOR,curcircle,0,0) ;
!             PPAUSE(pausetime*100) ;
            }
          numcir[player]++ ;
          BLT_MEM_TO_SCRN(30+(numcir[player]-1)*60,20,50,50,RXOR,circles[RIGHT][0],0,0) ;
*** sid_main.c.old	Thu May 21 06:46:19 1987
--- sid_main.c	Thu May 21 13:42:31 1987
***************
*** 4,9 ****
--- 4,10 ----
   *  Sid Tool - the Sun Interactive Debugger program.
   *
   *  Written by Rich Burridge - Sun Microsystems Australia (Melbourne).
+  *  Joystick interface and various bug fixes by Dan Heller.
   *
   *  Version 2.1.  -  April 1987.
   *
***************
*** 35,40 ****
--- 36,66 ----
  Notify_value main_loop() ;
  void event_proc() ;
  
+ int ms_x, ms_y ;
+ 
+ /* Joystick (really, arrow) symbols */
+ 
+ short left_arrow_dat[] = {
+ #include "left_arrow.icon"
+ } ;
+ mpr_static(joystick_left,64,64,1,left_arrow_dat) ;
+ 
+ short right_arrow_dat[] = {
+ #include "right_arrow.icon"
+ } ;
+ mpr_static(joystick_right,64,64,1,right_arrow_dat) ;
+ 
+ short up_arrow_dat[] = {
+ #include "up_arrow.icon"
+ } ;
+ mpr_static(joystick_up,64,64,1,up_arrow_dat) ;
+ 
+ short down_arrow_dat[] = {
+ #include "down_arrow.icon"
+ } ;
+ mpr_static(joystick_down,64,64,1,down_arrow_dat) ;
+ 
+ 
  short sid_image[] = {
  #include "sidtool.icon"
  } ;
***************
*** 140,146 ****
    int last ;
  
    last = 'r' ;
!   PPAUSE(pausetime*20) ;
    walls[mx+2][my] = 1 ;
    if (maze[mx][my] == 's') drawcorner(mx,my,UR) ;
    else if (maze[mx][my] == 'S') ddrawline(mx,my,'r') ;
--- 166,172 ----
    int last ;
  
    last = 'r' ;
!   PPAUSE(pausetime*10) ;
    walls[mx+2][my] = 1 ;
    if (maze[mx][my] == 's') drawcorner(mx,my,UR) ;
    else if (maze[mx][my] == 'S') ddrawline(mx,my,'r') ;
***************
*** 153,159 ****
     mx++ ;
     for (;;)
       {
!        PPAUSE(2*pausetime) ;
         walls[mx+2][my] = 1 ;
         switch (maze[mx][my])
           {
--- 179,185 ----
     mx++ ;
     for (;;)
       {
!        PPAUSE(pausetime) ;
         walls[mx+2][my] = 1 ;
         switch (maze[mx][my])
           {
***************
*** 192,197 ****
--- 218,234 ----
  }
  
  
+ draw_joystick(dir)
+ 
+ {
+   pw_rop(canvas_pixwin(canvas), 375, 110, 44, 44, PIX_SRC,
+         (dir == UP)    ? &joystick_up    :
+         (dir == DOWN)  ? &joystick_down  :
+         (dir == RIGHT) ? &joystick_right :
+                          &joystick_left, 0, 0) ;
+ }
+ 
+ 
  setdots(player)
  int player ;

***************
*** 346,351 ****
--- 383,390 ----
    pausetime = -skilllevel * 20 + (speed * 100) ;
    circatchup = -skilllevel * 4 + 46 ;
    highplayer = -1 ;
+   ms_x = (int) window_get(canvas,WIN_WIDTH) / 2 ;
+   ms_y = (int) window_get(canvas,WIN_HEIGHT) / 2 ;
    for (j = 1; j < MAXNUMPLAYERS; j++)
      {
        numdots[j] = 0 ;
***************
*** 395,401 ****
    int i,j ;
  
    on = 1 ;
!   if (!autoplay)
      for (i = 1; i <= 16; i++)
        {
          showplayerscore(player) ;
--- 434,441 ----
    int i,j ;
  
    on = 1 ;
!   if (autoplay) LONGPAUSE()
!   else
      for (i = 1; i <= 16; i++)
        {
          showplayerscore(player) ;
***************
*** 646,652 ****
    get_options(argc,argv) ;          /* Get command line options. */
    function_keys(KEY_SET) ;          /* Set direction arrow function keys. */
  
!   if ((pf = pf_open("/usr/lib/fonts/fixedwidthfonts/screen.r.14")) == NULL)
      {
        FPRINTF("Can't open screen.r.14 font.\n") ;
        function_keys(KEY_RESET) ;
--- 686,693 ----
    get_options(argc,argv) ;          /* Get command line options. */
    function_keys(KEY_SET) ;          /* Set direction arrow function keys. */
  
!   if (!(pf = pf_open("/usr/lib/fonts/fixedwidthfonts/screen.r.14")) &&
!       !(pf = pf_default()))
      {
        FPRINTF("Can't open screen.r.14 font.\n") ;
        function_keys(KEY_RESET) ;
***************
*** 670,678 ****
                           WIN_EVENT_PROC, event_proc,
                           0) ;
  
!   window_set(canvas, WIN_CONSUME_KBD_EVENTS, WIN_ASCII_EVENTS, 0) ;
!   window_set(canvas, WIN_CONSUME_KBD_EVENTS, WIN_LEFT_KEYS, 0) ;
!   window_set(canvas,WIN_IGNORE_PICK_EVENT,LOC_MOVE,0) ;
  
    pw = canvas_pixwin(canvas) ;
  
--- 711,726 ----
                           WIN_EVENT_PROC, event_proc,
                           0) ;
  
!   window_set(canvas, WIN_CONSUME_PICK_EVENTS, WIN_MOUSE_BUTTONS,
!                                               WIN_UP_EVENTS,
!                                               0,
!                      WIN_CONSUME_KBD_EVENTS, WIN_ASCII_EVENTS,
!                                              KEY_RIGHT(8),
!                                              KEY_RIGHT(10),
!                                              KEY_RIGHT(12),
!                                              KEY_RIGHT(14),
!                                              WIN_UP_EVENTS,
!                                              0) ;
  
    pw = canvas_pixwin(canvas) ;
  
***************
*** 716,722 ****
    int x,y ;     /* Position of mouse when button pressed. */
    int i ;
  
!   if (event_is_ascii(event))
      {
        c = event_id(event) ;
        if (progstate == NEXTLINE) return ;
--- 764,771 ----
    int x,y ;     /* Position of mouse when button pressed. */
    int i ;
  
!   if (event_is_ascii(event) ||
!       !autoplay && (event->ie_code == MS_RIGHT || event->ie_code == LOC_MOVE))
      {
        c = event_id(event) ;
        if (progstate == NEXTLINE) return ;
***************
*** 727,744 ****
            progstate = DELHIT ;
            return ;
          }
!       else if (c == CTRLS)
          {
            savedstate = progstate ;
            progstate = CTRLSHIT ;
            return ;
          }
!       else if (c == CTRLQ)
          {
            progstate = savedstate ;
            return ;
          }
!       else if (!autoplay) sc = c ;
      }
    else if (event_is_down(event) && event_is_button(event))
      {
--- 776,817 ----
            progstate = DELHIT ;
            return ;
          }
!       else if (c == CTRLS || progstate != CTRLSHIT &&
!                event_is_down(event) && c == MS_RIGHT)
          {
            savedstate = progstate ;
            progstate = CTRLSHIT ;
            return ;
          }
!       else if (c == CTRLQ || progstate == CTRLSHIT &&
!                event_is_down(event) && c == MS_RIGHT)
          {
            progstate = savedstate ;
            return ;
          }
!       else if (!autoplay && progstate != CTRLSHIT)
!         {
!           if (c == LOC_MOVE)
!             {
!               x = event_x(event) - ms_x ;
!               y = event_y(event) - ms_y ;
!               if (abs(x) <= 4 && abs(y) <= 4)    /* Move at least 4 pixels */
!                 return ;
!               if (abs(x) > abs(y))
!                 if (x > 0) c = 'r' ;
!                 else c = 'l' ;
!               else
!                 if (y > 0) c = 'd' ;
!                 else c = 'u' ;
! 
! /* Return the mouse to the middle of the playing board */
! 
!               if (progstate == MAKEPLAY && !autoplay &&
!                  (event_x(event) != ms_x || event_y(event) != ms_y))
!                 window_set(canvas, WIN_MOUSE_XY, ms_x, ms_y, 0) ;
!             }
!           sc = c ;
!         }
      }
    else if (event_is_down(event) && event_is_button(event))
      {
*** sid_stuff.c.old	Thu May 21 06:46:46 1987
--- sid_stuff.c	Thu May 21 12:24:39 1987
***************
*** 4,9 ****
--- 4,10 ----
   *  Various functions and procedures used by Sid Tool.
   *
   *  Written by Rich Burridge - SUN Microsystems Australia (Melbourne).
+  *  Joystick interface and various bug fixes by Dan Heller.
   *
   *  Version 2.1.  -  April 1987.
   *
***************
*** 36,43 ****
  extern BOOLEAN autoplay,changed,demomode,gamestate,remove ;
  
  extern char a_name[MAXLINE],buffer[MAXLINE],h_name[MAXLINE] ;
! extern char m_name[MAXLINE], new_key_vals[9][MAXLINE] ;
! extern char old_key_vals[9][MAXLINE],s_name[MAXLINE],titlestring[MAXLINE] ;
  
  extern int blueblink,blueincblink,button,c,cirx,ciry,credits ;
  extern int curbluetime[MAXNUMPLAYERS+1],curdir,dotx,doty ;
--- 37,44 ----
  extern BOOLEAN autoplay,changed,demomode,gamestate,remove ;
  
  extern char a_name[MAXLINE],buffer[MAXLINE],h_name[MAXLINE] ;
! extern char m_name[MAXLINE], new_key_vals[4][MAXLINE] ;
! extern char old_key_vals[4][MAXLINE],s_name[MAXLINE],titlestring[MAXLINE] ;
  
  extern int blueblink,blueincblink,button,c,cirx,ciry,credits ;
  extern int curbluetime[MAXNUMPLAYERS+1],curdir,dotx,doty ;
***************
*** 98,104 ****
    clear_screen() ;
    SPRINTF(buffer,"Player %1d",player) ;
    write_bold(348,500,buffer) ;
!   for (i = 0; i < 100; i++) LONGPAUSE() ;
    drawmaze() ;
    blinkpause() ;
    if (!startgame)
--- 99,105 ----
    clear_screen() ;
    SPRINTF(buffer,"Player %1d",player) ;
    write_bold(348,500,buffer) ;
!   LONGPAUSE() ;
    drawmaze() ;
    blinkpause() ;
    if (!startgame)
***************
*** 162,168 ****
    SCHRFUNC(RXOR) ;
    SPRINTF(buffer,"%1d0",inc) ;
    WRITELN(x,g->scry+10,buffer) ;
!   for (i = 0; i < 10; i++) LONGPAUSE() ;
    SPRINTF(buffer,"%1d0",inc) ;
    WRITELN(x,g->scry+10,buffer) ;
    SCHRFUNC(RRPL) ;
--- 163,169 ----
    SCHRFUNC(RXOR) ;
    SPRINTF(buffer,"%1d0",inc) ;
    WRITELN(x,g->scry+10,buffer) ;
!   LONGPAUSE() ;
    SPRINTF(buffer,"%1d0",inc) ;
    WRITELN(x,g->scry+10,buffer) ;
    SCHRFUNC(RRPL) ;
***************
*** 183,189 ****
    SCHRFUNC(RXOR) ;
    SPRINTF(buffer,"%1d0",inc) ;
    WRITELN(fruitx+10,fruity+10,buffer) ;
!   for (i = 0; i < 10; i++) LONGPAUSE() ;
    SPRINTF(buffer,"%1d0",inc) ;
    WRITELN(fruitx+10,fruity+10,buffer) ;
    SCHRFUNC(RRPL) ;
--- 184,190 ----
    SCHRFUNC(RXOR) ;
    SPRINTF(buffer,"%1d0",inc) ;
    WRITELN(fruitx+10,fruity+10,buffer) ;
!   LONGPAUSE() ;
    SPRINTF(buffer,"%1d0",inc) ;
    WRITELN(fruitx+10,fruity+10,buffer) ;
    SCHRFUNC(RRPL) ;
***************
*** 442,448 ****
          {
            SCHRFUNC(RXOR) ;
            WRITELN(339,YBASE+SQUARE*16,"GAME OVER!") ;
!           for (i = 0; i < 80; i++) LONGPAUSE() ;
            WRITELN(339,YBASE+SQUARE*16,"GAME OVER!") ;
            SCHRFUNC(RRPL) ;
            if (numplayers == 1)
--- 443,449 ----
          {
            SCHRFUNC(RXOR) ;
            WRITELN(339,YBASE+SQUARE*16,"GAME OVER!") ;
!           LONGPAUSE() ;
            WRITELN(339,YBASE+SQUARE*16,"GAME OVER!") ;
            SCHRFUNC(RRPL) ;
            if (numplayers == 1)
***************
*** 451,457 ****
                longjmp(exception,val) ;
              }
          }
!       else for (i = 0; i < 50; i++) LONGPAUSE() ;
        changeplayers(0) ;
      }
  }
--- 452,458 ----
                longjmp(exception,val) ;
              }
          }
!       else LONGPAUSE() ;
        changeplayers(0) ;
      }
  }
***************
*** 538,552 ****
  
    if ((fd = open("/dev/kbd",0,0)) < 0)
      {
!       FPRINTF(stderr,"sidtool: can't open /dev/kbd\n") ;
        exit(1) ;
      }
!   for (i = 0; i < 4; i++)       /* Set up function keys R7-R15, saving old values. */
!     {
        if (state == KEY_SET)
          {
            get_key(fd,key_stations[i],old_key_vals[i],STRING + 1 + i) ;
!           set_key(fd,key_stations[i],new_key_vals[i],STRING + 5 + i) ;
          }
        else set_key(fd,key_stations[i],old_key_vals[i],STRING + 1 + i) ;
      }
--- 539,553 ----
  
    if ((fd = open("/dev/kbd",0,0)) < 0)
      {
!       perror("/dev/kbd") ;
        exit(1) ;
      }
!   for (i = 0; i < 4; i++)        /* Set up function keys R8, R10, R12 and R14. */
!     {                            /* Saving old values. */
        if (state == KEY_SET)
          {
            get_key(fd,key_stations[i],old_key_vals[i],STRING + 1 + i) ;
!           set_key(fd,key_stations[i],new_key_vals[i],STRING + 1 + i) ;
          }
        else set_key(fd,key_stations[i],old_key_vals[i],STRING + 1 + i) ;
      }
*** sidtool.h.old	Thu May 21 06:45:55 1987
--- sidtool.h	Thu May 21 12:07:38 1987
***************
*** 63,70 ****
  /* Wait for len tics. */
  #define  PPAUSE(len) { int ppi ; for (ppi = 0; ppi < len; ppi++) ; }
  
! /* Wait for a while and check keyboard for commands. */
! #define  LONGPAUSE() { int loi ; for (loi = 0; loi < (1000*speed); loi++) ; }
  
  /* Returns the reverse direction of the parameter (left goes to right, etc.) */
  #define  REVERSEDIR(dir) ((dir + 2) % 4)
--- 63,70 ----
  /* Wait for len tics. */
  #define  PPAUSE(len) { int ppi ; for (ppi = 0; ppi < len; ppi++) ; }
  
! /* Wait for a longer while. */
! #define  LONGPAUSE() { int loi ; for (loi = 0; loi < (2000*speed); loi++) ; }
  
  /* Returns the reverse direction of the parameter (left goes to right, etc.) */
  #define  REVERSEDIR(dir) ((dir + 2) % 4)
*** /dev/null	Thu May 21 15:00:00 1987
--- down_arrow.icon	Thu May 21 12:51:55 1987
***************
*** 0 ****
--- 1,34 ----
+ /* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
+  */
+ 	0xFFFF,0xFFFF,0xFFF0,0x0000,0xFFFF,0xFFFF,0xFFF0,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC0FF,0xFFFF,0xF030,0x0000,0xC07F,0xFFFF,0xE030,0x0000,
+ 	0xC03F,0xFFFF,0xC030,0x0000,0xC01F,0xFFFF,0x8030,0x0000,
+ 	0xC00F,0xFFFF,0x0030,0x0000,0xC007,0xFFFE,0x0030,0x0000,
+ 	0xC003,0xFFFC,0x0030,0x0000,0xC001,0xFFF8,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0x7FE0,0x0030,0x0000,
+ 	0xC000,0x3FC0,0x0030,0x0000,0xC000,0x1F80,0x0030,0x0000,
+ 	0xC000,0x0F00,0x0030,0x0000,0xC000,0x0600,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xFFFF,0xFFFF,0xFFF0,0x0000,0xFFFF,0xFFFF,0xFFF0,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
*** /dev/null	Thu May 21 15:00:00 1987
--- left_arrow.icon	Thu May 21 12:55:23 1987
***************
*** 0 ****
--- 1,34 ----
+ /* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
+  */
+ 	0xFFFF,0xFFFF,0xFFF0,0x0000,0xFFFF,0xFFFF,0xFFF0,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0x1000,0x0030,0x0000,0xC000,0x3000,0x0030,0x0000,
+ 	0xC000,0x7000,0x0030,0x0000,0xC000,0xF000,0x0030,0x0000,
+ 	0xC001,0xF000,0x0030,0x0000,0xC003,0xF000,0x0030,0x0000,
+ 	0xC007,0xF000,0x0030,0x0000,0xC00F,0xF000,0x0030,0x0000,
+ 	0xC01F,0xFFFF,0xFF30,0x0000,0xC03F,0xFFFF,0xFF30,0x0000,
+ 	0xC07F,0xFFFF,0xFF30,0x0000,0xC0FF,0xFFFF,0xFF30,0x0000,
+ 	0xC1FF,0xFFFF,0xFF30,0x0000,0xC3FF,0xFFFF,0xFF30,0x0000,
+ 	0xC3FF,0xFFFF,0xFF30,0x0000,0xC1FF,0xFFFF,0xFF30,0x0000,
+ 	0xC0FF,0xFFFF,0xFF30,0x0000,0xC07F,0xFFFF,0xFF30,0x0000,
+ 	0xC03F,0xFFFF,0xFF30,0x0000,0xC01F,0xFFFF,0xFF30,0x0000,
+ 	0xC00F,0xF000,0x0030,0x0000,0xC007,0xF000,0x0030,0x0000,
+ 	0xC003,0xF000,0x0030,0x0000,0xC001,0xF000,0x0030,0x0000,
+ 	0xC000,0xF000,0x0030,0x0000,0xC000,0x7000,0x0030,0x0000,
+ 	0xC000,0x3000,0x0030,0x0000,0xC000,0x1000,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xFFFF,0xFFFF,0xFFF0,0x0000,0xFFFF,0xFFFF,0xFFF0,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
*** /dev/null	Thu May 21 15:00:00 1987
--- right_arrow.icon	Thu May 21 12:57:48 1987
***************
*** 0 ****
--- 1,34 ----
+ /* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
+  */
+ 	0xFFFF,0xFFFF,0xFFF0,0x0000,0xFFFF,0xFFFF,0xFFF0,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0x0080,0x0030,0x0000,0xC000,0x00C0,0x0030,0x0000,
+ 	0xC000,0x00E0,0x0030,0x0000,0xC000,0x00F0,0x0030,0x0000,
+ 	0xC000,0x00F8,0x0030,0x0000,0xC000,0x00FC,0x0030,0x0000,
+ 	0xC000,0x00FE,0x0030,0x0000,0xC000,0x00FF,0x0030,0x0000,
+ 	0xCFFF,0xFFFF,0x8030,0x0000,0xCFFF,0xFFFF,0xC030,0x0000,
+ 	0xCFFF,0xFFFF,0xE030,0x0000,0xCFFF,0xFFFF,0xF030,0x0000,
+ 	0xCFFF,0xFFFF,0xF830,0x0000,0xCFFF,0xFFFF,0xFC30,0x0000,
+ 	0xCFFF,0xFFFF,0xFC30,0x0000,0xCFFF,0xFFFF,0xF830,0x0000,
+ 	0xCFFF,0xFFFF,0xF030,0x0000,0xCFFF,0xFFFF,0xE030,0x0000,
+ 	0xCFFF,0xFFFF,0xC030,0x0000,0xCFFF,0xFFFF,0x8030,0x0000,
+ 	0xC000,0x00FF,0x0030,0x0000,0xC000,0x00FE,0x0030,0x0000,
+ 	0xC000,0x00FC,0x0030,0x0000,0xC000,0x00F8,0x0030,0x0000,
+ 	0xC000,0x00F0,0x0030,0x0000,0xC000,0x00E0,0x0030,0x0000,
+ 	0xC000,0x00C0,0x0030,0x0000,0xC000,0x0080,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xFFFF,0xFFFF,0xFFF0,0x0000,0xFFFF,0xFFFF,0xFFF0,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
*** /dev/null	Thu May 21 15:00:00 1987
--- up_arrow.icon	Thu May 21 13:00:16 1987
***************
*** 0 ****
--- 1,34 ----
+ /* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
+  */
+ 	0xFFFF,0xFFFF,0xFFF0,0x0000,0xFFFF,0xFFFF,0xFFF0,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xC000,0x0600,0x0030,0x0000,0xC000,0x0F00,0x0030,0x0000,
+ 	0xC000,0x1F80,0x0030,0x0000,0xC000,0x3FC0,0x0030,0x0000,
+ 	0xC000,0x7FE0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC001,0xFFF8,0x0030,0x0000,0xC003,0xFFFC,0x0030,0x0000,
+ 	0xC007,0xFFFE,0x0030,0x0000,0xC00F,0xFFFF,0x0030,0x0000,
+ 	0xC01F,0xFFFF,0x8030,0x0000,0xC03F,0xFFFF,0xC030,0x0000,
+ 	0xC07F,0xFFFF,0xE030,0x0000,0xC0FF,0xFFFF,0xF030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0xFFF0,0x0030,0x0000,0xC000,0xFFF0,0x0030,0x0000,
+ 	0xC000,0x0000,0x0030,0x0000,0xC000,0x0000,0x0030,0x0000,
+ 	0xFFFF,0xFFFF,0xFFF0,0x0000,0xFFFF,0xFFFF,0xFFF0,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
+ 	0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000