1 |
REM > AutoFinger |
2 |
|
3 |
HOST$ = "mail.example.com" :REM name of computer to finger |
4 |
USER$ = "james" :REM user name there |
5 |
POLLTIME% = 60 * 100 :REM interval, centiseconds |
6 |
|
7 |
REM-------------------------------------------------------------------------------- |
8 |
|
9 |
ON ERROR ON ERROR OFF: ERROR 0, "AutoFinger: " + REPORT$ + " (" + STR$ERL + ")": END |
10 |
|
11 |
DIM b% 1000, ind% 255 |
12 |
|
13 |
SYS"Wimp_Initialise", 310, &4b534154, "AutoFinger", 0 TO , task% |
14 |
|
15 |
PROCwindow |
16 |
|
17 |
PROCfinger |
18 |
REPEAT |
19 |
|
20 |
SYS"OS_ReadMonotonicTime" TO time% |
21 |
SYS"Wimp_PollIdle", &1c30, b%, time% + POLLTIME% TO reason% |
22 |
|
23 |
CASE reason% OF |
24 |
WHEN 0, 6: PROCfinger |
25 |
WHEN 2: b%!28 = -2: SYS"Wimp_OpenWindow",, b% |
26 |
WHEN 3: SYS"Wimp_CloseWindow",, b% |
27 |
ENDCASE |
28 |
UNTIL (reason% = 17 OR reason% = 18) AND b%!16 = 0 |
29 |
|
30 |
SYS"Wimp_CloseDown", task%, &4b534154 |
31 |
END |
32 |
|
33 |
REM-------------------------------------------------------------------------------- |
34 |
|
35 |
DEF PROCwindow |
36 |
b%!00 = 0: b%!04 = 134: b%!08 = 2000: b%!12 = 178 |
37 |
b%!16 = 0: b%!20 = 0 |
38 |
b%!24 = -2 |
39 |
b%!28 = &80000812 |
40 |
b%?32 = 7: b%?33 = 2: b%?34 = 7: b%?35 = 1 |
41 |
b%!40 = 0: b%!44 = -44: b%!48 = 2000: b%!52 = 0 |
42 |
b%!56 = &0 |
43 |
b%!60 = &3000 |
44 |
b%!64 = 1 |
45 |
b%!68 = 0 |
46 |
b%!84 = 1 |
47 |
|
48 |
b%!88 = 0: b%!92 = -44: b%!96 = 2000: b%!100 = 0 |
49 |
b%!104 = &1b003111 |
50 |
b%!108 = ind% |
51 |
b%!112 = 0 |
52 |
b%!116 = 200 |
53 |
|
54 |
SYS"Wimp_CreateWindow",, b% TO window% |
55 |
ENDPROC |
56 |
|
57 |
REM-------------------------------------------------------------------------------- |
58 |
|
59 |
DEF PROCclose |
60 |
!b% = window% |
61 |
SYS"Wimp_CloseWindow",, b% |
62 |
ENDPROC |
63 |
|
64 |
REM-------------------------------------------------------------------------------- |
65 |
|
66 |
DEF PROCshow |
67 |
LOCAL width% |
68 |
b%!00 = window% |
69 |
b%!04 = 0 |
70 |
b%!08 = 0 |
71 |
b%!12 = 0 |
72 |
SYS"Wimp_SetIconState",, b% |
73 |
SYS"Wimp_TextOp", 1, ind% TO width% |
74 |
SYS"Wimp_GetWindowState",, b% |
75 |
b%!12 = width% + 20 |
76 |
b%!28 = -2 |
77 |
SYS"Wimp_OpenWindow",, b% |
78 |
ENDPROC |
79 |
|
80 |
REM-------------------------------------------------------------------------------- |
81 |
|
82 |
DEF PROCfinger |
83 |
LOCAL esocket%, state%, read%, closed%, len% |
84 |
|
85 |
SYS"ESocket_ConnectToHost", HOST$, 79 TO esocket% |
86 |
REPEAT |
87 |
SYS"ESocket_CheckState", esocket% TO state% |
88 |
UNTIL state% = 4 OR state% < 0 |
89 |
|
90 |
IF state% < 0 THEN |
91 |
SYS"ESocket_DecodeState", state% TO $ind% |
92 |
PROCshow |
93 |
ELSE |
94 |
SYS"ESocket_SendLine", esocket%, USER$, 0 |
95 |
REPEAT |
96 |
SYS"ESocket_ReadLine", esocket%, ind%, 256, %100 TO , read%, len% |
97 |
SYS"ESocket_Closed", esocket%, 1 TO closed% |
98 |
SYS"Wimp_Poll", &e1ffc, b% |
99 |
UNTIL read% OR closed% |
100 |
IF read% AND len% > 2 THEN |
101 |
PROCshow |
102 |
ELSE |
103 |
PROCclose |
104 |
ENDIF |
105 |
ENDIF |
106 |
|
107 |
SYS"ESocket_Forget", esocket% |
108 |
ENDPROC |
109 |
|