Jürgen,
The configure code to determine HAVE_IOCTL_TIOCGWINSZ in config.h doesn't work
on macOS:
conftest.cpp:130:11: fatal error: 'asm/termbits.h' file not found
130 | #include <asm/termbits.h> /* for TIOCGWINSZ */
| ^~~~~~~~~~~~~~~~
1 error generated.
configure:22435: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "GNU APL"
| #define PACKAGE_TARNAME "apl"
| #define PACKAGE_VERSION "1.9"
| #define PACKAGE_STRING "GNU APL 1.9"
| #define PACKAGE_BUGREPORT "[email protected]"
| #define PACKAGE_URL "https://www.gnu.org/software/apl/"
| #define HAVE_STDIO_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_WCHAR_H 1
| #define STDC_HEADERS 1
| #define _ALL_SOURCE 1
| #define _DARWIN_C_SOURCE 1
| #define _GNU_SOURCE 1
| #define _HPUX_ALT_XOPEN_SOCKET_API 1
| #define _NETBSD_SOURCE 1
| #define _OPENBSD_SOURCE 1
| #define _POSIX_PTHREAD_SEMANTICS 1
| #define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
| #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
| #define __STDC_WANT_IEC_60559_DFP_EXT__ 1
| #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
| #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
| #define __STDC_WANT_LIB_EXT2__ 1
| #define __STDC_WANT_MATH_SPEC_FUNCS__ 1
| #define _TANDEM_SOURCE 1
| #define __EXTENSIONS__ 1
| #define PACKAGE "apl"
| #define VERSION "1.9"
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_NCURSES_H 1
| #define HAVE_TERM_H 1
| #define HAVE_DIRENT_H 1
| #define HAVE_EXECINFO_H 1
| #define HAVE_FCNTL_H 1
| #define HAVE_FENV_H 1
| #define HAVE_FFTW3_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_LIBPNG16_PNG_H 1
| #define HAVE_LIMITS_H 1
| #define HAVE_LOCALE_H 1
| #define HAVE_NETDB_H 1
| #define HAVE_NETINET_IN_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_SYS_UN_H 1
| #define HAVE_TERMIOS_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_UTMPX_H 1
| #define HAVE_VECTOR 1
| #define HAVE_ZLIB_H 1
| #define HAVE_STDBOOL_H 1
| #define cfg_CONFIGURE_ARGS "./configure '--without-gtk3' 'CXXFLAGS=-O3
-I/opt/local/include -std=gnu++17' 'LDFLAGS=-L/opt/local/lib'"
| #define HAVE_SYS_TIME_H 1
| #define HAVE_SYS_PARAM_H 1
| #define HAVE_FORK 1
| #define HAVE_VFORK 1
| #define HAVE_ALARM 1
| #define HAVE_GETPAGESIZE 1
| #define HAVE_WORKING_VFORK 1
| #define HAVE_WORKING_FORK 1
| #define HAVE_MALLOC 1
| #define HAVE_MMAP 1
| #define HAVE_DUP2 1
| #define HAVE_FLOOR 1
| #define HAVE_GETCWD 1
| #define HAVE_GETHOSTBYNAME 1
| #define HAVE_GETTIMEOFDAY 1
| #define HAVE_MEMSET 1
| #define HAVE_MKDIR 1
| #define HAVE_MODF 1
| #define HAVE_MUNMAP 1
| #define HAVE_POW 1
| #define HAVE_REALPATH 1
| #define HAVE_RINT 1
| #define HAVE_RMDIR 1
| #define HAVE_SELECT 1
| #define HAVE_SETENV 1
| #define HAVE_SETLOCALE 1
| #define HAVE_SOCKET 1
| #define HAVE_SQRT 1
| #define HAVE_STRCASECMP 1
| #define HAVE_STRCHR 1
| #define HAVE_STRDUP 1
| #define HAVE_STRNCASECMP 1
| #define HAVE_STRNDUP 1
| #define HAVE_STRERROR 1
| #define HAVE_STRRCHR 1
| #define HAVE_STRSTR 1
| #define HAVE_STRTOL 1
| #define HAVE_UNAME 1
| #define HAVE_LIBPTHREAD 1
| #define HAVE_LIBCURSES 1
| #define HAVE_LIBNCURSES 1
| #define HAVE_LIBM 1
| #define HAVE_LIBDL 1
| #define HAVE_STRUCT_STAT_ST_BLOCKS 1
| #define HAVE_ST_BLOCKS 1
| #define HAVE_XCB_XCB_H 1
| #define HAVE_X11_XLIB_H 1
| #define HAVE_X11_XLIB_XCB_H 1
| #define HAVE_X11_XUTIL_H 1
| #define HAVE_LIBX11 1
| #define HAVE_LIBXCB 1
| #define HAVE_LIBX11_XCB 1
| #define apl_X11 1
| #define HAVE_LIBFFTW3 1
| #define HAVE_LIBPNG 1
| #define HAVE_LIBZ 1
| #define HAVE_SQLITE3 1
| #define apl_SQLITE3 1
| #define apl_POSTGRES 0
| #define HAVE_LIBPCRE2_32 1
| #define HAVE_LIBM 1
| #define HAVE_LIBGSLCBLAS 1
| #define HAVE_LIBGSL 1
| #define apl_GTK3 0
| #define HAVE_GETTIMEOFDAY 1
| /* end confdefs.h. */
| #include <asm/termbits.h> /* for TIOCGWINSZ */
| #include <sys/ioctl.h>
|
| int
| main (void)
| {
| winsize win;
| ioctl(/*fd */ 0, TIOCGWINSZ, &win);
|
| ;
| return 0;
| }
<asm/termbits.h> doesn't exist on macOS, hence the #include failure.
Simply including <sys/ioctl.h> is all that's needed to get the definition of
the TIOCGWINSZ ioctl on macOS. I suspect that's the same on Linux as well. I'll
test and report back.
- paul
> On Dec 28, 2024, at 12:32 PM, Dr. Jürgen Sauermann <mail@jürgen-sauermann.de>
> wrote:
>
> Hi Elias et al.,
>
> thanks for the hint. I have now (SVN 1807) changed the code so that the
> initial ⎕PW
> is set from the size of the GNU APL window if:
>
> 1. the platform supports TIOCGWINSZ, and
> 2. the user has set WINCH-SETS-⎕PW to Yes in one of her preferences files,
> and
> 3. the user has NOT set INITIAL-⎕PW in one of her preferences files, and
> 4. the number of columns returned by TIOCGWINSZ is reasonable.
>
> Blake, no need to worry since WINCH-SETS-⎕PW is disabled by default (and
> INITIAL-⎕PW
> is 80 by default).
>
> Best Regards and happy new year,
> Jürgen
>
>
>
> On 12/25/24 16:15, Elias Mårtenson wrote:
>> You can actually request the terminal size. Unfortunately, the syntax to do
>> that is not standardised, but on Linux you can use TIOCGWINSZ. See the
>> documentation here:
>> https://man.archlinux.org/man/core/man-pages/TIOCGWINSZ.2const.en
>>
>> Here's what the stty command does to read this infomration:
>>
>> static int get_win_size (int fd, struct winsize *win)
>> {
>> int err = ioctl (fd, TIOCGWINSZ, (char *) win);
>> return err;
>> }
>>
>> Regards,
>> Elias
>>
>> On Wed, 25 Dec 2024 at 20:46, Dr. Jürgen Sauermann <mail@jürgen-sauermann.de
>> <mailto:mail@j%C3%BCrgen-sauermann.de>> wrote:
>>> Hi Mike,
>>>
>>> I have applied your patches - SVN 1806.
>>>
>>> A general problem with the SIGWINCH signal is that it is not emitted when
>>> the apl interpreter
>>> starts up (which make sense because the windows is not resized at that
>>> point in time).
>>>
>>> One could think of asking the window manager for the current window size
>>> but even though that
>>> would be possible it is not portable in any way.
>>>
>>> The INITIAL-⎕PW is a simple work-around to fix this.
>>>
>>> Best Regards,
>>> Jürgen
>>>
>>>
>>> On 12/23/24 22:47, M.Hall wrote not e:
>>>> Yes, I see now the behavior is not quite right, is it? With INITIAL-⎕PW
>>>> disabled, the ⎕PW still starts up at 80, ignoring the window width even
>>>> with WINCH-SETS-⎕PW. Somehow we would have to detect if it was set, and
>>>> use it only then, instead of always setting it.
>>>>
>>>> What I found unexpected was setting the initial width in the preferences
>>>> file, and not getting it -- having it overriden by the current window
>>>> width.
>>>>
>>>> I thought that if the user set the initial ⎕PW in the preferences file,
>>>> AND enabled WINCH-SET-PW, they still ought to get their initial ⎕PW. If
>>>> they resized the window later, then the ⎕PW would follow the window width.
>>>>
>>>> It's like using the command line setting "--PW 80" -- it overrides
>>>> everything else, which makes sense. Highest priority is the command line,
>>>> then the initial ⎕PW in the preferences file (if set), then the window
>>>> width (if enabled), finally DEFAULT_Quad_PW.
>>>>
>>>> I was just summarizing what I thought was the priority of the three
>>>> settings, and trying to make sense of how they work.
>>>>
>>>> Want 80? Unset both preference settings. Forget they exist. :-)
>>>>
>>>> On Mon, Dec 23, 2024 at 10:46 AM Paul Rockwell <[email protected]
>>>> <mailto:[email protected]>> wrote:
>>>>> Jürgen,
>>>>>
>>>>> It's macOS that's the problem as Mike states. I've confirmed with a
>>>>> small C program that the ioctl TIOCGWINSZ has a different value on macOS
>>>>> than on Linux.
>>>>> WINCH-SETS-⎕PW works without the patch on Linux. With Mike's first patch,
>>>>> it works the same way on both platforms.
>>>>>
>>>>> I'm a little ambivalent about out the second patch to provide a
>>>>> "priority". I like the way WINCH-SETS-⎕PW works as it's currently
>>>>> implemented. I tried using Mike's second patch but
>>>>> it didn't seem to work as I would have thought. So I backed it out. I
>>>>> would think there would be some additonal work to make it work as Mike
>>>>> wants. Personally having WINCH-SETS-⎕PW
>>>>> (which sets ⎕PW to the window size) is the ultimate override - you get
>>>>> what you're console column width is set for. Want 80? Set the console to
>>>>> 80.
>>>>>
>>>>> - paul
>>>>>
>>>>>
>>>>>> On Dec 23, 2024, at 10:26 AM, M.Hall <[email protected]
>>>>>> <mailto:[email protected]>> wrote:
>>>>>>
>>>>>> WINCH-SETS-⎕PW did not originally work, on macOS Sonoma 14.7.2.
>>>>>> Because macOS does not use the same TIOCGWINSZ magic number that was
>>>>>> hard-coded.
>>>>>> With the first patch, WINCH-SETS-⎕PW does now work on macOS.
>>>>>>
>>>>>> From my original email:
>>>>>> > I noticed that quad-pw wasn't changing with window resizes on macOS
>>>>>> > (Sonoma 14.7.2).
>>>>>> > Here's a patch; there's probably a better way to do it.
>>>>>>
>>>>>> On Mon, Dec 23, 2024 at 6:12 AM Dr. Jürgen Sauermann
>>>>>> <mail@jürgen-sauermann.de <mailto:mail@j%C3%BCrgen-sauermann.de>> wrote:
>>>>>>> Hi,
>>>>>>>
>>>>>>> I am still not clear about whether the WINCH-SETS-⎕PW preference
>>>>>>> works or does not work on Mike's platform (which ?). Could someone
>>>>>>> please test that?
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Jürgen
>>>>>>>
>>>>>>>
>>>>>>> On 12/22/24 20:03, M.Hall wrote:
>>>>>>>> Paul Rockwell writes:
>>>>>>>>
>>>>>>>> > There may be a side effect, though. With the option set and Mike's
>>>>>>>> > code inserted, ⎕PW will be set to whatever the current terminal
>>>>>>>> > width is, not the IBM APL2 default of 80.
>>>>>>>>
>>>>>>>> Yes. There are three settings that interact:
>>>>>>>> - command line "--PW xx"
>>>>>>>> - preferences "INITIAL-⎕PW xx"
>>>>>>>> - preferences "WINCH-SETS-⎕PW"
>>>>>>>>
>>>>>>>> The command line setting overrides all others. This makes sense to me.
>>>>>>>>
>>>>>>>> INITIAL-⎕PW is active when WINCH-SETS-⎕PW is off. Also, good.
>>>>>>>>
>>>>>>>> When WINCH-SETS-⎕PW is enabled, the code bypasses the INITIAL-⎕PW
>>>>>>>> setup. Hmmm.
>>>>>>>>
>>>>>>>> I think the user's INITIAL-⎕PW should be used at startup, even when
>>>>>>>> WINCH-SETS-⎕PW is enabled.
>>>>>>>>
>>>>>>>> So the startup priority would be (high to low):
>>>>>>>> - command line
>>>>>>>> - INITIAL-⎕PW
>>>>>>>> - then WINCH
>>>>>>>> - then default 80 columns
>>>>>>>>
>>>>>>>> Here's a patch for that, if you want (applied against the previous
>>>>>>>> patch):
>>>>>>>>
>>>>>>>> $ diff -u src/main-orig.cc src/main.cc
>>>>>>>> --- src/main-orig.cc 2024-12-19 13:20:04.000000000 -0600
>>>>>>>> +++ src/main.cc 2024-12-22 10:11:42.000000000 -0600
>>>>>>>> @@ -449,10 +452,8 @@
>>>>>>>> sigaction(SIGWINCH, &new_WINCH_action, &old_WINCH_action);
>>>>>>>> signal_WINCH_handler(0); // pretend window size change
>>>>>>>> }
>>>>>>>> - else
>>>>>>>> - {
>>>>>>>> - Workspace::set_PW(UserPreferences::uprefs.initial_pw, LOC);
>>>>>>>> - }
>>>>>>>> + // honor the user's initial PW preference, even if WINCH is enabled
>>>>>>>> + Workspace::set_PW(UserPreferences::uprefs.initial_pw, LOC);
>>>>>>>>
>>>>>>>> #if PARALLEL_ENABLED
>>>>>>>> memset(&new_control_BSL_action, 0, sizeof(struct sigaction));
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Mike Hall
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Mike Hall
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Mike Hall
>>>>
>>>>
>>>
>