* numbers.c (num2long): As a software archeologist, I'm proud of
[bpt/guile.git] / NEWS
CommitLineData
f7b47737 1Guile NEWS --- history of user-visible changes. -*- text -*-
d23bbf3e 2Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
5c54da76
JB
3See the end for copying conditions.
4
e1b6c710 5Please send Guile bug reports to bug-guile@gnu.org.
5c54da76 6\f
f3227c7a
JB
7Changes since Guile 1.3:
8
3ffc7a36
MD
9* Changes to the gh_ interface
10
11** gh_scm2doubles
12
13Now takes a second argument which is the result array. If this
14pointer is NULL, a new array is malloced (the old behaviour).
15
16** gh_chars2byvect, gh_shorts2svect, gh_floats2fvect, gh_scm2chars,
17 gh_scm2shorts, gh_scm2longs, gh_scm2floats
18
19New functions.
20
f3227c7a 21\f
d23bbf3e 22Changes in Guile 1.3 (released Monday, October 19, 1998):
c484bf7f
JB
23
24* Changes to the distribution
25
e2d6569c
JB
26** We renamed the SCHEME_LOAD_PATH environment variable to GUILE_LOAD_PATH.
27To avoid conflicts, programs should name environment variables after
28themselves, except when there's a common practice establishing some
29other convention.
30
31For now, Guile supports both GUILE_LOAD_PATH and SCHEME_LOAD_PATH,
32giving the former precedence, and printing a warning message if the
33latter is set. Guile 1.4 will not recognize SCHEME_LOAD_PATH at all.
34
35** The header files related to multi-byte characters have been removed.
36They were: libguile/extchrs.h and libguile/mbstrings.h. Any C code
37which referred to these explicitly will probably need to be rewritten,
38since the support for the variant string types has been removed; see
39below.
40
41** The header files append.h and sequences.h have been removed. These
42files implemented non-R4RS operations which would encourage
43non-portable programming style and less easy-to-read code.
3a97e020 44
c484bf7f
JB
45* Changes to the stand-alone interpreter
46
2e368582 47** New procedures have been added to implement a "batch mode":
ec4ab4fd 48
2e368582 49*** Function: batch-mode?
ec4ab4fd
GH
50
51 Returns a boolean indicating whether the interpreter is in batch
52 mode.
53
2e368582 54*** Function: set-batch-mode?! ARG
ec4ab4fd
GH
55
56 If ARG is true, switches the interpreter to batch mode. The `#f'
57 case has not been implemented.
58
2e368582
JB
59** Guile now provides full command-line editing, when run interactively.
60To use this feature, you must have the readline library installed.
61The Guile build process will notice it, and automatically include
62support for it.
63
64The readline library is available via anonymous FTP from any GNU
65mirror site; the canonical location is "ftp://prep.ai.mit.edu/pub/gnu".
66
a5d6d578
MD
67** the-last-stack is now a fluid.
68
c484bf7f
JB
69* Changes to the procedure for linking libguile with your programs
70
71f20534 71** You can now use the `guile-config' utility to build programs that use Guile.
2e368582 72
2adfe1c0 73Guile now includes a command-line utility called `guile-config', which
71f20534
JB
74can provide information about how to compile and link programs that
75use Guile.
76
77*** `guile-config compile' prints any C compiler flags needed to use Guile.
78You should include this command's output on the command line you use
79to compile C or C++ code that #includes the Guile header files. It's
80usually just a `-I' flag to help the compiler find the Guile headers.
81
82
83*** `guile-config link' prints any linker flags necessary to link with Guile.
8aa5c148 84
71f20534 85This command writes to its standard output a list of flags which you
8aa5c148
JB
86must pass to the linker to link your code against the Guile library.
87The flags include '-lguile' itself, any other libraries the Guile
88library depends upon, and any `-L' flags needed to help the linker
89find those libraries.
2e368582
JB
90
91For example, here is a Makefile rule that builds a program named 'foo'
92from the object files ${FOO_OBJECTS}, and links them against Guile:
93
94 foo: ${FOO_OBJECTS}
2adfe1c0 95 ${CC} ${CFLAGS} ${FOO_OBJECTS} `guile-config link` -o foo
2e368582 96
e2d6569c
JB
97Previous Guile releases recommended that you use autoconf to detect
98which of a predefined set of libraries were present on your system.
2adfe1c0 99It is more robust to use `guile-config', since it records exactly which
e2d6569c
JB
100libraries the installed Guile library requires.
101
2adfe1c0
JB
102This was originally called `build-guile', but was renamed to
103`guile-config' before Guile 1.3 was released, to be consistent with
104the analogous script for the GTK+ GUI toolkit, which is called
105`gtk-config'.
106
2e368582 107
8aa5c148
JB
108** Use the GUILE_FLAGS macro in your configure.in file to find Guile.
109
110If you are using the GNU autoconf package to configure your program,
111you can use the GUILE_FLAGS autoconf macro to call `guile-config'
112(described above) and gather the necessary values for use in your
113Makefiles.
114
115The GUILE_FLAGS macro expands to configure script code which runs the
116`guile-config' script, to find out where Guile's header files and
117libraries are installed. It sets two variables, marked for
118substitution, as by AC_SUBST.
119
120 GUILE_CFLAGS --- flags to pass to a C or C++ compiler to build
121 code that uses Guile header files. This is almost always just a
122 -I flag.
123
124 GUILE_LDFLAGS --- flags to pass to the linker to link a
125 program against Guile. This includes `-lguile' for the Guile
126 library itself, any libraries that Guile itself requires (like
127 -lqthreads), and so on. It may also include a -L flag to tell the
128 compiler where to find the libraries.
129
130GUILE_FLAGS is defined in the file guile.m4, in the top-level
131directory of the Guile distribution. You can copy it into your
132package's aclocal.m4 file, and then use it in your configure.in file.
133
134If you are using the `aclocal' program, distributed with GNU automake,
135to maintain your aclocal.m4 file, the Guile installation process
136installs guile.m4 where aclocal will find it. All you need to do is
137use GUILE_FLAGS in your configure.in file, and then run `aclocal';
138this will copy the definition of GUILE_FLAGS into your aclocal.m4
139file.
140
141
c484bf7f 142* Changes to Scheme functions and syntax
7ad3c1e7 143
02755d59 144** Multi-byte strings have been removed, as have multi-byte and wide
e2d6569c
JB
145ports. We felt that these were the wrong approach to
146internationalization support.
02755d59 147
2e368582
JB
148** New function: readline [PROMPT]
149Read a line from the terminal, and allow the user to edit it,
150prompting with PROMPT. READLINE provides a large set of Emacs-like
151editing commands, lets the user recall previously typed lines, and
152works on almost every kind of terminal, including dumb terminals.
153
154READLINE assumes that the cursor is at the beginning of the line when
155it is invoked. Thus, you can't print a prompt yourself, and then call
156READLINE; you need to package up your prompt as a string, pass it to
157the function, and let READLINE print the prompt itself. This is
158because READLINE needs to know the prompt's screen width.
159
8cd57bd0
JB
160For Guile to provide this function, you must have the readline
161library, version 2.1 or later, installed on your system. Readline is
162available via anonymous FTP from prep.ai.mit.edu in pub/gnu, or from
163any GNU mirror site.
2e368582
JB
164
165See also ADD-HISTORY function.
166
167** New function: add-history STRING
168Add STRING as the most recent line in the history used by the READLINE
169command. READLINE does not add lines to the history itself; you must
170call ADD-HISTORY to make previous input available to the user.
171
8cd57bd0
JB
172** The behavior of the read-line function has changed.
173
174This function now uses standard C library functions to read the line,
175for speed. This means that it doesn not respect the value of
176scm-line-incrementors; it assumes that lines are delimited with
177#\newline.
178
179(Note that this is read-line, the function that reads a line of text
180from a port, not readline, the function that reads a line from a
181terminal, providing full editing capabilities.)
182
1a0106ef
JB
183** New module (ice-9 getopt-gnu-style): Parse command-line arguments.
184
185This module provides some simple argument parsing. It exports one
186function:
187
188Function: getopt-gnu-style ARG-LS
189 Parse a list of program arguments into an alist of option
190 descriptions.
191
192 Each item in the list of program arguments is examined to see if
193 it meets the syntax of a GNU long-named option. An argument like
194 `--MUMBLE' produces an element of the form (MUMBLE . #t) in the
195 returned alist, where MUMBLE is a keyword object with the same
196 name as the argument. An argument like `--MUMBLE=FROB' produces
197 an element of the form (MUMBLE . FROB), where FROB is a string.
198
199 As a special case, the returned alist also contains a pair whose
200 car is the symbol `rest'. The cdr of this pair is a list
201 containing all the items in the argument list that are not options
202 of the form mentioned above.
203
204 The argument `--' is treated specially: all items in the argument
205 list appearing after such an argument are not examined, and are
206 returned in the special `rest' list.
207
208 This function does not parse normal single-character switches.
209 You will need to parse them out of the `rest' list yourself.
210
8cd57bd0
JB
211** The read syntax for byte vectors and short vectors has changed.
212
213Instead of #bytes(...), write #y(...).
214
215Instead of #short(...), write #h(...).
216
217This may seem nutty, but, like the other uniform vectors, byte vectors
218and short vectors want to have the same print and read syntax (and,
219more basic, want to have read syntax!). Changing the read syntax to
220use multiple characters after the hash sign breaks with the
221conventions used in R5RS and the conventions used for the other
222uniform vectors. It also introduces complexity in the current reader,
223both on the C and Scheme levels. (The Right solution is probably to
224change the syntax and prototypes for uniform vectors entirely.)
225
226
227** The new module (ice-9 session) provides useful interactive functions.
228
229*** New procedure: (apropos REGEXP OPTION ...)
230
231Display a list of top-level variables whose names match REGEXP, and
232the modules they are imported from. Each OPTION should be one of the
233following symbols:
234
235 value --- Show the value of each matching variable.
236 shadow --- Show bindings shadowed by subsequently imported modules.
237 full --- Same as both `shadow' and `value'.
238
239For example:
240
241 guile> (apropos "trace" 'full)
242 debug: trace #<procedure trace args>
243 debug: untrace #<procedure untrace args>
244 the-scm-module: display-backtrace #<compiled-closure #<primitive-procedure gsubr-apply>>
245 the-scm-module: before-backtrace-hook ()
246 the-scm-module: backtrace #<primitive-procedure backtrace>
247 the-scm-module: after-backtrace-hook ()
248 the-scm-module: has-shown-backtrace-hint? #f
249 guile>
250
251** There are new functions and syntax for working with macros.
252
253Guile implements macros as a special object type. Any variable whose
254top-level binding is a macro object acts as a macro. The macro object
255specifies how the expression should be transformed before evaluation.
256
257*** Macro objects now print in a reasonable way, resembling procedures.
258
259*** New function: (macro? OBJ)
260True iff OBJ is a macro object.
261
262*** New function: (primitive-macro? OBJ)
263Like (macro? OBJ), but true only if OBJ is one of the Guile primitive
264macro transformers, implemented in eval.c rather than Scheme code.
265
266*** New function: (macro-type OBJ)
267Return a value indicating what kind of macro OBJ is. Possible return
268values are:
269
270 The symbol `syntax' --- a macro created by procedure->syntax.
271 The symbol `macro' --- a macro created by procedure->macro.
272 The symbol `macro!' --- a macro created by procedure->memoizing-macro.
273 The boolean #f --- if OBJ is not a macro object.
274
275*** New function: (macro-name MACRO)
276Return the name of the macro object MACRO's procedure, as returned by
277procedure-name.
278
279*** New function: (macro-transformer MACRO)
280Return the transformer procedure for MACRO.
281
282*** New syntax: (use-syntax MODULE ... TRANSFORMER)
283
284Specify a new macro expander to use in the current module. Each
285MODULE is a module name, with the same meaning as in the `use-modules'
286form; each named module's exported bindings are added to the current
287top-level environment. TRANSFORMER is an expression evaluated in the
288resulting environment which must yield a procedure to use as the
289module's eval transformer: every expression evaluated in this module
290is passed to this function, and the result passed to the Guile
291interpreter.
292
293*** macro-eval! is removed. Use local-eval instead.
29521173 294
8d9dcb3c
MV
295** Some magic has been added to the printer to better handle user
296written printing routines (like record printers, closure printers).
297
298The problem is that these user written routines must have access to
7fbd77df 299the current `print-state' to be able to handle fancy things like
8d9dcb3c
MV
300detection of circular references. These print-states have to be
301passed to the builtin printing routines (display, write, etc) to
302properly continue the print chain.
303
304We didn't want to change all existing print code so that it
8cd57bd0 305explicitly passes thru a print state in addition to a port. Instead,
8d9dcb3c
MV
306we extented the possible values that the builtin printing routines
307accept as a `port'. In addition to a normal port, they now also take
308a pair of a normal port and a print-state. Printing will go to the
309port and the print-state will be used to control the detection of
310circular references, etc. If the builtin function does not care for a
311print-state, it is simply ignored.
312
313User written callbacks are now called with such a pair as their
314`port', but because every function now accepts this pair as a PORT
315argument, you don't have to worry about that. In fact, it is probably
316safest to not check for these pairs.
317
318However, it is sometimes necessary to continue a print chain on a
319different port, for example to get a intermediate string
320representation of the printed value, mangle that string somehow, and
321then to finally print the mangled string. Use the new function
322
323 inherit-print-state OLD-PORT NEW-PORT
324
325for this. It constructs a new `port' that prints to NEW-PORT but
326inherits the print-state of OLD-PORT.
327
ef1ea498
MD
328** struct-vtable-offset renamed to vtable-offset-user
329
330** New constants: vtable-index-layout, vtable-index-vtable, vtable-index-printer
331
332** There is now a fourth (optional) argument to make-vtable-vtable and
333 make-struct when constructing new types (vtables). This argument
334 initializes field vtable-index-printer of the vtable.
335
4851dc57
MV
336** The detection of circular references has been extended to structs.
337That is, a structure that -- in the process of being printed -- prints
338itself does not lead to infinite recursion.
339
340** There is now some basic support for fluids. Please read
341"libguile/fluid.h" to find out more. It is accessible from Scheme with
342the following functions and macros:
343
9c3fb66f
MV
344Function: make-fluid
345
346 Create a new fluid object. Fluids are not special variables or
347 some other extension to the semantics of Scheme, but rather
348 ordinary Scheme objects. You can store them into variables (that
349 are still lexically scoped, of course) or into any other place you
350 like. Every fluid has a initial value of `#f'.
04c76b58 351
9c3fb66f 352Function: fluid? OBJ
04c76b58 353
9c3fb66f 354 Test whether OBJ is a fluid.
04c76b58 355
9c3fb66f
MV
356Function: fluid-ref FLUID
357Function: fluid-set! FLUID VAL
04c76b58
MV
358
359 Access/modify the fluid FLUID. Modifications are only visible
360 within the current dynamic root (that includes threads).
361
9c3fb66f
MV
362Function: with-fluids* FLUIDS VALUES THUNK
363
364 FLUIDS is a list of fluids and VALUES a corresponding list of
365 values for these fluids. Before THUNK gets called the values are
366 installed in the fluids and the old values of the fluids are
367 saved in the VALUES list. When the flow of control leaves THUNK
368 or reenters it, the values get swapped again. You might think of
369 this as a `safe-fluid-excursion'. Note that the VALUES list is
370 modified by `with-fluids*'.
371
372Macro: with-fluids ((FLUID VALUE) ...) FORM ...
373
374 The same as `with-fluids*' but with a different syntax. It looks
375 just like `let', but both FLUID and VALUE are evaluated. Remember,
376 fluids are not special variables but ordinary objects. FLUID
377 should evaluate to a fluid.
04c76b58 378
e2d6569c 379** Changes to system call interfaces:
64d01d13 380
e2d6569c 381*** close-port, close-input-port and close-output-port now return a
64d01d13
GH
382boolean instead of an `unspecified' object. #t means that the port
383was successfully closed, while #f means it was already closed. It is
384also now possible for these procedures to raise an exception if an
385error occurs (some errors from write can be delayed until close.)
386
e2d6569c 387*** the first argument to chmod, fcntl, ftell and fseek can now be a
6afcd3b2
GH
388file descriptor.
389
e2d6569c 390*** the third argument to fcntl is now optional.
6afcd3b2 391
e2d6569c 392*** the first argument to chown can now be a file descriptor or a port.
6afcd3b2 393
e2d6569c 394*** the argument to stat can now be a port.
6afcd3b2 395
e2d6569c 396*** The following new procedures have been added (most use scsh
64d01d13
GH
397interfaces):
398
e2d6569c 399*** procedure: close PORT/FD
ec4ab4fd
GH
400 Similar to close-port (*note close-port: Closing Ports.), but also
401 works on file descriptors. A side effect of closing a file
402 descriptor is that any ports using that file descriptor are moved
403 to a different file descriptor and have their revealed counts set
404 to zero.
405
e2d6569c 406*** procedure: port->fdes PORT
ec4ab4fd
GH
407 Returns the integer file descriptor underlying PORT. As a side
408 effect the revealed count of PORT is incremented.
409
e2d6569c 410*** procedure: fdes->ports FDES
ec4ab4fd
GH
411 Returns a list of existing ports which have FDES as an underlying
412 file descriptor, without changing their revealed counts.
413
e2d6569c 414*** procedure: fdes->inport FDES
ec4ab4fd
GH
415 Returns an existing input port which has FDES as its underlying
416 file descriptor, if one exists, and increments its revealed count.
417 Otherwise, returns a new input port with a revealed count of 1.
418
e2d6569c 419*** procedure: fdes->outport FDES
ec4ab4fd
GH
420 Returns an existing output port which has FDES as its underlying
421 file descriptor, if one exists, and increments its revealed count.
422 Otherwise, returns a new output port with a revealed count of 1.
423
424 The next group of procedures perform a `dup2' system call, if NEWFD
425(an integer) is supplied, otherwise a `dup'. The file descriptor to be
426duplicated can be supplied as an integer or contained in a port. The
64d01d13
GH
427type of value returned varies depending on which procedure is used.
428
ec4ab4fd
GH
429 All procedures also have the side effect when performing `dup2' that
430any ports using NEWFD are moved to a different file descriptor and have
64d01d13
GH
431their revealed counts set to zero.
432
e2d6569c 433*** procedure: dup->fdes PORT/FD [NEWFD]
ec4ab4fd 434 Returns an integer file descriptor.
64d01d13 435
e2d6569c 436*** procedure: dup->inport PORT/FD [NEWFD]
ec4ab4fd 437 Returns a new input port using the new file descriptor.
64d01d13 438
e2d6569c 439*** procedure: dup->outport PORT/FD [NEWFD]
ec4ab4fd 440 Returns a new output port using the new file descriptor.
64d01d13 441
e2d6569c 442*** procedure: dup PORT/FD [NEWFD]
ec4ab4fd
GH
443 Returns a new port if PORT/FD is a port, with the same mode as the
444 supplied port, otherwise returns an integer file descriptor.
64d01d13 445
e2d6569c 446*** procedure: dup->port PORT/FD MODE [NEWFD]
ec4ab4fd
GH
447 Returns a new port using the new file descriptor. MODE supplies a
448 mode string for the port (*note open-file: File Ports.).
64d01d13 449
e2d6569c 450*** procedure: setenv NAME VALUE
ec4ab4fd
GH
451 Modifies the environment of the current process, which is also the
452 default environment inherited by child processes.
64d01d13 453
ec4ab4fd
GH
454 If VALUE is `#f', then NAME is removed from the environment.
455 Otherwise, the string NAME=VALUE is added to the environment,
456 replacing any existing string with name matching NAME.
64d01d13 457
ec4ab4fd 458 The return value is unspecified.
956055a9 459
e2d6569c 460*** procedure: truncate-file OBJ SIZE
6afcd3b2
GH
461 Truncates the file referred to by OBJ to at most SIZE bytes. OBJ
462 can be a string containing a file name or an integer file
463 descriptor or port open for output on the file. The underlying
464 system calls are `truncate' and `ftruncate'.
465
466 The return value is unspecified.
467
e2d6569c 468*** procedure: setvbuf PORT MODE [SIZE]
7a6f1ffa
GH
469 Set the buffering mode for PORT. MODE can be:
470 `_IONBF'
471 non-buffered
472
473 `_IOLBF'
474 line buffered
475
476 `_IOFBF'
477 block buffered, using a newly allocated buffer of SIZE bytes.
478 However if SIZE is zero or unspecified, the port will be made
479 non-buffered.
480
481 This procedure should not be used after I/O has been performed with
482 the port.
483
484 Ports are usually block buffered by default, with a default buffer
485 size. Procedures e.g., *Note open-file: File Ports, which accept a
486 mode string allow `0' to be added to request an unbuffered port.
487
e2d6569c 488*** procedure: fsync PORT/FD
6afcd3b2
GH
489 Copies any unwritten data for the specified output file descriptor
490 to disk. If PORT/FD is a port, its buffer is flushed before the
491 underlying file descriptor is fsync'd. The return value is
492 unspecified.
493
e2d6569c 494*** procedure: open-fdes PATH FLAGS [MODES]
6afcd3b2
GH
495 Similar to `open' but returns a file descriptor instead of a port.
496
e2d6569c 497*** procedure: execle PATH ENV [ARG] ...
6afcd3b2
GH
498 Similar to `execl', but the environment of the new process is
499 specified by ENV, which must be a list of strings as returned by
500 the `environ' procedure.
501
502 This procedure is currently implemented using the `execve' system
503 call, but we call it `execle' because of its Scheme calling
504 interface.
505
e2d6569c 506*** procedure: strerror ERRNO
ec4ab4fd
GH
507 Returns the Unix error message corresponding to ERRNO, an integer.
508
e2d6569c 509*** procedure: primitive-exit [STATUS]
6afcd3b2
GH
510 Terminate the current process without unwinding the Scheme stack.
511 This is would typically be useful after a fork. The exit status
512 is STATUS if supplied, otherwise zero.
513
e2d6569c 514*** procedure: times
6afcd3b2
GH
515 Returns an object with information about real and processor time.
516 The following procedures accept such an object as an argument and
517 return a selected component:
518
519 `tms:clock'
520 The current real time, expressed as time units relative to an
521 arbitrary base.
522
523 `tms:utime'
524 The CPU time units used by the calling process.
525
526 `tms:stime'
527 The CPU time units used by the system on behalf of the
528 calling process.
529
530 `tms:cutime'
531 The CPU time units used by terminated child processes of the
532 calling process, whose status has been collected (e.g., using
533 `waitpid').
534
535 `tms:cstime'
536 Similarly, the CPU times units used by the system on behalf of
537 terminated child processes.
7ad3c1e7 538
e2d6569c
JB
539** Removed: list-length
540** Removed: list-append, list-append!
541** Removed: list-reverse, list-reverse!
542
543** array-map renamed to array-map!
544
545** serial-array-map renamed to serial-array-map!
546
660f41fa
MD
547** catch doesn't take #f as first argument any longer
548
549Previously, it was possible to pass #f instead of a key to `catch'.
550That would cause `catch' to pass a jump buffer object to the procedure
551passed as second argument. The procedure could then use this jump
552buffer objekt as an argument to throw.
553
554This mechanism has been removed since its utility doesn't motivate the
555extra complexity it introduces.
556
332d00f6
JB
557** The `#/' notation for lists now provokes a warning message from Guile.
558This syntax will be removed from Guile in the near future.
559
560To disable the warning message, set the GUILE_HUSH environment
561variable to any non-empty value.
562
8cd57bd0
JB
563** The newline character now prints as `#\newline', following the
564normal Scheme notation, not `#\nl'.
565
c484bf7f
JB
566* Changes to the gh_ interface
567
8986901b
JB
568** The gh_enter function now takes care of loading the Guile startup files.
569gh_enter works by calling scm_boot_guile; see the remarks below.
570
5424b4f7
MD
571** Function: void gh_write (SCM x)
572
573Write the printed representation of the scheme object x to the current
574output port. Corresponds to the scheme level `write'.
575
3a97e020
MD
576** gh_list_length renamed to gh_length.
577
8d6787b6
MG
578** vector handling routines
579
580Several major changes. In particular, gh_vector() now resembles
581(vector ...) (with a caveat -- see manual), and gh_make_vector() now
956328d2
MG
582exists and behaves like (make-vector ...). gh_vset() and gh_vref()
583have been renamed gh_vector_set_x() and gh_vector_ref(). Some missing
8d6787b6
MG
584vector-related gh_ functions have been implemented.
585
7fee59bd
MG
586** pair and list routines
587
588Implemented several of the R4RS pair and list functions that were
589missing.
590
171422a9
MD
591** gh_scm2doubles, gh_doubles2scm, gh_doubles2dvect
592
593New function. Converts double arrays back and forth between Scheme
594and C.
595
c484bf7f
JB
596* Changes to the scm_ interface
597
8986901b
JB
598** The function scm_boot_guile now takes care of loading the startup files.
599
600Guile's primary initialization function, scm_boot_guile, now takes
601care of loading `boot-9.scm', in the `ice-9' module, to initialize
602Guile, define the module system, and put together some standard
603bindings. It also loads `init.scm', which is intended to hold
604site-specific initialization code.
605
606Since Guile cannot operate properly until boot-9.scm is loaded, there
607is no reason to separate loading boot-9.scm from Guile's other
608initialization processes.
609
610This job used to be done by scm_compile_shell_switches, which didn't
611make much sense; in particular, it meant that people using Guile for
612non-shell-like applications had to jump through hoops to get Guile
613initialized properly.
614
615** The function scm_compile_shell_switches no longer loads the startup files.
616Now, Guile always loads the startup files, whenever it is initialized;
617see the notes above for scm_boot_guile and scm_load_startup_files.
618
619** Function: scm_load_startup_files
620This new function takes care of loading Guile's initialization file
621(`boot-9.scm'), and the site initialization file, `init.scm'. Since
622this is always called by the Guile initialization process, it's
623probably not too useful to call this yourself, but it's there anyway.
624
87148d9e
JB
625** The semantics of smob marking have changed slightly.
626
627The smob marking function (the `mark' member of the scm_smobfuns
628structure) is no longer responsible for setting the mark bit on the
629smob. The generic smob handling code in the garbage collector will
630set this bit. The mark function need only ensure that any other
631objects the smob refers to get marked.
632
633Note that this change means that the smob's GC8MARK bit is typically
634already set upon entry to the mark function. Thus, marking functions
635which look like this:
636
637 {
638 if (SCM_GC8MARKP (ptr))
639 return SCM_BOOL_F;
640 SCM_SETGC8MARK (ptr);
641 ... mark objects to which the smob refers ...
642 }
643
644are now incorrect, since they will return early, and fail to mark any
645other objects the smob refers to. Some code in the Guile library used
646to work this way.
647
1cf84ea5
JB
648** The semantics of the I/O port functions in scm_ptobfuns have changed.
649
650If you have implemented your own I/O port type, by writing the
651functions required by the scm_ptobfuns and then calling scm_newptob,
652you will need to change your functions slightly.
653
654The functions in a scm_ptobfuns structure now expect the port itself
655as their argument; they used to expect the `stream' member of the
656port's scm_port_table structure. This allows functions in an
657scm_ptobfuns structure to easily access the port's cell (and any flags
658it its CAR), and the port's scm_port_table structure.
659
660Guile now passes the I/O port itself as the `port' argument in the
661following scm_ptobfuns functions:
662
663 int (*free) (SCM port);
664 int (*fputc) (int, SCM port);
665 int (*fputs) (char *, SCM port);
666 scm_sizet (*fwrite) SCM_P ((char *ptr,
667 scm_sizet size,
668 scm_sizet nitems,
669 SCM port));
670 int (*fflush) (SCM port);
671 int (*fgetc) (SCM port);
672 int (*fclose) (SCM port);
673
674The interfaces to the `mark', `print', `equalp', and `fgets' methods
675are unchanged.
676
677If you have existing code which defines its own port types, it is easy
678to convert your code to the new interface; simply apply SCM_STREAM to
679the port argument to yield the value you code used to expect.
680
681Note that since both the port and the stream have the same type in the
682C code --- they are both SCM values --- the C compiler will not remind
683you if you forget to update your scm_ptobfuns functions.
684
685
933a7411
MD
686** Function: int scm_internal_select (int fds,
687 SELECT_TYPE *rfds,
688 SELECT_TYPE *wfds,
689 SELECT_TYPE *efds,
690 struct timeval *timeout);
691
692This is a replacement for the `select' function provided by the OS.
693It enables I/O blocking and sleeping to happen for one cooperative
694thread without blocking other threads. It also avoids busy-loops in
695these situations. It is intended that all I/O blocking and sleeping
696will finally go through this function. Currently, this function is
697only available on systems providing `gettimeofday' and `select'.
698
5424b4f7
MD
699** Function: SCM scm_internal_stack_catch (SCM tag,
700 scm_catch_body_t body,
701 void *body_data,
702 scm_catch_handler_t handler,
703 void *handler_data)
704
705A new sibling to the other two C level `catch' functions
706scm_internal_catch and scm_internal_lazy_catch. Use it if you want
707the stack to be saved automatically into the variable `the-last-stack'
708(scm_the_last_stack_var) on error. This is necessary if you want to
709use advanced error reporting, such as calling scm_display_error and
710scm_display_backtrace. (They both take a stack object as argument.)
711
df366c26
MD
712** Function: SCM scm_spawn_thread (scm_catch_body_t body,
713 void *body_data,
714 scm_catch_handler_t handler,
715 void *handler_data)
716
717Spawns a new thread. It does a job similar to
718scm_call_with_new_thread but takes arguments more suitable when
719spawning threads from application C code.
720
88482b31
MD
721** The hook scm_error_callback has been removed. It was originally
722intended as a way for the user to install his own error handler. But
723that method works badly since it intervenes between throw and catch,
724thereby changing the semantics of expressions like (catch #t ...).
725The correct way to do it is to use one of the C level catch functions
726in throw.c: scm_internal_catch/lazy_catch/stack_catch.
727
3a97e020
MD
728** Removed functions:
729
730scm_obj_length, scm_list_length, scm_list_append, scm_list_append_x,
731scm_list_reverse, scm_list_reverse_x
732
733** New macros: SCM_LISTn where n is one of the integers 0-9.
734
735These can be used for pretty list creation from C. The idea is taken
736from Erick Gallesio's STk.
737
298aa6e3
MD
738** scm_array_map renamed to scm_array_map_x
739
527da704
MD
740** mbstrings are now removed
741
742This means that the type codes scm_tc7_mb_string and
743scm_tc7_mb_substring has been removed.
744
8cd57bd0
JB
745** scm_gen_putc, scm_gen_puts, scm_gen_write, and scm_gen_getc have changed.
746
747Since we no longer support multi-byte strings, these I/O functions
748have been simplified, and renamed. Here are their old names, and
749their new names and arguments:
750
751scm_gen_putc -> void scm_putc (int c, SCM port);
752scm_gen_puts -> void scm_puts (char *s, SCM port);
753scm_gen_write -> void scm_lfwrite (char *ptr, scm_sizet size, SCM port);
754scm_gen_getc -> void scm_getc (SCM port);
755
756
527da704
MD
757** The macros SCM_TYP7D and SCM_TYP7SD has been removed.
758
759** The macro SCM_TYP7S has taken the role of the old SCM_TYP7D
760
761SCM_TYP7S now masks away the bit which distinguishes substrings from
762strings.
763
660f41fa
MD
764** scm_catch_body_t: Backward incompatible change!
765
766Body functions to scm_internal_catch and friends do not any longer
767take a second argument. This is because it is no longer possible to
768pass a #f arg to catch.
769
a8e05009
JB
770** Calls to scm_protect_object and scm_unprotect now nest properly.
771
772The function scm_protect_object protects its argument from being freed
773by the garbage collector. scm_unprotect_object removes that
774protection.
775
776These functions now nest properly. That is, for every object O, there
777is a counter which scm_protect_object(O) increments and
778scm_unprotect_object(O) decrements, if the counter is greater than
779zero. Every object's counter is zero when it is first created. If an
780object's counter is greater than zero, the garbage collector will not
781reclaim its storage.
782
783This allows you to use scm_protect_object in your code without
784worrying that some other function you call will call
785scm_unprotect_object, and allow it to be freed. Assuming that the
786functions you call are well-behaved, and unprotect only those objects
787they protect, you can follow the same rule and have confidence that
788objects will be freed only at appropriate times.
789
c484bf7f
JB
790\f
791Changes in Guile 1.2 (released Tuesday, June 24 1997):
cf78e9e8 792
737c9113
JB
793* Changes to the distribution
794
832b09ed
JB
795** Nightly snapshots are now available from ftp.red-bean.com.
796The old server, ftp.cyclic.com, has been relinquished to its rightful
797owner.
798
799Nightly snapshots of the Guile development sources are now available via
800anonymous FTP from ftp.red-bean.com, as /pub/guile/guile-snap.tar.gz.
801
802Via the web, that's: ftp://ftp.red-bean.com/pub/guile/guile-snap.tar.gz
803For getit, that's: ftp.red-bean.com:/pub/guile/guile-snap.tar.gz
804
0fcab5ed
JB
805** To run Guile without installing it, the procedure has changed a bit.
806
807If you used a separate build directory to compile Guile, you'll need
808to include the build directory in SCHEME_LOAD_PATH, as well as the
809source directory. See the `INSTALL' file for examples.
810
737c9113
JB
811* Changes to the procedure for linking libguile with your programs
812
94982a4e
JB
813** The standard Guile load path for Scheme code now includes
814$(datadir)/guile (usually /usr/local/share/guile). This means that
815you can install your own Scheme files there, and Guile will find them.
816(Previous versions of Guile only checked a directory whose name
817contained the Guile version number, so you had to re-install or move
818your Scheme sources each time you installed a fresh version of Guile.)
819
820The load path also includes $(datadir)/guile/site; we recommend
821putting individual Scheme files there. If you want to install a
822package with multiple source files, create a directory for them under
823$(datadir)/guile.
824
825** Guile 1.2 will now use the Rx regular expression library, if it is
826installed on your system. When you are linking libguile into your own
827programs, this means you will have to link against -lguile, -lqt (if
828you configured Guile with thread support), and -lrx.
27590f82
JB
829
830If you are using autoconf to generate configuration scripts for your
831application, the following lines should suffice to add the appropriate
832libraries to your link command:
833
834### Find Rx, quickthreads and libguile.
835AC_CHECK_LIB(rx, main)
836AC_CHECK_LIB(qt, main)
837AC_CHECK_LIB(guile, scm_shell)
838
94982a4e
JB
839The Guile 1.2 distribution does not contain sources for the Rx
840library, as Guile 1.0 did. If you want to use Rx, you'll need to
841retrieve it from a GNU FTP site and install it separately.
842
b83b8bee
JB
843* Changes to Scheme functions and syntax
844
e035e7e6
MV
845** The dynamic linking features of Guile are now enabled by default.
846You can disable them by giving the `--disable-dynamic-linking' option
847to configure.
848
e035e7e6
MV
849 (dynamic-link FILENAME)
850
851 Find the object file denoted by FILENAME (a string) and link it
852 into the running Guile application. When everything works out,
853 return a Scheme object suitable for representing the linked object
854 file. Otherwise an error is thrown. How object files are
855 searched is system dependent.
856
857 (dynamic-object? VAL)
858
859 Determine whether VAL represents a dynamically linked object file.
860
861 (dynamic-unlink DYNOBJ)
862
863 Unlink the indicated object file from the application. DYNOBJ
864 should be one of the values returned by `dynamic-link'.
865
866 (dynamic-func FUNCTION DYNOBJ)
867
868 Search the C function indicated by FUNCTION (a string or symbol)
869 in DYNOBJ and return some Scheme object that can later be used
870 with `dynamic-call' to actually call this function. Right now,
871 these Scheme objects are formed by casting the address of the
872 function to `long' and converting this number to its Scheme
873 representation.
874
875 (dynamic-call FUNCTION DYNOBJ)
876
877 Call the C function indicated by FUNCTION and DYNOBJ. The
878 function is passed no arguments and its return value is ignored.
879 When FUNCTION is something returned by `dynamic-func', call that
880 function and ignore DYNOBJ. When FUNCTION is a string (or symbol,
881 etc.), look it up in DYNOBJ; this is equivalent to
882
883 (dynamic-call (dynamic-func FUNCTION DYNOBJ) #f)
884
885 Interrupts are deferred while the C function is executing (with
886 SCM_DEFER_INTS/SCM_ALLOW_INTS).
887
888 (dynamic-args-call FUNCTION DYNOBJ ARGS)
889
890 Call the C function indicated by FUNCTION and DYNOBJ, but pass it
891 some arguments and return its return value. The C function is
892 expected to take two arguments and return an `int', just like
893 `main':
894
895 int c_func (int argc, char **argv);
896
897 ARGS must be a list of strings and is converted into an array of
898 `char *'. The array is passed in ARGV and its size in ARGC. The
899 return value is converted to a Scheme number and returned from the
900 call to `dynamic-args-call'.
901
0fcab5ed
JB
902When dynamic linking is disabled or not supported on your system,
903the above functions throw errors, but they are still available.
904
e035e7e6
MV
905Here is a small example that works on GNU/Linux:
906
907 (define libc-obj (dynamic-link "libc.so"))
908 (dynamic-args-call 'rand libc-obj '())
909
910See the file `libguile/DYNAMIC-LINKING' for additional comments.
911
27590f82
JB
912** The #/ syntax for module names is depreciated, and will be removed
913in a future version of Guile. Instead of
914
915 #/foo/bar/baz
916
917instead write
918
919 (foo bar baz)
920
921The latter syntax is more consistent with existing Lisp practice.
922
5dade857
MV
923** Guile now does fancier printing of structures. Structures are the
924underlying implementation for records, which in turn are used to
925implement modules, so all of these object now print differently and in
926a more informative way.
927
161029df
JB
928The Scheme printer will examine the builtin variable *struct-printer*
929whenever it needs to print a structure object. When this variable is
930not `#f' it is deemed to be a procedure and will be applied to the
931structure object and the output port. When *struct-printer* is `#f'
932or the procedure return `#f' the structure object will be printed in
933the boring #<struct 80458270> form.
5dade857
MV
934
935This hook is used by some routines in ice-9/boot-9.scm to implement
936type specific printing routines. Please read the comments there about
937"printing structs".
938
939One of the more specific uses of structs are records. The printing
940procedure that could be passed to MAKE-RECORD-TYPE is now actually
941called. It should behave like a *struct-printer* procedure (described
942above).
943
b83b8bee
JB
944** Guile now supports a new R4RS-compliant syntax for keywords. A
945token of the form #:NAME, where NAME has the same syntax as a Scheme
946symbol, is the external representation of the keyword named NAME.
947Keyword objects print using this syntax as well, so values containing
1e5afba0
JB
948keyword objects can be read back into Guile. When used in an
949expression, keywords are self-quoting objects.
b83b8bee
JB
950
951Guile suports this read syntax, and uses this print syntax, regardless
952of the current setting of the `keyword' read option. The `keyword'
953read option only controls whether Guile recognizes the `:NAME' syntax,
954which is incompatible with R4RS. (R4RS says such token represent
955symbols.)
737c9113
JB
956
957** Guile has regular expression support again. Guile 1.0 included
958functions for matching regular expressions, based on the Rx library.
959In Guile 1.1, the Guile/Rx interface was removed to simplify the
960distribution, and thus Guile had no regular expression support. Guile
94982a4e
JB
9611.2 again supports the most commonly used functions, and supports all
962of SCSH's regular expression functions.
2409cdfa 963
94982a4e
JB
964If your system does not include a POSIX regular expression library,
965and you have not linked Guile with a third-party regexp library such as
966Rx, these functions will not be available. You can tell whether your
967Guile installation includes regular expression support by checking
968whether the `*features*' list includes the `regex' symbol.
737c9113 969
94982a4e 970*** regexp functions
161029df 971
94982a4e
JB
972By default, Guile supports POSIX extended regular expressions. That
973means that the characters `(', `)', `+' and `?' are special, and must
974be escaped if you wish to match the literal characters.
e1a191a8 975
94982a4e
JB
976This regular expression interface was modeled after that implemented
977by SCSH, the Scheme Shell. It is intended to be upwardly compatible
978with SCSH regular expressions.
979
980**** Function: string-match PATTERN STR [START]
981 Compile the string PATTERN into a regular expression and compare
982 it with STR. The optional numeric argument START specifies the
983 position of STR at which to begin matching.
984
985 `string-match' returns a "match structure" which describes what,
986 if anything, was matched by the regular expression. *Note Match
987 Structures::. If STR does not match PATTERN at all,
988 `string-match' returns `#f'.
989
990 Each time `string-match' is called, it must compile its PATTERN
991argument into a regular expression structure. This operation is
992expensive, which makes `string-match' inefficient if the same regular
993expression is used several times (for example, in a loop). For better
994performance, you can compile a regular expression in advance and then
995match strings against the compiled regexp.
996
997**** Function: make-regexp STR [FLAGS]
998 Compile the regular expression described by STR, and return the
999 compiled regexp structure. If STR does not describe a legal
1000 regular expression, `make-regexp' throws a
1001 `regular-expression-syntax' error.
1002
1003 FLAGS may be the bitwise-or of one or more of the following:
1004
1005**** Constant: regexp/extended
1006 Use POSIX Extended Regular Expression syntax when interpreting
1007 STR. If not set, POSIX Basic Regular Expression syntax is used.
1008 If the FLAGS argument is omitted, we assume regexp/extended.
1009
1010**** Constant: regexp/icase
1011 Do not differentiate case. Subsequent searches using the
1012 returned regular expression will be case insensitive.
1013
1014**** Constant: regexp/newline
1015 Match-any-character operators don't match a newline.
1016
1017 A non-matching list ([^...]) not containing a newline matches a
1018 newline.
1019
1020 Match-beginning-of-line operator (^) matches the empty string
1021 immediately after a newline, regardless of whether the FLAGS
1022 passed to regexp-exec contain regexp/notbol.
1023
1024 Match-end-of-line operator ($) matches the empty string
1025 immediately before a newline, regardless of whether the FLAGS
1026 passed to regexp-exec contain regexp/noteol.
1027
1028**** Function: regexp-exec REGEXP STR [START [FLAGS]]
1029 Match the compiled regular expression REGEXP against `str'. If
1030 the optional integer START argument is provided, begin matching
1031 from that position in the string. Return a match structure
1032 describing the results of the match, or `#f' if no match could be
1033 found.
1034
1035 FLAGS may be the bitwise-or of one or more of the following:
1036
1037**** Constant: regexp/notbol
1038 The match-beginning-of-line operator always fails to match (but
1039 see the compilation flag regexp/newline above) This flag may be
1040 used when different portions of a string are passed to
1041 regexp-exec and the beginning of the string should not be
1042 interpreted as the beginning of the line.
1043
1044**** Constant: regexp/noteol
1045 The match-end-of-line operator always fails to match (but see the
1046 compilation flag regexp/newline above)
1047
1048**** Function: regexp? OBJ
1049 Return `#t' if OBJ is a compiled regular expression, or `#f'
1050 otherwise.
1051
1052 Regular expressions are commonly used to find patterns in one string
1053and replace them with the contents of another string.
1054
1055**** Function: regexp-substitute PORT MATCH [ITEM...]
1056 Write to the output port PORT selected contents of the match
1057 structure MATCH. Each ITEM specifies what should be written, and
1058 may be one of the following arguments:
1059
1060 * A string. String arguments are written out verbatim.
1061
1062 * An integer. The submatch with that number is written.
1063
1064 * The symbol `pre'. The portion of the matched string preceding
1065 the regexp match is written.
1066
1067 * The symbol `post'. The portion of the matched string
1068 following the regexp match is written.
1069
1070 PORT may be `#f', in which case nothing is written; instead,
1071 `regexp-substitute' constructs a string from the specified ITEMs
1072 and returns that.
1073
1074**** Function: regexp-substitute/global PORT REGEXP TARGET [ITEM...]
1075 Similar to `regexp-substitute', but can be used to perform global
1076 substitutions on STR. Instead of taking a match structure as an
1077 argument, `regexp-substitute/global' takes two string arguments: a
1078 REGEXP string describing a regular expression, and a TARGET string
1079 which should be matched against this regular expression.
1080
1081 Each ITEM behaves as in REGEXP-SUBSTITUTE, with the following
1082 exceptions:
1083
1084 * A function may be supplied. When this function is called, it
1085 will be passed one argument: a match structure for a given
1086 regular expression match. It should return a string to be
1087 written out to PORT.
1088
1089 * The `post' symbol causes `regexp-substitute/global' to recurse
1090 on the unmatched portion of STR. This *must* be supplied in
1091 order to perform global search-and-replace on STR; if it is
1092 not present among the ITEMs, then `regexp-substitute/global'
1093 will return after processing a single match.
1094
1095*** Match Structures
1096
1097 A "match structure" is the object returned by `string-match' and
1098`regexp-exec'. It describes which portion of a string, if any, matched
1099the given regular expression. Match structures include: a reference to
1100the string that was checked for matches; the starting and ending
1101positions of the regexp match; and, if the regexp included any
1102parenthesized subexpressions, the starting and ending positions of each
1103submatch.
1104
1105 In each of the regexp match functions described below, the `match'
1106argument must be a match structure returned by a previous call to
1107`string-match' or `regexp-exec'. Most of these functions return some
1108information about the original target string that was matched against a
1109regular expression; we will call that string TARGET for easy reference.
1110
1111**** Function: regexp-match? OBJ
1112 Return `#t' if OBJ is a match structure returned by a previous
1113 call to `regexp-exec', or `#f' otherwise.
1114
1115**** Function: match:substring MATCH [N]
1116 Return the portion of TARGET matched by subexpression number N.
1117 Submatch 0 (the default) represents the entire regexp match. If
1118 the regular expression as a whole matched, but the subexpression
1119 number N did not match, return `#f'.
1120
1121**** Function: match:start MATCH [N]
1122 Return the starting position of submatch number N.
1123
1124**** Function: match:end MATCH [N]
1125 Return the ending position of submatch number N.
1126
1127**** Function: match:prefix MATCH
1128 Return the unmatched portion of TARGET preceding the regexp match.
1129
1130**** Function: match:suffix MATCH
1131 Return the unmatched portion of TARGET following the regexp match.
1132
1133**** Function: match:count MATCH
1134 Return the number of parenthesized subexpressions from MATCH.
1135 Note that the entire regular expression match itself counts as a
1136 subexpression, and failed submatches are included in the count.
1137
1138**** Function: match:string MATCH
1139 Return the original TARGET string.
1140
1141*** Backslash Escapes
1142
1143 Sometimes you will want a regexp to match characters like `*' or `$'
1144exactly. For example, to check whether a particular string represents
1145a menu entry from an Info node, it would be useful to match it against
1146a regexp like `^* [^:]*::'. However, this won't work; because the
1147asterisk is a metacharacter, it won't match the `*' at the beginning of
1148the string. In this case, we want to make the first asterisk un-magic.
1149
1150 You can do this by preceding the metacharacter with a backslash
1151character `\'. (This is also called "quoting" the metacharacter, and
1152is known as a "backslash escape".) When Guile sees a backslash in a
1153regular expression, it considers the following glyph to be an ordinary
1154character, no matter what special meaning it would ordinarily have.
1155Therefore, we can make the above example work by changing the regexp to
1156`^\* [^:]*::'. The `\*' sequence tells the regular expression engine
1157to match only a single asterisk in the target string.
1158
1159 Since the backslash is itself a metacharacter, you may force a
1160regexp to match a backslash in the target string by preceding the
1161backslash with itself. For example, to find variable references in a
1162TeX program, you might want to find occurrences of the string `\let\'
1163followed by any number of alphabetic characters. The regular expression
1164`\\let\\[A-Za-z]*' would do this: the double backslashes in the regexp
1165each match a single backslash in the target string.
1166
1167**** Function: regexp-quote STR
1168 Quote each special character found in STR with a backslash, and
1169 return the resulting string.
1170
1171 *Very important:* Using backslash escapes in Guile source code (as
1172in Emacs Lisp or C) can be tricky, because the backslash character has
1173special meaning for the Guile reader. For example, if Guile encounters
1174the character sequence `\n' in the middle of a string while processing
1175Scheme code, it replaces those characters with a newline character.
1176Similarly, the character sequence `\t' is replaced by a horizontal tab.
1177Several of these "escape sequences" are processed by the Guile reader
1178before your code is executed. Unrecognized escape sequences are
1179ignored: if the characters `\*' appear in a string, they will be
1180translated to the single character `*'.
1181
1182 This translation is obviously undesirable for regular expressions,
1183since we want to be able to include backslashes in a string in order to
1184escape regexp metacharacters. Therefore, to make sure that a backslash
1185is preserved in a string in your Guile program, you must use *two*
1186consecutive backslashes:
1187
1188 (define Info-menu-entry-pattern (make-regexp "^\\* [^:]*"))
1189
1190 The string in this example is preprocessed by the Guile reader before
1191any code is executed. The resulting argument to `make-regexp' is the
1192string `^\* [^:]*', which is what we really want.
1193
1194 This also means that in order to write a regular expression that
1195matches a single backslash character, the regular expression string in
1196the source code must include *four* backslashes. Each consecutive pair
1197of backslashes gets translated by the Guile reader to a single
1198backslash, and the resulting double-backslash is interpreted by the
1199regexp engine as matching a single backslash character. Hence:
1200
1201 (define tex-variable-pattern (make-regexp "\\\\let\\\\=[A-Za-z]*"))
1202
1203 The reason for the unwieldiness of this syntax is historical. Both
1204regular expression pattern matchers and Unix string processing systems
1205have traditionally used backslashes with the special meanings described
1206above. The POSIX regular expression specification and ANSI C standard
1207both require these semantics. Attempting to abandon either convention
1208would cause other kinds of compatibility problems, possibly more severe
1209ones. Therefore, without extending the Scheme reader to support
1210strings with different quoting conventions (an ungainly and confusing
1211extension when implemented in other languages), we must adhere to this
1212cumbersome escape syntax.
1213
7ad3c1e7
GH
1214* Changes to the gh_ interface
1215
1216* Changes to the scm_ interface
1217
1218* Changes to system call interfaces:
94982a4e 1219
7ad3c1e7 1220** The value returned by `raise' is now unspecified. It throws an exception
e1a191a8
GH
1221if an error occurs.
1222
94982a4e 1223*** A new procedure `sigaction' can be used to install signal handlers
115b09a5
GH
1224
1225(sigaction signum [action] [flags])
1226
1227signum is the signal number, which can be specified using the value
1228of SIGINT etc.
1229
1230If action is omitted, sigaction returns a pair: the CAR is the current
1231signal hander, which will be either an integer with the value SIG_DFL
1232(default action) or SIG_IGN (ignore), or the Scheme procedure which
1233handles the signal, or #f if a non-Scheme procedure handles the
1234signal. The CDR contains the current sigaction flags for the handler.
1235
1236If action is provided, it is installed as the new handler for signum.
1237action can be a Scheme procedure taking one argument, or the value of
1238SIG_DFL (default action) or SIG_IGN (ignore), or #f to restore
1239whatever signal handler was installed before sigaction was first used.
1240Flags can optionally be specified for the new handler (SA_RESTART is
1241always used if the system provides it, so need not be specified.) The
1242return value is a pair with information about the old handler as
1243described above.
1244
1245This interface does not provide access to the "signal blocking"
1246facility. Maybe this is not needed, since the thread support may
1247provide solutions to the problem of consistent access to data
1248structures.
e1a191a8 1249
94982a4e 1250*** A new procedure `flush-all-ports' is equivalent to running
89ea5b7c
GH
1251`force-output' on every port open for output.
1252
94982a4e
JB
1253** Guile now provides information on how it was built, via the new
1254global variable, %guile-build-info. This variable records the values
1255of the standard GNU makefile directory variables as an assocation
1256list, mapping variable names (symbols) onto directory paths (strings).
1257For example, to find out where the Guile link libraries were
1258installed, you can say:
1259
1260guile -c "(display (assq-ref %guile-build-info 'libdir)) (newline)"
1261
1262
1263* Changes to the scm_ interface
1264
1265** The new function scm_handle_by_message_noexit is just like the
1266existing scm_handle_by_message function, except that it doesn't call
1267exit to terminate the process. Instead, it prints a message and just
1268returns #f. This might be a more appropriate catch-all handler for
1269new dynamic roots and threads.
1270
cf78e9e8 1271\f
c484bf7f 1272Changes in Guile 1.1 (released Friday, May 16 1997):
f3b1485f
JB
1273
1274* Changes to the distribution.
1275
1276The Guile 1.0 distribution has been split up into several smaller
1277pieces:
1278guile-core --- the Guile interpreter itself.
1279guile-tcltk --- the interface between the Guile interpreter and
1280 Tcl/Tk; Tcl is an interpreter for a stringy language, and Tk
1281 is a toolkit for building graphical user interfaces.
1282guile-rgx-ctax --- the interface between Guile and the Rx regular
1283 expression matcher, and the translator for the Ctax
1284 programming language. These are packaged together because the
1285 Ctax translator uses Rx to parse Ctax source code.
1286
095936d2
JB
1287This NEWS file describes the changes made to guile-core since the 1.0
1288release.
1289
48d224d7
JB
1290We no longer distribute the documentation, since it was either out of
1291date, or incomplete. As soon as we have current documentation, we
1292will distribute it.
1293
0fcab5ed
JB
1294
1295
f3b1485f
JB
1296* Changes to the stand-alone interpreter
1297
48d224d7
JB
1298** guile now accepts command-line arguments compatible with SCSH, Olin
1299Shivers' Scheme Shell.
1300
1301In general, arguments are evaluated from left to right, but there are
1302exceptions. The following switches stop argument processing, and
1303stash all remaining command-line arguments as the value returned by
1304the (command-line) function.
1305 -s SCRIPT load Scheme source code from FILE, and exit
1306 -c EXPR evalute Scheme expression EXPR, and exit
1307 -- stop scanning arguments; run interactively
1308
1309The switches below are processed as they are encountered.
1310 -l FILE load Scheme source code from FILE
1311 -e FUNCTION after reading script, apply FUNCTION to
1312 command line arguments
1313 -ds do -s script at this point
1314 --emacs enable Emacs protocol (experimental)
1315 -h, --help display this help and exit
1316 -v, --version display version information and exit
1317 \ read arguments from following script lines
1318
1319So, for example, here is a Guile script named `ekko' (thanks, Olin)
1320which re-implements the traditional "echo" command:
1321
1322#!/usr/local/bin/guile -s
1323!#
1324(define (main args)
1325 (map (lambda (arg) (display arg) (display " "))
1326 (cdr args))
1327 (newline))
1328
1329(main (command-line))
1330
1331Suppose we invoke this script as follows:
1332
1333 ekko a speckled gecko
1334
1335Through the magic of Unix script processing (triggered by the `#!'
1336token at the top of the file), /usr/local/bin/guile receives the
1337following list of command-line arguments:
1338
1339 ("-s" "./ekko" "a" "speckled" "gecko")
1340
1341Unix inserts the name of the script after the argument specified on
1342the first line of the file (in this case, "-s"), and then follows that
1343with the arguments given to the script. Guile loads the script, which
1344defines the `main' function, and then applies it to the list of
1345remaining command-line arguments, ("a" "speckled" "gecko").
1346
095936d2
JB
1347In Unix, the first line of a script file must take the following form:
1348
1349#!INTERPRETER ARGUMENT
1350
1351where INTERPRETER is the absolute filename of the interpreter
1352executable, and ARGUMENT is a single command-line argument to pass to
1353the interpreter.
1354
1355You may only pass one argument to the interpreter, and its length is
1356limited. These restrictions can be annoying to work around, so Guile
1357provides a general mechanism (borrowed from, and compatible with,
1358SCSH) for circumventing them.
1359
1360If the ARGUMENT in a Guile script is a single backslash character,
1361`\', Guile will open the script file, parse arguments from its second
1362and subsequent lines, and replace the `\' with them. So, for example,
1363here is another implementation of the `ekko' script:
1364
1365#!/usr/local/bin/guile \
1366-e main -s
1367!#
1368(define (main args)
1369 (for-each (lambda (arg) (display arg) (display " "))
1370 (cdr args))
1371 (newline))
1372
1373If the user invokes this script as follows:
1374
1375 ekko a speckled gecko
1376
1377Unix expands this into
1378
1379 /usr/local/bin/guile \ ekko a speckled gecko
1380
1381When Guile sees the `\' argument, it replaces it with the arguments
1382read from the second line of the script, producing:
1383
1384 /usr/local/bin/guile -e main -s ekko a speckled gecko
1385
1386This tells Guile to load the `ekko' script, and apply the function
1387`main' to the argument list ("a" "speckled" "gecko").
1388
1389Here is how Guile parses the command-line arguments:
1390- Each space character terminates an argument. This means that two
1391 spaces in a row introduce an empty-string argument.
1392- The tab character is not permitted (unless you quote it with the
1393 backslash character, as described below), to avoid confusion.
1394- The newline character terminates the sequence of arguments, and will
1395 also terminate a final non-empty argument. (However, a newline
1396 following a space will not introduce a final empty-string argument;
1397 it only terminates the argument list.)
1398- The backslash character is the escape character. It escapes
1399 backslash, space, tab, and newline. The ANSI C escape sequences
1400 like \n and \t are also supported. These produce argument
1401 constituents; the two-character combination \n doesn't act like a
1402 terminating newline. The escape sequence \NNN for exactly three
1403 octal digits reads as the character whose ASCII code is NNN. As
1404 above, characters produced this way are argument constituents.
1405 Backslash followed by other characters is not allowed.
1406
48d224d7
JB
1407* Changes to the procedure for linking libguile with your programs
1408
1409** Guile now builds and installs a shared guile library, if your
1410system support shared libraries. (It still builds a static library on
1411all systems.) Guile automatically detects whether your system
1412supports shared libraries. To prevent Guile from buildisg shared
1413libraries, pass the `--disable-shared' flag to the configure script.
1414
1415Guile takes longer to compile when it builds shared libraries, because
1416it must compile every file twice --- once to produce position-
1417independent object code, and once to produce normal object code.
1418
1419** The libthreads library has been merged into libguile.
1420
1421To link a program against Guile, you now need only link against
1422-lguile and -lqt; -lthreads is no longer needed. If you are using
1423autoconf to generate configuration scripts for your application, the
1424following lines should suffice to add the appropriate libraries to
1425your link command:
1426
1427### Find quickthreads and libguile.
1428AC_CHECK_LIB(qt, main)
1429AC_CHECK_LIB(guile, scm_shell)
f3b1485f
JB
1430
1431* Changes to Scheme functions
1432
095936d2
JB
1433** Guile Scheme's special syntax for keyword objects is now optional,
1434and disabled by default.
1435
1436The syntax variation from R4RS made it difficult to port some
1437interesting packages to Guile. The routines which accepted keyword
1438arguments (mostly in the module system) have been modified to also
1439accept symbols whose names begin with `:'.
1440
1441To change the keyword syntax, you must first import the (ice-9 debug)
1442module:
1443 (use-modules (ice-9 debug))
1444
1445Then you can enable the keyword syntax as follows:
1446 (read-set! keywords 'prefix)
1447
1448To disable keyword syntax, do this:
1449 (read-set! keywords #f)
1450
1451** Many more primitive functions accept shared substrings as
1452arguments. In the past, these functions required normal, mutable
1453strings as arguments, although they never made use of this
1454restriction.
1455
1456** The uniform array functions now operate on byte vectors. These
1457functions are `array-fill!', `serial-array-copy!', `array-copy!',
1458`serial-array-map', `array-map', `array-for-each', and
1459`array-index-map!'.
1460
1461** The new functions `trace' and `untrace' implement simple debugging
1462support for Scheme functions.
1463
1464The `trace' function accepts any number of procedures as arguments,
1465and tells the Guile interpreter to display each procedure's name and
1466arguments each time the procedure is invoked. When invoked with no
1467arguments, `trace' returns the list of procedures currently being
1468traced.
1469
1470The `untrace' function accepts any number of procedures as arguments,
1471and tells the Guile interpreter not to trace them any more. When
1472invoked with no arguments, `untrace' untraces all curretly traced
1473procedures.
1474
1475The tracing in Guile has an advantage over most other systems: we
1476don't create new procedure objects, but mark the procedure objects
1477themselves. This means that anonymous and internal procedures can be
1478traced.
1479
1480** The function `assert-repl-prompt' has been renamed to
1481`set-repl-prompt!'. It takes one argument, PROMPT.
1482- If PROMPT is #f, the Guile read-eval-print loop will not prompt.
1483- If PROMPT is a string, we use it as a prompt.
1484- If PROMPT is a procedure accepting no arguments, we call it, and
1485 display the result as a prompt.
1486- Otherwise, we display "> ".
1487
1488** The new function `eval-string' reads Scheme expressions from a
1489string and evaluates them, returning the value of the last expression
1490in the string. If the string contains no expressions, it returns an
1491unspecified value.
1492
1493** The new function `thunk?' returns true iff its argument is a
1494procedure of zero arguments.
1495
1496** `defined?' is now a builtin function, instead of syntax. This
1497means that its argument should be quoted. It returns #t iff its
1498argument is bound in the current module.
1499
1500** The new syntax `use-modules' allows you to add new modules to your
1501environment without re-typing a complete `define-module' form. It
1502accepts any number of module names as arguments, and imports their
1503public bindings into the current module.
1504
1505** The new function (module-defined? NAME MODULE) returns true iff
1506NAME, a symbol, is defined in MODULE, a module object.
1507
1508** The new function `builtin-bindings' creates and returns a hash
1509table containing copies of all the root module's bindings.
1510
1511** The new function `builtin-weak-bindings' does the same as
1512`builtin-bindings', but creates a doubly-weak hash table.
1513
1514** The `equal?' function now considers variable objects to be
1515equivalent if they have the same name and the same value.
1516
1517** The new function `command-line' returns the command-line arguments
1518given to Guile, as a list of strings.
1519
1520When using guile as a script interpreter, `command-line' returns the
1521script's arguments; those processed by the interpreter (like `-s' or
1522`-c') are omitted. (In other words, you get the normal, expected
1523behavior.) Any application that uses scm_shell to process its
1524command-line arguments gets this behavior as well.
1525
1526** The new function `load-user-init' looks for a file called `.guile'
1527in the user's home directory, and loads it if it exists. This is
1528mostly for use by the code generated by scm_compile_shell_switches,
1529but we thought it might also be useful in other circumstances.
1530
1531** The new function `log10' returns the base-10 logarithm of its
1532argument.
1533
1534** Changes to I/O functions
1535
1536*** The functions `read', `primitive-load', `read-and-eval!', and
1537`primitive-load-path' no longer take optional arguments controlling
1538case insensitivity and a `#' parser.
1539
1540Case sensitivity is now controlled by a read option called
1541`case-insensitive'. The user can add new `#' syntaxes with the
1542`read-hash-extend' function (see below).
1543
1544*** The new function `read-hash-extend' allows the user to change the
1545syntax of Guile Scheme in a somewhat controlled way.
1546
1547(read-hash-extend CHAR PROC)
1548 When parsing S-expressions, if we read a `#' character followed by
1549 the character CHAR, use PROC to parse an object from the stream.
1550 If PROC is #f, remove any parsing procedure registered for CHAR.
1551
1552 The reader applies PROC to two arguments: CHAR and an input port.
1553
1554*** The new functions read-delimited and read-delimited! provide a
1555general mechanism for doing delimited input on streams.
1556
1557(read-delimited DELIMS [PORT HANDLE-DELIM])
1558 Read until we encounter one of the characters in DELIMS (a string),
1559 or end-of-file. PORT is the input port to read from; it defaults to
1560 the current input port. The HANDLE-DELIM parameter determines how
1561 the terminating character is handled; it should be one of the
1562 following symbols:
1563
1564 'trim omit delimiter from result
1565 'peek leave delimiter character in input stream
1566 'concat append delimiter character to returned value
1567 'split return a pair: (RESULT . TERMINATOR)
1568
1569 HANDLE-DELIM defaults to 'peek.
1570
1571(read-delimited! DELIMS BUF [PORT HANDLE-DELIM START END])
1572 A side-effecting variant of `read-delimited'.
1573
1574 The data is written into the string BUF at the indices in the
1575 half-open interval [START, END); the default interval is the whole
1576 string: START = 0 and END = (string-length BUF). The values of
1577 START and END must specify a well-defined interval in BUF, i.e.
1578 0 <= START <= END <= (string-length BUF).
1579
1580 It returns NBYTES, the number of bytes read. If the buffer filled
1581 up without a delimiter character being found, it returns #f. If the
1582 port is at EOF when the read starts, it returns the EOF object.
1583
1584 If an integer is returned (i.e., the read is successfully terminated
1585 by reading a delimiter character), then the HANDLE-DELIM parameter
1586 determines how to handle the terminating character. It is described
1587 above, and defaults to 'peek.
1588
1589(The descriptions of these functions were borrowed from the SCSH
1590manual, by Olin Shivers and Brian Carlstrom.)
1591
1592*** The `%read-delimited!' function is the primitive used to implement
1593`read-delimited' and `read-delimited!'.
1594
1595(%read-delimited! DELIMS BUF GOBBLE? [PORT START END])
1596
1597This returns a pair of values: (TERMINATOR . NUM-READ).
1598- TERMINATOR describes why the read was terminated. If it is a
1599 character or the eof object, then that is the value that terminated
1600 the read. If it is #f, the function filled the buffer without finding
1601 a delimiting character.
1602- NUM-READ is the number of characters read into BUF.
1603
1604If the read is successfully terminated by reading a delimiter
1605character, then the gobble? parameter determines what to do with the
1606terminating character. If true, the character is removed from the
1607input stream; if false, the character is left in the input stream
1608where a subsequent read operation will retrieve it. In either case,
1609the character is also the first value returned by the procedure call.
1610
1611(The descriptions of this function was borrowed from the SCSH manual,
1612by Olin Shivers and Brian Carlstrom.)
1613
1614*** The `read-line' and `read-line!' functions have changed; they now
1615trim the terminator by default; previously they appended it to the
1616returned string. For the old behavior, use (read-line PORT 'concat).
1617
1618*** The functions `uniform-array-read!' and `uniform-array-write!' now
1619take new optional START and END arguments, specifying the region of
1620the array to read and write.
1621
f348c807
JB
1622*** The `ungetc-char-ready?' function has been removed. We feel it's
1623inappropriate for an interface to expose implementation details this
1624way.
095936d2
JB
1625
1626** Changes to the Unix library and system call interface
1627
1628*** The new fcntl function provides access to the Unix `fcntl' system
1629call.
1630
1631(fcntl PORT COMMAND VALUE)
1632 Apply COMMAND to PORT's file descriptor, with VALUE as an argument.
1633 Values for COMMAND are:
1634
1635 F_DUPFD duplicate a file descriptor
1636 F_GETFD read the descriptor's close-on-exec flag
1637 F_SETFD set the descriptor's close-on-exec flag to VALUE
1638 F_GETFL read the descriptor's flags, as set on open
1639 F_SETFL set the descriptor's flags, as set on open to VALUE
1640 F_GETOWN return the process ID of a socket's owner, for SIGIO
1641 F_SETOWN set the process that owns a socket to VALUE, for SIGIO
1642 FD_CLOEXEC not sure what this is
1643
1644For details, see the documentation for the fcntl system call.
1645
1646*** The arguments to `select' have changed, for compatibility with
1647SCSH. The TIMEOUT parameter may now be non-integral, yielding the
1648expected behavior. The MILLISECONDS parameter has been changed to
1649MICROSECONDS, to more closely resemble the underlying system call.
1650The RVEC, WVEC, and EVEC arguments can now be vectors; the type of the
1651corresponding return set will be the same.
1652
1653*** The arguments to the `mknod' system call have changed. They are
1654now:
1655
1656(mknod PATH TYPE PERMS DEV)
1657 Create a new file (`node') in the file system. PATH is the name of
1658 the file to create. TYPE is the kind of file to create; it should
1659 be 'fifo, 'block-special, or 'char-special. PERMS specifies the
1660 permission bits to give the newly created file. If TYPE is
1661 'block-special or 'char-special, DEV specifies which device the
1662 special file refers to; its interpretation depends on the kind of
1663 special file being created.
1664
1665*** The `fork' function has been renamed to `primitive-fork', to avoid
1666clashing with various SCSH forks.
1667
1668*** The `recv' and `recvfrom' functions have been renamed to `recv!'
1669and `recvfrom!'. They no longer accept a size for a second argument;
1670you must pass a string to hold the received value. They no longer
1671return the buffer. Instead, `recv' returns the length of the message
1672received, and `recvfrom' returns a pair containing the packet's length
1673and originating address.
1674
1675*** The file descriptor datatype has been removed, as have the
1676`read-fd', `write-fd', `close', `lseek', and `dup' functions.
1677We plan to replace these functions with a SCSH-compatible interface.
1678
1679*** The `create' function has been removed; it's just a special case
1680of `open'.
1681
1682*** There are new functions to break down process termination status
1683values. In the descriptions below, STATUS is a value returned by
1684`waitpid'.
1685
1686(status:exit-val STATUS)
1687 If the child process exited normally, this function returns the exit
1688 code for the child process (i.e., the value passed to exit, or
1689 returned from main). If the child process did not exit normally,
1690 this function returns #f.
1691
1692(status:stop-sig STATUS)
1693 If the child process was suspended by a signal, this function
1694 returns the signal that suspended the child. Otherwise, it returns
1695 #f.
1696
1697(status:term-sig STATUS)
1698 If the child process terminated abnormally, this function returns
1699 the signal that terminated the child. Otherwise, this function
1700 returns false.
1701
1702POSIX promises that exactly one of these functions will return true on
1703a valid STATUS value.
1704
1705These functions are compatible with SCSH.
1706
1707*** There are new accessors and setters for the broken-out time vectors
48d224d7
JB
1708returned by `localtime', `gmtime', and that ilk. They are:
1709
1710 Component Accessor Setter
1711 ========================= ============ ============
1712 seconds tm:sec set-tm:sec
1713 minutes tm:min set-tm:min
1714 hours tm:hour set-tm:hour
1715 day of the month tm:mday set-tm:mday
1716 month tm:mon set-tm:mon
1717 year tm:year set-tm:year
1718 day of the week tm:wday set-tm:wday
1719 day in the year tm:yday set-tm:yday
1720 daylight saving time tm:isdst set-tm:isdst
1721 GMT offset, seconds tm:gmtoff set-tm:gmtoff
1722 name of time zone tm:zone set-tm:zone
1723
095936d2
JB
1724*** There are new accessors for the vectors returned by `uname',
1725describing the host system:
48d224d7
JB
1726
1727 Component Accessor
1728 ============================================== ================
1729 name of the operating system implementation utsname:sysname
1730 network name of this machine utsname:nodename
1731 release level of the operating system utsname:release
1732 version level of the operating system utsname:version
1733 machine hardware platform utsname:machine
1734
095936d2
JB
1735*** There are new accessors for the vectors returned by `getpw',
1736`getpwnam', `getpwuid', and `getpwent', describing entries from the
1737system's user database:
1738
1739 Component Accessor
1740 ====================== =================
1741 user name passwd:name
1742 user password passwd:passwd
1743 user id passwd:uid
1744 group id passwd:gid
1745 real name passwd:gecos
1746 home directory passwd:dir
1747 shell program passwd:shell
1748
1749*** There are new accessors for the vectors returned by `getgr',
1750`getgrnam', `getgrgid', and `getgrent', describing entries from the
1751system's group database:
1752
1753 Component Accessor
1754 ======================= ============
1755 group name group:name
1756 group password group:passwd
1757 group id group:gid
1758 group members group:mem
1759
1760*** There are new accessors for the vectors returned by `gethost',
1761`gethostbyaddr', `gethostbyname', and `gethostent', describing
1762internet hosts:
1763
1764 Component Accessor
1765 ========================= ===============
1766 official name of host hostent:name
1767 alias list hostent:aliases
1768 host address type hostent:addrtype
1769 length of address hostent:length
1770 list of addresses hostent:addr-list
1771
1772*** There are new accessors for the vectors returned by `getnet',
1773`getnetbyaddr', `getnetbyname', and `getnetent', describing internet
1774networks:
1775
1776 Component Accessor
1777 ========================= ===============
1778 official name of net netent:name
1779 alias list netent:aliases
1780 net number type netent:addrtype
1781 net number netent:net
1782
1783*** There are new accessors for the vectors returned by `getproto',
1784`getprotobyname', `getprotobynumber', and `getprotoent', describing
1785internet protocols:
1786
1787 Component Accessor
1788 ========================= ===============
1789 official protocol name protoent:name
1790 alias list protoent:aliases
1791 protocol number protoent:proto
1792
1793*** There are new accessors for the vectors returned by `getserv',
1794`getservbyname', `getservbyport', and `getservent', describing
1795internet protocols:
1796
1797 Component Accessor
1798 ========================= ===============
1799 official service name servent:name
1800 alias list servent:aliases
1801 port number servent:port
1802 protocol to use servent:proto
1803
1804*** There are new accessors for the sockaddr structures returned by
1805`accept', `getsockname', `getpeername', `recvfrom!':
1806
1807 Component Accessor
1808 ======================================== ===============
1809 address format (`family') sockaddr:fam
1810 path, for file domain addresses sockaddr:path
1811 address, for internet domain addresses sockaddr:addr
1812 TCP or UDP port, for internet sockaddr:port
1813
1814*** The `getpwent', `getgrent', `gethostent', `getnetent',
1815`getprotoent', and `getservent' functions now return #f at the end of
1816the user database. (They used to throw an exception.)
1817
1818Note that calling MUMBLEent function is equivalent to calling the
1819corresponding MUMBLE function with no arguments.
1820
1821*** The `setpwent', `setgrent', `sethostent', `setnetent',
1822`setprotoent', and `setservent' routines now take no arguments.
1823
1824*** The `gethost', `getproto', `getnet', and `getserv' functions now
1825provide more useful information when they throw an exception.
1826
1827*** The `lnaof' function has been renamed to `inet-lnaof'.
1828
1829*** Guile now claims to have the `current-time' feature.
1830
1831*** The `mktime' function now takes an optional second argument ZONE,
1832giving the time zone to use for the conversion. ZONE should be a
1833string, in the same format as expected for the "TZ" environment variable.
1834
1835*** The `strptime' function now returns a pair (TIME . COUNT), where
1836TIME is the parsed time as a vector, and COUNT is the number of
1837characters from the string left unparsed. This function used to
1838return the remaining characters as a string.
1839
1840*** The `gettimeofday' function has replaced the old `time+ticks' function.
1841The return value is now (SECONDS . MICROSECONDS); the fractional
1842component is no longer expressed in "ticks".
1843
1844*** The `ticks/sec' constant has been removed, in light of the above change.
6685dc83 1845
ea00ecba
MG
1846* Changes to the gh_ interface
1847
1848** gh_eval_str() now returns an SCM object which is the result of the
1849evaluation
1850
aaef0d2a
MG
1851** gh_scm2str() now copies the Scheme data to a caller-provided C
1852array
1853
1854** gh_scm2newstr() now makes a C array, copies the Scheme data to it,
1855and returns the array
1856
1857** gh_scm2str0() is gone: there is no need to distinguish
1858null-terminated from non-null-terminated, since gh_scm2newstr() allows
1859the user to interpret the data both ways.
1860
f3b1485f
JB
1861* Changes to the scm_ interface
1862
095936d2
JB
1863** The new function scm_symbol_value0 provides an easy way to get a
1864symbol's value from C code:
1865
1866SCM scm_symbol_value0 (char *NAME)
1867 Return the value of the symbol named by the null-terminated string
1868 NAME in the current module. If the symbol named NAME is unbound in
1869 the current module, return SCM_UNDEFINED.
1870
1871** The new function scm_sysintern0 creates new top-level variables,
1872without assigning them a value.
1873
1874SCM scm_sysintern0 (char *NAME)
1875 Create a new Scheme top-level variable named NAME. NAME is a
1876 null-terminated string. Return the variable's value cell.
1877
1878** The function scm_internal_catch is the guts of catch. It handles
1879all the mechanics of setting up a catch target, invoking the catch
1880body, and perhaps invoking the handler if the body does a throw.
1881
1882The function is designed to be usable from C code, but is general
1883enough to implement all the semantics Guile Scheme expects from throw.
1884
1885TAG is the catch tag. Typically, this is a symbol, but this function
1886doesn't actually care about that.
1887
1888BODY is a pointer to a C function which runs the body of the catch;
1889this is the code you can throw from. We call it like this:
1890 BODY (BODY_DATA, JMPBUF)
1891where:
1892 BODY_DATA is just the BODY_DATA argument we received; we pass it
1893 through to BODY as its first argument. The caller can make
1894 BODY_DATA point to anything useful that BODY might need.
1895 JMPBUF is the Scheme jmpbuf object corresponding to this catch,
1896 which we have just created and initialized.
1897
1898HANDLER is a pointer to a C function to deal with a throw to TAG,
1899should one occur. We call it like this:
1900 HANDLER (HANDLER_DATA, THROWN_TAG, THROW_ARGS)
1901where
1902 HANDLER_DATA is the HANDLER_DATA argument we recevied; it's the
1903 same idea as BODY_DATA above.
1904 THROWN_TAG is the tag that the user threw to; usually this is
1905 TAG, but it could be something else if TAG was #t (i.e., a
1906 catch-all), or the user threw to a jmpbuf.
1907 THROW_ARGS is the list of arguments the user passed to the THROW
1908 function.
1909
1910BODY_DATA is just a pointer we pass through to BODY. HANDLER_DATA
1911is just a pointer we pass through to HANDLER. We don't actually
1912use either of those pointers otherwise ourselves. The idea is
1913that, if our caller wants to communicate something to BODY or
1914HANDLER, it can pass a pointer to it as MUMBLE_DATA, which BODY and
1915HANDLER can then use. Think of it as a way to make BODY and
1916HANDLER closures, not just functions; MUMBLE_DATA points to the
1917enclosed variables.
1918
1919Of course, it's up to the caller to make sure that any data a
1920MUMBLE_DATA needs is protected from GC. A common way to do this is
1921to make MUMBLE_DATA a pointer to data stored in an automatic
1922structure variable; since the collector must scan the stack for
1923references anyway, this assures that any references in MUMBLE_DATA
1924will be found.
1925
1926** The new function scm_internal_lazy_catch is exactly like
1927scm_internal_catch, except:
1928
1929- It does not unwind the stack (this is the major difference).
1930- If handler returns, its value is returned from the throw.
1931- BODY always receives #f as its JMPBUF argument (since there's no
1932 jmpbuf associated with a lazy catch, because we don't unwind the
1933 stack.)
1934
1935** scm_body_thunk is a new body function you can pass to
1936scm_internal_catch if you want the body to be like Scheme's `catch'
1937--- a thunk, or a function of one argument if the tag is #f.
1938
1939BODY_DATA is a pointer to a scm_body_thunk_data structure, which
1940contains the Scheme procedure to invoke as the body, and the tag
1941we're catching. If the tag is #f, then we pass JMPBUF (created by
1942scm_internal_catch) to the body procedure; otherwise, the body gets
1943no arguments.
1944
1945** scm_handle_by_proc is a new handler function you can pass to
1946scm_internal_catch if you want the handler to act like Scheme's catch
1947--- call a procedure with the tag and the throw arguments.
1948
1949If the user does a throw to this catch, this function runs a handler
1950procedure written in Scheme. HANDLER_DATA is a pointer to an SCM
1951variable holding the Scheme procedure object to invoke. It ought to
1952be a pointer to an automatic variable (i.e., one living on the stack),
1953or the procedure object should be otherwise protected from GC.
1954
1955** scm_handle_by_message is a new handler function to use with
1956`scm_internal_catch' if you want Guile to print a message and die.
1957It's useful for dealing with throws to uncaught keys at the top level.
1958
1959HANDLER_DATA, if non-zero, is assumed to be a char * pointing to a
1960message header to print; if zero, we use "guile" instead. That
1961text is followed by a colon, then the message described by ARGS.
1962
1963** The return type of scm_boot_guile is now void; the function does
1964not return a value, and indeed, never returns at all.
1965
f3b1485f
JB
1966** The new function scm_shell makes it easy for user applications to
1967process command-line arguments in a way that is compatible with the
1968stand-alone guile interpreter (which is in turn compatible with SCSH,
1969the Scheme shell).
1970
1971To use the scm_shell function, first initialize any guile modules
1972linked into your application, and then call scm_shell with the values
7ed46dc8 1973of ARGC and ARGV your `main' function received. scm_shell will add
f3b1485f
JB
1974any SCSH-style meta-arguments from the top of the script file to the
1975argument vector, and then process the command-line arguments. This
1976generally means loading a script file or starting up an interactive
1977command interpreter. For details, see "Changes to the stand-alone
1978interpreter" above.
1979
095936d2
JB
1980** The new functions scm_get_meta_args and scm_count_argv help you
1981implement the SCSH-style meta-argument, `\'.
1982
1983char **scm_get_meta_args (int ARGC, char **ARGV)
1984 If the second element of ARGV is a string consisting of a single
1985 backslash character (i.e. "\\" in Scheme notation), open the file
1986 named by the following argument, parse arguments from it, and return
1987 the spliced command line. The returned array is terminated by a
1988 null pointer.
1989
1990 For details of argument parsing, see above, under "guile now accepts
1991 command-line arguments compatible with SCSH..."
1992
1993int scm_count_argv (char **ARGV)
1994 Count the arguments in ARGV, assuming it is terminated by a null
1995 pointer.
1996
1997For an example of how these functions might be used, see the source
1998code for the function scm_shell in libguile/script.c.
1999
2000You will usually want to use scm_shell instead of calling this
2001function yourself.
2002
2003** The new function scm_compile_shell_switches turns an array of
2004command-line arguments into Scheme code to carry out the actions they
2005describe. Given ARGC and ARGV, it returns a Scheme expression to
2006evaluate, and calls scm_set_program_arguments to make any remaining
2007command-line arguments available to the Scheme code. For example,
2008given the following arguments:
2009
2010 -e main -s ekko a speckled gecko
2011
2012scm_set_program_arguments will return the following expression:
2013
2014 (begin (load "ekko") (main (command-line)) (quit))
2015
2016You will usually want to use scm_shell instead of calling this
2017function yourself.
2018
2019** The function scm_shell_usage prints a usage message appropriate for
2020an interpreter that uses scm_compile_shell_switches to handle its
2021command-line arguments.
2022
2023void scm_shell_usage (int FATAL, char *MESSAGE)
2024 Print a usage message to the standard error output. If MESSAGE is
2025 non-zero, write it before the usage message, followed by a newline.
2026 If FATAL is non-zero, exit the process, using FATAL as the
2027 termination status. (If you want to be compatible with Guile,
2028 always use 1 as the exit status when terminating due to command-line
2029 usage problems.)
2030
2031You will usually want to use scm_shell instead of calling this
2032function yourself.
48d224d7
JB
2033
2034** scm_eval_0str now returns SCM_UNSPECIFIED if the string contains no
095936d2
JB
2035expressions. It used to return SCM_EOL. Earth-shattering.
2036
2037** The macros for declaring scheme objects in C code have been
2038rearranged slightly. They are now:
2039
2040SCM_SYMBOL (C_NAME, SCHEME_NAME)
2041 Declare a static SCM variable named C_NAME, and initialize it to
2042 point to the Scheme symbol whose name is SCHEME_NAME. C_NAME should
2043 be a C identifier, and SCHEME_NAME should be a C string.
2044
2045SCM_GLOBAL_SYMBOL (C_NAME, SCHEME_NAME)
2046 Just like SCM_SYMBOL, but make C_NAME globally visible.
2047
2048SCM_VCELL (C_NAME, SCHEME_NAME)
2049 Create a global variable at the Scheme level named SCHEME_NAME.
2050 Declare a static SCM variable named C_NAME, and initialize it to
2051 point to the Scheme variable's value cell.
2052
2053SCM_GLOBAL_VCELL (C_NAME, SCHEME_NAME)
2054 Just like SCM_VCELL, but make C_NAME globally visible.
2055
2056The `guile-snarf' script writes initialization code for these macros
2057to its standard output, given C source code as input.
2058
2059The SCM_GLOBAL macro is gone.
2060
2061** The scm_read_line and scm_read_line_x functions have been replaced
2062by Scheme code based on the %read-delimited! procedure (known to C
2063code as scm_read_delimited_x). See its description above for more
2064information.
48d224d7 2065
095936d2
JB
2066** The function scm_sys_open has been renamed to scm_open. It now
2067returns a port instead of an FD object.
ea00ecba 2068
095936d2
JB
2069* The dynamic linking support has changed. For more information, see
2070libguile/DYNAMIC-LINKING.
ea00ecba 2071
f7b47737
JB
2072\f
2073Guile 1.0b3
3065a62a 2074
f3b1485f
JB
2075User-visible changes from Thursday, September 5, 1996 until Guile 1.0
2076(Sun 5 Jan 1997):
3065a62a 2077
4b521edb 2078* Changes to the 'guile' program:
3065a62a 2079
4b521edb
JB
2080** Guile now loads some new files when it starts up. Guile first
2081searches the load path for init.scm, and loads it if found. Then, if
2082Guile is not being used to execute a script, and the user's home
2083directory contains a file named `.guile', Guile loads that.
c6486f8a 2084
4b521edb 2085** You can now use Guile as a shell script interpreter.
3065a62a
JB
2086
2087To paraphrase the SCSH manual:
2088
2089 When Unix tries to execute an executable file whose first two
2090 characters are the `#!', it treats the file not as machine code to
2091 be directly executed by the native processor, but as source code
2092 to be executed by some interpreter. The interpreter to use is
2093 specified immediately after the #! sequence on the first line of
2094 the source file. The kernel reads in the name of the interpreter,
2095 and executes that instead. It passes the interpreter the source
2096 filename as its first argument, with the original arguments
2097 following. Consult the Unix man page for the `exec' system call
2098 for more information.
2099
1a1945be
JB
2100Now you can use Guile as an interpreter, using a mechanism which is a
2101compatible subset of that provided by SCSH.
2102
3065a62a
JB
2103Guile now recognizes a '-s' command line switch, whose argument is the
2104name of a file of Scheme code to load. It also treats the two
2105characters `#!' as the start of a comment, terminated by `!#'. Thus,
2106to make a file of Scheme code directly executable by Unix, insert the
2107following two lines at the top of the file:
2108
2109#!/usr/local/bin/guile -s
2110!#
2111
2112Guile treats the argument of the `-s' command-line switch as the name
2113of a file of Scheme code to load, and treats the sequence `#!' as the
2114start of a block comment, terminated by `!#'.
2115
2116For example, here's a version of 'echo' written in Scheme:
2117
2118#!/usr/local/bin/guile -s
2119!#
2120(let loop ((args (cdr (program-arguments))))
2121 (if (pair? args)
2122 (begin
2123 (display (car args))
2124 (if (pair? (cdr args))
2125 (display " "))
2126 (loop (cdr args)))))
2127(newline)
2128
2129Why does `#!' start a block comment terminated by `!#', instead of the
2130end of the line? That is the notation SCSH uses, and although we
2131don't yet support the other SCSH features that motivate that choice,
2132we would like to be backward-compatible with any existing Guile
3763761c
JB
2133scripts once we do. Furthermore, if the path to Guile on your system
2134is too long for your kernel, you can start the script with this
2135horrible hack:
2136
2137#!/bin/sh
2138exec /really/long/path/to/guile -s "$0" ${1+"$@"}
2139!#
3065a62a
JB
2140
2141Note that some very old Unix systems don't support the `#!' syntax.
2142
c6486f8a 2143
4b521edb 2144** You can now run Guile without installing it.
6685dc83
JB
2145
2146Previous versions of the interactive Guile interpreter (`guile')
2147couldn't start up unless Guile's Scheme library had been installed;
2148they used the value of the environment variable `SCHEME_LOAD_PATH'
2149later on in the startup process, but not to find the startup code
2150itself. Now Guile uses `SCHEME_LOAD_PATH' in all searches for Scheme
2151code.
2152
2153To run Guile without installing it, build it in the normal way, and
2154then set the environment variable `SCHEME_LOAD_PATH' to a
2155colon-separated list of directories, including the top-level directory
2156of the Guile sources. For example, if you unpacked Guile so that the
2157full filename of this NEWS file is /home/jimb/guile-1.0b3/NEWS, then
2158you might say
2159
2160 export SCHEME_LOAD_PATH=/home/jimb/my-scheme:/home/jimb/guile-1.0b3
2161
c6486f8a 2162
4b521edb
JB
2163** Guile's read-eval-print loop no longer prints #<unspecified>
2164results. If the user wants to see this, she can evaluate the
2165expression (assert-repl-print-unspecified #t), perhaps in her startup
48d224d7 2166file.
6685dc83 2167
4b521edb
JB
2168** Guile no longer shows backtraces by default when an error occurs;
2169however, it does display a message saying how to get one, and how to
2170request that they be displayed by default. After an error, evaluate
2171 (backtrace)
2172to see a backtrace, and
2173 (debug-enable 'backtrace)
2174to see them by default.
6685dc83 2175
6685dc83 2176
d9fb83d9 2177
4b521edb
JB
2178* Changes to Guile Scheme:
2179
2180** Guile now distinguishes between #f and the empty list.
2181
2182This is for compatibility with the IEEE standard, the (possibly)
2183upcoming Revised^5 Report on Scheme, and many extant Scheme
2184implementations.
2185
2186Guile used to have #f and '() denote the same object, to make Scheme's
2187type system more compatible with Emacs Lisp's. However, the change
2188caused too much trouble for Scheme programmers, and we found another
2189way to reconcile Emacs Lisp with Scheme that didn't require this.
2190
2191
2192** Guile's delq, delv, delete functions, and their destructive
c6486f8a
JB
2193counterparts, delq!, delv!, and delete!, now remove all matching
2194elements from the list, not just the first. This matches the behavior
2195of the corresponding Emacs Lisp functions, and (I believe) the Maclisp
2196functions which inspired them.
2197
2198I recognize that this change may break code in subtle ways, but it
2199seems best to make the change before the FSF's first Guile release,
2200rather than after.
2201
2202
4b521edb 2203** The compiled-library-path function has been deleted from libguile.
6685dc83 2204
4b521edb 2205** The facilities for loading Scheme source files have changed.
c6486f8a 2206
4b521edb 2207*** The variable %load-path now tells Guile which directories to search
6685dc83
JB
2208for Scheme code. Its value is a list of strings, each of which names
2209a directory.
2210
4b521edb
JB
2211*** The variable %load-extensions now tells Guile which extensions to
2212try appending to a filename when searching the load path. Its value
2213is a list of strings. Its default value is ("" ".scm").
2214
2215*** (%search-load-path FILENAME) searches the directories listed in the
2216value of the %load-path variable for a Scheme file named FILENAME,
2217with all the extensions listed in %load-extensions. If it finds a
2218match, then it returns its full filename. If FILENAME is absolute, it
2219returns it unchanged. Otherwise, it returns #f.
6685dc83 2220
4b521edb
JB
2221%search-load-path will not return matches that refer to directories.
2222
2223*** (primitive-load FILENAME :optional CASE-INSENSITIVE-P SHARP)
2224uses %seach-load-path to find a file named FILENAME, and loads it if
2225it finds it. If it can't read FILENAME for any reason, it throws an
2226error.
6685dc83
JB
2227
2228The arguments CASE-INSENSITIVE-P and SHARP are interpreted as by the
4b521edb
JB
2229`read' function.
2230
2231*** load uses the same searching semantics as primitive-load.
2232
2233*** The functions %try-load, try-load-with-path, %load, load-with-path,
2234basic-try-load-with-path, basic-load-with-path, try-load-module-with-
2235path, and load-module-with-path have been deleted. The functions
2236above should serve their purposes.
2237
2238*** If the value of the variable %load-hook is a procedure,
2239`primitive-load' applies its value to the name of the file being
2240loaded (without the load path directory name prepended). If its value
2241is #f, it is ignored. Otherwise, an error occurs.
2242
2243This is mostly useful for printing load notification messages.
2244
2245
2246** The function `eval!' is no longer accessible from the scheme level.
2247We can't allow operations which introduce glocs into the scheme level,
2248because Guile's type system can't handle these as data. Use `eval' or
2249`read-and-eval!' (see below) as replacement.
2250
2251** The new function read-and-eval! reads an expression from PORT,
2252evaluates it, and returns the result. This is more efficient than
2253simply calling `read' and `eval', since it is not necessary to make a
2254copy of the expression for the evaluator to munge.
2255
2256Its optional arguments CASE_INSENSITIVE_P and SHARP are interpreted as
2257for the `read' function.
2258
2259
2260** The function `int?' has been removed; its definition was identical
2261to that of `integer?'.
2262
2263** The functions `<?', `<?', `<=?', `=?', `>?', and `>=?'. Code should
2264use the R4RS names for these functions.
2265
2266** The function object-properties no longer returns the hash handle;
2267it simply returns the object's property list.
2268
2269** Many functions have been changed to throw errors, instead of
2270returning #f on failure. The point of providing exception handling in
2271the language is to simplify the logic of user code, but this is less
2272useful if Guile's primitives don't throw exceptions.
2273
2274** The function `fileno' has been renamed from `%fileno'.
2275
2276** The function primitive-mode->fdes returns #t or #f now, not 1 or 0.
2277
2278
2279* Changes to Guile's C interface:
2280
2281** The library's initialization procedure has been simplified.
2282scm_boot_guile now has the prototype:
2283
2284void scm_boot_guile (int ARGC,
2285 char **ARGV,
2286 void (*main_func) (),
2287 void *closure);
2288
2289scm_boot_guile calls MAIN_FUNC, passing it CLOSURE, ARGC, and ARGV.
2290MAIN_FUNC should do all the work of the program (initializing other
2291packages, reading user input, etc.) before returning. When MAIN_FUNC
2292returns, call exit (0); this function never returns. If you want some
2293other exit value, MAIN_FUNC may call exit itself.
2294
2295scm_boot_guile arranges for program-arguments to return the strings
2296given by ARGC and ARGV. If MAIN_FUNC modifies ARGC/ARGV, should call
2297scm_set_program_arguments with the final list, so Scheme code will
2298know which arguments have been processed.
2299
2300scm_boot_guile establishes a catch-all catch handler which prints an
2301error message and exits the process. This means that Guile exits in a
2302coherent way when system errors occur and the user isn't prepared to
2303handle it. If the user doesn't like this behavior, they can establish
2304their own universal catcher in MAIN_FUNC to shadow this one.
2305
2306Why must the caller do all the real work from MAIN_FUNC? The garbage
2307collector assumes that all local variables of type SCM will be above
2308scm_boot_guile's stack frame on the stack. If you try to manipulate
2309SCM values after this function returns, it's the luck of the draw
2310whether the GC will be able to find the objects you allocate. So,
2311scm_boot_guile function exits, rather than returning, to discourage
2312people from making that mistake.
2313
2314The IN, OUT, and ERR arguments were removed; there are other
2315convenient ways to override these when desired.
2316
2317The RESULT argument was deleted; this function should never return.
2318
2319The BOOT_CMD argument was deleted; the MAIN_FUNC argument is more
2320general.
2321
2322
2323** Guile's header files should no longer conflict with your system's
2324header files.
2325
2326In order to compile code which #included <libguile.h>, previous
2327versions of Guile required you to add a directory containing all the
2328Guile header files to your #include path. This was a problem, since
2329Guile's header files have names which conflict with many systems'
2330header files.
2331
2332Now only <libguile.h> need appear in your #include path; you must
2333refer to all Guile's other header files as <libguile/mumble.h>.
2334Guile's installation procedure puts libguile.h in $(includedir), and
2335the rest in $(includedir)/libguile.
2336
2337
2338** Two new C functions, scm_protect_object and scm_unprotect_object,
2339have been added to the Guile library.
2340
2341scm_protect_object (OBJ) protects OBJ from the garbage collector.
2342OBJ will not be freed, even if all other references are dropped,
2343until someone does scm_unprotect_object (OBJ). Both functions
2344return OBJ.
2345
2346Note that calls to scm_protect_object do not nest. You can call
2347scm_protect_object any number of times on a given object, and the
2348next call to scm_unprotect_object will unprotect it completely.
2349
2350Basically, scm_protect_object and scm_unprotect_object just
2351maintain a list of references to things. Since the GC knows about
2352this list, all objects it mentions stay alive. scm_protect_object
2353adds its argument to the list; scm_unprotect_object remove its
2354argument from the list.
2355
2356
2357** scm_eval_0str now returns the value of the last expression
2358evaluated.
2359
2360** The new function scm_read_0str reads an s-expression from a
2361null-terminated string, and returns it.
2362
2363** The new function `scm_stdio_to_port' converts a STDIO file pointer
2364to a Scheme port object.
2365
2366** The new function `scm_set_program_arguments' allows C code to set
e80c8fea 2367the value returned by the Scheme `program-arguments' function.
6685dc83 2368
6685dc83 2369\f
1a1945be
JB
2370Older changes:
2371
2372* Guile no longer includes sophisticated Tcl/Tk support.
2373
2374The old Tcl/Tk support was unsatisfying to us, because it required the
2375user to link against the Tcl library, as well as Tk and Guile. The
2376interface was also un-lispy, in that it preserved Tcl/Tk's practice of
2377referring to widgets by names, rather than exporting widgets to Scheme
2378code as a special datatype.
2379
2380In the Usenix Tk Developer's Workshop held in July 1996, the Tcl/Tk
2381maintainers described some very interesting changes in progress to the
2382Tcl/Tk internals, which would facilitate clean interfaces between lone
2383Tk and other interpreters --- even for garbage-collected languages
2384like Scheme. They expected the new Tk to be publicly available in the
2385fall of 1996.
2386
2387Since it seems that Guile might soon have a new, cleaner interface to
2388lone Tk, and that the old Guile/Tk glue code would probably need to be
2389completely rewritten, we (Jim Blandy and Richard Stallman) have
2390decided not to support the old code. We'll spend the time instead on
2391a good interface to the newer Tk, as soon as it is available.
5c54da76 2392
8512dea6 2393Until then, gtcltk-lib provides trivial, low-maintenance functionality.
deb95d71 2394
5c54da76
JB
2395\f
2396Copyright information:
2397
ea00ecba 2398Copyright (C) 1996,1997 Free Software Foundation, Inc.
5c54da76
JB
2399
2400 Permission is granted to anyone to make or distribute verbatim copies
2401 of this document as received, in any medium, provided that the
2402 copyright notice and this permission notice are preserved,
2403 thus giving the recipient permission to redistribute in turn.
2404
2405 Permission is granted to distribute modified versions
2406 of this document, or of portions of it,
2407 under the above conditions, provided also that they
2408 carry prominent notices stating who last changed them.
2409
48d224d7
JB
2410\f
2411Local variables:
2412mode: outline
2413paragraph-separate: "[ \f]*$"
2414end:
2415