[comp.sources.games] v09i019: NetHack3 - display oriented dungeons & dragons

billr@saab.CNA.TEK.COM (Bill Randle) (02/24/90)

Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
Posting-number: Volume 9, Issue 19
Archive-name: NetHack3/Patch7s
Patch-To: NetHack3: Volume 7, Issue 56-93



#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 19 (of 30)."
# Contents:  patch7.13
# Wrapped by billr@saab on Wed Feb 21 10:04:40 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patch7.13' -a "${1}" != "-c" ; then 
  echo shar: Renaming existing file \"'patch7.13'\" to \"'patch7.13.orig'\"
  mv -f 'patch7.13' 'patch7.13.orig'
fi
echo shar: Extracting \"'patch7.13'\" \(53324 characters\)
sed "s/^X//" >'patch7.13' <<'END_OF_FILE'
X*** /dev/null	Mon Feb 19 16:50:00 1990
X--- amiga/NHScore.uu	Sun Feb 11 12:22:05 1990
X***************
X*** 0 ****
X--- 1,44 ----
X+ begin 644 NetHackScore.info
X+ MXQ   0      ) !) %  *P &  ,  0 C!#  (P9(                    
X+ M    !/X (P&P "*'P    ,H    ^             )Q       !0 "H  @ !
X+ MH4@#                                                /______X
X+ M!X   /\\__]__?_\  #_'/_^?_W__P  _PSP?!_Y__\  ?\DYSY_^_S_@ #_
X+ M,. ^?_G^?X  _SCG_F_]_S^  '\\\'\?_/^_@  ?______X_OX          
X+ M '^     '_______@    !_______P     _______\     (&#@Q'!^    
X+ M $_.3F,G/@    #@S\YG(#P     _DY.9^?X     <#@X,/P>     /_____
X+ M__     #_______@    !_______X     _______\     /______^     
X+ M      '_@  '_______"_P  #_______GWX  !YS___Q_[Y^   ^<___^?]\
X+ M_   /G.#\'G/?_@  #X#^><YGT?X   ^<\'G^#\/\   /G,YYSF??^   !YS
X+ MA/!QSS^    /______^?    !_______S                           
X+ M                                                          !_
X+ M______S_P   P      '^'P  0##  "  @ #  $ XP !@ (  ( # /,/@^ &
X+ M  #  @#;&,& ! , 0 , SQ_!@ 8!@$ ! ,<8 9 " ,!  8###X#@ P! 0 #@
X+ M      ' 0$  /________X!     (       0    &       ,    !     
X+ M  "     WY\?.X^!@    + QL9S8P0    $?,#&8W\(    # ;&QF!@&    
X+ M C\?'SP/A     0       @    ,       8    "       $    !      
X+ M "     P      !@  ?_______X 0  8       ] ,  ,       8(&  "&,
X+ M   . $&!  !!C   !@"# P  08Q\#X8P@ 8  $'\!AC&8,0$  !!C#X8!\" 
X+ M"   08S&&,9@@!@  &&,>P^.,,!P   P      !@P   &       ,X    ?_
X+ M______X                                                  %  
X+ M*@ "  &DD ,                                                _
X+ M______@'@   _SS__W_]__P  /\<__Y__ /_  #_#/!\'_@ /P !_R3G/G_X
X+ M  >  /\PX#Y_^     #_..?^;_P     ?SSP?Q_\X    !_______C@     
X+ M        8#     ?_____@      '_____X      #______       @8.#$
X+ M< ,     3\Y.8R<#     .#/SF<@(P    #^3DYGY_L    !P.#@P_!_@   
X+ M ________.    /______^     '_______@    #_______P     ______
X+ M_X           ?^   ?______\+_   /______^??@  'G/___'_OAX  #YS
X+ M___Y_WS<   ^<X/P><]#N   /@/YYSF?3O@  #YSP>?X/P'P   ^<SGG.9]_
X+ MX   'G.$\''//X    _______Y\    '_______,                    
X+ M                                                            
X+ M     '_______/_   #       ?X?  ! ,,  ( "  ,  0#C  &  _P @ , 
X+ M\P^#X 8#P, " -L8P8 $ #A  P#/'\& !@ 'P $ QQ@!D (  '@!@,,/@. #
X+ M   & .       <   @ _________X#(    @     0 "    8     $_\@  
X+ M $      C^0   #?GQ\[C\.(    L#&QG-CC<    1\P,9C?WX    ,!L;&8
X+ M& <    "/Q\?/ ^'@   !       '.    P      !@    (       0    
X+ M$       (    #       &  !________@!  !@      #T P  P      !@
X+ M@8  (8P   X 08$  $&,   & (/#  !!C'P/AC"#A@  0?P&&,9@S@0  $&,
X+ M/A@'P( (  !!C,88QF" &   88Q[#XXPP'   #       &#    8       S
X+ M@   !________@                                              
X+ @ !!(86-K17AE.DYE=$AA8VL     "     930T]210  
X+  
X+ end
X*** /dev/null	Mon Feb 19 16:50:11 1990
X--- amiga/NHinfo.uu	Sat Jan 20 16:42:21 1990
X***************
X*** 0 ****
X--- 1,43 ----
X+ begin 644 NetHack.info
X+ MXQ   0     "$@ 2 %  *P &  ,  0 C>P  (WN@                    
X+ M     R(              @X    '             )Q       !0 "H  @ !
X+ M@;@#      #_____________^/____QC___X__@____\8___^/_X#____&/_
X+ M__C_^,/___QC___X__CP___\8___^/_X_#___&/___C_^/\/__QC___X__C_
X+ MP__\8___^/_X__#__&    #_^/_\/_Q@    __C__P_\8___^/_X___#_&/_
X+ M__C_^/__\/QC___X__C___P  !__^/_X___\   '__C_^/__^ !CX'_X__C_
X+ M__ 08_@?^/_X___P_&/^#_C_____\/___X________/____'____________
X+ MX____________^/________\  ?#________^  !C_________!_P!______
X+ M___P__ _________^   /_________X #A____________\/____________
X+ M#____________P?___________^'____________A________/___X?_____
X+ M__@/__^/_______\ __\#________@#_X#_________ '@#__________@ ?
X+ M______________________________\             !P    .<   '  ? 
X+ M   #G   !P '\    YP   < !SP   .<   '  </   #G   !P ' \   YP 
X+ M  < !P#P  .<   '  < /  #G   !P '  \  Y____\ !P #P .?____  < 
X+ M / #G   !P '   \ YP   < !P  #P.<   '  <   ,     !P '        
X+ M  < !P   !*<   '  <    /G   !P '     YP   <                 
X+ M                                                            
X+ M                                                            
X+ M                                                            
X+ M                                                            
X+ M                                                         %  
X+ M*@ "  &%  ,      /_____________X_____&/___C_^#____QC___X__@/
X+ M___\8___^/_XP____&/___C_^/#___QC___X__C\/__\8___^/_X_P___&/_
X+ M__C_^/_#__QC___X__C_\/_\8    /_X__P__&    #_^/__#_QC___X__C_
X+ M_\/\8___^/_X___P_&/___C_^/___   '__X__C___@   ?_^/_X__^  &/@
X+ M?_C_^/_  !!C^!_X__C^  #\8_X/^/__^   ____C_____,!D____\?____X
X+ M !_____C____^  ?____X_____P /_P !\/____^&'_X  &/_____QO_\'_ 
X+ M'_________#_\#_________X   __________@ .'____________P______
X+ M______\/____________!____________X?___________^'_______\____
X+ MA_______^ ___X________P#__P/_______^ /_@/________\ > /______
X+ M___^ !_______________________________P             '     YP 
X+ M  < !\    .<   '  ?P   #G   !P '/    YP   < !P\   .<   '  <#
X+ MP  #G   !P ' /   YP   < !P \  .<   '  < #P #G____P '  /  Y__
X+ M__\ !P  \ .<   '  <  #P#G   !P '   / YP   < !P   P     '  < 
X+ M        !P '    $IP   < !P    ^<   '  <    #G   !P          
X+ M      ,!@                        ?^           !_            
X+ M'            !@            8            &            #P     
X+ M      #G                                                    
X+ M                                                            
X+ K                                                            
X+  
X+ end
X*** /dev/null	Mon Feb 19 16:50:28 1990
X--- amiga/NewGame.uu	Sun Feb 11 12:22:18 1990
X***************
X*** 0 ****
X--- 1,44 ----
X+ begin 644 NewGame.info
X+ MXQ   0      D0 2 %  *P &  ,  0 BTP  (P&8                    
X+ M    !/X (M-@         3<    '             )Q       !0 "H  @ !
X+ M@^@#      #_____________^/____QC___X__@____\8___^/_X#____&/_
X+ M__C_^,/___QC___X__CP___\8___^/_X_#___&/___C_^/\/__QC___X__C_
X+ MP__\8___^/_X__#__&    #_^/_\/_Q@    __C__P_\8___^/_X___#_&/_
X+ M__C_^/__\/QC___X__C___P  !__^/_X___\   '__C_^/__^ !CX'_X__C_
X+ M__ 08_@?^/_X___P_&/^#_C_____\/___X________/____'____\#______
X+ MX_____.?_____^/____SG__\  ?#____\Y__^  !C_____.?__!_P!______
X+ M___P__ _____^#__^   /_____.?__X #A_____P'_____\/____\_______
X+ M#_____@______P?___________^'____YY______A____^2?_/___X?____D
X+ MG_@/__^/____\S_\ __\#_____,__@#_X#_________ '@#__________@ ?
X+ M______________________________\             !P    .<   '  ? 
X+ M   #G   !P '\    YP   < !SP   .<   '  </   #G   !P ' \   YP 
X+ M  < !P#P  .<   '  < /  #G   !P '  \  Y____\ !P #P .?____  < 
X+ M / #G   !P '   \ YP   < !P  #P.<   '  <   ,     !P '        
X+ M  < !P   !*<   '  <    /G   !P '     YP   <                 
X+ M            #\            Q@           ,8           #&      
X+ M      Q@                        !\            Q@           /
X+ MX           #             ?                         &&      
X+ M     !M@           ;8           #,            S             
X+ M                                                         %  
X+ M*@ "  &7< ,      /_____________X_____&/___C_^#____QC___X__@/
X+ M___\8___^/_XP____&/___C_^/#___QC___X__C\/__\8___^/_X_P___&/_
X+ M__C_^/_#__QC___X__C_\/_\8    /_X__P__&    #_^/__#_QC___X__C_
X+ M_\/\8___^/_X___P_&/___C_^/___   '__X__C___@   ?_^/_X__^  &/@
X+ M?_C_^/_  !!C^!_X__C^  #\8_X/^/__^   ____C_____,!D____\?____X
X+ M !_____C____^  ?____X_____P /_P !\/____\ '_X  &/_____ #_\'_ 
X+ M'_____S\__#_\#______!__X   ______G/__@ .'_____X#_____P_____^
X+ M?_____\/_____P?_____!____________X?____^>?____^'_____DG\____
X+ MA_____Y)^ ___X______,_P#__P/_____S/^ /_@/________\ > /______
X+ M___^ !_______________________________P             '     YP 
X+ M  < !\    .<   '  ?P   #G   !P '/    YP   < !P\   .<   '  <#
X+ MP  #G   !P ' /   YP   < !P \  .<   '  < #P #G____P '  /  Y__
X+ M__\ !P  \ .<   '  <  #P#G   !P '   / YP   < !P   P     '  < 
X+ M        !P '    $IP   < !P    ^<   '  <    #G   !P          
X+ M      ,!@                                                   
X+ M             P$           ,;            ^            ;P     
X+ M      '_           !@            /@                        !
X+ MA@           ;8           &V            S            ,P     
X+ M                                                            
X+ 2 !!(86-K17AE.DYE=$AA8VL 
X+  
X+ end
X*** amiga/Old/amidos.c	Mon Feb 19 16:50:52 1990
X--- amiga/amidos.c	Wed Jan 31 19:26:06 1990
X***************
X*** 3,9 ****
X  /* An assortment of imitations of cheap plastic MSDOS functions.
X   */
X  
X! #include <libraries/dos.h>
X  
X  #undef TRUE
X  #undef FALSE
X--- 3,10 ----
X  /* An assortment of imitations of cheap plastic MSDOS functions.
X   */
X  
X! #define NEED_VARARGS
X! #include "hack.h"
X  
X  #undef TRUE
X  #undef FALSE
X***************
X*** 10,25 ****
X  #undef COUNT
X  #undef NULL
X  
X! #define NEED_VARARGS
X! #include "hack.h"
X  
X  extern char Initialized;
X  
X! struct FileLock *Lock(), *CurrentDir(); /* Cheating - BCPL pointers */
X! struct FileHandle *Open();              /* Cheating - BCPL pointer */
X! long Read(), Write(), IoErr(), AvailMem();
X! void *malloc();
X! char *rindex(), *index();
X  
X  int Enable_Abort = 0;	/* for stdio package */
X  
X--- 11,65 ----
X  #undef COUNT
X  #undef NULL
X  
X! #include <libraries/dos.h>
X! #ifdef LATTICE
X! #include <proto/exec.h>
X! #include <proto/dos.h>
X! #endif
X  
X+ /* Prototypes for functions defined in amidos.c */
X+ void NDECL (flushout);
X+ int NDECL (getpid);
X+ int FDECL (abs, (int x));
X+ int NDECL (tgetch);
X+ int NDECL (dosh);
X+ long FDECL (freediskspace, (char *path));
X+ long FDECL (filesize, (char *file));
X+ void FDECL (eraseall, (char *path,
X+               char *files));
X+ char *FDECL (CopyFile, (char *from,
X+                char *to));
X+ void FDECL (copybones, (int mode));
X+ void NDECL (playwoRAMdisk);
X+ int FDECL (saveDiskPrompt, (int start));
X+ void NDECL (gameDiskPrompt);
X+ void NDECL (read_config_file);
X+ void NDECL (set_lock_and_bones);
X+ void FDECL (append_slash, (char *name));
X+ void FDECL (getreturn, (char *str));
X+ void VDECL (msmsg, (char *fmt, ...));
X+ FILE * FDECL (fopenp, (char *name,
X+                       char *mode));
X+ int FDECL (chdir, (char *dir));
X+ void FDECL (msexit, (int code));
X+ static boolean NDECL (record_exists);
X+ static int FDECL (strcmpi, (register char *a, register char *b));
X+ 
X  extern char Initialized;
X  
X! #ifdef AZTEC_C
X! struct DateStamp *FDECL(DateStamp, (struct DateStamp *));
X! BPTR FDECL(Lock, (char *, long));
X! BPTR FDECL(CurrentDir, (BPTR));
X! BPTR FDECL(Open, (char *, long));
X! long FDECL(Read, (BPTR, char *, long));
X! long FDECL(Write, (BPTR, char *, long));
X! long NDECL(IoErr);
X! long FDECL(AvailMem, (long));
X! void *FDECL(malloc, (unsigned int));
X! char *FDECL(rindex, (char *, int));
X! char *FDECL(index, (char *, int));
X! #endif
X  
X  int Enable_Abort = 0;	/* for stdio package */
X  
X***************
X*** 52,58 ****
X      while (pid == 0) {
X  	struct DateStamp dateStamp;
X  	pid = rnd(30000);
X! 	pid += DateStamp(&dateStamp);    /* More or less random */
X  	pid ^= (short) (dateStamp.ds_Days >> 16) ^
X  	       (short) (dateStamp.ds_Days)       ^
X  	       (short) (dateStamp.ds_Minute)     +
X--- 92,98 ----
X      while (pid == 0) {
X  	struct DateStamp dateStamp;
X  	pid = rnd(30000);
X! 	pid += (short) DateStamp(&dateStamp);    /* More or less random */
X  	pid ^= (short) (dateStamp.ds_Days >> 16) ^
X  	       (short) (dateStamp.ds_Days)       ^
X  	       (short) (dateStamp.ds_Minute)     +
X***************
X*** 60,66 ****
X  	pid %= 30000;
X      }
X  
X!     return pid;
X  }
X  
X  #ifndef getlogin
X--- 100,106 ----
X  	pid %= 30000;
X      }
X  
X!     return (int)pid;
X  }
X  
X  #ifndef getlogin
X***************
X*** 139,146 ****
X  	    fileName[0] = '\0';
X      }
X  
X!     if (infoData = malloc(sizeof(*infoData))) {
X! 	struct FileLock *fileLock;  /* Cheating */
X  	if (fileLock = Lock(fileName, SHARED_LOCK)) {
X  	    if (Info(fileLock, infoData)) {
X  		/* We got a kind of DOS volume, since we can Lock it. */
X--- 179,186 ----
X  	    fileName[0] = '\0';
X      }
X  
X!     if (infoData = malloc(sizeof(struct InfoData))) {
X! 	BPTR fileLock;
X  	if (fileLock = Lock(fileName, SHARED_LOCK)) {
X  	    if (Info(fileLock, infoData)) {
X  		/* We got a kind of DOS volume, since we can Lock it. */
X***************
X*** 174,184 ****
X  filesize(file)
X  char *file;
X  {
X!     register struct FileLock *fileLock;
X      register struct FileInfoBlock *fileInfoBlock;
X      register long size = 0;
X  
X!     if (fileInfoBlock = malloc(sizeof(*fileInfoBlock))) {
X  	if (fileLock = Lock(file, SHARED_LOCK)) {
X  	    if (Examine(fileLock, fileInfoBlock)) {
X  		size = fileInfoBlock->fib_Size;
X--- 214,224 ----
X  filesize(file)
X  char *file;
X  {
X!     register BPTR fileLock;
X      register struct FileInfoBlock *fileInfoBlock;
X      register long size = 0;
X  
X!     if (fileInfoBlock = malloc(sizeof(struct FileInfoBlock))) {
X  	if (fileLock = Lock(file, SHARED_LOCK)) {
X  	    if (Examine(fileLock, fileInfoBlock)) {
X  		size = fileInfoBlock->fib_Size;
X***************
X*** 201,209 ****
X  {
X      char buf[FILENAME];
X      short i;
X!     struct FileLock *fileLock, *dirLock;
X  
X!     if (dirLock = Lock(path)) {
X  	dirLock = CurrentDir(dirLock);
X  
X  	strcpy(buf, files);
X--- 241,249 ----
X  {
X      char buf[FILENAME];
X      short i;
X!     BPTR fileLock, dirLock;
X  
X!     if (dirLock = Lock(path ,SHARED_LOCK)) {
X  	dirLock = CurrentDir(dirLock);
X  
X  	strcpy(buf, files);
X***************
X*** 227,233 ****
X  char *CopyFile(from, to)
X  char *from, *to;
X  {
X!     register struct FileHandle *fromFile, *toFile;
X      register char *buffer;
X      register long size;
X      char *error = NULL;
X--- 267,273 ----
X  char *CopyFile(from, to)
X  char *from, *to;
X  {
X!     register BPTR fromFile, toFile;
X      register char *buffer;
X      register long size;
X      char *error = NULL;
X***************
X*** 257,263 ****
X  copybones(mode)
X  int mode;
X  {
X!     struct FileLock *fileLock;
X      char from[FILENAME], to[FILENAME];
X      char *frompath, *topath, *status;
X      short i;
X--- 297,303 ----
X  copybones(mode)
X  int mode;
X  {
X!     BPTR fileLock;
X      char from[FILENAME], to[FILENAME];
X      char *frompath, *topath, *status;
X      short i;
X***************
X*** 336,342 ****
X  {
X      extern int saveprompt;
X      char buf[BUFSIZ], *bp;
X!     struct FileLock *fileLock;
X  
X      if (saveprompt) {
X  	/* Don't prompt if you can find the save file */
X--- 376,382 ----
X  {
X      extern int saveprompt;
X      char buf[BUFSIZ], *bp;
X!     BPTR fileLock;
X  
X      if (saveprompt) {
X  	/* Don't prompt if you can find the save file */
X***************
X*** 413,419 ****
X  {
X      char    tmp_ramdisk[PATHLEN], tmp_levels[PATHLEN];
X      char    buf[BUFSZ], *bufp;
X!     FILE    *fp, *fopenp();
X      extern  char plname[];
X      extern  int saveprompt;
X  
X--- 453,459 ----
X  {
X      char    tmp_ramdisk[PATHLEN], tmp_levels[PATHLEN];
X      char    buf[BUFSZ], *bufp;
X!     FILE    *fp;
X      extern  char plname[];
X      extern  int saveprompt;
X  
X***************
X*** 567,574 ****
X--- 607,629 ----
X  msmsg VA_DECL(char *, fmt)
X      VA_START(fmt);
X      VA_INIT(fmt, char *);
X+ #ifdef LATTICE
X+ 	{
X+ 	extern struct Screen *HackScreen;
X+ 	char buf[100];
X+ 	vsprintf(buf,fmt,VA_ARGS);
X+ 	if(HackScreen){
X+ 		WindowFPuts(buf);
X+ 		WindowFlush();
X+ 	} else {
X+ 		fprintf(stdout,buf);
X+ 		fflush(stdout);
X+ 	}
X+ 	}
X+ #else
X      vprintf(fmt, VA_ARGS);
X      (void) fflush(stdout);
X+ #endif
X      VA_END();
X  }
X  
X***************
X*** 583,589 ****
X  {
X      char buf[BUFSIZ], *bp, *pp, lastch;
X      FILE *fp;
X!     register struct FileLock *theLock;
X  
X      /* Try the default directory first.  Then look along PATH.
X       */
X--- 638,644 ----
X  {
X      char buf[BUFSIZ], *bp, *pp, lastch;
X      FILE *fp;
X!     register BPTR theLock;
X  
X      /* Try the default directory first.  Then look along PATH.
X       */
X***************
X*** 622,631 ****
X   *  Assumes -1 is not a valid lock, since 0 is valid.
X   */
X  
X! #define NO_LOCK     ((struct FileLock *) -1)
X  
X  char orgdir[1];
X! static struct FileLock *OrgDirLock = NO_LOCK;
X  
X  chdir(dir)
X  char *dir;
X--- 677,686 ----
X   *  Assumes -1 is not a valid lock, since 0 is valid.
X   */
X  
X! #define NO_LOCK     ((BPTR) -1)
X  
X  char orgdir[1];
X! static BPTR OrgDirLock = NO_LOCK;
X  
X  chdir(dir)
X  char *dir;
X***************
X*** 641,647 ****
X  	 * Go to some new place. If still at the original
X  	 * directory, save the FileLock.
X  	 */
X! 	struct FileLock *newDir;
X  
X  	if (newDir = Lock(dir, SHARED_LOCK)) {
X  	    if (OrgDirLock == NO_LOCK) {
X--- 696,702 ----
X  	 * Go to some new place. If still at the original
X  	 * directory, save the FileLock.
X  	 */
X! 	BPTR newDir;
X  
X  	if (newDir = Lock(dir, SHARED_LOCK)) {
X  	    if (OrgDirLock == NO_LOCK) {
X***************
X*** 702,708 ****
X   *  memcmp - used to compare two struct symbols, in lev.c
X   */
X  
X! #ifndef memcmp
X  memcmp(a, b, size)
X  register unsigned char *a, *b;
X  register int size;
X--- 757,763 ----
X   *  memcmp - used to compare two struct symbols, in lev.c
X   */
X  
X! #if defined(AZTEC_C) && !defined(memcmp)
X  memcmp(a, b, size)
X  register unsigned char *a, *b;
X  register int size;
X***************
X*** 713,729 ****
X      }
X  
X      return 0;		/* equal */
X- }
X- #endif
X- 
X- #ifndef memcpy
X- char *
X- memcpy(dest, source, size)
X- register char *dest;
X- char *source;
X- int size;
X- {
X-     movmem(source, dest, size);
X-     return dest;
X  }
X  #endif
X--- 768,772 ----
X*** amiga/Old/amimenu.c	Mon Feb 19 16:51:45 1990
X--- amiga/amimenu.c	Thu Dec 28 17:27:08 1989
X***************
X*** 7,13 ****
X  
X  #define TEXT(nam,str) \
X  static struct IntuiText nam = \
X!   {0,1,JAM2,0,0,(struct TextAttr*)NULL,(UBYTE*)str,(struct IntuiText*)NULL}
X  
X  	/* Commands */
X  	TEXT(T_HELP,  "?   Display help menu");
X--- 7,13 ----
X  
X  #define TEXT(nam,str) \
X  static struct IntuiText nam = \
X!   {0,1,JAM2,0,0,0L,(UBYTE*)str,0L}
X  
X  	/* Commands */
X  	TEXT(T_HELP,  "?   Display help menu");
X***************
X*** 64,70 ****
X  	TEXT(T_E,     "E   Engrave msg on floor");
X  
X  #define IFLAGS ITEMENABLED|ITEMTEXT|HIGHCOMP
X! #define IDATA(cmd,str,off) 0,off,WDT,9,IFLAGS,0,(APTR)&str,NULL,cmd,(struct MenuItem*)NULL,0
X  
X  /* Commands */
X  
X--- 64,70 ----
X  	TEXT(T_E,     "E   Engrave msg on floor");
X  
X  #define IFLAGS ITEMENABLED|ITEMTEXT|HIGHCOMP
X! #define IDATA(cmd,str,off) 0,off,WDT,9,IFLAGS,0,(APTR)&str,NULL,cmd,0L,0
X  
X  /* Commands */
X  
X*** amiga/Old/amitcap.c	Mon Feb 19 16:51:59 1990
X--- amiga/amitcap.c	Wed Jan 31 19:25:16 1990
X***************
X*** 4,11 ****
X--- 4,25 ----
X  
X  /* block some unused #defines to avoid overloading some cpp's */
X  #define MONATTK_H
X+ 
X  #include "hack.h"       /* for ROWNO, COLNO, *HI, *HE, *AS, *AE */
X  
X+ #ifdef LATTICE
X+ #undef TRUE
X+ #undef FALSE
X+ #undef COUNT
X+ #undef NULL
X+ #include <proto/dos.h>
X+ #endif
X+ 
X+ #ifndef LATTICE
X+ extern void FDECL(Delay, (unsigned long));
X+ #endif
X+ extern void NDECL(Initialize);
X+ 
X  static char HO[] = "\233H";         /* Home         CSI H */
X  static char CL[] = "\f";            /* Clear        FF */
X  static char CE[] = "\233K";         /* Erase EOL    CSI K */
X***************
X*** 17,23 ****
X  static char ME[] = "\2330m";        /* Reverse off  CSI 0 m */
X  
X  #ifdef TEXTCOLOR
X! static char SO[] = "\23333m";       /* Standout: Color #3 (orange) */
X  static char SE[] = "\2330m";
X  #else
X  static char SO[] = "\2337m";        /* Inverse video */
X--- 31,37 ----
X  static char ME[] = "\2330m";        /* Reverse off  CSI 0 m */
X  
X  #ifdef TEXTCOLOR
X! static char SO[] = "\23337m";       /* Use colormap entry #7 (red) */
X  static char SE[] = "\2330m";
X  #else
X  static char SO[] = "\2337m";        /* Inverse video */
X***************
X*** 25,33 ****
X  #endif
X  
X  #ifdef TEXTCOLOR
X! /* color maps */
X! static int foreg[8] = { 2, 3, 1, 3, 3, 3, 3, 0 };
X! static int backg[8] = { 1, 2, 2, 0, 1, 1, 1, 1 };
X  #endif
X  
X  void
X--- 39,50 ----
X  #endif
X  
X  #ifdef TEXTCOLOR
X! /*
X!  * Map our amiga-specific colormap into the colormap specified in color.h.
X!  * See amiwind.c for the amiga specific colormap.
X!  */
X! static int foreg[16] = { 0, 7, 4, 2, 6, 5, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
X! static int backg[16] = { 1, 0, 0, 0, 0, 0, 0, 0, 1, 7, 4, 2, 6, 5, 3, 1 };
X  #endif
X  
X  void
X***************
X*** 35,71 ****
X  {
X  #ifdef TEXTCOLOR
X      register int c;
X! #endif  
X! 
X      (void) Initialize();        /* This opens screen, window, console, &c */
X- 
X      CO = COLNO;
X      LI = ROWNO+3;               /* used in pri.c and pager.c */
X  
X      set_whole_screen();
X- 
X      CD = "\233J";               /* used in pager.c */
X  
X  #ifdef TEXTCOLOR
X      /*
X!      * We need 5 different 'colors', but in a 4-color screen we really
X!      * cannot make these available, even more so because we use the user's
X!      * preferred Workbench colors. Instead, we use different combinations
X!      * of the 4 possible colors. For orientation: default colors are
X!      * white (1) on blue (0), and a orange (3) cursor on a black (2) character.
X!      *
X!      * "Black": Black on White
X!      * "Red":	Orange on Black
X!      * "Green": White on Black
X!      * "Yellow": Orange on Blue
X!      * "Blue":	Orange on White
X!      * "Magenta": White on Black
X!      * "Cyan":	White on Black
X!      * "White": Blue on White
X       */
X!     for (c = 0; c < SIZE(HI_COLOR); c++) {
X! 	HI_COLOR[c] = (char *) alloc(sizeof("E0;33;44m"));
X! 	Sprintf(HI_COLOR[c], "\2333%d;4%dm", foreg[c], backg[c]);
X      }
X  
X      HI = "\2331m";              /* Bold (hilight) */
X--- 52,76 ----
X  {
X  #ifdef TEXTCOLOR
X      register int c;
X! #endif
X      (void) Initialize();        /* This opens screen, window, console, &c */
X      CO = COLNO;
X      LI = ROWNO+3;               /* used in pri.c and pager.c */
X  
X      set_whole_screen();
X      CD = "\233J";               /* used in pager.c */
X  
X  #ifdef TEXTCOLOR
X      /*
X!      * Perform amiga to color.h colormap conversion - Please note that the
X!      * console device can only handle 8 foreground and 8 background colors
X!      * while color.h defines 8 basic and 8 hilite colors.  Hilite colors
X!      * are handled as inverses.  For instance, a hilited green color will
X!      * appear as green background with a black foreground.
X       */
X!     for (c = 0; c < SIZE(hilites); c++) {
X!         hilites[c] = (char *) alloc(sizeof("E0;33;44m"));
X!         Sprintf(hilites[c], "\2333%d;4%dm", foreg[c], backg[c]);
X      }
X  
X      HI = "\2331m";              /* Bold (hilight) */
X*** amiga/Old/amitty.c	Mon Feb 19 16:52:15 1990
X--- amiga/amitty.c	Sun Feb 18 16:32:01 1990
X***************
X*** 46,53 ****
X  	VA_INIT(s, char *);
X  	end_screen();
X  	putchar('\n');
X! 	vprintf(s,VA_ARGS);
X  	putchar('\n');
X  	VA_END();
X! 	abort(1);
X  }
X--- 46,57 ----
X  	VA_INIT(s, char *);
X  	end_screen();
X  	putchar('\n');
X! 
X!         {char buf[180];
X! 	vsprintf(buf,s,VA_ARGS);
X!         printf(buf);
X!         }	/* Overloaded */
X  	putchar('\n');
X  	VA_END();
X! 	Abort(0L);
X  }
X*** amiga/Old/amiunix.c	Mon Feb 19 16:52:27 1990
X--- amiga/amiunix.c	Thu Dec 28 17:27:19 1989
X***************
X*** 26,31 ****
X--- 26,33 ----
X  
X  extern time_t time();
X  
X+ static struct tm *NDECL(getlt);
X+ 
X  void
X  setrandom()
X  {
X*** /dev/null	Mon Feb 19 16:52:37 1990
X--- amiga/amiwbench.c	Fri Feb 16 19:05:02 1990
X***************
X*** 0 ****
X--- 1,534 ----
X+ /*    SCCS Id: @(#)amiwbench.c - Amiga Workbench interface  3.0   */
X+ /* Copyright (c) Kenneth Lorber, Bethesda, Maryland, 1990	  */
X+ /* NetHack may be freely redistributed.  See license for details. */
X+ 
X+ #include "hack.h"
X+ 
X+ #undef TRUE
X+ #undef FALSE
X+ #undef COUNT
X+ #undef NULL
X+ 
X+ #ifdef LATTICE
X+ #include <proto/exec.h>
X+ #include <proto/dos.h>
X+ #include <proto/icon.h>
X+ #endif
X+ 
X+ #include <workbench/startup.h>
X+ #include <workbench/workbench.h>
X+ #include <exec/memory.h>
X+ #include <ctype.h>
X+ 
X+ #ifdef LATTICE
X+ #include <string.h>
X+ #undef strlen			/* grrr */
X+ #endif
X+ 
X+ #define ALLOC_SIZE		((long)sizeof(struct FileInfoBlock))
X+ 
X+ #ifdef AZTEC_C
X+ /*
X+  * Change when manx becomes ANSI complient
X+  */
X+ BPTR FDECL(CurrentDir,(BPTR));
X+ BPTR FDECL(ParentDir, (BPTR));
X+ BPTR FDECL(Lock, (char *, long));
X+ void *FDECL(AllocMem, (long, long));
X+ void FDECL(FreeMem, (void *, long));
X+ unsigned short FDECL(Examine, (BPTR, struct FileInfoBlock *));
X+ struct Library *FDECL(OpenLibrary,(char *, long));
X+ struct DiskObject *FDECL(GetDiskObject, (char *));
X+ 
X+ extern struct Library *IconBase;
X+ #endif
X+ 
X+ #ifdef AMIGA_WBENCH
X+ static void FDECL(ami_wb_findme,(char *,char *,struct WBArg *));
X+ static int FDECL(buildPath,(LONG,struct FileInfoBlock *,char *));
X+ static void FDECL(insert,(char *,char *));
X+ 
X+ BOOL FromWBench=0;		/* if FALSE, this file is a big NOP */
X+ static BOOL FromTool=0;		/* or from Project (ergo nothing to restore) */
X+ static char argline[80];	/* fake command line from ToolTypes */
X+ static BOOL TTparse=0;		/* parsing tooltypes? */
X+ static BOOL KillIcon=FALSE;	/* delayed expunge of user's icon */
X+ static char iconname[PATHLEN+5];
X+ static char origicon[PATHLEN+5];
X+ static char savefname[PL_NSIZ];		/* name from name of save file */
X+ 
X+ extern const char *classes;	/* liberated from pcmain */
X+ extern char *PATH;
X+ 
X+ /* Called after NetHack.cnf (and maybe NETHACKOPTIONS) are read.
X+  * If this is a request to show the score file, do it here and quit.
X+  */
X+ void ami_wbench_init(argc,argv)
X+ int argc;
X+ char *argv[];
X+ {
X+ 	struct WBStartup *wbs=(struct WBStartup *)argv;
X+ 	struct WBArg *wa;
X+ 	int	ia;			/* arg of active icon */
X+ 	int	x,doscore=0;
X+ 	char 	*p,*lp;
X+ 	BPTR	olddir;			/* starting directory */
X+ 	struct DiskObject *dobj;
X+ 	char	*scorearg;
X+ 	char	tmp_ramdisk[PATHLEN];
X+ 	char	tmp_levels[PATHLEN];
X+ 
X+ 	FromWBench=(argc==0);
X+ 	if(!FromWBench)return;			/* nothing if from CLI */
X+ 
X+ 	/*
X+ 	 * "NULL" out arrays
X+ 	 */
X+ 	tmp_ramdisk[0] = '\0';
X+ 	tmp_levels[0]  = '\0';
X+ 
X+ 	IconBase=OpenLibrary("icon.library",33L);
X+ 	if(!IconBase)error("icon.library missing!");
X+ 
X+ 	wa=wbs->sm_ArgList;
X+ 	if(wbs->sm_NumArgs>2)error("You can only play one game at a time!");
X+ 	ia=wbs->sm_NumArgs-1;
X+ 	strcpy(savefname,wa[ia].wa_Name);
X+ 	if(!strncmp(index(savefname,'.'),".sav",4)){
X+ 		*index(savefname,'.')='\0';
X+ 	} else {
X+ 		savefname[0]='\0';	/* don't override if not save file */
X+ 	}
X+ 
X+ 	olddir=CurrentDir(wa[ia].wa_Lock);   /* where the icon is */
X+ 
X+ 	dobj=GetDiskObject(wa[ia].wa_Name);
X+ 	(void)CurrentDir(olddir);		/* and back */
X+ 	if(!dobj){
X+ 		error("Sorry, I can't find your icon!");
X+ 	}
X+ 
X+ 	FromTool=(dobj->do_Type==WBTOOL)?1:
X+ 			(dobj->do_Type==WBPROJECT)?0:
X+ 			(error("Sorry, I don't recognize this icon type!"),1);
X+ 
X+ 	ami_wb_findme(SAVEF,SAVEP,&wa[ia]);
X+ 	strcpy(origicon,SAVEF);
X+ 	strcat(origicon,".info");
X+ 
X+ 	argline[0]='\0';
X+ 	for(x=0;p=dobj->do_ToolTypes[x];x++){
X+ 		lp=index(p,'=');
X+ 		if(!lp++){
X+ 			if((strncmp(p,"SCORES",6)==0) ||
X+ 			   (strncmp(p,"SCORE",5)==0)){
X+ 				doscore=1;
X+ 				scorearg=malloc(strlen(p)+1);
X+ 				strcpy(scorearg,p);
X+ 			} else {
X+ 				TTparse=TRUE;
X+ 				parseoptions(p,(boolean)TRUE);
X+ 				TTparse=FALSE;
X+ 			}
X+ 		} else {
X+ 			while(*lp && isspace(*lp))lp++;
X+ 				/* vars and lengths below match amidos.c,
X+ 				 * but there is no SAVE - you put the
X+ 				 * icon where you want it, and GRAPHICS
X+ 				 * just doesn't belong		*/
X+ 			if(!strncmp(p,"OPTIONS",4)){
X+ 				TTparse=TRUE;
X+ 				parseoptions(lp,(boolean)TRUE);
X+ 				TTparse=FALSE;
X+ 			} else
X+ 			if(lp[0]=='#'){
X+ 				/* for perversity's sake, a comment */
X+ 			} else
X+ 			if(!strncmp(p,"HACKDIR",4)){
X+ 				strncpy(hackdir,lp,PATHLEN);
X+ 			} else
X+ 			if(!strncmp(p,"RAMDISK",3)){
X+ 				strncpy(tmp_ramdisk,lp,PATHLEN);
X+ 			} else
X+ 			if(!strncmp(p,"LEVELS",4)){
X+ 				strncpy(tmp_levels,lp,PATHLEN);
X+ 			} else
X+ 			if(!strncmp(p,"PATH",4)){
X+ 				strncpy(PATH,lp,PATHLEN);
X+ 			} else
X+ 				/* new things */
X+ 			if((strncmp(p,"CMDLINE",7)==0)||
X+ 			   (strncmp(p,"COMMANDLINE",11)==0)){
X+ 				strncpy(argline,lp,79);
X+ 			} else
X+ 			{
X+ 				msmsg("Bad ToolTypes line: '%s'\n",p);
X+ 				getreturn("to continue");
X+ 			}
X+ 		}
X+ 	}
X+ 		/* cleanup - from amidos.c, except we only change things
X+ 		 * that are explicitly changed, since we already
X+ 		 * did this once to get the defaults (in amidos.c)	*/
X+ 	if(plname[0])plnamesuffix();	/* from amidos.c */
X+ 	if(tmp_levels[0])strcpy(permbones,tmp_levels);
X+ 	if(tmp_ramdisk[0]){
X+ 		strcpy(levels,tmp_ramdisk);
X+ 		strcpy(bones,levels);
X+ 		if(strcmp(permbones,levels))
X+ 			ramdisk=TRUE;
X+ 	} else {
X+ 		if(tmp_levels[0]){
X+ 			strcpy(levels,tmp_levels);
X+ 			strcpy(bones,levels);
X+ 		}
X+ 	}
X+ 
X+ 	FreeDiskObject(dobj);	/* we'll get it again later if we need it */
X+ 
X+ 	if(doscore){
X+ 		long ac;
X+ 		char *p;
X+ 		char **av=calloc(1,50*sizeof(char *));
X+ #ifdef CHDIR
X+ 		chdirx(hackdir,0);
X+ #endif
X+ 		av[0]="NetHack";			/* why not? */
X+ 		for(ac=1,p=scorearg;*p;ac++){
X+ 			av[ac]=p;
X+ 			while(*p && !isspace(*p))p++;
X+ 			if(!*p)break;
X+ 			*p++='\0';
X+ 			while(*p && isspace(*p))p++;
X+ 			if(ac==1)sprintf(av[ac],"-s");	/* overwrite SCORES */
X+ 		}
X+ 		prscore(ac+1,av);
X+ 		exit(0);		/* overloaded */
X+ 	}
X+ 
X+ 			/* if the user started us from the tool icon,
X+ 			 * we can't save the game in the same place
X+ 			 * we started from, so pick up the plname
X+ 			 * and hope for the best.
X+ 			 */
X+ 	if(FromTool){
X+ 		strcat(SAVEF,plname);
X+ 		strcat(SAVEP,plname);
X+ 	}
X+ }
X+ 
X+ /* Simulate the command line (-s is already done, although this is
X+  * not exactly the way it should be). Note that we only handle flags
X+  * that are not otherwise available in NetHack.cnf		*/
X+ void ami_wbench_args(){
X+ 	char *p=argline;
X+ 	if(!FromWBench)return;
X+ 	if(!argline)return;
X+ 
X+ 	while(*p){
X+ 		switch(*p++){
X+ 		case '-':	break;
X+ #ifdef NEWS
X+ 		case 'n':	flags.nonews = TRUE;
X+ #endif
X+ #if defined(WIZARD) || defined(EXPLORE_MODE)
X+ # ifndef EXPLORE_MODE
X+ 		case 'X':
X+ # endif
X+ 		case 'D':
X+ # ifdef WIZARD
X+ #  ifdef KR1ED
X+ 			if(!strcmp(plname,WIZARD_NAME)){
X+ #  else
X+ 			if(!strcmp(plname,WIZARD)){
X+ #  endif
X+ 				wizard=TRUE;break;
X+ 			}
X+ 			/* else fall through */
X+ # endif
X+ # ifdef EXPLORE_MODE
X+ 		case 'X':	discover=TRUE;
X+ # endif
X+ 				break;
X+ #endif
X+ #ifdef DGK
X+ 		case 'r':	/* no ram disk */
X+ 			ramdisk=FALSE;
X+ 			break;
X+ #endif
X+ 		default:
X+ 			p--;
X+ 			if(index(classes,toupper(*p))){
X+ 				char *t=pl_character;
X+ 				int cnt=sizeof(pl_character)-1;
X+ 				while(cnt && *p && !isspace(*p))*t++=*p++,cnt--;
X+ 				*t=0;
X+ 			} else {
X+ 				Printf("Unknown switch: %s\n",p);
X+ 				return;
X+ 			}
X+ 		}
X+ 	}
X+ }
X+ 
X+ 
X+ /* IF (from workbench) && (currently parsing ToolTypes)
X+  * THEN print error message and return 0
X+  * ELSE return 1
X+  */
X+ ami_wbench_badopt(oopsline)
X+ char *oopsline;
X+ {
X+ 	if(!FromWBench)return 1;
X+ 	if(!TTparse)return 1;
X+ 	Printf("Bad Syntax in OPTIONS in ToolTypes: %s.",oopsline);
X+ 	return 0;
X+ }
X+ 
X+ /* Construct (if necessary) and fill in icon for given save file */
X+ void ami_wbench_iconwrite(base)
X+ char *base;
X+ {
X+ 	BPTR lock;
X+ 	char tmp[PATHLEN+5];
X+ 
X+ 	if(!FromWBench)return;
X+ 
X+ 	strcpy(tmp,base);
X+ 	strcat(tmp,".info");
X+ 	if(FromTool){				/* user clicked on main icon */
X+ 		(void)CopyFile(DEFAULT_ICON,tmp);
X+ 	} else {				/* from project */
X+ 		lock=Lock(tmp,ACCESS_READ);
X+ 		if(lock==0){	/* maybe our name changed - try to get
X+ 				 * original icon */
X+ 		    if(!Rename(origicon,tmp)){
X+ 				/* nope, build a new icon */
X+ 			lock=Lock(DEFAULT_ICON,ACCESS_READ);
X+ 			if(lock==0)return;		/* no icon today */
X+ 			UnLock(lock);
X+ 			(void)CopyFile(DEFAULT_ICON,tmp);
X+ 		    }
X+ 		} else UnLock(lock);
X+ 	}
X+ 	KillIcon=FALSE;
X+ 
X+ /*	dobj=GetDiskObject(base);
X+ 	anything we need to change?  I don't think so.
X+ 	PutDiskObject(base,dobj);
X+ 	FreeDiskObject(dobj);
X+ */
X+ }
X+ 
X+ /* How much disk space will we need for the icon? */
X+ int ami_wbench_iconsize(base)
X+ char *base;
X+ {
X+ 	struct FileInfoBlock *fib;
X+ 	BPTR lock;
X+ 	int	rv;
X+ 	char tmp[PATHLEN+5];
X+ 
X+ 	if(!FromWBench)return(0);
X+ 	strcpy(tmp,base);
X+ 	strcat(tmp,".info");
X+ 	lock=Lock(tmp,ACCESS_READ);
X+ 	if(lock==0){	/* check the default */
X+ 		lock=Lock(DEFAULT_ICON,ACCESS_READ);
X+ 		if(lock==0)return(0);
X+ 	}
X+ 	fib = (struct FileInfoBlock *)AllocMem(ALLOC_SIZE, MEMF_CLEAR);
X+ 	if(!Examine(lock,fib)){
X+ 		UnLock(lock);
X+ 		FreeMem(fib, ALLOC_SIZE);
X+ 		return(0);			/* if no icon, there
X+ 						 * never will be one */
X+ 	}
X+ 	rv=fib->fib_Size+strlen(plname);	/* guessing */
X+ 	UnLock(lock);
X+ 	FreeMem(fib, ALLOC_SIZE);
X+ 	return(rv);
X+ }
X+ 
X+ /* Delete the icon associated with the given file (NOT the file itself! */
X+ /* (Don't worry if the icon doesn't exist */
X+ void ami_wbench_unlink(base)
X+ char *base;
X+ {
X+ 	if(!FromWBench)return;
X+ 
X+ 	strcpy(iconname,base);
X+ 	strcat(iconname,".info");
X+ 	KillIcon=TRUE;			/* don't do it now - this way the user
X+ 					 * gets back whatever picture we had
X+ 					 * when we started if the game is
X+ 					 * saved again			 */
X+ /*	unlink(tmp); */
X+ }
X+ 
X+ /* Check for a saved game.
X+ IF not a saved game -> -1
X+ IF can't open SAVEF -> -1
X+ ELSE -> fd for reading SAVEF */
X+ int ami_wbench_getsave(mode)
X+ int mode;
X+ {
X+ 	BPTR lock;
X+ 	struct FileInfoBlock *fib;
X+ 
X+ 	if(!FromWBench)return(open(SAVEF,mode));
X+ 			/* if the file will be created anyway, skip the
X+ 			 * checks and just do it			*/
X+ 	if(mode & O_CREAT)return(open(SAVEF,mode));
X+ 	if(FromTool)return(-1);		/* otherwise, by definition, there
X+ 					 * isn't a save file (even if a
X+ 					 * file of the right name exists) */
X+ 	if(savefname[0])
X+ 		strncpy(plname,savefname,PL_NSIZ-1); /* restore poly'd name */
X+ 	lock=Lock(SAVEF,ACCESS_READ);
X+ 	fib = (struct FileInfoBlock *)AllocMem(ALLOC_SIZE, MEMF_CLEAR);
X+ 	if(lock && Examine(lock,fib)){
X+ 		if(fib->fib_Size>100){	/* random number << save file size */
X+ 			UnLock(lock);
X+                         FreeMem(fib,ALLOC_SIZE);
X+ 			return(open(SAVEF,mode));
X+ 		} else {
X+ 				/* this is a dummy file we need because
X+ 				 * workbench won't duplicate an icon with no
X+ 				 * "real" data attached - try to get rid of it.
X+ 				 */
X+ 			UnLock(lock);
X+ 			unlink(SAVEF);
X+ 			FreeMem(fib,ALLOC_SIZE);
X+ 			return(-1);
X+ 		}
X+ 	}
X+ 	FreeMem(fib,ALLOC_SIZE);
X+ 	return(-1);		/* give up */
X+ }
X+ 
X+ #ifdef notdef
X+ /* cleanup */
X+ void ami_wbench_cleanup(){
X+ 	if(!FromWBench)return;
X+ 	if(KillIcon){
X+ 		unlink(iconname);
X+ 	} else {
X+ 		if(!FromTool){	/* game started and ended in one session */
X+ 			char buf[PATHLEN+5];
X+ 			strcpy(buf,SAVEF);
X+ 			strcat(buf,".info");
X+ 			unlink(buf);
X+ 		}
X+ 	}
X+ }
X+ #endif
X+ 
X+ /* get printable version of where we came from */
X+ static void ami_wb_findme(bufp,dirp,wa)
X+ 	char *bufp,*dirp;
X+ 	struct WBArg *wa;
X+ 	{
X+ 	BPTR dir;
X+ 	struct FileInfoBlock *fib;
X+ 	char *p;
X+ 	int len;
X+ 
X+ 	dir=wa->wa_Lock;
X+ 
X+ 	fib = (struct FileInfoBlock *)AllocMem(ALLOC_SIZE,MEMF_CLEAR);
X+ 	buildPath(dir,fib,dirp);
X+ 	strcat(dirp,"/");
X+ 	strcpy(bufp,dirp);
X+ 	if(FromTool){
X+ 		/* do nothing - filename will be added later */
X+ 	} else {
X+ 		strcat(bufp,wa->wa_Name);
X+ 	};
X+ 	/* I know this looks redundent, but its not since we may add
X+ 	 * a slash after returning from buildPath
X+ 	 */
X+ 	p=index(bufp,':');
X+ 	if(!p){
X+ 		p=index(bufp,'/');
X+ 		if(p)*p=':';
X+ 	}
X+ 	p=index(dirp,':');
X+ 	if(!p){
X+ 		p=index(dirp,'/');
X+ 		if(p)*p=':';
X+ 	}
X+ 	/* We found the icon - but we need the main file. */
X+ 	len=strlen(bufp);
X+ 	if(len<5)return;			/* who knows? */
X+ 	if(strcmp(".info",&bufp[len-5]))return; /* who knows? */
X+ 	bufp[len-5]='\0';
X+         FreeMem(fib, ALLOC_SIZE);
X+ }
X+ 
X+ /* Carolyn Scheppner - CATS, AmigaMail II-34 */
X+ static int
X+ buildPath(inlock,fib,buf)
X+ LONG inlock;
X+ struct FileInfoBlock *fib;       	/* ASSUMED LONGWORD BOUNDARY!! */
X+ char *buf;
X+ 	{
X+ 	int i;
X+ 	LONG lock,oldlock;
X+ 	BOOL MyOldLock = FALSE;
X+ 
X+ 	buf[0]='\0';
X+ 	lock=inlock;
X+ 
X+ 	while(lock){
X+ 		if(Examine(lock,fib)){
X+ 			if(fib->fib_FileName[0]>' '){
X+ 				if(buf[0])insert(buf,"/");
X+ 				insert(buf,fib->fib_FileName);
X+ 			}
X+ 		}
X+ 		oldlock=lock;
X+ 		lock=ParentDir(lock);
X+ 		if(MyOldLock) UnLock(oldlock);
X+ 		else MyOldLock=TRUE;
X+ 	}
X+ 	if(fib->fib_FileName[0]>' '){
X+ 		for(i=0;i<(strlen(buf));i++){
X+ 			if(buf[i]=='/'){
X+ 				buf[i]=':';
X+ 				break;
X+ 			}
X+ 		}
X+ 	}
X+ 	else insert(buf,"RAM:");
X+ 	return((int)strlen(buf));
X+ }
X+ static void
X+ insert(buf,s)
X+ char *buf,*s;
X+ {
X+ 	char tmp[256];
X+ 	strcpy(tmp,buf);
X+ 	strcpy(buf,s);
X+ 	strcpy(&buf[strlen(s)],tmp);
X+ }
X+ 
X+ #if 0 /* CopyFile should be OK */
X+ static void copyicon(from,to)
X+ char *from,*to;
X+ {
X+ 	int df,dt;
X+ 	char buf[512];
X+ 	int len=512;
X+ 
X+ 	df=open(from,O_RDONLY);
X+ 	dt=open(to,O_WRONLY,0);
X+ 	while(len=512){
X+ 		len=read(df,buf,len);
X+ 		write(dt,buf,len);
X+ 	}
X+ 	close(df);
X+ 	close(dt);
X+ }
X+ #endif
X+ #endif /* AMIGA_WBENCH */
X*** amiga/Old/amiwind.c	Mon Feb 19 16:52:53 1990
X--- amiga/amiwind.c	Thu Feb 15 19:05:25 1990
X***************
X*** 8,14 ****
X   *  screens, windows, menus, and input via IntuiMessages.
X   */
X  
X! #define MANX			/* Define for the Manx compiler */
X  
X  #include <exec/types.h>
X  #include <exec/alerts.h>
X--- 8,19 ----
X   *  screens, windows, menus, and input via IntuiMessages.
X   */
X  
X! #include "hack.h"
X! 
X! #undef TRUE
X! #undef FALSE
X! #undef COUNT
X! #undef NULL
X  
X  #include <exec/types.h>
X  #include <exec/alerts.h>
X***************
X*** 19,46 ****
X  #include <intuition/intuition.h>
X  #include <libraries/dosextens.h>
X  
X! #undef TRUE			/* All these are also defined in */
X! #undef FALSE			/* the Amiga system include files */
X! #undef COUNT
X! #undef NULL
X! 
X! #include "hack.h"
X! 
X! #include "amimenu.c"
X  
X  /*  First, external declarations... */
X  
X- struct Library *OpenLibrary();
X- struct Screen *OpenScreen();
X- struct Window *OpenWindow();
X- struct TextFont *OpenDiskFont(), *OpenFont();
X- struct IntuiMessage *GetMsg();
X- struct MenuItem *ItemAddress();
X- struct Process *FindTask();         /* Cheating */
X- long DeadKeyConvert(), OpenDevice(), CloseDevice();
X- struct MsgPort *CreatePort();
X  extern struct Library *IconBase;
X! void abort();
X  
X  /*  Now our own variables */
X  
X--- 24,88 ----
X  #include <intuition/intuition.h>
X  #include <libraries/dosextens.h>
X  
X! #ifdef LATTICE
X! #include <dos.h>
X! #include <proto/exec.h>
X! #include <proto/graphics.h>
X! #include <proto/intuition.h>
X! #include <proto/diskfont.h>
X! #include <proto/console.h>
X! #endif
X! 
X! #include "Amiga:amimenu.c"
X! 
X! /*
X!  * Versions we need of various libraries.  We can't use LIBRARY_VERSION
X!  * as defined in <exec/types.h> because some of the libraries we need
X!  * don't have that version number in the 1.2 ROM.
X!  */
X! 
X! #define INTUITION_VERSION 33L
X! #define GRAPHICS_VERSION  33L
X! #define DISKFONT_VERSION  34L
X! #define ICON_VERSION	  34L
X  
X  /*  First, external declarations... */
X  
X  extern struct Library *IconBase;
X! struct Library *ConsoleDevice;
X! 
X! #ifdef AZTEC_C
X! void FDECL(Alert, (long, char *));
X! void NDECL(Forbid);
X! void NDECL(Permit);
X! struct Process *FDECL(FindTask, (char *));
X! struct Library *FDECL(OpenLibrary, (char *, long));
X! void FDECL(CloseLibrary, (struct Library *));
X! struct Message *FDECL(GetMsg, (struct MsgPort *));
X! void FDECL(ReplyMsg, (struct Message *));
X! long FDECL(OpenDevice, (char *, long, struct IORequest *, long));
X! void FDECL(CloseDevice, (struct IORequest *));
X! long FDECL(DoIO, (struct IORequest *));
X! struct TextFont *FDECL(OpenDiskFont, (struct TextAttr *));
X! struct TextFont *FDECL(OpenFont, (struct TextAttr *));
X! void FDECL(CloseFont, (struct TextFont *));
X! void FDECL(LoadRGB4, (struct ViewPort *, unsigned short *, long));
X! long FDECL(SetFont, (struct RastPort *, struct TextFont*));
X! struct MsgPort *FDECL(CreatePort, (char *, long));
X! void FDECL(DeletePort, (struct MsgPort *));
X! struct Screen *FDECL(OpenScreen, (struct NewScreen *));
X! struct Window *FDECL(OpenWindow, (struct NewWindow *));
X! void FDECL(CloseWindow, (struct Window *));
X! void FDECL(SetMenuStrip, (struct Window *, struct Menu *));
X! void FDECL(ClearMenuStrip, (struct Window *));
X! struct MenuItem *FDECL(ItemAddress, (struct Menu *, long));
X! long FDECL(RawKeyConvert, (struct InputEvent *, char *, long, struct KeyMap *));
X! #endif
X! 
X! static int NDECL(BufferGetchar);
X! static void FDECL(ConvertKey, (register struct IntuiMessage *));
X! static void FDECL(ProcessMessage, (register struct IntuiMessage *));
X! void NDECL(Initialize);
X  
X  /*  Now our own variables */
X  
X***************
X*** 56,62 ****
X  struct Library *DiskfontBase;
X  #endif
X  
X! struct Device *ConsoleDevice;
X  
X  #define CSI	    '\x9b'
X  #define NO_CHAR     -1
X--- 98,104 ----
X  struct Library *DiskfontBase;
X  #endif
X  
X! extern struct Library *ConsoleDevice;
X  
X  #define CSI	    '\x9b'
X  #define NO_CHAR     -1
X***************
X*** 103,109 ****
X--- 145,166 ----
X  #define BARHEIGHT	11
X  #define WINDOWHEIGHT	192
X  #define WIDTH		640
X+ 
X+ #ifdef TEXTCOLOR
X+ #define DEPTH       3
X+ static unsigned short palette[] = {
X+ 	0x0000,	/* Black   */
X+ 	0x0DDD, /* White   */
X+     	0x0C75, /* Brown   */
X+ 	0x0B08,	/* Cyan    */
X+ 	0x00B0,	/* Green   */
X+ 	0x0F08,	/* Magenta */
X+ 	0x055F,	/* Blue    */
X+ 	0x0F00,	/* Red     */
X+ };
X+ #else
X  #define DEPTH		2
X+ #endif
X  
X  struct NewScreen NewHackScreen = {
X      0, 0, WIDTH, BARHEIGHT + WINDOWHEIGHT, DEPTH,
X***************
X*** 161,167 ****
X   *  RawKeyConvert those events???
X   */
X  
X! int ConvertKey(message)
X  register struct IntuiMessage *message;
X  {
X      static struct InputEvent theEvent;
X--- 218,224 ----
X   *  RawKeyConvert those events???
X   */
X  
X! static void ConvertKey(message)
X  register struct IntuiMessage *message;
X  {
X      static struct InputEvent theEvent;
X***************
X*** 210,216 ****
X  
X  #ifdef BETA
X      if (!ConsoleDevice) { /* Should never happen */
X! 	abort(AG_IOError | AO_ConsoleDev);
X  	return;
X      }
X  #endif
X--- 267,273 ----
X  
X  #ifdef BETA
X      if (!ConsoleDevice) { /* Should never happen */
X! 	Abort(AG_IOError | AO_ConsoleDev);
X  	return;
X      }
X  #endif
X***************
X*** 251,257 ****
X   *  ahead of input demands, when the user types ahead.
X   */
X  
X! static char ProcessMessage(message)
X  register struct IntuiMessage *message;
X  {
X      switch(message->Class) {
X--- 308,314 ----
X   *  ahead of input demands, when the user types ahead.
X   */
X  
X! static void ProcessMessage(message)
X  register struct IntuiMessage *message;
X  {
X      switch(message->Class) {
X***************
X*** 262,268 ****
X  
X  	    thismenu = message->Code;
X  	    while (thismenu != MENUNULL) {
X! 		item = ItemAddress(&HackMenu, (ULONG) thismenu);
X  		if (KbdBuffered < KBDBUFFER)
X  		    BufferQueueChar(item->Command); /* Unused: No COMMSEQ */
X  		thismenu = item->NextSelect;
X--- 319,325 ----
X  
X  	    thismenu = message->Code;
X  	    while (thismenu != MENUNULL) {
X! 		item = ItemAddress(HackMenu, (ULONG) thismenu);
X  		if (KbdBuffered < KBDBUFFER)
X  		    BufferQueueChar(item->Command); /* Unused: No COMMSEQ */
X  		thismenu = item->NextSelect;
X***************
X*** 283,289 ****
X  	}
X  #endif
X      }
X!     ReplyMsg(message);
X  }
X  
X  /*
X--- 340,346 ----
X  	}
X  #endif
X      }
X!     ReplyMsg((struct Message *) message);
X  }
X  
X  /*
X***************
X*** 299,308 ****
X      register struct IntuiMessage *message;
X  
X      while( (KbdBuffered < KBDBUFFER / 2) &&
X! 	    (message = GetMsg(HackWindow->UserPort)) )
X  	ProcessMessage(message);
X  
X!     return KbdBuffered;
X  }
X  
X  /*
X--- 356,365 ----
X      register struct IntuiMessage *message;
X  
X      while( (KbdBuffered < KBDBUFFER / 2) &&
X! 	    (message = (struct IntuiMessage *) GetMsg(HackWindow->UserPort)) )
X  	ProcessMessage(message);
X  
X!     return (int) KbdBuffered;
X  }
X  
X  /*
X***************
X*** 326,332 ****
X  {
X  #ifdef BETA
X      if (!ConsoleDevice) { /* Should never happen */
X! 	abort(AG_IOError | AO_ConsoleDev);
X  	return;
X      }
X  #endif
X--- 383,389 ----
X  {
X  #ifdef BETA
X      if (!ConsoleDevice) { /* Should never happen */
X! 	Abort(AG_IOError | AO_ConsoleDev);
X  	return;
X      }
X  #endif
X***************
X*** 335,341 ****
X  	ConsoleIO.io_Command = CMD_WRITE;
X  	ConsoleIO.io_Data = (APTR)ConsoleBuffer;
X  	ConsoleIO.io_Length = Buffered;
X! 	DoIO(&ConsoleIO);
X  	Buffered = 0;
X      }
X  }
X--- 392,398 ----
X  	ConsoleIO.io_Command = CMD_WRITE;
X  	ConsoleIO.io_Data = (APTR)ConsoleBuffer;
X  	ConsoleIO.io_Length = Buffered;
X! 	DoIO((struct IORequest *) &ConsoleIO);
X  	Buffered = 0;
X      }
X  }
X***************
X*** 362,373 ****
X  void WindowFPuts(string)
X  char *string;
X  {
X!     register int len = _BUILTIN_strlen(string);
X  
X      if (len + Buffered >= CONBUFFER)
X  	WindowFlush();
X  
X!     _BUILTIN_strcpy(ConsoleBuffer + Buffered, string);
X      Buffered += len;
X  }
X  
X--- 419,430 ----
X  void WindowFPuts(string)
X  char *string;
X  {
X!     register int len = strlen(string);
X  
X      if (len + Buffered >= CONBUFFER)
X  	WindowFlush();
X  
X!     strcpy(ConsoleBuffer + Buffered, string);
X      Buffered += len;
X  }
X  
X***************
X*** 389,413 ****
X   *  flushing the existing characters first, if necessary.
X   */
X  
X  void WindowPrintf(fmt, args, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
X  char *fmt;
X  long args, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9;
X  {
X! #ifdef MANX	    /* Efficient but not portable */
X      format(WindowPutchar, fmt, &args);
X  #else
X      WindowFlush();  /* Don't know if all will fit */
X- # ifdef __STDC__    /* Cheap and portable way */
X-     vsprintf(ConsoleBuffer, fmt, &args);
X- # else		    /* Expensive... */
X      sprintf(ConsoleBuffer, fmt, args, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
X- # endif
X      ConsoleIO.io_Command = CMD_WRITE;
X      ConsoleIO.io_Data = (APTR)ConsoleBuffer;
X      ConsoleIO.io_Length = -1;
X!     DoIO(&ConsoleIO);
X  #endif
X  }
X  
X  /*
X   *  Clean up everything. But before we do, ask the user to hit return
X--- 446,482 ----
X   *  flushing the existing characters first, if necessary.
X   */
X  
X+ /*VARARGS1*/
X+ #if defined(USE_STDARG) || defined(USE_VARARGS)
X+ void
X+ WindowPrintf VA_DECL(char *, fmt)
X+     VA_START(fmt);
X+     VA_INIT(fmt, char *);
X+     WindowFlush();  /* Don't know if all will fit */
X+     vsprintf(ConsoleBuffer, fmt, VA_ARGS);
X+     ConsoleIO.io_Command = CMD_WRITE;
X+     ConsoleIO.io_Data = (APTR)ConsoleBuffer;
X+     ConsoleIO.io_Length = -1;
X+     DoIO((struct IORequest *) &ConsoleIO);
X+     VA_END();
X+ }
X+ #else
X  void WindowPrintf(fmt, args, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
X  char *fmt;
X  long args, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9;
X  {
X! # ifdef AZTEC_C 	/* Efficient but not portable */
X      format(WindowPutchar, fmt, &args);
X  #else
X      WindowFlush();  /* Don't know if all will fit */
X      sprintf(ConsoleBuffer, fmt, args, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
X      ConsoleIO.io_Command = CMD_WRITE;
X      ConsoleIO.io_Data = (APTR)ConsoleBuffer;
X      ConsoleIO.io_Length = -1;
X!     DoIO((struct IORequest *) &ConsoleIO);
X  #endif
X  }
X+ #endif
X  
X  /*
X   *  Clean up everything. But before we do, ask the user to hit return
X***************
X*** 424,430 ****
X  	if (cu->cu_XCCP != 1 || cu->cu_YCCP != 1)
X  	    getret();
X  
X! 	CloseDevice(&ConsoleIO);
X  	ConsoleDevice = NULL;
X      }
X      if (ConsoleIO.io_Message.mn_ReplyPort)
X--- 493,499 ----
X  	if (cu->cu_XCCP != 1 || cu->cu_YCCP != 1)
X  	    getret();
X  
X! 	CloseDevice((struct IORequest *) &ConsoleIO);
X  	ConsoleDevice = NULL;
X      }
X      if (ConsoleIO.io_Message.mn_ReplyPort)
X***************
X*** 432,442 ****
X      if (HackWindow) {
X  	register struct IntuiMessage *msg;
X  
X! 	FindTask(NULL)->pr_WindowPtr = (APTR) pr_WindowPtr;
X  	ClearMenuStrip(HackWindow);
X  	Forbid();
X! 	while (msg = GetMsg(HackWindow->UserPort))
X! 	    ReplyMsg(msg);
X  	CloseWindow(HackWindow);
X  	Permit();
X  	HackWindow = NULL;
X--- 501,511 ----
X      if (HackWindow) {
X  	register struct IntuiMessage *msg;
X  
X! 	((struct Process *) FindTask(NULL))->pr_WindowPtr = (APTR) pr_WindowPtr;
X  	ClearMenuStrip(HackWindow);
X  	Forbid();
X! 	while (msg = (struct IntuiMessage *) GetMsg(HackWindow->UserPort))
X! 	    ReplyMsg((struct Message *) msg);
X  	CloseWindow(HackWindow);
X  	Permit();
X  	HackWindow = NULL;
X***************
X*** 445,454 ****
X  	CloseScreen(HackScreen);
X  	HackScreen = NULL;
X      }
X!     /* if (IconBase) {
X  	CloseLibrary(IconBase);
X  	IconBase = NULL;
X!     } */
X  #ifdef HACKFONT
X      if (HackFont) {
X  	CloseFont(HackFont);
X--- 514,523 ----
X  	CloseScreen(HackScreen);
X  	HackScreen = NULL;
X      }
X!     if (IconBase) {
X  	CloseLibrary(IconBase);
X  	IconBase = NULL;
X!     }
X  #ifdef HACKFONT
X      if (HackFont) {
X  	CloseFont(HackFont);
X***************
X*** 471,477 ****
X      Initialized = 0;
X  }
X  
X! void abort(rc)
X  long rc;
X  {
X  #ifdef CHDIR
X--- 540,546 ----
X      Initialized = 0;
X  }
X  
X! void Abort(rc)
X  long rc;
X  {
X  #ifdef CHDIR
X***************
X*** 483,498 ****
X  	getret();
X      } else
X  	Alert(rc, 0L);
X      CleanUp();
X  #undef exit
X!     exit(rc);
X! }
X! 
X! /*  Used by library routines, and the debugger */
X! 
X! void _abort()
X! {
X!     abort(-10L);
X  }
X  
X  /*
X--- 552,575 ----
X  	getret();
X      } else
X  	Alert(rc, 0L);
X+ #ifdef LATTICE
X+ 	{
X+ /*	__emit(0x4afc);		/* illegal instruction */
X+ 	__emit(0x40fc);		/* divide by */
X+ 	__emit(0x0000);		/*  #0	*/
X+ 		/* NOTE: don't move CleanUp() above here - */
X+ 		/* it is too likely to kill the system     */
X+ 		/* before it can get the SnapShot out, if  */
X+ 		/* there is something really wrong.	   */
X+ __builtin_printf("abort botch");				/* (KL)TEMP */
X+ 	}
X+ #endif
X      CleanUp();
X  #undef exit
X! #ifdef AZTEC_C
X!     _abort();
X! #endif
X!     exit((int) rc);
X  }
X  
X  /*
X***************
X*** 504,517 ****
X      if (Initialized)
X  	return;
X  
X!     if ( (IntuitionBase = OpenLibrary("intuition.library", LIBRARY_VERSION))
X  	  == NULL)
X! 	abort(AG_OpenLib | AO_Intuition);
X  
X  #ifdef HACKFONT
X  
X!     if ( (GfxBase = OpenLibrary("graphics.library", LIBRARY_VERSION)) == NULL)
X! 	abort(AG_OpenLib | AO_GraphicsLib);
X  
X      /*
X       *	Force our own font to be loaded, if possible.
X--- 581,594 ----
X      if (Initialized)
X  	return;
X  
X!     if ( (IntuitionBase = OpenLibrary("intuition.library", INTUITION_VERSION))
X  	  == NULL)
X! 	Abort(AG_OpenLib | AO_Intuition);
X  
X  #ifdef HACKFONT
X  
X!     if ( (GfxBase = OpenLibrary("graphics.library", GRAPHICS_VERSION)) == NULL)
X! 	Abort(AG_OpenLib | AO_GraphicsLib);
X  
X      /*
X       *	Force our own font to be loaded, if possible.
X***************
X*** 522,528 ****
X       */
X  
X      if ((HackFont = OpenFont(&Hack80)) == NULL) {
X! 	if (DiskfontBase = OpenLibrary("diskfont.library", LIBRARY_VERSION)) {
X  	    Hack80.ta_Name -= SIZEOF_DISKNAME;
X  	    HackFont = OpenDiskFont(&Hack80);
X  	    Hack80.ta_Name += SIZEOF_DISKNAME;
X--- 599,605 ----
X       */
X  
X      if ((HackFont = OpenFont(&Hack80)) == NULL) {
X! 	if (DiskfontBase = OpenLibrary("diskfont.library", DISKFONT_VERSION)) {
X  	    Hack80.ta_Name -= SIZEOF_DISKNAME;
X  	    HackFont = OpenDiskFont(&Hack80);
X  	    Hack80.ta_Name += SIZEOF_DISKNAME;
X***************
X*** 532,539 ****
X      }
X  #endif
X  
X!     /* if ( (IconBase = OpenLibrary("icon.library", LIBRARY_VERSION)) == NULL)
X! 	abort(AG_OpenLib | AO_IconLib); */
X  
X      /*
X       *	Now Intuition is supposed to use our HackFont for the screen,
X--- 609,616 ----
X      }
X  #endif
X  
X!     /* if ( (IconBase = OpenLibrary("icon.library", ICON_VERSION)) == NULL)
X! 	Abort(AG_OpenLib | AO_IconLib); */
X  
X      /*
X       *	Now Intuition is supposed to use our HackFont for the screen,
X***************
X*** 541,556 ****
X       *	So, we need to do a SetFont() a bit later on.
X       */
X      if ( (HackScreen = OpenScreen(&NewHackScreen)) == NULL)
X! 	abort(AN_OpenScreen & ~AT_DeadEnd);
X  
X      NewHackWindow.Screen = HackScreen;
X  
X      if ( (HackWindow = OpenWindow(&NewHackWindow)) == NULL)
X! 	abort(AN_OpenWindow & ~AT_DeadEnd);
X  
X!     SetMenuStrip(HackWindow, &HackMenu);
X      {
X! 	register struct Process *myProcess = FindTask(NULL);
X  	pr_WindowPtr = (struct Window *)myProcess->pr_WindowPtr;
X  	myProcess->pr_WindowPtr = (APTR) HackWindow;
X      }
X--- 618,637 ----
X       *	So, we need to do a SetFont() a bit later on.
X       */
X      if ( (HackScreen = OpenScreen(&NewHackScreen)) == NULL)
X! 	Abort(AN_OpenScreen & ~AT_DeadEnd);
X! 
X! #ifdef TEXTCOLOR
X!     LoadRGB4(&HackScreen->ViewPort, palette, 8L);
X! #endif
X  
X      NewHackWindow.Screen = HackScreen;
X  
X      if ( (HackWindow = OpenWindow(&NewHackWindow)) == NULL)
X! 	Abort(AN_OpenWindow & ~AT_DeadEnd);
X  
X!     SetMenuStrip(HackWindow, HackMenu);
X      {
X! 	register struct Process *myProcess = (struct Process *) FindTask(NULL);
X  	pr_WindowPtr = (struct Window *)myProcess->pr_WindowPtr;
X  	myProcess->pr_WindowPtr = (APTR) HackWindow;
X      }
X***************
X*** 562,571 ****
X      ConsoleIO.io_Data = (APTR) HackWindow;
X      ConsoleIO.io_Length = sizeof(*HackWindow);
X      ConsoleIO.io_Message.mn_ReplyPort = CreatePort(NULL, 0L);
X!     if (OpenDevice("console.device", 0L, &ConsoleIO, 0L) != 0)
X! 	abort(AG_OpenDev | AO_ConsoleDev);
X  
X!     ConsoleDevice = ConsoleIO.io_Device;
X  
X      Buffered = 0;
X      KbdBuffered = 0;
X--- 643,652 ----
X      ConsoleIO.io_Data = (APTR) HackWindow;
X      ConsoleIO.io_Length = sizeof(*HackWindow);
X      ConsoleIO.io_Message.mn_ReplyPort = CreatePort(NULL, 0L);
X!     if (OpenDevice("console.device", 0L, (struct IORequest *) &ConsoleIO, 0L) != 0)
X! 	Abort(AG_OpenDev | AO_ConsoleDev);
X  
X!     ConsoleDevice = (struct Library *) ConsoleIO.io_Device;
X  
X      Buffered = 0;
X      KbdBuffered = 0;
X
END_OF_FILE
if test 53324 -ne `wc -c <'patch7.13'`; then
    echo shar: \"'patch7.13'\" unpacked with wrong size!
fi
# end of 'patch7.13'
echo shar: End of archive 19 \(of 30\).
cp /dev/null ark19isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 30 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0