These are the changes to the original source
archive (279v4). You don't need to apply them
if you can get the latest archive, which will
have them applied already.

*** ../old/src/main-emx.c	Fri Feb 23 02:40:18 1996
--- main-emx.c	Sat Mar 02 20:27:56 1996
***************
*** 4,10 ****
  
  /* Author: ekraemer@pluto.camelot.de (Ekkehard Kraemer) */
  
! #ifdef __EMX__
  
  /*
   * === Instructions for using Angband 2.7.X with OS/2 ===
--- 4,10 ----
  
  /* Author: ekraemer@pluto.camelot.de (Ekkehard Kraemer) */
  
! #ifdef __EMX__ 
  
  /*
   * === Instructions for using Angband 2.7.X with OS/2 ===
***************
*** 63,83 ****
   *                      v3      Removed (improved) keyboard hack
   *                              Introduced pref-emx.prf
   *                              Phew... Makefile.emx grows! (patches, export)
   *
   *  26.01.96   EK               Added files.uue target
   */
  
  #include <signal.h>
  #include <stdio.h>
  #include <stdlib.h> 
  #include <sys/kbdscan.h>
- #include <sys/video.h>
  #include <io.h>
  #include <os2.h>
  
  #include "angband.h"
  
  /*
   * termPipe* is sometimes cast to term* and vice versa, 
   * so "term t;" must be the first line 
   */
--- 63,101 ----
   *                      v3      Removed (improved) keyboard hack
   *                              Introduced pref-emx.prf
   *                              Phew... Makefile.emx grows! (patches, export)
+  *                              Uploaded binary to export.andrew.cmu.edu
   *
   *  26.01.96   EK               Added files.uue target
+  *
+  *  22.02.96   EK               Added PM support 
+  *
+  *   2.03.96   EK      2.7.9    Uploaded binaries to export.andrew.cmu.edu
+  *                      v4
+  *                              
   */
  
  #include <signal.h>
  #include <stdio.h>
  #include <stdlib.h> 
  #include <sys/kbdscan.h>
  #include <io.h>
  #include <os2.h>
+ #include <sys/video.h>
  
  #include "angband.h"
  
  /*
+  * Prototypes!
+  */
+ static errr Term_curs_emx(int x, int y);
+ static errr Term_wipe_emx(int x, int y, int n);
+ static errr Term_text_emx(int x, int y, int n, unsigned char a, cptr s);
+ static void Term_init_emx(term *t);
+ static void Term_nuke_emx(term *t);
+ 
+ #ifndef EMXPM
+ 
+ /*
   * termPipe* is sometimes cast to term* and vice versa, 
   * so "term t;" must be the first line 
   */
***************
*** 104,118 ****
  
  
  /*
-  * Prototypes!
-  */
- static errr Term_curs_emx(int x, int y);
- static errr Term_wipe_emx(int x, int y, int n);
- static errr Term_text_emx(int x, int y, int n, unsigned char a, cptr s);
- static void Term_init_emx(term *t);
- static void Term_nuke_emx(term *t);
- 
- /*
   * Current cursor "size"
   */
  static int curs_start=0;
--- 122,127 ----
***************
*** 152,158 ****
      F_BROWN|INTENSITY           /* Light brown */
  };
  
- 
  /*
   * Display a cursor, on top of a given attr/char
   */
--- 161,166 ----
***************
*** 236,242 ****
  }
  
  
! #ifndef __EMX__CLIENT__           
  
  /*
   * Oh no, more prototypes!
--- 244,250 ----
  }
  
  
! #ifndef __EMX__CLIENT__
  
  /*
   * Oh no, more prototypes!
***************
*** 259,265 ****
  /*
   * The screens 
   */
! static termPipe term_screen_body,
                  term_screen_recall,
                  term_screen_choice,
                  term_screen_mirror;
--- 267,273 ----
  /*
   * The screens 
   */
! static termPipe term_screen_main,
                  term_screen_recall,
                  term_screen_choice,
                  term_screen_mirror;
