Commit Graph
19035 Commits
Author SHA1 Message Date
nhmall 46ab1ae213 follow-up: remove previous line 2026-05-13 12:43:15 -04:00
nhmall b9da5b7ced update tested versions of Visual Studio 2026-05-13 2026-05-13 12:40:12 -04:00
nhmall b17392a985 innocuous commit 2026-05-13 11:39:40 -04:00
nhmall 17ae931003 fixes5-0-1.txt catch-up 2026-05-12 19:08:44 -04:00
nhmall 1b1beaa5bb spelling correction 2026-05-12 18:00:39 -04:00
nhmall 82d7b2b249 Merge branch 'cleanup-followup' of https://github.com/ingpaschke/NetHack into NetHack-5.0 2026-05-12 12:46:25 -04:00
nhmall e0ccf22d84 One of our TeX tools leaves .out files behind 2026-05-12 12:44:26 -04:00
Ingo Paschke 6736f878aa Amiga: graphical tombstone RTG-screen fallback
amii_outrip relies on LoadRGB4/transpalette fade and raw BltBitMap
to a SMART_REFRESH window -- chipset-era idioms that do not reach
the visible display on Picasso96 or CyberGraphX screens.  On RTG
the screen stayed black and the user saw nothing between the
death messages and the high-score list.  Detect RTG by screen
size > 800x600 and fall through to genl_outrip so RTG users get
the ASCII tombstone instead.

Switch the still-graphical path to BltBitMapRastPort so the blit
goes through the layer system, and move CloseWindow(ripwin)
outside the Forbid()/Permit() pair (same fix as amii_cleanup).

Rename cmap_white/cmap_black to cmap_outline/cmap_fill -- those
variables actually hold the indices of the darkest and lightest
palette entries, used for the four offset outline strokes and
the centered fill stroke respectively; the old names were
backwards.
2026-05-12 15:33:29 +02:00
Ingo Paschke 89971a5fc9 Amiga: fix extended-command menu mouse-pick
The amii_get_ext_cmd menu used the first character of each command
as the item identity (id.a_char) and then linearly searched
extcmdlist for the first command starting with that character.
Many commands share a first letter, so picking #airlevel returned
#adjust, #wipe returned #wear, etc.  Store the actual index in
id.a_int and read it back directly.

While in that function, size obufp at BUFSZ (was 100) and replace
the unbounded strcpy from extcmdlist[i].ef_txt with strncpy +
explicit NUL.
2026-05-12 15:31:44 +02:00
Ingo Paschke 146fbf20d8 Amiga: clamp amii_numcolors and guard tile CMAP loop
Reject tile/tomb IFF files whose nPlanes field exceeds DEPTH:
the CMAP loop writes 1<<np entries into amii_initmap[] /
amiv_init_map[], both sized AMII_MAXCOLORS = 1<<DEPTH = 64, so
a malformed file with nPlanes >= 7 would corrupt adjacent BSS.

After OpenScreen succeeds, clamp amii_numcolors to the actually
populated portion of the init-map arrays (AMII_PALETTE_SIZE for
text mode, AMIV_PALETTE_SIZE for tile mode).  On a 64-color
screen this stops LoadRGB4 from loading the zero-initialized
tail entries as black.  Replace the matching magic 32 in the
tilefile selection with AMIV_PALETTE_SIZE.

While there, add the (char) cast on amii_glyph_buffer's
truncating assignment to make the contract explicit.
2026-05-12 15:30:48 +02:00
Ingo Paschke 459113a48e Amiga: fix --more-- infinite loop on overlong words
When a single word exceeds the visible message-window width the
wrap loop found no whitespace, called outmore(cw), and continued
without advancing str -- and on the next iteration curx==0 took
it straight back to the same spot.  Force-break the word at the
column boundary when we are already at the start of a line.

Also reset the wrapping static flag to 0 after the NHW_BASE wrap
cleanup runs, so the cleanup fires once after a wrap instead of
on every subsequent putstr.
2026-05-12 15:29:37 +02:00
Ingo Paschke 4e63ba90ca Amiga: bound BufferQueueChar; move CloseWindow out of Forbid()
Make the BufferQueueChar macro bounds-check KbdBuffered against
KBDBUFFER internally so the RAWKEY and NEWSIZE 'R'-64 paths can
no longer push past the 10-byte queue; widen KbdBuffered to int
so the counter cannot wrap silently in the queue-scan loops.

