Sujet : Re: Python (was Re: I did not inhale)
De : 643-408-1753 (at) *nospam* kylheku.com (Kaz Kylheku)
Groupes : comp.unix.shell comp.unix.programmer comp.lang.miscDate : 22. Aug 2024, 18:36:04
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <20240822102243.459@kylheku.com>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
User-Agent : slrn/pre1.0.4-9 (Linux)
On 2024-08-22, Bart <
bc@freeuk.com> wrote:
On 22/08/2024 16:28, Kaz Kylheku wrote:
On 2024-08-22, Dmitry A. Kazakov <mailbox@dmitry-kazakov.de> wrote:
On 2024-08-22 13:00, David Brown wrote:
>
Then there are those that - wisely or unwisely - program in C for
Windows, without POSIX.
>
Yes, that is true. There is no reason to use POSIX under Windows,
whatsoever.
David also wrote this, in the same comment:
It takes but one single counter-example to invalidate general claims
like this.
It applies to your reply as well.
There are excellent, excellent reasons to use POSIX under Windows.
Such as, oh, having an entire POSIX appliation ported to Windows
almost without lifting a finger.
For the TXR project I use a POSIX layer called Cygnal (see signature
below). It gives a decent Windows port which preserves most of the
functionality. All the POSIX stuff in the TXR Lisp standard library just
works. The interactive listener ("REPL") with history and editing just
works, right in your cmd.exe console.
>
You can use the same argument to justify using X11 under Windows.
I could use a similar argument, but it would lack nuance.
Using X11 under Windows requires a server component, which is
somewhat clunky for a stand-alone application to carry.
X11 windows will not integrate nicely into the Windows desktop as
native windows with native widgets and behaviors.
Most POSIX stuff does translate nicely to the Windows environment, largely
because Windows was aped after Unix.
(It's also not clear how well your product manages to use POSIX under
pure Windows, or whether you have to drag this other thing called 'CygWin'.
It relies on a DLL, which is a modified/forked version of the Cygwin
DLL, named cygwin1.dll. This just sits in the same directory as the main
executable.
If you wrote a program with Microsoft Visual C, and dynamically linked
it to its run-time, you'd have the same thing: your executable and a
redistributable run-time.
The cygwin1.dll provides C stuff: malloc, printf, sin, cos, ...
Plus POSIX stuff: glob, ftw, fork, dup2, stat, tcgetattr, ...
Can you write a normal Windows app and just call into a DLL called
posix.dll or is there an extra layer or two involved?)
You can use Win32 calls (into kernel32.dll, user32.dll, ...) along side
all that stuff from cygwin1.dll, just like you can use Win32 calls in a
program linked to MSVC redistributable run-time.
Here is an example TXR Lisp program that I use for turning a laptop
monitor off. It's saved as "monitor-off.tl", where the .tl suffix
has the correct association that I can launch it by double clicking on
it.
The (usleep ...) call is implemented using POSIX functions.
(typedef HWND (cptr HWND))
(typedef UINT uint)
(typedef LPARAM long)
(typedef WPARAM ulong)
(defsymacro SC_MONITORPOWER #xF170)
(defsymacro WM_SYSCOMMAND #x0112)
(defsymacro MONITOR_OFF 2)
(defvarl HWND_BROADCAST (cptr-int -1 'HWND))
(with-dyn-lib "user32.dll"
(deffi PostMessage "PostMessageW"
int (HWND UINT WPARAM LPARAM)))
(usleep 2000000)
(PostMessage HWND_BROADCAST WM_SYSCOMMAND SC_MONITORPOWER MONITOR_OFF)
-- TXR Programming Language: http://nongnu.org/txrCygnal: Cygwin Native Application Library: http://kylheku.com/cygnalMastodon: @Kazinator@mstdn.ca