• Opendoors, C++ od_control Question

    From Basis@VERT/CONVOLUT to All on Mon Jun 9 21:10:10 2025
    Hello,
    Tinkering with opendoors and C++. I have a fully working hello world build environment that works from a client app (like syncterm) calling a door inside Windows Synchronet w/ socket i/o method and door32.sys drop file.

    I'm trying to display ANSI from a file without the prompt: Continue? [Y/n/=]

    I've been reading the manual around the settings for od_control.user_attribute.
    Namely:
    user_ unsigned char od_control.user_attribute;
    attribute
    This variable is a bitmap of eight flags, each of which
    represent individual pieces of information pertaining to the
    user that is currently online. These flags are as follows:

    +-----+------+-----------------------+
    | BIT | MASK | DESCRIPTION |
    +-----+------+-----------------------+
    | 0 | 0x01 | Is the user deleted |
    | 1 | 0x02 | Is screen clearing on |
    | 2 | 0x04 | Is "more" prompt on |
    | 3 | 0x08 | Is ANSI mode on |
    | 4 | 0x10 | User no-kill setting |
    | 5 | 0x20 | Transfer-priority |
    | 6 | 0x40 | Full screen editor |
    | 7 | 0x80 | Quiet mode |
    +-----+------+-----------------------+

    From the glossary, it says:
    Clear Flag: variable &=~ FLAG_CONSTANT;

    I've tried the following w/o success.

    #define MORE_PROMPTS 0x04
    od_init();
    od_control.user_attribute &= ~MORE_PROMPTS;

    I also tried putting od_init(); after the od_control setting, but it didn't work.

    Am I on the right path here, or am I missing something. It's been many years since I've worked with C++ - and never with opendoors.

    Thanks!
    Convolution BBS - Convolution.us

    ...You mark that frame an 8, and you're entering a world of pain.

    ---
    þ Synchronet þ Convolution BBS - convolution.us
  • From nelgin@VERT/EOTLBBS to All on Tue Jun 10 13:19:15 2025
    On Mon, 9 Jun 2025 21:10:10 -0400
    "Basis" (VERT/CONVOLUT) <VERT/CONVOLUT!Basis@endofthelinebbs.com> wrote:
    Hello,
    Tinkering with opendoors and C++. I have a fully working hello world
    build environment that works from a client app (like syncterm)
    calling a door inside Windows Synchronet w/ socket i/o method and
    door32.sys drop file.

    I'm trying to display ANSI from a file without the prompt: Continue?
    [Y/n/=]

    I've been reading the manual around the settings for od_control.user_attribute. Namely:
    user_ unsigned char od_control.user_attribute;
    attribute
    This variable is a bitmap of eight flags, each of which
    represent individual pieces of information pertaining
    to the user that is currently online. These flags are as follows:

    +-----+------+-----------------------+
    | BIT | MASK | DESCRIPTION |
    +-----+------+-----------------------+
    | 0 | 0x01 | Is the user deleted |
    | 1 | 0x02 | Is screen clearing on |
    | 2 | 0x04 | Is "more" prompt on |
    | 3 | 0x08 | Is ANSI mode on |
    | 4 | 0x10 | User no-kill setting |
    | 5 | 0x20 | Transfer-priority |
    | 6 | 0x40 | Full screen editor |
    | 7 | 0x80 | Quiet mode |
    +-----+------+-----------------------+

    From the glossary, it says:
    Clear Flag: variable &=~ FLAG_CONSTANT;

    I've tried the following w/o success.

    #define MORE_PROMPTS 0x04
    od_init();
    od_control.user_attribute &= ~MORE_PROMPTS;

    I also tried putting od_init(); after the od_control setting, but it
    didn't work.

    Am I on the right path here, or am I missing something. It's been
    many years since I've worked with C++ - and never with opendoors.

    Thanks!
    Convolution BBS - Convolution.us

    ...You mark that frame an 8, and you're entering a world of pain.

    ---
    þ Synchronet þ Convolution BBS - convolution.us
    I'm not too familiar with opendoors but it looks like you're trying to
    modify the user's default settings when it looks like you want to
    temporarily disable the pause.
    Have you tried setting char od_control.od_list_pause to false? The
    default is true which lets the user pause the output.
    This may go along with char od_control.od_list_stop which will disable
    the ability of the user aborting the text file display.
    --
    End Of The Line BBS - Plano, TX
    telnet endofthelinebbs.com 23
    ---
    þ Synchronet þ End Of The Line BBS - endofthelinebbs.com
  • From Basis@VERT/CONVOLUT to nelgin on Tue Jun 10 20:11:31 2025
    Re: Re: Opendoors, C++ od_control Question
    By: nelgin to All on Tue Jun 10 2025 01:19 pm

    Have you tried setting char od_control.od_list_pause to false? The default is true which lets the user pause the output. This may go along with char

    I tried changing that to a 1 and a 0, and I still get the prompt.

    Codefenix gave a suggestion to set the screen lenghth prior to the file display. If you set this to a large enough value, it'll go through animated ansis as well as longer scrolling ones.

    Anyways, in case it helps someone in the future:
    int screen_len_before_change = od_control.user_screen_length; od_control.user_screen_length = 200;

    then set back:
    od_control.user_screen_length = screen_len_before_change;

    I'm not sure if this is the intended use for some of this, but it solves the problem.

    Thanks for your help.
    Convolution BBS - Convolution.us

    ...Obviously you're not a golfer.

    ---
    þ Synchronet þ Convolution BBS - convolution.us
  • From Digital Man@VERT to Basis on Tue Jun 10 21:58:32 2025
    Re: Re: Opendoors, C++ od_control Question
    By: Basis to nelgin on Tue Jun 10 2025 08:11 pm

    Re: Re: Opendoors, C++ od_control Question
    By: nelgin to All on Tue Jun 10 2025 01:19 pm

    Have you tried setting char od_control.od_list_pause to false? The default is true which lets the user pause the output. This may go along with char

    I tried changing that to a 1 and a 0, and I still get the prompt.

    Codefenix gave a suggestion to set the screen lenghth prior to the file display. If you set this to a large enough value, it'll go through animated ansis as well as longer scrolling ones.

    Anyways, in case it helps someone in the future:
    int screen_len_before_change = od_control.user_screen_length; od_control.user_screen_length = 200;

    then set back:
    od_control.user_screen_length = screen_len_before_change;

    I'm not sure if this is the intended use for some of this, but it solves the problem.

    What I'd do is look at the odoors source code and find where it decides whether or not to send the More prompt and determine how you're supposed to defeat it.
    --
    digital man (rob)

    Breaking Bad quote #21:
    You? No. The only shooting you do is into a Kleenex. - Hank Schrader
    Norco, CA WX: 63.8øF, 84.0% humidity, 7 mph W wind, 0.00 inches rain/24hrs
    ---
    þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net