In amii_cleanup move kill_nhwindows()/DeleteMsgPort() outside
the Forbid()/Permit() pair: CloseWindow can wait on layers.library
semaphores on OS 3.x and that is unsafe under Forbid.  Keep only
the IDCMP-flush loop inside.
2026-05-12 15:28:43 +02:00
Ingo Paschke 252ca5bef7 Amiga: defensive NULL/bounds guards in menus and window creation
Guard the gd lookup in DoMenuScroll's GADGETUP/MOUSEMOVE branches
so a window with no GadgetID==1 does not deref NULL; match the
existing guards in the keyboard-scroll branches.  In the keyboard
selector and MENU_UNSELECT_ALL paths, only mutate items with
canselect set so a non-selectable header cannot have its str
stomped.  Clamp MENU_LAST_PAGE topidx to >= 0.  Make find_menu_item
return NULL on negative idx instead of the head item.  Guard the
PROMPTFIRST data[] shuffle behind cury > 0.

In amii_destroy_nhwindow's NHW_OVER branch use cw->win with a NULL
guard instead of dereferencing amii_wins[WIN_OVER]->win blindly.
Range-check the type argument to amii_create_nhwindow.  Fix the
*argv_in[1] precedence bug so the -L/-l flag does not deref NULL
when it is the last argument.  Wrap AllocAslRequest result in a
NULL check before AslRequestTags/FreeAslRequest.

Defensively bounds-check the idx argument to DispCol.  Replace
the -25937 signed-int literal in clipwin's PropInfo with the
equivalent UWORD value 39599.  Simplify amii_start_menu's free
loop; switch DoMenuScroll's inventory title and Count display to
Snprintf, and stop passing countString to pline as a format.
2026-05-12 15:27:13 +02:00
Ingo Paschke 15e3973ac2 Amiga: tighten input/dialog buffer bounds
Right-size the Intuition string-gadget buffer to BUFSZ so a caller
with a BUFSZ-sized buffer cannot be overflowed.  Enlarge the
amii_yn_function prompt buffer to fit the worst-case query + resp
+ def + trailing space and switch the appends to Snprintf with
remaining-space tracking.  Replace sprintf in amii_display_file's
"Can't display X: Y" path with Snprintf.  In EditColor's Save path
drop the strcpy/strcat chain that could trail off the end of
oname/nname when dirname returned a near-full path; use Snprintf
instead.  Rewrite dirname() to copy first and truncate the copy,
so it no longer briefly NULs the caller's string.
2026-05-12 15:24:15 +02:00
Ingo Paschke d99eeb17c2 Amiga: header hygiene and palette-size constants
Add AMII_PALETTE_SIZE / AMIV_PALETTE_SIZE in amiconf.h to make the
actual populated portion of the init-map arrays explicit.  Drop the
redundant extern void exit() declaration.  Annotate Abort with
NORETURN in both amiconf.h and winproto.h; drop the duplicate Abort
declaration further down winproto.h.

Convert the bare-token "CLIPPING must be defined" assertion in
windefs.h into a real #error directive.

Comment in winext.h to disambiguate the three similarly named
amii*_init*map palette arrays.
2026-05-12 15:21:23 +02:00
Ingo Paschke ebcf31a4da Amiga: drop UNTESTED AROS path; tighten fopenp separator write
The UNTESTED #ifdef in freediskspace was never gated by any hints
file, so the unsigned-long-long path could only be enabled by a
stray manual #define -- in which case the return type is still
long and silently truncates.  Remove the branches.

In fopenp the separator '/' write was unchecked: when the path
segment exactly filled the buffer to BUFSIZ-2 it would land at
buf[BUFSIZ-1] and the follow-on NUL would write past the end.
Guard the write.
2026-05-12 15:19:28 +02:00
Ingo Paschke 157c005f02 Amiga: harden host-side bmp/xpm to iff converters
Replace #pragma-pack BMP header reads with little-endian byte
readers so the tool works on any host endianness.  Add dimension
and color-count range checks, zero-init pixel remap table, check
calloc, free bmpdata on early returns, send malloc errors to
stderr.  Add bp>xbuf guards to xpmgetline's strip loop.
2026-05-12 15:18:44 +02:00
Ingo Paschke cb46d9effd Amiga: tighten two minor issues from review
- amii_set_text_font called CloseLibrary(DiskfontBase) outside the
  OpenLibrary guard; on Kickstart V36+ that is a no-op for a NULL
  handle, but on V33/V34 it is undefined.  Move the close inside
  the if-block where DiskfontBase is known non-NULL.
- amii_get_ext_cmd's bounds check used BUFSZ for an obufp[100]
  buffer; the tighter COLNO check actually bounded it but the
  expression was misleading.  Use sizeof obufp.
