comparison interps/clc-intercal/CLC-INTERCAL-Docs-1.-94.-2/blib/htmldoc/internet.html @ 996:859f9b4339e6

<Gregor> tar xf egobot.tar.xz
author HackBot
date Sun, 09 Dec 2012 19:30:08 +0000
parents
children
comparison
equal deleted inserted replaced
995:6883f5911eb7 996:859f9b4339e6
1 <HTML>
2 <HEAD>
3 <TITLE>CLC-INTERCAL Reference</TITLE>
4 </HEAD>
5 <BODY>
6 <H1>CLC-INTERCAL Reference</H1>
7 <H2>... INTERcal NETworking</H2>
8
9 <P>
10 Table of contents:
11 <UL>
12 <LI><A HREF="index.html">Parent directory</A>
13 <LI><A HREF="#compiling">Compiling a program with INTERNET
14 support</A>
15 <LI><A HREF="#using">Using INTERNET</A>
16 <LI><A HREF="#internals">Internals - or how you can interface
17 to INTERNET enabled INTERCAL programs from other languages</A>
18 </UL>
19 </P>
20
21 <H2><A NAME="compiling">Compiling a program with INTERNET support</A></H2>
22
23 <P>
24 Starting with CLC-INTERCAL 1.-94.-2, INTERNET is provided as a
25 separate package, CLC-INTERCAL-INET. The rest of this chapter
26 assumes that you have installed that package.
27 </P>
28
29 <P>
30 INTERNET is a standard compiler extension, so programs must include the
31 appropriate compile option to use it.
32 </P>
33
34 <P>
35 The command-line compiler tool,
36 <I>sick</I>, automatically enables the INTERNET extension if the program
37 suffix includes the letter &quot;r&quot; (for remote - the letter &quot;i&quot;
38 was already used to indicate that the program is an INTERCAL program).
39 Alternatively, if you are not relying on <I>sick</I>'s guesses and
40 are specifying a list of preloads yourself, just add <I>-pinternet</I>
41 to your command line.
42 </P>
43
44 <P>
45 Using the INTERCAL Calculator, INTERCALC, you can easily add INTERNET
46 support by selecting &quot;internet&quot; from the Options menu or by
47 adding <I>-ointernet</I> to the command line.
48 </P>
49
50 <P>
51 The <I>internet</I> compiler object, which implements this extension,
52 extends the compiler's syntax to include the STEAL, SMUGGLE and CASE
53 statements; it also informs the runtime that the program should be
54 listening for theft requests, and start a theft server if required:
55 this is described below in the <A HREF="#internals">internals</A>
56 section.
57 </P>
58
59 <H2><A NAME="using">Using INTERNET</A></H2>
60
61 <P>
62 Once you've enabled INTERNET support, using it is a simple matter of
63 using STEAL, SMUGGLE or CASE statements as required; in this context,
64 IGNORE and REMEMBER are also useful to allow/disallow access to
65 your registers from other programs using STEAL and SMUGGLE. Details
66 on these statements can be found in <A HREF="statements.html">the
67 chapter about statements</A>.
68 </P>
69
70 <P>
71 Here is a simple example of an INTERNET program acting as a server:
72 <PRE>
73 DO IGNORE @1
74 (1) PLEASE COME FROM (1)
75 </PRE>
76 It may seem rather pointless, but in fact this program will wait
77 for network connections to SMUGGLE its standard write filehandle
78 (normally stored in register @1). The filehandle can not be stolen,
79 because it is ignored. The second statement is automatically caught
80 by the runtime, which recognises an infinite loop when it sees one,
81 and replaced with whatever is internally necessary to wait for a
82 network connection: in other words, the busy wait specified by the
83 COME FROM statement is replaced by an operating system specific
84 wait for network connections, which does not consume any CPU until
85 you try to SMUGGLE the standard write.
86 </P>
87
88 <P>
89 A client could do the following, after initialising the .1 register
90 to contain the server's process ID, and the :1 register to contain
91 the server's IP address:
92 <PRE>
93 DO SMUGGLE @1 ON .1 FROM :1
94 DO WRITE IN .2
95 </PRE>
96 what happens here is that one line of input is obtained from the
97 <I>server</I>'s standard read, and used in the <I>client</I> to
98 assign a value to .2. The server and the client could be in completely
99 different networks.
100 </P>
101
102 <P>
103 Note that this example would still work, once,
104 if the server did not IGNORE @1 and the client used STEAL instead
105 of SMUGGLE, however this would prevent a second client from using
106 the same mechanism, because the server would no longer have the
107 standard read filehandle available after the first client stole it.
108 </P>
109
110 <P>
111 We can develop this example a bit further. The server could use the
112 system call interface to open a temporary file somewhere on the
113 server, and make it available for smuggling to give other INTERCAL
114 programs a chance to access the same file - even if they don't have
115 access to the computer where the server runs. This program should
116 be compiled with both the <I>internet</I> and <I>syscall</I>
117 extensions, perhaps by giving it suffix <I>.rsi</I>:
118 <PRE>
119 PLEASE ,10 &lt;- #18
120 DO ,10 SUB #1 &lt;- #95
121 DO ,10 SUB #2 &lt;- #91
122 DO ,10 SUB #3 &lt;- #93
123 PLEASE ,10 SUB #4 &lt;- #95
124 DO ,10 SUB #5 &lt;- #95
125 DO ,10 SUB #6 &lt;- #80
126 DO ,10 SUB #7 &lt;- #92
127 PLEASE ,10 SUB #8 &lt;- #86
128 DO ,10 SUB #9 &lt;- #91
129 DO ,10 SUB #10 &lt;- #93
130 DO ,10 SUB #11 &lt;- #95
131 PLEASE ,10 SUB #12 &lt;- #95
132 DO ,10 SUB #13 &lt;- #69
133 DO ,10 SUB #14 &lt;- #65
134 DO ,10 SUB #15 &lt;- #74
135 PLEASE ,10 SUB #16 &lt;- #94
136 DO ,10 SUB #17 &lt;- #65
137 DO ,10 SUB #18 &lt;- #74
138 DO :10 &lt;- #117
139 (666) PLEASE .10 &lt;- #3
140 DO IGNORE @10
141 (1) DO COME FROM (1)
142 </PRE>
143 The first part, from the start to the line with label (666),
144 opens a file <CODE>/tmp/server</CODE> for reading and writing;
145 the file name is stored in ,10 and the required access mode
146 in :10, then system call #3 does the rest. The file will be
147 associated with class variable @10. All the server has to do
148 at this point is IGNORE @10 and wait for it to be smuggled.
149 </P>
150
151 <P>
152 A client could SMUGGLE @10 and just do normal file operations
153 on it (using READ OUT, WRITE IN, and system call #4 and #5
154 to perform seeks). Any changes made to the underlying file
155 will be visible to other clients, as well as any user on the
156 server computer who has access to the underlying file.
157 The implementation of the client is left as an exercise to
158 the reader.
159 </P>
160
161 <H2><A NAME="internals">Internals</A></H2>
162
163 <P>
164 This section will document the underlying protocol used to
165 STEAL and SMUGGLE variables, as well as executing CASE statements;
166 it will also show how programs written in other languages can
167 communicate with INTERCAL programs using the INTERNET.
168 </P>
169
170 <P>
171 It's just unfortunate that this section hasn't been written yet.
172 </P>
173 </BODY>
174 </HTML>
175