Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Help!

Andris91Andris91 Posts: 2Member
This may seem like a stupid question but I want to allow the user to input something like s:char; s:=readkey; within a time limit.
If the user pressed something withing... lets say 10 seconds then s:=readkey, but if pascal has been waiting for an input for more the 10 seconds then the program should stop asking for that variable. How can this be done?

Comments

  • AtexAtex Posts: 268Member
    : This may seem like a stupid question but I want to allow the user to
    : input something like s:char; s:=readkey; within a time limit.
    : If the user pressed something withing... lets say 10 seconds then
    : s:=readkey, but if pascal has been waiting for an input for more the
    : 10 seconds then the program should stop asking for that variable.
    : How can this be done?
    :

    Here's one solution suitable for rough timing, the resolution being 1/18.2 secs, hooks on Int28:[code][color=Blue]{Compiler TP/BP 7}

    program timed_input;
    uses timer,crt;

    var s:char;
    trig:boolean;

    begin
    setup_timer;
    writeln('Press Esc to quit. Setting timer to 10 sec',#13#10);
    repeat
    _timer_[1]:=182; { set timer to roughly 10 secs }
    trig:=false;
    writeln(#13#10,'Awaiting input...');
    repeat
    if keypressed then begin
    s:=readkey;
    _timer_[1]:=0;
    trig:=true;
    end;
    until (_timer_[1]=0);
    if trig then writeln(' ',s,' was pressed. Setting timer to 10 sec')
    else writeln('Time''s up ! Resetting timer to 10 sec');
    until s=#27;
    shutdown_timer;
    end.[/color][/code][code][color=Blue]{Countdown timer functions}
    unit timer;

    interface
    uses dos;
    var _timer_:array[1..9] of longint; {1..8 user, 9 counts how many times the }
    {interrupt was called }
    old_28int:procedure;

    procedure setup_timer;
    procedure shutdown_timer;
    procedure __timer__;interrupt;



    implementation
    {$f+}
    procedure __timer__; {This interrupt is called 18.2 times/second}
    var i:byte; {Not so precise, but simple :) }
    begin
    for i:=1 to 8 do
    if _timer_[i]>0 then dec(_timer_[i]);
    inc(_timer_[9]);
    inline($9c); {pushf <-- push flags}
    old_28int;
    end;
    {$f-}

    procedure setup_timer;
    begin
    _timer_[9]:=0;
    getintvec($1c,@old_28int);
    setintvec($1c,addr(__timer__));
    end;

    procedure shutdown_timer;
    begin
    setintvec($1c,addr(old_28int));
    end;

    begin
    _timer_[1]:=0; { 18.2 <-> 1 Sec}
    _timer_[2]:=0;
    _timer_[3]:=0;
    _timer_[4]:=0;
    _timer_[5]:=1092; { 1 min } { Preset values }
    _timer_[6]:=3276; { 3 min }
    _timer_[7]:=5460; { 5 min }
    _timer_[8]:=10920; { 10 min }
    _timer_[9]:=0;
    end.
    [/color][/code]

  • Andris91Andris91 Posts: 2Member
    Thx for the help... but it seems like my pascal does not have a unit called timer...
  • AtexAtex Posts: 268Member
    : Thx for the help... but it seems like my pascal does not have a unit
    : called timer...
    :

    That's why I posted the unit also (is right below the program) ;-)
Sign In or Register to comment.