From decwrl!wyse!vsi1!apple!usc!cs.utexas.edu!uunet!zephyr.ens.tek.com!tekred!saab!billr Wed Jun 6 12:31:13 PDT 1990 Article 955 of comp.sources.games: Path: decwrl!wyse!vsi1!apple!usc!cs.utexas.edu!uunet!zephyr.ens.tek.com!tekred!saab!billr From: billr@saab.CNA.TEK.COM (Bill Randle) Newsgroups: comp.sources.games Subject: v10i029: NetHack3 - display oriented dungeons & dragons (Ver. 3.0), Patch8k Message-ID: <5737@tekred.CNA.TEK.COM> Date: 5 Jun 90 17:57:02 GMT Sender: news@tekred.CNA.TEK.COM Lines: 1650 Approved: billr@saab.CNA.TEK.COM Submitted-by: Izchak Miller Posting-number: Volume 10, Issue 29 Archive-name: NetHack3/Patch8k 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 'patch8.11' <<'END_OF_FILE' X*** mac/Old/mac.c Sun Jun 3 11:09:32 1990 X--- mac/mac.c Sat May 26 14:54:04 1990 X*************** X*** 11,24 **** X WindowPtr HackWindow; /* points to Hack's window */ X extern char *keys[8]; X extern short macflags; X short cursorPos=0; X short repDelay; X long lastMD; X! struct line { X! struct line *next_line; X! char *line_text; X! } *mactexthead; X! short maclinect, macmaxlen; X X int X tgetch() X--- 11,22 ---- X WindowPtr HackWindow; /* points to Hack's window */ X extern char *keys[8]; X extern short macflags; X+ extern long lowMemLimit; X short cursorPos=0; X short repDelay; X long lastMD; X! long segments = SEG_DO; X! extern short altCurs; /* should be a macflag */ X X int X tgetch() X*************** X*** 32,38 **** X register short keyCode; X short temp; X term_info *t; X- boolean noControlKey; X GrafPtr oldPort,oldPort1; X static char nextCommand; X short aboutBox(); X--- 30,35 ---- X*************** X*** 40,49 **** X Point mouseLoc; X WindowPtr theWindow; X void doUpdate(); X- #define noEscapeKey noControlKey X #define clearKey 0x47 X #define ESCAPEkey 0x1B X! X t = (term_info *)GetWRefCon(HackWindow); X mouseLoc.h = (macflags & fMoveWRTMouse) ? t->tcur_x : (u.ux-1); X mouseLoc.v = (macflags & fMoveWRTMouse) ? t->tcur_y : (u.uy+1); X--- 37,49 ---- X Point mouseLoc; X WindowPtr theWindow; X void doUpdate(); X #define clearKey 0x47 X #define ESCAPEkey 0x1B X! static int see, saw = 0; X! int eye, cursOff = 100; X! boolean cursRectInv; /* should be a macflag */ X! short fInFront = TRUE; X! X t = (term_info *)GetWRefCon(HackWindow); X mouseLoc.h = (macflags & fMoveWRTMouse) ? t->tcur_x : (u.ux-1); X mouseLoc.v = (macflags & fMoveWRTMouse) ? t->tcur_y : (u.uy+1); X*************** X*** 50,62 **** X cursorRect.left = t->tcur_x * t->charWidth + Screen_Border; X cursorRect.right = cursorRect.left + t->charWidth - 1; X cursorRect.top = t->height * t->tcur_y + Screen_Border; X! cursorRect.bottom = cursorRect.top + t->height; X cursorTime = GetCaretTime(); X! noControlKey = (t->system.keyBoardType <= envMacPlusKbd) ? TRUE : FALSE; X! box.left = mouseLoc.h * t->charWidth + Screen_Border; X! box.right = box.left + t->charWidth; X! box.top = mouseLoc.v * t->height + Screen_Border + t->height/2 - (t->charWidth/2); X! box.bottom = box.top + t->charWidth; X /* permit use of cursor keys and numeric keypad */ X /* does the same translation as in msdos.c but includes cursor keys */ X ch = '\0'; X--- 50,61 ---- X cursorRect.left = t->tcur_x * t->charWidth + Screen_Border; X cursorRect.right = cursorRect.left + t->charWidth - 1; X cursorRect.top = t->height * t->tcur_y + Screen_Border; X! cursorRect.bottom = cursorRect.top + t->height - 1; X cursorTime = GetCaretTime(); X! box.left = mouseLoc.h * t->charWidth + Screen_Border - 1; X! box.right = box.left + t->charWidth + 2; X! box.top = mouseLoc.v * t->height + Screen_Border - 1; X! box.bottom = box.top + t->height + 2; X /* permit use of cursor keys and numeric keypad */ X /* does the same translation as in msdos.c but includes cursor keys */ X ch = '\0'; X*************** X*** 79,100 **** X SetPort(HackWindow); X if (!(macflags & fDoNonKeyEvt)) { X cursorPos = -1; X! SetCursor(&ARROW_CURSOR); X } X! /* do cursor blinking */ X! message = TickCount() + cursorTime; X! if (!EventAvail(keyDownMask|mDownMask|autoKeyMask,&theEvent)) { X! keyCode = true; X! InvertRect(&cursorRect); X! } else X! keyCode = 0; X while (!ch) { X! (void)WaitNextEvent(everyEvent, &theEvent, 0L, 0L); X if (theEvent.what == keyDown || theEvent.what == autoKey) { X ch = 0; X ObscureCursor(); X /* use raw key codes */ X- temp = keyCode; X keyCode = (LoWord(theEvent.message) & keyCodeMask)>>8; X if (keyCode == clearKey) { X macflags = macflags ^ fToggleNumPad; X--- 78,94 ---- X SetPort(HackWindow); X if (!(macflags & fDoNonKeyEvt)) { X cursorPos = -1; X! if (! flags.wantspace) SetCursor(&ARROW_CURSOR); X } X! /* initialize cursor blinking */ X! message = TickCount(); X! cursRectInv = FALSE; X while (!ch) { X! (void)WaitNextEvent(everyEvent, &theEvent, (fInFront) ? 0L : 50L, 0L); X if (theEvent.what == keyDown || theEvent.what == autoKey) { X ch = 0; X ObscureCursor(); X /* use raw key codes */ X keyCode = (LoWord(theEvent.message) & keyCodeMask)>>8; X if (keyCode == clearKey) { X macflags = macflags ^ fToggleNumPad; X*************** X*** 101,112 **** X SetWTitle(HackWindow, X (macflags & fToggleNumPad) ? "\016NetHack [MOVE]" X : "\015NetHack [NUM]"); X- keyCode = temp; X ch = 0; X continue; X } X- if (temp) X- InvertRect(&cursorRect); X if ((macflags & fToggleNumPad) && (keyCode>0x40 &&keyCode < 0x5D) X || (keyCode > 0x7A && keyCode<0x7F)) { X ch = t->keyMap[keyCode-65]; X--- 95,103 ---- X*************** X*** 116,127 **** X if (ch) X break; X } X! if (keyCode == 50 && noEscapeKey) { X ch = (char)ESCAPEkey; /* ESC */ X break; X! } /* make the command key = control key on old Mac keyboards */ X! if ((theEvent.modifiers & cmdKey) && noControlKey) { X ch = (char)(theEvent.message & 0x1F); X break; X } X if (theEvent.modifiers & optionKey) { X--- 107,125 ---- X if (ch) X break; X } X! if (t->system.keyBoardType < 4 && keyCode == 50) { X ch = (char)ESCAPEkey; /* ESC */ X break; X! } /* make the command key = control key on all non-adb keyboards X! Now, LEAVE it this way ! Otherwise you'll render non-us X! keyboards useless, since here is where "<" and ">" are located */ X! if ((theEvent.message & 0xFF) == 0x60) { X! ch = (char)ESCAPEkey; X! break; X! } /* This is the way to fix backquote->esc for all macs */ X! if (theEvent.modifiers & cmdKey) { X ch = (char)(theEvent.message & 0x1F); X+ if(ch == ('Q' & 0x1F)) ch = 'Q'; /* For Quit */ X break; X } X if (theEvent.modifiers & optionKey) { X*************** X*** 140,155 **** X /* what other events to handle */ X switch (theEvent.what) { X case nullEvent: X GetPort(&oldPort1); X SetPort((GrafPtr)HackWindow); X /* wait until something occurs */ X! if (TickCount() > message) { X message = TickCount() + cursorTime; X! if (!(macflags & fMoveWRTMouse) X! || (macflags & fMoveWRTMouse && !keyCode)) { X! InvertRect(&cursorRect); X! keyCode = !keyCode; X! } X } X if (FrontWindow() == HackWindow && (macflags & fDoNonKeyEvt)) { X if ((FindWindow(theEvent.where,&theWindow) == inContent) X--- 138,152 ---- X /* what other events to handle */ X switch (theEvent.what) { X case nullEvent: X+ if (!fInFront) X+ break; X GetPort(&oldPort1); X SetPort((GrafPtr)HackWindow); X /* wait until something occurs */ X! if ((TickCount() > message) && (FrontWindow() == HackWindow)) { X message = TickCount() + cursorTime; X! InvertRect(&cursorRect); X! cursRectInv = !cursRectInv; X } X if (FrontWindow() == HackWindow && (macflags & fDoNonKeyEvt)) { X if ((FindWindow(theEvent.where,&theWindow) == inContent) X*************** X*** 157,184 **** X X GetMouse(&mouseLoc); X if (PtInRect(mouseLoc,&box)) { X! CursHandle theCurs; X! X! theCurs = GetCursor(3); X! cursorPos = 8; X! SetCursor(*theCurs); X } else { X PtToAngle(&box,mouseLoc,&temp); X! if (temp >336 || temp < 23) { X! temp = 0; X } else { X! temp = (temp + 23)/45; X } X! if (temp >=0 && temp <8 && cursorPos != temp) { X! SetCursor(*t->cursor[temp]); X! cursorPos = temp; X! #ifdef THINK_C X! repDelay = KeyThresh*2; X! #else X! repDelay = 42; X! #endif X! lastMD = theEvent.when; X } X } X } else if (cursorPos>=0) { X cursorPos = -1; X--- 154,203 ---- X X GetMouse(&mouseLoc); X if (PtInRect(mouseLoc,&box)) { X! temp = 8; X } else { X PtToAngle(&box,mouseLoc,&temp); X! temp = ((temp + 22) / 45) % 8; /* 0=N, 1=NE ... 7=NW */ X! } X! /* since we're not doing anything let's look at the cursor */ X! if (altCurs) { /* this list is prioritized! */ X! if (Sick) { X! cursOff = 130; /* offset for CURS resource set */ X! see = SICK; X! } else if (Blind) { X! cursOff = 120; X! see = BLINDED; X! } else if (Hallucination) { X! cursOff = 110; X! see = HALLUC; X! } else if (Confusion || Stunned) { X! see = CONFUSION; X } else { X! cursOff = 100; X! see = 0; X } X! } else { X! see = (Confusion || Stunned) ? CONFUSION : 0; X! cursOff = 100; X! } X! if ((cursorPos != temp) || (see != saw)) { X! if (see != saw) { X! switch(see) { X! case CONFUSION: X! break; X! default: /* hmm, a bit much for !altCurs */ X! for (eye=0; eye<=8; eye++) { X! EmptyHandle(t->cursor[eye]); X! t->cursor[eye] = GetCursor(eye+cursOff); X! HNoPurge(t->cursor[eye]); X! } X! break; X! } X! saw = see; X } X+ cursorPos = temp; X+ eye = (Confusion || Stunned) ? rn2(9) : temp; X+ SetCursor(*t->cursor[eye]); X } X } else if (cursorPos>=0) { X cursorPos = -1; X*************** X*** 190,196 **** X ch = mButtonDown(theEvent, t, &nextCommand); X if (repDelay) { X #ifdef THINK_C X! repDelay = KeyRepThresh*2; X #else X repDelay /= 3; X #endif X--- 209,215 ---- X ch = mButtonDown(theEvent, t, &nextCommand); X if (repDelay) { X #ifdef THINK_C X! repDelay = KeyRepThresh; X #else X repDelay /= 3; X #endif X*************** X*** 209,214 **** X--- 228,234 ---- X case kSuspendResumeMessage: X if (!SuspResIsResume(theEvent.message)) { X /* ---------- SUSPEND EVENT ------------ */ X+ fInFront = FALSE; X if (macflags & fZoomOnContextSwitch X && !EmptyRect(&(**(HackWindow)->visRgn).rgnBBox)) X { X*************** X*** 217,222 **** X--- 237,243 ---- X } X } else { X /* ---------- RESUME EVENT ------------- */ X+ fInFront = TRUE; X if (macflags & fZoomOnContextSwitch) { X SizeWindow(HackWindow, X (t->maxCol * t->charWidth) + 2 * Screen_Border, X*************** X*** 244,249 **** X--- 265,271 ---- X case updateEvt: X if (HackWindow == (WindowPtr)theEvent.message) { X doUpdate(t); X+ if (cursRectInv) InvertRect(&cursorRect); /* restore cursor */ X } X break; X X*************** X*** 278,289 **** X X case mouseDown: X ch = mButtonDown(theEvent, t, &nextCommand); X break; X } X } X } X! if (keyCode && ch && (theEvent.what != keyDown && theEvent.what != autoKey)) X! InvertRect(&cursorRect); X X SetPort(oldPort); X return ((ch == '\r') ? '\n' : ch); X--- 300,316 ---- X X case mouseDown: X ch = mButtonDown(theEvent, t, &nextCommand); X+ #ifdef THINK_C X+ repDelay = KeyThresh; X+ #else X+ repDelay = 42; X+ #endif X+ lastMD = theEvent.when; X break; X } X } X } X! if (cursRectInv) InvertRect(&cursorRect); X X SetPort(oldPort); X return ((ch == '\r') ? '\n' : ch); X*************** X*** 293,300 **** X doUpdate(t) X term_info *t; X { X! short temp; X GrafPtr oldPort; X #ifdef TEXTCOLOR X if (t->system.hasColorQD) { X Rect r; X--- 320,329 ---- X doUpdate(t) X term_info *t; X { X! register short temp; X GrafPtr oldPort; X+ register short i,j; X+ register char attr, *p; X #ifdef TEXTCOLOR X if (t->system.hasColorQD) { X Rect r; X*************** X*** 312,381 **** X GetPort(&oldPort); X SetPort((GrafPtr)HackWindow); X BeginUpdate(HackWindow); X! if (t->inColor && (macflags & fDoUpdate) && !(macflags & 0x2000)) { X! char *tmp; X! short x,y; X! X! tmp = calloc(2*t->maxCol, sizeof(char)); X! BlockMove(t->screen[0], tmp, t->maxCol); X! BlockMove(t->screen[1], &tmp[t->maxCol], t->maxCol); X! x = t->tcur_x; X! y = t->tcur_y; X! temp = flags.toplin; X! flags.toplin = 0; X! docrt(); X! flags.toplin = temp; X! BlockMove(tmp, t->screen[0], t->maxCol); X! BlockMove(&tmp[t->maxCol], t->screen[1], t->maxCol); X! free(tmp); X! t->tcur_y = y; X! t->tcur_x = x; X! } X! if (macflags & fDoUpdate) { X! for (temp = 0; X! temp < ((t->inColor && !(macflags & fFullScrKluge)) X! ? 2 : t->maxRow); X! temp++) { X! if ((macflags & fScreenKluges) == fScreenKluges X! && temp == t->maxRow-1){ X! if(flags.standout) X! standoutbeg(); X! } X! MoveTo(Screen_Border, X! t->ascent + (temp * t->height) + Screen_Border); X! DrawText(&t->screen[temp][0], 0, t->maxCol); X! if ((macflags & fScreenKluges) == fScreenKluges X! && temp == t->maxRow-1){ X! if(flags.standout) X! standoutend(); X! } X! } X! X! if (macflags & fDisplayKluge) { X! register struct line *tl; X! int curline, lth; X! X! if(flags.toplin == 1) more(); /* ab@unido */ X! remember_topl(); X! X! lth = CO - macmaxlen - 2; /* Use full screen width */ X! if (maclinect < LI && lth >= 10) { /* in a corner */ X! home (); X! cl_end (); X! flags.toplin = 0; X! curline = 1; X! for (tl = mactexthead; tl; tl = tl->next_line) { X! curs (lth, curline); X! if(curline > 1) X! cl_end (); X! xputs(tl->line_text); X! curx = curx + strlen(tl->line_text); X! curline++; X } X! curs (lth, curline); X } X! } X! } X EndUpdate(HackWindow); X SetPort(oldPort); X } X--- 341,417 ---- X GetPort(&oldPort); X SetPort((GrafPtr)HackWindow); X BeginUpdate(HackWindow); X! ForeColor(t->color[0]); X! BackColor(t->color[7]); X! for (i = 0; imaxRow; i++) { X! p = t->scrAttr[i]; X! for (j = temp = 0, attr = *p; jmaxCol; j +=1, p++) { X! if (*p != attr) { X! MoveTo(Screen_Border + temp*t->charWidth, X! t->ascent + (i * t->height) + X! Screen_Border); X! if (attr & 0x80) { X! ForeColor(t->color[7]); X! BackColor(t->color[0]); X! } else if (t->inColor) { X! ForeColor(t->color[attr]); X! /* yellow fgnd hard to see on white bgnd */ X! /* so change to green background */ X! switch(attr) { X! case BROWN: X! BackColor(t->color[GREEN]); X! break; X! case BLUE: X! BackColor(t->color[CYAN]); X! break; X! case CYAN: X! BackColor(t->color[BLUE]); X! break; X! default: X! BackColor(t->color[7]); X! break; X! } X! } else { X! ForeColor(t->color[0]); X! BackColor(t->color[7]); X! } X! DrawText(&(t->screen[i][temp]), 0, j - temp); X! temp = j; X! attr = *p; X! } /* if */ X! } /* for j */ X! if (temp != t->maxCol) { X! MoveTo(Screen_Border + temp*t->charWidth, X! t->ascent + (i * t->height) + X! Screen_Border); X! if (attr & 0x80) { X! ForeColor(t->color[7]); X! BackColor(t->color[0]); X! } else if (t->inColor) { X! ForeColor(t->color[attr]); X! /* yellow fgnd hard to see on white bgnd */ X! /* so change to green background */ X! switch(attr) { X! case BROWN: X! BackColor(t->color[GREEN]); X! break; X! case BLUE: X! BackColor(t->color[CYAN]); X! break; X! case CYAN: X! BackColor(t->color[BLUE]); X! break; X! default: X! BackColor(t->color[7]); X! break; X } X! } else { X! ForeColor(t->color[0]); X! BackColor(t->color[7]); X } X! DrawText(&(t->screen[i][temp]), 0, j - temp); X! } /* if */ X! } /* for i */ X EndUpdate(HackWindow); X SetPort(oldPort); X } X*************** X*** 399,405 **** X if (macflags & fDoNonKeyEvt) { X switch (FindWindow(theEvent.where,&theWindow)) { X case inMenuBar: X! X SetCursor(&ARROW_CURSOR); X message = MenuSelect(theEvent.where); X X--- 435,442 ---- X if (macflags & fDoNonKeyEvt) { X switch (FindWindow(theEvent.where,&theWindow)) { X case inMenuBar: X! if (!(macflags & fDoMenus)) X! break; X SetCursor(&ARROW_CURSOR); X message = MenuSelect(theEvent.where); X X*************** X*** 509,519 **** X box.bottom = box.top + 1; X GetMouse(&mouseLoc); X PtToAngle(&box,mouseLoc,&temp); X! if (temp >337 || temp < 23) { X! temp = 0; X! } else { X! temp = (temp + 23)/45; X! } X switch(cursorPos) { X case 0: X ch = 'k'; X--- 546,552 ---- X box.bottom = box.top + 1; X GetMouse(&mouseLoc); X PtToAngle(&box,mouseLoc,&temp); X! temp = ((temp + 22) / 45) % 8; /* ~same as above */ X switch(cursorPos) { X case 0: X ch = 'k'; X*************** X*** 551,557 **** X break; X } X } else { X! if(flags.wantspace) ch = 0x20; X } X return ch; X } X--- 584,596 ---- X break; X } X } else { X! switch (FindWindow(theEvent.where,&theWindow)) { X! case inContent: X! if(flags.wantspace) ch = 0x20; X! break; X! default: X! break; X! } X } X return ch; X } X*************** X*** 635,647 **** X { X if (t->tcur_y >= t->maxRow-1) { X short temp; X! char *s; X X BlockMove((Ptr)t->screen[1], (Ptr)t->screen[0], X (Size)((t->maxRow - 1) * t->maxCol)); X! for (temp = 0, s = t->screen[t->maxRow - 1]; X! temp < t->maxCol; temp++, s++) { X *s = ' '; X } X { X Pattern p, o; X--- 674,689 ---- X { X if (t->tcur_y >= t->maxRow-1) { X short temp; X! char *s, *s1; X X BlockMove((Ptr)t->screen[1], (Ptr)t->screen[0], X (Size)((t->maxRow - 1) * t->maxCol)); X! BlockMove((Ptr)t->scrAttr[1], (Ptr)t->scrAttr[0], X! (Size)((t->maxRow - 1) * t->maxCol)); X! for (temp = 0, s = t->screen[t->maxRow - 1], s1 = t->scrAttr[t->maxRow - 1]; X! temp < t->maxCol; temp++, s++, s1++) { X *s = ' '; X+ *s1 = 0; X } X { X Pattern p, o; X*************** X*** 698,705 **** X if (!strncmp(s, "\033[", 2)) { X switch(*(s + 2)) { X case 'c': /* color kluge */ X- if (t->inColor) { X temp = (short)(*(s + 3) - 'a'); X if (temp >= BLACK && temp < MAXCOLORS && X (temp % (MAXCOLORS / 2) != GRAY)) /* set colour */ X ForeColor(t->color[temp % (MAXCOLORS / 2)]); X--- 740,753 ---- X if (!strncmp(s, "\033[", 2)) { X switch(*(s + 2)) { X case 'c': /* color kluge */ X temp = (short)(*(s + 3) - 'a'); X+ t->curAttr = temp; X+ if (temp >= BLACK && temp < MAXCOLORS && X+ (temp % (MAXCOLORS / 2) != GRAY)) /* set colour */ X+ t->curAttr = temp % (MAXCOLORS / 2); X+ if ((temp & 0x07) == GRAY) X+ t->curAttr = 0; X+ if (t->inColor) { X if (temp >= BLACK && temp < MAXCOLORS && X (temp % (MAXCOLORS / 2) != GRAY)) /* set colour */ X ForeColor(t->color[temp % (MAXCOLORS / 2)]); X*************** X*** 719,724 **** X--- 767,774 ---- X if (*(s + 3) == 'm') { X ForeColor(t->color[0]); X BackColor(t->color[7]); X+ t->curHilite = FALSE; X+ t->curAttr = 0; X } X break; X case '1': /* inverse video begin */ X*************** X*** 725,730 **** X--- 775,782 ---- X if (*(s + 3) == 'm') { X ForeColor(t->color[7]); X BackColor(t->color[0]); X+ t->curHilite = TRUE; X+ t->curAttr = 0; X } X break; X case 'A': /* cursor up */ X*************** X*** 762,769 **** X eraseRect.bottom = eraseRect.top + t->height; X eraseRect.right = (t->maxCol*t->charWidth) + Screen_Border; X EraseRect(&eraseRect); X! for (temp = x, c = &(t->screen[y][x]); temp < t->maxCol; temp++) X *c++ = ' '; X break; X case '2': X if (*(s+3) == 'J') { /* clear screen */ X--- 814,824 ---- X eraseRect.bottom = eraseRect.top + t->height; X eraseRect.right = (t->maxCol*t->charWidth) + Screen_Border; X EraseRect(&eraseRect); X! for (temp = x, c = &(t->screen[y][x]), c1 = &(t->scrAttr[y][x]); X! temp < t->maxCol; temp++) { X *c++ = ' '; X+ *c1++ = 0; X+ } X break; X case '2': X if (*(s+3) == 'J') { /* clear screen */ X*************** X*** 772,779 **** X eraseRect.bottom = t->maxRow*t->height + Screen_Border; X eraseRect.right = t->charWidth*t->maxCol + Screen_Border; X EraseRect(&eraseRect); X! for (y = 0, c = t->screen[0]; y < t->maxCol * t->maxRow; y++) { X *c++ = ' '; X } X cur.h = Screen_Border; X cur.v = t->ascent + Screen_Border; X--- 827,836 ---- X eraseRect.bottom = t->maxRow*t->height + Screen_Border; X eraseRect.right = t->charWidth*t->maxCol + Screen_Border; X EraseRect(&eraseRect); X! for (y = 0, c = t->screen[0], c1 = t->scrAttr[0]; X! y < t->maxCol * t->maxRow; y++) { X *c++ = ' '; X+ *c1++ = 0; X } X cur.h = Screen_Border; X cur.v = t->ascent + Screen_Border; X*************** X*** 808,813 **** X--- 865,872 ---- X } X DrawText((Ptr)stmp, 0, temp); X BlockMove((Ptr)stmp, (Ptr)&(t->screen[y][x]), (long)temp); X+ memset(&(t->scrAttr[y][x]), ((t->curHilite) ? 128 : 0) + t->curAttr, X+ temp); X stmp += temp + 1; X charleft -= temp + 1; X if (!savech) { X*************** X*** 897,902 **** X--- 956,962 ---- X } X } else { X t->screen[y][x] = c; X+ t->scrAttr[y][x] = ((t->curHilite) ? 128 : 0) + t->curAttr; X DrawText(&c, 0, 1); X if (!savech) { X t->tcur_x++; X*************** X*** 979,987 **** X c = *(fstr + 1); X *(fstr + 1) = '\0'; X if (islong) X! sprintf(numAsStr, s, num); X else X! sprintf(numAsStr, s, (short)num); X *(fstr + 1) = c; X Strcpy(pb, numAsStr); X pb = (char *)(pb + strlen(numAsStr)); X--- 1039,1047 ---- X c = *(fstr + 1); X *(fstr + 1) = '\0'; X if (islong) X! Sprintf(numAsStr, s, num); X else X! Sprintf(numAsStr, s, (short)num); X *(fstr + 1) = c; X Strcpy(pb, numAsStr); X pb = (char *)(pb + strlen(numAsStr)); X*************** X*** 1095,1102 **** X ModalDialog(NULL, &itemHit); X } X } else { X! while (!itemHit) { X! SystemTask(); X if (GetNextEvent(everyEvent,&theEvent)) X if (theEvent.what == mouseDown || X theEvent.what == keyDown || X--- 1155,1165 ---- X ModalDialog(NULL, &itemHit); X } X } else { X! long tickNum; X! X! tickNum = TickCount() + 180; /* 3 second wait max */ X! while (!itemHit && TickCount()height) + 2 * Screen_Border + 10); X X t->screen = (char **)malloc(row * sizeof(char *)); X+ t->scrAttr = (char **)malloc(row * sizeof(char *)); X l = malloc(row * col * sizeof(char)); X+ m = malloc(row * col * sizeof(char)); X for (i = 0;i < row;i++) { X t->screen[i] = (char *)(l + (i * col * sizeof(char))); X+ t->scrAttr[i] = (char *)(m + (i * col * sizeof(char))); X } X for (i = 0; i < row; i++) { X for (j = 0; j < col; j++) { X t->screen[i][j] = ' '; X+ t->scrAttr[i][j] = '\0'; X } X } X+ t->curHilite = 0; X+ t->curAttr = 0; X X /* give time for Multifinder to bring NetHack window to front */ X for(tempFont = 0; tempFont<10; tempFont++) { X*************** X*** 290,297 **** X panic("Can't get OBJECT resource data."); X } X X! for (i = 0; i<8; i++) { X! t->cursor[i] = GetCursor(100+i); X } X X (void)aboutBox(0); X--- 297,306 ---- X panic("Can't get OBJECT resource data."); X } X X! for (j = 30; j >= 0; j -= 10) { X! for (i = 0; i<=8; i++) { X! t->cursor[i] = GetCursor(100+i+j); /* self-contained cursors */ X! } X } X X (void)aboutBox(0); X*************** X*** 380,392 **** X int X read_config_file() X { X! X int optfd; X optfd = 0; X! if ( (optfd = open(OPTIONS, OMASK)) > (int)NULL){ X read_opts(optfd); X (void) close(optfd); X } X } X X int X--- 389,413 ---- X int X read_config_file() X { X! term_info *t; X int optfd; X+ Str255 name; X+ short oldVol; X+ X optfd = 0; X! t = (term_info *)GetWRefCon(HackWindow); X! X! GetVol(name, &oldVol); X! SetVol(0L, t->system.sysVRefNum); X! if ( (optfd = open(OPTIONS, OMASK)) <= 0) { X! SetVol(0L, t->recordVRefNum); X! optfd = open(OPTIONS, OMASK); X! } X! if ( optfd > (short)NULL){ X read_opts(optfd); X (void) close(optfd); X } X+ SetVol(0L, oldVol); X } X X int X*************** X*** 394,408 **** X { X int fd; X short temp_flags; X X if((fd = open(OPTIONS, O_WRONLY | O_BINARY)) <= 0) { X OSErr result; X char *tmp; X X! tmp = CtoPstr(OPTIONS); X! result = Create((StringPtr)tmp, (short)0, CREATOR, AUXIL_TYPE); X! if (result == noErr) X! fd = open(OPTIONS, O_WRONLY | O_BINARY); X } X X if (fd < 0) X--- 415,437 ---- X { X int fd; X short temp_flags; X+ term_info *t; X X+ t = (term_info *)GetWRefCon(HackWindow); X+ SetVol(0L, t->system.sysVRefNum); X+ X if((fd = open(OPTIONS, O_WRONLY | O_BINARY)) <= 0) { X OSErr result; X char *tmp; X X! SetVol(0L, t->recordVRefNum); X! if((fd = open(OPTIONS, O_WRONLY | O_BINARY)) <= 0) { X! SetVol(0L, t->system.sysVRefNum); X! tmp = CtoPstr(OPTIONS); X! result = Create((StringPtr)tmp, (short)0, CREATOR, AUXIL_TYPE); X! if (result == noErr) X! fd = open(OPTIONS, O_WRONLY | O_BINARY); X! } X } X X if (fd < 0) X*************** X*** 418,423 **** X--- 447,454 ---- X X temp_flags = (macflags & fZoomOnContextSwitch) ? 1 : 0; X write(fd, &temp_flags, sizeof(short)); X+ X+ write(fd, &altCurs, sizeof(short)); X X #ifdef TUTTI_FRUTTI X write(fd, pl_fruit, PL_FSIZ); X*************** X*** 425,430 **** X--- 456,464 ---- X write(fd, inv_order, strlen(inv_order)+1); X close(fd); X } X+ X+ SetVol(0L, t->recordVRefNum); X+ X return 0; X } X X*************** X*** 448,459 **** X else X macflags &= ~fZoomOnContextSwitch; X X #ifdef TUTTI_FRUTTI X read(fd, pl_fruit, PL_FSIZ); X #endif X read(fd,tmp_order,strlen(inv_order)+1); X if(strlen(tmp_order) == strlen(inv_order)) X! strcpy(inv_order,tmp_order); X return 0; X } X X--- 482,496 ---- X else X macflags &= ~fZoomOnContextSwitch; X X+ read(fd, &altCurs, sizeof(short)); X+ X #ifdef TUTTI_FRUTTI X read(fd, pl_fruit, PL_FSIZ); X #endif X read(fd,tmp_order,strlen(inv_order)+1); X if(strlen(tmp_order) == strlen(inv_order)) X! Strcpy(inv_order,tmp_order); X! X return 0; X } X X*** ./Old/Install.ami Sun Jun 3 11:36:59 1990 X--- ./Install.ami Sat Jun 2 19:45:10 1990 X*************** X*** 2,8 **** X Instructions for compiling and installing NetHack 3.0 X on an AMIGA system X ===================================================== X! Last Revision: 17 Feb 1990 X X Overview X -------- X--- 2,8 ---- X Instructions for compiling and installing NetHack 3.0 X on an AMIGA system X ===================================================== X! Last Revision: 27 May 1990 X X Overview X -------- X*************** X*** 16,21 **** X--- 16,33 ---- X Section III and IV are compiler specific sections, with section III X designed for Lattice users, and section IV for Manx/Aztec users. X X+ Requirements X+ ------------ X+ Amiga 500,1000,2000,2500 running WorkBench 1.3 and KickStart 1.2 or 1.3. X+ (As of this time, the Amiga 3000 running beta-release versions of X+ WorkBench 2.0 are not supported. While the core of the game appears to X+ function, the custom font is not recognized by the operating system. X+ The NetHack team welcomes reports of specific problems and solutions on X+ this [or any other] subject.) X+ one meg of RAM and one floppy drive (painful, but functional) X+ or one meg of RAM and two floppy drives (much better) X+ or more than one meg of RAM and a hard disk with 2+ meg free (best) X+ X Credits X ------- X Olaf Seibert first ported NetHack 2.3 and 3.0 to the Amiga. Richard X*************** X*** 39,52 **** X + NetHack.info X + NewGame.info X + NetHackScore.info X + default.icon X! * Special NetHack font. X X Installation Steps: X X 1) If you have a hard disk, create a directory named NetHack. X Assign Nethack: to be the path to this directory. If you have a X! floppy, format a disk named NetHack. X X 2) If you have a hard disk, assign HackExe: to the above directory. X If you have a floppy, format an additional disk named HackExe. X--- 51,67 ---- X + NetHack.info X + NewGame.info X + NetHackScore.info X+ + Guidebook.info X + default.icon X! * Special NetHack font (files hack.font and 8). X X Installation Steps: X X 1) If you have a hard disk, create a directory named NetHack. X Assign Nethack: to be the path to this directory. If you have a X! floppy, format a disk named NetHack. (If you have a hard disk X! but only one meg of memory, you will probably not have enough X! memory: you may need to run from a floppy.) X X 2) If you have a hard disk, assign HackExe: to the above directory. X If you have a floppy, format an additional disk named HackExe. X*************** X*** 57,66 **** X X 4) Copy the remainder of the files to NetHack:. If you are using X the optional font, create a Hack subdirectory on NetHack:, and X! copy "8" into it. X X 5) Configure NetHack.cnf as per your configuration. Remember not X! to set GRAPHICS if you are not using the optional font. X X That's all there is to it! If you are using the CLI interface, make sure X that the stack is set fairly large (at LEAST 40000 bytes). Move to the X--- 72,86 ---- X X 4) Copy the remainder of the files to NetHack:. If you are using X the optional font, create a Hack subdirectory on NetHack:, and X! copy "8" into it. Be sure that Guidebook and Guidebook.info are X! in the same directory, and that the Default Tool field points to X! the More program (found on your AmigaDos System disk in the X! Utilities directory). Depending on where you got your copy of X! NetHack, the Guidebook file may be called Guidebook.mss. X X 5) Configure NetHack.cnf as per your configuration. Remember not X! to set GRAPHICS if you are not using the optional font. If you X! have only one meg of ram, do not use a ram disk. X X That's all there is to it! If you are using the CLI interface, make sure X that the stack is set fairly large (at LEAST 40000 bytes). Move to the X*************** X*** 70,81 **** X the WorkBench pull down menu. This icon now represents your personal X profile. You can now rename this icon, and tailor it to your liking X as described below. If you start a game from the WorkBench interface, X! saving the game will automatically tie the personal file icon with the X saved game. So the next time you select your icon, the game will be X restored. X X As mentioned above, the icon representing your personal profile can be X! customized by you. This is done via the the Info command available from X WorkBench. You can adjust the following using the ToolTypes from the X WorkBench info command: X X--- 90,101 ---- X the WorkBench pull down menu. This icon now represents your personal X profile. You can now rename this icon, and tailor it to your liking X as described below. If you start a game from the WorkBench interface, X! saving the game will automatically tie the personal file icon to the X saved game. So the next time you select your icon, the game will be X restored. X X As mentioned above, the icon representing your personal profile can be X! customized. This is done via the the Info command available from X WorkBench. You can adjust the following using the ToolTypes from the X WorkBench info command: X X*************** X*** 90,101 **** X X * PATH= - To search for files such as rumors, help, etc. X X! * CMDLINE= - Arguments as passed on command line from cli. X! Note: only the following flags are valid at this point: n, X, X! D, and r. X X * SCORE - Display the record of scores. Options as X! available on the command line from CLI after a -s flag. X X Note that the NetHack.cnf file is read first, then the ToolTypes. This X means that the options specified in the NetHack.cnf act as defaults X--- 110,120 ---- X X * PATH= - To search for files such as rumors, help, etc. X X! * CMDLINE= - Arguments as passed on the CLI command line. X! Note: only the following flags are valid: n, X, D, and r. X X * SCORE - Display the record of scores. Options as X! available on the CLI command line after a -s flag. X X Note that the NetHack.cnf file is read first, then the ToolTypes. This X means that the options specified in the NetHack.cnf act as defaults X*************** X*** 105,118 **** X default values for OPTIONS, which will generally be overridden by X ToolTypes entries. X X Section II - General Compilation Instructions X --------------------------------------------- X X 1) Before doing any compilation, read the README files distributed X! with the source. These should familiarize you with the X! source tree layout, and what files are shared with what computers. X! Generally, everything in the amiga directory is used exclusively by X! the Amiga. X X 2) Create the sub-directories, and name them as indicated in the source X README file. If you have a hard drive, this is fairly trivial X--- 124,142 ---- X default values for OPTIONS, which will generally be overridden by X ToolTypes entries. X X+ Also, there is one additional option that may be specified in the X+ NetHack.cnf file or on an OPTIONS line: flush. When enabled, flush X+ discards all characters in the queue except the first, which limits X+ but does NOT completely eliminate the "accidents" which can occur if X+ you get ahead of the game when typing. The default setting is noflush. X+ X Section II - General Compilation Instructions X --------------------------------------------- X X 1) Before doing any compilation, read the README files distributed X! with the source. These should familiarize you with the source tree X! layout, and what files are shared with what computers. Generally, X! everything in the amiga directory is used exclusively by the Amiga. X X 2) Create the sub-directories, and name them as indicated in the source X README file. If you have a hard drive, this is fairly trivial X*************** X*** 163,169 **** X running from CLI. X X 5) If you have significant spare ram, you may wish to make your X! compiler resident (Lattice 5.04's lc, lc1, and lc2 need about X 215K while Manx's cc and as need about 135K). X X 6) At this point, you're almost ready to begin a compile. Read VERY X--- 187,193 ---- X running from CLI. X X 5) If you have significant spare ram, you may wish to make your X! compiler resident (Lattice 5.05's lc, lc1, and lc2 need about X 215K while Manx's cc and as need about 135K). X X 6) At this point, you're almost ready to begin a compile. Read VERY X*************** X*** 174,180 **** X the Amiga: directory (font and icons), define the UUDEC symbol X at the appropriate place in the makefile. The first thing X Makefile.ami does is build a program called 'makedefs', which X! handles a variety of data file generation. Makedefs will then be X run to create a few files, followed by an alphabetically sorted X compilation of the entire source tree. This compilation process X will compile selected files from Amiga:, Others:, Src1:, Src2:, X--- 198,205 ---- X the Amiga: directory (font and icons), define the UUDEC symbol X at the appropriate place in the makefile. The first thing X Makefile.ami does is build a program called 'makedefs', which X! handles a variety of data file generation, and a program called X! 'lev_comp' which compiles the special levels. Makedefs will then be X run to create a few files, followed by an alphabetically sorted X compilation of the entire source tree. This compilation process X will compile selected files from Amiga:, Others:, Src1:, Src2:, X*************** X*** 181,188 **** X and Src3: directories. If all goes well, all of the objects will X be linked together to form a binary. With all of the options X enabled, the Manx 3.6 executable runs about 790K, and the Lattice X! executable runs about 790K (without debug hunks, or about 1050K X! with debug hunks - see below). X X SECTION III - Lattice Compilation Instructions X ---------------------------------------------- X--- 206,215 ---- X and Src3: directories. If all goes well, all of the objects will X be linked together to form a binary. With all of the options X enabled, the Manx 3.6 executable runs about 790K, and the Lattice X! executable runs about 750K (without debug hunks, or about 1025K X! with debug hunks - see below). After building the main binary, X! the makefile will build and install the auxiliary files including X! help files, special levels, icons, and the font files. X X SECTION III - Lattice Compilation Instructions X ---------------------------------------------- X*************** X*** 194,205 **** X onto the Ram: disk. Read through the comments in that script if you X wish to utilize it. X X! Due to a problem with version 5.04, you must make one change: edit the X! file Others:lev_lex.c. At (or near) line 1002 is the definition for the X! function yyunput. Delete the word "register" from this line. Note that X! if you neglect to do this, you will get an Error 72 at line 318 of file X! lev_comp.l (this is the correct message - lev_lex.c is flex output). Save X! the changed file. Later compiler versions may or may not need this fix. X X Type 'CD NetHack:' and then type "lmk -f Amiga:Makefile.ami". If all X goes well, you'll have a working binary a couple of hours later (depending X--- 221,233 ---- X onto the Ram: disk. Read through the comments in that script if you X wish to utilize it. X X! Due to a problem with versions 5.04 and 5.05, you must make one change: X! edit the file Others:lev_lex.c. At (or near) line 1002 is the definition X! for the function yyunput. Delete the word "register" from this line. X! Note that if you neglect to do this, you will get an Error 72 at line 318 X! of file lev_comp.l (this is the correct message - lev_lex.c is flex output). X! Save the changed file. Later compiler versions may or may not need this X! fix. X X Type 'CD NetHack:' and then type "lmk -f Amiga:Makefile.ami". If all X goes well, you'll have a working binary a couple of hours later (depending X*************** X*** 207,221 **** X Lattice users on the team: X X * The primary Lattice compiler used on the Amiga port was version X! 5.04. However, the patch bringing the compiler to 5.04a does X! not appear necessary for compiling NH3.0pl7. X X * The function monsndx, in file mondata.c, has a section of code X which Lattice 5.04 compiles incorrectly. A hack has been written X around this so that Lattice will generate the correct code. It is X recommended that you leave this in place, and not attempt to X! "improve" it. As of this date (1/90) Lattice is preparing 5.05 X! which, it is being claimed, fixes this bug. X X * Included in the Lattice port is code for generating a SnapShot.tb X file upon catching various internal disasters. That is why the X--- 235,248 ---- X Lattice users on the team: X X * The primary Lattice compiler used on the Amiga port was version X! 5.05. Previous versions of NetHack have been successfully compiled X! with 5.04 and 5.04a. X X * The function monsndx, in file mondata.c, has a section of code X which Lattice 5.04 compiles incorrectly. A hack has been written X around this so that Lattice will generate the correct code. It is X recommended that you leave this in place, and not attempt to X! "improve" it. This fix "does the right thing" in version 5.05. X X * Included in the Lattice port is code for generating a SnapShot.tb X file upon catching various internal disasters. That is why the X*************** X*** 225,231 **** X fit on a single disk. X X * The optimizer seems to work, but no extensive testing has been X! done with it. X X * There are a large number of warnings under Lattice, which are X harmless. X--- 252,258 ---- X fit on a single disk. X X * The optimizer seems to work, but no extensive testing has been X! done with it. (Note: optimizing objnam.c takes several hours.) X X * There are a large number of warnings under Lattice, which are X harmless. X*************** X*** 301,307 **** X X * Unfortunately, Manx 5.0 arrived too late to integrate into patch X level 7, but merging will occur in the next few weeks. Contact us X! (below) for progress/hints. X X - - - - - - - - - - - - X X--- 328,335 ---- X X * Unfortunately, Manx 5.0 arrived too late to integrate into patch X level 7, but merging will occur in the next few weeks. Contact us X! (below) for progress/hints. (Postscript for PL8: the situation is X! very much improved, but there may be some problems remaining). X X - - - - - - - - - - - - X X*** ./Old/Install.unix Sun Jun 3 11:38:30 1990 X--- ./Install.unix Sun Apr 15 11:44:16 1990 X*************** X*** 52,58 **** X X 1. A number of systems, such as Xenix, support both the termcap and terminfo X terminal capability libraries. Make sure that the TERMINFO definition in X! unixconf.h and the TERMLIB definition in the source Makefile correspond. X If spurious characters appear on the screen while kicking, zapping, etc., X it is likely that you have linked the source to the wrong library or X mistakenly defined/undefined TERMINFO. If your terminal library does not X--- 52,58 ---- X X 1. A number of systems, such as Xenix, support both the termcap and terminfo X terminal capability libraries. Make sure that the TERMINFO definition in X! config.h and the TERMLIB definition in the source Makefile correspond. X If spurious characters appear on the screen while kicking, zapping, etc., X it is likely that you have linked the source to the wrong library or X mistakenly defined/undefined TERMINFO. If your terminal library does not X*************** X*** 100,102 **** X--- 100,109 ---- X -DDUMB to CFLAGS and DUMB.Setup to the Sys.3B2 dependency line. The X compiler provided with later versions of the OS has a large enough X symbol table that it does not need this workaround. X+ X+ 8. If NetHack seems to compile fine, starts up, allows you to pick a X+ character, and then either hangs or gets a segmentation fault, you X+ should try changing the schar and uchar definitions in config.h to X+ short ints. This problem is known to occur on the AT&T 3B series, X+ Silicon Graphics Irises, and IBM PC/RT's running AIX, and may occur X+ on other computers as well. X*** ./Old/Makefile.top Sun Jun 3 11:39:03 1990 X--- ./Makefile.top Thu Mar 1 20:30:22 1990 X*************** X*** 65,71 **** X # copy over new versions of the game files X ( cd auxil ; cp $(AUX) $(GAMEDIR) ) X # (don't yank the old version out from under people who're playing it) X! mv $(GAMEDIR)/$(GAME) $(GAMEDIR)/$(GAME).old X cp src/$(GAME) $(GAMEDIR) X -rm -f $(SHELLDIR)/$(GAME) X sed -e 's;/usr/games/lib/nethackdir;$(GAMEDIR);' \ X--- 65,71 ---- X # copy over new versions of the game files X ( cd auxil ; cp $(AUX) $(GAMEDIR) ) X # (don't yank the old version out from under people who're playing it) X! -mv $(GAMEDIR)/$(GAME) $(GAMEDIR)/$(GAME).old X cp src/$(GAME) $(GAMEDIR) X -rm -f $(SHELLDIR)/$(GAME) X sed -e 's;/usr/games/lib/nethackdir;$(GAMEDIR);' \ X*************** X*** 80,89 **** X chgrp $(GAMEGRP) $(SHELLDIR)/$(GAME) X chmod 0755 $(SHELLDIR)/$(GAME) X chmod 04755 $(GAMEDIR)/$(GAME) X! # and touch time-sensitive files X -touch -c $(GAMEDIR)/bones* $(GAMEDIR)/?lock* $(GAMEDIR)/wizard* X -touch -c $(GAMEDIR)/save/* X touch $(GAMEDIR)/perm $(GAMEDIR)/record X X install: $(GAME) data rumors spec_levs X # set up the directories X--- 80,92 ---- X chgrp $(GAMEGRP) $(SHELLDIR)/$(GAME) X chmod 0755 $(SHELLDIR)/$(GAME) X chmod 04755 $(GAMEDIR)/$(GAME) X! # touch time-sensitive files X -touch -c $(GAMEDIR)/bones* $(GAMEDIR)/?lock* $(GAMEDIR)/wizard* X -touch -c $(GAMEDIR)/save/* X touch $(GAMEDIR)/perm $(GAMEDIR)/record X+ # and copy the man pages X+ -$(GAMEMANCREATE) $(MANDIR)/$(GAME).$(MANEXT) X+ -$(LEVMANCREATE) $(MANDIR)/lev_comp.$(MANEXT) X X install: $(GAME) data rumors spec_levs X # set up the directories X*** ./Old/README Sun Jun 3 11:39:26 1990 X--- ./README Sun Apr 15 11:57:40 1990 X*************** X*** 77,105 **** X X At the time of this release, NetHack 3.0 is known to run on: X X- DEC vaxen running Ultrix and BSD X- Sun-3s running SunOS 4.0 X- Encore Multimax running UMAX 4.2 X- Bull XPS100 running System V R2.2 or R3.1 X- Bull DPX/2 200 running System V R3.1 X- AT&T 3B4000 running System V X AT&T 3B1 running System V (3.51) X AT&T 3B2/600 & 3B2/622 running System V R3.2.1 X AT&T 3B2/1000 Model 80 running System V R3.2.2 X! 286 box running Microport SysV/AT (not extensively tested) X! IBM PC compatibles running MicroSoft C or Turbo C under MS-DOS X! IBM PS/2 and AT compatibles running MicroSoft C under OS/2 X! Commodore Amiga running Lattice or Manx/Aztec C under X! AmigaDOS 1.3 (WorkBench 1.3, KickStart 1.2 or 1.3) X! Atari 1040ST under TOS X! DEC vaxen running VMS X! Data General AViiON systems under DG/UX X! Valid Logic Systems SCALD-System X! Macintosh (still requires testing) X! Mips M2000 running RiscOS 4.1 X Gould NP1 running UTX 3/2 X! Stride 460 running UniStride 2.1 X Pyramid 9820x running OSx 4.4c X X - - - - - - - - - - - X X--- 77,110 ---- X X At the time of this release, NetHack 3.0 is known to run on: X X AT&T 3B1 running System V (3.51) X AT&T 3B2/600 & 3B2/622 running System V R3.2.1 X AT&T 3B2/1000 Model 80 running System V R3.2.2 X! AT&T 3B4000 running System V X! Bull DPX/2 200 running System V R3.1 X! Bull XPS100 running System V R2.2 or R3.1 X! Data General AViiON systems running DG/UX X! DEC vaxen running Ultrix and BSD X! Decstation 5400 running Ultrix 3.1 X! Encore Multimax running UMAX 4.2 X Gould NP1 running UTX 3/2 X! H-P 9000s300 running HP-UX X! IBM PC/RT running AIX X! Mips M2000 running RiscOS 4.1 X Pyramid 9820x running OSx 4.4c X+ SGI Iris running IRIX X+ Stride 460 running UniStride 2.1 X+ Sun-3s and -4s running SunOS 3.x and 4.0.x X+ Valid Logic Systems SCALD-System X+ 286 box running Microport SysV/AT (not extensively tested) X+ X+ Apple Macintosh running MacOS X+ Atari 1040ST running TOS X+ Commodore Amiga running AmigaDOS 1.3 (WorkBench 1.3, X+ KickStart 1.2 or 1.3) with Lattice or Manx/Aztec C X+ DEC vaxen running VMS X+ IBM PC compatibles running MS-DOS with MicroSoft C or Turbo C X+ IBM PS/2 and AT compatibles running OS/2 with MicroSoft C X X - - - - - - - - - - - X X*************** X*** 107,112 **** X--- 112,119 ---- X development team may be reached as X X nethack-bugs@linc.cis.upenn.edu. X+ X+ Please be sure to include your machine type, OS, and patchlevel. X X Patches especially should be directed to this address. If you've changed X something to get NetHack to run on your system, it's likely that others have X END_OF_FILE if test 50401 -ne `wc -c <'patch8.11'`; then echo shar: \"'patch8.11'\" unpacked with wrong size! fi # end of 'patch8.11' fi echo shar: End of archive 11 \(of 24\). cp /dev/null ark11isdone 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