OSDN Git Service

Add new command line switch --no-construct-floats
[pf3gnuchains/pf3gnuchains4x.git] / expect / NEWS
1 This file is the NEWS file from the Expect distribution.
2
3 ======================================================================
4 ======================================================================
5
6 Date: 8/18/96
7
8 Expect now works with Tcl 8.0.
9
10 No changes were made to take advantage of 8.0 features such as
11 namespaces.  (If you want to put the Expect commands in a namespace,
12 declare a namespace before loading them in.)
13
14 Even thought Tcl allows embedded nulls in commands, Expect still does
15 not.  Tcl still doesn't support embedded in patterns and regexps.
16 I'll wait til Tcl supports that before rewriting Expect's null
17 support.
18
19
20 ======================================================================
21 ======================================================================
22
23 Date: 9/28/96
24
25 There is now an Expect FAQ and home page.  Feedback is encouraged.
26 You can get to the FAQ from the home page and vice versa, so you only
27 need to remember one of the links, but here are both for completeness:
28
29 home page: http://expect.nist.gov
30 FAQ:       http://expect.nist.gov/FAQ.html
31
32
33
34 ======================================================================
35 ======================================================================
36 This section describes the changes to Expect 5, many due to changes
37 from Tcl 7.4 to 7.5.
38
39 Improvements
40 ==============================
41
42 You can now use expect_background from Tcl along with all the
43 Tcl-based event stuff such as "after".  You can also do fun things
44 such as have "after" actions run while expect is waiting for input.
45 It's worth comparing the difference between commands such as expect
46 (which waits in the event loop) and gets (which doesn't).
47
48 Incompatibilities
49 ==============================
50
51 libexpectk is gone.  Because of the event loop was moved into Tcl,
52 this is no longer necessary.  Just use the regular Expect library.
53 This only affects you if are hand-linking.
54
55 The name of the static C library now has the extension on the end -
56 just like Tcl.  This only affects you if are hand-linking.
57
58
59 ==============================
60 Some obvious questions and answers
61
62 Nothing in the user interface has changed.  All your old scripts
63 should run.  Tcl now has commands that replace Expect functionality in
64 the area of version control and date handling.  I encourage you to use
65 Tcl's support rather than Expect's for any new scripts that you write.
66 However, I won't be removing Expect's commands, so don't worry about
67 having to convert old scripts.
68
69 It is my understand that shared/dl libs work.  (I say "it is my
70 understanding", because my own environment doesn't handle it, sigh.
71 My system admins tell me that they're working on it.)  So I've had to
72 guess on some things - in fact, I've talked to a number of people and
73 I get the feeling that a lot of people are guessing on shared/dl libs.
74 I have yet to talk to anyone that REALLY understands this stuff (by
75 "understand", I mean "can write the configure/Makefile portably and
76 correctly".  So much for my griping.  In theory, the shared/dl support
77 is pretty much a freebie because Tcl itself provides all the support
78 for this.  (There is some reorganization that could be done to improve
79 shared library memory use - I'll get to it eventually - it shouldn't
80 affect most people.)  Don't send me complaints about shared/dl libs
81 unless you are *positive* it is something that I am responsible for.
82 Even if Tcl works and Expect fails, it is likely to be a Tcl error (or
83 more precisely, a configuration problem that is more appropriately
84 fixed from the Tcl distribution).
85
86 For Tcl-package purposes, Expect is called "Expect".  (Duh...)
87
88 Expect's multiple interpreter support is minimal.  It should work for
89 most things, serendipitously.  I haven't spent any time making this
90 perfect.
91
92 No, this release isn't portable to Windows or Mac.  Let me know if
93 you're seriously interested in a lot of work.  I'm not saying it's not
94 possible.  It's definitely possible and the porting working at Sun has
95 made it easier than before.  But it's still not a weekend hack.
96
97 Industrial support for the NT port, would be very helpful.  If you are
98 interested, either as a student or an industrial sponsor, let me know.
99
100 ==============================
101 Building the code
102 ==============================
103
104 Expect builds as usual.  (See the INSTALL file for details.)
105
106 The only significant change is that Expect now has to find the
107 tclConfig.sh file (and tkConfig.sh if you want).  So if you like to
108 store Tcl where Expect can't find it, you'll need to use even more
109 configure flags than you used to.
110
111 Shared/dl Expect libraries are built if you configured Tcl for
112 shared/dl libraries.
113
114 All support for earlier versions of Tcl and Tk have been removed from
115 Expect.  For example, if you're still using Tcl 7.4 (or earlier),
116 don't bother to install this release.
117
118 ======================================================================
119 ======================================================================
120 This section describes the changes from Expect 4 to Expect 5.
121
122 The changes that people will find most interesting or annoying are as
123 follows.  Some of them may seem rather arbitrary but fix inconsistencies
124 leading to much cleaner coding both internally and externally.
125
126
127 -- Expect version 5.20 and above is designed to work with Tcl 7.5 and
128 Tk 4.1.  Expect 5.20 and above will not work with earlier versions.
129
130 -- Glob-style patterns do longest-possible matches (from the earliest
131 possible position) just like regexps.  Previously, they matched the
132 shortest-possible strings.  However, the documentation didn't actually
133 say this (it didn't say anything)
134
135 -- Exact patterns are now supported from expect.  Use the "-ex" flag.
136 Exact patterns work just like those in interact.  No special handling
137 is made of *, ^, etc.
138
139 -- The new command "expect_background" registers patterns that are to
140 be tested against spawned process output whenever it appears (i.e.,
141 asynchronously).  This only works in the Tk environment.  The
142 arguments are the same as the expect command.
143
144 -- expect_before and expect_after now handle their arguments like
145 expect_background.  Previously, a command such as "expect_before"
146 with no arguments deleted patterns for all spawn ids.  Now, it only
147 deletes patterns for the current spawn id.  Similarly with the "-i"
148 form.
149
150 -- expect_background/before/after support an -info flag to query what
151 the current patterns are.  The results are returned in such a way that
152 they can be re-used by a new expect command.
153
154 The -info flag must be the first flag in the command.  With no other
155 arguments, it returns the setting for the current spawn id.  With a -i
156 descriptor, information is returned for that spawn id.  The argument
157 -noindirect may be used to suppress indirects which also match a
158 direct spawn id.  Only a single -i specification may be given with
159 -info.  With the argument "-all", all spawn id specifications are
160 reported.
161
162 -- There is now a sleep command.  It understands decimal values such as
163
164         sleep .5
165
166 Interrupts and other asynchronous events are processed while Expect sleeps.
167
168 -- Traps now use Tcl's "Async" support.  This has advantages and
169 disadvantages.  One advantage is that traps have no chance of screwing
170 up the Tcl internals.  One disadvantage is that trap handlers are
171 delayed at certain specific times and places.  For example, a handler
172 cannot occur inside another handler.  While one handler is running,
173 all other handlers are blocked.  This is probably the most noticable
174 place where handlers are blocked.  Others are generally small windows,
175 so you shouldn't notice the delay in executing the handlers.
176
177 Several traps are initially defined:
178
179         trap exit {SIGINT SIGTERM}
180
181 If you use the -D flag to start the debugger, the following trap is
182 defined:
183
184         trap {exp_debug 1} SIGINT
185
186 You can, of course, override these.  In particular, if you have your
187 own "trap exit SIGINT", this will override the debugger trap.  Because
188 SIGINT is tied to exit (see above) by default anyway, you should
189 remove your own "trap exit SIGINT" unless you specifically do not want
190 to be able to get to the debugger by ^C.
191
192 If you want to define your own trap on SIGINT but still trap to the
193 debugger when it is running, use:
194
195         if ![exp_debug] {trap mystuff SIGINT}
196
197 Alternatively, you can trap to the debugger using some other signal.
198
199 The ONEXIT trap is no longer available.  Instead, say "exit -onexit ..."
200
201 Traps are now deleted by using the empty ({}) handler.  The current
202 handler is returned if no action is supplied.  With no arguments, trap
203 returns the signal number of the trap command currently being executed.
204
205 -- The wait command now returns a four element list if a valid child
206 was waited on.
207 Element 1: pid
208 Element 2: spawn id
209 Element 3: 0 (or -1 if there was an OS error)
210 Element 4: status (or errno if element 3 == -1)
211
212 -- expect and interact notes:
213
214 The timeout and eof patterns were initially named "-timeout" and
215 "-eof" but have been renamed "timeout" and "eof" to match those of
216 expect.  The ability to define default timeout/eof actions has been
217 removed.  (You can do this more easily by grouping spawn ids.)
218
219 expect and interact now support a "null" keyword to match an ASCII 0.
220 send supports -null and -break keywords.
221
222 Since a large number of special keywords have been added to interact,
223 a new keyword "-ex" for "exact" was added descriptive of its default
224 treatment of patterns.  This protects the next token from being
225 misinterpreted as a keyword.  The expect command provides "-gl" for
226 "glob" for analogous reasons.
227
228 Any string starting with "-" should be protected by the "-ex" or "-gl"
229 flag, even those that are not keywords currently.  (All strings
230 starting with "-" are reserved for future options.)
231
232 String start/end indices are no longer written to expect_out and
233 interact_out unless the -indices flag is given.
234
235 expect_out(spawn_id) is set to the spawn id associated with the spawn
236 id that produced the last output in an expect command.  For example,
237 you can use this to delete files that have closed, by removing this
238 element from an indirect spawn ids spec.  The same effect is
239 reproducable with interact (and interact_out(spawn_id)) but for
240 efficiency reasons, it requires the -iwrite flag before each pattern.
241
242 Expect's -i and interact's -i, -u, -input, and -output flags can now
243 describe a list of spawn ids.  So you can say things like:
244
245         interact -input "$id1 $id2 $id3" .... -output "$id1 $id2" ...
246
247 In this case, id1, 2, 3 would be sent to id1, and 2.
248
249 The spawn id may be given as a global variable name (called an
250 "indirect spawn id specification"), in which case, the variable
251 contains the list of spawn ids.  Whenever the variable is changed, the
252 new list of spawn ids is automatically used.  This is particularly
253 useful with any long running expect command such as expect_before,
254 expect_after, expect_background, and interact.
255
256 The -update flag was removed.  Use indirect spawn ids (see previous
257 paragraph).
258
259 -- interact notes:
260
261 Interact now support -input and -output flags that provide very
262 flexible means of moving data from/to multiple spawn ids in complex
263 ways (but very quickly).  It is possible to write most expect loops
264 using a simple interact statement.  For instance, the three way
265 interaction inside kibitz (between two users and a process) is written
266 this way:
267
268         interact {
269                 -output $shell
270                 -input $userin eof { . . . } -output $shell
271                 -input $shell -output "$user_spawn_id $userout"
272         }
273
274 -- send command notes:
275
276 It is possible to send a break by using the "-break" flag.
277
278 Any string starting with "-" should be protected by preceding it with
279 the "--" flag, even those that are not keywords currently.  (All
280 strings starting "-" are reserved for future options.)
281
282 -- The spawn command now takes an "-open" flag which in turns takes a
283 Tcl file as an argument.  This lets you treat raw devices, files, and
284 pipelines as spawned processes without using a pty.
285
286 This was actually in Expect 4, but I forgot to document it.  Oops!
287
288 -- The old "debug" command (which describes what Expect is doing
289 internally) was renamed "exp_internal".  "debug" (and "exp_debug") now
290 invoke the interactive debugger.
291
292 -- The new command "stty" now takes over the job of "system stty".  It
293 works much better, allowing POSIX-style redirection to affect other
294 ttys.  It otherwise takes arguments as "system stty" did.
295
296 -- The "-tcl" option to "return" has gone away.  (This was dangerous
297 to anyone that actually happened to return the value "-tcl".)
298 Instead, use inter_return.
299
300 -- Added exp_timestamp command to produce very fast timestamps.
301
302 -- Added exp_pid command to return pid of given spawn id.
303
304 -- The close command now takes an argument of "-onexec" with a following
305 0 or non-zero value.  For example, the follow command stops the
306 current spawn id from being closed when another process is exec'd or
307 spawn'd.
308
309         close -onexec 0
310
311 While "-onexec 1" returns it to the default condition where it will be
312 closed upon exec or spawn.
313
314 -- log_user now returns previous value.  It is acceptable to call now,
315 without arguments just to get the value.
316
317 -- The following forms are deprecated.  They will be allowed
318 indefinitely but not advertised or supported if they break.
319
320         -eof, -timeout in interact (reason: didn't match expect.
321                 Instead, use eof or timeout.)
322
323         -- in expect or interact (reason: no easier to read.
324                 Instead, use -gl in expect or -ex in interact.)
325
326         continue -expect (reason: when mixing in extensions, you have
327                 to use exp_continue, so -expect becomes irrelevant.
328                 Instead, use exp_continue.)
329
330         getpid (reason: Tcl now supplies same functionality as "pid".
331                 Instead, use pid.)
332
333         expect_version and expect_library (reason: the name implies
334                 they have something to do with the expect command,
335                 which they doesn't.
336                 Instead, use exp_version and exp_library.)
337
338         -timestamp for obtaining tm and ctime in expect and interact
339                 (reason: separate command now exists for this purpose.
340                 Instead, use exp_timestamp.)
341
342         system stty (reason: bad interaction with redirection.
343                 Instead, use stty.)
344
345 -- New examples have been added:
346
347 "dislocate" lets you disconnect and reconnect to processes.
348
349 "tkpasswd" illustrates passwd embedded in a GUI.
350
351 They may not be overwhelmingly useful, but run them once to see what
352 they do.  If you ever need to do anything similar, you can look back
353 at them.
354
355 "tknewsbiff" pops up a window or plays a audio clip when you have
356 unread news.
357
358 -- Changes to the Expect libraries:
359
360 The expect-tcl library (libexpectcl.a) has been integrated with the
361 expect library (libexpect.a).  So references to libexpectcl.a should
362 be removed.
363
364 The Expect C library now supports buffering, multiplexing, null
365 matching, full buffer matching.  Basically, all of the features in
366 Expect are now in the library.
367
368 Buffering and multiplexing has caused the biggest change to the
369 library.  Previously, exp_match contained the entire buffer that
370 matched.  Now exp_match just points to where in the buffer the match
371 started.  exp_buffer points to the beginning of the buffer.
372 Previously, the previous buffer was thrown away at the beginning of
373 each expect function call.  Now, previously unmatched characters are
374 eligible for matching.
375
376 To match on different file descriptors, exp_match, exp_match_end,
377 exp_buffer_end must be restored to their previous values.  Initially,
378 they should be zero.
379
380 The meaning of timeout == 0 in the Expect library has been changed.
381 See the man page for more info.
382
383 ======================================================================
384 ======================================================================
385 This file describes the changes from Expect 3 to Expect 4.
386
387 The improvements that people will find most interesting are:
388
389 1) Expect version 4 is designed to work with Tcl 6.7 and Tk 3.2.
390    (Earlier versions of Expect will not work with Tcl 6.7)
391    Expect can now be layered in with any Tcl program.  
392    Note that in Tk, Expect's send command is called "exp_send".
393    (It used to be called "send_spawn" but this bit the dust.)
394 2) A debugger is provided.
395 3) The interact command has been totally rewritten and supports regular
396    expressions, timeout/eof patterns, and a number of other new things.
397 4) The default behavior of ^C (SIGINT) is exit whether or not you are in
398    a read.
399 5) Expect uses "sane" terminal parameters by default, allowing scripts
400    to work the same whether inside emacs shell mode or not.  (See man
401    page on "spawn" for more info.)
402 6) All the hard parts of the installation process are automated.  This
403    was done primarily by Rob Savoye at Cygnus.  Thank you, Rob!
404 7) It is now possible to buy a support contract for Expect from Cygnus.
405
406 The changes that people will find most annoying are:
407
408 1) send now only sends a single string.  (It used to send any number of
409    strings with spaces jammed in between.)
410 2) getpid was renamed pid.
411 3) interact's -flush was renamed -nobuffer (much more descriptive).
412 4) interact now runs all actions in raw mode unless the flag -reset
413    is used.  -f and -F are ignored.  send automatically understands
414    how to do the right thing.  The most likely thing to watch out for
415    are actions like "exec kill -STOP 0" which almost certainly need
416    the -reset flag.
417 5) argv0 is initialized to script name.  argv no longer contains it.
418    argc is initialized [llength $argv].  This follows new Tcl style.
419
420 All differences are described in the man page.  Some of the less
421 significant differences are described in the HISTORY file.  The
422 debugger is described in a separate document (see the README).
423
424 This version also introduces one incompatibility that may require
425 changes to scripts.  While this may initially annoy you, the final
426 result will simplify the process of writing scripts.  Namely:
427
428 In version 3, the expect command accepted lists of glob-style patterns
429 such as:
430
431         expect "a\ b c" action
432
433 where "a b" or "c" would cause action to be executed.  The problem
434 with this is that the pattern list is hard to write and hard to read.
435 Patterns with control-characters, backslashes and dollar signs were
436 very difficult to deal with.
437
438 Regular-expression patterns provide a much simpler solution.  Via the
439 alternation feature (using a "|") the above pattern can be written as:
440
441         expect -re "a b|c" action
442
443 I was concerned about people having a significant investment in code
444 that depended on the old syntax but responders to a comp.lang.tcl poll
445 about such a change in pattern handling were 100% in favor of it.  (I
446 even proposed hooks for backward compatibility, but there was no
447 interest in it.)
448
449 Fortunately, most simple things will work as before including:
450
451         expect foobar
452         expect {foobar}
453         expect "foobar"
454         expect "foo\ bar"
455
456 However, some things won't work as before.  For example, the following
457 will behave differently - now the braces will be considered as part of
458 the pattern.
459
460         expect "{foo bar}"
461
462 Here are examples of patterns in my own code that I had to change:
463
464         was                             changed to
465         Version 3 pattern list          Version 4 pattern
466
467         {Whois:\ }                      "Whois: "
468         {No\ match}                     "No match"
469         {250*ftp>* 200*ftp>*}           -re "2(5|0)0.*ftp>.*"
470         {{Press Return to continue*}}   "Press Return to continue*"
471         {*\r\n*\\\\\r\n}                "\r\n*\\\r\n"
472
473
474
475 Future Change Alert
476
477 John Ousterhout has pre-announced a future change in Tcl that may
478 affect you.  In particular, backslash sequences other than those
479 explicitly listed in the Tcl documentation will be handled as if the
480 backslash was not present.
481
482 The likely place this arises is when quoting characters that are
483 special to the pattern matcher but not to Tcl.
484
485 For example in Tcl 6.7, the following command matches a period.
486
487         expect -re "\."
488
489 In Tcl 7.0, it will match any character, because Tcl will throw away
490 the backslash.  If you want to match a period, you will have to say:
491
492         expect -re "\\."
493 or
494         expect -re {\.}
495
496 The following command will find occurrences of this.  (It may find
497 other things, but it will at least find the problem cases.)
498
499         egrep '(\\$)|(\\[^][bfnrtv\0-9{}$ ;"])' *.exp
500
501 ======================================================================
502 ======================================================================
503 This section describes the changes from Expect 2 to Expect 3.
504
505 If you used to use Expect version 2 (any version written before
506 September '91) you will find that the current version of Expect (3)
507 introduced minor but significant incompatibilities.
508
509 The HISTORY file describes these briefly.  They are described at
510 length in the man page.
511
512 I'm sorry if you feel annoyed at the incompatibilities, but Expect has
513 been out for a year and a half, Tcl even longer.  Both Tcl and Expect
514 are using this as a last chance to make significant changes, so that
515 we will not disturb even more users in the future.
516
517 There is no automated conversion procedure (although see note below)
518 for Expect or even raw Tcl.  For now, I suggest that you not bother
519 fixing things that already work - just keep the old Expect around.
520 The binary isn't very big after all.  If you do write a translation
521 script, let me know.  Thanks.
522
523 Of course, I felt obligated to convert the examples distributed with
524 expect.  I did this by hand while writing the new version itself,
525 partly as an aid but mostly to test lots of variations.  In 90% of the
526 scripts, all I had to do was change:
527
528 (changes due to Tcl)
529         'index' to 'lindex'
530         'range' to 'lrange'
531         'length' to 'llength'
532         'print' to 'send_user' or 'puts' depending on how you use it
533         'function .... c' with '[join [function [split string ""]] ""]'
534 (changes due to Expect)
535         'expect_match' to 'expect_out(buffer)'
536         'set match_max' to 'match_max' (perhaps with -d flag)
537         '*' to '-re .+'
538
539 If anyone wants to write a script to do this, note the pitfalls:
540
541 1) functions and variables do not share the same namespace, so it is a
542 inappropriate to just globally rename things.
543
544 A number of optimizations can be made:
545
546 1) If you are doing multiple split/joins, you should probably cache the
547 split string.
548
549 2) Virtually all uses of scan are unnecessary now, due to exec's automatic
550 stripping of terminating newlines, and expect's support of regexps.
551
552 3) String manipulation can be reduced or avoided entirely if you use
553 expect -re.
554
555 4) exec is no longer necessary to retrieve environment variables, since
556 they can now be retrieved from $env.
557
558 5) If you have been really anal about testing for timeout and eof, you
559 can dramatically reduce the size of your scripts by using expect_before
560 and expect_after.  This is more efficient, as well, since those actions
561 are only parsed once.
562