billr@saab.CNA.TEK.COM (Bill Randle) (06/06/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 10, Issue 27 Archive-name: NetHack3/Patch8i 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 9 (of 24)." # Contents: others/splitf.c patch8.03 # Wrapped by billr@saab on Mon Jun 4 15:27:20 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'others/splitf.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'others/splitf.c'\" else echo shar: Extracting \"'others/splitf.c'\" \(4920 characters\) sed "s/^X//" >'others/splitf.c' <<'END_OF_FILE' X/****************************************************************************** X* * X* File Splitter and Re-assembler * X* * X* by Pierre Martineau, 90/05/20 * X* * X* Version 1.1 * X* * X* Placed in the public domain * X* * X******************************************************************************/ X X#include <sys\types.h> X#include <sys\stat.h> X#include <string.h> X#include <stdlib.h> X#include <stdio.h> X#include <math.h> X XFILE *infile, *outfile; Xchar fname[16]; Xchar chunk_name[16]; Xint extent = 0; Xlong hunk_size; Xunsigned buflen = 0x8000; Xchar *buf = 0; X Xmain(argc, argv) Xint argc; Xchar *argv[]; X{ Xstruct stat stat_buf; Xchar *cptr; X X printf("File Splitter and Re-assembler V1.1, by Pierre Martineau, 90/05/20.\n"); X printf("This program is public domain and may be freely distributed.\n"); X if ((argc < 2) || (argc > 3)) { X printf("\nUsage: splitf file_to_split [chunk_size]\n"); X printf(" If chunk_size isn't specified, the file will be split\n"); X printf(" into two files of (approximately) equal size.\n\n"); X printf(" splitf dest_file /r\n"); X printf(" /r will re-assemble the parts back into the whole\n"); X printf(" specified by dest_file.\n"); X return; X } X X/* Extract filename from first argumemt */ X X if ((cptr = strrchr(argv[1], '\\')) == NULL) X cptr = argv[1]; X else X cptr++; X strcpy(fname, cptr); X if ((cptr = strchr(fname, '.')) != NULL) X *++cptr = '\000'; X else X strcat(fname, "."); X X if ((argc == 3) && ((strcmpi(argv[2], "-r") == 0) || (strcmpi(argv[2], "/r") == 0))) { X getbuf(); X printf("\nRe-assembling %s ...\n\n", argv[1]); X copy_hunks(argv[1]); X fclose(outfile); X freebuf(); X printf("\nDone.\n"); X } X else { X getbuf(); X if ((infile = fopen(argv[1], "rb")) == NULL) { X printf("\nCouldn't open input file!\n"); X return; X } X if (stat(argv[1], &stat_buf) != 0) { X printf("\nBad file handle!\n"); X return; X } X if (argc == 3) X hunk_size = atol(argv[2]); X else X hunk_size = (stat_buf.st_size / 2) + 1; X if (hunk_size < 1) { X printf("\nInvalid chunk size!\n"); X return; X } X printf("\nSplitting %s ...\n\n", argv[1]); X write_hunks(); X fclose(infile); X freebuf(); X printf("\nDone.\n"); X } X} X Xwrite_hunks() X{ Xlong size; Xunsigned bufsize; Xunsigned numread; X X for (;;) { X if(!next_file()) { X printf("Too many files, please specify a chunk size that\n"); X printf("will result in fewer than 1000 output files!\n"); X return; X } X if ((outfile = fopen(chunk_name, "wb")) == NULL) { X printf("Unable to create output file %s\n", chunk_name); X return; X } X size = hunk_size; X numread = 1; X while(size > 0 && numread /* Work around TC idiot-syncracy */) { X bufsize = size < buflen ? size : buflen; X numread = fread(buf, sizeof(char), bufsize, infile); X if (ferror(infile)) { X printf("Error while reading input file %s\n", chunk_name); X fclose(outfile); X return; X } X fwrite(buf, sizeof(char), numread, outfile); X if (ferror(outfile)) { X printf("Error while writing output file!\n"); X fclose(outfile); X return; X } X size -= numread; X if (numread != bufsize) { X printf(" Writing %ld bytes to %s\n", hunk_size-size, chunk_name); X fclose(outfile); X return; X } X } X fclose(outfile); X printf(" Writing %ld bytes to %s\n", hunk_size-size, chunk_name); X } X} X Xcopy_hunks(filename) Xchar *filename; X{ Xunsigned numread; X X if(!next_file()) X return; X if ((infile = fopen(chunk_name, "rb")) == NULL) { X printf("Nothing to do!\n"); X return; X } X if ((outfile = fopen(filename, "wb")) == NULL) { X printf("Couldn't open output file!\n"); X return; X } X for (;;) { X numread = 1; X while(!feof(infile) && numread /* Avoid TC problem */) { X numread = fread(buf, sizeof(char), buflen, infile); X if (ferror(infile)) { X printf("Error while reading input file %s\n", chunk_name); X fclose(infile); X return; X } X fwrite(buf, sizeof(char), numread, outfile); X if (ferror(outfile)) { X printf("Error while writing output file!\n"); X fclose(infile); X return; X } X } X printf(" Copying file %s to output file.\n", chunk_name); X fclose(infile); X if(!next_file()) X return; X if ((infile = fopen(chunk_name, "rb")) == NULL) X return; X X } X} X Xnext_file() X{ Xchar num[4]; X X if (extent > 999) X return(0); X strcpy(chunk_name, fname); X itoa(extent,num, 10); X if (strlen(num) == 1) { X strcat(chunk_name, "00"); X strcat(chunk_name, num); X } X else if (strlen(num) == 2) { X strcat(chunk_name, "0"); X strcat(chunk_name, num); X } X else X strcat(chunk_name, num); X ++extent; X return(-1); X} X Xgetbuf() X{ X while (buflen >= 256 && !(buf = malloc(buflen))) X buflen >>= 1; X if (!buf) { X printf("\nCan't allocate an adequate copy buffer.\n"); X exit(2); X } X} X Xfreebuf() X{ X free(buf); X} X END_OF_FILE if test 4920 -ne `wc -c <'others/splitf.c'`; then echo shar: \"'others/splitf.c'\" unpacked with wrong size! fi # end of 'others/splitf.c' fi if test -f 'patch8.03' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'patch8.03'\" else echo shar: Extracting \"'patch8.03'\" \(50662 characters\) sed "s/^X//" >'patch8.03' <<'END_OF_FILE' X*** src/Old/end.c Sun Jun 3 12:57:03 1990 X--- src/end.c Thu May 31 22:12:57 1990 X*************** X*** 14,28 **** X #include "eshk.h" X X void NDECL(end_box_display); X! static int NDECL(done_intr); X X! static const char *deaths[] = { /* the array of death */ X "died", "choked", "poisoned", "starvation", "drowning", X "burning", "crushed", "turned to stone", "genocided", X "panic", "trickery", X "quit", "escaped", "ascended" }; X X! static const char *ends[] = { /* "when you..." */ X "died", "choked", "were poisoned", "starved", "drowned", X "burned", "were crushed", "turned to stone", "were genocided", X "panicked", "were tricked", X--- 14,29 ---- X #include "eshk.h" X X void NDECL(end_box_display); X! STATIC_PTR int NDECL(done_intr); X! static void FDECL(disclose,(int,BOOLEAN_P)); X X! static const char NEARDATA *deaths[] = { /* the array of death */ X "died", "choked", "poisoned", "starvation", "drowning", X "burning", "crushed", "turned to stone", "genocided", X "panic", "trickery", X "quit", "escaped", "ascended" }; X X! static const char NEARDATA *ends[] = { /* "when you..." */ X "died", "choked", "were poisoned", "starved", "drowned", X "burned", "were crushed", "turned to stone", "were genocided", X "panicked", "were tricked", X*************** X*** 99,105 **** X return 0; X } X X! static X int X done_intr(){ X done_stopprint++; X--- 100,106 ---- X return 0; X } X X! STATIC_PTR X int X done_intr(){ X done_stopprint++; X*************** X*** 240,255 **** X done(PANICKED); X } X X! /* Be careful not to call panic from here! */ X! void X! done(how) X int how; X { X #ifdef MACOS X int see_c; X char mac_buf[80]; X #endif X struct permonst *upmon; X char kilbuf[BUFSZ], buf2[BUFSZ]; X /* kilbuf: used to copy killer in case it comes from something like X * xname(), which would otherwise get overwritten when we call X--- 241,325 ---- X done(PANICKED); X } X X! static void X! disclose(how,taken) X int how; X+ boolean taken; X { X #ifdef MACOS X int see_c; X char mac_buf[80]; X #endif X+ char c; X+ X+ if(invent) { X+ #ifndef MACOS X+ if(taken) X+ pline("Do you want to see what you had when you %s? ", X+ (how == QUIT) ? "quit" : "died"); X+ else X+ pline("Do you want your possessions identified? "); X+ if ((c = yn_function(ynqchars,'y')) == 'y') { X+ #else X+ { X+ extern short macflags; X+ X+ /* stop user from using menus, etc. */ X+ macflags &= ~(fDoNonKeyEvt | fDoUpdate); X+ } X+ if(taken) X+ Sprintf(mac_buf, "Do you want to see what you had when you %s? ", X+ (how == QUIT) ? "quit" : "died"); X+ else X+ Sprintf(mac_buf, "Do you want your possessions identified? "); X+ if(!flags.silent) SysBeep(1); X+ if ((c = "qqynq"[UseMacAlertText(129,mac_buf)+1]) == 'y') { X+ #endif X+ /* New dump format by maartenj@cs.vu.nl */ X+ struct obj *obj; X+ X+ for(obj = invent; obj && !done_stopprint; obj = obj->nobj) { X+ makeknown(obj->otyp); X+ obj->known = obj->bknown = obj->dknown = 1; X+ } X+ doinv(NULL); X+ end_box_display(); X+ } X+ if (c == 'q') done_stopprint++; X+ if (taken) { X+ /* paybill has already given the inventory locations X+ * in the shop and put it on the main object list X+ */ X+ struct obj *obj; X+ X+ for(obj = invent; obj; obj = obj->nobj) { X+ obj->owornmask = 0; X+ if(rn2(5)) curse(obj); X+ } X+ invent = (struct obj *) 0; X+ } X+ } X+ X+ if (!done_stopprint) { X+ #ifdef MACOS X+ c = "qqynq"[UseMacAlertText(129, "Do you want to see your instrinsics ?")+1]; X+ #else X+ pline("Do you want to see your intrinsics? "); X+ c = yn_function(ynqchars, 'y'); X+ #endif X+ if (c == 'y') enlightenment(); X+ if (c == 'q') done_stopprint++; X+ } X+ X+ } X+ X+ /* Be careful not to call panic from here! */ X+ void X+ done(how) X+ int how; X+ { X struct permonst *upmon; X+ boolean taken; X char kilbuf[BUFSZ], buf2[BUFSZ]; X /* kilbuf: used to copy killer in case it comes from something like X * xname(), which would otherwise get overwritten when we call X*************** X*** 256,263 **** X * xname() when listing possessions X * buf2: same as player name, except it is capitalized X */ X- char c; X- boolean taken; X #ifdef ENDGAME X if (how == ASCENDED) X killer_format = NO_KILLER_PREFIX; X--- 326,331 ---- X*************** X*** 346,415 **** X Strcpy(kilbuf, "quit while already on Charon's boat"); X } X } X! if (how == ESCAPED) killer_format = NO_KILLER_PREFIX; X taken = paybill(); X paygd(); X clearlocks(); X if(flags.toplin == 1) more(); X X! if(invent) { X! #ifndef MACOS X! if(taken) X! pline("Do you want to see what you had when you %s? ", X! (how == QUIT) ? "quit" : "died"); X! else X! pline("Do you want your possessions identified? "); X! if ((c = yn_function(ynqchars,'y')) == 'y') { X! #else X! { X! extern short macflags; X! X! /* stop user from using menus, etc. */ X! macflags &= ~(fDoNonKeyEvt | fDoUpdate); X! } X! if(taken) X! sprintf(mac_buf, "Do you want to see what you had when you %s? ", X! (how == QUIT) ? "quit" : "died"); X! else X! sprintf(mac_buf, "Do you want your possessions identified? "); X! if(!flags.silent) SysBeep(1); X! if ((c = "qqynq"[UseMacAlertText(129,mac_buf)+1]) == 'y') { X! #endif X! /* New dump format by maartenj@cs.vu.nl */ X! struct obj *obj; X! X! for(obj = invent; obj && !done_stopprint; obj = obj->nobj) { X! makeknown(obj->otyp); X! obj->known = obj->bknown = obj->dknown = 1; X! } X! doinv(NULL); X! end_box_display(); X! } X! if (c == 'q') done_stopprint++; X! if (taken) { X! /* paybill has already given the inventory locations in the shop X! * and put it on the main object list X! */ X! struct obj *obj; X! X! for(obj = invent; obj; obj = obj->nobj) { X! obj->owornmask = 0; X! if(rn2(5)) curse(obj); X! } X! invent = (struct obj *) 0; X! } X! } X! X! if (!done_stopprint) { X! #ifdef MACOS X! c = "qqynq"[UseMacAlertText(129, "Do you want to see your instrinsics ?")+1]; X! #else X! pline("Do you want to see your intrinsics? "); X! c = yn_function(ynqchars, 'y'); X! #endif X! if (c == 'y') enlightenment(); X! if (c == 'q') done_stopprint++; X! } X X if(how < GENOCIDED) { X #ifdef WIZARD X--- 414,430 ---- X Strcpy(kilbuf, "quit while already on Charon's boat"); X } X } X! if (how == ESCAPED || how == PANICKED) X! killer_format = NO_KILLER_PREFIX; X! X! /* paybill() must be called unconditionally, or strange things will X! * happen to bones levels */ X taken = paybill(); X paygd(); X clearlocks(); X if(flags.toplin == 1) more(); X X! disclose(how,taken); X X if(how < GENOCIDED) { X #ifdef WIZARD X*************** X*** 464,472 **** X #endif X ) { X register struct monst *mtmp; X! register struct obj *otmp; X long i; X register unsigned int worthlessct = 0; X X keepdogs(); X mtmp = mydogs; X--- 479,535 ---- X #endif X ) { X register struct monst *mtmp; X! register struct obj *otmp, *otmp2, *prevobj; X! struct obj *jewels = (struct obj *)0; X long i; X register unsigned int worthlessct = 0; X+ #if defined(LINT) || defined(__GNULINT__) X+ prevobj = (struct obj *)0; X+ #endif X+ X+ /* put items that count into jewels chain X+ * rewriting the fcobj and invent chains here is safe, X+ * as they'll never be used again X+ */ X+ for(otmp = fcobj; otmp; otmp = otmp2) { X+ otmp2 = otmp->nobj; X+ if(carried(otmp->cobj) X+ && ((otmp->olet == GEM_SYM && X+ otmp->otyp < LUCKSTONE) X+ || otmp->olet == AMULET_SYM)) { X+ if(otmp == fcobj) X+ fcobj = otmp->nobj; X+ else X+ prevobj->nobj = otmp->nobj; X+ otmp->nobj = jewels; X+ jewels = otmp; X+ } else X+ prevobj = otmp; X+ } X+ for(otmp = invent; otmp; otmp = otmp2) { X+ otmp2 = otmp->nobj; X+ if((otmp->olet == GEM_SYM && otmp->otyp < LUCKSTONE) X+ || otmp->olet == AMULET_SYM) { X+ if(otmp == invent) X+ invent = otmp->nobj; X+ else X+ prevobj->nobj = otmp->nobj; X+ otmp->nobj = jewels; X+ jewels = otmp; X+ } else X+ prevobj = otmp; X+ } X+ X+ /* add points for jewels */ X+ for(otmp = jewels; otmp; otmp = otmp->nobj) { X+ if(otmp->olet == GEM_SYM) X+ u.urexp += (long) otmp->quan * X+ objects[otmp->otyp].g_val; X+ else /* amulet */ X+ u.urexp += (otmp->spe < 0) ? 2 : X+ otmp->otyp == AMULET_OF_YENDOR ? X+ 5000 : 500; X+ } X X keepdogs(); X mtmp = mydogs; X*************** X*** 498,507 **** X Printf("You escaped from the dungeon with %ld points,\n", X #endif X u.urexp); X! get_all_from_box(); /* don't forget things in boxes and bags */ X! for(otmp = invent; otmp; otmp = otmp->nobj) { X if(otmp->olet == GEM_SYM && otmp->otyp < LUCKSTONE) { X- makeknown(otmp->otyp); X i = (long) otmp->quan * X objects[otmp->otyp].g_val; X if(i == 0) { X--- 561,571 ---- X Printf("You escaped from the dungeon with %ld points,\n", X #endif X u.urexp); X! X! /* print jewels chain here */ X! for(otmp = jewels; otmp; otmp = otmp->nobj) { X! makeknown(otmp->otyp); X if(otmp->olet == GEM_SYM && otmp->otyp < LUCKSTONE) { X i = (long) otmp->quan * X objects[otmp->otyp].g_val; X if(i == 0) { X*************** X*** 508,522 **** X worthlessct += otmp->quan; X continue; X } X- u.urexp += i; X Printf(" %s (worth %ld zorkmids),\n", X doname(otmp), i); X! } else if(otmp->olet == AMULET_SYM) { X otmp->known = 1; X i = (otmp->spe < 0) ? 2 : X otmp->otyp == AMULET_OF_YENDOR ? X 5000 : 500; X- u.urexp += i; X Printf(" %s (worth %ld zorkmids),\n", X doname(otmp), i); X } X--- 572,584 ---- X worthlessct += otmp->quan; X continue; X } X Printf(" %s (worth %ld zorkmids),\n", X doname(otmp), i); X! } else { /* amulet */ X otmp->known = 1; X i = (otmp->spe < 0) ? 2 : X otmp->otyp == AMULET_OF_YENDOR ? X 5000 : 500; X Printf(" %s (worth %ld zorkmids),\n", X doname(otmp), i); X } X*** src/Old/engrave.c Sun Jun 3 12:57:34 1990 X--- src/engrave.c Sat May 26 22:14:12 1990 X*************** X*** 4,10 **** X X #include "hack.h" X X! VSTATIC struct engr { X struct engr *nxt_engr; X char *engr_txt; X xchar engr_x, engr_y; X--- 4,10 ---- X X #include "hack.h" X X! STATIC_VAR struct engr { X struct engr *nxt_engr; X char *engr_txt; X xchar engr_x, engr_y; X*************** X*** 16,25 **** X #define BURN 3 X #define MARK 4 X #define POLY 5 /* temporary type - for polymorphing engraving */ X! } *head_engr; X X! OSTATIC void FDECL(del_engr, (struct engr *)); X! OSTATIC struct engr * FDECL(engr_at,(XCHAR_P,XCHAR_P)); X X #ifdef OVLB X /* random engravings */ X--- 16,25 ---- X #define BURN 3 X #define MARK 4 X #define POLY 5 /* temporary type - for polymorphing engraving */ X! } NEARDATA *head_engr; X X! STATIC_DCL void FDECL(del_engr, (struct engr *)); X! STATIC_DCL struct engr * FDECL(engr_at,(XCHAR_P,XCHAR_P)); X X #ifdef OVLB X /* random engravings */ X*************** X*** 37,43 **** X #endif /* OVLB */ X #ifdef OVL0 X X! XSTATIC struct engr * X engr_at(x,y) register xchar x,y; { X register struct engr *ep = head_engr; X while(ep) { X--- 37,43 ---- X #endif /* OVLB */ X #ifdef OVL0 X X! STATIC_OVL struct engr * X engr_at(x,y) register xchar x,y; { X register struct engr *ep = head_engr; X while(ep) { X*************** X*** 182,187 **** X--- 182,189 ---- X freehand(){ X return(!uwep || X !uwep->cursed || X+ (uwep->olet != WEAPON_SYM && uwep->otyp != TIN_OPENER X+ && uwep->otyp != PICK_AXE && uwep->otyp != UNICORN_HORN) || X (!bimanual(uwep) && (!uarms || !uarms->cursed))); X /* if ((uwep && bimanual(uwep)) || X (uwep && uarms)) X*************** X*** 190,198 **** X return(1);*/ X } X X! static const char styluses[] = { '#', '-', TOOL_SYM, WEAPON_SYM, WAND_SYM, 0 }; X! static const char too_large[] = { ARMOR_SYM, BALL_SYM, ROCK_SYM, 0 }; X! static const char paper[] = { SCROLL_SYM, X #ifdef SPELLS X SPBOOK_SYM, X #endif X--- 192,200 ---- X return(1);*/ X } X X! static const char NEARDATA styluses[] = { '#', '-', TOOL_SYM, WEAPON_SYM, WAND_SYM, 0 }; X! static const char NEARDATA too_large[] = { ARMOR_SYM, BALL_SYM, ROCK_SYM, 0 }; X! static const char NEARDATA paper[] = { SCROLL_SYM, X #ifdef SPELLS X SPBOOK_SYM, X #endif X*************** X*** 612,618 **** X } X } X X! XSTATIC void X del_engr(ep) register struct engr *ep; { X register struct engr *ept; X if(ep == head_engr) X--- 614,620 ---- X } X } X X! STATIC_OVL void X del_engr(ep) register struct engr *ep; { X register struct engr *ept; X if(ep == head_engr) X*** src/Old/extralev.c Sun Jun 3 12:58:12 1990 X--- src/extralev.c Sun Feb 25 14:47:26 1990 X*************** X*** 20,26 **** X #define LEFT 4 X #define RIGHT 8 X X! static struct rogueroom r[3][3]; X static void FDECL(roguejoin,(int,int,int,int,int)); X static void FDECL(roguecorr,(int,int,int)); X static void FDECL(miniwalk,(int,int)); X--- 20,26 ---- X #define LEFT 4 X #define RIGHT 8 X X! static struct rogueroom NEARDATA r[3][3]; X static void FDECL(roguejoin,(int,int,int,int,int)); X static void FDECL(roguecorr,(int,int,int)); X static void FDECL(miniwalk,(int,int)); X*** src/Old/fountain.c Sun Jun 3 12:58:29 1990 X--- src/fountain.c Wed May 23 17:45:37 1990 X*************** X*** 18,24 **** X register int num = rnd(6); X if (!(mons[PM_WATER_MOCCASIN].geno & G_GENOD)) { X if (!Blind) X! pline("An endless stream of snakes pours forth!"); X else X You("hear something hissing!"); X while(num-- > 0) (void) makemon(&mons[PM_WATER_MOCCASIN],u.ux,u.uy); X--- 18,26 ---- X register int num = rnd(6); X if (!(mons[PM_WATER_MOCCASIN].geno & G_GENOD)) { X if (!Blind) X! pline("An endless stream of %s pours forth!", X! Hallucination ? makeplural(rndmonnam()) X! : "snakes"); X else X You("hear something hissing!"); X while(num-- > 0) (void) makemon(&mons[PM_WATER_MOCCASIN],u.ux,u.uy); X*************** X*** 116,122 **** X dofindgem() /* Find a gem in the sparkling waters. */ { X X if (!Blind) You("spot a gem in the sparkling waters!"); X! (void) mkobj_at(GEM_SYM,u.ux,u.uy); X levl[u.ux][u.uy].looted = T_LOOTED; X } X X--- 118,124 ---- X dofindgem() /* Find a gem in the sparkling waters. */ { X X if (!Blind) You("spot a gem in the sparkling waters!"); X! (void) mksobj_at(rnd_class(DILITHIUM_CRYSTAL, LUCKSTONE-1), u.ux, u.uy); X levl[u.ux][u.uy].looted = T_LOOTED; X } X X*************** X*** 352,358 **** X return; X } X switch(rn2(20)) { X! static struct obj *otmp; X case 0: You("take a sip of very cold water."); X break; X case 1: You("take a sip of very warm water."); X--- 354,360 ---- X return; X } X switch(rn2(20)) { X! static struct obj NEARDATA *otmp; X case 0: You("take a sip of very cold water."); X break; X case 1: You("take a sip of very warm water."); X*************** X*** 365,371 **** X case 3: if (mons[PM_SEWER_RAT].geno & G_GENOD) X pline("The sink seems quite dirty."); X else { X! static struct monst *mtmp; X X mtmp = makemon(&mons[PM_SEWER_RAT], u.ux, u.uy); X pline("Eek! There's %s in the sink!", X--- 367,373 ---- X case 3: if (mons[PM_SEWER_RAT].geno & G_GENOD) X pline("The sink seems quite dirty."); X else { X! static struct monst NEARDATA *mtmp; X X mtmp = makemon(&mons[PM_SEWER_RAT], u.ux, u.uy); X pline("Eek! There's %s in the sink!", X*************** X*** 391,397 **** X break; X case 5: if (!levl[u.ux][u.uy].looted) { X You("find a ring in the sink!"); X! (void) mkobj_at(RING_SYM, u.ux, u.uy); X levl[u.ux][u.uy].looted = T_LOOTED; X } else pline("Some dirty water backs up in the drain."); X break; X--- 393,399 ---- X break; X case 5: if (!levl[u.ux][u.uy].looted) { X You("find a ring in the sink!"); X! (void) mkobj_at(RING_SYM, u.ux, u.uy, TRUE); X levl[u.ux][u.uy].looted = T_LOOTED; X } else pline("Some dirty water backs up in the drain."); X break; X*** src/Old/getline.c Sun Jun 3 12:58:49 1990 X--- src/getline.c Fri Apr 13 18:45:39 1990 X*************** X*** 49,55 **** X if((c = Getchar()) == EOF) { X *bufp = 0; X #ifdef MACOS X! macflags |= (tmpflags & fDoNonKeyEvt); X #endif X return; X } X--- 49,55 ---- X if((c = Getchar()) == EOF) { X *bufp = 0; X #ifdef MACOS X! macflags = tmpflags; X #endif X return; X } X*************** X*** 57,63 **** X *obufp = c; X obufp[1] = 0; X #ifdef MACOS X! macflags |= (tmpflags & fDoNonKeyEvt); X #endif X return; X } X--- 57,63 ---- X *obufp = c; X obufp[1] = 0; X #ifdef MACOS X! macflags = tmpflags; X #endif X return; X } X*************** X*** 69,75 **** X } else if(c == '\n') { X *bufp = 0; X #ifdef MACOS X! macflags |= (tmpflags & fDoNonKeyEvt); X #endif X return; X } else if(' ' <= c && c < '\177' && X--- 69,75 ---- X } else if(c == '\n') { X *bufp = 0; X #ifdef MACOS X! macflags = tmpflags; X #endif X return; X } else if(' ' <= c && c < '\177' && X*************** X*** 93,99 **** X bell(); X } X #ifdef MACOS X! macflags |= (tmpflags & fDoNonKeyEvt); X #endif X } X X--- 93,99 ---- X bell(); X } X #ifdef MACOS X! macflags = tmpflags; X #endif X } X X*************** X*** 128,137 **** X--- 128,143 ---- X register const char *s; /* chars allowed besides space or return */ X { X register int c; X+ #ifdef MACOS X+ short tmpflags; X+ #endif X X morc = 0; X #ifdef MACOS X flags.wantspace = TRUE; X+ tmpflags = macflags; X+ macflags &= ~fDoNonKeyEvt; X+ HideCursor(); X #endif X X while((c = readchar()) != '\n') { X*************** X*** 149,155 **** X--- 155,163 ---- X } X X #ifdef MACOS X+ ShowCursor(); X flags.wantspace = FALSE; X+ macflags = tmpflags; X #endif X } X X*************** X*** 156,162 **** X #endif /* OVL1 */ X #ifdef OVL0 X X! static int last_multi; X X char * X parse() X--- 164,170 ---- X #endif /* OVL1 */ X #ifdef OVL0 X X! static int NEARDATA last_multi; X X char * X parse() X*************** X*** 293,298 **** X--- 301,312 ---- X register char *obufp = bufp; X register int c; X int com_index, oindex; X+ #ifdef MACOS X+ short tmpflags; X+ X+ tmpflags = macflags & ~(fExtCmdSeq1 | fExtCmdSeq2 | fExtCmdSeq3); X+ macflags &= ~fDoNonKeyEvt; X+ #endif X X flags.toplin = 2; /* nonempty, no --More-- required */ X X*************** X*** 300,310 **** X--- 314,330 ---- X (void) fflush(stdout); X if((c = readchar()) == EOF) { X *bufp = 0; X+ #ifdef MACOS X+ macflags = tmpflags; X+ #endif X return; X } X if(c == '\033') { X *obufp = c; X obufp[1] = 0; X+ #ifdef MACOS X+ macflags = tmpflags; X+ #endif X return; X } X if(c == erase_char || c == '\b') { X*************** X*** 314,319 **** X--- 334,342 ---- X } else bell(); X } else if(c == '\n') { X *bufp = 0; X+ #ifdef MACOS X+ macflags = tmpflags; X+ #endif X return; X } else if(' ' <= c && c < '\177') { X /* avoid isprint() - some people don't have it X*************** X*** 355,360 **** X--- 378,386 ---- X } else X bell(); X } X+ #ifdef MACOS X+ macflags = tmpflags; X+ #endif X X } X #endif /* COM_COMPL */ X*** src/Old/hack.c Sun Jun 3 12:59:10 1990 X--- src/hack.c Thu May 31 22:10:54 1990 X*************** X*** 7,18 **** X static const char SCCS_Id[] = "@(#)hack.c 3.0\t89/11/20"; X #endif X X! OSTATIC int NDECL(moverock); X #ifdef SINKS X! OSTATIC void NDECL(dosinkfall); X #endif X static boolean FDECL(is_edge,(XCHAR_P,XCHAR_P)); X static boolean FDECL(bad_rock,(XCHAR_P,XCHAR_P)); X X #ifdef OVLB X X--- 7,21 ---- X static const char SCCS_Id[] = "@(#)hack.c 3.0\t89/11/20"; X #endif X X! STATIC_DCL int NDECL(moverock); X #ifdef SINKS X! STATIC_DCL void NDECL(dosinkfall); X #endif X+ X+ #ifdef OVL1 X static boolean FDECL(is_edge,(XCHAR_P,XCHAR_P)); X static boolean FDECL(bad_rock,(XCHAR_P,XCHAR_P)); X+ #endif /* OVL1 */ X X #ifdef OVLB X X*************** X*** 28,44 **** X X if(seehx){ X seehx = 0; X! } else X! for(x = u.ux-1; x < u.ux+2; x++) X! for(y = u.uy-1; y < u.uy+2; y++) { X! if(!isok(x, y)) continue; X! lev = &levl[x][y]; X! if(!lev->lit && lev->scrsym == ROOM_SYM) { X lev->scrsym = STONE_SYM; X lev->new = 1; X on_scr(x,y); X! } X! } X } X X /* called: X--- 31,54 ---- X X if(seehx){ X seehx = 0; X! } X! /* X! * Erase surrounding positions if needed. We don't need to do this X! * if we are blind, since we can't see them anyway. This removes the X! * pl6 bug that makes monsters disappear if they are next to you if X! * you teleport while blind and telepathic. X! */ X! else if(!Blind) X! for(x = u.ux-1; x < u.ux+2; x++) X! for(y = u.uy-1; y < u.uy+2; y++) { X! if(!isok(x, y)) continue; X! lev = &levl[x][y]; X! if(!lev->lit && lev->scrsym == ROOM_SYM) { X lev->scrsym = STONE_SYM; X lev->new = 1; X on_scr(x,y); X! } X! } X } X X /* called: X*************** X*** 87,96 **** X #endif /* OVLB */ X #ifdef OVL2 X X! XSTATIC int X moverock() { X register xchar rx, ry; X! register struct obj *otmp; X register struct trap *ttmp; X register struct monst *mtmp; X X--- 97,106 ---- X #endif /* OVLB */ X #ifdef OVL2 X X! STATIC_OVL int X moverock() { X register xchar rx, ry; X! register struct obj *otmp, *otmp2; X register struct trap *ttmp; X register struct monst *mtmp; X X*************** X*** 172,177 **** X--- 182,204 ---- X delobj(otmp); X continue; X } X+ /* X+ * Re-link at top of fobj chain so that X+ * pile order is preserved when level is X+ * restored. X+ */ X+ if (otmp != fobj) { X+ otmp2 = fobj; X+ while (otmp2->nobj && otmp2->nobj != otmp) X+ otmp2 = otmp2->nobj; X+ if (!otmp2->nobj) X+ impossible("moverock: error in fobj chain"); X+ else { X+ otmp2->nobj = otmp->nobj; X+ otmp->nobj = fobj; X+ fobj = otmp; X+ } X+ } X move_object(otmp, rx, ry); X /* pobj(otmp); */ X if(cansee(rx,ry)) atl(rx,ry,otmp->olet); X*************** X*** 182,188 **** X long lastmovetime; X lastmovetime = 0; X #else X! static long lastmovetime; X #endif X /* note: this var contains garbage initially and X after a restore */ X--- 209,215 ---- X long lastmovetime; X lastmovetime = 0; X #else X! static long NEARDATA lastmovetime; X #endif X /* note: this var contains garbage initially and X after a restore */ X*************** X*** 229,241 **** X register xchar ox, oy; X { X remove_object(obj); X! newsym(obj->ox, obj->oy); X place_object(obj, ox, oy); X! newsym(ox, oy); X } X X #ifdef SINKS X! XSTATIC X void X dosinkfall() { X register struct obj *obj; X--- 256,276 ---- X register xchar ox, oy; X { X remove_object(obj); X! if (cansee(obj->ox, obj->oy)) { X! levl[obj->ox][obj->oy].seen = 0; X! prl(obj->ox, obj->oy); X! } else X! newsym(obj->ox, obj->oy); X place_object(obj, ox, oy); X! if (cansee(ox, oy)) { X! levl[ox][oy].seen = 0; X! prl(ox, oy); X! } else X! newsym(ox, oy); X } X X #ifdef SINKS X! STATIC_OVL X void X dosinkfall() { X register struct obj *obj; X*************** X*** 323,329 **** X X void X domove() { X! register struct monst *mtmp = (struct monst *)0; X register struct rm *tmpr,*ust; X register xchar x,y; X struct trap *trap; X--- 358,364 ---- X X void X domove() { X! register struct monst *mtmp; X register struct rm *tmpr,*ust; X register xchar x,y; X struct trap *trap; X*************** X*** 393,400 **** X #endif X } X } X! if (MON_AT(x, y)) { X! mtmp = m_at(x,y); X /* Don't attack if you're running */ X if (flags.run && !mtmp->mimic && X (Blind ? Telepat : X--- 428,435 ---- X #endif X } X } X! mtmp = m_at(x,y); X! if (mtmp) { X /* Don't attack if you're running */ X if (flags.run && !mtmp->mimic && X (Blind ? Telepat : X*************** X*** 548,554 **** X } X #ifdef POLYSELF X if (tunnels(uasmon) && !needspick(uasmon) && IS_ROCK(tmpr->typ)) { X! static const char *digtxt; X X if(dig_pos.x != x || dig_pos.y != y X || dig_level != dlevel || dig_down) { X--- 583,589 ---- X } X #ifdef POLYSELF X if (tunnels(uasmon) && !needspick(uasmon) && IS_ROCK(tmpr->typ)) { X! static const char NEARDATA *digtxt; X X if(dig_pos.x != x || dig_pos.y != y X || dig_level != dlevel || dig_down) { X*************** X*** 755,769 **** X #endif X if(Blind || flags.run == 0) return; X for(x = u.ux-1; x <= u.ux+1; x++) for(y = u.uy-1; y <= u.uy+1; y++) { X #ifdef POLYSELF X if(u.umonnum == PM_GRID_BUG && x != u.ux && y != u.uy) continue; X #endif X if(x == u.ux && y == u.uy) continue; X! if(MON_AT(x, y) && (mtmp = m_at(x,y)) && !mtmp->mimic && X (!mtmp->minvis || See_invisible) && !mtmp->mundetected) { X! if((flags.run != 1 && !mtmp->mtame) || (x == u.ux+u.dx && y == u.uy+u.dy)) X goto stop; X! } else mtmp = 0; X if(levl[x][y].typ == STONE) continue; X if(x == u.ux-u.dx && y == u.uy-u.dy) continue; X { X--- 790,806 ---- X #endif X if(Blind || flags.run == 0) return; X for(x = u.ux-1; x <= u.ux+1; x++) for(y = u.uy-1; y <= u.uy+1; y++) { X+ if(!isok(x,y)) continue; X #ifdef POLYSELF X if(u.umonnum == PM_GRID_BUG && x != u.ux && y != u.uy) continue; X #endif X if(x == u.ux && y == u.uy) continue; X! if((mtmp = m_at(x,y)) && !mtmp->mimic && X (!mtmp->minvis || See_invisible) && !mtmp->mundetected) { X! if((flags.run != 1 && !mtmp->mtame) X! || (x == u.ux+u.dx && y == u.uy+u.dy)) X goto stop; X! } X if(levl[x][y].typ == STONE) continue; X if(x == u.ux-u.dx && y == u.uy-u.dy) continue; X { X*************** X*** 861,868 **** X if(!Blind) X for(x = u.ux-1; x <= u.ux+1; x++) X for(y = u.uy-1; y <= u.uy+1; y++) { X if(x == u.ux && y == u.uy) continue; X! if(MON_AT(x, y) && (mtmp = m_at(x,y)) && !mtmp->mimic && X !mtmp->mtame && !mtmp->mpeaceful && X !noattacks(mtmp->data) && X mtmp->mcanmove && !mtmp->msleep && /* aplvax!jcn */ X--- 898,906 ---- X if(!Blind) X for(x = u.ux-1; x <= u.ux+1; x++) X for(y = u.uy-1; y <= u.uy+1; y++) { X+ if(!isok(x,y)) continue; X if(x == u.ux && y == u.uy) continue; X! if((mtmp = m_at(x,y)) && !mtmp->mimic && X !mtmp->mtame && !mtmp->mpeaceful && X !noattacks(mtmp->data) && X mtmp->mcanmove && !mtmp->msleep && /* aplvax!jcn */ X*************** X*** 931,936 **** X--- 969,975 ---- X } else { X for(ux = u.ux-1; ux <= u.ux+1; ux++) X for(uy = u.uy-1; uy <= u.uy+1; uy++) { X+ if(!isok(ux,uy)) continue; X if(IS_ROCK(levl[ux][uy].typ) || X IS_DOOR(levl[ux][uy].typ)) continue; X /* might have side-by-side walls, in which case X*** src/Old/invent.c Sun Jun 3 12:59:53 1990 X--- src/invent.c Thu May 31 22:11:37 1990 X*************** X*** 11,30 **** X X #define NOINVSYM '#' X X static boolean FDECL(mergable,(struct obj *,struct obj *)); X- OSTATIC void FDECL(assigninvlet,(struct obj *)); X static int FDECL(merged,(struct obj *,struct obj *,int)); X! OSTATIC struct obj *FDECL(mkgoldobj,(long)); X! #ifndef OVERLAY X! static int FDECL(ckunpaid,(struct obj *)); X! #else X! int FDECL(ckunpaid,(struct obj *)); X! #endif X static boolean NDECL(wearing_armor); X static boolean FDECL(is_worn,(struct obj *)); X! static char FDECL(obj_to_let,(struct obj *)); X X! OSTATIC char *FDECL(xprname,(struct obj *,CHAR_P,BOOLEAN_P)); X X #ifdef OVLB X X--- 11,30 ---- X X #define NOINVSYM '#' X X+ #ifdef OVL1 X static boolean FDECL(mergable,(struct obj *,struct obj *)); X static int FDECL(merged,(struct obj *,struct obj *,int)); X! #endif /* OVL1 */ X! STATIC_DCL void FDECL(assigninvlet,(struct obj *)); X! STATIC_DCL struct obj *FDECL(mkgoldobj,(long)); X! STATIC_PTR int FDECL(ckunpaid,(struct obj *)); X! #ifdef OVLB X static boolean NDECL(wearing_armor); X static boolean FDECL(is_worn,(struct obj *)); X! #endif /* OVLB */ X! STATIC_DCL char FDECL(obj_to_let,(struct obj *)); X X! STATIC_DCL char *FDECL(xprname,(struct obj *,CHAR_P,BOOLEAN_P)); X X #ifdef OVLB X X*************** X*** 38,44 **** X POTION_SYM, RING_SYM, WAND_SYM, TOOL_SYM, GEM_SYM, X ROCK_SYM, BALL_SYM, CHAIN_SYM, 0 }; X X! XSTATIC void X assigninvlet(otmp) X register struct obj *otmp; X { X--- 38,44 ---- X POTION_SYM, RING_SYM, WAND_SYM, TOOL_SYM, GEM_SYM, X ROCK_SYM, BALL_SYM, CHAIN_SYM, 0 }; X X! STATIC_OVL void X assigninvlet(otmp) X register struct obj *otmp; X { X*************** X*** 175,180 **** X--- 175,183 ---- X } X } X X+ #endif /* OVLB */ X+ #ifdef OVL3 X+ X void X freeinv(obj) X register struct obj *obj; X*************** X*** 202,207 **** X--- 205,213 ---- X } X } X X+ #endif /* OVL3 */ X+ #ifdef OVL2 X+ X /* destroy object in fobj chain (if unpaid, it remains on the bill) */ X void X delobj(obj) X*************** X*** 272,278 **** X #endif X } X X! #endif /* OVLB */ X #ifdef OVL0 X X struct obj * X--- 278,284 ---- X #endif X } X X! #endif /* OVL2 */ X #ifdef OVL0 X X struct obj * X*************** X*** 348,353 **** X--- 354,362 ---- X return(FALSE); X } X X+ #endif /* OVLB */ X+ #ifdef OVL2 X+ X struct gold * X g_at(x,y) X register int x, y; X*************** X*** 360,367 **** X return((struct gold *)0); X } X X /* make dummy object structure containing gold - for temporary use only */ X! XSTATIC X struct obj * X mkgoldobj(q) X register long q; X--- 369,379 ---- X return((struct gold *)0); X } X X+ #endif /* OVL2 */ X+ #ifdef OVLB X+ X /* make dummy object structure containing gold - for temporary use only */ X! STATIC_OVL X struct obj * X mkgoldobj(q) X register long q; X*************** X*** 497,502 **** X--- 509,521 ---- X return((struct obj *)0); X } X for(;;) { X+ #ifdef MACOS X+ short tmpflags; X+ extern short macflags; X+ X+ tmpflags = macflags; X+ macflags &= ~fDoNonKeyEvt; X+ #endif X if(!buf[0]) { X #ifdef REDO X if(!in_doagain) X*************** X*** 520,525 **** X--- 539,547 ---- X allowcnt = 2; /* signal presence of cnt */ X ilet = readchar(); X } X+ #ifdef MACOS X+ macflags = tmpflags; X+ #endif X if(digit(ilet)) { X pline("No count allowed with this command."); X continue; X*************** X*** 624,633 **** X #endif /* OVL1 */ X #ifdef OVLB X X! #ifndef OVERLAY X! static X! #endif X! int X ckunpaid(otmp) X register struct obj *otmp; X { X--- 646,652 ---- X #endif /* OVL1 */ X #ifdef OVLB X X! STATIC_PTR int X ckunpaid(otmp) X register struct obj *otmp; X { X*************** X*** 650,656 **** X return(!!(otmp->owornmask & (W_ARMOR | W_RING | W_AMUL | W_TOOL | W_WEP))); X } X X! static const char removeables[] = X { ARMOR_SYM, WEAPON_SYM, RING_SYM, AMULET_SYM, TOOL_SYM, ' ', 0 }; X X /* interactive version of getobj - used for Drop, Identify and */ X--- 669,675 ---- X return(!!(otmp->owornmask & (W_ARMOR | W_RING | W_AMUL | W_TOOL | W_WEP))); X } X X! static const char NEARDATA removeables[] = X { ARMOR_SYM, WEAPON_SYM, RING_SYM, AMULET_SYM, TOOL_SYM, ' ', 0 }; X X /* interactive version of getobj - used for Drop, Identify and */ X*************** X*** 821,827 **** X return(cnt); X } X X! static char X obj_to_let(obj) /* should of course only be called for things in invent */ X register struct obj *obj; X { X--- 840,850 ---- X return(cnt); X } X X! #endif /* OVLB */ X! #ifdef OVL2 X! X! STATIC_OVL X! char X obj_to_let(obj) /* should of course only be called for things in invent */ X register struct obj *obj; X { X*************** X*** 843,852 **** X pline(xprname(obj, obj_to_let(obj), TRUE)); X } X X! #endif /* OVLB */ X #ifdef OVL1 X X! XSTATIC char * X xprname(obj,let,dot) X register struct obj *obj; X register char let; X--- 866,875 ---- X pline(xprname(obj, obj_to_let(obj), TRUE)); X } X X! #endif /* OVL2 */ X #ifdef OVL1 X X! STATIC_OVL char * X xprname(obj,let,dot) X register struct obj *obj; X register char let; X*************** X*** 1340,1345 **** X--- 1363,1371 ---- X delobj(otmp); X } X X+ #endif /* OVLB */ X+ #ifdef OVL1 X+ X /* X * Convert from a symbol to a string for printing object classes X * X*************** X*** 1350,1356 **** X * WAND_SYM, [SPBOOK_SYM], RING_SYM, GEM_SYM, 0 }; X */ X X! static const char *names[] = { X "Illegal objects", "Amulets", "Comestibles", "Weapons", X "Tools", "Iron balls", "Chains", "Boulders/Statues", "Armor", X "Potions", "Scrolls", "Wands", X--- 1376,1382 ---- X * WAND_SYM, [SPBOOK_SYM], RING_SYM, GEM_SYM, 0 }; X */ X X! static const char NEARDATA *names[] = { X "Illegal objects", "Amulets", "Comestibles", "Weapons", X "Tools", "Iron balls", "Chains", "Boulders/Statues", "Armor", X "Potions", "Scrolls", "Wands", X*************** X*** 1365,1371 **** X { X const char *pos = index(obj_symbols, let); X /* arbitrary buffer size by Tom May (tom@uw-warp) */ X! static char *buf = NULL; X X if (buf == NULL) X buf = (char *) alloc ((unsigned)(strlen(HI)+17+strlen(HE))); X--- 1391,1397 ---- X { X const char *pos = index(obj_symbols, let); X /* arbitrary buffer size by Tom May (tom@uw-warp) */ X! static char NEARDATA *buf = NULL; X X if (buf == NULL) X buf = (char *) alloc ((unsigned)(strlen(HI)+17+strlen(HE))); X*************** X*** 1382,1387 **** X--- 1408,1416 ---- X Sprintf(buf, "%s", names[pos - obj_symbols]); X return (buf); X } X+ X+ #endif /* OVL1 */ X+ #ifdef OVLB X X void X reassign() X*** src/Old/ioctl.c Sun Jun 3 13:00:40 1990 X--- src/ioctl.c Tue May 8 19:14:56 1990 X*************** X*** 6,11 **** X--- 6,12 ---- X systems (e.g. MUNIX) the include files <termio.h> and <sgtty.h> X define the same constants, and the C preprocessor complains. */ X X+ #ifndef VMS X /* block some unused #defines to avoid overloading some cpp's */ X #define MONATTK_H X #define MONFLAG_H X*************** X*** 89,91 **** X--- 90,93 ---- X return(0); X } X #endif /* SUSPEND /**/ X+ #endif /*VMS*/ X*** src/Old/lev_comp.l Sun Jun 3 13:02:02 1990 X--- src/lev_comp.l Wed Apr 25 17:07:32 1990 X*************** X*** 28,33 **** X--- 28,34 ---- X X #ifdef MSDOS X #undef exit X+ extern void FDECL(exit, (int)); X #endif X X /* this doesn't always get put in lev_comp.h X*** src/Old/lev_comp.y Sun Jun 3 13:02:18 1990 X--- src/lev_comp.y Wed Apr 25 17:07:36 1990 X*************** X*** 49,54 **** X--- 49,55 ---- X X #ifdef MSDOS X # undef exit X+ extern void FDECL(exit, (int)); X #endif X X #ifdef MACOS X*** src/Old/lev_main.c Sun Jun 3 13:03:18 1990 X--- src/lev_main.c Fri May 18 18:40:57 1990 X*************** X*** 9,19 **** X X /* #include "hack.h" /* uncomment for the Mac */ X X! #ifdef AMIGA X! #include "hack.h" X! #undef exit X! #endif X #include <stdio.h> X X #define MAX_ERRORS 25 X X--- 9,32 ---- X X /* #include "hack.h" /* uncomment for the Mac */ X X! #ifndef VMS X! # if defined(AMIGA) || defined(MSDOS) X! # include "hack.h" X! # undef exit X! # ifdef MSDOS X! extern void FDECL(exit, (int)); X! # endif X! # else X! # include <stdio.h> X! # endif X! #else /*VMS*/ X! # ifdef ANCIENT_VAXC /* need KR1ED setup */ X! # define GLOBAL_H /* don't need other stuff */ X! #include "config.h" X! # endif X #include <stdio.h> X+ # define exit vms_exit X+ #endif /*VMS*/ X X #define MAX_ERRORS 25 X X*************** X*** 59,67 **** X long j; X extern struct permonst *mons; X extern struct objclass *objects; X X /* sub in the Nethack resource filename */ X! strcpy((char *)name, "\010NH3.rsrc"); X yysbuf = (char *)alloc(YYLMAX); X yysptr = yysbuf; X yytext = (char *)alloc(YYLMAX); X--- 72,81 ---- X long j; X extern struct permonst *mons; X extern struct objclass *objects; X+ char descrip[3][32]; /* 3 special level description files */ X X /* sub in the Nethack resource filename */ X! Strcpy((char *)name, "\021nethack.proj.rsrc"); X yysbuf = (char *)alloc(YYLMAX); X yysptr = yysbuf; X yytext = (char *)alloc(YYLMAX); X*************** X*** 92,99 **** X } else { X panic("Can't get OBJECT resource data."); X } X! # ifdef THINKC4 X! argc = ccommand(&argv); X # endif X #endif X X--- 106,119 ---- X } else { X panic("Can't get OBJECT resource data."); X } X! Sprintf(descrip[1], "%s", ":auxil:castle.des"); X! Sprintf(descrip[2], "%s", ":auxil:endgame.des"); X! Sprintf(descrip[3], "%s", ":auxil:tower.des"); X! argc = 4; /* argv[0] is irrelevant, argv[i] = descrip[i] */ X! #else /* !MACOS || !SMALLDATA */ X! # ifdef VMS X! extern FILE *yyin, *yyout; X! yyin = stdin, yyout = stdout; X # endif X #endif X X*************** X*** 101,107 **** X yyparse(); X else /* Otherwise every argument is a filename */ X for(i=1; i<argc; i++) { X! #if defined(VMS) || defined(AZTEC_C) X extern FILE *yyin; X yyin = fin = fopen(argv[i], "r"); X #else X--- 121,131 ---- X yyparse(); X else /* Otherwise every argument is a filename */ X for(i=1; i<argc; i++) { X! #ifdef MACOS X! argv[i] = descrip[i]; X! fprintf(stdout, "Working on %s\n", argv[i]); X! #endif X! #if defined(AZTEC_C) X extern FILE *yyin; X yyin = fin = fopen(argv[i], "r"); X #else X*************** X*** 115,121 **** X--- 139,149 ---- X line_number = 1; X fatal_error = 0; X } X+ #ifndef VMS X return 0; X+ #else X+ return 1; /* vms success */ X+ #endif /*VMS*/ X } X X /* X*** src/Old/lock.c Sun Jun 3 13:03:34 1990 X--- src/lock.c Thu May 31 22:10:57 1990 X*************** X*** 4,30 **** X X #include "hack.h" X X! #ifndef OVERLAY X! static int NDECL(picklock); X! static int NDECL(forcelock); X! #else X! int NDECL(picklock); X! int NDECL(forcelock); X! #endif X! static boolean FDECL(obstructed,(int,int)); X X! VSTATIC struct xlock_s { X int door_or_box, picktyp; X struct rm *door; X struct obj *box; X int chance, usedtime; X! } xlock; X X #ifdef OVLB X X! #ifndef OVERLAY X! static X! #endif X int X picklock() { /* try to open/close a lock */ X X--- 4,24 ---- X X #include "hack.h" X X! STATIC_PTR int NDECL(picklock); X! STATIC_PTR int NDECL(forcelock); X X! STATIC_VAR struct xlock_s { X int door_or_box, picktyp; X struct rm *door; X struct obj *box; X int chance, usedtime; X! } NEARDATA xlock; X X #ifdef OVLB X X! static boolean FDECL(obstructed,(int,int)); X! X! STATIC_PTR X int X picklock() { /* try to open/close a lock */ X X*************** X*** 87,95 **** X return((xlock.usedtime = 0)); X } X X! #ifndef OVERLAY X! static X! #endif X int X forcelock() { /* try to force a locked chest */ X X--- 81,87 ---- X return((xlock.usedtime = 0)); X } X X! STATIC_PTR X int X forcelock() { /* try to force a locked chest */ X X*************** X*** 252,258 **** X struct monst *mtmp; X X door = &levl[x][y]; X! if (MON_AT(x, y) && canseemon(mtmp = m_at(x,y)) && !mtmp->mimic) { X if (picktyp == CREDIT_CARD && X #ifdef ORACLE X (mtmp->isshk || mtmp->data == &mons[PM_ORACLE])) X--- 244,250 ---- X struct monst *mtmp; X X door = &levl[x][y]; X! if ((mtmp = m_at(x,y)) && canseemon(mtmp) && !mtmp->mimic) { X if (picktyp == CREDIT_CARD && X #ifdef ORACLE X (mtmp->isshk || mtmp->data == &mons[PM_ORACLE])) X*************** X*** 395,401 **** X y = u.uy + u.dy; X if((x == u.ux) && (y == u.uy)) return(0); X X! if(MON_AT(x, y) && (mtmp = m_at(x,y))->mimic && X mtmp->m_ap_type == M_AP_FURNITURE && X mtmp->mappearance == S_cdoor && X !Protection_from_shape_changers) { X--- 387,393 ---- X y = u.uy + u.dy; X if((x == u.ux) && (y == u.uy)) return(0); X X! if((mtmp = m_at(x,y)) && mtmp->mimic && X mtmp->m_ap_type == M_AP_FURNITURE && X mtmp->mappearance == S_cdoor && X !Protection_from_shape_changers) { X*************** X*** 484,490 **** X return(1); X } X X! if(MON_AT(x, y) && (mtmp = m_at(x,y))->mimic && X mtmp->m_ap_type == M_AP_FURNITURE && X mtmp->mappearance == S_cdoor && X !Protection_from_shape_changers) { X--- 476,482 ---- X return(1); X } X X! if((mtmp = m_at(x,y)) && mtmp->mimic && X mtmp->m_ap_type == M_AP_FURNITURE && X mtmp->mappearance == S_cdoor && X !Protection_from_shape_changers) { X*************** X*** 702,708 **** X X int X bimanual(otmp) struct obj * otmp; { X! return(otmp->olet == WEAPON_SYM && objects[otmp->otyp].oc_bimanual); X } X #endif /* STUPID_CPP */ X X--- 694,701 ---- X X int X bimanual(otmp) struct obj * otmp; { X! return((otmp->olet == WEAPON_SYM || otmp->otyp == UNICORN_HORN) X! && objects[otmp->otyp].oc_bimanual); X } X #endif /* STUPID_CPP */ X X*** src/Old/mail.c Sun Jun 3 13:28:46 1990 X--- src/mail.c Tue May 8 19:16:30 1990 X*************** X*** 120,126 **** X X # ifdef VMS X extern unsigned long pasteboard_id; X! int broadcasts = 0; X # define getmailstatus() X # endif /* VMS */ X X--- 120,126 ---- X X # ifdef VMS X extern unsigned long pasteboard_id; X! volatile int broadcasts = 0; X # define getmailstatus() X # endif /* VMS */ X X*************** X*** 150,156 **** X /* find location next to (fx,fy) closest to (tx,ty) */ X d1 = dist2(fx,fy,tx,ty); X for(dx = -1; dx <= 1; dx++) for(dy = -1; dy <= 1; dy++) X! if((dx || dy) && X !IS_STWALL(levl[fx+dx][fy+dy].typ)) { X d2 = dist2(fx+dx,fy+dy,tx,ty); X if(d2 < d1) { X--- 150,156 ---- X /* find location next to (fx,fy) closest to (tx,ty) */ X d1 = dist2(fx,fy,tx,ty); X for(dx = -1; dx <= 1; dx++) for(dy = -1; dy <= 1; dy++) X! if((dx || dy) && isok(fx+dx,fy+dy) && X !IS_STWALL(levl[fx+dx][fy+dy].typ)) { X d2 = dist2(fx+dx,fy+dy,tx,ty); X if(d2 < d1) { X*************** X*** 229,238 **** X newmail() { X /* deliver a scroll of mail */ X register boolean invload = X! ((inv_weight() + (int)objects[SCR_MAIL].oc_weight) > 0 || X! inv_cnt() >= 52 || Fumbling); X! register struct monst *md = X! makemon(&mons[PM_MAIL_DAEMON], u.ux, u.uy); X X if(!md) return; X X--- 229,237 ---- X newmail() { X /* deliver a scroll of mail */ X register boolean invload = X! ((inv_weight() + (int)objects[SCR_MAIL].oc_weight) > 0 || X! inv_cnt() >= 52 || Fumbling); X! register struct monst *md = makemon(&mons[PM_MAIL_DAEMON], u.ux, u.uy); X X if(!md) return; X X*************** X*** 262,267 **** X--- 261,267 ---- X /* set known and do prinv() */ X (void) identify(addinv(mksobj(SCR_MAIL,FALSE))); X } X+ # endif /* NO_MAILREADER */ X X /* disappear again */ X mdappear(md,TRUE); X*************** X*** 272,278 **** X # ifdef VMS X broadcasts--; X # endif X- # endif /* NO_MAILREADER */ X } X X #endif /* OVLB */ X--- 272,277 ---- X*** src/Old/makedefs.c Sun Jun 3 13:29:07 1990 X--- src/makedefs.c Mon May 28 09:38:30 1990 X*************** X*** 3,17 **** X /* makedefs.c - NetHack version 3.0 */ X X X- #define EXTERN_H X #include "config.h" X #include "permonst.h" X #include "objclass.h" X #ifdef NULL X #undef NULL X #endif /* NULL */ X #define NULL ((genericptr_t)0) X X #if !defined(LINT) && !defined(__GNULINT__) X static const char SCCS_Id[] = "@(#)makedefs.c\t3.0\t89/11/15"; X #endif X--- 3,23 ---- X /* makedefs.c - NetHack version 3.0 */ X X X #include "config.h" X #include "permonst.h" X #include "objclass.h" X+ #ifdef MACOS X+ #include "patchlevel.h" X+ #endif X #ifdef NULL X #undef NULL X #endif /* NULL */ X #define NULL ((genericptr_t)0) X X+ #if defined(VMS) && defined(__GNUC__) X+ char *FDECL(ctime, (time_t *)); X+ #endif X+ X #if !defined(LINT) && !defined(__GNULINT__) X static const char SCCS_Id[] = "@(#)makedefs.c\t3.0\t89/11/15"; X #endif X*************** X*** 26,33 **** X # define RDMODE "r" X # define WRMODE "w" X #else X! # define RDMODE "r+" X! # define WRMODE "w+" X #endif X X #ifdef MACOS X--- 32,44 ---- X # define RDMODE "r" X # define WRMODE "w" X #else X! # ifdef VMS X! # define RDMODE "r" X! # define WRMODE "w" X! # else X! # define RDMODE "r+" X! # define WRMODE "w+" X! # endif X #endif X X #ifdef MACOS X*************** X*** 101,110 **** X void NDECL(save_resource); X #endif X X! char *FDECL(limit, (char *,BOOLEAN_P)); X X #if defined(SMALLDATA) && defined(MACOS) X! OSErr FDECL(write_resource, (Handle, short, Str255, short)); X # if defined(AZTEC) || defined(THINKC4) X int NDECL(getpid); X # endif X--- 112,121 ---- X void NDECL(save_resource); X #endif X X! char *FDECL(limit, (char *,int)); X X #if defined(SMALLDATA) && defined(MACOS) X! OSErr FDECL(write_resource, (Handle, ResType, short, Str255, short)); X # if defined(AZTEC) || defined(THINKC4) X int NDECL(getpid); X # endif X*************** X*** 220,226 **** X (void) fflush(stderr); X exit(1); X /*NOTREACHED*/ X! #ifdef MSDOS X return 0; X #endif X } X--- 231,237 ---- X (void) fflush(stderr); X exit(1); X /*NOTREACHED*/ X! #if defined(MSDOS) || defined(__GNULINT__) X return 0; X #endif X } X*************** X*** 235,240 **** X--- 246,255 ---- X #else X Sprintf(tempfile, "makedefs.%d", getpid()); X #endif X+ /* an ugly hack to limit pid-extension to 3 digits */ X+ #ifdef OS2 X+ if (strlen(tempfile) > 12) tempfile[12] = '\0'; X+ #endif X if(freopen(tempfile, WRMODE, stdout) == (FILE *)0) { X perror(tempfile); X exit(1); X*************** X*** 313,319 **** X (void) fclose(stdin); X (void) fclose(stdout); X #ifdef MACOS X! strcpy((char *)File, RUMOR_FILE); X CtoPstr((char *)File); X if(!GetVol(VolName, &vRef) && !GetFInfo(File, vRef, &info)){ X info.fdCreator = CREATOR; X--- 328,334 ---- X (void) fclose(stdin); X (void) fclose(stdout); X #ifdef MACOS X! Strcpy((char *)File, RUMOR_FILE); X CtoPstr((char *)File); X if(!GetVol(VolName, &vRef) && !GetFInfo(File, vRef, &info)){ X info.fdCreator = CREATOR; X*************** X*** 363,369 **** X #ifndef INFERNO X boolean skipping_demons = TRUE; X #endif X! Sprintf(tempfile, "%s.base", DATA_FILE); X if(freopen(tempfile, RDMODE, stdin) == (FILE *)0) { X perror(tempfile); X exit(1); X--- 378,390 ---- X #ifndef INFERNO X boolean skipping_demons = TRUE; X #endif X! Sprintf(tempfile, X! #ifdef OS2 X! "%s.bas", X! #else X! "%s.base", X! #endif X! DATA_FILE); X if(freopen(tempfile, RDMODE, stdin) == (FILE *)0) { X perror(tempfile); X exit(1); X*************** X*** 472,478 **** X char * X limit(name,pref) /* limit a name to 30 characters length */ X char *name; X! boolean pref; X { X (void) strncpy(temp, name, pref ? 26 : 30); X temp[pref ? 26 : 30] = 0; X--- 493,499 ---- X char * X limit(name,pref) /* limit a name to 30 characters length */ X char *name; X! int pref; X { X (void) strncpy(temp, name, pref ? 26 : 30); X temp[pref ? 26 : 30] = 0; X*************** X*** 487,493 **** X #ifdef SPELLS X int nspell = 0; X #endif X! boolean prefix = 0; X char let = '\0'; X boolean sumerr = FALSE; X X--- 508,514 ---- X #ifdef SPELLS X int nspell = 0; X #endif X! int prefix = 0; X char let = '\0'; X boolean sumerr = FALSE; X X*************** X*** 536,551 **** X if(objects[i].oc_material == GLASS) { X Printf("/* #define\t%s\t%d */\n", X objnam, i); X! continue; X } X default: X Printf("#define\t"); X } X! Printf("%s\t%d\n", limit(objnam, prefix), i); X prefix = 0; X X sum += objects[i].oc_prob; X } X Printf("#define\tLAST_GEM\t(JADE+1)\n"); X #ifdef SPELLS X Printf("#define\tMAXSPELL\t%d\n", nspell+1); X--- 557,583 ---- X if(objects[i].oc_material == GLASS) { X Printf("/* #define\t%s\t%d */\n", X objnam, i); X! prefix = -1; X! break; X } X default: X Printf("#define\t"); X } X! if (prefix >= 0) X! Printf("%s\t%d\n", limit(objnam, prefix), i); X prefix = 0; X X sum += objects[i].oc_prob; X } X+ X+ /* check last set of probabilities */ X+ if (sum && sum != 1000) { X+ (void) fprintf(stderr, X+ "prob error for %c (%d%%)", let, sum); X+ (void) fflush(stderr); X+ sumerr = TRUE; X+ } X+ X Printf("#define\tLAST_GEM\t(JADE+1)\n"); X #ifdef SPELLS X Printf("#define\tMAXSPELL\t%d\n", nspell+1); X*************** X*** 622,629 **** X void X do_monst() X { X! Handle monstData, objData; X! short i,j; X pmstr *pmMonst; X SFReply reply; X short refNum,error; X--- 654,662 ---- X void X do_monst() X { X! Handle monstData, objData, versData; X! char versStr[32], *vstr = VERSION; X! short i, j, patlev = PATCHLEVEL; X pmstr *pmMonst; X SFReply reply; X short refNum,error; X*************** X*** 655,677 **** X } X PtrToHand((Ptr)objects, &objData, ((i+1)*sizeof(struct objclass))); X X! strcpy((char *)&name[0], "\010NH3.rsrc"); X if (findNamedFile(&name[1], 0, &reply)) { X! strncpy((char *)&name[0],(char *)&reply.fName[0], reply.fName[0]+1); X if ((refNum = OpenResFile(name)) != -1) { X if (ResError() == noErr) { X! strcpy((char *)&name[0], "\012MONST_DATA"); X! if (error = write_resource(monstData, X MONST_DATA, name, refNum)) { X SysBeep(1); X Printf("Couldn't add monster data resource.\n"); X } X! strcpy((char *)&name[0], "\013OBJECT_DATA"); X! if (error = write_resource(objData, X OBJECT_DATA, name, refNum)) { X SysBeep(1); X Printf("Couldn't add object data resource.\n"); X } X CloseResFile(refNum); X if (ResError() != noErr) { X SysBeep(1); X--- 688,721 ---- X } X PtrToHand((Ptr)objects, &objData, ((i+1)*sizeof(struct objclass))); X X! /* place a small string in the creator resource to identify version */ X! Sprintf(versStr, "n%s patchlevel%2d", vstr, patlev); X! *versStr = (int)strlen(VERSION) + 13; /* n = actual string length */ X! PtrToHand(versStr, &versData, sizeof(versStr)); X! X! Strcpy((char *)&name[0], "\021nethack.proj.rsrc"); X if (findNamedFile(&name[1], 0, &reply)) { X! (void)strncpy((char *)&name[0],(char *)&reply.fName[0], reply.fName[0]+1); X if ((refNum = OpenResFile(name)) != -1) { X if (ResError() == noErr) { X! Strcpy((char *)&name[0], "\012MONST_DATA"); X! if (error = write_resource(monstData, HACK_DATA, X MONST_DATA, name, refNum)) { X SysBeep(1); X Printf("Couldn't add monster data resource.\n"); X } X! Strcpy((char *)&name[0], "\013OBJECT_DATA"); X! if (error = write_resource(objData, HACK_DATA, X OBJECT_DATA, name, refNum)) { X SysBeep(1); X Printf("Couldn't add object data resource.\n"); X } X+ Strcpy((char *)&name[0], "\000"); X+ if (error = write_resource(versData, CREATOR, X+ 0, name, refNum)) { X+ SysBeep(1); X+ Printf("Couldn't add creator info resource.\n"); X+ } X CloseResFile(refNum); X if (ResError() != noErr) { X SysBeep(1); X*************** X*** 735,752 **** X X X OSErr X! write_resource(data, resID, resName, refNum) X Handle data; X short resID; X Str255 resName; X short refNum; X { X- ResType theType; X short error; X Handle theRes; X X- theType = HACK_DATA; X- error = CurResFile(); X if (theRes = GetResource(theType, resID)) { X RmveResource(theRes); X error = ResError(); X--- 779,794 ---- X X X OSErr X! write_resource(data, theType, resID, resName, refNum) X Handle data; X+ ResType theType; X short resID; X Str255 resName; X short refNum; X { X short error; X Handle theRes; X X if (theRes = GetResource(theType, resID)) { X RmveResource(theRes); X error = ResError(); X END_OF_FILE if test 50662 -ne `wc -c <'patch8.03'`; then echo shar: \"'patch8.03'\" unpacked with wrong size! fi # end of 'patch8.03' fi echo shar: End of archive 9 \(of 24\). cp /dev/null ark9isdone 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 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 24 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