all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Po Lu <luangruo@yahoo.com>
Cc: stefankangas@gmail.com, emacs-devel@gnu.org
Subject: Re: Windows 9X without KernelEx
Date: Sat, 15 Jun 2024 17:55:04 +0300	[thread overview]
Message-ID: <86bk42tfw7.fsf@gnu.org> (raw)
In-Reply-To: <875xua5lxs.fsf@yahoo.com> (message from Po Lu on Sat, 15 Jun 2024 22:18:23 +0800)

> From: Po Lu <luangruo@yahoo.com>
> Cc: stefankangas@gmail.com,  emacs-devel@gnu.org
> Date: Sat, 15 Jun 2024 22:18:23 +0800
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >>   Shell_NotifyIconW
> >>   ShellExecuteExW
> >>   SHFileOperationW
> >>   ReadDirectoryChangesW
> >
> > This is strange.  Most of those are present in Emacs for a long time,
> 
> Perhaps everyone else had installed KernelEx?

It was you who ran Emacs on those systems, so you should ask yourself.
Maybe every Windows 9X system that is in real use does indeed have
KernelEx and whatever else is needed, because both IE and Office are
known to bring such system DLLs with them.

> > and I was somehow under the impression that Emacs did start on Windows
> > 9X after their introduction.  Did you start Emacs with UNICOWS.DLL
> > available?
> 
> I did, indeed.  But -lunicows is absent from the linker command line, so
> emacs.exe is required to load the library, and its exports into function
> pointers, at runtime, and I don't understand how symbol conflicts
> between it and OS exports on NT systems are resolved.

The way it's supposed to be resolved is that the system DLLs on
Windows 9X are supposed to have these symbols, whose implementations
are stubs that do nothing or fail.  This is clearly stated, for
example, in this comment in w32font.c:

  /* Several "wide" functions we use to support the font backends are
     unavailable on Windows 9X, unless UNICOWS.DLL is installed (their
     versions in the default libraries are non-functional stubs).  On NT
     and later systems, these functions are in GDI32.DLL.  The following
     helper function attempts to load UNICOWS.DLL on Windows 9X, and
     refuses to let Emacs start up if that library is not found.  On NT
     and later versions, it simply loads GDI32.DLL, which should always
     be available.  */
  static HMODULE
  w32_load_unicows_or_gdi32 (void)
  {
    return maybe_load_unicows_dll ();
  }

So I think we are missing something here, because this clearly used to
work in the past, on real Windows 9X systems.

> > My references indicate that UNICOWS.DLL has the first 3 of the above 4
> > APIs.  So I'd suggest to do for these 3 what we do for
> > MultiByteToWideChar, see w32.c:maybe_load_unicows_dll, and then see if
> > the problem is solved.  If that doesn't solve the problem,
> > i.e. doesn't allow Emacs to start, we can discuss what to do about
> > each of these 3 APIs.
> 
> The issue is that these functions don't appear to be defined elsewhere
> than UNICOWS.DLL, even as stubs, with the result that they must be
> loaded at runtime

See above: that's not what our (very old) comments say to me.

> > ReadDirectoryChangesW is indeed absent from UNICOWS.DLL, so I think
> > globals_of_w32notify should attempt to load it, and if not available,
> 
> This is taken care of in the patch, though in a new function, which
> could be consolidated into globals_of_w32notify if it is run during
> startup in dumped Emacs binaries.

Like I said: let's discuss each issue separately, not as a single
large patch which attempts to resolve several issues.

> > disable the file notifications by modifying the code we already have
> > in w32notify-add-watch:
> >
> >   /* The underlying features are available only since XP.  */
> >   if (os_subtype == OS_SUBTYPE_9X
> >       || (w32_major_version == 5 && w32_minor_version < 1))
> >     {
> >       errno = ENOSYS;
> >       report_file_notify_error ("Watching filesystem events is not supported",
> > 				Qnil);
> >     }
> 
> What's to be modified here?

I'd add the condition that ReadDirectoryChangesW couldn't be loaded
from UNICOWS.DLL.  Maybe.

> Finally, how say you to the change to w32_init_file_name_codepage?  It
> is required to run binaries on 9X that are dumped on NT, and in its
> absence, w32_unicode_filenames and is_windows_9x both return FALSE
> during the early stages of initialization.

I don't think I understand the issue.  Which static variables are not
reinitialized at startup and cause the above?  I see that globals_of_w
is unconditionally called during startup, and resets
g_b_init_is_windows_9x to zero; it thereafter calls is_windows_9x and
sets w32_unicode_filenames to zero on Windows 9X.  So I don't think I
understand the problem.  What did I miss?



  reply	other threads:[~2024-06-15 14:55 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <875xub8sn8.fsf.ref@yahoo.com>
2024-06-14 15:12 ` Windows 9X without KernelEx Po Lu via Emacs development discussions.
2024-06-14 15:26   ` Eli Zaretskii
2024-06-14 15:37     ` Po Lu
2024-06-14 16:06       ` Eli Zaretskii
2024-06-15  1:42         ` Po Lu
2024-06-15  2:42         ` Po Lu
2024-06-15  6:58           ` Eli Zaretskii
2024-06-15  7:12             ` Po Lu
2024-06-15  7:37               ` Eli Zaretskii
2024-06-15  7:45                 ` Po Lu
2024-06-15  7:50                   ` Eli Zaretskii
2024-06-15  9:39                     ` Po Lu
2024-06-15 12:38                       ` Eli Zaretskii
2024-06-15 13:10                         ` Po Lu
2024-06-15 13:22                           ` Eli Zaretskii
2024-06-15 13:31                             ` Po Lu
2024-06-15  4:07     ` Stefan Kangas
2024-06-15  4:14       ` Po Lu
2024-06-15  4:45         ` Po Lu
2024-06-15  7:07           ` Eli Zaretskii
2024-06-15  7:22             ` Po Lu
2024-06-15  7:42               ` Eli Zaretskii
2024-06-15  9:35                 ` Po Lu via Emacs development discussions.
2024-06-15 13:52                   ` Eli Zaretskii
2024-06-15 14:18                     ` Po Lu
2024-06-15 14:55                       ` Eli Zaretskii [this message]
2024-06-15 15:15                         ` Po Lu
2024-06-15 16:01                           ` Eli Zaretskii
2024-06-16  2:01                             ` Po Lu
2024-06-16  5:36                               ` Eli Zaretskii
2024-06-16  5:50                                 ` Eli Zaretskii
2024-06-16  6:53                                   ` Po Lu
2024-06-16 11:34                                     ` Po Lu
2024-06-16 12:21                                       ` Eli Zaretskii
2024-06-23  8:35                                       ` Po Lu
2024-06-23  9:16                                         ` Eli Zaretskii
2024-06-23 20:25                                           ` Ken Brown
2024-06-24  2:30                                             ` Eli Zaretskii
2024-06-24  3:53                                               ` Po Lu
2024-06-25 19:20                                               ` Corwin Brust
2024-06-24 17:17                                             ` Ken Brown
2024-06-24 22:11                                               ` Ken Brown
2024-06-25 22:41                                                 ` Ken Brown
2024-06-27  1:59                                                 ` Po Lu
2024-06-27 13:18                                                   ` Ken Brown
2024-06-27 13:42                                                     ` Po Lu
2024-06-27 13:47                                                       ` Po Lu
2024-06-27 14:52                                                         ` Ken Brown
2024-06-30  2:07                                                           ` Po Lu
2024-06-15  7:01       ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=86bk42tfw7.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=luangruo@yahoo.com \
    --cc=stefankangas@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.