cfad47cfa3/t3compiler/tads3/test/data/timeout.t

4b825dc642cb6eb9a060e54bf8d69288fbee4904cfad47cfa334b206c65f22086bcc5d63e6f70944
1
/*
2
 *   input-with-timeout test
3
 */
4
5
#include <tads.h>
6
7
main(args)
8
{
9
    local cnt;
10
11
    /* show our introductory text */    
12
    "Welcome to the timeout tester!  Type QUIT to end the program.\b";
13
14
    /* no timeouts so far */
15
    cnt = 0;
16
17
    /* keep going until they enter 'quit' */
18
    for (;;)
19
    {
20
        local evt;
21
        local endTime;
22
23
        /* calculate the maximum time to go without adding any comments */
24
        endTime = getTime(GetTimeTicks) + 10000;
25
26
        /* show our prompt */
27
        "-> ";
28
29
        /* 
30
         *   get input until we reach the user enters the line of text, or
31
         *   we reach the ending time 
32
         */
33
    readLoop:
34
        while (getTime(GetTimeTicks) < endTime)
35
        {
36
            /* get input, with a one-second timeout */
37
            evt = inputLineTimeout(500);
38
39
            /* check what we have */
40
            switch (evt[1])
41
            {
42
            case InEvtEof:
43
                /* error reading input - abort */
44
                "\bError reading input!\b";
45
                return;
46
47
            case InEvtTimeout:
48
                /* count the timeout, but just keep looping */
49
                ++cnt;
50
                break;
51
52
            case InEvtLine:
53
                /* we got a line of input - we're done */
54
                break readLoop;
55
            }
56
        }
57
58
        /* check why we stopped looping */
59
        if (evt[1] == InEvtTimeout)
60
        {
61
            /*
62
             *   We timed out.  Show a comment about it, and then go back
63
             *   for more. 
64
             */
65
            inputLineCancel(nil);
66
            "\bSo far it looks like you typed \"<<evt[2]>>\".
67
            No hurry; just keep typing as long as you'd like.\b";
68
        }
69
        else
70
        {
71
            /* if they typed 'quit', we're done */
72
            if (evt[2].toLower() == 'quit')
73
            {
74
                "Done!\b";
75
                break;
76
            }
77
78
            /*
79
             *   We read the input.  Mention how many times we timed out
80
             *   while they were typing. 
81
             */
82
            "Thanks for the input.  While you were typing, we processed
83
            a total of <<cnt>> timeout interruptions.  Your input
84
            text was \"<<evt[2]>>\".\b";
85
86
            /* reset the counter */
87
            cnt = 0;
88
        }
89
    }
90
}
91