home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
games
/
volume7
/
nethack3
/
patch7d
/
patch7.22
Wrap
Text File
|
1990-02-26
|
57KB
|
1,961 lines
*** src/Old/topten.c Mon Feb 19 19:03:06 1990
--- src/topten.c Mon Feb 5 18:28:48 1990
***************
*** 1,9 ****
! /* SCCS Id: @(#)topten.c 3.0 89/11/15
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
/* block some unused #defines to avoid overloading some cpp's */
- #define MONATTK_H
#include "hack.h"
#ifndef MACOS
--- 1,10 ----
! /* SCCS Id: @(#)topten.c 3.0 89/12/31
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
+ #define MONATTK_H /* comment line for pre-compiled headers */
+ #define MONFLAG_H /* comment line for pre-compiled headers */
/* block some unused #defines to avoid overloading some cpp's */
#include "hack.h"
#ifndef MACOS
***************
*** 12,20 ****
--- 13,28 ----
extern short macflags;
extern WindowPtr HackWindow;
#endif
+
#ifdef NO_FILE_LINKS
#include <fcntl.h> /* Ralf Brown */
#endif
+ #include <ctype.h>
+
+ #ifdef LATTICE
+ static void FDECL(lattice_mung_line,(char*));
+ static void FDECL(lattice_unmung_line,(char*));
+ #endif
#define newttentry() (struct toptenentry *) alloc(sizeof(struct toptenentry))
#define NAMSZ 10
***************
*** 22,27 ****
--- 30,36 ----
#define PERSMAX 3 /* entries per name/uid per char. allowed */
#define POINTSMIN 1 /* must be > 0 */
#define ENTRYMAX 100 /* must be >= 10 */
+
#ifndef MSDOS
#define PERS_IS_UID /* delete for PERSMAX per name; now per uid */
#endif
***************
*** 37,48 ****
char date[7]; /* yymmdd */
} *tt_head;
! static char *FDECL(itoa, (int)), *FDECL(ordin, (int));
static void outheader();
static int FDECL(outentry, (int,struct toptenentry *,int));
void
! topten(){
int uid = getuid();
int rank, rank0 = -1, rank1 = 0;
int occ_cnt = PERSMAX;
--- 46,67 ----
char date[7]; /* yymmdd */
} *tt_head;
! static char *FDECL(itoa, (int));
! static const char *FDECL(ordin, (int));
static void outheader();
static int FDECL(outentry, (int,struct toptenentry *,int));
+ /* must fit with end.c */
+ static const char *killed_by_prefix[] = {
+ "killed by ", "choked on ", "poisoned by ", "", "drowned in ",
+ "", "crushed to death by ", "petrified by ", "",
+ "", "",
+ "", "", "" };
+
void
! topten(how)
! int how;
! {
int uid = getuid();
int rank, rank0 = -1, rank1 = 0;
int occ_cnt = PERSMAX;
***************
*** 57,63 ****
char *reclock = "record_lock;1";
char recfile[] = RECORD;
#else
! char *recfile = RECORD;
#endif
#if defined(UNIX) || defined(VMS)
int sleepct = 100;
--- 76,82 ----
char *reclock = "record_lock;1";
char recfile[] = RECORD;
#else
! const char *recfile = RECORD;
#endif
#if defined(UNIX) || defined(VMS)
int sleepct = 100;
***************
*** 99,106 ****
t0->uid = uid;
(void) strncpy(t0->name, plname, NAMSZ);
(t0->name)[NAMSZ] = 0;
! (void) strncpy(t0->death, killer, DTHSZ);
! (t0->death)[DTHSZ] = 0;
Strcpy(t0->date, getdate());
#ifdef LOGFILE /* used for debugging (who dies of what, where) */
--- 118,138 ----
t0->uid = uid;
(void) strncpy(t0->name, plname, NAMSZ);
(t0->name)[NAMSZ] = 0;
! (t0->death)[0] = 0;
! switch (killer_format) {
! default: impossible("bad killer format?");
! case KILLED_BY_AN:
! Strcat(t0->death, killed_by_prefix[how]),
! (void) strncat(t0->death, an(killer), DTHSZ);
! break;
! case KILLED_BY:
! Strcat(t0->death, killed_by_prefix[how]),
! (void) strncat(t0->death, killer, DTHSZ);
! break;
! case NO_KILLER_PREFIX:
! (void) strncat(t0->death, killer, DTHSZ);
! break;
! }
Strcpy(t0->date, getdate());
#ifdef LOGFILE /* used for debugging (who dies of what, where) */
***************
*** 195,203 ****
if (!(rfile = fopen(recfile,"r"))) {
short i;
! rfile = openFile(recfile);
- t = (term_info *)GetWRefCon(HackWindow);
for (i = 0;i < t->maxRow; i++) {
MoveTo(Screen_Border,
t->ascent + (i * t->height) + Screen_Border);
--- 227,234 ----
if (!(rfile = fopen(recfile,"r"))) {
short i;
! rfile = openFile(recfile,"r");
for (i = 0;i < t->maxRow; i++) {
MoveTo(Screen_Border,
t->ascent + (i * t->height) + Screen_Border);
***************
*** 226,251 ****
tprev = 0;
/* rank0: -1 undefined, 0 not_on_list, n n_th on list */
for(rank = 1; ; ) {
! #ifdef OLD_TOS
! char k1[2],k2[2];
! if(fscanf(rfile, "%6s %d %d %d %d %d %ld %1s%1s %s %s]",
#else
if(fscanf(rfile, "%6s %d %d %d %d %d %ld %c%c %[^,],%[^\n]",
! #endif
t1->date, &t1->uid,
&t1->level, &t1->maxlvl,
&t1->hp, &t1->maxhp, &t1->points,
- #ifdef OLD_TOS
- k1, k2,
- #else
&t1->plchar, &t1->sex,
! #endif
t1->name, t1->death) != 11 || t1->points < POINTSMIN)
t1->points = 0;
!
! #ifdef OLD_TOS
! t1->plchar=k1[0];
! t1->sex=k2[0];
#endif
if(rank0 < 0 && t1->points < t0->points) {
rank0 = rank++;
--- 257,279 ----
tprev = 0;
/* rank0: -1 undefined, 0 not_on_list, n n_th on list */
for(rank = 1; ; ) {
! #ifdef LATTICE
! if(fscanf(rfile,"%6s %d %d %d %d %d %ld%*c%c%c %s %s",
#else
if(fscanf(rfile, "%6s %d %d %d %d %d %ld %c%c %[^,],%[^\n]",
! #endif /* LATTICE */
t1->date, &t1->uid,
&t1->level, &t1->maxlvl,
&t1->hp, &t1->maxhp, &t1->points,
&t1->plchar, &t1->sex,
! #ifdef LATTICE /* return value is broken also, sigh */
! t1->name, t1->death) <1 || t1->points < POINTSMIN)
! #else
t1->name, t1->death) != 11 || t1->points < POINTSMIN)
+ #endif
t1->points = 0;
! #ifdef LATTICE
! lattice_unmung_line(t1->death);
#endif
if(rank0 < 0 && t1->points < t0->points) {
rank0 = rank++;
***************
*** 314,324 ****
--- 342,360 ----
if(!done_stopprint) outheader();
t1 = tt_head;
for(rank = 1; t1->points != 0; rank++, t1 = t1->tt_next) {
+ #ifdef LATTICE
+ lattice_mung_line(t1->death);
+ if(flg) (void) fprintf(rfile,"%6s %d %d %d %d %d %ld %c%c %s %s\n",
+ #else
if(flg) (void) fprintf(rfile,"%6s %d %d %d %d %d %ld %c%c %s,%s\n",
+ #endif
t1->date, t1->uid,
t1->level, t1->maxlvl,
t1->hp, t1->maxhp, t1->points,
t1->plchar, t1->sex, t1->name, t1->death);
+ #ifdef LATTICE
+ lattice_unmung_line(t1->death);
+ #endif
if(done_stopprint) continue;
if(rank > flags.end_top &&
(rank < rank0-flags.end_around || rank > rank0+flags.end_around)
***************
*** 385,399 ****
register struct toptenentry *t1;
register int rank, so;
{
! register boolean quit = FALSE, iskilled = FALSE, starv = FALSE,
! isstoned = FALSE;
! char linebuf[BUFSZ];
! linebuf[0] = 0;
if(rank) Sprintf(eos(linebuf), " %2d", rank);
! else Strcat(linebuf, " ");
! Sprintf(eos(linebuf), " %7ld %.10s", t1->points, t1->name);
Sprintf(eos(linebuf), "-%c ", t1->plchar);
if(!strncmp("escaped", t1->death, 7)) {
if(!strcmp(" (with the Amulet)", t1->death+7))
Strcat(linebuf, "escaped the dungeon with the Amulet");
else
--- 421,437 ----
register struct toptenentry *t1;
register int rank, so;
{
! register boolean second_line = TRUE;
! char linebuf[BUFSZ], linebuf2[BUFSZ];
!
! linebuf[0] = linebuf2[0] = 0;
if(rank) Sprintf(eos(linebuf), " %2d", rank);
! else Strcat(linebuf, " ");
!
! Sprintf(eos(linebuf), " %10ld %.10s", t1->points, t1->name);
Sprintf(eos(linebuf), "-%c ", t1->plchar);
if(!strncmp("escaped", t1->death, 7)) {
+ second_line = FALSE;
if(!strcmp(" (with the Amulet)", t1->death+7))
Strcat(linebuf, "escaped the dungeon with the Amulet");
else
***************
*** 404,450 ****
Strcat(linebuf, "ascended to demigod");
if (t1->sex == 'F') Strcat(linebuf, "dess");
Strcat(linebuf, "-hood");
#endif
} else {
if(!strncmp(t1->death,"quit",4)) {
- quit = TRUE;
Strcat(linebuf, "quit");
! } else if(!strcmp(t1->death,"choked")) {
! Sprintf(eos(linebuf), "choked on %s food",
! (t1->sex == 'F') ? "her" : "his");
} else if(!strncmp(t1->death,"starv",5)) {
Strcat(linebuf, "starved to death");
! starv = TRUE;
! } else if(!strcmp(t1->death,"poisoned")) {
Strcat(linebuf, "was poisoned");
! } else if(!strcmp(t1->death,"crushed")) {
Strcat(linebuf, "was crushed to death");
! } else if(!strncmp(t1->death, "turned to stone by ",19)) {
! Strcat(linebuf, "was petrified");
! isstoned = TRUE;
! } else {
! Strcat(linebuf, "was killed");
! iskilled = TRUE;
! }
#ifdef ENDLEVEL
if (t1->level == ENDLEVEL)
Strcat(linebuf, " in the endgame");
else
#endif
! Sprintf(eos(linebuf), " on%s level %d",
! (iskilled || isstoned || starv) ? "" : " dungeon", t1->level);
if(t1->maxlvl != t1->level)
Sprintf(eos(linebuf), " [max %d]", t1->maxlvl);
! if(quit && t1->death[4]) Strcat(linebuf, t1->death + 4);
}
- if(iskilled) Sprintf(eos(linebuf), " by %s",
- (!strncmp(t1->death, "trick", 5) || !strncmp(t1->death, "the ", 4)
- || !strncmp(t1->death, "Mr. ", 4) || !strncmp(t1->death, "Ms. ", 4)
- || !strcmp(t1->death, "contaminated water")
- || (!strncmp(eos(t1->death)-4,"tion",4) && *(eos(t1->death)-5)!='o')
- ) ? t1->death : an(t1->death));
- if (isstoned) Sprintf(eos(linebuf), " by %s", an(t1->death + 19));
Strcat(linebuf, ".");
if(t1->maxhp) {
register char *bp = eos(linebuf);
char hpbuf[10];
--- 442,480 ----
Strcat(linebuf, "ascended to demigod");
if (t1->sex == 'F') Strcat(linebuf, "dess");
Strcat(linebuf, "-hood");
+ second_line = FALSE;
#endif
} else {
if(!strncmp(t1->death,"quit",4)) {
Strcat(linebuf, "quit");
! second_line = FALSE;
} else if(!strncmp(t1->death,"starv",5)) {
Strcat(linebuf, "starved to death");
! second_line = FALSE;
! } else if(!strncmp(t1->death,"choked",6)) {
! Sprintf(eos(linebuf), "choked on h%s food",
! (t1->sex == 'F') ? "er" : "is");
! } else if(!strncmp(t1->death,"poisoned",8)) {
Strcat(linebuf, "was poisoned");
! } else if(!strncmp(t1->death,"crushed",7)) {
Strcat(linebuf, "was crushed to death");
! } else if(!strncmp(t1->death, "petrified by ",13)) {
! Strcat(linebuf, "turned to stone");
! } else Strcat(linebuf, "died");
#ifdef ENDLEVEL
if (t1->level == ENDLEVEL)
Strcat(linebuf, " in the endgame");
else
#endif
! Sprintf(eos(linebuf), " on dungeon level %d", t1->level);
if(t1->maxlvl != t1->level)
Sprintf(eos(linebuf), " [max %d]", t1->maxlvl);
! /* kuldge for "quit while already on Charon's boat" */
! if(!strncmp(t1->death, "quit ", 5))
! Strcat(linebuf, t1->death + 4);
}
Strcat(linebuf, ".");
+
if(t1->maxhp) {
register char *bp = eos(linebuf);
char hpbuf[10];
***************
*** 468,491 ****
else Sprintf(eos(bp), " [%d]", t1->maxhp);
}
}
! if(so == 0) (void) puts(linebuf);
! else if(so > 0) {
register char *bp = eos(linebuf);
if(so >= COLNO) so = COLNO-1;
while(bp < linebuf + so) *bp++ = ' ';
*bp = 0;
standoutbeg();
! #ifdef MACOS
! puts(linebuf);
! #else
! (void) fputs(linebuf,stdout);
! #endif
standoutend();
! #ifndef MACOS
! (void) putchar('\n');
! #endif
}
! return(strlen(linebuf));
}
static char *
--- 498,531 ----
else Sprintf(eos(bp), " [%d]", t1->maxhp);
}
}
!
! /* Line 2 now contains the killer name */
!
! /* Quit, starved, ascended, and escaped contain no second line */
! if (second_line) {
! Strcpy(linebuf2, t1->death);
! *linebuf2 = toupper(*linebuf2);
! Strcat(linebuf2, ".");
! }
!
! if(so == 0) {
! (void) puts(linebuf);
! if (second_line)
! (void) Printf(" %s\n", linebuf2);
! } else if(so > 0) {
register char *bp = eos(linebuf);
if(so >= COLNO) so = COLNO-1;
while(bp < linebuf + so) *bp++ = ' ';
*bp = 0;
standoutbeg();
! (void) puts(linebuf);
! if(second_line)
! (void) Printf(" %s", linebuf2);
standoutend();
! if(second_line)
! (void) putchar('\n');
}
! return(strlen(linebuf)+strlen(linebuf2));
}
static char *
***************
*** 499,505 ****
return(buf);
}
! static char *
ordin(n)
int n; {
register int dd = n%10;
--- 539,545 ----
return(buf);
}
! static const char *
ordin(n)
int n; {
register int dd = n%10;
***************
*** 512,525 ****
(dd==1) ? "st" : (dd==2) ? "nd" : "rd");
}
- char *
- eos(s)
- register char *s;
- {
- while(*s) s++;
- return(s);
- }
-
/*
* Called with args from main if argc >= 0. In this case, list scores as
* requested. Otherwise, find scores for the current player (and list them
--- 552,557 ----
***************
*** 530,540 ****
int argc;
char **argv;
{
! char **players;
int playerct;
int rank;
register struct toptenentry *t1, *t2;
! char *recfile = RECORD;
FILE *rfile;
register int flg = 0, i;
#ifdef nonsense
--- 562,572 ----
int argc;
char **argv;
{
! const char **players;
int playerct;
int rank;
register struct toptenentry *t1, *t2;
! const char *recfile = RECORD;
FILE *rfile;
register int flg = 0, i;
#ifdef nonsense
***************
*** 546,556 ****
#ifdef PERS_IS_UID
int uid = -1;
#else
! char *player0;
#endif
#ifdef MACOS
if(!(rfile = fopen(recfile,"r")))
! rfile = openFile(recfile);
if (!rfile) {
#else
if(!(rfile = fopen(recfile,"r"))){
--- 578,588 ----
#ifdef PERS_IS_UID
int uid = -1;
#else
! const char *player0;
#endif
#ifdef MACOS
if(!(rfile = fopen(recfile,"r")))
! rfile = openFile(recfile,"r");
if (!rfile) {
#else
if(!(rfile = fopen(recfile,"r"))){
***************
*** 581,612 ****
#endif
} else {
playerct = --argc;
! players = ++argv;
}
if(outflg) (void) putchar('\n');
t1 = tt_head = newttentry();
for(rank = 1; ; rank++) {
! #ifdef OLD_TOS
! char k1[2], k2[2];
! if(fscanf(rfile, "%6s %d %d %d %d %d %ld %1s%1s %s %s]",
#else
if(fscanf(rfile, "%6s %d %d %d %d %d %ld %c%c %[^,],%[^\n]",
! #endif
t1->date, &t1->uid,
&t1->level, &t1->maxlvl,
&t1->hp, &t1->maxhp, &t1->points,
- #ifdef OLD_TOS
- k1, k2,
- #else
&t1->plchar, &t1->sex,
! #endif
t1->name, t1->death) != 11)
t1->points = 0;
if(t1->points == 0) break;
! #ifdef OLD_TOS
! t1->plchar=k1[0];
! t1->sex=k2[0];
#endif
#ifdef PERS_IS_UID
if(!playerct && t1->uid == uid)
--- 613,642 ----
#endif
} else {
playerct = --argc;
! players = (const char **)++argv;
}
if(outflg) (void) putchar('\n');
t1 = tt_head = newttentry();
for(rank = 1; ; rank++) {
! #ifdef LATTICE
! if(fscanf(rfile, "%6s %d %d %d %d %d %ld%*c%c%c %s %s",
#else
if(fscanf(rfile, "%6s %d %d %d %d %d %ld %c%c %[^,],%[^\n]",
! #endif /* LATTICE */
t1->date, &t1->uid,
&t1->level, &t1->maxlvl,
&t1->hp, &t1->maxhp, &t1->points,
&t1->plchar, &t1->sex,
! #ifdef LATTICE
! t1->name, t1->death)<1)
! #else
t1->name, t1->death) != 11)
+ #endif
t1->points = 0;
if(t1->points == 0) break;
! #ifdef LATTICE
! lattice_unmung_line(t1->death);
#endif
#ifdef PERS_IS_UID
if(!playerct && t1->uid == uid)
***************
*** 655,661 ****
--- 685,693 ----
players[i][1] == t1->plchar &&
players[i][2] == 0) ||
(digit(players[i][0]) && rank <= atoi(players[i]))){
+ #ifdef PERS_IS_UID
outwithit:
+ #endif
if(outflg)
(void) outentry(rank, t1, 0);
#ifdef nonsense
***************
*** 721,727 ****
int rank;
register int i;
register struct toptenentry *tt;
! char *recfile = RECORD;
FILE *rfile;
if (!otmp) return((struct obj *) 0);
--- 753,759 ----
int rank;
register int i;
register struct toptenentry *tt;
! const char *recfile = RECORD;
FILE *rfile;
if (!otmp) return((struct obj *) 0);
***************
*** 728,734 ****
#ifdef MACOS
if(!(rfile = fopen(recfile,"r")))
! rfile = openFile(recfile);
if (!rfile) {
#else
if(!(rfile = fopen(recfile,"r"))){
--- 760,766 ----
#ifdef MACOS
if(!(rfile = fopen(recfile,"r")))
! rfile = openFile(recfile, "r");
if (!rfile) {
#else
if(!(rfile = fopen(recfile,"r"))){
***************
*** 740,748 ****
rank = rnd(10);
pickentry:
for(i = rank; i; i--) {
! #ifdef OLD_TOS
! char k1[2], k2[2];
! if(fscanf(rfile, "%6s %d %d %d %d %d %ld %1s%1s %s %s]",
#else
if(fscanf(rfile, "%6s %d %d %d %d %d %ld %c%c %[^,],%[^\n]",
#endif
--- 772,779 ----
rank = rnd(10);
pickentry:
for(i = rank; i; i--) {
! #ifdef LATTICE
! if(fscanf(rfile, "%6s %d %d %d %d %d %ld%*c%c%c %s %s",
#else
if(fscanf(rfile, "%6s %d %d %d %d %d %ld %c%c %[^,],%[^\n]",
#endif
***************
*** 749,768 ****
tt->date, &tt->uid,
&tt->level, &tt->maxlvl,
&tt->hp, &tt->maxhp, &tt->points,
- #ifdef OLD_TOS
- k1, k2,
- #else
&tt->plchar, &tt->sex,
! #endif
tt->name, tt->death) != 11)
tt->points = 0;
if(tt->points == 0) break;
! #ifdef OLD_TOS
! tt->plchar=k1[0];
! tt->sex=k2[0];
#endif
}
- (void) fclose(rfile);
if(tt->points == 0) {
if(rank > 1) {
--- 780,797 ----
tt->date, &tt->uid,
&tt->level, &tt->maxlvl,
&tt->hp, &tt->maxhp, &tt->points,
&tt->plchar, &tt->sex,
! #ifdef LATTICE
! tt->name, tt->death) <1)
! #else
tt->name, tt->death) != 11)
+ #endif
tt->points = 0;
if(tt->points == 0) break;
! #ifdef LATTICE
! lattice_unmung_line(tt->death);
#endif
}
if(tt->points == 0) {
if(rank > 1) {
***************
*** 770,776 ****
goto pickentry;
}
free((genericptr_t) tt);
! return((struct obj *) 0);
} else {
otmp->corpsenm = classmon(tt->plchar, (tt->sex == 'F'));
otmp->owt = weight(otmp);
--- 799,805 ----
goto pickentry;
}
free((genericptr_t) tt);
! otmp = (struct obj *) 0;
} else {
otmp->corpsenm = classmon(tt->plchar, (tt->sex == 'F'));
otmp->owt = weight(otmp);
***************
*** 779,784 ****
fobj = otmp;
level.objects[otmp->ox][otmp->oy] = otmp;
free((genericptr_t) tt);
- return otmp;
}
}
--- 808,830 ----
fobj = otmp;
level.objects[otmp->ox][otmp->oy] = otmp;
free((genericptr_t) tt);
}
+
+ (void) fclose(rfile);
+ return otmp;
}
+
+ #ifdef LATTICE
+ /* Lattice scanf isn't up to reading the scorefile. What */
+ /* follows deals with that; I admit it's ugly. (KL) */
+ static void lattice_mung_line(p)
+ char *p;
+ {
+ while(p=strchr(p,' '))*p='|';
+ }
+ static void lattice_unmung_line(p)
+ char *p;
+ {
+ while(p=strchr(p,'|'))*p=' ';
+ }
+ #endif
*** /dev/null Tue Feb 20 01:25:09 1990
--- mac/NH3.rsrc.hqx Mon Feb 19 18:11:28 1990
***************
*** 0
--- 1,311 -----
+ (This file must be converted with BinHex 4.0)
+ :#%j)-bjbFh*M!!!!!!!!!!!!)!!!!!!!!!!jaZRe!!!!!!%!!!!ddJ!!-p)!!!6
+ d"!46DfP`!!!!!!#$!!`!P3%PL!K6BACP)'&c1J!!!!!)6NJc,R*cFQ-c!J!!!!!
+ !!!!!!!!!)!!!!!!!!!!!!!!!!!!!!!!!!!!J!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!#L"M0f!!!!!!!!1FB!!!!!!-S!$`$H!'S%#&0KGQ8J3@aX!!!!!!$+!0!!hJ%
+ U"!C$B@jMC@`!!!!!!,B!F`$)!-S%"d0[ERCPFR5!!!!!!!$+!(-!hJ$+"!Y$Efj
+ fCA*d)%&XE!!!!!"b!!%!!!!!!&8!%J"T!$m%!Np,!!!!!!!%!%J!C`%$L&&6Eh*
+ b!!!#6!*-!#!!H3!Z!C-4!D!!JU!!MJ%!#J!J!(%#d!*!Q!!N!!!!#!!1!5J!!!!
+ )!!i")J!J!(N!,J'6!!%K$rKq!!"r2i!!!H!!IJ!m!"lq!!B"i!!!2`2`qJ!#!H!
+ !)J8i'!!!(!lq!!EJ!1F!j`!rr3!)i!!!$`2!!!!Fr!!"i!!P"6`B!"`F$[i!"Z!
+ !ii$R!(Iq!!Y`i!!!$iI!!!!F!!Iq!!(J!#3&2KJ!("`1rJ!'i!!$JF1!F2i!"R$
+ J!!!2Km$p!!!(rJ!"i!!N"6mB!"`F$[i!"Z!!!i($J($q!!C`i!!!$iI!r3!!"ri
+ !!H!!*5-h'$ir(!i(JI$[J!F"`i(mIMh!r2m(`!h0`2!q22q2aq(mr`!P)c1BGa`
+ IrKc$R1B!2J($J($R(m"`pilJ$Fh$Q(1FHmF1FjchJ#8M-pMMR"`1(1FFl!!(!F1
+ !FF1H!($MR(!0cF1Fijaaaa`l$11!*5-af11F(!i!j`$i!!1"`i"a`j`!F11FF!c
+ j`"cJ((((($[!ii!P)c$irj`F$JIR!2J!!i($J(($R!"`ijr`$2R!r1!FFFFF1IM
+ MJ#8M-2MJ("`1(1F!r!!$JF1!FF1F!($MR!!-qF1Fi"aaaa`i211!*5-`H1'F(!i
+ ij`cZ!F1!j`"a`j`!F11F-!aaaacKR(((($X-ii!P)c!iFjfF$MRMR1F"aacR!($
+ R(!"fiij`$(((2(1FFFGZFjcMJ#8Mr"Jr$hmrRr(jrm$q($`!q(iq!$hhaq!rGr2
+ q2cllimIMqII!S!#2S!#$r`!!!#FQ6Q9d5'&MDb"@CA*cD@pZ)$-Z-'NJCQpb)(4
+ SC5"0B@0TER4[FfJ!!!"-!'F!!!!!!!!!!2rrrrX%4@4TG!99EQ4[)!"D!!!",3!
+ !!!!%3h9d)!"B!!!&3fp`H5!!3`!!"P"KFh4P)!"@!!!&3faPBA)!!!!!!!!!!+S
+ !D!!!!!!!!!!!rrrrr`P*ERCPER4[FRN-4'mJD@jfC@jdEh*j!!!!!!K3BANJBQP
+ XE!!!!!!,4(*[F#"[BQTPBh3!!!!!&%4bEh!JFf9fCA*KE#"[BQTPBh4c!!!!!!j
+ 3D@0V)(9`)'pLDQ9MG!!!!!!09'pRCfaP)("TBfYeF!!!!!!25@4PER4TCRNJEf*
+ UC@0d!!!!!!a1B@eP)'e[ER0dCA)!!!!!!!!!!*-!D3!!!!!!!!!!rrrrr`C"Bh4
+ TEfi33A"`E(N[GA0P)'pLDQ9MG!!!!!!+4@&d)'pLDQ9MG!!!!!!-8A9KCQBJF'p
+ dD@pZ!!!!!""5C@&N)(0MFQpXE#pLEfpV!!!!!"*8D(*[GbpcD'p[G#"hC@&`Efi
+ !!!!!#&TKF#"hB@jN!!!!!!T$BA0d)(0`C@aX!!!!!!!!!!$"!'S!!!!!!!!!!2r
+ rrrm%8(*PF!aAD@9XC#"hC@&`Efi!!!!!#e"eG#"[EL"bD@jR!!!!!!Y5C@e[GQ8
+ JFQPZC`!!!!!-8Q9YEhCP)'&bE@pb!!!!!!TAC@&b)'&bE@pb!!!!!!j$GA*bC@j
+ d)(GPBA"[EJ!!!!!03h9bFQ9ZG#"KFQe[FJ!!!!!03h9bFQ9ZG#"bD@jRF`!!!!!
+ 13h9bFQ9ZG#"KEA9XCA3!!!!!$80eFR*PER3JG'p[E(-!!!!!!!!!!*J!D`!!!!!
+ !!!!!rrrrr`40EhCP#8p`C@iJC'p[FJ!!!!!+3fa[Ff8JC'p[FJ!!!!!*5fPMDb"
+ NEfpb!!!!!!C6C@&bBfJ!!!!!$%G[)(9`)(0dB@PbF`!!!!!14fmJC'phEL"cG'&
+ TFR-!!!!!#&4PE'9`Eh*d!!!!!!4AB@Pd!!!!!!p&EQGbBACP)'ePFh0KCf8!!!!
+ !!!!!!1S!E!!!!!!!!!!!rrrrr`K&H(4PEQ4PC!4$D'&d!!!!!!T%DA!JEf*UC@0
+ d!!!!!""'Eh*MC5"MD'9cG#"XEf0V!!!!!!4+G@e`!!!!!!K-Efpd)'*[H!!!!!!
+ 69A0P)'e[ER0dCA)JB@*TE'PdH3!!!!!,6Q&YC5"[BQTPBh3!!!!!$dpQCQ9b)(0
+ KBh*TCQPMC3!!!!!%8(*KH3!!!!!)8R9L)'aKEA!!!!!!#&0TG#"NEhGZ!!!!!!Y
+ 8GA*Z)(9ZC'9KC!!!!!!09@jdFQ&`)'pLDQ9MG!!!!!!*9fP`C5"QB@0P!!!!!!!
+ !!!'+!-J!JJ!!8Q9KE'aj)(&eDA3J2`!!!!4!!!-!!!$Frri!!!3m!!-!!!$drrm
+ !!!!!!!-!!!$qrrm!!!!!!!-!!!%+rrm!!!!!!!-!!!&-rrm!!!3i!!-!!!(@rrd
+ !!!!!!!-!!!*Drrd!!!!!!!-!!!+Hrri!!!-%!!-!!!6#rrm!!!3d!!-!!!6Drri
+ !!!4!!!-!!!6brri!!!3`!!-!!!8'rri!!!-%!!-!!!@Drri!!!-%!!-!!!DJrrl
+ rrrrm!!-!!!EXrri!!!3X!!-!!!G`rri!!!3X!!-!!!I3rri!!!3X!!-!!!Jdrri
+ !!!3S!!-!!!K!rri!!!3S!!-!!!Kbrri!!&PPF`!!!!QHrri!!!3m!!!!!!0brri
+ !!!FN!!!!!!0i6Qm!!!FB!!!!!!1'rri!!!FN!!!!!!13!2rq!!!('!!!!!!$Q[r
+ q!!!(*!!!!!!$T2rq!!!($!!!!!!$V[rq!!!!$!!!!!!$Z[rq!!!(-!!!!!!$d[r
+ q!!!(*!!!!!!$h!!"!!)!!!'+!2!!C!!!4'mJH@pe)(GKER3JG'mJD'&fC5"jEh9
+ b)("[Ff9cFfP[ER-JD@4PER4TCQPPC#!r!!!CF!!!!!!!!#@i!!!!!!!!)i)!!!!
+ !!!!V#J!!!!!!!!Zi!!!!!!!!!8`!!!!!!!!"8MXH!$BJY!Tq!#MdXPBL!di!+25
+ b9L)I8J!Sp,*@)J!!!!!!!!!!)p!!!!!!!!!CC!!!!!!!!!*X!!!!!!!!!83!!!!
+ !!!!KXJ!!!!!!!"pQ!!!!!!!!(QB!!!!!!!!HM!!!!!!!!#2S!!!!!!!!(CS!!!!
+ !!!!2BJ!!!!!2(J&@!#MdXPBL"F`!+25b9L)('!!Sp,)!)LH`!#MdXPPPF`!!+25
+ b9L)3"J!!!!!!!!rS!!!!!!!!"TJ!!!!!6Qm!qJ!!!!!!!!XU!!!!!!!!!*i!!!!
+ !!!!!!!!!!!"4G@Pd!!!!!!!!)Ni!!!!!!!!@QJ!!!!!!!!Z'!!!!!!!!%$`!!!!
+ !!!!HJ!!!!!!!!",X!!!!!!!!'Y)!!!!!!!%!!`!!!3!!!!!!I`!2i&+!1VKHJ&9
+ 83)$rUPk"!0C5JR`U8S5S&Rq*m"S!%!#5!$rKBJ"9FN)!UUR#!Ip9`J-"VX)%I&6
+ ##%3SJJJ!-!B2rq!+#4%J$!S!S#J-lQ!3#N5JS!Nj)%!+JU+!$%4K!!UUUJ!)!$`
+ !$UVS!!S!X!!2rq!!!!!!!2q!$q$r`$rirm"rr2r!rrlr`Irrrm2rrrr(rrrrcrr
+ rrprrrrrrrrm!Irrr!2rrr`(rrrm$rrrr"rrrr`rrrrmIrrrr(rrrrarrrrmIrrr
+ q(rrrr"rrrrJIrrr`(rrri"rrrm!Irrq!(rrr!"rrrJ!Irr`!(rri!"rrm!!Irq!
+ !!!!"!)!!!!&!!!!#)!!!""!!!!J)!!!)"!!!#!)!!(J#!!$)!J!"5!2rrNJ#!!*
+ )!J!#5!)2mNJ##"*)!JJ55!))%NJ##"*)!JK55!))%NJ##"*)!JJ55!))%NJ$rrj
+ )!J!"5!)!!-J#!!"i"!!!#!J!!!J3!!!))!!!"%!!!!+!!!!"rrrrrrrrrrrrrrr
+ rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr`2rrrmlrrrr1r
+ rrra2rrrplrrrrUrrrrc[rrrmlrrrr+rrrrb[rrrm$rrrrrrrrrrrrrrrrrrrrrr
+ rrrrrrrrrrrrrrrrrrrrrrrrrrrm!!!%!!!!!!!!!!!!!!!!!!!&!!"rpArJ3!8!
+ )&reIk"3"3#J!!!!S(!(!+#)!)#JL!D!S*J1J+#)#S#JL)L)S2J(!+!!!!#J8!!!
+ S&!!!+"3!!#J8!!!S##+"3!!#J8!!!S&!!!+"3!!#JArrrS%!!!#"rrrrJ!!!!
+ !!!!!!!!!!!!!!!!!!!!!!(rrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrr
+ qIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrr
+ qIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrrqIrrrrRrrrrjrrrrq!!!!!!!!!3!!!!!
+ !#!!!)"`!!(!)!!!J2J!!q(m!!I`8!!"32J!!q#IrrkJU!!$)-U48Q#DUP+JUkTM
+ )-Uk8Q#DU8UJU!!$)-X6NQ#DU5UJUUNV)-Uj1Q#E+5UJU!!$)-rrrQ$i!!2J8!!"
+ 3I`!"r$i!!2J)!!!J(!!!F!J!!#!!!!!!!!!!!!J!!#!F!!"`2J!!q$i!!2Kr!!(
+ mri!$rRm!!IarrrrmIrrrr(rrrrarrrrmIrrrr(rrrrarrrrmIrrrr(rrrrarrrr
+ mIrrrr(rrrrarrrrmIrrrr(rrrrarrrrmIrrrr(m!!IcrJ!2qI`!"r$i!!2Jq!!$
+ i(!!!F!J!!#!!!!!!!!!!!Mm!!!!!#8pf!")3!&-!83!!!!KTF'4%,%![3`!!!!G
+ KCA&bG(TD!!!!#RG38P4A+9XpA#J!!!!*Ef-%Fc`qj&!!!!"J!!!!!!!!!!!!j
+ MC'CUE'eZEh"bFh4eG`!!!#3JZXh*ZmLmcXV,ZFbca&`[X1lZlrU`2$jH)Rel)ea
+ I2$iM)`!!!!!q,Q`!!!"S!'S!!!"`Dfd!!!"TBQTZD'pXH3"VG3!!iq6QkZcYcZr
+ bmr6epiffa-E#YIDrU+HJk,F!!'KXDQX!!!!2!!!!!J!!J!!'6@pZB@0[!!!!"d&
+ 38%`!!!!!!!!(8d&@43!"!!!!!!GB8%a5!!)!!!!!"da&9N`!!`!!!!!(3Np143!
+ %!!!!#BL3!!!!!!$q!!B!!2rh!!B!#`1l!!N!!J!!!$m!!!!!!!!!!!!!!!!!!!!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$B!!!!!!!!&%%!!!!
+ !!#P!!!!`!!!D!!!#'%!&DeL*3!@J+83JJ%!%P8"3&!&!!9!"3JMm$rm!(i!!!
+ !Fi!J!!!!!!!J!!!1B!!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!!!!!!!!!!!!!!!!!!!F!"3L!)B"!%#J+)!"!))J!!!B!"")K0X!!!#+)!!&IL
+ *3!@J+83JJ%!%P8"3&!&!!9!"3JMm$rm!d)!!!!*%"3![2!!!3J!`!*N!!!e6R
+ X6#!!"FZF,l[ZF!!1Flc[Iqk2$'%BZmlc[aM'-ImD!J3!%"JK--!!!!!#!!!!!+Q
+ Zq45K*!T3V9c[JHT4&%8k)*4m3N3PSZa!!NNJ"@YBL8!&S#P%))"!"*9!8"3"3K3
+ !&3!8))r!rr!6!$i!0R4F3!Am)")D)!5!#5$ehpDbNUN!"MaLD%!aL##4M'-B`K'
+ +$+'maM'-54M&83d0!33!%#!J%%!!!!!#!!!!!+V4q!!!'!!!!#-B!S!!!!"'*)+
+ L3!!!-c)!!US!!"AiL8!&S#P%))"!"*9!8"3"3K3!&3!8))r!rr!M!")!#DaL)$h
+ m2j%U*!bi18#9K9,8)A%!#QK#VhJaM9p"l'-)`K#+$5&DaM'-#4M%N45)!(qFph2
+ p-ReRHICraM@-IUJ38jlh[FjcNQ-B1SjcSaM',ZILjmk0Uc*!!99J"@YBq8(p[qP
+ m))"!"29rhrIrIjAi&IJ9q)r!rrGP"mMmL+rLlF[m)(c))(0m+Ik9MlP))Dr2LUL
+ 0)-41L)!LVrd)qp2k$L%Cap(cL4M%LL5)!)aM'+4M0'ZBaMQ#4M9843339'-BaM'
+ -8Rrr9p'-BaM'0B%m50'1CZb2rKPTN!!9ripq)D%2arrrrrqA%!!3!!"q"rmRrLI
+ rrrriT3+&&)LXBaV,r,q4+$q)I%!1PB89Y5%K!"-T!r$%NAKI424M#-)4LSdK'-B
+ 4L%NBe)4%5!#-B4qNBcaV'-B`FNBe*%LS%(IM'-BIrp*M'(k4M'-BaM5(j%M4M')
+ "#!3KmNeV@2P,rEhi2%!#3!6eprphrhq"q8(p&IK2rr`)S`+*&)KdBah6r#!5'#"
+ `Id!1P3"@XK)"!")U)LM%N3JJJ)4M'-)4LSbK'-B4M%N9E85%5!#FB4JNBc*V'-B
+ `#Ne99S%53R1Fi3K"*M'&+4M'FiaM@*,NR4R'2r'!4!FNJ9q)P+*D8!!%!#3!5
+ 8&!&8!8!!)8!P"2rr`)S`+6&)JN94"6r$q!##5!1)!!PB!k63`!%'(2h#FiMR8
+ !"(4mlhi1Mh4r',S1LiML4L6q12a[R[HMic&V&hR`mE5+LrkS$L2DeVA[Hp*M(pl
+ ZFjVAZFla*%E1E')!i!"`DC9V@)P+*D8!!%!#3!58&!&8!8!!)8!P"2rr`(E3+
+ qjdKcYZ!pr#"rq5!!!)!!p3!3!!!!%#!!!!!!!!%!!!!!!!!!!!!!!!!"!!!!!!!
+ !)!!!!!!!3#!!!%!J!!!!!%"`!R!!!!#!!!!!!!!!!!!!J!3!"N!!!!!!!!!!!!!
+ 9q)P+*D8!!%!#3!58&!&8!8!!)8!P"2rr`!)!!!"!!!!!!Krq!!#5!!!!!!!!!
+ !!!!!)!!!!!!!!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$J-!!!%!J!!!!!i!
+ !"!!!!!%!!!!!!!!!!!!(!!!!!B!!!!!!!!!!!!9V@)P+*D8!!%!#3!58&!&8!8!
+ !)8!P"2rr`!!!!!"!!!!!"!!!!!#-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!%!"!!*!!i!%`!B!"S!(3!J!#8!+J!X!$%!-J!f!$X!23"#!%F!6!"4!&B!@`"
+ J!'8!CJ"S!'X!F!"c!(J!I3##!)F!M!#4!*B!Q`#J!+8!U!#Y!,)!Y`#m!-%!aJ$
+ ,!0!!e3$D!0m!j!$T!1i!m`$i!2d!r`%$!38"#!%1!4!"&3%D!4m"*!%T!5d"-J%
+ h!6J"1`&!!8)"4`&-!9%"9J&E!@!"C3&T!@i"F`&i!Ad"JJ'(!BS"L`'1!C-"N`'
+ B!Cd"SJ'R!D`"X3'f!EX"`!(&!FS"c3(3!G)"e`(F!H%"jJ(V!I!"p3(k!Im#"!)
+ *!Ji#%`)B!Kd#)J)R!L`#-3)c!MJ#23*#!NF#5`*2!P3#@3*H!Q3#DJ*V!R!#G3*
+ k!Rm#K!+&!SN#M3+5!TF#Q`+J!U-#U!+Y!V)#YJ+k!Vd#``,*!X`#dJ,B!YX#h`,
+ M!ZF#l3,c![F#r3-$!`N$$`-9!aX$(`-L!b8$+3-[!c8$13-m!d)$5!0,!di$9!0
+ D!em$C30U!fm$G30k!i!$K31+!im$P!1C!jm$T31V!l%$YJ1j!l`$[`2$!mJ$c32
+ 4!pB$e`2F!q!$j!2R!qd!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!
+ '!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'"JB#"J%'!!B!"J!'!!B#"J%
+ '!JB!"J!'!3B!"J)'!3B!"J)'!!B!"J!'!!B!"J!'!!B!"J)'!3B""J!'!3B!"J!
+ '!!B!"J!'!!B!"J!'!!B!"J%'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!
+ '!!B!"J)'!3B#"J%'!!B""J!'!!B!"J!'!!B""J!'!!B#"J!'!!B""J!'!!B!"J!
+ '!!B!"J!'!3B!"J!'!!B!"J!'!!B#"J)'!3B!"J!!!!B!"J!'!!B!"J!'!!B!"J!
+ '!!B!"J%'!3B""J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!
+ '!JB!"J!'!!B!"J%'!3B!"J!'!!B!"J!'!`B!"J!'!!B!"J!'!`B!"J!'!!B!"J!
+ '!!B#"J!'!!B!"J!'!!B$"J!'!!B$"J!'!!B$"J)'!JB#"J!'!!B#"J!'!!B!"J!
+ '!!B!"J)'!`B$"J)'!!B!"J!'!`B!"J!'!!B$"J!'!!B!"J!'!!B!"J!'!!B!"J!
+ '!!B!"J!'!!B!"J!'!!B!"J!'!3B""J-'!!B!"J!'!3B!"J)'!!B!"J!'!3B!"[r
+ r!!!,hT!!!!!!!2m!"`!!rrd!"`!2"18!$!!$!!!!3J!!!!!!!!!!!!!!!!!!!!!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$J!!!!
+ !!!!!!!!!!!!'J!!!!!!!9DY@)P!"D!T4#"!#!!L+8!8!8!&""3!!T!!+#"$q!rr
+ i!!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"84!!!!!!!T3!!!-!!!,!!!
+ !))!!!&Aq)P!"D!T4#"!#!!L+8!8!8!&""3!!T!!+#"$q!rri!!!!!!!!!!!!!m!
+ !!#!!!!TJ!!!3!!`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!F(!!!!!!!!!
+ !!!!!!!!!!!!!(!!!!!!'!!!!!%5!!!!!!!!!!!!3!!!!!!!!))!!9DY@)P!"D!T
+ 4#"!#!!L+8!8!8!&""3!!T!!+#"$q!rri!!!!!!!i!"J!p#!!!#!!!!f3!!$915a
+ 5)!!#jFiAcIFi!!(!1mlhrZM`aK',[1mlmBaM(mJ5!)%!"!B)6!!!!!!!!!!!!#T
+ VJ#)!L3%!J+Fli(X!JL!1L!dI%%L%f,h%!#++!!"9rL*3!@J+83J3!J!)LP!&!&!
+ "338!!+3!#JJ3rJ2rq!li2J!!%FiJ!I`J!#!J!`!j)(hIeV*5U!!$(M%d%"M%##)
+ J4M'-)4LJbKZ-BaM%NBaM%-J9!%%!"!J)6$!!!!!!J!!!!#Ud9%8S53+85eM'!+5
+ 844&4L"#SN!#4#@M'*!!NNJ"9UeBL8!&S#P%)%!)!#)T3"3"3!8%&!!#N!!S)%2i
+ $rrJ45#)!'j)a)!Am)!4-)!5!+8p%e9,5BA%!"43K9#!Ba"!3,dBaM#%)S0)9c'-
+ B`*'-Ba$%')!"!!3)#!33!!!!!)!!!!!U"%!!!!B!!!!)aJ#J!!!!%BN4q*!!!!!
+ -aL!!##!!!&Aq)P!"D!T4#"!#!!L+8!8!8!&""3!!T!!+#"$q!rrlF8!3!#3k-4!
+ &r$mLNL3%J#Rr4)8ae#&a!!8d*THm*dDRb&$(d)`K#+$L%DaM'-#4M&844"!!(qF
+ ph2p-RhRHICh4M@-IUJ3Ljlh[FjcNQ-B1SjcSaM',N!")ZI1MDXBN!"C+@P@V9Mj
+ 3IfrkA`J3!J!)qPrprprrIq8rJ+Ii#Rm3rJ2rr**(b2a%4M&i(IdJ)9)J5cJJ$d5
+ 2Q)JKVm!*9%(iBNM'`!5@rM#2[6qJ`K'FI4miNBa)SN)3!#-BaLNBc4V'-BjLNBe
+ 9%8N%)aM'-BaM&*M(eIaM'-BaMARr%M4MQEh%rqQDT3"9rq2IL'K$mIrrrrrrLm)
+ !!%!!!"r!Ira(riMrrrrrr**#K54%4r'1kr`rqM!rX(`J$d5&&93K)3q*P)%3BNL
+ m*mL@aM#-)4LJiK'-B4L%NBa84%)3!#-B4qNBcKV'-BaFNBe*%LS%)rM'-BIrp*r
+ q&k4M'-BaM4")%M4M')!)J%%V3Y@V9Mj5rfpq$a!!)J!)qRlrqprrIq!rP!Ip#Rm
+ )rrrm!hL54%4M'0Dr`J*"%J5(iJ$d3!&E+K!3!4&3%3BNL%%"!AaM#-)4LSdK'
+ -B4L%NBeL5%%3!#-B4JNBc4V'-B`#NBe*S%)`M'-B3K"*M'&+4M'-BaM4**%M4
+ M'2r`J%*r3S"9rL*5L@P!!"!!)J!)LJ+!#P!"3!!%&!"JJ)rrrm!"N54%4LU
+ 1kr`r)2%NX(fJ$d5!9V%5!""4&K%8BNL+L##3!%BaM#%BU-S4M'%Ba*&@iNK"%!!
+ R'-BT'-bDaM'-)T0994JU"'FCcR1-B45BaK@NBaR1-Be55j*dCaL!%3!%#U99UeB
+ L8SPT3!!3!#)!#)S#J!T3!8!!""3!43S)#2rrr!!43U-Na$SUL#[m)!F3`!!iB!"
+ %J$T1NJ!3B1IZ%ja(-S!!MdI1pq$SpdIaLk$SZ)iNBNr!N!"r'qFpb2M-@XAHI"a
+ Y)U,rUJ1DjV@YFjlNQ-IZZjcQYHjc[%N4XjXBJ!i!$`TD!&Aq)P+*D8!!%!!L!!L
+ +!S!+8!&!!!38!%8+#!Mrrr`!&N+qad)4fh!Grq$i%!!!!#!!I3!3!!`!%#!!!!!
+ !!!#!!!!!!!!!!!!!!!!!3!!!!!!!F2!!!!!!!"!)!!!3#!!!!!!3(!%!!!!!)!!
+ !!!!!!!!!!#!"!!%3!!!!!!!!!!!!9DY@)P+*D8!!%!!L!!L+!S!+8!&!!!38!%8
+ +#!Mrrr`!%!!!"!!3!!!4q!!!%!!!!!!!!!!!!!!!)!!!!!!!!!%!!!!!!!!!!!!
+ !!!!!)!!!!!!!!!!!!!!!!4!)!!!3#!!!!!%3!!%!!!!!)!!!!!!!!!!!!#!!!!(
+ J!!!!!!!!!!!!!&Aq)P+*D8!!%!!L!!L+!S!+8!&!!!38!%8+#!Mrrr`!!!!!"!!
+ i!!!3!!!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!!!!1!`!!!!!!!!!!$J!!)!!!!!3!!!!!!!!!!!!F!!!!!!!!!!!!!!!!!!9DY
+ @)P+*D8!!%!!L!!L+!S!+8!&!!!38!%8+#!Mrrr`!!!!!!!!!!!!!!!!!%!!!!!!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!"!!*!!i!%`!C!"S!(3!J!#8!+J!X!$%
+ !-J!h!$`!2J"$!%J!63"5!&F!A!"K!'B!C`"T!'d!FJ"f!(X!J3#'!)X!N!!!P3#
+ D!*m!T!#T!+`!X3#f!,X!`!$&!-S!c`$8!0N!hJ$M!1J!l3$b!2F!r!%"!33"#3%
+ -!4%"'!%D!4m"*!%T!5i"-`%h!6`"33!88"5J&-!9%"9J&E!@!"C3&U!@m"F`&
+ i!Ad"JJ'(!B`"N3'8!C8"Q!'G!Cd"SJ'R!D`"X3'f!EX"`!(&!FS"c`(8!GF"fJ(
+ F!H%"jJ(V!I!"p3(k!Im#"!)*!Ji#%`)B!Kd#)J)R!L`#-3)f!MX#23*#!NF#6!*
+ 4!PB#@`*J!Q8#DJ*`!RB#G`*m!S%#L!+2!TB#P`+E!Tm#T!+T!Ud#XJ+e!VS#[`,
+ %!XJ#c!,3!YF#hJ,L!ZN#m!,d![N#rJ-$!`S$%3-@!ad$*!-V!c)$130!!d8$530
+ 0!e)$@30J!f3$D!0[!hB$HJ0q!i8$L`13!!19!jS$R`1P!kS$X31f!lX$`!2&!mS
+ $c`29!pX$i!2P!qJ$k`2[!r-$q!2p"!%%"J3("!`%%!38""J%'!3I!!F!"`!(!!F
+ !"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F
+ !"`!(!!F!"`!(!`F#"`%(!3F""`!(!`F#"`)(!3F""`)(!3F$"`%(!3F#"`%(!3F
+ ""`%(!3F""`%(!3F$"`)(!3F""`)(!3F!"`%(!3F""`%(!3F""`%(!3F#"`%(!3F
+ ""`%(!3F""`%(!3F""`%(!3F""`%(!3F""`%(!3F#"`%(!JF""`!(!`F""`%(!3F
+ ""`%(!JF""`%(!`F""`%(!JF""`%(!3F""`%(!3F""`%(!3F""`%(!3F""`%(!JF
+ $"`)(!3F!!!%(!3F""`%(!3F""`%(!3F""`%(!3F#"`)(!JF""`%(!3F""`%(!3F
+ ""`%(!3F""`%(!3F""`%(!3F""`%(!3F""`-(!3F""`%(!3F""`%(!3F""`%(!3F
+ ""`-(!3F""`!(!!F!"`-(!!F!"`!(!!F!"`!(!JF!"`!(!!F!"`!(!`F!"`!(!`F
+ !"`!(!`F#"`)(!JF!"`!(!JF!"`!(!!F!"`!(!!F#"`-(!`F#"`!(!!F!"`-(!!F
+ !"`!(!`F!"`%(!3F""`%(!3F""`%(!!F""`%(!3F""`%(!3F""`%(!3F""`)(!JF
+ $"`!(!3F""`%(!3F$"`%(!!F!"`%(!!%!"rrr!!!!!!!!!%*J!!#A!!!!!!!!!!!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!%!#3!!5iN
+ !$!!!5i`!!!!9!$m!#J%(!@J!!3!!!!!!!!!!!)%!!!!!4!!!!3!$J!I!$q!Im!1
+ !!i!$J!1!!i!$J!1!!i!!!!!!!3!$J!I!$q!Im$ri2rJ(`!I!"m!(`!I!"m!(`!I
+ !!!!!!3!(!!!!4!!!I`"q!(`!IJ"r!'q!4m!$i!(`!2!!B!!!!!!!!!!!ri$rJ2m
+ !rJ$r!2q!rm$[i-I`!rJ"q!$`!'!!!!!!!!!!!3!"!!!!4!!!!2i!IJ!q!(i!rJ(
+ f!q)(`!q!$`!'!!!!!!!!!!!!!Im"r`$r!(m!r`(r!rm(p`rM(m!IJ!m!"J!!!!!
+ !!!!!!3!1!!!!4!!!!!!!!!!J!$!!1$rm2rirr!!i!$!!)!!!!!!!!!!!!!!!!!"
+ J!(!!H(rmIrjrrhrqIr`!H!"`!'!!!!!!!!!!"`!1!!!!4!!!!!!!!!!!"J!2!!q
+ !"m!$iJ(f!2i!IJ!q!(i!rJ!!!!!!!!!!"J!2!"q!(m!2i`Ih!rm"r`$r!(m!r`(
+ r!Im!$J!1!!!!4!!!!!!$J!1!!i!$J!1!!i!$J!1!(r!2i!I!!i!"!!!!!!!(`!I
+ !"m!(`!I!"m!(`!I!2rJrq"r`$q!(`!1!!3!!$J!(!!!!4!!!!!!!!!!!!'!!m!(
+ `!q"(`'q!I`"q!(`!IJ"r!!!!!!!!!!!!!'!!m!(i!rM(m1rJrm$rJ2m!rJ$r!2q
+ !ri!!$J!"!!!!4!!!!!!!!!3!$!!F!$riIrJrq"`!$!!%!!!!!!!!!!!!!!!!!!B
+ !$J!H!$rmIrcrr(rm2r`H!!i!"J!!!!!!!!!!"`!"!!!!"d&9@%`!"3!!!!%!!!!
+ !!(JIm$c)j!iQV`)"kS3%%-,S$!NZ%")''"'"'"!Q33!))!!!@#$J$LJKm"m))rJ
+ rL$2i2jJam4mB%111%"#$J"!)48%J")eQ3!)*))!(M@2!$FI(B"MJ$M"af$FF3hI
+ GK&CG904N9qa-2&98H!![k!!!%"!!!!rJ!!!!!!"m(r"qr2rqIrrrrrrrrrrrrrr
+ rrrrrrrrrrrrr2rrrq(rrrrarrrrmIrrrr(rrrrarrrrmIrrrr(rrrr`rrrri2rr
+ rq"rrrr!Irrr`$rrri!rrrr!Irrri2rrrr2rrrrlrrrrqrrrrr[lrr[jqrrlq2(r
+ mH!!rq!!!(r!!!!rJ!!!!!3!3!!!!F!%!3,!(!2!`1`pJFFB83"S'-1!CANiJH3b
+ I)*S-T*!!$VfN8!iC4Q!m'F)!4hP!)!Ba`*!!$l-K4*2bS4"Kh4#SNZV34&Ke1+L
+ Q+SL#e9*i+$UR#%#Rb2!!e*!!%J!kNH3F$dRfF!$m[,B!!TN@!!*)'!!"3"!!!A!
+ m!!2SC(J"J%$i"i$`q$q2q2RrRr$rrcrJrrprm2rrrr$rrrr`rrrrq2rrrrMrrqr
+ `rrrRm2rrir$rrq(mrrrcr[rrmrcrrrRmrrrir[rrrIlrrrhrrrrmr[rrr1Mrrrp
+ !rrrr([rrrrirrrrq$rrrr`$rrrm!"rqq!!2m2!!(r(i!"rcq!!!!P`"Q!!!!!!!
+ !!!$rrrkr"%CTE'8-8f9d)'p`G'P[ER2*!!!!!!j@CA*cD@pZ)'jeE@*PFJ!!!!!
+ 05@jfCA*d)&0MFQ9PEJ!!!!!08Q9NFQ&h)(0MFQ9PEJ!!!!!68Q9`C@&d)'aKFh3
+ JE@9cFf&RC3!!!!!",3!!!!!*8f&fC5"RB@eP!!!!!!%Y!!!!!!44G@Pd!!!!!!!
+ !!!%!J)!!!0'!!!#UJ!!!e)!!!+5!!!$BJ!!!URrrr0P!!!DS!!!'dNbG4U%!!!E
+ 859f'T!!!"Y*0bfDK!!!'e%!!"U30[qE43$$QT!-[CY*!,@DJ#M0Qm8!mjPJ0-kB
+ N3$rQ'J!!"JY!!!B%P99@!fUUUJ)Irri"i!!!!!!!!!!!!!#!J!!!mB!!!2Z!!!$
+ rJ!!!ri!!!2q!!!$rrrrmrrrrr[rrrrlrrrrqrrrrr[rrrrlrrrrqrrrrr[rrrrl
+ rrrrqrrrrr[rrrrlrrrrqrrrrr[rrrrlrrrrqIrrrrMrrrriIrrrq$rrrrJIrrri
+ $rrrq!rrrrJ(J!!!!!!!!!!!!!!!!!%aZD$-`!!!!!8P$6L-!"J!!!)!!!3#"!!)
+ !JJ!$!)-!"!#%!!8!K3!'!)C'8N9'!!B!!!#!!!%!J3!#!))!!`#$!!3!K!!&!)8
+ !"J#'!!!!"e4&@&3!"J!!!!!F!"`!'J&@!IJ!!3!!!!!!!!!"!))(6h"dD@pZF`!
+ !!"`!)J!N!6B"C!!"!2m!!!!!!!!!J`GKFfYZB@eP!!!$ZJ!M!!!!!!%G!@!"-3'
+ `"!P8C@e`Eh*KFRRq!!!!!!%G!#%"-3"a"!46BACP!!!!!!%G!-J"-3%B"!C$B@j
+ MC@`!!!!!!'-!%3"c!)%&$%9iF'a[FQ8JE@pNC3!!!!!!B`##!(-!bJ8'4Q9YB@a
+ P!!!!!!"M!-`!F`(-"5&%DA0`E'&j)%jPGh-JBA3J3Q9RD@jZD@jR)'pQ)%GKE@8
+ -!!!!!!#-!!J!R!#)"3p'DAKPC#"*ERCPER4[FRP!!!!!!!#F!!J!V!#J"4&%DA0
+ `E'&j)(4[E@*cG'pZC3J!!!!!!+`!#!#m!)JZSEhFJG'PYCAN!!!!!!,`!#!$
+ -!*J&%&CPFQ*[Ff8JE@9cFf&RCA-!!!!!!-`!#!$F!*J&%90TE'9ZG#!SEQmJBQ9
+ PF(-T%!!!!!!!h!!)!1`!Z!896A9XG'PQD@jNCA)J3A9dEbekEfpY9J!!!!!!l!!
+ )!2`!J!8-5@jfCA*cC5"8CAKd!!!!!!#-!,J!R!%-"3P6Eh*d)&"KBfZB!!!!!!#
+ F!,J!V!$i"39$Efa[FJJ!!!!!!+`!Z!#m!B`&(&"TBfYeF#"[BQTPBh4c)'&eG'p
+ YBA4TBf&XE(N!!!!!!,`!Z!$-!6!&$d0[EQCTFQdJB@0dD@pZFdJ!!!!!!-`!Z!$
+ F!4%ZKCQ8JF'9dFjJ!!!!!!0`!Z!$X!6%&$9*PFh3JEfiJFh"KBf9d!!!!!!!
+ C!*J!+3'F%!4-DA0K!!!!!!!b!*J!3J'F%!9'FQPdHT`!!!!!!%X!Q!"E!C`3"9*
+ [GQ9bc!!!!!!""!#J!43"T"!%8'9KFJ!!!!!!M!&T!*`"`4!+)LPE*6mV)5mS+J!
+ !!!!!l!#i!2`"&SJ28f0[FQ8JE'PcG$SJG'p`$`!!!!!!l!%D!2`",K!"-aB!!!!
+ !!1`"9J$m!@S3!6)@!!!!!!!&!+S!&3%dL"01CA4)B@0V)$-Z-#"2F(4TEfjc!!!
+ !!!!!'3![!#N!M)J-8'aKH@9b)%jKE@8k!!!!!!!a!#m!33"rL!P$BA3J6Q&YC6V
+ X!!!!!!"+!#m!@J#(L!P%EfFJ6Q&YC6ST!!!!!!"h!!S!L3%BL#C8D'9cC5"[F(4
+ TEfjc)(4KDf8JC@CQC@0d)'PYE@9ND@&dC@aj1J!!!!!!l!%b!2`"8SJ$B@jNF!!
+ !!!!!M!%)!*`"C)J0)#dJF'&MDfpbC'9b1QN!!!!!!33!4!%8!*H)#dCbG@Pd)%j
+ KE@8k5`!!!!!!l!&[!2`"[iJ+BA*[G@jN)'eP,J!!!Mi!&J!!!!!!k!$L!2`"(J3
+ #6dX!!!!!!!8!#!!C!'X)$&GSEb"KFQ8JH@pe2`!!!!!!(3!+!#d"1"!+4'&bE@&
+ bB@jdD!!!!!!!0J!)!%B!i!JI9fKKG#"VD@jN)'pQ)'0SBA*KBh4PFL"KFQ8JH@p
+ e2f8!!!!!!%J!#!"B!(-'$%&bBfKPEfa[CfPcG!!!!!!!A!!)!'`!F`B*3Q&bBQ&
+ bD@&Z!!!!!!!!G!!)!)3!F`B)3f&fC5eYB@i!!!!!!)`!#!#F!(-'!d9XCS-!!!!
+ !!%J!H!"B!-X'"NKPB@aPFJ!!!!!!A!"i!'`!bJB'5fjTCfKd!!!!!!"d!(J!K!$
+ 0"JC3FQPPFh3!!!!!!)`!H!#F!-d'"9*[Ch9P!!!!!!!!5!$B!&J",3B(8f&YGA*
+ KDA%!!!!!!&`!f!"`!5d'"e4[GA*TFh3!!!!!!!"d!0J!K!%Y"JK@B@aVHA*TC3!
+ !!!!!M!$B!*`",3B'9fPkBA*N!!!!!!#N!!J!Y!$!"K4-CA3JG'KP)'GKE@8JBfK
+ [Eh0P)!!!!!!!c!#3!!$F!8J&%d4PBR9R)#KA59T"8N3T)%e[C'@#!!!!!!$-!!J
+ !h!"i"3a&H("XEh*P)'e[C'8!!!!!!+3!f!#d!5!&"NCPE@&XC3!!!!!!hJ!)!1i
+ !d!8B4'PcF'aKH5"ZCAGc)'*PCQpbC5"RB@eP!!!!!!$`!!J"!!#3!!835R9cG#"
+ cD'ph)(0MEh*PF`!!!!!![!!)!-d!8`J)6h"dD@pZFcS!!!!9!!!!!!%%!AF!!3!
+ !!!!!!!!!m'!!!!!!l!!+!!!!!!#r!4i!d3&Z"!42F'9Z!!!!!!!!!MX!8!*0"!C
+ )D@4NC@i!!!!!!0S"(`$X!@m%"N0KEQ0PE!!!!!!!*`%D!$S"Fi!!!!!!!!"%!5!
+ !9J&`"!9&DQ9MG&m!!!!!!&d")!"[!A!%"84bDACPi!!!!!!!3`!-!28"&`!!!!!
+ !!!!$!'d!&3#G!!!!!!!!!*B"'`#A!A1!!!!!!!!!!!)8!'8#G)J!!!!!!!!#!$!
+ !*J&'#$03E'9KFf8JE'pMBA4PAM!JCQPXC9ia)&ib$@pb)("bCA0c)%0KEQ0PE#"
+ dEb"KBQpbG#lA!!!"D!!(!!!!!!#E!$`!V`"i"!*25`!!!!!!Q`#i!+m"%J3*6@p
+ bC5"*EQC[ZJ!!!!!!#J!F!"S"0N!#!'3!!!!!!%N!E3"E!1%)'&0PC5"XD@0PER0
+ P)'C[FL"NCA4KD@ac,J!!!!!!)`!h!$-")3JY3fp`HA*TCfKd)$%j1$8X)$%j1$B
+ X)$%j1$FX)$%j1$JX)$%j1$NX)$%j16!Z1J!!!!!!-`!P!%8"3`Jf3RNJ8h4TBfK
+ dD@jR)%eKG'KPE@&dDA0MD#"$C@jdFR9Y)'&ZC#"0D@YP)&0dCA"SC@jcEfiZ!!!
+ !!!"G!$)!E`%P#$0#G@FJFQ9`Eh*dFb!Y)'9YB@PX)'jPG'KKBfXYBR9RFd"XD@j
+ M,Q0TFbjeF'9ZELjPC(8Z!!!!!!"d!#-!K!%fL$K#FQpeCfKd)(4[)(P[G5"LH5"
+ +EfKZERNX)%T[EL`J3@jNH5`J5f9fD@iX)%eTDf8JB@jN)&4[E3!!!&X!@`#8!,i
+ !Z3%I%3'J&0kK&0i!+!!$k(`!!qJJ!*3![J#j!4m!"3!"!!!!!`!B!"J`'!!-!!!
+ !!!"e)&m"!!S!P!#q!,N"(`F!"3!`!B!"K!!*3![J#j!4rr!!!"!!!!00)!!$2
+ 5!!!%p!!`ca!)&J!!!"`$2J!-8%P$9!!"!'TZD$-`!!!!JNe&6P8!"J#168&XG!!
+ "!1**3diM!!B!qNK%9%%!#J&14P*&4J!'!G*'6dj8!!)#*NC26N3!!!*+4%a24`!
+ $!PC%594-!!-#KN098P-!"`+f3Nj%6!!!!aB!C2rr!!!!!!!!!!!6M[rr!!!cF`!
+ aG&J!!2rr!!!#8!!!!!!!CJ!!!!!Sa!!!!!!!C`!&!!!#H`!!!!!!D!!+!!!#b`!
+ !!!!!D3!8!!!$H3!!!!!!DJ!E!!!%%!!!!!!!D`!J!!!%e3!!!!!!E!!P!!!&F3!
+ !!!!!J!!h!!!'A`!!!!!!J3!m!!!(l3!!!!!!J3"#)!!*H`!!!!!!JJ"0)!!+I`!
+ !!!!!J`"D)!!,J`!!!!!!K3&l)!!-K`!!!!!!K!&M)!!Q[!!!!!!!J!&[)!!R`!!
+ !!!!!KJ'+!!!TA`!!!!!!b3"Q!!!0L`!!!!!!bJ"a!!!0N3!!!!!!c!"l!!!0RJ!
+ !!!!!c3#+!!!0UJ!!!!!!cJ#A!!!0Y3!!!!!!c`#T!!!0``!!!!!!b`#h!!!0d!!
+ !!!!!d!$"!!!0fJ!!!!!!CJ$6!!!0l!!!!!!!C`$F!!!1&!!!!!!!C2rr!!!19J!
+ !!!!!J!$M!!!1D3!!!!!!J3$[!!!1G!!!!!!!JJ$q!!!1I`!!!!!!J`%,!!!1LJ!
+ !!!!!K!%E!!!1P3!!!!!!K3&8!!!QX3!!!!!!KJ'8!!!UX`!!!!",LIrr)!!1S!!
+ !!!",M2rr!!!B,!!!!!",!!%Q!!!N$J!!!!!!P`%Y"!!N%J!!!!!!J3%f!!!N@!!
+ !!!!!JJ'H!!!U[J!!!!!!J`'Z!!!UhJ!aG&$`B2rr!!!`rJ!!!!!!JIrr!!!b"`!
+ !!!!!J[rr!!!UrJ!!!!!!J`'Q!!!Z[!!!!!$`B2rr!!!a&`!!!!!!C2rr!!!NF3!
+ !!!!!Drrr!!!NZ3!!!!!!CIrr!!!P!3!!!!!!C[rr!!!P53!!!!!!Crrr!!!PN3!
+ !!!!!D2rr!!!Pf3!!!!!!DIrr!!!Q)3!!!!!!D[rr!!!QD3!!!!!!J!&%!!!UB`!
+ !!!!%4QPXC34&C'Pd#8PZGQ9ZG'pbH3C"Bh4TEfi%8(*PF!40EhCP%89iG'9ZC'9
+ N)%0[E@eKEQ4c"&P1+#N&@8j4+#N+8f&fC@3J4f&YC3a&H("XEh*P)%GKE@8,8f&
+ fC@3J6'9fC@`+3A"`E'8JE@9ZG3P'D@aP)'ePER815@jfC@jdEh*j)'ePER8-3@0
+ dD@pZFb"YC@je%9"bCA"KFQ&dD@pZFb"YC@je$8e[GQ9YC@jd)'ePER8*4@4TG#"
+ YC@je%89iG'9ZC'9N)%0[E@eKEQ4c#'GbBA"SD@0c"QYPH@eKF!Y"F("XD@0KG'P
+ [EJj6BACP)%0SBA)J4QPXC3a&H("XEh*P)'CTE'826'9fC@`J9'9YF#"'D@aP#N*
+ [EQ9c)%CTE'8'HR3YD@*Y#%KKBfY'Efjd$8&LEh9d)%jPG%KKBfX26Q9d5'&MDb"
+ QEh)J6@&M$N&eH'PXD@&bH5"'D@aP#d*[EQ9c)%aPGQ9X#d&`F'aTBf&dD@pZ$N&
+ eH'PXD@&bH5"'D@aP#94&@&3JCQPXC3P849K8)'CTE'8(6h"dD@pZF`GKFfYZB@e
+ P"f&cDfjKE@9&6!:
*** /dev/null Tue Feb 20 01:29:52 1990
--- auxil/MacHelp Tue Feb 6 16:33:54 1990
***************
*** 0
--- 1,35 -----
+ y k u 7 8 9 UP
+ \|/ \|/ |
+ h-.-l 4-.-6 LEFT<- ->RIGHT
+ /|\ /|\ |
+ b j n 1 2 3 DOWN
+ numberpad cursor keys
+ Move commands:
+ yuhjklbn: go one step in specified direction
+ YUHJKLBN: go in specified direction until you
+ hit a wall or run into something
+ g<dir>: run in direction <dir> until something
+ interesting is seen
+ G<dir>,
+ [SHIFT]<dir>: same, except a branching corridor isn't considered
+ interesting
+ m<dir>: move without picking up objects
+
+ If the window title shows "[MOVE]", the number keys move your character,
+ otherwise they act as a numeric keypad.
+ The 'g', 'G', '[SHIFT]' and 'm' modifiers may also be used with the
+ numberpad and the cursor keys.
+ The mouse cursor shows which direction you will try to move if you
+ press the mouse button when the mouse is in the Nethack window. You may
+ use the 'g', 'G', '[SHIFT]' and 'm' modifiers with the mouse button too.
+ The '5' key on the numberpad invokes the "open door" command.
+ The '0' key on the numberpad invokes the "do inventory" command.
+
+ For pre-ADB keyboards (Mac+ keyboards and earlier), use the Command key
+ for the Control key and the "`" (backquote) key for the escape key.
+
+ Press the clear key (on the numberpad) to switch between movement mode
+ and numeric keypad mode.
+
+ The option key is the meta-key. For option-n, press option-shift-n and
+ for option-u, press option-shift-u.
*** Old/Files Sun Nov 19 20:58:09 1989
--- ./Files Mon Feb 19 14:07:54 1990
***************
*** 5,12
(files in top directory)
! Files Install.dos Install.unix Makefile.top Porting
! README
amiga:
--- 5,12 -----
(files in top directory)
! Files Install.ami Install.dos Install.mac Install.unix
! Install.vms Makefile.top Porting README
amiga:
(files for Amiga version)
***************
*** 8,14
Files Install.dos Install.unix Makefile.top Porting
README
-
amiga:
(files for Amiga version)
Install.ami Makefile.ami NetHack.cnf ami.lnk amidos.c
--- 8,13 -----
Files Install.ami Install.dos Install.mac Install.unix
Install.vms Makefile.top Porting README
amiga:
(files for Amiga version)
Makefile.ami NHScore.uu NHinfo.uu NetHack.cnf NewGame.uu
***************
*** 11,19
amiga:
(files for Amiga version)
! Install.ami Makefile.ami NetHack.cnf ami.lnk amidos.c
! amifont.uu amifont8.uu amimenu.c amitcap.c amitty.c
! amiunix.c amiwind.c fcntl.h signal.h stdio.h
auxil:
--- 10,19 -----
amiga:
(files for Amiga version)
! Makefile.ami NHScore.uu NHinfo.uu NetHack.cnf NewGame.uu
! ami.lnk amidos.c amifont.uu amifont8.uu amimenu.c
! amitcap.c amitty.c amiunix.c amiwbench.c amiwind.c
! compact.lat dflticon.uu
auxil:
(files for all versions)
***************
*** 15,21
amifont.uu amifont8.uu amimenu.c amitcap.c amitty.c
amiunix.c amiwind.c fcntl.h signal.h stdio.h
-
auxil:
(files for all versions)
Guidebook.mn castle.des cmdhelp data.base endgame.des
--- 15,20 -----
amitcap.c amitty.c amiunix.c amiwbench.c amiwind.c
compact.lat dflticon.uu
auxil:
(files for all versions)
Guidebook.mn castle.des cmdhelp data.base endgame.des
***************
*** 23,28
oracles rumors.fal rumors.tru tower.des
(files for UNIX versions)
Makefile.auxil lev_comp.6 nethack.6 nethack.sh
others:
--- 22,29 -----
oracles rumors.fal rumors.tru tower.des
(files for UNIX versions)
Makefile.auxil lev_comp.6 nethack.6 nethack.sh
+ (file for Macintosh version)
+ MacHelp
include:
(files for all versions)
***************
*** 24,29
(files for UNIX versions)
Makefile.auxil lev_comp.6 nethack.6 nethack.sh
others:
(files for MSDOS version)
--- 25,44 -----
(file for Macintosh version)
MacHelp
+ include:
+ (files for all versions)
+ MacAlert.h amiconf.h artifact.h attrib.h color.h
+ config.h coord.h decl.h def_os2.h edog.h
+ epri.h eshk.h extern.h flag.h func_tab.h
+ global.h gold.h hack.h lev.h macconf.h
+ mfndpos.h mkroom.h monattk.h mondata.h monflag.h
+ monst.h monsym.h msdos.h obj.h objclass.h
+ patchlevel.h pcconf.h permonst.h prop.h rm.h
+ sp_lev.h spell.h system.h termcap.h tosconf.h
+ tradstdc.h trampoli.h trap.h unixconf.h vault.h
+ vmsconf.h wseg.h you.h youprop.h
+ (file for special level compiler (STRONGHOLD option))
+ lev_comp.h
mac:
(files for Macintosh version)
***************
*** 25,30
Makefile.auxil lev_comp.6 nethack.6 nethack.sh
others:
(files for MSDOS version)
Make.ini Makefile.msc Makefile.os2 Makefile.ovl Makefile.pc
--- 40,50 -----
(file for special level compiler (STRONGHOLD option))
lev_comp.h
+ mac:
+ (files for Macintosh version)
+ MD.rsrc.hqx MacAlert.c NH3.proj.hqx NH3.rsrc.hqx Segments.mac
+ mac.c macfile.c macinit.c
+
others:
(files for MSDOS version)
Makefile.lib Makefile.msc Makefile.os2 Makefile.ovl Makefile.pc
***************
*** 27,35
others:
(files for MSDOS version)
! Make.ini Makefile.msc Makefile.os2 Makefile.ovl Makefile.pc
! Makefile.tcc Maketcc.ini NetHack.cnf ovlmgr.asm ovlmgr.doc
! ovlmgr.uu termcap termcap.uu trampoli.c
(files for MSDOS, Amiga, and Atari versions)
pcmain.c pctty.c pcunix.c
(file for MSDOS and new Atari versions)
--- 47,55 -----
others:
(files for MSDOS version)
! Makefile.lib Makefile.msc Makefile.os2 Makefile.ovl Makefile.pc
! Makefile.tcc NetHack.cnf ovlmgr.asm ovlmgr.doc ovlmgr.uu
! termcap termcap.uu trampoli.c
(files for MSDOS, Amiga, and Atari versions)
lev_lex.c pcmain.c pctty.c pcunix.c
(file for MSDOS and Atari versions)
***************
*** 31,38
Makefile.tcc Maketcc.ini NetHack.cnf ovlmgr.asm ovlmgr.doc
ovlmgr.uu termcap termcap.uu trampoli.c
(files for MSDOS, Amiga, and Atari versions)
! pcmain.c pctty.c pcunix.c
! (file for MSDOS and new Atari versions)
msdos.c
(files for new Atari version)
Makefile.st atari.cnf atarifnt.uue
--- 51,58 -----
Makefile.tcc NetHack.cnf ovlmgr.asm ovlmgr.doc ovlmgr.uu
termcap termcap.uu trampoli.c
(files for MSDOS, Amiga, and Atari versions)
! lev_lex.c pcmain.c pctty.c pcunix.c
! (file for MSDOS and Atari versions)
msdos.c
(files for Atari version)
Makefile.st atari.cnf atarifnt.uue
***************
*** 34,40
pcmain.c pctty.c pcunix.c
(file for MSDOS and new Atari versions)
msdos.c
! (files for new Atari version)
Makefile.st atari.cnf atarifnt.uue
(file for old Atari version)
oldtos.c
--- 54,60 -----
lev_lex.c pcmain.c pctty.c pcunix.c
(file for MSDOS and Atari versions)
msdos.c
! (files for Atari version)
Makefile.st atari.cnf atarifnt.uue
(Berkeley random number file, which may be included in any version)
random.c
***************
*** 36,43
msdos.c
(files for new Atari version)
Makefile.st atari.cnf atarifnt.uue
- (file for old Atari version)
- oldtos.c
(Berkeley random number file, which may be included in any version)
random.c
--- 56,61 -----
msdos.c
(files for Atari version)
Makefile.st atari.cnf atarifnt.uue
(Berkeley random number file, which may be included in any version)
random.c
***************
*** 41,62
(Berkeley random number file, which may be included in any version)
random.c
-
- include:
- (files for all versions)
- amiconf.h artifact.h attrib.h color.h config.h
- coord.h decl.h def_os2.h edog.h epri.h
- eshk.h extern.h flag.h func_tab.h global.h
- gold.h hack.h lev.h macconf.h mfndpos.h
- mkroom.h monattk.h mondata.h monflag.h monst.h
- monsym.h msdos.h obj.h objclass.h patchlevel.h
- pcconf.h permonst.h prop.h rm.h sp_lev.h
- spell.h system.h termcap.h tosconf.h tradstdc.h
- trampoli.h trap.h trapname.h unixconf.h vault.h
- vmsconf.h wseg.h you.h youprop.h
- (file for special level compiler (STRONGHOLD option))
- lev_comp.h
-
src:
(files for all versions)
allmain.c alloc.c apply.c artifact.c attrib.c
--- 59,64 -----
(Berkeley random number file, which may be included in any version)
random.c
src:
(files for all versions)
allmain.c alloc.c apply.c artifact.c attrib.c
***************
*** 84,90
vms:
(files for VMS version)
! Install.vms spec_lev.com vmsbuild.com vmsmain.c vmsmisc.c
vmstty.c vmsunix.c
(GNU termcap files that support VMS version)
vmstermcap.c vmstparam.c
--- 86,92 -----
vms:
(files for VMS version)
! Install.com spec_lev.com vmsbuild.com vmsmain.c vmsmisc.c
vmstty.c vmsunix.c
(GNU termcap files that support VMS version)
vmstermcap.c vmstparam.c
***************
*** 88,95
vmstty.c vmsunix.c
(GNU termcap files that support VMS version)
vmstermcap.c vmstparam.c
-
- mac:
- (files for Macintosh version)
- Install.mac Makedefs.rma Nethack.rma Segments.mac hackfont.hqx
- mac.c macfile.c macinit.c makedefs.r nethack.r
--- 90,92 -----
vmstty.c vmsunix.c
(GNU termcap files that support VMS version)
vmstermcap.c vmstparam.c
*** Old/mac/Segments.mac Sun Nov 19 21:01:33 1989
--- mac/Segments.mac Mon Jan 29 23:49:38 1990
***************
*** 20,26
cmd.c
getline.c
mac.c
- macfile.c
MacTraps
pcmain.c
prisym.c
--- 20,25 -----
cmd.c
getline.c
mac.c
MacTraps
pcunix.c
random.c
***************
*** 22,29
mac.c
macfile.c
MacTraps
! pcmain.c
! prisym.c
random.c
rnd.c
termcap.c
--- 21,27 -----
getline.c
mac.c
MacTraps
! pcunix.c
random.c
rnd.c
termcap.c
***************
*** 27,32
random.c
rnd.c
termcap.c
===== Seg 2 =====
apply.c
--- 25,31 -----
random.c
rnd.c
termcap.c
+ topl.c
===== Seg 2 =====
mkobj.c
***************
*** 29,37
termcap.c
===== Seg 2 =====
! apply.c
! attrib.c
! do.c
===== Seg 3 =====
dog.c
--- 28,40 -----
topl.c
===== Seg 2 =====
! mkobj.c
! mkroom.c
! mon.c
! mondata.c
! monmove.c
! track.c
! were.c
===== Seg 3 =====
engrave.c
***************
*** 34,44
do.c
===== Seg 3 =====
! dog.c
! dogmove.c
! dokick.c
! dothrow.c
! do_name.c
hack.c
===== Seg 4 =====
--- 37,43 -----
were.c
===== Seg 3 =====
! engrave.c
hack.c
invent.c
mthrowu.c
***************
*** 40,45
dothrow.c
do_name.c
hack.c
===== Seg 4 =====
do_wear.c
--- 39,46 -----
===== Seg 3 =====
engrave.c
hack.c
+ invent.c
+ mthrowu.c
===== Seg 4 =====
dbridge.c
***************
*** 42,49
hack.c
===== Seg 4 =====
! do_wear.c
! eat.c
shk.c
shknam.c
--- 43,55 -----
mthrowu.c
===== Seg 4 =====
! dbridge.c
! dog.c
! dogmove.c
! pri.c
! priest.c
!
! ===== Seg 5 =====
shk.c
shknam.c
trap.c
***************
*** 46,51
eat.c
shk.c
shknam.c
===== Seg 5 =====
engrave.c
--- 52,58 -----
===== Seg 5 =====
shk.c
shknam.c
+ trap.c
===== Seg 6 =====
stdio [LIB]
***************
*** 47,60
shk.c
shknam.c
- ===== Seg 5 =====
- engrave.c
- exper.c
- extralev.c
- fountain.c
- invent.c
- vault.c
-
===== Seg 6 =====
lock.c
makemon.c
--- 54,59 -----
shknam.c
trap.c
===== Seg 6 =====
stdio [LIB]
storage [LIB]
***************
*** 56,65
vault.c
===== Seg 6 =====
! lock.c
! makemon.c
! mcastu.c
! mhitm.c
===== Seg 7 =====
mhitu.c
--- 55,65 -----
trap.c
===== Seg 6 =====
! stdio [LIB]
! storage [LIB]
! strings [LIB]
! Math [LIB]
! unix [LIB]
===== Seg 7 =====
makemon.c
***************
*** 62,69
mhitm.c
===== Seg 7 =====
! mhitu.c
! uhitm.c
===== Seg 8 =====
mklev.c
--- 62,71 -----
unix [LIB]
===== Seg 7 =====
! makemon.c
! mkmaze.c
! prisym.c
! read.c
===== Seg 8 =====
artifact.c
***************
*** 66,75
uhitm.c
===== Seg 8 =====
! mklev.c
! mkobj.c
! mkroom.c
! mon.c
===== Seg 9 =====
mondata.c
--- 68,79 -----
read.c
===== Seg 8 =====
! artifact.c
! attrib.c
! search.c
! sounds.c
! timeout.c
! wizard.c
===== Seg 9 =====
mhitu.c
***************
*** 72,82
mon.c
===== Seg 9 =====
! mondata.c
! monmove.c
! mthrowu.c
! music.c
! objnam.c
===== Seg 10 =====
pager.c
--- 76,82 -----
wizard.c
===== Seg 9 =====
! mhitu.c
===== Seg 10 =====
do_name.c
***************
*** 79,85
objnam.c
===== Seg 10 =====
! pager.c
pickup.c
polyself.c
potion.c
--- 79,85 -----
mhitu.c
===== Seg 10 =====
! do_name.c
pickup.c
weapon.c
***************
*** 81,88
===== Seg 10 =====
pager.c
pickup.c
! polyself.c
! potion.c
===== Seg 11 =====
pray.c
--- 81,87 -----
===== Seg 10 =====
do_name.c
pickup.c
! weapon.c
===== Seg 11 =====
mcastu.c
***************
*** 85,93
potion.c
===== Seg 11 =====
! pray.c
! pri.c
! priest.c
===== Seg 12 =====
read.c
--- 84,92 -----
weapon.c
===== Seg 11 =====
! mcastu.c
! mhitm.c
! polyself.c
===== Seg 12 =====
lock.c
***************
*** 90,103
priest.c
===== Seg 12 =====
! read.c
! restore.c
! rumors.c
! save.c
! search.c
! sit.c
! sounds.c
! spell.c
===== Seg 13 =====
sp_lev.c
--- 89,96 -----
polyself.c
===== Seg 12 =====
! lock.c
! vault.c
===== Seg 13 =====
decl.c
***************
*** 100,128
spell.c
===== Seg 13 =====
- sp_lev.c
- steal.c
- timeout.c
- topl.c
- track.c
- trap.c
- weapon.c
- were.c
- wield.c
-
- ===== Seg 14 =====
- Math [LIB]
- unix [LIB]
- worn.c
- write.c
- zap.c
-
- ===== Seg 15 =====
- stdio [LIB]
- storage [LIB]
- strings [LIB]
-
- ===== Seg 16 =====
decl.c
macinit.c
monst.c
--- 93,98 -----
vault.c
===== Seg 13 =====
decl.c
macfile.c
macinit.c
***************
*** 124,129
===== Seg 16 =====
decl.c
macinit.c
monst.c
objects.c
--- 94,100 -----
===== Seg 13 =====
decl.c
+ macfile.c
macinit.c
monst.c
objects.c
***************
*** 129,134
objects.c
options.c
o_init.c
u_init.c
version.c
--- 100,107 -----
objects.c
options.c
o_init.c
+ pcmain.c
+ pctty.c
u_init.c
version.c
***************
*** 132,137
u_init.c
version.c
===== Seg 17 =====
end.c
pctty.c
--- 105,125 -----
u_init.c
version.c
+ ===== Seg 14 =====
+ apply.c
+ exper.c
+
+ ===== Seg 15 =====
+ dothrow.c
+ sit.c
+ wield.c
+ worn.c
+ write.c
+
+ ===== Seg 16 =====
+ pager.c
+ rumors.c
+
===== Seg 17 =====
demon.c
do.c
***************
*** 133,138
version.c
===== Seg 17 =====
end.c
pctty.c
pcunix.c
--- 121,132 -----
rumors.c
===== Seg 17 =====
+ demon.c
+ do.c
+ steal.c
+ worm.c
+
+ ===== Seg 18 =====
end.c
rip.c
topten.c
***************
*** 134,141
===== Seg 17 =====
end.c
- pctty.c
- pcunix.c
rip.c
topten.c
--- 128,133 -----
===== Seg 18 =====
end.c
rip.c
topten.c
***************
*** 139,146
rip.c
topten.c
! ===== Seg 18 =====
! artifact.c
bones.c
dbridge.c
demon.c
--- 131,156 -----
rip.c
topten.c
! ===== Seg 19 =====
! fountain.c
! potion.c
!
! ===== Seg 20 =====
! pray.c
!
! ===== Seg 21 =====
! sp_lev.c
!
! ===== Seg 22 =====
! mklev.c
! restore.c
! save.c
!
! ===== Seg 23 =====
! music.c
! spell.c
!
! ===== Seg 24 =====
bones.c
MacAlert.c
***************
*** 142,149
===== Seg 18 =====
artifact.c
bones.c
! dbridge.c
! demon.c
! mkmaze.c
! wizard.c
! worm.c
--- 152,176 -----
===== Seg 24 =====
bones.c
! MacAlert.c
!
! ===== Seg 25 =====
! do_wear.c
!
! ===== Seg 26 =====
! extralev.c
!
! ===== Seg 27 =====
! dokick.c
!
! ===== Seg 28 =====
! zap.c
!
! ===== Seg 29 =====
! eat.c
!
! ===== Seg 30 =====
! uhitm.c
!
! ===== Seg 31 =====
! objnam.c