page@swan.ulowell.edu (Bob Page) (12/02/88)
Submitted-by: u211344@hnykun11.bitnet (Olaf 'Rhialto' Seibert) Posting-number: Volume 2, Issue 72 Archive-name: fun/nethack.d3 # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # diffs.3 # This archive created: Thu Dec 1 17:55:33 1988 cat << \SHAR_EOF > diffs.3 --- 155,159 ----- # ifdef MSDOS wizard = TRUE; ! # else /* MSDOS */ if(!strcmp(getlogin(), WIZARD)) wizard = TRUE; *************** *** 135,138 # endif break; #endif case 'u': --- 165,173 ----- # endif break; + #endif /* WIZARD */ + #ifdef NEWS + case 'n': + flags.nonews = TRUE; + break; #endif case 'u': *************** *** 209,212 start_screen(); #ifdef DGK strncat(SAVEF, plname, 8); strcat(SAVEF, ".sav"); --- 244,250 ----- start_screen(); #ifdef DGK + # ifdef AMIGA + strncat(SAVEF, plname, 27); + # else strncat(SAVEF, plname, 8); # endif *************** *** 210,213 #ifdef DGK strncat(SAVEF, plname, 8); strcat(SAVEF, ".sav"); cls(); --- 248,252 ----- # else strncat(SAVEF, plname, 8); + # endif strcat(SAVEF, ".sav"); cls(); *************** *** 227,240 pline("Hello %s%s, welcome to %s!", (Badged) ? "Officer " : "", plname, hname); - #ifdef WIZARD - if (wizard && dlevel == 1) - # ifdef STOOGES - pline ("The wiz is at %d, the medusa is at %d, and the stooges are at %d", - u.wiz_level, u.medusa_level, u.stooge_level); - # else - pline ("The wiz is at %d, and the medusa at %d", - u.wiz_level, u.medusa_level); - # endif - #endif flags.move = 0; } else { --- 266,269 ----- pline("Hello %s%s, welcome to %s!", (Badged) ? "Officer " : "", plname, hname); flags.move = 0; } else { *************** *** 272,275 } seemons(); docrt(); --- 301,308 ----- } seemons(); + #ifdef NEWS + if(flags.nonews || !readnews()) + /* after reading news we did docrt() already */ + #endif docrt(); *************** *** 276,279 /* give welcome message before pickup messages */ pline("Hello %s, welcome to %s!", plname, hname); pickup(1); --- 309,322 ----- /* give welcome message before pickup messages */ pline("Hello %s, welcome to %s!", plname, hname); + #ifdef WIZARD + if (wizard) + # ifdef STOOGES + pline ("The wiz is at %d, the medusa is at %d, and the stooges are at %d", + u.wiz_level, u.medusa_level, u.stooge_level); + # else + pline ("The wiz is at %d, and the medusa at %d", + u.wiz_level, u.medusa_level); + # endif + #endif pickup(1); *************** *** 292,295 (void) signal(SIGINT, SIG_IGN); #ifdef MSDOS /* Help for Microsoft optimizer. Otherwise main is too large -dgk*/ moveloop(); --- 335,339 ----- (void) signal(SIGINT, SIG_IGN); #ifdef MSDOS + # ifndef AMIGA /* Help for Microsoft optimizer. Otherwise main is too large -dgk*/ moveloop(); *************** *** 301,304 char ch; int abort; #endif /* MSDOS */ for(;;) { --- 345,349 ----- char ch; int abort; + # endif /* AMIGA */ #endif /* MSDOS */ for(;;) { *************** *** 387,391 #endif if(Teleportation && !rn2(85)) tele(); ! #if defined(KAA) && defined(BVH) if(Polymorph && !rn2(100)) polyself(); #endif --- 432,438 ----- #endif if(Teleportation && !rn2(85)) tele(); ! /* #if defined(KAA) && defined(BVH) */ ! #ifdef KAA ! # ifdef BVH if(Polymorph && !rn2(100)) polyself(); # endif *************** *** 389,392 #if defined(KAA) && defined(BVH) if(Polymorph && !rn2(100)) polyself(); #endif if(Searching && multi >= 0) (void) dosearch(); --- 436,440 ----- # ifdef BVH if(Polymorph && !rn2(100)) polyself(); + # endif #endif if(Searching && multi >= 0) (void) dosearch(); *************** *** 477,480 } } else if(multi == 0) { rhack((char *) 0); } --- 525,531 ----- } } else if(multi == 0) { + #ifdef MAIL + ckmailstatus(); + #endif rhack((char *) 0); } *************** *** 502,506 /* * plname is filled either by an option (-u Player or -uPlayer) or ! * explicitly (-w implies wizard) or by askname. * It may still contain a suffix denoting pl_character. */ --- 553,557 ----- /* * plname is filled either by an option (-u Player or -uPlayer) or ! * explicitly (-D implies wizard) or by askname. * It may still contain a suffix denoting pl_character. */ *************** *** 511,517 ct = 0; while((c = getchar()) != '\n'){ - #ifdef MSDOS - msmsg("%c", c); - #endif if(c == EOF) error("End of input\n"); /* some people get confused when their erase char is not ^H */ --- 562,565 ----- ct = 0; while((c = getchar()) != '\n'){ if(c == EOF) error("End of input\n"); /* some people get confused when their erase char is not ^H */ *************** *** 516,521 if(c == EOF) error("End of input\n"); /* some people get confused when their erase char is not ^H */ ! if(c == '\010') { ! if(ct) ct--; continue; } --- 564,574 ----- if(c == EOF) error("End of input\n"); /* some people get confused when their erase char is not ^H */ ! if(c == '\b') { ! if(ct) { ! ct--; ! #ifdef MSDOS ! msmsg("\b \b"); ! #endif ! } continue; } *************** *** 522,525 if(c != '-') if(c < 'A' || (c > 'Z' && c < 'a') || c > 'z') c = '_'; if(ct < sizeof(plname)-1) plname[ct++] = c; } --- 575,581 ----- if(c != '-') if(c < 'A' || (c > 'Z' && c < 'a') || c > 'z') c = '_'; + #ifdef MSDOS + msmsg("%c", c); + #endif if(ct < sizeof(plname)-1) plname[ct++] = c; } *************** *** 547,550 #ifdef DGK /* Change the default drive as well. */ --- 603,607 ----- #ifdef DGK + # ifndef AMIGA /* Change the default drive as well. */ *************** *** 550,553 */ chdrive(dir); #endif --- 607,611 ----- */ chdrive(dir); + # endif #endif *************** *** 559,562 if(dir == NULL) dir = "."; if((fd = open(RECORD, 2)) < 0) { --- 617,623 ----- if(dir == NULL) + #ifdef AMIGA + dir = ""; + #else dir = "."; #endif *************** *** 560,563 if(dir == NULL) dir = "."; if((fd = open(RECORD, 2)) < 0) { #ifdef DGK --- 621,625 ----- #else dir = "."; + #endif if((fd = open(RECORD, 2)) < 0) { #ifdef DGK diff -bc2 pcunix.c Amiga:pcunix.c No differences encountered diff -bc2 permonst.h Amiga:permonst.h No differences encountered diff -bc2 polyself.c Amiga:polyself.c *** polyself.c Wed May 4 15:08:48 1988 --- Amiga:polyself.c Thu Aug 4 13:04:55 1988 *************** *** 45,49 if (!rn2(10)) flags.female = !flags.female; tmp = u.uhpmax; ! tmp2 = u.ulevel; u.usym = '@'; prme(); --- 45,49 ----- if (!rn2(10)) flags.female = !flags.female; tmp = u.uhpmax; ! if (!(tmp2 = u.ulevel)) tmp2 = 1; /* Seems this happened once */ u.usym = '@'; prme(); *************** *** 50,54 u.mtimedone = u.mh = u.mhmax = 0; u.ulevel = u.ulevel-2+rn2(5); ! if (u.ulevel > 127 || u.ulevel == 0) u.ulevel = 1; if (u.ulevel > 14) u.ulevel = 14; if (u.ulevel == 1) u.uexp = rnd(10); --- 50,54 ----- u.mtimedone = u.mh = u.mhmax = 0; u.ulevel = u.ulevel-2+rn2(5); ! if (u.ulevel > 127 || u.ulevel <= 0) u.ulevel = 1; if (u.ulevel > 14) u.ulevel = 14; if (u.ulevel == 1) u.uexp = rnd(10); *************** *** 76,81 #ifdef BVH if(Polymorph_control) { ! u.uhp = (u.uhp <= 0) ? 1 : u.uhp; ! u.uhpmax = (u.uhpmax <= 0) ? 1 : u.uhpmax; } else { #endif --- 76,81 ----- #ifdef BVH if(Polymorph_control) { ! if (u.uhp <= 0) u.uhp = 1; ! if (u.uhpmax <= 0) u.uhpmax = 1; } else { #endif *************** *** 162,166 else if (uarmu) { pline("The transformation causes you to tear out of your shirt!"); ! if (uarmu) useup(uarmu); } #endif --- 162,166 ----- else if (uarmu) { pline("The transformation causes you to tear out of your shirt!"); ! /*if (uarmu)*/ useup(uarmu); } #endif diff -bc2 pray.c Amiga:pray.c *** pray.c Wed May 4 15:08:54 1988 --- Amiga:pray.c Sun Jul 24 16:53:07 1988 *************** *** 405,409 } #ifdef KAA ! if(uwep && (uwep->olet == WEAPON_SYM)) { if (uwep->cursed) { uwep->cursed=0; --- 405,409 ----- } #ifdef KAA ! if(uwep->olet == WEAPON_SYM) { if (uwep->cursed) { uwep->cursed=0; diff -bc2 pri.c Amiga:pri.c *** pri.c Wed May 4 15:08:54 1988 --- Amiga:pri.c Sun Jul 24 17:07:24 1988 *************** *** 19,23 swallowed() { ! char *ulook = "|@|"; ulook[1] = u.usym; --- 19,23 ----- swallowed() { ! static char ulook[] = "|@|"; /*OIS*/ ulook[1] = u.usym; *************** *** 24,27 cls(); curs(u.ux-1, u.uy+1); fputs("/-\\", stdout); curx = u.ux+2; --- 24,30 ----- cls(); curs(u.ux-1, u.uy+1); + #ifdef stdout_puts /* Defined when not via normal files */ + stdout_puts("/-\\"); /* OIS, for AMIGA */ + #else fputs("/-\\", stdout); #endif *************** *** 25,28 curs(u.ux-1, u.uy+1); fputs("/-\\", stdout); curx = u.ux+2; curs(u.ux-1, u.uy+2); --- 28,32 ----- #else fputs("/-\\", stdout); + #endif curx = u.ux+2; curs(u.ux-1, u.uy+2); *************** *** 27,30 curx = u.ux+2; curs(u.ux-1, u.uy+2); fputs(ulook, stdout); curx = u.ux+2; --- 31,37 ----- curx = u.ux+2; curs(u.ux-1, u.uy+2); + #ifdef stdout_puts + stdout_puts(ulook); /* for AMIGA */ + #else fputs(ulook, stdout); #endif *************** *** 28,31 curs(u.ux-1, u.uy+2); fputs(ulook, stdout); curx = u.ux+2; curs(u.ux-1, u.uy+3); --- 35,39 ----- #else fputs(ulook, stdout); + #endif curx = u.ux+2; curs(u.ux-1, u.uy+3); *************** *** 30,33 curx = u.ux+2; curs(u.ux-1, u.uy+3); fputs("\\-/", stdout); curx = u.ux+2; --- 38,44 ----- curx = u.ux+2; curs(u.ux-1, u.uy+3); + #ifdef stdout_puts + stdout_puts("\\-/"); /* for AMIGA */ + #else fputs("\\-/", stdout); #endif *************** *** 31,34 curs(u.ux-1, u.uy+3); fputs("\\-/", stdout); curx = u.ux+2; u.udispl = 1; --- 42,46 ----- #else fputs("\\-/", stdout); + #endif curx = u.ux+2; u.udispl = 1; *************** *** 130,134 if(!Invisible) { levl[(u.udisx = u.ux)][(u.udisy = u.uy)].scrsym = u.usym; ! levl[u.udisx][u.udisy].seen = 1; u.udispl = 1; } else u.udispl = 0; --- 142,146 ----- if(!Invisible) { levl[(u.udisx = u.ux)][(u.udisy = u.uy)].scrsym = u.usym; ! RM_SET_SEEN(levl[u.udisx][u.udisy]); u.udispl = 1; } else u.udispl = 0; *************** *** 140,144 /* This nonsense should disappear soon --------------------------------- */ ! #if defined(DGK) && !defined(MSDOSCOLOR) /* I don't know DEC Rainbows, but if HILITE_COLOR is applicable, * the !defined(HILITE_COLOR) will have to be compensated for. --- 152,163 ----- /* This nonsense should disappear soon --------------------------------- */ ! /* #if defined(DGK) && !defined(MSDOSCOLOR) */ ! #ifdef DGK ! # define XXX ! #endif ! #ifdef MSDOSCOLOR ! # undef XXX ! #endif ! #ifdef XXX /* I don't know DEC Rainbows, but if HILITE_COLOR is applicable, * the !defined(HILITE_COLOR) will have to be compensated for. *************** *** 151,156 for(y = 0; y < ROWNO; y++) for(x = 0; x < COLNO; x++) ! if((room = &levl[x][y])->new) { ! room->new = 0; at(x,y,room->scrsym); } else if(room->seen) --- 170,175 ----- for(y = 0; y < ROWNO; y++) for(x = 0; x < COLNO; x++) ! if((room = &levl[x][y]), RM_NEW(*room)) { ! RM_CLR_NEW(*room); at(x,y,room->scrsym); } else if(RM_SEEN(*room)) *************** *** 154,158 room->new = 0; at(x,y,room->scrsym); ! } else if(room->seen) at(x,y,room->scrsym); multipleAts = FALSE; --- 173,177 ----- RM_CLR_NEW(*room); at(x,y,room->scrsym); ! } else if(RM_SEEN(*room)) at(x,y,room->scrsym); multipleAts = FALSE; *************** *** 169,174 memset(buf, ' ', COLNO); for(x = 0, start = -1, end = -1; x < COLNO; x++) ! if((room = &levl[x][y])->new) { ! room->new = 0; buf[x] = room->scrsym; if (start < 0) --- 188,193 ----- memset(buf, ' ', COLNO); for(x = 0, start = -1, end = -1; x < COLNO; x++) ! if((room = &levl[x][y]), RM_NEW(*room)) { ! RM_CLR_NEW(*room); buf[x] = room->scrsym; if (start < 0) *************** *** 175,179 start = x; end = x; ! } else if(room->seen) { buf[x] = room->scrsym; if (start < 0) --- 194,198 ----- start = x; end = x; ! } else if(RM_SEEN(*room)) { buf[x] = room->scrsym; if (start < 0) *************** *** 184,187 buf[end + 1] = '\0'; curs(start, y + 2); fputs(buf + start, stdout); curx = end + 1; --- 203,209 ----- buf[end + 1] = '\0'; curs(start, y + 2); + #ifdef stdout_puts + stdout_puts(buf + start); + #else fputs(buf + start, stdout); #endif *************** *** 185,188 curs(start, y + 2); fputs(buf + start, stdout); curx = end + 1; } --- 207,211 ----- #else fputs(buf + start, stdout); + #endif curx = end + 1; } *************** *** 192,197 for(y = 0; y < ROWNO; y++) for(x = 0; x < COLNO; x++) ! if((room = &levl[x][y])->new) { ! room->new = 0; at(x,y,room->scrsym); } else if(room->seen) --- 215,220 ----- for(y = 0; y < ROWNO; y++) for(x = 0; x < COLNO; x++) ! if((room = &levl[x][y]), RM_NEW(*room)) { ! RM_CLR_NEW(*room); at(x,y,room->scrsym); } else if (RM_SEEN(*room)) *************** *** 195,199 room->new = 0; at(x,y,room->scrsym); ! } else if(room->seen) at(x,y,room->scrsym); #endif --- 218,222 ----- RM_CLR_NEW(*room); at(x,y,room->scrsym); ! } else if (RM_SEEN(*room)) at(x,y,room->scrsym); #endif *************** *** 198,201 at(x,y,room->scrsym); #endif scrlx = COLNO; scrly = ROWNO; --- 221,225 ----- at(x,y,room->scrsym); #endif + #undef XXX scrlx = COLNO; scrly = ROWNO; *************** *** 231,236 if(y < ROWNO) { for(x = xmin; x < COLNO; x++) { ! if((room = &levl[x][y])->new) { ! room->new = 0; at(x,y,room->scrsym); } else --- 255,260 ----- if(y < ROWNO) { for(x = xmin; x < COLNO; x++) { ! if((room = &levl[x][y]), RM_NEW(*room)) { ! RM_CLR_NEW(*room); at(x,y,room->scrsym); } else *************** *** 235,239 at(x,y,room->scrsym); } else ! if(room->seen) at(x,y,room->scrsym); } --- 259,263 ----- at(x,y,room->scrsym); } else ! if (RM_SEEN(*room)) at(x,y,room->scrsym); } *************** *** 294,298 if(mtmp->data->mlet == ';') mtmp->minvis = (u.ustuck != mtmp && ! levl[mtmp->mx][mtmp->my].typ == POOL); pmon(mtmp); #ifndef NOWORM --- 318,322 ----- if(mtmp->data->mlet == ';') mtmp->minvis = (u.ustuck != mtmp && ! RM_TYP(levl[mtmp->mx][mtmp->my]) == POOL); pmon(mtmp); #ifndef NOWORM *************** *** 348,353 for(y = scrly; y <= scrhy; y++) for(x = scrlx; x <= scrhx; x++) ! if((room = &levl[x][y])->new) { ! room->new = 0; at(x,y,room->scrsym); } --- 372,377 ----- for(y = scrly; y <= scrhy; y++) for(x = scrlx; x <= scrhx; x++) ! if((room = &levl[x][y]), RM_NEW(*room)) { ! RM_CLR_NEW(*room); at(x,y,room->scrsym); } *************** *** 383,387 u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax : u.uhpmax, u.uen, u.uenmax, u.uac); ! # else u.uhp, u.uhpmax, u.uen, u.uenmax, u.uac); # endif --- 407,411 ----- u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax : u.uhpmax, u.uen, u.uenmax, u.uac); ! # else /* !KAA */ u.uhp, u.uhpmax, u.uen, u.uenmax, u.uac); # endif /* KAA */ *************** *** 385,390 # else u.uhp, u.uhpmax, u.uen, u.uenmax, u.uac); ! # endif ! # else "Level %-2d Gold %-5lu Hp %3d(%d) Ac %-2d ", dlevel, u.ugold, --- 409,414 ----- # else /* !KAA */ u.uhp, u.uhpmax, u.uen, u.uenmax, u.uac); ! # endif /* KAA */ ! # else /* !SPELLS */ "Level %-2d Gold %-5lu Hp %3d(%d) Ac %-2d ", dlevel, u.ugold, *************** *** 392,396 u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax : u.uhpmax, u.uac); ! # else u.uhp, u.uhpmax, u.uac); # endif --- 416,420 ----- u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax : u.uhpmax, u.uac); ! # else /* !KAA */ u.uhp, u.uhpmax, u.uac); # endif /* KAA */ *************** *** 394,400 # else u.uhp, u.uhpmax, u.uac); ! # endif ! # endif ! #else # ifdef SPELLS "Level %-2d Hp %3d(%d) Energy %3d(%d) Ac %-2d ", --- 418,424 ----- # else /* !KAA */ u.uhp, u.uhpmax, u.uac); ! # endif /* KAA */ ! # endif /* SPELLS */ ! #else /* !GOLD_ON_BOTL */ # ifdef SPELLS "Level %-2d Hp %3d(%d) Energy %3d(%d) Ac %-2d ", *************** *** 403,407 u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax, u.uhpmax, u.uen, u.uenmax, u.uac); ! # else u.uhp, u.uhpmax, u.uen, u.uenmax, u.uac); # endif --- 427,431 ----- u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax, u.uhpmax, u.uen, u.uenmax, u.uac); ! # else /* !KAA */ u.uhp, u.uhpmax, u.uen, u.uenmax, u.uac); # endif /* KAA */ *************** *** 405,410 # else u.uhp, u.uhpmax, u.uen, u.uenmax, u.uac); ! # endif ! # else "Level %-2d Hp %3d(%d) Ac %-2d ", dlevel, --- 429,434 ----- # else /* !KAA */ u.uhp, u.uhpmax, u.uen, u.uenmax, u.uac); ! # endif /* KAA */ ! # else /* !SPELLS */ "Level %-2d Hp %3d(%d) Ac %-2d ", dlevel, *************** *** 412,416 u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax, u.uhpmax, u.uac); ! # else u.uhp, u.uhpmax, u.uac); # endif --- 436,440 ----- u.mtimedone ? u.mh : u.uhp, u.mtimedone ? u.mhmax, u.uhpmax, u.uac); ! # else /* !KAA */ u.uhp, u.uhpmax, u.uac); # endif /* KAA */ *************** *** 414,420 # else u.uhp, u.uhpmax, u.uac); ! # endif ! # endif ! #endif #ifdef KAA if (u.mtimedone) --- 438,444 ----- # else /* !KAA */ u.uhp, u.uhpmax, u.uac); ! # endif /* KAA */ ! # endif /* SPELLS */ ! #endif /* GOLD_ON_BOTL */ #ifdef KAA if (u.mtimedone) *************** *** 463,467 } ! #if defined(WAN_PROBING) || defined(KAA) mstatusline(mtmp) register struct monst *mtmp; { pline("Status of %s: ", monnam(mtmp)); --- 487,499 ----- } ! /* #if defined(WAN_PROBING) || defined(KAA) */ ! #ifdef WAN_PROBING ! # define XXX ! #endif ! #ifdef KAA ! # define XXX ! #endif ! ! #ifdef XXX mstatusline(mtmp) register struct monst *mtmp; { pline("Status of %s: ", monnam(mtmp)); *************** *** 485,488 } #endif cls(){ --- 517,521 ----- } #endif + #undef XXX cls(){ diff -bc2 rip.c Amiga:rip.c *** rip.c Wed May 4 15:09:00 1988 --- Amiga:rip.c Wed Jul 27 20:41:10 1988 *************** *** 43,48 !strncmp(killer, "the ", 4) ? "" : !strcmp(killer, "starvation") ? "" : ! !strncmp(killer, "Mr.") ? "" : ! !strncmp(killer, "Ms.") ? "" : #ifdef STOOGES !strcmp(killer, "Larry") ? "" : --- 43,48 ----- !strncmp(killer, "the ", 4) ? "" : !strcmp(killer, "starvation") ? "" : ! !strncmp(killer, "Mr.", 3) ? "" : ! !strncmp(killer, "Ms.", 3) ? "" : #ifdef STOOGES !strcmp(killer, "Larry") ? "" : *************** *** 84,87 } center(line, text) int line; char *text; { register char *ip,*op; --- 84,91 ----- } + /* + * dirty to write into unnamed literal strings... + * they might be in a read-only code-segment! (OIS) + */ center(line, text) int line; char *text; { register char *ip,*op; diff -bc2 rm.h Amiga:rm.h *** rm.h Wed May 4 15:09:00 1988 --- Amiga:rm.h Sun Jul 24 23:45:54 1988 *************** *** 116,120 #define ERRCHAR ']' ! #define MAXPCHARS 17 /* maximum number of mapped characters */ #define IS_CORNER(x) ((x) == TLCORN_SYM || (x) == TRCORN_SYM \ --- 116,120 ----- #define ERRCHAR ']' ! #define MAXPCHARS 18 /* maximum number of mapped characters */ #define IS_CORNER(x) ((x) == TLCORN_SYM || (x) == TRCORN_SYM \ *************** *** 126,130 * the size of temporary files and save files. */ - #ifdef MSDOS /* Save disk space by using unsigned char's instead of unsigned ints */ --- 126,129 ----- * the size of temporary files and save files. */ /* Save disk space by using unsigned char's instead of unsigned ints */ *************** *** 129,132 /* Save disk space by using unsigned char's instead of unsigned ints */ struct rm { uchar scrsym; --- 128,132 ----- /* Save disk space by using unsigned char's instead of unsigned ints */ + #ifdef BITFIELD_BUG struct rm { uchar scrsym; *************** *** 131,134 struct rm { uchar scrsym; unsigned typ:5; unsigned new:1; --- 131,176 ----- struct rm { uchar scrsym; + uchar flags; + /* unsigned short typ:5; + unsigned short new:1; + unsigned short seen:1; + unsigned short lit:1; */ + }; + + # define RM_TYPM 0x1F + # define RM_NEWM 0x20 + # define RM_SEENM 0x40 + # define RM_LITM 0x80 + + /* The first macro evaluates room twice... */ + # define RM_SET_TYP(room, type) ((room).flags = ( (room).flags & ~RM_TYPM ) | (type)) + # define RM_TYP(room) ((room).flags & RM_TYPM) + # define RM_SET_NEW(room) ((room).flags |= RM_NEWM) + # define RM_CLR_NEW(room) ((room).flags &= ~RM_NEWM) + # define RM_NEW(room) ((room).flags & RM_NEWM) + # define RM_SET_SEEN(room) ((room).flags |= RM_SEENM) + # define RM_CLR_SEEN(room) ((room).flags &= ~RM_SEENM) + # define RM_SEEN(room) ((room).flags & RM_SEENM) + # define RM_SET_LIT(room) ((room).flags |= RM_LITM) + # define RM_CLR_LIT(room) ((room).flags &= ~RM_LITM) + # define RM_LIT(room) ((room).flags & RM_LITM) + + #else /* no BITFIELD_BUG */ + + # define RM_SET_TYP(room, type) ((room).typ = type) + # define RM_TYP(room) ((room).typ) + # define RM_SET_NEW(room) ((room).new = 1) + # define RM_CLR_NEW(room) ((room).new = 0) + # define RM_NEW(room) ((room).new) + # define RM_SET_SEEN(room) ((room).seen = 1) + # define RM_CLR_SEEN(room) ((room).seen = 0) + # define RM_SEEN(room) ((room).seen) + # define RM_SET_LIT(room) ((room).lit = 1) + # define RM_CLR_LIT(room) ((room).lit = 0) + # define RM_LIT(room) ((room).lit) + + # ifdef MSDOS + struct rm { + uchar scrsym; unsigned typ:5; unsigned new:1; *************** *** 136,140 unsigned lit:1; }; ! #else struct rm { char scrsym; --- 178,182 ----- unsigned lit:1; }; ! # else struct rm { char scrsym; *************** *** 144,148 Bitfield(lit,1); }; ! #endif /* MSDOS /**/ extern struct rm levl[COLNO][ROWNO]; --- 186,191 ----- Bitfield(lit,1); }; ! # endif /* MSDOS /**/ ! #endif /* BITFIELD_BUG */ extern struct rm levl[COLNO][ROWNO]; diff -bc2 rnd.c Amiga:rnd.c No differences encountered diff -bc2 rumors.c Amiga:rumors.c No differences encountered diff -bc2 search.c Amiga:search.c *** search.c Fri Jan 22 09:08:44 1988 --- Amiga:search.c Mon Jul 11 16:26:24 1988 *************** *** 16,23 if(u.uswallow) return(0); ! for(lx = u.ux; (num = levl[lx-1][u.uy].typ) && num != CORR; lx--) ; ! for(hx = u.ux; (num = levl[hx+1][u.uy].typ) && num != CORR; hx++) ; ! for(ly = u.uy; (num = levl[u.ux][ly-1].typ) && num != CORR; ly--) ; ! for(hy = u.uy; (num = levl[u.ux][hy+1].typ) && num != CORR; hy++) ; num = 0; for(zy = ly; zy <= hy; zy++) --- 16,23 ----- if(u.uswallow) return(0); ! for(lx = u.ux; (num = RM_TYP(levl[lx-1][u.uy])) && num != CORR; lx--) ; ! for(hx = u.ux; (num = RM_TYP(levl[hx+1][u.uy])) && num != CORR; hx++) ; ! for(ly = u.uy; (num = RM_TYP(levl[u.ux][ly-1])) && num != CORR; ly--) ; ! for(hy = u.uy; (num = RM_TYP(levl[u.ux][hy+1])) && num != CORR; hy++) ; num = 0; for(zy = ly; zy <= hy; zy++) *************** *** 23,28 for(zy = ly; zy <= hy; zy++) for(zx = lx; zx <= hx; zx++) { ! if(levl[zx][zy].typ == SDOOR) { ! levl[zx][zy].typ = DOOR; atl(zx, zy, DOOR_SYM); num++; --- 23,28 ----- for(zy = ly; zy <= hy; zy++) for(zx = lx; zx <= hx; zx++) { ! if(RM_TYP(levl[zx][zy]) == SDOOR) { ! RM_SET_TYP(levl[zx][zy], DOOR); atl(zx, zy, DOOR_SYM); num++; *************** *** 27,32 atl(zx, zy, DOOR_SYM); num++; ! } else if(levl[zx][zy].typ == SCORR) { ! levl[zx][zy].typ = CORR; atl(zx, zy, CORR_SYM); num++; --- 27,32 ----- atl(zx, zy, DOOR_SYM); num++; ! } else if(RM_TYP(levl[zx][zy]) == SCORR) { ! RM_SET_TYP(levl[zx][zy], CORR); atl(zx, zy, CORR_SYM); num++; *************** *** 67,71 for(x = u.ux-1; x < u.ux+2; x++) for(y = u.uy-1; y < u.uy+2; y++) if(x != u.ux || y != u.uy) { ! if(levl[x][y].typ == SDOOR) { if(rn2(7-fund)) continue; levl[x][y].typ = DOOR; --- 67,71 ----- for(x = u.ux-1; x < u.ux+2; x++) for(y = u.uy-1; y < u.uy+2; y++) if(x != u.ux || y != u.uy) { ! if(RM_TYP(levl[x][y]) == SDOOR) { if(rn2(7-fund)) continue; RM_SET_TYP(levl[x][y], DOOR); *************** *** 69,74 if(levl[x][y].typ == SDOOR) { if(rn2(7-fund)) continue; ! levl[x][y].typ = DOOR; ! levl[x][y].seen = 0; /* force prl */ prl(x,y); nomul(0); --- 69,74 ----- if(RM_TYP(levl[x][y]) == SDOOR) { if(rn2(7-fund)) continue; ! RM_SET_TYP(levl[x][y], DOOR); ! RM_CLR_SEEN(levl[x][y]); /* force prl */ prl(x,y); nomul(0); *************** *** 73,77 prl(x,y); nomul(0); ! } else if(levl[x][y].typ == SCORR) { if(rn2(7-fund)) continue; levl[x][y].typ = CORR; --- 73,77 ----- prl(x,y); nomul(0); ! } else if(RM_TYP(levl[x][y]) == SCORR) { if(rn2(7-fund)) continue; RM_SET_TYP(levl[x][y], CORR); *************** *** 75,80 } else if(levl[x][y].typ == SCORR) { if(rn2(7-fund)) continue; ! levl[x][y].typ = CORR; ! levl[x][y].seen = 0; /* force prl */ prl(x,y); nomul(0); --- 75,80 ----- } else if(RM_TYP(levl[x][y]) == SCORR) { if(rn2(7-fund)) continue; ! RM_SET_TYP(levl[x][y], CORR); ! RM_CLR_SEEN(levl[x][y]); /* force prl */ prl(x,y); nomul(0); diff -bc2 sit.c Amiga:sit.c *** sit.c Wed May 4 15:09:08 1988 --- Amiga:sit.c Sun Jul 24 18:14:59 1988 *************** *** 17,21 pline("You are floating in the air, you can't sit!"); ! } else if(IS_THRONE(levl[u.ux][u.uy].typ)) { pline("As you sit in the opulent throne"); --- 17,21 ----- pline("You are floating in the air, you can't sit!"); ! } else if(IS_THRONE(RM_TYP(levl[u.ux][u.uy]))) { pline("As you sit in the opulent throne"); *************** *** 134,138 } else pline("you feel somehow out of place..."); ! if (!rn2(3) && IS_THRONE(levl[u.ux][u.uy].typ)) { pline("The throne vanishes in a puff of logic."); --- 134,138 ----- } else pline("you feel somehow out of place..."); ! if (!rn2(3) && IS_THRONE(RM_TYP(levl[u.ux][u.uy]))) { pline("The throne vanishes in a puff of logic."); *************** *** 138,142 pline("The throne vanishes in a puff of logic."); /* levl[u.ux][u.uy].scrsym = ROOM_SYM; */ ! levl[u.ux][u.uy].typ = ROOM; } --- 138,142 ----- pline("The throne vanishes in a puff of logic."); /* levl[u.ux][u.uy].scrsym = ROOM_SYM; */ ! RM_SET_TYP(levl[u.ux][u.uy], ROOM); } *************** *** 146,150 #endif /* NEWCLASS /**/ ! #if defined(NEWCLASS) || defined(PRAYERS) || defined(HARD) rndcurse() { /* curse a few inventory items at random! */ --- 146,161 ----- #endif /* NEWCLASS /**/ ! /* #if defined(NEWCLASS) || defined(PRAYERS) || defined(HARD) */ ! #ifdef NEWCLASS ! # define XXX ! #endif ! #ifdef PRAYERS ! # define XXX ! #endif ! #ifdef HARD ! # define XXX ! #endif ! ! #ifdef XXX rndcurse() { /* curse a few inventory items at random! */ diff -bc2 spell.h Amiga:spell.h No differences encountered diff -bc2 steal.c Amiga:steal.c No differences encountered diff -bc2 timeout.c Amiga:timeout.c No differences encountered diff -bc2 topl.c Amiga:topl.c No differences encountered diff -bc2 track.c Amiga:track.c No differences encountered diff -bc2 vault.c Amiga:vault.c *** vault.c Fri Jan 22 09:08:50 1988 --- Amiga:vault.c Mon Jul 11 16:37:50 1988 *************** *** 47,52 return; crm = &levl[fcx][fcy]; ! crm->typ = EGD->fakecorr[fcbeg].ftyp; ! if(!crm->typ) crm->seen = 0; newsym(fcx,fcy); EGD->fcbeg++; --- 47,52 ----- return; crm = &levl[fcx][fcy]; ! RM_SET_TYP(*crm, EGD->fakecorr[fcbeg].ftyp); ! if(!RM_TYP(*crm)) RM_CLR_SEEN(*crm); newsym(fcx,fcy); EGD->fcbeg++; *************** *** 96,100 x = u.ux+dd; if(x < 0 || x > COLNO-1) continue; ! if(levl[x][y].typ == CORR) goto fnd; } } --- 96,100 ----- x = u.ux+dd; if(x < 0 || x > COLNO-1) continue; ! if(RM_TYP(levl[x][y]) == CORR) goto fnd; } } *************** *** 103,107 tele(); return; ! fnd: gx = x; gy = y; --- 103,107 ----- tele(); return; ! fnd: gx = x; gy = y; *************** *** 108,112 /* next find a good place for a door in the wall */ x = u.ux; y = u.uy; ! while(levl[x][y].typ == ROOM) { register int dx,dy; --- 108,112 ----- /* next find a good place for a door in the wall */ x = u.ux; y = u.uy; ! while(RM_TYP(levl[x][y]) == ROOM) { register int dx,dy; *************** *** 156,161 EGD->fakecorr[0].fx = x; EGD->fakecorr[0].fy = y; ! EGD->fakecorr[0].ftyp = levl[x][y].typ; ! levl[x][y].typ = DOOR; EGD->fcend = 1; } --- 156,161 ----- EGD->fakecorr[0].fx = x; EGD->fakecorr[0].fy = y; ! EGD->fakecorr[0].ftyp = RM_TYP(levl[x][y]); ! RM_SET_TYP(levl[x][y], DOOR); EGD->fcend = 1; } *************** *** 182,186 if(nx == x || ny == y) if(nx != x || ny != y) if(isok(nx,ny)) ! if(!IS_WALL(typ = (crm = &levl[nx][ny])->typ) && typ != POOL) { register int i; for(i = EGD->fcbeg; i < EGD->fcend; i++) --- 182,186 ----- if(nx == x || ny == y) if(nx != x || ny != y) if(isok(nx,ny)) ! if(!IS_WALL(typ = RM_TYP(*(crm = &levl[nx][ny]))) && typ != POOL) { register int i; for(i = EGD->fcbeg; i < EGD->fcend; i++) *************** *** 193,197 EGD->gddone = 1; if(ACCESSIBLE(typ)) goto newpos; ! crm->typ = (typ == SCORR) ? CORR : DOOR; goto proceed; } --- 193,197 ----- EGD->gddone = 1; if(ACCESSIBLE(typ)) goto newpos; ! RM_SET_TYP(*crm, (typ == SCORR) ? CORR : DOOR); goto proceed; } *************** *** 196,200 goto proceed; } ! nextnxy: ; } nx = x; --- 196,200 ----- goto proceed; } ! nextnxy: ; } nx = x; *************** *** 206,210 if(abs(gx-x) >= abs(gy-y)) nx += dx; else ny += dy; ! while((typ = (crm = &levl[nx][ny])->typ) != 0) { /* in view of the above we must have IS_WALL(typ) or typ == POOL */ /* must be a wall here */ --- 206,210 ----- if(abs(gx-x) >= abs(gy-y)) nx += dx; else ny += dy; ! while((typ = RM_TYP(*(crm = &levl[nx][ny]))) != 0) { /* in view of the above we must have IS_WALL(typ) or typ == POOL */ /* must be a wall here */ *************** *** 211,215 if(isok(nx+nx-x,ny+ny-y) && typ != POOL && #ifdef RPH ! SPACE_POS(levl[nx+nx-x][ny+ny-y].typ)){ #else ZAP_POS(levl[nx+nx-x][ny+ny-y].typ)){ --- 211,215 ----- if(isok(nx+nx-x,ny+ny-y) && typ != POOL && #ifdef RPH ! SPACE_POS(RM_TYP(levl[nx+nx-x][ny+ny-y]))){ #else ZAP_POS(RM_TYP(levl[nx+nx-x][ny+ny-y]))){ *************** *** 213,217 SPACE_POS(levl[nx+nx-x][ny+ny-y].typ)){ #else ! ZAP_POS(levl[nx+nx-x][ny+ny-y].typ)){ #endif crm->typ = DOOR; --- 213,217 ----- SPACE_POS(RM_TYP(levl[nx+nx-x][ny+ny-y]))){ #else ! ZAP_POS(RM_TYP(levl[nx+nx-x][ny+ny-y]))){ #endif RM_SET_TYP(*crm, DOOR); *************** *** 215,219 ZAP_POS(levl[nx+nx-x][ny+ny-y].typ)){ #endif ! crm->typ = DOOR; goto proceed; } --- 215,219 ----- ZAP_POS(RM_TYP(levl[nx+nx-x][ny+ny-y]))){ #endif ! RM_SET_TYP(*crm, DOOR); goto proceed; } *************** *** 227,231 } /* I don't like this, but ... */ ! crm->typ = DOOR; goto proceed; } --- 227,231 ----- } /* I don't like this, but ... */ ! RM_SET_TYP(*crm, DOOR); goto proceed; } *************** *** 230,234 goto proceed; } ! crm->typ = CORR; proceed: if(cansee(nx,ny)) { --- 230,234 ----- goto proceed; } ! RM_SET_TYP(*crm, CORR); proceed: if(cansee(nx,ny)) { diff -bc2 version.c Amiga:version.c *** version.c Wed May 4 15:09:22 1988 --- Amiga:version.c Sun Jul 24 22:06:54 1988 *************** *** 8,12 #ifdef BETA ! pline("%s Net%s Beta Version %s - last build %s.", #else pline("%s Net%s Version %s - last build %s.", --- 8,12 ----- #ifdef BETA ! pline("%s Net%s Beta Version %s - last built %s.", #else pline("%s Net%s Version %s - last built %s.", *************** *** 10,14 pline("%s Net%s Beta Version %s - last build %s.", #else ! pline("%s Net%s Version %s - last build %s.", #endif #ifdef UNIX --- 10,14 ----- pline("%s Net%s Beta Version %s - last built %s.", #else ! pline("%s Net%s Version %s - last built %s.", #endif #ifdef UNIX *************** *** 16,19 #endif #ifdef MSDOS "PC" #endif --- 16,22 ----- #endif #ifdef MSDOS + # ifdef AMIGA + "Amiga" + # else "PC" # endif *************** *** 17,20 #ifdef MSDOS "PC" #endif #ifdef QUEST --- 20,24 ----- # else "PC" + # endif #endif #ifdef QUEST *************** *** 41,44 #endif #ifdef MSDOS "PC" #endif --- 45,51 ----- #endif #ifdef MSDOS + # ifdef AMIGA + "Amiga" + # else "PC" # endif *************** *** 42,45 #ifdef MSDOS "PC" #endif #ifdef QUEST --- 49,53 ----- # else "PC" + # endif #endif #ifdef QUEST *************** *** 75,78 pg_line(" Steve Linhart Bruce Mewborne Janet Walz"); pg_line(" and... The Unknown Hacker"); set_pager(1); return(0); --- 83,91 ----- pg_line(" Steve Linhart Bruce Mewborne Janet Walz"); pg_line(" and... The Unknown Hacker"); + + #ifdef AMIGA + pg_line(""); + pg_line("Amiga NetHack was ported for you by Olaf Seibert (KosmoSoft)."); + #endif set_pager(1); return(0); diff -bc2 wield.c Amiga:wield.c No differences encountered diff -bc2 wizard.c Amiga:wizard.c *** wizard.c Wed May 4 15:09:22 1988 --- Amiga:wizard.c Sun Jul 24 22:16:12 1988 *************** *** 10,14 extern struct obj *carrying(), *mksobj_at(); ! #if defined(HARD) || defined(DGKMOD) # ifdef SAC char nasties[] = "cdDeImoPTUVwxXz3&,:;"; --- 10,22 ----- extern struct obj *carrying(), *mksobj_at(); ! /* #if defined(HARD) || defined(DGKMOD)*/ ! #ifdef HARD ! # define XXX ! #endif ! #ifdef DKGMOD ! # define XXX ! #endif ! ! #ifdef XXX # ifdef SAC char nasties[] = "cdDeImoPTUVwxXz3&,:;"; *************** *** 20,23 #define WIZSHOT 6 /* one chance in WIZSHOT that wizard will try magic */ #endif #define BOLT_LIM 8 /* from this distance D and 1 will try to hit you */ --- 28,32 ----- #define WIZSHOT 6 /* one chance in WIZSHOT that wizard will try magic */ #endif + #undef XXX #define BOLT_LIM 8 /* from this distance D and 1 will try to hit you */ *************** *** 172,176 miss(oclass->oc_name, mtmp); else { ! #endif hit(oclass->oc_name, mtmp, exclam(damage)); mtmp->mhp -= damage; --- 181,185 ----- miss(oclass->oc_name, mtmp); else { ! #endif /* KAA */ hit(oclass->oc_name, mtmp, exclam(damage)); mtmp->mhp -= damage; *************** *** 192,196 mtmp->mblinded = 127; } else ! # endif if(obj->otyp == ENORMOUS_ROCK) { mksobj_at(ENORMOUS_ROCK, bhitpos.x, bhitpos.y); --- 201,205 ----- mtmp->mblinded = 127; } else ! # endif /* KOPS */ if(obj->otyp == ENORMOUS_ROCK) { mksobj_at(ENORMOUS_ROCK, bhitpos.x, bhitpos.y); *************** *** 199,203 } } ! #endif } if (bhitpos.x == u.ux && bhitpos.y == u.uy) { --- 208,212 ----- } } ! #endif /* KAA */ } if (bhitpos.x == u.ux && bhitpos.y == u.uy) { *************** *** 209,213 /* Cream pies must disappear if they hit or miss. */ { int hit, blindinc, thitu(); ! if (!(hit = thitu(8, (obj->otyp != CREAM_PIE) ? rnd(oclass->wldam) : 0, oclass->oc_name)) && obj->otyp != CREAM_PIE # else --- 218,223 ----- /* Cream pies must disappear if they hit or miss. */ { int hit, blindinc, thitu(); ! if (!(hit = thitu(8, (obj->otyp != CREAM_PIE) ? ! rnd(oclass->wldam) : 0, oclass->oc_name)) && obj->otyp != CREAM_PIE # else *************** *** 222,226 stackobj(fobj); } ! #if defined(KAA) && defined(KOPS) if(hit && obj->otyp == CREAM_PIE) { if(!Blind) pline("Yeech! You've been creamed."); --- 232,238 ----- stackobj(fobj); } ! /* #if defined(KAA) && defined(KOPS) */ ! #ifdef KAA ! # ifdef KOPS if(hit && obj->otyp == CREAM_PIE) { if(!Blind) pline("Yeech! You've been creamed."); *************** *** 234,237 } } #endif range = 0; --- 246,250 ----- } } + # endif #endif range = 0; *************** *** 239,243 tmp_at(bhitpos.x, bhitpos.y); #ifdef SINKS ! if(IS_SINK(levl[bhitpos.x][bhitpos.y].typ)) break; /* thrown objects fall on sink */ #endif --- 252,256 ----- tmp_at(bhitpos.x, bhitpos.y); #ifdef SINKS ! if(IS_SINK(RM_TYP(levl[bhitpos.x][bhitpos.y]))) break; /* thrown objects fall on sink */ #endif *************** *** 275,279 for (x = mtmp->mx, y = mtmp->my; x != u.ux || y != u.uy; x += sgn(tx), y += sgn(ty)) ! if (!ACCESSIBLE(levl[x][y].typ)) return(1); --- 288,292 ----- for (x = mtmp->mx, y = mtmp->my; x != u.ux || y != u.uy; x += sgn(tx), y += sgn(ty)) ! if (!ACCESSIBLE(RM_TYP(levl[x][y]))) return(1); diff -bc2 worm.c Amiga:worm.c No differences encountered diff -bc2 worn.c Amiga:worn.c No differences encountered diff -bc2 wseg.h Amiga:wseg.h No differences encountered diff -bc2 you.h Amiga:you.h *** you.h Wed May 4 15:09:24 1988 --- Amiga:you.h Tue Jul 26 14:49:08 1988 *************** *** 89,93 int mh, mhmax, mtimedone, umonnum; /* for polymorph-self */ schar mstr, mstrmax; /* for saving ustr/ustrmax */ ! #if defined(KOPS) && defined(KAA) unsigned ucreamed; #endif --- 89,95 ----- int mh, mhmax, mtimedone, umonnum; /* for polymorph-self */ schar mstr, mstrmax; /* for saving ustr/ustrmax */ ! /* #if defined(KOPS) && defined(KAA) */ ! #ifdef KOPS ! # ifdef KAA unsigned ucreamed; # endif *************** *** 91,94 #if defined(KOPS) && defined(KAA) unsigned ucreamed; #endif unsigned uswallow; /* set if swallowed by a monster */ --- 93,97 ----- # ifdef KAA unsigned ucreamed; + # endif #endif unsigned uswallow; /* set if swallowed by a monster */ diff -bc2 unixmain.c Amiga:aux/unixmain.c *** unixmain.c Wed May 4 15:09:16 1988 --- Amiga:aux/unixmain.c Wed Jul 27 23:35:07 1988 *************** *** 242,246 pline("Hello %s, welcome to %s!", plname, gamename); #ifdef WIZARD ! if (wizard && dlevel == 1) # ifdef STOOGES pline ("The wiz is at %d, the medusa is at %d, and the stooges are at %d", --- 242,246 ----- pline("Hello %s, welcome to %s!", plname, gamename); #ifdef WIZARD ! if (wizard) # ifdef STOOGES pline ("The wiz is at %d, the medusa is at %d, and the stooges are at %d", diff -bc2 objnam.c Amiga:objnam.c *** objnam.c Wed May 4 15:08:40 1988 --- Amiga:objnam.c Sun Jul 24 15:56:30 1988 *************** *** 550,554 #endif p = eos(bp); ! #if defined(KOPS) && !defined(KJSMODS) if (!strcmp(p-3, "kop")) { *(p-3) = 'K'; --- 550,556 ----- #endif p = eos(bp); ! /* #if defined(KOPS) && !defined(KJSMODS) */ ! #ifdef KOPS ! # ifndef KJSMODS if (!strcmp(p-3, "kop")) { *(p-3) = 'K'; *************** *** 556,559 goto srch; } #endif for(i = 0; i < sizeof(wrpsym); i++) { --- 558,562 ----- goto srch; } + # endif #endif for(i = 0; i < sizeof(wrpsym); i++) { diff -bc2 options.c Amiga:options.c No differences encountered diff -bc2 pager.c Amiga:pager.c *** pager.c Wed May 4 15:08:44 1988 --- Amiga:pager.c Sun Jul 24 16:09:30 1988 *************** *** 9,12 #include <signal.h> #include "hack.h" extern int CO, LI; /* usually COLNO and ROWNO+2 */ extern char *CD; SHAR_EOF # End of shell archive exit 0 -- Bob Page, U of Lowell CS Dept. page@swan.ulowell.edu ulowell!page Have five nice days.