***************
*** 347,353 ****
              return (0);
  
          case TERM_XTRA_NOISE: 
!             putchar(7); 
              return (0);
  
          case TERM_XTRA_FLUSH:
--- 355,361 ----
              return (0);
  
          case TERM_XTRA_NOISE: 
!             DosBeep(440,50);
              return (0);
  
          case TERM_XTRA_FLUSH:
***************
*** 377,383 ****
      switch (n)
      {
          case TERM_XTRA_NOISE: 
!             putchar(7); 
              return (0);
  
          case TERM_XTRA_INVIS: 
--- 385,391 ----
      switch (n)
      {
          case TERM_XTRA_NOISE: 
!             DosBeep(440,50);
              return (0);
  
          case TERM_XTRA_INVIS: 
***************
*** 404,411 ****
      return (1);
  }
  
- 
- 
  static errr Term_curs_pipe_emx(int x, int y)
  {
      termPipe *tp=(termPipe*)Term;
--- 412,417 ----
***************
*** 522,528 ****
      initPipeTerm(&term_screen_mirror,"mirror",&term_mirror);
  
      /* Initialize main window */
!     t = (term*)(&term_screen_body);
      
      /* Initialize the term -- big key buffer */
      term_init(t, 80, 24, 1024);    
--- 528,534 ----
      initPipeTerm(&term_screen_mirror,"mirror",&term_mirror);
  
      /* Initialize main window */
!     t = (term*)(&term_screen_main);
      
      /* Initialize the term -- big key buffer */
      term_init(t, 80, 24, 1024);    
***************
*** 559,565 ****
  
  #else /* __EMX__CLIENT__ */
  
! int main(int argc, char **argv)
  {
      int c, end = 0, lines = 25;
      int x, y, h, n, v;
--- 565,571 ----
  
  #else /* __EMX__CLIENT__ */
  
! int __EMX__CLIENT__(int argc, char **argv)
  {
      int c, end = 0, lines = 25;
      int x, y, h, n, v;
***************
*** 569,574 ****
--- 575,581 ----
      char buf[160];
      HPIPE pipe;
      APIRET rc;
+     char *target;
  
      /* Check command line */
      if (argc!=2 && argc!=3)
***************
*** 583,589 ****
  
      printf("Looking for Angband... press ^C to abort\n");
  
!     sprintf(buf,"\\pipe\\angband\\%s",argv[1]);
  
      do
      {
--- 590,599 ----
  
      printf("Looking for Angband... press ^C to abort\n");
  
!     target=strdup(argv[1]);
!     for (c=0; c<strlen(target); c++) target[c]=tolower(target[c]);
!     
!     sprintf(buf,"\\pipe\\angband\\%s",target);
  
      do
      {
***************
*** 696,701 ****
--- 706,1002 ----
  }
  
  #endif /* __EMX__CLIENT__ */
+ 
+ #else /* EMXPM */
+ 
+ void emx_endPM(const char *reason);
+ int emx_options(char **ANGBAND_DIR_USER,
+                 char **ANGBAND_DIR_SAVE,
+                 char **ANGBAND_DIR_INFO,
+                 char *arg_force_roguelike,
+                 char *arg_force_original,
+                 char *arg_fiddle,
+                 char *arg_wizard,
+                 char player_name[32]);
+ 
+ void emx_init_window(void **instance,void *main_instance,int n);
+ 
+ errr emx_curs(void *instance,int x, int y);
+ errr emx_wipe(void *instance,int x, int y, int n);
+ errr emx_text(void *instance,int x, int y, int n, unsigned char a, cptr s);
+ void emx_init(void *instance);
+ void emx_nuke(void *instance);
+ int emx_read_kbd(void *instance,int wait);
+ void emx_clear(void *instance);
+ void emx_hidecursor(void *instance);
+ void emx_showcursor(void *instance);
+ 
+ /*
+  * termWindow* is sometimes cast to term* and vice versa, 
+  * so "term t;" must be the first line 
+  */
+ 
+ typedef struct
+ {
+     term t;
+     void *instance;                          /* Pointer to window */
+ } termWindow;
+ 
+ /*
+  * Display a cursor, on top of a given attr/char
+  */
+ static errr Term_curs_emx(int x, int y)
+ {
+     return emx_curs(((termWindow*)Term)->instance,x,y);
+ }
+ 
+ /*
+  * Erase a grid of space (as if spaces were printed)
+  */
+ static errr Term_wipe_emx(int x, int y, int n)
+ {
+     return emx_wipe(((termWindow*)Term)->instance,x,y,n);
+ }
+ 
+ /*
+  * Draw some text, wiping behind it first
+  */
+ static errr Term_text_emx(int x, int y, int n, unsigned char a, cptr s)
+ {
+     return emx_text(((termWindow*)Term)->instance,x,y,n,a,s);
+ }
+ 
+ /*
+  * EMX initialization
+  */
+ static void Term_init_emx(term *t) 
+ {
+     return emx_init(((termWindow*)t)->instance);
+ }
+ 
+ /*
+  * EMX shutdown
+  */
+ static void Term_nuke_emx(term *t)
+ {
+ }
+ 
+ /*
+  * Oh no, more prototypes!
+  */
+ static errr CheckEvents(int returnImmediately);
+ 
+ /*
+  * Main initialization function
+  */
+ errr init_emx(void);
+ 
+ /*
+  * The screens 
+  */
+ static termWindow term_screen_main,
+                   term_screen_recall,
+                   term_screen_choice,
+                   term_screen_mirror;
+ 
+ /*
+  * Check for events -- called by "Term_scan_emx()"
+  */
+ static errr CheckEvents(int returnImmediately)
+ {
+     /* Get key - Macro triggers are generated by emx_read_kbd() */
+     int k=emx_read_kbd(((termWindow*)Term)->instance,returnImmediately?0:1);
+ 
+     /* Nothing ready */
+     if (k < 0) return (1);
+ 
+     /* Enqueue the key */
+     Term_keypress(k);
+ 
+     /* Success */
+     return (0);
+ }
+ 
+ /*
+  * Do a special thing (beep, flush, etc)
+  */
+ static errr Term_xtra_emx(int n, int v)
+ {
+     void *instance=((termWindow*)Term)->instance;
+ 
+     switch (n)
+     {
+         case TERM_XTRA_INVIS: 
+             emx_hidecursor(instance); 
+             return (0);
+ 
+         case TERM_XTRA_BEVIS: 
+             emx_showcursor(instance);
+             return (0);
+ 
+         case TERM_XTRA_NOISE: 
+             DosBeep(440,50);
+             return (0);
+ 
+         case TERM_XTRA_FLUSH:
+             while (!CheckEvents(TRUE));
+             return 0;
+ 
+         case TERM_XTRA_EVENT:
+             return (CheckEvents(!v));
+ 
+         case TERM_XTRA_CLEAR:
+             emx_clear(instance);
+             return (0);
+     }
+ 
+     return (1);
+ }
+ 
+ void emx_init_term(termWindow *t,void *main_instance,term **angTerm,int n)
+ {
+     term *te=(term*)t;
+     
+     /* Initialize window */
+     emx_init_window(&t->instance,main_instance,n);
+     
+     *angTerm=te;
+ 
+     /* Initialize the term -- big key buffer */
+     term_init(te, 80, 24, 1024);    
+ 
+     /* Special hooks */
+     te->init_hook = Term_init_emx;
+     te->nuke_hook = Term_nuke_emx;
+ 
+     /* Add the hooks */
+     te->text_hook = Term_text_emx;
+     te->wipe_hook = Term_wipe_emx;
+     te->curs_hook = Term_curs_emx;
+     te->xtra_hook = Term_xtra_emx;
+ }
+ 
+ /*
+  * Prepare "term.c" to use "__EMX__" built-in faked video library
+  */
+ errr init_emx(void)
+ {
+     /* Initialize the windows */
+     emx_init_term(&term_screen_main,  NULL,                      &term_screen,0);
+     emx_init_term(&term_screen_recall,term_screen_main.instance,&term_recall,1);
+     emx_init_term(&term_screen_choice,term_screen_main.instance,&term_choice,2);
+     emx_init_term(&term_screen_mirror,term_screen_main.instance,&term_mirror,3);
+ 
+     /* Activate main window */
+     Term_activate(term_screen);
+ 
+     /* Success */
+     return (0);
+ }
+ 
+ static void init_stuff(void)
+ {
+     char path[1024];
+     cptr tail;
+     
+     /* Get the environment variable */
+     tail = getenv("ANGBAND_PATH");
+ 
+     /* Use the angband_path, or a default */
+     strcpy(path, tail ? tail : DEFAULT_PATH);
+ 
+     /* Hack -- Add a path separator (only if needed) */
+     if (!suffix(path, PATH_SEP)) strcat(path, PATH_SEP);
+ 
+     /* Initialize */
+     init_file_paths(path);
+ }
+ 
+ static void quit_hook(cptr s)
+ {
+     /* Shut down the term windows */
+     if (term_choice) 
+     {
+         term_nuke(term_choice);
+         emx_nuke(((termWindow*)term_choice)->instance);
+     }
+     if (term_recall) 
+     {
+         term_nuke(term_recall);
+         emx_nuke(((termWindow*)term_recall)->instance);
+     }
+     if (term_mirror) 
+     {
+         term_nuke(term_mirror);
+         emx_nuke(((termWindow*)term_mirror)->instance);
+     }
+     if (term_screen) 
+     {
+         term_nuke(term_screen);
+         emx_nuke(((termWindow*)term_screen)->instance);
+     }
+ 
+     /* Shut down window system - doesn't return */
+     emx_endPM(s);
+ }
+ 
+ void angbandThread(void *arg)
+ {
+     bool new_game = FALSE;
+     
+     int show_score = 0;
+ 
+     /* Save the "program name" */
+     argv0 = (char*)arg;
+ 
+     /* Use the "main-emx.c" support */
+     init_emx();
+     ANGBAND_SYS = "ibm";
+ 
+     /* Get the file paths */
+     init_stuff();
+ 
+     /* Assume "Wizard" permission */
+     can_be_wizard = TRUE;
+ 
+     if (!emx_options((char**)&ANGBAND_DIR_USER,
+                      (char**)&ANGBAND_DIR_SAVE,
+                      (char**)&ANGBAND_DIR_INFO,
+                      &arg_force_roguelike,
+                      &arg_force_original,
+                      &arg_fiddle,
+                      &arg_wizard,
+                      player_name)) quit(NULL);                
+ 
+     /* Process the player name */
+     process_player_name(TRUE);
+ 
+     /* Tell "quit()" to call "Term_nuke()" */
+     quit_aux = quit_hook;
+ 
+     /* If requested, display scores and quit */
+     if (show_score > 0) display_scores(0, show_score); 
+ 
+     /* Catch nasty signals */
+     signals_init();
+ 
+     /* Display the 'news' file */
+     show_news();
+ 
+     /* Initialize the arrays */
+     init_some_arrays();
+ 
+     /* Wait for response */
+     pause_line(23);
+ 
+     /* Play the game */
+     play_game(new_game);
+ 
+     /* Quit */
+     quit(NULL);
+ }
+ 
+ #endif /* EMXPM */
  
  #endif /* __EMX__ */
  
*** ../old/src/config.h	Fri Feb 23 02:37:22 1996
--- config.h	Wed Feb 28 20:23:12 1996
***************
*** 173,189 ****
  /*
   * OPTION: Hack -- Compile in support for "Cyborg" mode
   */
! /* #define ALLOW_BORG */
  
  /*
   * OPTION: Hack -- Compile in support for "Wizard Commands"
   */
! /* #define ALLOW_WIZARD */
  
  /*
   * OPTION: Hack -- Compile in support for "Spoiler Generation"
   */
! /* #define ALLOW_SPOILERS */
  
  
  /*
--- 173,189 ----
  /*
   * OPTION: Hack -- Compile in support for "Cyborg" mode
   */
! #define ALLOW_BORG
  
  /*
   * OPTION: Hack -- Compile in support for "Wizard Commands"
   */
! #define ALLOW_WIZARD
  
  /*
   * OPTION: Hack -- Compile in support for "Spoiler Generation"
   */
! #define ALLOW_SPOILERS
  
  
  /*
***************
*** 214,220 ****
   * prints pretty "titles" such as "Ranger Lord" after the race and
   * class, and on the tombstone, and in the "description" files.
   */
! /* #define ALLOW_TITLES */
  
  
  /*
--- 214,220 ----
   * prints pretty "titles" such as "Ranger Lord" after the race and
   * class, and on the tombstone, and in the "description" files.
   */
! #define ALLOW_TITLES
  
  
  /*
***************
*** 552,555 ****
--- 552,562 ----
  # undef ALLOW_SPOILERS
  # undef ALLOW_TITLES
  #endif
+ 
+ 
+ 
+ 
+ 
+ 
+ 
  
*** ../old/src/Makefile.emx	Fri Feb 23 02:41:56 1996
--- Makefile.emx	Sat Mar 02 19:55:06 1996
***************
*** 7,13 ****
  #       don't bother to add them.
  #
  #       Use 'dmake -B -r -f makefile.emx install' to install the executables
! #       and the batch file used for multiple windows in the parent directory.
  #
  #       Use 'dmake -B -r -f makefile.emx clean' to remove temporary files.
  #
--- 7,13 ----
  #       don't bother to add them.
  #
  #       Use 'dmake -B -r -f makefile.emx install' to install the executables
! #       and the batch file used for multiple VIO windows in the parent directory.
  #
  #       Use 'dmake -B -r -f makefile.emx clean' to remove temporary files.
  #
***************
*** 25,51 ****
  #		  Needs 4OS2.
  #
  
! VERSION         = 2.7.9v3
  EXPORT          = angband-$(VERSION).os2.zip
  
- OBJS = \
- birth.o borg-aux.o borg-ben.o borg-ext.o borg-map.o borg-obj.o borg.o  \
- cave.o cmd1.o cmd2.o cmd3.o cmd4.o cmd5.o cmd6.o dungeon.o effects.o  \
- files.o generate.o init.o io.o main-emx.o main.o melee.o misc.o mon-desc.o  \
- monster.o obj-desc.o object.o save-old.o save.o signals.o spells1.o  \
- spells2.o store.o tables.o term.o util.o variable.o wiz-spo.o wizard.o  \
- z-form.o z-util.o z-virt.o 
- 
  .KEEP_STATE:
  
! CC = gcc
! CFLAGS = -MMD -O3 -DUSE_EMX -g -Zcrtdll
! LIBS = -lvideo
! # Comment this out if you don't have nice installed
! #NICE = nice -i -n -30
  
! .c.o:
!     $(NICE) $(CC) $(CFLAGS) -c $*.c
  
  ###################################################################################
  
--- 25,42 ----
  #		  Needs 4OS2.
  #
  
! VERSION         = 279v4
  EXPORT          = angband-$(VERSION).os2.zip
  
  .KEEP_STATE:
  
! CC 		= gcc
! AR		= ar
! CFLAGS 		= -MMD -O3 -DUSE_EMX -Zmt 
! LFLAGS 		= -lvideo 
  
! # Uncomment this if you have nice installed
! #NICE 		= nice -i -n -30
  
  ###################################################################################
  
***************
*** 54,61 ****
  install: ..\angband.exe ..\aclient.exe ..\startwnd.cmd
  
  clean:
!     + del *.d
!     + del depends
  
  patches:  ..\patches.txt ..\exp\patches.uue ..\exp\files.uue
  
--- 45,56 ----
  install: ..\angband.exe ..\aclient.exe ..\startwnd.cmd
  
  clean:
!     -+@ del angband.exe
!     -+@ del aclient.exe
!     -+@ del depends
!     -+@ del _state.mk
!     -+@ del *.o
!     -+@ del *.d
  
  patches:  ..\patches.txt ..\exp\patches.uue ..\exp\files.uue
  
***************
*** 65,70 ****
--- 60,76 ----
  ###   You don't have to change anything below.   ###################################
  ####################################################################################
  
+ OBJS = \
+ birth.o borg-aux.o borg-ben.o borg-ext.o borg-map.o borg-obj.o borg.o  \
+ cave.o cmd1.o cmd2.o cmd3.o cmd4.o cmd5.o cmd6.o dungeon.o effects.o  \
+ files.o generate.o init.o io.o melee.o misc.o mon-desc.o  \
+ monster.o obj-desc.o object.o save-old.o save.o signals.o spells1.o  \
+ spells2.o store.o tables.o term.o util.o variable.o wiz-spo.o wizard.o  \
+ z-form.o z-util.o z-virt.o 
+ 
+ .c.o:
+     $(NICE) $(CC) $(CFLAGS) -c $*.c
+ 
  all .PHONY: angband.exe aclient.exe 
      +@echo. 
      +@echo Now type 
***************
*** 80,97 ****
      +@echo working executables.
      +@echo. 
  
  ..\exp\$(EXPORT) .PHONY .IGNORE: install patches
  # Needs 4OS2!
          +@ md ..\exp >& nul                     ^ \
             md ..\exp\tmpdir >& nul              ^ \
             cd ..\exp\tmpdir                     ^ \
!            copy ... > nul                       ^ \
             md lib                               ^ \
!            copy ...\lib\ lib\ /s > nul          ^ \
             zip -m -r $(EXPORT) * > nul          ^ \
             move $(EXPORT) ..                    ^ \
             cd ..                                ^ \
!            del tmpdir /xsqy > nul
    
  PATCHFILES  = *.c
  PATCHFILES += *.h
--- 86,106 ----
      +@echo working executables.
      +@echo. 
  
+ EXPFILES = angband.exe;aclient.exe;patches.txt;readme;startwnd.cmd
+ 
  ..\exp\$(EXPORT) .PHONY .IGNORE: install patches
  # Needs 4OS2!
          +@ md ..\exp >& nul                     ^ \
             md ..\exp\tmpdir >& nul              ^ \
             cd ..\exp\tmpdir                     ^ \
!            copy ...\$(EXPFILES) > nul           ^ \
             md lib                               ^ \
!            copy ...\lib\ lib\ /s >& nul         ^ \
!            del lib\save\player >& nul         	^ \
             zip -m -r $(EXPORT) * > nul          ^ \
             move $(EXPORT) ..                    ^ \
             cd ..                                ^ \
!            del tmpdir /xsqy >& nul
    
  PATCHFILES  = *.c
  PATCHFILES += *.h
***************
*** 118,136 ****
         del patches-$(VERSION).os2.gz                            ^ \
         move patches-$(VERSION).os2.gz.uue patches.uue           
  
! FILES = main-emx.c makefile.emx ..\lib\user\pref-emx.prf
  
  ..\exp\files.uue: $(FILES)
  # Needs 4OS2!
!     +@ md ..\exp >& nul                                         ^ \
!        cd ..\exp                                                ^ \
!        for %a in ($(FILES)) copy ..\src\%a > nul                ^ \
!        tar -cvf files.tar $(FILES)                              ^ \
!        for %a in ($(FILES)) del %@name[$(FILES)] >& nul         ^ \
!        gzip files.tar                                           ^ \
!        uuencode files.tar.gz                                    ^ \
!        del files.tar.gz >& nul                                  ^ \
!        move files.tar.gz.uue files.uue                          
  
  depends .IGNORE: $(OBJS)
      + echo. > depends
--- 127,146 ----
         del patches-$(VERSION).os2.gz                            ^ \
         move patches-$(VERSION).os2.gz.uue patches.uue           
  
! FILES  = main-emx.c makefile.emx ..\lib\user\pref-emx.prf 
! FILESP = main-emx.c makefile.emx pref-emx.prf 
  
  ..\exp\files.uue: $(FILES)
  # Needs 4OS2!
!     +@ 	md ..\exp >& nul                                        ^ \
! 	cd ..\exp                                               ^ \
! 	for %a in ($(FILES)) copy ..\src\%a > nul               ^ \
! 	tar -cvf files.tar $(FILESP)                            ^ \
! 	del $(FILESP)						^ \
! 	gzip files.tar                                          ^ \
! 	uuencode files.tar.gz                                   ^ \
! 	del files.tar.gz >& nul                                 ^ \
! 	move files.tar.gz.uue files.uue                          
  
  depends .IGNORE: $(OBJS)
      + echo. > depends
***************
*** 153,159 ****
   $(EC) REM optional number behind the name sets the number of lines for $(ECF)
   $(EC) REM that screen.                                                 $(ECF)
   $(EC) REM                                                              $(ECF)
!  $(EC) REM Note the function of the three views:                        $(ECF)
   $(EC) REM                                                              $(ECF)
   $(EC) REM   recall window - display monster recall info                $(ECF)
   $(EC) REM   choice window - display equipment and inventory            $(ECF)
--- 163,169 ----
   $(EC) REM optional number behind the name sets the number of lines for $(ECF)
   $(EC) REM that screen.                                                 $(ECF)
   $(EC) REM                                                              $(ECF)
!  $(EC) REM The function of the three views:                             $(ECF)
   $(EC) REM                                                              $(ECF)
   $(EC) REM   recall window - display monster recall info                $(ECF)
   $(EC) REM   choice window - display equipment and inventory            $(ECF)
***************
*** 168,185 ****
   $(EC) delay                                                            $(ECF)
   $(EC) angband %1 %2 %3 %4 %5 %6 %7 %8 %9                               $(ECF)
  
! angband.exe: $(OBJS)
!     $(CC) $(CFLAGS)  -o angband.exe $(OBJS) $(LIBS)
  
  aclient.exe: main-emx.c
!     $(CC) $(CFLAGS) -D__EMX__ -D__EMX__CLIENT__ -o aclient.exe main-emx.c $(LIBS)
  
  # Forgive me :)
  ":-)":
          +@echo.
- 
- main-emx.o: 
-     $(NICE) $(CC) $(CFLAGS) -Wall -c $*.c
  
  .INCLUDE .IGNORE: depends
  
--- 178,201 ----
   $(EC) delay                                                            $(ECF)
   $(EC) angband %1 %2 %3 %4 %5 %6 %7 %8 %9                               $(ECF)
  
! angband.exe: angband.a main.o main-emx.o main-epm.o
!     $(CC) -o angband.exe main.o main-emx.o angband.a $(LFLAGS) 
! 
! angband.a: $(OBJS)
!     $(AR) r angband.a $(OBJS)
  
  aclient.exe: main-emx.c
!     $(NICE) $(CC) $(CFLAGS) -D__EMX__CLIENT__=main  -o aclient.exe main-emx.c -lvideo
  
+ main-emx.o: main-emx.c
+     $(NICE) $(CC) $(CFLAGS) -Wall -c main-emx.c -o main-emx.o
+ 
+ main-epm.o: main-emx.c
+     $(NICE) $(CC) $(CFLAGS) -Wall -DEMXPM -c main-emx.c -o main-epm.o
+ 
  # Forgive me :)
  ":-)":
          +@echo.
  
  .INCLUDE .IGNORE: depends
  
*** ../old/src/../lib/user/pref-emx.prf	Sat Mar 02 19:01:22 1996
--- ../lib/user/pref-emx.prf	Sat Mar 02 18:46:04 1996
***************
*** 0 ****
--- 1,163 ----
+ # File: pref-emx.prf
+ 
+ #
+ # This file is used by Angband (when it was compiled using "main-emx.c")
+ # to specify various "user preferences".  This file specifies some visual
+ # attr/char remappings, which allow the use of some of OS/2's built in
+ # pseudo-graphic pictures for walls and such.  This file defines some basic
+ # macros, which allow the use of the "keypad", alone, and with the shift or
+ # control modifier keys.  All "special" keys are translated by "main-emx.c"
+ # into special "macro triggers" of the encoded form "^_SSS\r", where the
+ # two digit decimal scan code of the keypress is stored in "SSS", see 
+ # "main-emx.c" for info.
+ #
+ # This file is only used by the VIO (text mode) version of Angband. The PM (graphical)
+ # version uses *ibm.prf. The macro triggers of these two versions are not 
+ # compatible or interchangable.
+ #
+ 
+ 
+ 
+ ### Terrain Features ###
+ 
+ 
+ #
+ # Floors (white / centered dot)
+ #
+ 
+ F:1:1/-7
+ 
+ #
+ # Invis traps (white / centered dot)
+ #
+ 
+ F:2:1/-7
+ 
+ 
+ #
+ # Magma (slate / special solid block)
+ #
+ 
+ F:50:2/-80
+ F:52:2/-80
+ 
+ 
+ #
+ # Quartz (light slate / special solid block)
+ #
+ 
+ F:51:9/-80
+ F:53:9/-80
+ 
+ 
+ #
+ # Secret door (white / solid block)
+ #
+ 
+ F:48:1/-79
+ 
+ #
+ # Granite walls (white / solid block)
+ #
+ 
+ F:56:1/-79
+ F:57:1/-79
+ F:58:1/-79
+ F:59:1/-79
+ 
+ #
+ # Permanent rock (white / solid block)
+ #
+ 
+ F:60:1/-79
+ F:61:1/-79
+ F:62:1/-79
+ F:63:1/-79
+ 
+ 
+ 
+ ### Basic Macros ###
+ 
+ 
+ #
+ # Keypad (7,8,9,-,4,5,6,+,1,2,3,0,.)
+ #
+ 
+ A:7
+ P:^_071\r
+ 
+ A:8
+ P:^_072\r
+ 
+ A:9
+ P:^_073\r
+ 
+ A:-
+ P:^_074\r
+ 
+ A:4
+ P:^_075\r
+ 
+ A:5
+ P:^_076\r
+ 
+ A:6
+ P:^_077\r
+ 
+ A:+
+ P:^_078\r
+ 
+ A:1
+ P:^_079\r
+ 
+ A:2
+ P:^_080\r
+ 
+ A:3
+ P:^_081\r
+ 
+ A:0
+ P:^_082\r
+ 
+ A:.
+ P:^_083\r
+ 
+ 
+ #
+ # Shift-Keypad-8, for example, is exactly '8', so these cannot be used for macros
+ #
+ 
+ #
+ # Control + Keypad (1,2,3,4,5,6,7,8,9)
+ #
+ # Run, Run, Run, Run, Run, Run, Run, Run, RUN!
+ #
+ 
+ A:\e\e\\.1
+ C:^_117\r
+ 
+ A:\e\e\\.2
+ C:^_145\r
+ 
+ A:\e\e\\.3
+ C:^_118\r
+ 
+ A:\e\e\\.4
+ C:^_115\r
+ 
+ A:\e\e\\.5
+ C:^_143\r
+ 
+ A:\e\e\\.6
+ C:^_116\r
+ 
+ A:\e\e\\.7
+ C:^_119\r
+ 
+ A:\e\e\\.8
+ C:^_141\r
+ 
+ A:\e\e\\.9
+ C:^_132\r
+ 
+ 
