billr@saab.CNA.TEK.COM (Bill Randle) (07/12/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 10, Issue 78 Archive-name: nethack3p9/Part33 Supersedes: 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 33 (of 56)." # Contents: include/def_os2.h mac/mac.c others/Makefile.ovl # Wrapped by billr@saab on Wed Jul 11 17:11:41 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'include/def_os2.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'include/def_os2.h'\" else echo shar: Extracting \"'include/def_os2.h'\" \(2615 characters\) sed "s/^X//" >'include/def_os2.h' <<'END_OF_FILE' X/* SCCS Id: @(#)def_os2.h 3.0 89/08/13 X X/* OS/2 defines based on MSC 5.1 OS/2 include files. X Only a small portion of all OS/2 defines are needed, X so the actual include files are not used. X X Timo Hakulinen X */ X X#define APIENTRY pascal far X X#define CHAR char /* ch */ X#define SHORT int /* s */ X#define LONG long /* l */ X#define INT int /* i */ X Xtypedef unsigned char UCHAR; /* uch */ Xtypedef unsigned int USHORT; /* us */ Xtypedef unsigned long ULONG; /* ul */ Xtypedef unsigned int UINT; /* ui */ X Xtypedef unsigned char BYTE; /* b */ Xtypedef BYTE far *PBYTE; X Xtypedef unsigned short SHANDLE; Xtypedef SHANDLE HKBD; Xtypedef SHANDLE HVIO; Xtypedef SHANDLE HDIR; /* hdir */ Xtypedef HDIR far *PHDIR; X Xtypedef USHORT far *PUSHORT; Xtypedef char far *PSZ; X Xtypedef struct { X UCHAR chChar; X UCHAR chScan; X UCHAR fbStatus; X UCHAR bNlsShift; X USHORT fsState; X ULONG time; X} KBDKEYINFO; Xtypedef KBDKEYINFO far *PKBDKEYINFO; X X/* File time and date types */ X Xtypedef struct _FTIME { /* ftime */ X unsigned twosecs : 5; X unsigned minutes : 6; X unsigned hours : 5; X} FTIME; Xtypedef FTIME far *PFTIME; X Xtypedef struct _FDATE { /* fdate */ X unsigned day : 5; X unsigned month : 4; X unsigned year : 7; X} FDATE; Xtypedef FDATE far *PFDATE; X Xtypedef struct _FILEFINDBUF { /* findbuf */ X FDATE fdateCreation; X FTIME ftimeCreation; X FDATE fdateLastAccess; X FTIME ftimeLastAccess; X FDATE fdateLastWrite; X FTIME ftimeLastWrite; X ULONG cbFile; X ULONG cbFileAlloc; X USHORT attrFile; X UCHAR cchName; X CHAR achName[13]; X} FILEFINDBUF; Xtypedef FILEFINDBUF far *PFILEFINDBUF; X X/* KBDINFO structure, for KbdSet/GetStatus */ Xtypedef struct _KBDINFO { /* kbst */ X USHORT cb; X USHORT fsMask; X USHORT chTurnAround; X USHORT fsInterim; X USHORT fsState; X} KBDINFO; Xtypedef KBDINFO far *PKBDINFO; X X/* VIOMODEINFO structure, for VioGetMode */ Xtypedef struct _VIOMODEINFO { X USHORT cb; X UCHAR fbType; X UCHAR color; X USHORT col; X USHORT row; X USHORT hres; X USHORT vres; X UCHAR fmt_ID; X UCHAR attrib; X} VIOMODEINFO; Xtypedef VIOMODEINFO far *PVIOMODEINFO; X X/* OS2 API functions */ X XUSHORT APIENTRY KbdGetStatus(PKBDINFO, HKBD); XUSHORT APIENTRY KbdSetStatus(PKBDINFO, HKBD); XUSHORT APIENTRY KbdCharIn(PKBDKEYINFO, USHORT, HKBD ); XUSHORT APIENTRY DosQFSInfo(USHORT, USHORT, PBYTE, USHORT); XUSHORT APIENTRY DosFindFirst(PSZ, PHDIR, USHORT, PFILEFINDBUF, USHORT, PUSHORT, ULONG); XUSHORT APIENTRY DosFindNext(HDIR, PFILEFINDBUF, USHORT, PUSHORT); XUSHORT APIENTRY DosSelectDisk(USHORT); XUSHORT APIENTRY VioGetMode(PVIOMODEINFO, HVIO); XUSHORT APIENTRY VioSetCurPos(USHORT, USHORT, HVIO); END_OF_FILE if test 2615 -ne `wc -c <'include/def_os2.h'`; then echo shar: \"'include/def_os2.h'\" unpacked with wrong size! fi # end of 'include/def_os2.h' fi if test -f 'mac/mac.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'mac/mac.c'\" else echo shar: Extracting \"'mac/mac.c'\" \(28936 characters\) sed "s/^X//" >'mac/mac.c' <<'END_OF_FILE' X/* SCCS Id: @(#)mac.c 3.0 88/08/05 X/* Copyright (c) Johnny Lee 1989 */ X/* NetHack may be freely redistributed. See license for details. */ X X/* Source file for character I/O and miscellaneous */ X/* user interface routines for the macintosh */ X X#include "hack.h" X X/* Global variables */ XWindowPtr HackWindow; /* points to Hack's window */ Xextern char *keys[8]; Xextern short macflags; Xextern long lowMemLimit; Xshort cursorPos=0; Xshort repDelay; Xlong lastMD; Xlong segments = SEG_DO; Xextern short altCurs; /* should be a macflag */ X Xint Xtgetch() X X{ X char ch; X EventRecord theEvent; X Rect cursorRect,box,windowRect; X long message,cursorTime,start; X MenuHandle theMenu; X register short keyCode; X short temp; X term_info *t; X GrafPtr oldPort,oldPort1; X static char nextCommand; X short aboutBox(); X char mButtonDown(); 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 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 /* handle extended command from menu */ X if (nextCommand && (macflags & (fExtCmdSeq1 | fExtCmdSeq2 | fExtCmdSeq3))) { X if (macflags & fExtCmdSeq1) { X ch = '#'; X macflags = macflags ^ (fExtCmdSeq1 | fExtCmdSeq2); X } else if (macflags & fExtCmdSeq2) { X ch = nextCommand; X macflags = macflags ^ (fExtCmdSeq2 | fExtCmdSeq3); X if (!(macflags & fExtCmdSeq3)) X nextCommand = '\0'; X } else if (macflags & fExtCmdSeq3) { X ch = '\r'; X macflags &= ~fExtCmdSeq3; X } X } X GetPort(&oldPort); 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 SetWTitle(HackWindow, X (macflags & fToggleNumPad) ? "\016NetHack [MOVE]" X : "\015NetHack [NUM]"); X ch = 0; X continue; X } X if ((macflags & fToggleNumPad) && (keyCode>0x40 &&keyCode < 0x5D) X || (keyCode > 0x7A && keyCode<0x7F)) { X ch = t->keyMap[keyCode-65]; X if ((theEvent.modifiers & shiftKey) && (ch)) { X ch = (ch == '.') ? ':' : (char)toupper(ch); X } 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 Xkeyboards 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 for(start = 43; start < 56; start++) { X if (t->keyMap[start] == (char)(theEvent.message & 0xFFL)) { X ch = t->keyMap[start - 13]; X break; X } X } X } X /* not a cursor key or from the numeric keypad */ X if (!ch) { X ch = (char)(theEvent.message & 0xFF); X } X } else { 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 && (macflags & fDoUpdate) && (HackWindow == theWindow)) { 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 SetCursor(&ARROW_CURSOR); X } X } X if (StillDown() && cursorPos>=0 && cursorPos < 8 X && TickCount() > lastMD+repDelay) { 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 lastMD = TickCount(); X /*return ch;*/ X } X SetPort(oldPort1); X break; X case app4Evt: X#define kSuspendResumeMessage 1 /* high byte of suspend/resume event message */ X#define kMouseMovedMessage 0xFA /* high byte of mouse-moved event message */ X#define SuspResIsResume(evtMessage) ((evtMessage) & 0x00000001) X X switch (theEvent.message >> 24) { 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 InvalRect(&HackWindow->portRect); X SizeWindow(HackWindow,60,60,FALSE); 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 (t->maxRow * t->height) + 2 * Screen_Border, X TRUE); X SetPort(HackWindow); X InvalRect(&HackWindow->portRect); X if ((int) (theMenu = GetMHandle(editMenu)) X && FrontWindow() == HackWindow) { X SetMenuBar(t->fullMBarHandle); X for (temp = fileMenu;temp <= extendMenu;temp++) { X if (temp != editMenu) X EnableItem(GetMHandle(temp), 0); X } X EnableItem(GetMHandle(appleMenu), 1); X DisableItem(theMenu, 0); X DrawMenuBar(); X } X } X } X break; X } X break; X X case updateEvt: X if (HackWindow == (WindowPtr)theEvent.message) { X doUpdate(t); X if (cursRectInv) InvertRect(&cursorRect); /* restore cursor */ X } X break; X X case activateEvt: X if (HackWindow == (WindowPtr)theEvent.message) { X if (theMenu = GetMHandle(editMenu)) { X if (theEvent.modifiers & activeFlag) { X if (macflags & fDoUpdate) { X SetMenuBar(t->fullMBarHandle); X for (temp = fileMenu;temp <= extendMenu;temp++) { X if (temp != editMenu) X EnableItem(GetMHandle(temp), 0); X } X EnableItem(GetMHandle(appleMenu), 1); X } X DisableItem(theMenu, 0); X } else { X EnableItem(theMenu, 0); X if (macflags & fDoUpdate) { X SetMenuBar(t->shortMBarHandle); X for (temp = fileMenu;temp <= extendMenu;temp++) { X if (temp != editMenu) X DisableItem(GetMHandle(temp), 0); X } X DisableItem(GetMHandle(appleMenu), 1); X } X } X DrawMenuBar(); X } X } X break; 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 Xvoid XdoUpdate(t) Xterm_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 GDHandle gd; X X r = (**(*(WindowPeek)HackWindow).contRgn).rgnBBox; X LocalToGlobal(&r.top); X LocalToGlobal(&r.bottom); X gd = GetMaxDevice(&r); X HLock((Handle)gd); X t->inColor = (**(**gd).gdPMap).pixelSize > 1; X HUnlock((Handle)gd); X } X#endif X GetPort(&oldPort); X SetPort((GrafPtr)HackWindow); X BeginUpdate(HackWindow); X ForeColor(t->color[0]); X BackColor(t->color[7]); X for (i = 0; i<t->maxRow; i++) { X p = t->scrAttr[i]; X for (j = temp = 0, attr = *p; j<t->maxCol; 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 Xchar XmButtonDown(theEvent, t, nextCommand) XEventRecord theEvent; Xterm_info *t; Xchar *nextCommand; X{ X Rect boundsRect; X WindowPtr theWindow; X long message; X char deskacc[256]; X MenuHandle theMenu; X char ch; X short menuBar; X GrafPtr oldPort; X X ch = '\0'; 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 if (!HiWord(message)) X break; X X switch (HiWord(message)) { X case editMenu: X (void)SystemEdit((short)message - 1); X break; X case appleMenu: X if (LoWord(message) > 1) { X GetItem(GetMHandle(HiWord(message)),LoWord(message), X deskacc); X SetMenuBar(t->shortMBarHandle); X DrawMenuBar(); X (void)OpenDeskAcc(deskacc); X if (theMenu = GetMHandle(editMenu)) X EnableItem(theMenu, 0); X } else X if (aboutBox(1)) X ch = '?'; X break; X case fileMenu: X case inventMenu: X case prepMenu: X case actionMenu: X case moveMenu: X *nextCommand = X keys[HiWord(message)-appleMenu][LoWord(message)-1]; X ch = (!(*nextCommand)) ? '\0' : (char)ESCAPEkey; X macflags |= (fExtCmdSeq2 | fExtCmdSeq3); X#ifdef TEXTCOLOR X#define MAC_BLACK 0 X#define MAC_WHITE 7 X if(HiWord(message) == fileMenu && LoWord(message) == 3) { X theMenu = GetMHandle(HiWord(message)); X macflags = macflags ^ fInvertedScreen; X CheckItem(theMenu, 3, X (boolean)(macflags & fInvertedScreen)); X X /* switch black & white */ X message = t->color[BLACK]; X t->color[MAC_BLACK] = t->color[MAC_WHITE]; X t->color[MAC_WHITE] = message; X X /* switch light blue & dark blue */ X message = t->color[BLUE]; X t->color[BLUE] = t->color[CYAN]; X t->color[CYAN] = message; X X ForeColor(t->color[MAC_BLACK]); X BackColor(t->color[MAC_WHITE]); X /* refresh screen without prompting 'More' */ X message = flags.toplin; X flags.toplin = 0; X docrt(); X flags.toplin = message; X } X#endif X break; X case extendMenu: X ch = (char)ESCAPEkey; X *nextCommand = X keys[HiWord(message) - appleMenu][LoWord(message) - 1]; X macflags |= fExtCmdSeq1; X break; X } X HiliteMenu(0); X break; X X case inSysWindow: X SystemClick(&theEvent, theWindow); X break; X X case inDrag: X if (!(theEvent.modifiers & cmdKey)) { X if (theWindow != FrontWindow()) { X SelectWindow(theWindow); X break; X } X } X menuBar = (ROM85 == -1) ? 20 : GetMBarHeight(); X X { X RgnHandle fooRgn = GetGrayRgn(); X boundsRect = (*fooRgn)->rgnBBox; X } X SetCursor(&ARROW_CURSOR); X DragWindow(theWindow, theEvent.where, &boundsRect); X break; X X case inContent: X if (theWindow != FrontWindow()) { X SelectWindow(theWindow); X } else if (theWindow == HackWindow) { X Point mouseLoc; X Rect box; X short temp; X X if(flags.wantspace) { X ch = 0x20; X } else { X box.left = (u.ux-1) * t->charWidth + Screen_Border + (t->charWidth/2); X box.right = box.left + 1; X box.top = (u.uy+1) * t->height + Screen_Border + t->height/2; 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 break; X case 1: X ch = 'u'; X break; X case 2: X ch = 'l'; X break; X case 3: X ch = 'n'; X break; X case 4: X ch = 'j'; X break; X case 5: X ch = 'b'; X break; X case 6: X ch = 'h'; X break; X case 7: X ch ='y'; X break; X case 8: X ch = '.'; X break; X } X if ((theEvent.modifiers & shiftKey) && (ch)) { X ch = (ch == '.') ? ':' : (char)toupper(ch); X } X } X } 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 Xvoid Xgethdate(name) char *name; X{ X/*end gethdate*/} X Xint Xuptodate(fd) X{ X return(1); X} X X#ifndef THINKC4 Xchar * Xgetenv(s) Xchar *s; X{ X return((char *)NULL); X} X Xint Xmemcmp(x,y,n) Xchar *x,*y; Xint n; X X{ X int i; X X i = 0; X while (i++< n && (*x++) == (*y++)) { X /*x++; y++; i++*/ X ; X } X if (i != n) X return ((*x > *y) ? -1 : 1); X else X return (0); X} X#else Xint Xkbhit() X{ X EventRecord theEvent; X X SystemTask(); X return (EventAvail(keyDownMask | mDownMask, &theEvent)); X} X#endif X X#ifdef AZTEC X Xsleep(x) Xint x; X{ X long t; X X Delay((long)x, &t); X} X#endif X X Xint Xmcurs(col,row) Xshort col,row; X X{ X term_info *t; X X t = (term_info *)GetWRefCon(HackWindow); X t->tcur_y = row; X t->tcur_x = col; X return 1; X} X Xstatic void XcheckScroll(t) Xterm_info *t; 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 Rect window; X X if (macflags & fInvertedScreen) { X BlockMove((Ptr)&((GrafPtr)HackWindow)->bkPat, (Ptr)&o, X sizeof(Pattern)); X GetIndPattern(&p, sysPatListID,1); X BackPat(p); X } X window = HackWindow->portRect; X InsetRect(&window, 4,4); X window.top += t->height; X ScrollRect(&window, 0, -t->height, X ((WindowPeek)HackWindow)->updateRgn); X ValidRect(&window); X if (macflags & fInvertedScreen) { X BackPat(o); X } X } X t->tcur_y = t->maxRow - 1; X } X} X Xvoid Xmput(s) Xchar *s; X{ X unsigned short sLen,temp; X GrafPtr prevPort; X register term_info *t; X Point cur; X register short x,y; X Rect eraseRect; X register char *stmp,*c,*c1; X char savech; X X t = (term_info *)GetWRefCon(HackWindow); X sLen = strlen(s); X X x = t->tcur_x; X y = t->tcur_y; X if (y >= t->maxRow) X panic("mput - incorrect cursor position\n"); X cur.h = (x * t->charWidth) + Screen_Border; X cur.v = t->ascent + (y * t->height) + Screen_Border; X GetPort(&prevPort); X SetPort((GrafPtr)HackWindow); X TextFont(t->fontNum); X TextSize(t->fontSize); X TextMode(srcCopy); X /* a termcap-type escape string */ 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 if (temp == GRAY) X ForeColor(t->color[0]); X /* yellow fgnd hard to see on white bgnd */ X /* so change to green background */ X if (temp == YELLOW || temp == BROWN) X BackColor(t->color[GREEN]); X if (temp == BLUE) X BackColor(t->color[CYAN]); X if (temp == CYAN) X BackColor(t->color[BLUE]); X } X break; X case '0': /* normal video begin */ 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 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 if (y > 0) { X t->tcur_y--; X cur.v -= t->height; X } X break; X case 'B': /* cursor down */ X if (y < t->maxRow) { X t->tcur_y++; X cur.v += t->height; X } X break; X case 'C': /* cursor right */ X if (x < t->maxCol) { X t->tcur_x++; X cur.h += t->charWidth; X } X break; X case 'D': /* cursor left */ X if (x > 0) { X t->tcur_x--; X cur.h -= t->charWidth; X } X break; X case 'H': /* home cursor */ X t->tcur_x = t->tcur_y = 0; X cur.h = Screen_Border; X cur.v = t->ascent + Screen_Border; X break; X case 'K': /* clear to end of line */ X eraseRect.top = cur.v - (t->ascent); X eraseRect.left = cur.h; 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 = y = t->tcur_x = t->tcur_y = 0; X eraseRect.top = eraseRect.left = Screen_Border; 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 break; X } X MoveTo(cur.h, cur.v); X } else { X short charleft = sLen; X X MoveTo(cur.h, cur.v); X stmp = s; X X if (sLen) { X while (stmp < (s + sLen)) { X temp = (x + charleft - 1 < t->maxCol - 1) ? charleft : t->maxCol - x; X savech = '\0'; X c1 = stmp + temp; /* point to the char after the end */ X c = index(stmp, '\n'); X if (c && c < c1) { X c1 = c; X savech = '\n'; X temp = (short)(c - stmp); X /* don't want to include '\n' in print */ X } X c = index(stmp, '\r'); X if (c && c < c1) { X c1 = c; X savech = '\r'; X temp = (short)(c - stmp); X /* don't want to include '\r' in print */ 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 t->tcur_x += temp; X } X X if (t->tcur_x >= t->maxCol-1 || savech) { X if (savech != '\r') { X if (t->tcur_y >= t->maxRow-1) { X checkScroll(t); X } else { X y = (++t->tcur_y); X } X } X X x = t->tcur_x = 0; X cur.h = Screen_Border; X cur.v = y * t->height + t->ascent + Screen_Border; X MoveTo(cur.h,cur.v); X } X } X } X } X if (t->tcur_x >= t->maxCol-1) { X t->tcur_x = t->tcur_x % t->maxCol; X t->tcur_y++; X checkScroll(t); X } X SetPort(prevPort); X} X Xint Xmputc(c) Xchar c; X{ X GrafPtr prevPort; X register term_info *t; X Point cur; X register short x,y; X Rect eraseRect; X char savech; X PenState pnState; X X t = (term_info *)GetWRefCon(HackWindow); X X x = t->tcur_x; X y = t->tcur_y; X cur.h = (x * t->charWidth) + Screen_Border; X cur.v = t->ascent + (y * t->height) + Screen_Border; X GetPort(&prevPort); X SetPort((GrafPtr)HackWindow); X TextFont(t->fontNum); X TextSize(t->fontSize); X TextMode(srcCopy); X X MoveTo(cur.h, cur.v); X savech = '\0'; X if (c == '\b') { X if (x > 0) { X c = ' '; X x = (--t->tcur_x); X cur.h = (x * t->charWidth) + Screen_Border; X Move(-t->charWidth,0); X savech = '\b'; X } else if (y > 0) { X c = ' '; X x = t->tcur_x = (t->maxCol - 1); X y = (--t->tcur_y); X cur.h = (x * t->charWidth) + Screen_Border; X cur.v -= t->height; X MoveTo(cur.h, cur.v); X savech = '\b'; X } X } X if (c == '\007') { X SysBeep(1); X } else if ((c == '\n') || (c == '\r')) { X t->tcur_x = 0; X if (t->tcur_y >= t->maxRow && c == '\r') { X t->tcur_y = t->maxRow - 1; X } else if (c == '\n') { X if (t->tcur_y >= t->maxRow-1) { X checkScroll(t); X } else { X t->tcur_y++; X } 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 if (t->tcur_x >= t->maxCol) X { X t->tcur_x = 0; X t->tcur_y++; X checkScroll(t); X } X } X } X cur.h = (t->tcur_x * t->charWidth) + Screen_Border; X cur.v = t->ascent + (t->tcur_y * t->height) + Screen_Border; X MoveTo(cur.h,cur.v); X X SetPort(prevPort); X return 1; X} X Xint Xmputs(s) Xchar *s; X{ X mput(s); X return 1; X} X X X Xint Xmprintf(fstr) Xchar *fstr; X{ X#define Bufsz 14 X char numAsStr[Bufsz]; X short numsz; X char *ps; X unsigned long num; X X boolean convchar; X boolean islong; X char c; X char *s; X char prBuffer[128]; X register char *pb; X X prBuffer[0] = '\0'; X pb = &prBuffer[0]; X ps = (char *)&fstr; /* convert to pointer to params */ X ps += sizeof(char *); /* skip over format string ptr */ X while (*fstr) { X s = index(fstr, '%'); X if (s) { X num = (short)(s - fstr); X strncpy(pb, fstr, (short)num); X pb += num; X fstr = s; X } else { X Strcpy(pb, fstr); X fstr += strlen(fstr)-1; X } X switch (*fstr) { X case '%': X fstr++; X convchar = FALSE; X islong = FALSE; X do { X switch (*fstr) { X case 'l': /* long */ X islong = TRUE; X fstr++; X break; X case 'u': /* unsigned decimal */ X case 'd': /* signed decimal */ X num = (islong) ? *(unsigned long *)ps X : *(unsigned short *)ps; X numsz = (islong) ? sizeof(long) : sizeof(short); X ps += numsz; X s = (islong) ? fstr - 2 : fstr - 1; 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 convchar = TRUE; X break; X case 's': X s = *(char **)ps; X Strcpy(pb, s); X pb = (char *)(pb + strlen(s)); X ps += sizeof(char *); X convchar = TRUE; X break; X case 'c': X c = *(unsigned short *)ps; X numsz = sizeof(short); X (*pb++) = (char)c; X (*pb) = '\0'; X convchar = TRUE; X ps += numsz; X break; X default: X convchar = TRUE; X } X } while (!convchar); X break; X default: X break; X } X fstr++; X } X if (prBuffer[0]) X mput(&prBuffer[0]); X X return 1; X} X XDialogTHndl XcentreDlgBox(resNum, clip) Xshort resNum; XBoolean clip; X{ X DialogTHndl th = (DialogTHndl) GetResource('DLOG', resNum); X Rect rect; X short dv, dh; X X /* centre dialog box on screen */ X if (th) { X rect = SCREEN_BITS.bounds; X HLock((Handle)th); X dv = ((**th).boundsRect.bottom - (**th).boundsRect.top)/2; X dv -= (clip) ? 20 : 0; X dh = ((**th).boundsRect.right - (**th).boundsRect.left)/2; X X (**th).boundsRect.bottom = X (rect.bottom + rect.top + MBarHeight)/2 + dv; X (**th).boundsRect.top = X (rect.bottom + rect.top + MBarHeight)/2 - dv; X (**th).boundsRect.right = (rect.right + rect.left)/2 + dh; X (**th).boundsRect.left = (rect.right + rect.left)/2 - dh; X HUnlock((Handle)th); X } else X panic("Couldn't load dialog resource"); X X return th; X} X Xshort XaboutBox(prompt) Xshort prompt; X{ X#define OK_BUTTON 1 X#define MORE_INFO_BUTTON 2 X X DialogPtr theDialog; X Rect rect; X Handle theControl; X short type,itemHit; X GrafPtr oldPort; X EventRecord theEvent; X term_info *t; X DialogTHndl th; X X /* if about box on startup, centre about box on screen */ X if (!prompt) { X th = centreDlgBox(129, TRUE); X } X X GetPort(&oldPort); X theDialog = GetNewDialog(129, (Ptr)NULL,(WindowPtr)-1); X if (!prompt) { X HideDItem(theDialog, OK_BUTTON); X HideDItem(theDialog, MORE_INFO_BUTTON); X } else X MoveWindow((WindowPtr)theDialog, LEFT_OFFSET, TOP_OFFSET, TRUE); X X ShowWindow((WindowPtr)theDialog); X SetPort(theDialog); X TextFont(1); /* 9 pt. Geneva */ X TextSize(9); X DrawDialog(theDialog); X itemHit = 0; X if (prompt) { X /* BOLD the OK button */ X GetDItem(theDialog, OK_BUTTON, &type, &theControl, &rect); X PenSize(3,3); X InsetRect(&rect,-4,-4); X FrameRoundRect(&rect,16,16); X PenSize(1,1); X while ((itemHit != OK_BUTTON) && (itemHit != MORE_INFO_BUTTON)) { X ModalDialog(NULL, &itemHit); X } X } else { X long tickNum; X X tickNum = TickCount() + 180; /* 3 second wait max */ X while (!itemHit && TickCount()<tickNum) { X /* SystemTask();*/ X if (GetNextEvent(everyEvent,&theEvent)) X if (theEvent.what == mouseDown || X theEvent.what == keyDown || X theEvent.what == autoKey) X itemHit = OK_BUTTON; X } X } X DisposDialog(theDialog); X ReleaseResource((Handle)th); X SetPort(oldPort); X return (itemHit == MORE_INFO_BUTTON); X} X Xvoid XfreeSegs(segs) Xlong *segs; X{ X register long s; X X s = (segs == (long *)0) ? 0L : (*segs); X X UnloadSeg(dothrow); X UnloadSeg(dowear); X UnloadSeg(ddocall); X UnloadSeg(castmu); X UnloadSeg(doforce); X if (!(s & SEG_EAT)) X UnloadSeg(doeat); X if (!(s & SEG_ZAP)) X UnloadSeg(dozap); X UnloadSeg(initterm); X if (!(s & SEG_APPLY)) X UnloadSeg(doapply); X UnloadSeg(dokick); X UnloadSeg(outrumor); X if (!(s & SEG_DO)) X UnloadSeg(steal); X UnloadSeg(done1); X if (!(s & SEG_POTION)) X UnloadSeg(dodrink); X UnloadSeg(doturn); X#ifdef REINCARNATION X UnloadSeg(makeroguerooms); X#endif X#ifdef STRONGHOLD X UnloadSeg(load_special); X#endif X UnloadSeg(mklev); X#ifdef MUSIC X if (!(s & SEG_SPELL)) X UnloadSeg(do_play_instrument); X#endif X#ifdef SPELLS X if (!(s & SEG_SPELL)) X UnloadSeg(docast); X#endif X UnloadSeg(savebones); X UnloadSeg(expels); X UnloadSeg(attack); X UnloadSeg(doname); X if (FreeMem() < lowMemLimit) X { X long space; X X space = 0x7FFFFFFFL; X MaxMem(&space); X } X X} X END_OF_FILE if test 28936 -ne `wc -c <'mac/mac.c'`; then echo shar: \"'mac/mac.c'\" unpacked with wrong size! fi # end of 'mac/mac.c' fi if test -f 'others/Makefile.ovl' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'others/Makefile.ovl'\" else echo shar: Extracting \"'others/Makefile.ovl'\" \(24533 characters\) sed "s/^X//" >'others/Makefile.ovl' <<'END_OF_FILE' X# SCCS Id: @(#)Makefile.ovl 3.0 90/06/03 X# PC NetHack 3.0 Makefile for Microsoft(tm) "C" 5.1 -- Pierre Martineau X# Overlay Arrangement -- Stephen Spackman, Pierre Martineau, Norm Meluch X# Multiple Compilation Hack and so forth -- Stephen Spackman X# Additional editing -- Kevin Smolkowski X# X# Other things that have to be reconfigured are in config.h, pcconf.h, X# and possibly system.h. X# X# Nota Bene: OVERLAY *must* be defined in pcconf.h to use this makefile! X# Also: Rename this file to "makefile", some targets rely on it. X# ----------------------------------------------------------------------------- X# In addition to your C compiler, X# X# if you want to change you will need a X# files with suffix workalike for X# .y yacc X# .l lex X# .asm masm X# ----------------------------------------------------------------------------- X# As it is set up, this makefile requires that exesmurf (the X# NetHack overlay-aware .exe header editor) be on your path or in the X# $(SRC) directory. If you wish to change the path or use Microsoft X# EXEMOD instead, see the symbols EXEPATCH and EXEFLAGS. X# X# ***************************************************************************** X# ************************ Compiler Info ************************************** X# ***************************************************************************** XCC = cl /c XLINK = link XMODEL = L XASM = masm XEXEPATCH = exesmurf X# $(MAKE) macro is often predefined, so we use $(MAKEBIN) instead. XMAKEBIN = make X# For those of us who have these on PC. X# YACC = yacc X# LEX = lex XYACC = bison -y XLEX = flex X# Standard file names may vary in PC installations. XYTABC = y_tab.c XYTABH = y_tab.h XLEXYYC = lexyy.c X# Register bug, remove stack probes... X# /Gt22 is currently about the largest value that keeps the initialised data X# segment below 64K (and keeps the linker happy). X# 286 or higher machines can use the /G2 CFLAG option for better performance. XCFLAGS = /A$(MODEL) /Oa /Gs /Gt22 /Zp1 /W0 /I$(INCL) XCOSPACE = /Os XCOSPEED = /Os # MSC 5.1 seems to be broken, or maybe it's the NetHack code. X# # Either way, setting COSPEED to /Ot wreaked jolly flaming havoc. X# XLFLAGS = /noi /seg:512 /map /st:4096 X# X# Available assembler flags: X# /Di386 = Use 386 specific enhancements X# /DNOEMS = Do not use EMS memory X# /DDEBUG = Report memory usage on startup XAFLAGS = /MX X# X############################################################################### X# Use the first line if you are using EXESMURF or the second for EXEMOD. XEXEFLAGS = /max4500 /min4500 X# EXEFLAGS = /max 1194 /min 1194 X############################################################################### X# X# ***************************************************************************** X# ********* Directories (makedefs hardcodes these, don't change them) ********* X# ***************************************************************************** X# XINCL = ..\include XAUX = ..\auxil XSRC = ..\src XOTHERS = ..\others XOBJ = $(SRC)\o X# X# ***************************************************************************** X# ************************ Local Variables ************************************ X# ***************************************************************************** X# X# The game name XGAME = NetHack X# X# The default make target (so just typing 'make' is useful) XDEFAULT : $(GAME) X# X# The game directory X# make sure GAMEDIR exists! XGAMEDIR = .. X# X# The game filename XGAMEFILE = $(GAMEDIR)\$(GAME).exe X# X# Target environment prefix XTARG = pc X# X# Overlay manager object file. XOVLMGR = ovlmgr.obj X# X# Termcap routines. XTERMCAPS = $(SRC)\termlib.lib X# X############################################################################### X# Switch the following lines if you have a MASM compatible assembler. X# $(OBJ)\$(OVLMGR): X$(OBJ)\$(OVLMGR): ; copy $(OTHERS)\$(OVLMGR) $(OBJ)\$(OVLMGR) X############################################################################### X# If you have yacc and lex programs and make any changes, comment out the X# upper two targets and uncomment the lower two. Xdo_yacc: yacc_msg Xdo_lex: lex_msg X# do_yacc: yacc_act X# do_lex: lex_act X############################################################################### X# Optional high-quality BSD random number generation routines (see pcconf.h). X# Set to nothing if not used. XRANDOM = $(OBJ)\random.o X# RANDOM = X############################################################################### X# Optional C library specifier for those with non-standard libraries or X# a multiple-target library setup. X# CLIB = llibcer /nod XCLIB = X############################################################################### X# If TERMLIB is NOT #defined in the source, comment out the lower line and X# uncomment the upper. Don't forget to copy the $(TERMCAPS) file to the X# $(SRC) directory if you have uncommented the lower line. X# TERMLIB = XTERMLIB = $(TERMCAPS) X############################################################################### X# X# nothing below this line should have to be changed X XROOT = $(OBJ)\$(OVLMGR) $(OBJ)\trampoli.o $(OBJ)\main.o $(OBJ)\msdos.o \ X $(OBJ)\alloc.o $(OBJ)\random.o $(OBJ)\decl.o $(OBJ)\monst.o \ X $(OBJ)\objects.o $(OBJ)\invent.0 $(OBJ)\mkobj.0 $(OBJ)\mkroom.0 \ X $(OBJ)\rnd.0 $(OBJ)\termcap.0 X# main monster code XOVL01 = $(OBJ)\cmd.0 $(OBJ)\dbridge.0 $(OBJ)\dog.0 $(OBJ)\engrave.0-1 \ X $(OBJ)\hack.0 $(OBJ)\mon.0-1 $(OBJ)\mondata.0-1 $(OBJ)\monmove.0-1 \ X $(OBJ)\mthrowu.0 $(OBJ)\priest.0 $(OBJ)\shk.0 $(OBJ)\track.0 \ X $(OBJ)\trap.0-1 $(OBJ)\were.0 X# pet code XOVL02 = $(OBJ)\apply.0 $(OBJ)\dog.1 $(OBJ)\dogmove.o X# advanced monsters XOVL03 = $(OBJ)\demon.o $(OBJ)\mcastu.o XOVL04 = $(OBJ)\priest.1-b XOVL05 = $(OBJ)\shk.1-b XOVL06 = $(OBJ)\were.1-b XOVL07 = $(OBJ)\wizard.1-b XOVL08 = $(OBJ)\worm.o X# main people things: you take your turn XOVL09 = $(OBJ)\allmain.0 $(OBJ)\artifact.0 $(OBJ)\attrib.1 $(OBJ)\cmd.1 \ X $(OBJ)\do.1 $(OBJ)\do.3 $(OBJ)\eat.0 $(OBJ)\engrave.2 \ X $(OBJ)\getline.0-1 $(OBJ)\hack.1 $(OBJ)\lock.0 $(OBJ)\mail.0 \ X $(OBJ)\pickup.1 $(OBJ)\pri.1 $(OBJ)\prisym.1 $(OBJ)\sounds.0 \ X $(OBJ)\timeout.0 $(OBJ)\track.1 $(OBJ)\vault.0 $(OBJ)\wizard.0 XOVL10 = $(OBJ)\attrib.0 XOVL11 = $(OBJ)\attrib.2-b $(OBJ)\exper.o XOVL12 = $(OBJ)\artifact.2 $(OBJ)\eat.1 $(OBJ)\invent.1 XOVL13 = $(OBJ)\makemon.0-2 $(OBJ)\mkobj.1 XOVL14 = $(OBJ)\makemon.b XOVL15 = $(OBJ)\mkobj.2-b XOVL16 = $(OBJ)\hack.2 XOVL17 = $(OBJ)\mhitm.1-b XOVL18 = $(OBJ)\mthrowu.1 XOVL19 = $(OBJ)\mthrowu.2-b XOVL20 = $(OBJ)\allmain.1 $(OBJ)\mhitm.0 $(OBJ)\mhitu.0-1 $(OBJ)\rnd.1 \ X $(OBJ)\weapon.0-1 XOVL21 = $(OBJ)\mon.2-b $(OBJ)\trap.2 XOVL22 = $(OBJ)\artifact.1 $(OBJ)\search.0 $(OBJ)\uhitm.o $(OBJ)\weapon.2-b XOVL23 = $(OBJ)\do_wear.0-1 $(OBJ)\mhitu.2-b XOVL24 = $(OBJ)\steal.0-1 XOVL25 = $(OBJ)\monmove.2-b $(OBJ)\steal.2-b XOVL26 = $(OBJ)\rnd.2-b XOVL27 = $(OBJ)\do_wear.2 $(OBJ)\getline.b $(OBJ)\mondata.2 $(OBJ)\objnam.0-1 \ X $(OBJ)\pager.0 $(OBJ)\polyself.0-1 XOVL28 = $(OBJ)\do_name.0 XOVL29 = $(OBJ)\objnam.2-b XOVL30 = $(OBJ)\pager.1-b XOVL31 = $(OBJ)\pri.0 $(OBJ)\prisym.0 $(OBJ)\topl.0 XOVL32 = $(OBJ)\pri.b $(OBJ)\topl.1-2 XOVL33 = $(OBJ)\prisym.2 XOVL34 = $(OBJ)\prisym.b XOVL35 = $(OBJ)\topl.b XOVL36 = $(OBJ)\termcap.1 $(OBJ)\unix.0 XOVL37 = $(OBJ)\termcap.2-b XOVL38 = $(OBJ)\dog.b $(OBJ)\sounds.1-b XOVL39 = $(OBJ)\read.0 XOVL40 = $(OBJ)\invent.b XOVL41 = $(OBJ)\hack.b XOVL42 = $(OBJ)\mondata.b $(OBJ)\timeout.1-b XOVL43 = $(OBJ)\do.0 $(OBJ)\invent.3 XOVL44 = $(OBJ)\cmd.2-b $(OBJ)\getline.2 $(OBJ)\write.o XOVL45 = $(OBJ)\apply.2-b XOVL46 = $(OBJ)\do.b XOVL47 = $(OBJ)\dokick.o XOVL48 = $(OBJ)\dothrow.o XOVL49 = $(OBJ)\eat.2-b XOVL50 = $(OBJ)\invent.2 $(OBJ)\pickup.0 $(OBJ)\pickup.2-b XOVL51 = $(OBJ)\lock.1-b XOVL52 = $(OBJ)\polyself.2-b XOVL53 = $(OBJ)\potion.o XOVL54 = $(OBJ)\pray.o XOVL55 = $(OBJ)\read.1-b $(OBJ)\spell.o XOVL56 = $(OBJ)\search.1-b X# clothing stuff XOVL57 = $(OBJ)\do_wear.b $(OBJ)\wield.o $(OBJ)\worn.o X# Zappage XOVL58 = $(OBJ)\pri.2 $(OBJ)\zap.o XOVL59 = $(OBJ)\dbridge.1-b XOVL60 = $(OBJ)\trap.b X# Unusual circumstances XOVL61 = $(OBJ)\artifact.b $(OBJ)\do_name.1-b $(OBJ)\fountain.o $(OBJ)\music.o \ X $(OBJ)\rumors.o $(OBJ)\shknam.0 $(OBJ)\sit.o $(OBJ)\vault.1-b X# Uppers and Downers X# Note: version.o is in OVL62, but in a special way. See below. XOVL62 = $(OBJ)\allmain.2-b $(OBJ)\end.o $(OBJ)\engrave.b $(OBJ)\mail.1-b \ X $(OBJ)\o_init.o $(OBJ)\options.o $(OBJ)\restore.o $(OBJ)\rip.o \ X $(OBJ)\save.o $(OBJ)\shknam.1-b $(OBJ)\topten.o $(OBJ)\tty.o \ X $(OBJ)\u_init.o $(OBJ)\unix.1-b X# Levelling XOVL63 = $(OBJ)\apply.1 $(OBJ)\bones.o $(OBJ)\do.2 $(OBJ)\dog.2 \ X $(OBJ)\extralev.o $(OBJ)\mklev.o $(OBJ)\mkmaze.o $(OBJ)\mkroom.1-b \ X $(OBJ)\sp_lev.o $(OBJ)\track.2-b X X X# ***************************************************************************** X# ************************* Make Objects ************************************** X# ***************************************************************************** X XMOBJ = $(OVL01) $(OVL02) $(OVL03) $(OVL04) $(OVL05) $(OVL06) $(OVL07) $(OVL08)\ X $(OVL09) $(OVL10) $(OVL11) $(OVL12) $(OVL13) $(OVL14) $(OVL15) $(OVL16)\ X $(OVL17) $(OVL18) $(OVL19) $(OVL20) $(OVL21) $(OVL22) $(OVL23) $(OVL24)\ X $(OVL25) $(OVL26) $(OVL27) $(OVL28) $(OVL29) $(OVL30) $(OVL31) $(OVL32)\ X $(OVL33) $(OVL34) $(OVL35) $(OVL36) $(OVL37) $(OVL38) $(OVL39) $(OVL40)\ X $(OVL41) $(OVL42) $(OVL43) $(OVL44) $(OVL45) $(OVL46) $(OVL47) $(OVL48)\ X $(OVL49) $(OVL50) $(OVL51) $(OVL52) $(OVL53) $(OVL54) $(OVL55) $(OVL56)\ X $(OVL57) $(OVL58) $(OVL59) $(OVL60) $(OVL61) $(OVL62) $(OVL63) X XVOBJ = $(ROOT) $(MOBJ) X XHOBJ = $(VOBJ) $(OBJ)\version.o X X# object files for makedefs XMAKEOBJS = $(OBJ)\makedefs.o $(OBJ)\alloc.o $(OBJ)\monst.o \ X $(OBJ)\objects.o $(OBJ)\panic.o X XOVERLAYS = ($(OVL01)) ($(OVL02)) ($(OVL03)) ($(OVL04)) ($(OVL05)) ($(OVL06)) \ X ($(OVL07)) ($(OVL08)) ($(OVL09)) ($(OVL10)) ($(OVL11)) ($(OVL12)) \ X ($(OVL13)) ($(OVL14)) ($(OVL15)) ($(OVL16)) ($(OVL17)) ($(OVL18)) \ X ($(OVL19)) ($(OVL20)) ($(OVL21)) ($(OVL22)) ($(OVL23)) ($(OVL24)) \ X ($(OVL25)) ($(OVL26)) ($(OVL27)) ($(OVL28)) ($(OVL29)) ($(OVL30)) \ X ($(OVL31)) ($(OVL32)) ($(OVL33)) ($(OVL34)) ($(OVL35)) ($(OVL36)) \ X ($(OVL37)) ($(OVL38)) ($(OVL39)) ($(OVL40)) ($(OVL41)) ($(OVL42)) \ X ($(OVL43)) ($(OVL44)) ($(OVL45)) ($(OVL46)) ($(OVL47)) ($(OVL48)) \ X ($(OVL49)) ($(OVL50)) ($(OVL51)) ($(OVL52)) ($(OVL53)) ($(OVL54)) \ X ($(OVL55)) ($(OVL56)) ($(OVL57)) ($(OVL58)) ($(OVL59)) ($(OVL60)) \ X ($(OVL61)) ($(OVL62) $(OBJ)\version.o) ($(OVL63)) X X# object files for special levels compiler XSPLEVOBJS = $(OBJ)\lev_comp.o $(OBJ)\lev_lex.o $(OBJ)\lev_main.o \ X $(OBJ)\alloc.o $(OBJ)\monst.o $(OBJ)\objects.o \ X $(OBJ)\panic.o X X# ***************************************************************************** X# ************************** Header Objects *********************************** X# ***************************************************************************** X XPCCONF_H = $(INCL)\$(TARG)conf.h $(INCL)\msdos.h $(INCL)\system.h XGLOBAL_H = $(PCCONF_H) $(INCL)\coord.h $(INCL)\global.h XCONFIG_H = $(GLOBAL_H) $(INCL)\config.h $(INCL)\tradstdc.h XPERMONST_H = $(INCL)\permonst.h $(INCL)\monattk.h $(INCL)\monflag.h XYOUPROP_H = $(PERMONST_H) $(INCL)\prop.h $(INCL)\mondata.h \ X $(INCL)\pm.h $(INCL)\youprop.h XYOU_H = $(YOUPROP_H) $(INCL)\attrib.h $(INCL)\monst.h \ X $(INCL)\you.h XDECL_H = $(YOU_H) $(INCL)\decl.h $(INCL)\obj.h \ X $(INCL)\onames.h $(INCL)\spell.h $(INCL)\color.h XHACK_H = $(CONFIG_H) $(DECL_H) $(INCL)\trap.h \ X $(INCL)\flag.h $(INCL)\gold.h $(INCL)\mkroom.h \ X $(INCL)\monsym.h $(INCL)\objclass.h $(INCL)\rm.h \ X $(INCL)\trampoli.h $(INCL)\hack.h X X# ***************************************************************************** X# ************************ File Dependencies ********************************** X# ***************************************************************************** X X# Due to an NDMake inadequacy these must accord with a topological sort of the X# generated-from relation... output on the left, input on the right. Trust me. X.SUFFIXES: .exe .0 .0-1 .0-2 .0-3 .1 .1-2 .1-3 .1-b .2 .2-3 .2-b .3 .3-b .b \ X .o .c .y .l .obj .asm X X.c.o: X $(CC) $(CFLAGS) $(COSPACE) /Fo$(OBJ)\$*.o $*.c X.c.0: X $(CC) $(CFLAGS) $(COSPEED) /DOVL0 /NT$*.0 /Fo$(OBJ)\$*.0 $*.c X.c.0-1: X $(CC) $(CFLAGS) $(COSPEED) /DOVL0 /DOVL1 /NT$*.0-1 /Fo$(OBJ)\$*.0-1 $*.c X.c.0-2: X $(CC) $(CFLAGS) $(COSPACE) /DOVL0 /DOVL1 /DOVL2 /NT$*.0-2 /Fo$(OBJ)\$*.0-2 $*.c X.c.0-3: X $(CC) $(CFLAGS) $(COSPACE) /DOVL0 /DOVL1 /DOVL2 /DOVL3 /NT$*.0-3 /Fo$(OBJ)\$*.0-3 $*.c X.c.1: X $(CC) $(CFLAGS) $(COSPACE) /DOVL1 /NT$*.1 /Fo$(OBJ)\$*.1 $*.c X.c.1-2: X $(CC) $(CFLAGS) $(COSPACE) /DOVL1 /DOVL2 /NT$*.1-2 /Fo$(OBJ)\$*.1-2 $*.c X.c.1-3: X $(CC) $(CFLAGS) $(COSPACE) /DOVL1 /DOVL2 /DOVL3 /NT$*.1-3 /Fo$(OBJ)\$*.1-3 $*.c X.c.1-b: X $(CC) $(CFLAGS) $(COSPACE) /DOVL1 /DOVL2 /DOVL3 /DOVLB /NT$*.1-b /Fo$(OBJ)\$*.1-b $*.c X.c.2: X $(CC) $(CFLAGS) $(COSPACE) /DOVL2 /NT$*.2 /Fo$(OBJ)\$*.2 $*.c X.c.2-3: X $(CC) $(CFLAGS) $(COSPACE) /DOVL2 /DOVL3 /NT$*.2-3 /Fo$(OBJ)\$*.2-3 $*.c X.c.2-b: X $(CC) $(CFLAGS) $(COSPACE) /DOVL2 /DOVL3 /DOVLB /NT$*.2-b /Fo$(OBJ)\$*.2-b $*.c X.c.3: X $(CC) $(CFLAGS) $(COSPACE) /DOVL3 /NT$*.3 /Fo$(OBJ)\$*.3 $*.c X.c.3-b: X $(CC) $(CFLAGS) $(COSPACE) /DOVL3 /DOVLB /NT$*.3-b /Fo$(OBJ)\$*.3-b $*.c X.c.b: X $(CC) $(CFLAGS) $(COSPACE) /DOVLB /NT$*.b /Fo$(OBJ)\$*.b $*.c X.asm.obj: X $(ASM) $(AFLAGS) $*.asm,$(OBJ)\$*.obj ; X X$(GAME): $(GAMEFILE) X X$(GAME).exe: $(GAMEFILE) X X$(GAMEFILE): $(OBJ) $(HOBJ) X @echo Loading.... X $(LINK) $(ROOT) $(OVERLAYS),$(GAMEFILE),$(GAME),$(CLIB) $(TERMLIB) $(LFLAGS) ; X $(EXEPATCH) $(GAMEFILE) $(EXEFLAGS) X @echo NetHack is up to date. X X$(OBJ): X if not exist .\$(OBJ)\*.* mkdir $(OBJ) X X# The following 3 modules vary depending on what OS you are using. X X$(OBJ)\main.o: $(HACK_H) $(TARG)main.c X $(CC) $(CFLAGS) $(COSPACE) /Fo.\$(OBJ)\main.o $(TARG)main.c X X$(OBJ)\tty.o: $(HACK_H) $(INCL)\func_tab.h $(TARG)tty.c X $(CC) $(CFLAGS) $(COSPACE) /Fo.\$(OBJ)\tty.o $(TARG)tty.c X X$(OBJ)\unix.0: $(HACK_H) $(TARG)unix.c X $(CC) $(CFLAGS) $(COSPEED) /DOVL0 /Fo.\$(OBJ)\unix.0 $(TARG)unix.c X$(OBJ)\unix.1-b: $(HACK_H) $(TARG)unix.c X $(CC) $(CFLAGS) $(COSPACE) /DOVL1 /DOVL2 /DOVL3 /DOVLB /Fo.\$(OBJ)\unix.1-b $(TARG)unix.c X X$(OBJ)\makedefs.o: $(INCL)\config.h $(INCL)\permonst.h $(INCL)\objclass.h X Xmakedefs.exe: $(MAKEOBJS) X $(LINK) $(LFLAGS) $(MAKEOBJS), makedefs.exe,, $(CLIB); X X# Targets for the special levels compiler X Xlev_comp.c: lev_comp.y X $(MAKEBIN) do_yacc X Xlev_lex.c: lev_comp.l X $(MAKEBIN) do_lex X Xyacc_msg: X @echo lev_comp.y has changed. To update lev_comp.c and lev_comp.h run YACC. X Xyacc_act: X $(YACC) -d lev_comp.y X copy $(YTABC) lev_comp.c X copy $(YTABH) $(INCL)\lev_comp.h X del $(YTABC) X del $(YTABH) X Xlex_msg: X @echo lev_comp.l has changed. To update lev_lex.c run LEX. X Xlex_act: X $(LEX) lev_comp.l X copy $(LEXYYC) lev_lex.c X del $(LEXYYC) X X# This is stupid but since the default rule does not work here ... X X$(OBJ)\lev_comp.o: $(HACK_H) $(INCL)\sp_lev.h lev_comp.c X $(CC) $(CFLAGS) /Fo$(OBJ)\$*.o $*.c X$(OBJ)\lev_lex.o: $(HACK_H) $(INCL)\sp_lev.h $(INCL)\lev_comp.h \ X lev_lex.c X $(CC) $(CFLAGS) /Fo$(OBJ)\$*.o $*.c X Xlev_comp.exe: $(SPLEVOBJS) X $(LINK) $(LFLAGS) $(SPLEVOBJS),lev_comp.exe,, $(CLIB); X X# ***************************************************************************** X# ************************* Makedefs Stuff *********************************** X# ***************************************************************************** X# The following include files depend on makedefs to be created. X# date.h should be remade any time any of the source or include code X# is modified. X X$(INCL)\date.h: $(VOBJ) makedefs.exe X .\makedefs -v X X$(INCL)\onames.h: makedefs.exe X .\makedefs -o X X$(INCL)\pm.h: makedefs.exe X .\makedefs -p X X$(INCL)\trap.h: makedefs.exe X .\makedefs -t X Xdata: $(AUX)\data.bas makedefs.exe X .\makedefs -d X Xrumors: $(AUX)\rumors.tru $(AUX)\rumors.fal makedefs.exe X .\makedefs -r X X# ***************************************************************************** X# ************************ Secondary targets ********************************** X# ***************************************************************************** X Xall: install X Xinstall: $(OBJ) lev_comp.exe $(GAMEFILE) auxil.tag install.tag X @echo Don't forget to check HACKDIR in NetHack.cnf. X @echo Done. X Xinstall.tag: X copy $(OTHERS)\termcap $(GAMEDIR) X copy $(AUX)\*. $(GAMEDIR) X del $(GAMEDIR)\MacHelp X copy $(OTHERS)\NetHack.cnf $(GAMEDIR) X echo install done > install.tag X Xspec_lev.tag: lev_comp.exe $(AUX)\castle.des $(AUX)\endgame.des $(AUX)\tower.des X lev_comp $(AUX)\castle.des X lev_comp $(AUX)\endgame.des X lev_comp $(AUX)\tower.des X copy castle $(GAMEDIR) X copy endgame $(GAMEDIR) X copy tower? $(GAMEDIR) X del castle X del endgame X del tower? X echo spec_lev done > spec_lev.tag X Xauxil.tag: spec_lev.tag data rumors X echo special levels created > auxil.tag X Xclean: X del $(OBJ)\*.o X del $(OBJ)\*.0 X del $(OBJ)\*.0-1 X del $(OBJ)\*.0-2 X del $(OBJ)\*.0-3 X del $(OBJ)\*.1 X del $(OBJ)\*.1-2 X del $(OBJ)\*.1-3 X del $(OBJ)\*.1-b X del $(OBJ)\*.2 X del $(OBJ)\*.2-3 X del $(OBJ)\*.2-b X del $(OBJ)\*.3 X del $(OBJ)\*.3-b X del $(OBJ)\*.b X del $(OBJ)\*.obj X rmdir $(OBJ) X Xspotless: clean X del $(INCL)\date.h X del $(INCL)\onames.h X del $(INCL)\pm.h X if exist makedefs.exe del makedefs.exe X if exist lev_comp.exe del lev_comp.exe X del castle X del endgame X del tower? X del *.bak X del *.tag X del *.map X del *.obj X del *.lib X del *.txt X del $(AUX)\data X del $(AUX)\rumors X X# ***************************************************************************** X# ************************* Other dependencies ******************************** X# ***************************************************************************** X# Other dependencies X# X# I deleted that line. ;-} X X$(OBJ)\allmain.0: $(HACK_H) X$(OBJ)\allmain.1: $(HACK_H) X$(OBJ)\allmain.2-b: $(HACK_H) X$(OBJ)\alloc.o: $(CONFIG_H) X$(OBJ)\apply.0: $(HACK_H) $(INCL)\edog.h X$(OBJ)\apply.1: $(HACK_H) $(INCL)\edog.h X$(OBJ)\apply.2-b: $(HACK_H) $(INCL)\edog.h X$(OBJ)\artifact.0: $(HACK_H) $(INCL)\artifact.h X$(OBJ)\artifact.1: $(HACK_H) $(INCL)\artifact.h X$(OBJ)\artifact.2: $(HACK_H) $(INCL)\artifact.h X$(OBJ)\artifact.b: $(HACK_H) $(INCL)\artifact.h X$(OBJ)\attrib.0: $(HACK_H) X$(OBJ)\attrib.1: $(HACK_H) X$(OBJ)\attrib.2-b: $(HACK_H) X$(OBJ)\bones.o: $(HACK_H) X$(OBJ)\cmd.0: $(HACK_H) $(INCL)\func_tab.h X$(OBJ)\cmd.1: $(HACK_H) $(INCL)\func_tab.h X$(OBJ)\cmd.2-b: $(HACK_H) $(INCL)\func_tab.h X$(OBJ)\dbridge.0: $(HACK_H) X$(OBJ)\dbridge.1-b: $(HACK_H) X$(OBJ)\decl.o: $(HACK_H) X$(OBJ)\demon.o: $(HACK_H) X$(OBJ)\do.0: $(HACK_H) X$(OBJ)\do.1: $(HACK_H) X$(OBJ)\do.2: $(HACK_H) X$(OBJ)\do.3: $(HACK_H) X$(OBJ)\do.b: $(HACK_H) X$(OBJ)\do_name.0: $(HACK_H) X$(OBJ)\do_name.1-b: $(HACK_H) X$(OBJ)\do_wear.0-1: $(HACK_H) X$(OBJ)\do_wear.2: $(HACK_H) X$(OBJ)\do_wear.b: $(HACK_H) X$(OBJ)\dog.0: $(HACK_H) $(INCL)\edog.h X$(OBJ)\dog.1: $(HACK_H) $(INCL)\edog.h X$(OBJ)\dog.2: $(HACK_H) $(INCL)\edog.h X$(OBJ)\dog.b: $(HACK_H) $(INCL)\edog.h X$(OBJ)\dogmove.o: $(HACK_H) $(INCL)\mfndpos.h $(INCL)\edog.h X$(OBJ)\dokick.o: $(HACK_H) $(INCL)\eshk.h X$(OBJ)\dothrow.o: $(HACK_H) X$(OBJ)\eat.0: $(HACK_H) X$(OBJ)\eat.1: $(HACK_H) X$(OBJ)\eat.2-b: $(HACK_H) X$(OBJ)\end.o: $(HACK_H) $(INCL)\eshk.h X$(OBJ)\engrave.0-1: $(HACK_H) X$(OBJ)\engrave.2: $(HACK_H) X$(OBJ)\engrave.b: $(HACK_H) X$(OBJ)\exper.o: $(HACK_H) X$(OBJ)\extralev.o: $(HACK_H) X$(OBJ)\fountain.o: $(HACK_H) X$(OBJ)\getline.0-1: $(HACK_H) $(INCL)\func_tab.h X$(OBJ)\getline.2: $(HACK_H) $(INCL)\func_tab.h X$(OBJ)\getline.b: $(HACK_H) $(INCL)\func_tab.h X$(OBJ)\hack.0: $(HACK_H) X$(OBJ)\hack.1: $(HACK_H) X$(OBJ)\hack.2: $(HACK_H) X$(OBJ)\hack.b: $(HACK_H) X$(OBJ)\invent.0: $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h X$(OBJ)\invent.1: $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h X$(OBJ)\invent.2: $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h X$(OBJ)\invent.3: $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h X$(OBJ)\invent.b: $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h X$(OBJ)\ioctl.o: $(HACK_H) X$(OBJ)\lev_main.o: $(HACK_H) $(INCL)\sp_lev.h X$(OBJ)\lock.0: $(HACK_H) X$(OBJ)\lock.1-b: $(HACK_H) X$(OBJ)\mail.0: $(HACK_H) X$(OBJ)\mail.1-b: $(HACK_H) X$(OBJ)\makemon.0-2: $(HACK_H) X$(OBJ)\makemon.b: $(HACK_H) X$(OBJ)\mcastu.o: $(HACK_H) X$(OBJ)\mhitm.0: $(HACK_H) $(INCL)\artifact.h X$(OBJ)\mhitm.1-b: $(HACK_H) $(INCL)\artifact.h X$(OBJ)\mhitu.0-1: $(HACK_H) $(INCL)\artifact.h $(INCL)\edog.h X$(OBJ)\mhitu.2-b: $(HACK_H) $(INCL)\artifact.h $(INCL)\edog.h X$(OBJ)\mklev.o: $(HACK_H) X$(OBJ)\mkmaze.o: $(HACK_H) X$(OBJ)\mkobj.0: $(HACK_H) X$(OBJ)\mkobj.1: $(HACK_H) X$(OBJ)\mkobj.2-b: $(HACK_H) X$(OBJ)\mkroom.0: $(HACK_H) X$(OBJ)\mkroom.1-b: $(HACK_H) X$(OBJ)\mon.0-1: $(HACK_H) $(INCL)\mfndpos.h $(INCL)\wseg.h X$(OBJ)\mon.2-b: $(HACK_H) $(INCL)\mfndpos.h $(INCL)\wseg.h X$(OBJ)\mondata.0-1: $(HACK_H) $(INCL)\eshk.h $(INCL)\epri.h X$(OBJ)\mondata.2: $(HACK_H) $(INCL)\eshk.h $(INCL)\epri.h X$(OBJ)\mondata.b: $(HACK_H) $(INCL)\eshk.h $(INCL)\epri.h X$(OBJ)\monmove.0-1: $(HACK_H) $(INCL)\mfndpos.h $(INCL)\artifact.h X$(OBJ)\monmove.2-b: $(HACK_H) $(INCL)\mfndpos.h $(INCL)\artifact.h X$(OBJ)\monst.o: $(CONFIG_H) $(PERMONST_H) $(INCL)\eshk.h \ X $(INCL)\vault.h $(INCL)\epri.h $(INCL)\color.h X$(OBJ)\msdos.o: $(HACK_H) X$(OBJ)\mthrowu.0: $(HACK_H) X$(OBJ)\mthrowu.1: $(HACK_H) X$(OBJ)\mthrowu.2-b: $(HACK_H) X$(OBJ)\music.o: $(HACK_H) X$(OBJ)\o_init.o: $(HACK_H) X$(OBJ)\objects.o: $(CONFIG_H) $(INCL)\obj.h $(INCL)\objclass.h \ X $(INCL)\prop.h $(INCL)\color.h X$(OBJ)\objnam.0-1: $(HACK_H) X$(OBJ)\objnam.2-b: $(HACK_H) X$(OBJ)\options.o: $(HACK_H) X$(OBJ)\pager.0: $(HACK_H) X$(OBJ)\pager.1-b: $(HACK_H) X$(OBJ)\panic.o: $(CONFIG_H) X$(OBJ)\pickup.0: $(HACK_H) X$(OBJ)\pickup.1: $(HACK_H) X$(OBJ)\pickup.2-b: $(HACK_H) X$(OBJ)\polyself.0-1: $(HACK_H) X$(OBJ)\polyself.2-b: $(HACK_H) X$(OBJ)\potion.o: $(HACK_H) X$(OBJ)\pray.o: $(HACK_H) X$(OBJ)\pri.0: $(HACK_H) $(INCL)\epri.h $(INCL)\termcap.h X$(OBJ)\pri.1: $(HACK_H) $(INCL)\epri.h $(INCL)\termcap.h X$(OBJ)\pri.2: $(HACK_H) $(INCL)\epri.h $(INCL)\termcap.h X$(OBJ)\pri.b: $(HACK_H) $(INCL)\epri.h $(INCL)\termcap.h X$(OBJ)\priest.0: $(HACK_H) $(INCL)\mfndpos.h $(INCL)\eshk.h \ X $(INCL)\epri.h X$(OBJ)\priest.1-b: $(HACK_H) $(INCL)\mfndpos.h $(INCL)\eshk.h \ X $(INCL)\epri.h X$(OBJ)\prisym.0: $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h X$(OBJ)\prisym.1: $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h X$(OBJ)\prisym.2: $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h X$(OBJ)\prisym.b: $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h X$(OBJ)\random.o: X$(OBJ)\read.0: $(HACK_H) X$(OBJ)\read.1-b: $(HACK_H) X$(OBJ)\restore.o: $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h X$(OBJ)\rip.o: $(HACK_H) X$(OBJ)\rnd.0: $(HACK_H) X$(OBJ)\rnd.1: $(HACK_H) X$(OBJ)\rnd.2-b: $(HACK_H) X$(OBJ)\rumors.o: $(HACK_H) X$(OBJ)\save.o: $(HACK_H) $(INCL)\lev.h $(INCL)\wseg.h X$(OBJ)\search.0: $(HACK_H) $(INCL)\artifact.h X$(OBJ)\search.1-b: $(HACK_H) $(INCL)\artifact.h X$(OBJ)\shk.0: $(HACK_H) $(INCL)\eshk.h X$(OBJ)\shk.1-b: $(HACK_H) $(INCL)\eshk.h X$(OBJ)\shknam.0: $(HACK_H) $(INCL)\eshk.h X$(OBJ)\shknam.1-b: $(HACK_H) $(INCL)\eshk.h X$(OBJ)\sit.o: $(HACK_H) X$(OBJ)\sounds.0: $(HACK_H) $(INCL)\edog.h $(INCL)\eshk.h X$(OBJ)\sounds.1-b: $(HACK_H) $(INCL)\edog.h $(INCL)\eshk.h X$(OBJ)\sp_lev.o: $(HACK_H) $(INCL)\sp_lev.h X$(OBJ)\spell.o: $(HACK_H) X$(OBJ)\steal.0-1: $(HACK_H) X$(OBJ)\steal.2-b: $(HACK_H) X$(OBJ)\termcap.0: $(HACK_H) $(INCL)\termcap.h X$(OBJ)\termcap.1: $(HACK_H) $(INCL)\termcap.h X$(OBJ)\termcap.2-b: $(HACK_H) $(INCL)\termcap.h X$(OBJ)\timeout.0: $(HACK_H) X$(OBJ)\timeout.1-b: $(HACK_H) X$(OBJ)\topl.0: $(HACK_H) X$(OBJ)\topl.1-2: $(HACK_H) X$(OBJ)\topl.b: $(HACK_H) X$(OBJ)\topten.o: $(HACK_H) X$(OBJ)\track.0: $(HACK_H) X$(OBJ)\track.1: $(HACK_H) X$(OBJ)\track.2-b: $(HACK_H) X$(OBJ)\trampoli.o: $(HACK_H) X$(OBJ)\trap.0-1: $(HACK_H) $(INCL)\edog.h X$(OBJ)\trap.2: $(HACK_H) $(INCL)\edog.h X$(OBJ)\trap.b: $(HACK_H) $(INCL)\edog.h X$(OBJ)\u_init.o: $(HACK_H) X$(OBJ)\uhitm.o: $(HACK_H) $(INCL)\artifact.h X$(OBJ)\vault.0: $(HACK_H) $(INCL)\vault.h X$(OBJ)\vault.1-b: $(HACK_H) $(INCL)\vault.h X$(OBJ)\version.o: $(HACK_H) $(INCL)\date.h $(INCL)\patchlev.h X$(OBJ)\weapon.0-1: $(HACK_H) X$(OBJ)\weapon.2-b: $(HACK_H) X$(OBJ)\were.0: $(HACK_H) X$(OBJ)\were.1-b: $(HACK_H) X$(OBJ)\wield.o: $(HACK_H) X$(OBJ)\wizard.0: $(HACK_H) X$(OBJ)\wizard.1-b: $(HACK_H) X$(OBJ)\worm.o: $(HACK_H) $(INCL)\wseg.h X$(OBJ)\worn.o: $(HACK_H) X$(OBJ)\write.o: $(HACK_H) X$(OBJ)\zap.o: $(HACK_H) END_OF_FILE if test 24533 -ne `wc -c <'others/Makefile.ovl'`; then echo shar: \"'others/Makefile.ovl'\" unpacked with wrong size! fi # end of 'others/Makefile.ovl' fi echo shar: End of archive 33 \(of 56\). cp /dev/null ark33isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 56 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