2026-05-12 15:12:07 +02:00
Ingo Paschke 74c87caac3 Amiga: fix bitmap/IFF resource handling in winchar.c
- MyAllocBitMap left bm->bm.Planes[] uninitialized; InitBitMap only
  fills BytesPerRow/Rows/Flags/Depth, not Planes[].  If AllocRaster
  fails mid-loop, MyFreeBitMap was iterating up to Depth and would
  pass uninitialized stack-garbage pointers to FreeRaster.  Zero
  Planes[] before the alloc loop.
- ReadImageFile leaked iffparse.library, the IFFHandle, the DOS file
  handle, and any open-IFF state on every panic path.  On AmigaOS
  those handles are not auto-reclaimed when the process dies, so
  each failure stranded resources until reboot.  Restructure to a
  single cleanup label and free in reverse-acquisition order before
  panicking.
- OpenIFF returns an error code that was being thrown away, so a
  failed open would feed corrupt state to ParseIFF.  Check and
  bail.
2026-05-12 15:12:07 +02:00
Ingo Paschke f583787825 Amiga: fix overview-window crashes
- MyAllocBitMap left bm->mflags uninitialized, so MyFreeBitMap took the
  wrong path between FreeRaster and FreeMem and intermittently corrupted
  exec's free list (Software Failure 0x81000005, DEADEND in FreeMem).
- The NHW_OVER window is BORDERLESS, so attaching WINDOWSIZING |
  WINDOWDRAG | WINDOWCLOSE created phantom gadgets that hit-test against
  unrelated input.  Pressing ESC while the overview was selected fired
  CLOSEWINDOW and destroyed the window underneath the running code,
  leading to wild-PC crashes.  Drop the gadget flags; SHIFT-HELP already
  toggles the overview cleanly via delayed_key_action.
- amii_destroy_nhwindow only reset WIN_MAP / WIN_STATUS / WIN_MESSAGE /
  WIN_INVEN; WIN_OVER and WIN_BASE kept pointing at freed slots, so any
  later 'WIN_X != WIN_ERR && amii_wins[WIN_X]->win' check dereferenced
  NULL.  Reset them too.
2026-05-12 15:12:07 +02:00
Ingo Paschke 7c8524ae37 Amiga: make amigapkg depend on $(GAMEBIN)
Without the dependency, 'make amigapkg' would copy whatever was
already in targets/amiga/ without ever rebuilding when sources
changed -- silently shipping a stale binary.
2026-05-12 15:12:07 +02:00
Ingo Paschke 657f6eaad9 Amiga: fix latent issues found in code review
- fname[18]/sprintf risks overflow for >=10 in any version field;
  switch to snprintf into a wider static buffer.
- (1L << i) for i==31 (or shifting into the depth-loop terminator)
  is undefined for signed long; use 1UL.
- Drop unused cnt= from amii_display_nhwindow's DoMenuScroll call;
  the menu return value is consumed elsewhere, not here.
2026-05-12 15:12:07 +02:00
nhmall 7d802883bc replace hard-coded nroff with $(NROFF) 2026-05-12 09:07:06 -04:00
nhmall 80a99d1ed1 stop init of allopt[] from wiping out disregards 2026-05-12 00:10:38 -04:00
nhmall f5456fa92c another Windows issue causing startup grief 2026-05-11 22:59:42 -04:00
nhmall d62b56e0f2 yet more hints file prep 2026-05-11 20:45:49 -04:00
nhmall ccb3db39d7 more hints file prep 2026-05-11 19:59:53 -04:00
nhmall ef600a41f6 allow a hints file to be able to specify GUIDECMD
define GUIDECMD in sys/unix/Makefile.doc using '?=' notation
2026-05-11 19:16:03 -04:00
PatR c42d35eac0 avoid newsym(0,0) for vault guard
When a vault guard is being moving off the map to <0,0> to wait until
his temporary corridor gets removed, don't try to update the map for
that off-the-screen location in order to avoid triggering impossible()
from newsym().

Plus a trivial tweak to NH_abort().  Its argument is never modified so
declare it as such.
2026-05-11 15:06:13 -07:00
nhmall 45ab4eb1aa follow-up: paste error snuck in 2026-05-11 17:40:50 -04:00
nhmall f06e2389b6 more fixes5-0-1.txt updates 2026-05-11 17:36:21 -04:00
nhmall 3b5e784c69 fixes5-0-1.txt catch-up 2026-05-11 17:07:17 -04:00
nhw_cron 34204d0874 This is cron-daily v1-May-7-2026. 000files updated: Files 2026-05-11 16:27:48 -04:00
nhmall 48fa545cf5 update Contributing.md 2026-05-11 16:25:14 -04:00
nhmall 9bfaa066e2 Merge branch 'cleanup' of https://github.com/ingpaschke/NetHack into NetHack-5.0 2026-05-11 15:43:56 -04:00
nhmall 3ca18c8e44 be more cautious on gcc version for warning 2026-05-11 15:40:29 -04:00
nhmall 0991b0e770 tiletext.c warning suppression 2026-05-11 15:30:53 -04:00
nhkeni 3973944a93 Fix subst for luahelper. 2026-05-11 15:22:06 -04:00
Ingo Paschke 1cfff0f002 Amiga: correct command-line flag doc in amii.hlp
Wizard mode is gated on player name == WIZARD_NAME, not on -D or
-debug.  Document -uwizard as the working entry point.
2026-05-11 20:51:06 +02:00
Ingo Paschke d1a84de8fc Amiga: delete outdated/sys/amiga/
These 3.4.1-era files are superseded: Build/Install.ami -> README.amiga;
Makefile.ami/.agc -> sys/unix/hints/include/cross-*.500;
NetHack.cnf -> sys/amiga/nethack.cnf;
txt2iff/xpm2iff.c -> sys/amiga/*_host.c.
2026-05-11 20:51:06 +02:00
Ingo Paschke 2e61bf768f Amiga: fix port_help double-prefix path
display_file -> dlb_fopen -> fopen_datafile already prepends DATAPREFIX;
wrapping PORT_HELP in fqname() too produced "NetHack:NetHack:amii.hlp".
2026-05-11 20:51:06 +02:00
Ingo Paschke 344063afb6 Amiga: route non-menu messages from DoMenuScroll to ProcessMessage
DoMenuScroll dropped IDCMP messages for non-owner windows -- so a
resize of WIN_INVEN or close-gadget on WIN_OVER during a menu never
reached the game state.  Forward those to ProcessMessage;
VANILLAKEY/RAWKEY stay with the menu.
2026-05-11 20:51:06 +02:00
Ingo Paschke 8dbbbc2fef Amiga: deduplicate amii_procs and amiv_procs
Factor common body into AMI_WIN_PROCS_BODY.  The POSITIONBAR / CLIPPING /
CHANGE_COLOR guards in the original were dead.
2026-05-11 20:51:06 +02:00
Ingo Paschke c85a8cf607 Amiga: drop redundant 'either windowtype' guards
Six if(WINVERS_AMIV || WINVERS_AMII) sites are always true with
amitty.c gone.
2026-05-11 20:51:06 +02:00
Ingo Paschke 5d86dfccb5 Amiga: replace WINVERS_AMI* strcmp with WINDOWPORT() id compare
The macros were strcmp("amiv", windowprocs.name)==0 at every reference
-- 72 sites including inner loops.  Use the 5.0 core's WINDOWPORT(wn)
which compares wp_id.
2026-05-11 20:51:06 +02:00
Ingo Paschke 688f9344cd Amiga: route port paths through fqname()
Tile loading hard-coded "NetHack:tiles/tiles{16,32}.iff" and PORT_HELP
hard-coded "nethack:amii.hlp".  Route through fqname(DATAPREFIX) so
DATADIR= overrides apply.  Refresh amii.hlp to 5.0 content, ship it via
amigapkg, and document HACKDIR / SAVEDIR / BONESDIR examples in
nethack.cnf.
2026-05-11 20:51:06 +02:00
nhkeni df9673c96e Make all top-level .md files subject to nhsub substitutions. 2026-05-11 14:46:06 -04:00
Ingo Paschke c5d8ab1985 Amiga: collapse #ifndef CROSS_TO_AMIGA include forks
Every #include block had a paired NH: assign path for native builds.
Only the cross-compile path is built now.
2026-05-11 20:43:08 +02:00
Ingo Paschke 010c068861 Amiga: clean up amiconf.h
Remove legacy compiler guards and stale extern declarations (the
ami_wbench_* family, CopyFile, ami_argset, ami_mkargline, FromWBench).
Drop unused AMII_*_VOLUME / DEFAULT_ICON macros and the
IDCMP_CLOSEWINDOW auto-define.
2026-05-11 20:43:08 +02:00
Ingo Paschke 94a74b84d8 Amiga: drop OPT_DISPMAP / display_map / fast_map machinery
display_map() was never integrated; no .c defines it.  All OPT_DISPMAP /
DISPMAP / sysflags.fast_map conditionals were unreachable.
2026-05-11 20:43:08 +02:00