2003-11-24 John Harper * version 0.17 2003-10-28 John Harper * unix_processes.c (rep_system): rearranged code so we don't wait in select () when the process has already exited * readline.c: include , and conditionalize header inclusions where appropriate 2003-09-03 John Harper * unix_dl.c: fixes for Mac OS X * lispmach.h: added ppc register assignments 2003-07-26 John Harper * ffi.c: bug fixes; implemented code to compare types and interfaces * ffi.c: tweaks, added functions to give lisp code low-level access to memory structures * unix_dl.c (rep_lookup_dl_symbol): passing an out of bounds value as index means use RTLD_GLOBAL 2003-07-26 John Harper * unix_dl.c, structures.c, repint_subrs.h, ffi.c, fake-libexec, Makefile.in: added rep.ffi module for calling native functions from lisp. Barely tested, incomplete, requires libffi from gcc 2003-05-04 John Harper * rep_gh.h, gh.c, Makefile.in: partial implementation of guile's (deprecated) GH interface 2003-02-25 John Harper * version 0.16.2 2002-10-07 John Harper * numbers.c (Fplus, Fminus, Fdivide, Fmultiply, Fmin, Fmax, Flogior, Flogxor, Flogand, Fgcd): rewritten as SubrV * lispcmds.c (Fnum_eq, Fnum_noteq, Fgtthan, Fltthan, Fgethan, Fltthan): rewritten as SubrV 2002-10-05 John Harper * rep_lisp.h, lispmach.h, lisp.c: support rep_SubrV functions (rep_SubrN type with a special bit set). These take a counted array of arguments. Is often more efficient to call (no consing) * lispcmds.c (Flist, Flist_star, Fappend, Fnconc, Fvector, Fconcat): rewritten to be SubrV instead of SubrN 2002-10-04 John Harper * lispcmds.c (Fconcat): changed to use two passes, one to measure length of new string, one to build it. Increases speed of string-append benchmark by ~40%. (Now ~50% of time is gc) 2002-09-21 John Harper * numbers.c (Finexact_to_exact, Fnumerator, Fdenominator): rewrote these functions to work correctly without gmp, and to be more logical 2002-07-12 John Harper * unix_files.c (rep_expand_file_name): avoid referencing uninitialized data * tuples.c (rep_make_tuple): initialize car field of new tuples to zero, since the gc sweeper checks it (from #88015) 2002-06-25 John Harper * numbers.c: only use GMP random numbers with version 4 and later 2002-06-20 John Harper * version 0.16 2002-05-06 John Harper * gettext.c (bindtextdomaincodeset): new stub. Patch from Christophe Fergeau . Only does anything when not using the build in gettext implementation (which needs to be updated) 2002-03-30 John Harper * sockets.c: added IS_REGISTERED flag so we never try to call rep_deregister_input_fd () on a fd that isn't actually registered (which rep-gtk doesn't like) 2002-03-01 John Harper * timers.c: #ifdef rep_HAVE_UNIX not HAVE_UNIX (from Michael Eriksson ) 2002-02-13 John Harper * numbers.c (Frandom): when seeding, factor in the pid of the process as well as the current time * unix_main.c (rep_getpid): new function * streams.c (Fformat): deleted unused end_of_input label 2001-12-21 John Harper * rep.c: call setlocale (LC_ALL, "") at startup. Patch from Bruno Haible (with some extra preprocessor stuff) 2001-12-18 John Harper * repgdbm.c (Fgdbm_delete): don't add one to the length of the string when calculating dkey.dsize (none of the other functions do) 2001-12-17 John Harper * rep-config.sh, Makefile.in: added --lispdir option * streams.c (Fformat): signal an error on unknown format conversions and end of input string in the middle of a format directive 2001-12-04 John Harper * numbers.c (Finexact_to_exact): made this handle fractional values now (Fnumerator, Fdenominator): if given a float, rationalize it using inexact->exact 2001-11-14 John Harper * files.c (Ffile_ttyp): new function 2001-10-28 John Harper * version 0.15.2 2001-10-20 John Harper * numbers.c (random_new): call mpz_init () on the output value before passing it to mpz_urandomm (). This seems to stop things crashing (Frandom): signal an error if LIMIT <= 0 2001-10-19 John Harper * repgdbm.c (Fgdbm_walk): fixed doc string * readline.c (match_paren): should return an int, not void (pointed out by Karl M. Hegbloom ) * librep.sym: removed Fdebug_frame_environment, Fdebug_inner_frame and Fdebug_outer_frame * lisp.c (skip_chars): don't accept, say, `#!keyX' when asked for `#!key'; check that the input character after the end of the asked for characters is a token delimiter 2001-10-03 John Harper * version 0.15.1 * numbers.c: disabled gmp random numbers, they crash 2001-10-01 John Harper * version 0.15 * numbers.c: also check for HAVE_GMP_RANDINIT 2001-09-23 John Harper * numbers.c, misc.c (Frandom): moved to numbers.c. When gmp is present, always use gmp random integer functions. They should give `good' results for limits up to at least 128 bits, then they start concatenating multiple random values to get their result 2001-09-15 John Harper * continuations.c: allocate continuation and thread typecodes lazily (when they're first needed) * numbers.c (promote_to): don't canonicalize the created rational, since it's denominator is known to be 1 (suggested by Kevin Ryde ) 2001-09-14 John Harper Integrated patch from Tom Bates to fix some bugs on mips-compaq-nonstopux architecture: * unix_files.c, rep-remote.c, realpath.c: if S_ISLINK or S_ISSOCK macros aren't defined, define them in terms of S_IFLNK and S_IFSOCK * misc.c (Fcomplete_string): don't assume strcmp () and strncmp () have exactly the same type or are functions 2001-09-11 John Harper * rep_subrs.h, repint_subrs.h: made rep_undefined_value public * librep.sym: added rep_undefined_value * rep_lisp.h (rep_File): new bit, rep_LFF_SILENT_ERRORS. When set file errors aren't signalled for this file. They're just ignored and sensible values are returned * files.c (Fset_file_ignore_errors): new function * streams.c (rep_stream_puts, rep_stream_putc): don't signal end-of-stream errors if files have been marked to ignore them 2001-09-02 John Harper * misc.c: a couple of small fixes * numbers.c (Flog): now takes an optional BASE parameter - the base of the logarithm to take, instead of defaulting to taking natural logarithms. E.g. (log 4 2) -> 2 2001-08-31 John Harper * streams.c: signal an error if it's not possible to write as many bytes as asked for. Writing is always assumed to block, and no one actually checks the return values of the various output functions, so this is best.. * sockets.c (blocking_write): if an error occurs, shutdown the socket and call the sentinel * unix_processes.c (write_to_process): loop if write () handles fewer characters than we need * weak-refs.c (rep_scan_weak_refs): trivial change * lisp.c (lisp_prin): print address of closures, helps debugging * lisp.c (apply): don't assert that either an exception or a value is returned from every function, instead just print annoying warning messages when this happens * lispmach.h, lisp.c: when searching for keyword arguments, don't check every other argument, check every argument (there's no way of knowing how keywords will be aligned) 2001-08-23 John Harper * weak-refs.c: new file, provide simple weak-reference cells * main.c (rep_init_from_dump): call rep_weak_refs_init () * values.c (Fgarbage_collect): call rep_scan_weak_refs () after calling run_guardians () 2001-08-13 John Harper * continuations.c (Fthread_suspend): reversed test to check if timeout occurred so it matches the documentation * misc.c (Fcurrent_time_string): fixed returning rep_NULL in some unusual cases * lisp.c (Fbacktrace): print backtrace in top to bottom order, not bottom to top 2001-08-09 John Harper * lisp.c (Ffuncall): use apply () instead of rep_funcall () 2001-08-08 John Harper * main.c (get_main_options): --interp also means record line number information. Removed --line-numbers option 2001-08-07 John Harper * origin.c: new file. Records and fetches line numbering information for lisp forms (when enabled). Adds non-trivial memory overhead, but is invaluable for debugging (both at compile- and at run-time) * lisp.c (read_list): call rep_record_origin () on the produced list, giving the stream and starting line of the read form (where possible) (copy_to_vector, bind_lambda_list, bind_lambda_list_1, eval_lambda, apply): removed the eval_args and (kludgey) eval_in_env parameters. Now all function applications going through apply () (ne funcall) must have an _evaluated_ list of arguments. This may cons more in interpreted mode, but simplifies a lot of things and is better for debugging (since only evaluated arguments are put in the stack frame) (Fbacktrace): made output more elegant (again) (Fstack_frame_ref): return a list representing a given frame on the stack (Fdebug_frame_environment, Fdebug_outer_frame, Fdebug_inner_frame): deleted these functions * unix_main.c: adapted a couple of functions for new backtrace format * values.c, symbols.c, repint.h, macros.c, lispmach.h, lispcmds.c, continuations.c: removed the args_evalled_p field of the rep_Call structure, replaced by a current_form field * files.c (Fseek_file): recognize that seeks to the start of the file should reset the line number to one, not munge it 2001-08-02 John Harper * lisp.c: signal an error if EOF is read while parsing a block comment * continuations.c: abuse exit_val field of thread structure while threads are suspended to allow thread-suspend to return true or false depending on whether the timeout was reached or not * rep_lisp.h (rep_DECLARE[1-5]_OPT): new macros, test for arg being false or the given type * numbers.c (rep_get_long_int): fixed some unsignedness problems * unix_processes.c, timers.c, misc.c, lispcmds.c, find.c, files.c, continuations.c: in various places check that optional integer arguments really are integers or false. Also use rep_get_long_int () etc where it makes sense to truncate non-integer values 2001-08-01 John Harper * tables.c (Ftable_unset): fixed bug of not decrementing total_nodes * tables.c (Ftable_size): new function 2001-07-29 John Harper * continuations.c (Fcurrent_thread, Fall_threads): if operating in the zero'th root, and there is no default thread, create one (instead of returning false) 2001-07-26 John Harper * lisp.c (readl): parse `#undefined'. Fixed bug when reading `(#\A)' (would signal an eof too soon) * lisp.c (signal_reader_error): new function, used to signal parse errors. Reports filename and line number for file streams. Also gives a description of why the error occurred in most cases * symbols.c (F_define): return #undefined * symbols.c (rep_undefined_value):: new symbol called `#undefined' * rep_lisp.h, files.c: files get a new field `line_number', and a new flag rep_LFF_BOGUS_LINE_NUMBER. * streams.c (rep_stream_getc, rep_stream_ungetc): update the line_number field of files * lisp.c (fast_getc): handle line_number field of files 2001-07-22 John Harper * lisp.c (readl): don't signal an error when reading EOF immediately after `#\[a-zA-Z]', just return the given character 2001-07-21 John Harper * lisp.c (Fbacktrace): made backtraces cleaner. Added an option backtrace-verbosely which turns on printing argument lists 2001-07-17 John Harper * rep-remote.c (do_readdir): output mode in decimal not octal (since the 0nn octal read syntax was deprecated in rep) * unix_files.c (rep_canonical_file_name): don't preserve trailing slashes, always remove any trailing slashes. Also if realpath () fails (e.g. the file doesn't exist), delete trailing slashes before returning the input * unix_files.c (rep_file_size): use rep_make_long_uint () to create the returned value, instead of always using a fixnum 2001-07-15 John Harper * rep_lisp.h: only do the `#define Qnil &rep_eol_datum' shortcut if __APPLE__ isn't defined, since it doesn't seem to work with Mac OS X (for at least some versions of the toolchain) 2001-07-02 John Harper * version 0.14 2001-06-29 John Harper * streams.c (rep_stream_getc): don't test for end of input by looking for a null byte! Check the actual length of the string! * sockets.c (blocking_write): new function, used to write () into a non-blocking fd, simulating blocking using select (). Used when writing data into sockets 2001-06-26 John Harper * sockets.c (Fsocket_peer_address, Fsocket_peer_port): new functions (Fsocket_address, Fsocket_port): only ever return the details of the local connection point (not the peer in the case of accepted connections) * sockets.c (make_inet_socket): if binding to INADDR_ANY, try to find out the actual address of the server and the actual port number. (Fsocket_server): if PORT is false, use a port of zero, which means `any unused port' * sockets.c (Fsocket_server): HOSTNAME arg can now be nil, meaning to use INADDR_ANY when binding to the socket (listen for all addresses) 2001-06-18 John Harper * repgdbm.c, repsdbm.c (rep_dl_kill): new functions, close all databases before exiting 2001-06-15 John Harper * rep-md5.c: added some comments and doc strings 2001-06-14 John Harper * numbers.c (rep_parse_number): don't call mpz_init_set_str () on BUF since it may not be zero-terminated. Instead copy the string to the stack and terminate it there * rep-md5.c: new module, rep.util.md5. Exports two functions currently, md5-string and md5-local-file. * fake-libexec, Makefile.in: build rep.util.md5 module * md5.c, md5.h: MD5 message digest implementation. Taken from GNU textutils-1.22 (originally written by Ulrich Drepper) * misc.c (Fcrypt): new function, wrapper for crypt(3) if it's available 2001-06-12 John Harper * repint_subrs.h, lisp.c: don't declare Qrep_lang_interpreter in lisp.c as well as in structures.c. Instead add declarations for all values declared in structures.c 2001-06-08 John Harper * lispmach.h: disable mc68000 register assignments - I've had one report of them causing the vm to crash while building the compiler * unix_processes.c (run_process): open and initialize the slave side of the pty connection _before_ forking (instead of in the child process). This avoids a race condition where the master side may try to write into its side of the pty before the slave side has been initialized correctly. Thanks to Paolo Bonzini for pointing out this problem (and the solution) 2001-06-04 John Harper * continuations.c (Fmake_suspended_thread): new function * continuations.c (make_thread): when creating the default thread, save _it's_ environment, don't resave the environment of the other created thread! 2001-04-22 John Harper * unix_main.c (rep_event_loop): only wait for input events if no unhandled exception. Now if rep_redisplay_fun calls lisp code, errors will be handled more promptly 2001-04-20 John Harper * structures.c (Fexport_bindings): flush the symbol from the cache even if we just set the is_exported bit 2001-04-16 John Harper * unix_dl.c: include if HAVE_SYS_DL_H is defined and HAVE_DL_H isn't (for UnixWare) * misc.c: include (needed for strncasecmp () on UnixWare) 2001-04-09 John Harper * version 0.13.6 (from branch-0-13) 2001-04-05 John Harper * numbers.c (INSTALL_LOCALE): fixed a really stupid bug in this macro. It never actually installed the new locale! 2001-03-26 John Harper * Makefile.in: added a `check' target 2001-03-22 John Harper * version 0.13.5 * numbers.c (rep_parse_number, rep_print_number_to_string): use a macro to save and install the locale. The old way was broken since I didn't realize that setlocale returns the current locale, not the previous one 2001-03-21 John Harper * unix_processes.c (run_process, rep_system): if the child process has to abort for some reason (e.g. exec fails), use _exit () instead of exit (). This avoids calling any atexit handlers (which were inherited from the parent process, and may, for example, close the X connection if GTK+ is loaded) This fixes the tar-file-handler-broken-on-solaris problem 2001-03-12 John Harper * numbers.c (rep_parse_number): if strto[l]l gives a range error, it's not possible to fall back to the float parsing code (since the radix may not be decimal). Instead, use a special helper function to parse an integer with an arbitrary base to a double, then if this succeeds decide whether to use an inexact or exact representation to store the number [ This fixes a bug reported on HP-UX, when using --without-gmp and there is no known strtoll function ] 2001-02-20 John Harper * rep_subrs.h (rep_message_fun): declared using extern (patch from albert chin ) 2001-02-19 John Harper * lispmach.h: fixed comment * repdoc.c: include 2001-02-10 John Harper * sockets.c (make_inet_socket): remember to convert the port number to network byte order before storing it in sin_port (fill_in_address): convert the port number from network to host byte order 2001-01-28 John Harper * continuations.c (Fthread_join): as part of the THREAD declaration, check that it's a member of the current dynamic root 2001-01-21 John Harper * symbols.c (Fdefvar): the DEFAULT-VALUE parameter is now optional, it defaults to false 2001-01-08 John Harper * lisp.c: changed the Lisp reader to treat #\return characters as whitespace. (Fixes sawfish bug 5231) 2001-01-04 John Harper * version 0.13.4 2000-12-20 John Harper * librep.sym: added rep_file_type and rep_guardian_type (doh!) 2000-12-04 John Harper * version 0.13.3 * symbols.c (Funintern): should use OB_NIL to mark end of symbol buckets, not rep_NULL 2000-11-28 John Harper * timers.c (Lisp_Timer): made bitfields unsigned 2000-11-27 John Harper * lisp.c: fixes for previous [premature-]end-of-stream changes 2000-11-24 John Harper * lisp.c (Qpremature_end_of_stream): new error type. This is used to mark eof being received while in the middle of parsing something. Qend_of_stream is now only raised when an eof is read before anything but whitespace has been read. This fixes the bug that Fload_file () would swallow end-of-stream errors (assuming that they just represent reading upto the end of the file), hiding real errors where eof occurs in the middle of a construct being parsed 2000-11-15 John Harper * repint_subrs.h, rep_subrs.h: moved the low-level unix file operations to repint_subrs.h * Makefile.in, librep.sym: when building librep.la, use the librep.sym file and the -export-symbols libtool option to define which symbols should be retained in the library 2000-11-14 John Harper * rep_regexp.h, regexp.c: be sure to use unsigned char's when converting values to int (for functions, etc. Adapted from a patch to Jade by Andrew Rodionoff ) 2000-11-12 John Harper * readline.c (Freadline): accept optional second arg the function to call to generate completions of a given word. When supplied this overrides the `rl-completion-generator' global. Also, when no libreadline is present, don't use printf to print a user-supplied string, use fputs (and send it to stderr, not stdout) 2000-11-11 John Harper * lisp.c (rep_readl, fast_getc): instead of checking whether the stream is a local file each time fast_getc () is called, check in rep_readl () then save the result. Added a local function readl () -- the body of rep_readl () 2000-11-10 John Harper * rep_regexp.h, regexp.c (rep_regexp_max_depth): new variable, upper bound on the number of times that regmatch () may be called recursively. Prevents the stack from exploding on pathological matches 2000-11-03 John Harper * numbers.c: if LONG_LONG_{MIN,MAX} aren't defined, define as LONG_{MIN,MAX} (evil hack, but should allow compilation to succeed) 2000-10-27 John Harper * unix_files.c (rep_expand_file_name): added extra case to translate `/..' to `/' 2000-10-25 John Harper * numbers.c, main.c: instead of doing setlocale (LC_NUMERIC, "C") at init-time, do it each time that a floating point number is read or written (need to remove the code from gtk/gnome bindings also) 2000-10-23 John Harper * version 0.13.2 2000-10-06 John Harper * Makefile.in (check-dl): a target to check that each plugin .la file contains a non-null `dlname=' entry. (Which would prevent rep being able to load the library) 2000-09-28 John Harper * version 0.13.1 * fake-libexec: patch from John H. Palmieri to link to libfoo.so as well as foo.la (for Tru64?) 2000-09-27 John Harper * misc.c (strncasecmp): define if the system doesn't have it 2000-09-24 John Harper * find.c (rep_string_modified): new function, removes the modified string from the regexp cache if it's stored there * lispcmds.c, misc.c (Faset, Ftranslate_string): call rep_string_modified () 2000-09-23 John Harper * lisp.c (rep_read_symbol): accept an OBARRAY parameter (rep_readl): read keywords into their own obarray * symbols.c (Fmake_keyword, rep_keyword_obarray): use a dedicated obarray for keyword symbols * lisp.c: use uninterned symbols for #!optional, #!rest and #!key * symbols.c (rep_scm_f, rep_scm_t): now uninterned symbols 2000-09-22 John Harper * unix_dl.c (rep_open_dl_library): check if snprintf () exists before using it (patch from Philippe.Defert@cern.ch) 2000-09-20 John Harper * version 0.13 2000-09-19 John Harper * structures.c (Fintern_structure): load into the *user-structure* instead of the *root-structure* 2000-09-18 John Harper * main.c (rep_init_from_dump): call setlocal (LC_NUMERIC, "C") so that floating point I/O always uses `.' as fraction separator (e.g. fr locale uses `,') 2000-09-14 John Harper * sockets.c (Fsocketp): new function (socket_putc, socket_puts): signal an error for inactive sockets, return 0 if nothing can be written, not -1 * unix_processes.c, sockets.c (read_from_one_fd, client_socket_output): only ever check errno if actual < 0 * sockets.c (make_socket): was testing if result of socket () == 0 not -1 to check for errors (make_local_socket): call Flocal_file_name () on the address * sockets.c: if [AP]F_LOCAL isn't defined, but [AP]F_UNIX is, use that instead 2000-09-11 John Harper * symbols.c (F_define): optional third-arg DOC-STRING, use rep_documentation_property to find the property to store it under * structures.c (rep_documentation_property): new function, returns the property used to store documentation in a symbol's plist for a binding in a patrticular module 2000-09-10 John Harper * fake-libexec: delete .libexec before [re]creating it 2000-09-09 John Harper * sockets.c: new module rep.io.sockets; provides interface to SOCK_STREAM sockets, unix and internet domains * unix_main.c (rep_add_event_loop_callback): new function (rep_proc_periodically): moved this function from unix_processes.c, it now runs a sequence of callbacks added by the above function * unix_processes.c (rep_proc_periodically): now a local function, added as an event loop callback (can this be made into a plugin now?) 2000-09-08 John Harper * symbols.c: moved some functions out of rep.lang.symbols into rep.lang.interpreter or rep.structures * main.c (rep_load_environment): added rep.regexp to list of structures that have lisp initial code 2000-09-05 John Harper * structures.c (rep_structures_init): moved `provide', `require' and `featurep' from rep.structures to rep.module-system * Makefile.in: .libexec depends on $(DL_OBJS) * lispmach.h: when OPTIMIZE_FOR_SPACE is defined don't bother inlining SAFE_NEXT, the assertions add too much overhead 2000-09-04 John Harper * unix_dl.c (rep_open_dl_library): when no `dlname=' line was found, include the name of the file when signalling an error * structures.c (Fintern_structure): don't name the module after the thing we're trying to load (this means that module files must contain `define-structure' not `structure forms 2000-09-03 John Harper * values.c, unix_processes.c, unix_main.c, timers.c, tables.c, symbols.c, structures.c, streams.c, repsdbm.c, repint_subrs.h, repgdbm.c, rep_subrs.h, numbers.c, misc.c, main.c, macros.c, lispmach.c, lispcmds.c, lisp.c, fluids.c, find.c, files.c, datums.c, continuations.c: changed magic doc string tags from `::doc:SYMBOL::' to `::doc:MODULE#SYMBOL::' 2000-09-02 John Harper * lisp.c (rep_assign_args): new function, for binding C variables to a list of arguments * main.c (rep_handle_input_exception): fixed bug of returning with a null result after catching Qquit * unix_main.c (rep_accept_input_for_callbacks): new function, obsoletes rep_accept_input which just accepted a single callback (rep_accept_input_for_fds): new function * unix_processes.c (rep_register_process_input_handler): new function, adds a handler to those dispatched by accept-process-input (Faccept_process_input): able to accept input for more than one source (will be used by the mythical `socket' plugin) (Faccept_process_input_1): new function, just listens for input from a single subprocess 2000-09-01 John Harper * unix_files.c (rep_expand_file_name): fix bug of expanding `../..' to `'. Also, don't allow null strings to be returned, output `.' instead 2000-08-31 John Harper * rep.h, rep_config.h.in, Makefile.in, rep-config.sh: don't have machine-local defs in rep.h (under $prefix/include). Let configure build rep_config.h, install it under libexec, then include it from rep.h 2000-08-30 John Harper * rep_subrs.h: s/new/new_/ and s/template/template_/ in argument names to allow inclusion by C++ code 2000-08-28 John Harper * tables.c: added doc strings * symbols.c (Fmake_keyword): signal an error if the argument is itself a keyword 2000-08-27 John Harper * lispmach.h: implemented OP_FOO_ARG_ changes; optimized gc protection handling; fixed bug of exiting the vm and possibly gc'ing with undefined protection * bytecodes.h: renamed OP_FOO_ARG_WITH_DEFAULT as OP_FOO_ARG_. These now leave one or two values on the stack, first a bool signifying whether the parameter was defined or not, and, if it was, its value * lisp.c (bind_lambda_list_1): now evaluates default values of #!optional and #!key arguments (in the environment of the closure being called, _without_ any of the bindings currently being instantiated) * tables.c (Ftable_bound_p): new function 2000-08-25 John Harper * numbers.c (rep_print_number_to_string): minor changes to non-gmp bignum case 2000-08-24 John Harper * main.c (rep_top_level_recursive_edit): new function, called by apps as their top-level event-loop. Calls recursive-edit but with extra protection for unhandled exceptions that shouldn't terminate the program * symbols.c (Fdefvar): only eval the value form if setting the value of the special variable 2000-08-18 John Harper * continuations.c (thread_suspend): POLL-ARG is now `void *' not `repv' 2000-08-17 John Harper * continuations.c: moved get_stack_top () into save_stack (); should remove possibility from reading above current top of stack * rep_regexp.h, regexp.c, continuations.c, find.c: renamed NSUBEXP as rep_NSUBEXP to avoid namespace pollution * lispmach.h: factored out the core of the vm from lispmach.c; it's parameterized by a number of preprocessor macros * lispmach.c: include lispmach.h * safemach.c: module `rep.vm.safe-interpreter'. An error checking virtual machine as a plugin * symbols.c (rep_bind_special): new function * lisp.c (rep_bind_lambda_list_1): support default values for #!optional and #!key parameters. Syntax is `( )'. But note that unlike CL, is _not_ evaluated. This may change in the future, so only use self-evaluating objects for now.. * lispmach.c, bytecodes.h (OP_OPTIONAL_ARG_WITH_DEFAULT, OP_KEYWORD_ARG_WITH_DEFAULT): new instructions 2000-08-16 John Harper * rep_lisp.h (rep_SF_KEYWORD, rep_SF_LITERAL): new flags (rep_SF_KEYWORDP, rep_SYMBOL_LITERAL_P): new macros * lisp.c (rep_readl): read #!SYMBOL as a symbol, and #:SYMBOL as a keyword symbol (self evaluating) (rep_bind_lambda_list_1): deprecated &optional and &rest, they intrude too much on the symbol syntax. Replaced by #!optional and #!rest (syntax from MIT Scheme). Also support #!key defining keyword parameters. E.g. `((lambda (#!key a b) (list a b)) #:b 2 #:a 1) -> (1 2)' * symbols.c (Fmake_keyword, Fkeywordp): new functions (lisp_print): if rep_SF_LITERAL is set, print without any quoting; if a keyword, don't quote the initial `#' * lispmach.c, bytecodes.h (OP_KEYWORD_ARG): new instruction, extracts argument for a given keyword symbol 2000-08-15 John Harper * lispmach.c: put cfa in a register variable, may help sparc * lispmach.c: minor tweaks, mainly for the sparc 2000-08-13 John Harper * lispmach.c, bytecodes.h (OP_NOT_ZERO_P): new instruction * lispcmds.c (Fload_file): fixed to close the file if aborting due to an error while evaluating * lispmach.c (Fvalidate_byte_code): signal a more meaningful error if validation fails (including the current value of `load-filename') 2000-08-12 John Harper * continuations.c (Fcontinuation_callable_p): fixed the extraction of the continuation object from the closure 2000-08-11 John Harper * lisp.c (read_comment): new function. Also `#| ... #|' and `#! ... !#' comments now nest (read_list, rep_readl): use read_comment () * repdoc.c (main): pass GDBM_NOLOCK to gdbm_open () * rep_lisp.h (DEFUN): cast the Ffoo value to (repv (*)()) when assigning to the rep_xsubr struct (needed for C++, from Matt Tucker ) * lispmach.c: changed repv_memset to repv_bzero and made it a macro. Experimented with inline asm `cld; rep; stosl' on i386, but no visible improvement. Move gc-protection initialization before the `again:' label, then update it by hand when tail calling 2000-08-10 John Harper * lispmach.c: implemented the vm architecture changes; these include: - `slot-ref', `slot-set' instructions. Each vm instance gets how ever many slots it requires, basically registers. Used to avoid heap allocating variables that don't get captured - Removed `refq' and `setq' insns. Use `%set' and `ref' instead - subrs don't include their parameter spec. Each vm gets a vector of arguments; the `required-arg', `optional-arg' and `rest-arg' instructions access these (only guaranteed until the first gc) - when TRUST_NO_ONE is defined, heavy-duty assertions are included to check for compiler bugs - don't use GCC variable-length arrays to allocate stacks; use alloca. When tail-calling try to swap argv and stack arrays - remove `list' instruction; compiled to sequence of `cons' * symbols.c (Fdefault_boundp): fixed bug of not converting C boolean to lisp * streams.c (rep_stream_getc): if an unbound file is given as the stream, return EOF, not an error * rep_lisp.h: removed rep_COMPILED_LAMBDA field * lisp.c (rep_readl): when reading compiled subrs, check that elements have correct type (funcall): assert that either result or rep_throw_value isn't rep_NULL * bytecodes.h: various changes to the vm architecture. Bumped major version 2000-08-03 John Harper * rep-xgettext.jl: use rep.i18n.gettext module, removed --only-commands option * numbers.c: use strtoq () if strtoll () isn't available 2000-08-02 John Harper * structures.c (lookup_recursively, Fopen_structures): allow structures to be in `imports' list, not just names of structures. This allows anonymous structures to be imported 2000-08-01 John Harper * continuations.c (primitive_call_cc): added an arg, the continuation to overwrite with the current state (thread_invoke): pass the current continuation in to primitive_call_cc for updating, instead of allocating a new one [ this drastically reduces thread-switch time when the current stack copy is suitable to be overwritten. Current thread switch latency seems to be ~7.5us on my 300MHz PII ] * lispmach.c: fixed top-of-stack caching bugs * continuations.c (exit_barrier_cell): cdr of this is set to raw rep_throw_value, don't use Qnil if rep_throw_value is null (and this was only done in one of the two uses anyway) (make_thread): don't call thread_invoke after thread_delete (since the thread is current, thread_delete will already have called invoke) * lisp.c (read_symbol): deprecated `0xNN' and `0NN' read syntaxes for hexadecimal and octal numbers (use `#xNN' and `#oNN') * main.c (rep_deprecated): new internal function for reporting deprecated features. Only reports each feature once * gettext.c: if using gettext in ../intl/, define gnu_foo as foo__, removes the need to patch the intl files 2000-07-31 John Harper * numbers.c (rep_parse_number): fixed bounds checking of characters for non-base10 conversion * lispmach.c: added code to cache the top of the stack in a [register] variable. Only enabled on non-x86 platforms (i.e. those with a reasonable number of registers). Gets about 8% speedup on sparc * lisp.c: changed error message for void-value * symbols.c, record-profile.c, files.c: use Fstructure_define instead of Fstructure_set where appropriate * symbols.c (Fset): now uses Fstructure_define (for C code) (Freal_set): the actual Lisp `set' function (doesn't define) (F_define): new special form * structures.c (Fstructure_define): new function (Fstructure_set): only create bindings if rep_STF_SET_BINDS flag is set for the structure (unset by default) (Fbinding_immutable_p): check imported bindings as well (Fstructure_exports_all, rep_structure_exports_all): added * repint.h (rep_STF_SET_BINDS): new flag * lispmach.c, bytecodes.h (OP__DEFINE): new instruction * symbols.c (Fdefvar): ignore non-stringp documentation 2000-07-30 John Harper * repint.h: added `#define rep_INTERNAL 1' * rep_lisp.h, datums.c: allocate the '() datum statically, then #define Qnil to this location internally to the library * values.c, repint.h, main.c: hid dumping-specific code behind `#ifdef ENABLE_BROKEN_DUMPING' * values.c (rep_mark_value): removed some redundant tests * datums.c (Qnil): now defined here, no longer a symbol, but a datum denoting end-of-list and boolean-false * symbols.c: don't intern `nil' * lispcmds.c, lisp.c: minor changes for Qnil no longer being a symbol 2000-07-29 John Harper * lispmach.c, bytecodes.h (OP_APPLY): new instruction, applies a function to a list of arguments. Implementation handles tail recursive calls properly (also bumped bytecode minor version) * lisp.c (eval): when recognizing tail recursive function calls, also handle calls made using the `apply' subr * symbols.c, datums.c: #f and #t are now just normal symbols. However their `#' doesn't get quoted when printed * numbers.c (Fdivide): if only one argument, compute (/ 1 X) 2000-07-28 John Harper * lispcmds.c (rep_lispcmds_init): check REP_LOAD_PATH and REP_DL_LOAD_PATH for colon-separated directories to prepend to load-path and dl-load-path respectively. Don't add LD_LIBRARY_PATH anymore * lispmach.c: reimplemented bytecode profiling * lispcmds.c (Fload_file, Fload_dl_file): abstracted from Fload, provide a more primitive interface to loading files (no path searching of file-suffixing) * lispcmds.c (Fload): don't declare trying_dl inside #ifdef HAVE_DYNAMIC_LOADING, it's used always 2000-07-27 John Harper * structures.c, repint.h, lispmach.c, lisp.c: apply_bytecode field of structures is now null to denote the default interpreter, and anything else just gets called. Non-bytecode enabled closures get a function that just returns an error * rep.c: deleted usage function * main.c: make no effort to handle --help, let applications or scripts do it instead * lispcmds.c (Fload): when looking for an entry in the after-load-alist, if a structure was returned, search for the name of that structure 2000-07-25 John Harper * repint.h: make all bitfields unsigned (patch from Albert Chin-A-Young ) * numbers.c: on Solaris use LLONG_{MIN,MAX} (patch from Albert Chin-A-Young ). Always define LONG_LONG_{MIN,MAX} if it doesn't already exist, not only if not using gmp 2000-07-24 John Harper * macros.c (Fmacroexpand_1): do autoloading of macros here * lisp.c (funcall): remove kludge to call macros [ fixes the bug where macros could be called when they shouldn't have been able to be (because the above-mentioned kludge had a test inverted) ] 2000-07-23 John Harper * fake-libexec: script to fake the module hierarchy for uninstalled shared objects * values.c, unix_processes.c, unix_main.c, unix_dl.c, timers.c, tables.c, symbols.c, structures.c, streams.c, repsdbm.c, repint_subrs.h, repint.h, repgdbm.c, rep_subrs.h, rep.c, record-profile.c, readline.c, numbers.c, misc.c, main.c, macros.c, lispmach.c, lispcmds.c, lisp.c, gettext.c, fluids.c, find.c, files.c, datums.c, continuations.c: changed the module layout that's used when adding subroutines [ previous names are given aliases to preserve compatibility ] * files.c (file_handler_ref): new function, looks for symbol in rep.io.file-handlers module * unix_dl.c: don't handle `rep_dl_feature' or `rep_dl_subrs' anymore, just print a message to the effect that they're being ignored * structures.c (Fexport_bindings): new function * structures.c: changed to using a 4-way set-associative cache instead of direct-mapped. Avoids almost all conflict misses induced by the larger number of modules. Also halved the number of sets (so the overall size doubles) * repint.h, structures.c: divide by 8 instead of 16 when hashing symbol addresses * rep.c: load `rep/user' instead of `rep' * numbers.c: on AIX use LONGLONG_INT instead of LONG_LONG_INT (adapted from Dan McNichol ) * lispcmds.c (Fcase): deleted, now a macro 2000-07-21 John Harper * unix_files.c (rep_structure_file): new function, do the structure-name -> file-name conversion (currently: `tr . /') * structures.c (Fintern_structure): convert the structure name to a file name before trying to load it * structures.c: renamed all the %foo functions as foo (except for %structure-ref, since it may return #). Updated all callers * structures.c (rep_alias_structure): new function, create an extra name for the current structure (rep_push_structure_name): new version of rep_push_structure that accepts a lisp string or symbol 2000-07-20 John Harper * version 0.12.4 * Makefile.in: include $(LIBS) and $(GMP_LIBS) when linking librep.la * Makefile.in: libtool needs to be told what mode to use, because sometimes $(CC) is a wrapper script with a funny name (from David Kaelbling ) * lisp.c (rep_call_lisp4): fix stupid typo (from David Kaelbling ) 2000-07-19 John Harper * structures.c (F_structure_set): if setting to a void value, remove the binding 2000-07-18 John Harper * structures.c: only keep hit/miss info when DEBUG is defined. Also record type of misses: collision, conflict or other (F_structure_set): don't invalidate the binding we modify, it's the _binding_ itself that's cached, not its value (lookup_or_add): removed all cached bindings for the symbol being added 2000-07-17 John Harper * lisp.c (rep_load_autoload): removed stuff to autoload modules -- it was broken anyway 2000-07-16 John Harper * numbers.c: check for overflow when using rep_longlong as makeshift bignums. Convert to flonums when they overflow 2000-07-15 John Harper Work to allow alternative bytecode interpreters to be used: * lisp.c (rep_bytecode_interpreter): deleted * structures.c (F_make_structure): inherit `apply_bytecode' field from current structure (or use default bytecode interpreter if no current structure) (F_structure_install_vm): new function * lispmach.c (vm): when calling bytecode, check if calling the same virtual machine or a different one (Frun_byte_code): when called with a structure as first arg, install the vm into that structure * repint.h (rep_struct): moved `exclusion' and `export_all' flags into the car. Added `apply_bytecode' field -- the bytecode interpreter to use for functions with this structure in their closure (rep_USE_FUNARG, rep_USE_DEFAULT_ENV, rep_PUSH_CALL, rep_POP_CALL): don't need to handle bytecode interpreter now * rep_lisp.h (rep_FF_NO_BYTE_CODE): deleted * symbols.c (Fmake_closure): don't set NO_BYTE_CODE flag 2000-07-15 John Harper * symbols.c (symbol_print): stop `+' and `-' symbols being escaped * Makefile.in: make rep-config depend on Makefile * lisp.c (rep_call_lispn): was checking for `rep_bytecode_interpreter == 0' too early * continuations.c: only include call/cc and threading if preprocessor macro `WITH_CONTINUATIONS' is defined * numbers.c: only include bignum/rational support if preprocessor macro `WITH_GMP' is defined. Else use `long long' for non-fixnum integers, and flonums for everything else. (Doesn't check for overflow from long long) 2000-07-14 John Harper * lispcmds.c (Fraise_exception): this replaces Fthrow as most primitive * files.c (rep_get_fh_env): made static, only this file uses it * numbers.c, values.c: don't declare non-static inline functions, C99 makes `inline' imply `static' * record-profile.c: added alloca magic to start of file 2000-07-13 John Harper * record-profile.c (test_interrupt): add null statement after `skip:' label to make it ANSI-legal * lisp.c (rep_string_print): print to a fixed size local buffer, instead of outputting a character at a time (this avoids unneeded system calls when printing to processes) * symbols.c (symbol_print): print to a local buffer, then output in one shot. Also correctly quote symbol names that would otherwise be read as numbers * unix_main.c (rep_sys_os_init): check that `environ != 0' 2000-07-12 John Harper * version 0.12.3 2000-07-11 John Harper * macros.c (Fmacroexpand_1): new function, does a single macro expansion (without caching the result). `macro-environment' may now be a structure instead of a function, in which case it defines the module in which to dereference symbols. Also if a function, it's a function to do a _single_ macro expansion * lispcmds.c (Fload): return nil if file is empty, not null * repgdbm.c (Fgdbm_open): check for defined (GDBM_NOLOCK) before using it 2000-07-06 John Harper * tuples.c (rep_sweep_tuples): performance tweaks 2000-07-10 John Harper * unix_processes.c, lispcmds.c, lisp.c, continuations.c: use static DEFSTRINGs instead of heap-allocating static C strings * numbers.c (rep_get_longlong_int): remember to mpz_clear () the temporary bignum before exiting (prevents space leak) * rep.c: removed inner_main, make rep_call_with_barrier call rep_load_environment directly * Makefile.in: include LDFLAGS in the --libs data when creating rep-config 2000-07-09 John Harper * repgdbm.c (Fgdbm_open): added optional arg FLAGS, a list of symbols. Only current flag is `no-lock' which means to pass the GDBM_NOLOCK flag when opening the db * lispmach.c, bytecodes.h: expand OP_REFN into OP_REFN_[0-7], then implement each variant separately. This allows the first six to know exactly how many cdr's to take, at compile time, giving a 10% speedup (on the `prime' kernel) * unix_dl.c (load_requires): use F_intern_structure instead of Frequire (so that the secondary modules aren't opened in the caller's environment) (rep_open_dl_library): provide the feature (if not a structure), event when it was already loaded 2000-05-31 Karl M. Hegbloom * lispcmds.c (Frplaca, Frplacd): Make both return CONS, like Common Lisp. Update docstrings. 2000-07-08 John Harper * lispcmds.c (Fcall_with_exception_handler): new function, used to implement all exception handling syntax * lispcmds.c (Fcatch, Funwind_protect): deleted, now macros * lisp.c (Fcondition_case): deleted now a macro 2000-07-07 John Harper * lisp.c (rep_mem_error): made this just print a message abort (). Too many functions don't check the return value of allocators (such as Fcons). Perhaps have a mode where rep_alloc loops until it can allocate the memory..? * numbers.c (rep_foldl): new function, as rep_number_foldl, but doesn't check that arguments are numeric, used by Fmin and Fmax * values.c (rep_allocate_cons): fixed type error 2000-07-05 John Harper * repint.h: allocate cons cells in blocks of 8k instead of 4k (16 instead of 8 on 64-bit) * lispcmds.c (Fload): _only ever_ try without a suffix if the NO-SUFFIX option is t. This avoids picking up un-suffixed files by mistake (e.g. from the current directory) 2000-07-04 John Harper * rep_lisp.h (rep_INTERN_SPECIAL): call Fmake_variable_special () on the symbol so that it gets any default value the user has given it [this is compatible with previous library versions] * symbols.c (search_special_environment): inline this when rep_SPECIAL_ENV == Qt 2000-07-03 John Harper * rep-config.sh: source `../libtool --config' then use the libtool method of extracting the flags to hardcode library dirs when linking (-R, etc..). With help from Mark Hewitt and Dan Winship * lisp.c (rep_call_lispn): new function, used by rep_call_lisp[0-4] to call bytecode functions without consing 2000-06-27 John Harper * record-profile.c: mechanism for a basic profiler 2000-06-26 John Harper * continuations.c (rep_thread): added fields `exit_val' (value returned from last form in thread), `poll' and `poll_arg' (callback for polling when trying to wake suspended threads) (thread_invoke, thread_yield): poll suspended threads (thread_invoke): set exit_val of exited threads if they exited normally (thread_suspend): two extra args, `poll' and `poll_arg' (Fthread_join): new function 2000-06-24 John Harper * lispmach.c, lispcmds.c, lisp.c: when signalling Qbad_arg or Qmissing_arg, first element of error data is function object if known, else nil * readline.c (completion_generator): call the function rl-completion-generator in a separate thread context 2000-06-23 John Harper * gettext.c (rep_dl_init): set binding of `_' in `rep' module to point to the `gettext' function 2000-06-22 John Harper * lisp.c (read_symbol): don't treat `0/...' as symbols * numbers.c (rep_parse_number): [rational case] don't modify the input string, error out if divide-by-zero * version 0.12.2 * lisp.c (read_symbol): if first character is a non-symbol character signal an error instead of just returning null * repint.h (inline_Fcons): only declare this `extern inline' if __OPTIMIZE__ is defined as well as __GNUC__ (GCC only inlines in optimizing compilations) 2000-06-21 John Harper * numbers.c (dup, maybe_demote, promote_dup): inline calls to these functions wherever their arguments are fixnums (promote): declare this function inline (ZEROP): new macro, inlines fixnum comparsion for zero [ these changes give 10% speedup on `prime' benchmark ] 2000-06-19 John Harper * structures.c (structure_exports_inherited_p): if export_all flag is set, then return t immediately (F_structure_exports_all): new function 2000-06-18 John Harper * version 0.12.1 * rep.c (usage): added \n\ line terminations, from Sam Falkner * lispmach.c: when CHECK_STACK_USAGE is defined, embed the stack assertions into the SAFE_NEXT macro. This ensures that the stack is checked after _all_ instructions * structures.c, macros.c: include (and if needed) (from George Lebl ) * numbers.c: if SIZEOF_LONG == SIZEOF_LONG_LONG, then use long conversion functions to define long long conversions (from George Lebl ) 2000-06-16 John Harper * repint.h (inline_Fcons): when using GCC define this function `external inline'. It mimics Fcons except it will only cause a procedure call if the cons heap needs to grow * values.c (rep_allocate_cons): new function, factored from Fcons, allocates a new cons block * lispmach.c (make_bytecode_frame, vm): use inline_Fcons where appropriate (for speedup of 4-5%) 2000-06-16 John Harper * version 0.12 2000-06-14 John Harper * lispmach.c (vm): put rep_void_value into call stack when we don't have the actual arguments as a list, not Qnil 2000-06-12 John Harper * main.c (rep_handle_input_exception): don't catch uncaught throws at top-level, it prevents scripts throwing out of top-level recursive edits (maybe make this optional..?) * tables.c: don't store hash values in signed integers 2000-06-10 John Harper * lispmach.c (vm): miscellaneous minor tweaks and cleanups 2000-06-09 John Harper * repint.h: don't include * lispcmds.c: include "build.h" 2000-06-08 John Harper * lispcmds.c (Fnconc): allow last arg to be non-proper-list 2000-06-07 John Harper * symbols.c (Fclosure_name): new function * numbers.c (Fquotient): raise an arith-error if tryign to divide by zero * datums.c: added a comparison function, recursively compares datum values if keys are the same 2000-06-05 John Harper * unix_processes.c: allocate a cell16 type instead of cell8 * structures.c (F_external_structure_ref): allow foo#bar refs to succeed if `foo' has been opened but not accessed * datums.c, lisp.c: moved rep_scm_f and rep_scm_t to datums.c; initialize always, not just when first read 2000-06-01 John Harper * readline.c (rep_dl_init): rl-completion-generator is no longer declared special * lisp.c (eval): only handle ((lambda ..) ..) forms inline if Qlambda is still bound to # * lispcmds.c (Fload): Qafter_load_alist now contains thunks, not forms 2000-05-31 John Harper * bytecodes.h, lispmach.c (OP_BINDOBJ): flushed * lispmach.c: no longer worry about object bindings, so removed rep_[un]bind_object * continuations.c (Fcall_with_object): do object binding locally (rep_[un]bind_object are gone) * lispcmds.c (Fprog1, Fwith_object): removed, now in lisp 2000-05-30 John Harper * lispcmds.c (Fwhile): removed, now in lisp 2000-05-29 John Harper Work to make the interpreter tail recursive: * lisp.c: special form subrs are now called with two repv arguments, the list of parameters and a boolean marking whether or not they occur in a function's tail position (rep_eval, funcall): new functions, as Feval or rep_funcall, but with an extra arg passing in tail position (rep_apply): new function (eval): where possible to tail call (tail position is t, called object is a closure) package the closure and evaluated arguments, then throw them back to the innermost non-tail-position lambda application (eval_lambda): when catching a tail call throw, and this is the innermost non-tail-position, unpackage the call and evaluate it * symbols.c, lispcmds.c: use rep_eval instead of Feval, support tail position arguments * lisp.c (rep_readl): fix bug when reading `#!' when not at the start of a file * lisp.c (rep_readl): recognize #F and #T 2000-05-28 John Harper * lisp.c, numbers.c (read_symbol, rep_readl, Fstring_to_number): added support for the scheme numeric prefixes, i.e. #b, #o, #d, #x, and #e, #i 2000-05-27 John Harper * rep_lisp.h (rep_tuple, rep_TUPLE): new structure (rep_CELL8P): new macro * tuples.c: abstracted the old symbol cell memory management to work for any cells containing two values (plus the car) * values.c (Fgarbage_collect): call rep_sweep_tuples * symbols.c, datums.c: use tuples for memory management of symbols and datums * datums.c (Fmake_datum): removed the PRINTER arg (Fdefine_datum_printer): new function, associates a datum ID with a PRINTER function 2000-05-26 John Harper * repint.h (POS, ABS): new macros * numbers.c (rep_parse_number): better error checking (rep_integer_foldl): new function, checks for INTEGERP args (rep_integer_gcd): new function (Fgcd): generalised to any number of arguments 2000-05-25 John Harper * lisp.c (rep_bind_lambda_list_1): now takes a BINDER arg, a function to call to bind each variable * lispmach.c: support old-style parameter specs as well as encoded ones * symbols.c (rep_call_with_closure): new function * repint.h, rep_lisp.h: moved closure macros and all backtrace stuff from rep_lisp.h to repint.h * lisp.c (rep_funcall): check if rep_bytecode_interpreter == 0 _after_ installing the function's closure * symbols.c: lexical environment for interpreted code is now a list of (LEXTAG . (SYMBOL . VALUE)) so that search_environment can ignore bindings from compiled code. LEXTAG is a value that can't appear normally (rep_add_binding_to_env): new function * structures.c (F_eval_in_structure): now called Feval (the changes to the environment structure mean that it's usually meaningless to eval within a non-null lexical environment) * repint.h: moved some more structure defs here, so that lispmach.c can open-code the `refg' instruction * misc.c (Fcurrent_utime): new function, returns the current unix time in microseconds * unix_main.c (rep_utime): new function * lispmach.c (Fjade_byte_code): now called Frun_byte_code * lispmach.c: many changes, byte code subrs now store parameter spec as an integer (number of parameters), these must now be lexical bindings. This was added since function-call heavy programs were spending too much time in rep_bind_lambda_list_1 (e.g. 17% for qscheme's fibonacci benchmark). The lexical environment of compiled code is no longer an alist (SYMBOL . VALUE); it's now just the list of values * lisp.c (copy_to_vector): new function, factored out of rep_bind_lambda_list (rep_bind_lambda_list_1): removed `&aux' code (rep_funcall): obey the new bytecode interpreter calling conventions (passing arg values in an array) (Feval): this is no longer the lisp-visible `eval' function * lisp.c (init_scm_booleans): remember to statically mark these objects * bytecodes.h (OP_EVAL): deleted (OP_BIND): no longer has an argument, has the OP_EVAL opcode 2000-05-24 John Harper * lispcmds.c (Fload): gc-protect the file name while opening the file 2000-05-23 John Harper * bytecodes.h, lispmach.c (OP_TEST_SCM, OP_TEST_SCM_F): new instructions * rep.c: updated usage text for new options 2000-05-22 John Harper * numbers.c (Fstring_to_number): return Qnil if the string couldn't be parsed (not rep_NULL!) * lispcmds.c (Fappend): last arg may be a non-list now, to form an improper output list 2000-05-21 John Harper * values.c (cons_sweep): don't update global variables each iteration, update temps then copy to globals before exiting 2000-05-18 John Harper * rep.h.in (rep_PTR_SIZED_INT_SIZEOF): new define, set by configure (this used to be a sizeof () statement, but it's needed at cpp-time now) * rep_lisp.h (rep_CELL_ALIGNMENT): this is now set to the size of the `repv' type (not hardcoded to 4). Apparently this is needed for ia64 * main.c (check_configuration): function to check some of the values supplied to configure, will suggest suitable values if any are set wrongly * main.c (rep_init_from_dump): switched order of calls to rep_values_init () and rep_lisp_init () 2000-05-17 John Harper * lisp.c (Fdebug_frame_environment): was matching frame pointers one link too late (Fdebug_inner_frame, Fdebug_outer_frame): new functions for traversing the frame pointers 2000-05-16 John Harper * unix_dl.c (rep_open_dl_library): don't call Fprovide on features that are provided by structures (since the structure hasn't been imported yet) * regexp.c (regnarrate, regprop): made non-static * lisp.c (rep_handle_error): removed all code to print errors, rely totally on Qerror_handler_function 2000-05-15 John Harper * numbers.c (string->number, number->string): implemented these functions * lisp.c (Fdebug_frame_environment): only need to return two values now, the saved environment and the saved structure, do this in a cons cell not a list * lisp.c (read_symbol): fix bug of allowing first non-zero digit of octal numbers to be 8 or 9 * unix_dl.c (rep_open_dl_library): ignore null dlname entries 2000-05-13 John Harper * structures.c (F_eval_in_structure): optional third arg, the environment to install * numbers.c (rep_compare_numbers): new function, the original comparison method that ignores exactness (number_cmp): now treats inexact and exact versions of the same number as being different (i.e. for eql and equal) (rep_number_max, rep_number_min): new functions, propagate any inexactness in their arguments * lispmach.c: handle numeric comparisons correctly, call out to handle max and min * lispcmds.c (Fmemql): new function, member using eql for comparisons (=, >, <, >=, <=): compare numbers specially (folding exactness) (min, max): moved to numbers.c (Fcase): use Feql for comparisons * bytecodes.h, lispmac.h.c (OP_MEMQL, OP_NUM_EQ): new insns 2000-04-29 John Harper * lispmach.c: borrowed and adapted some code from OCaml virtual machine to explicitly assign vm registers to physical registers 2000-04-24 John Harper * lispmach.c: if GNU CC is detected, then build an indirectly threaded interpreter using its computed goto, and label address, features. Initially from Ceri Storey, completed by me * main.c, lisp.c, lispmach.c: call Fgarbage_collect with nil arg not t 2000-04-23 John Harper * repint.h (rep_struct): new flag `export_all'. When set, _all_ local bindings in the structure are exported automatically * structures.c: handle the `export_all' structure flag (rep_structure_exports_all): new function [ Note that this auto-export feature is intended for dynamically defined modules, e.g. the *root-structure* of extensible programs. ] 2000-04-22 John Harper * macros.c: set macro-environment to nil initially * symbols.c (Fclosure_structure): new function, for the compiler * numbers.c (Fintegerp): return t for inexact integers (i.e. floats with no fractional part) 2000-04-21 John Harper * misc.c (Qoperating_system, Qrep_version, Qrep_interface_id, Qrep_build_id, Qupcase_table, Qdowncase_table, Qflatten_table): now lexically bound * bytecodes.h, lispmach.c (OP_FLUID_REF, OP_FLUID_SET, OP_FLUID_BIND): new insns * fluids.c: new file, provides anonymous dynamic bindings * main.c: call rep_fluids_init () * numbers.c (Frealp, Finexactp, Frationalp): deleted, in lisp 2000-04-20 John Harper * numbers.c: don't produce exact results from inexact inputs 2000-04-18 John Harper More work to reduce VM consing, increases performance noticeably: * lisp.c (rep_bind_lambda_list_1): the inner core of rep_bind_lambda_list in a separate function, takes an array of values to bind to variables * lispmach.c: when calling compiled functions use rep_bind_lambda_list_1 to avoid consing a list of arguments * lispmach.c: the binding stack is now a vector allocated on the C stack (like the value stack), this reduces the amount consing done by the VM. The maximum size of the binding stack is stored in the upper 16 bits of the STKREQ argument * lispcmds.c (Fload): never return an unitialized result value * rep_lisp.h (rep_COMPILED_STACK): don't unbox this 2000-04-17 John Harper * symbols.c, repint.h, lispmach.c: track number of variable bindings in frame using a single integer, not a pair (limits number of bindings in each frame to 2^16) * structures.c (F_name_structure): flush the ref cache * streams.c (Fstreamp): deleted (Fpeek_char, Finput_stream_p, Foutput_stream_p): added * lisp.c (F_load_autoload): lisp function for loading autoload stubs 2000-04-15 John Harper * structures.c (F_eval_in_structure): set rep_env to Qnil while evaluating * lisp.c (rep_env): removed the kludge that only if the last element is dotted to `t' will the global environment be searched * lispcmds.c (Fload): set rep_env to Qnil not Qt while loading * lispmach.c, bytecodes.h: removed OP_BINDENV and related code * rep_lisp.h (rep_USE_DEFAULT_ENV): set rep_env to Qnil * symbols.c (Fsave_environment, Fset_environment): deleted (search_environment): only ever returns cons cell or nil * symbols.c (Fsymbol_value, Fdefault_value): fixed bug of allowing special variables not in the environment to be read (i.e. the gaol was broken for specials) * unix_dl.c (rep_open_dl_library): use rep_STRUCTUREP instead of F_structurep * symbols.c (Fset_special_environment): now takes a second argument, the structure whose environment should be set * repint.h, structures.c: moved rep_structure type definition and some macros to * rep_lisp.h (rep_funarg): removed `special_env' field, now stored per structure (module) 2000-04-14 John Harper * lispmach.c, bytecodes.h: removed OP_DSET bytecode * lisp.c (rep_bind_lambda_list): bind parameters in last-first order so that they end up in the environment in first-first order (same as when bound by the compiler) * bytecodes.h: bumped major version to 10 to reflect the new order of lexical bindings made by function application (OP_UNQUOTEALL_0, OP_POP_ALL): new instructions * lispmach.c (OP_UNBINDALL_0, OP_POP_ALL): implemented 2000-04-12 John Harper * values.c (Fgarbage_collect): return stats if arg is t, not if it's nil * rep_lisp.h (rep_funarg): removed next and fh_env fields * files.c: store fh_env in current structure, associated with an uninterned symbol * symbols.c: allocate closures in blocks of N * lisp.c (Qdebug_entry, Qdebug_exit, Qdebug_error_entry): these are now special variables, so they can be accessed from within any structure * datums.c (Fdatum_set): new function * structures.c (F_set_interface): remove the clause that the passed-in interface may be modified, liable to introduce bugs * symbols.c (Fdefault_value, Fset_default, Fdefault_boundp): don't only look at special bindings, look for global lexical bindings as well * lisp.c (rep_load_autoload): when throwing error, don't refer to uninitialized variable 2000-04-11 John Harper * symbols.c (Fdefvar): use default-boundp instead of boundp when checking if whether or not to set the value (Fset_default): if symbol isn't already special, call Fmake_variable_special () on the symbol (Fmake_variable_special): if symbol isn't already special, call rep_get_initial_special_value () to try to forward an existing value 2000-04-10 John Harper * symbols.c (Fdefvar): fixes for working with predefined specials * lispcmds.c (Fload): ignore the NO-SUFFIX parameter while searching for dl libraries * unix_dl.c (rep_open_dl_library): when opening a structure, correctly set feature_sym to the name of the structure 2000-04-09 John Harper * rep_lisp.h (rep_symbol): removed `prop_list' field * symbols.c (plist_structure): namespace for property lists * unix_dl.c (rep_open_dl_library): don't return 0 if the dl has already been loaded * structures.c (F_intern_structure): always load from within the `*root-structure*' (Frequire): don't call %intern-structure, for the above reason, do everything locally (F_make_closure_in_structure): new function 2000-04-07 John Harper Many changes to give rep a module system: * structures.c: new file, provides the first-class environment objects needed to implement the module system, and the core of the module system itself (mostly inspired by Scheme48) * symbols.c: dereference global bindings through structures (print_symbol): escape `#' characters (Fdefvar): if first defvar for the symbol, call rep_get_initial_special_value to try to forward any value set by the user (Fmark_symbol_defined): deleted (Fset_const_variable, Fconst_variable_p): deleted, immutable bindings are provided by structures.c (Qnil, Qt): no longer made special * rep_lisp.h (rep_funarg, struct rep_call_stack): added fields to store the current structure (rep_ADD_INTERNAL_SUBR): new macro, doesn't export the subr (rep_symbol): removed the `value' field * values.c (rep_gc_threshold): doubled to 200k (rep_mark_value): updated for object changes * unix_dl.c (rep_open_dl_library): return a repv result, the structure provided by the dl if applicable * main.c (rep_init_from_dump): call rep_structures_init () and rep_datums_init () (rep_load_environment): handle the caller having a different current structure than the default structure * macros.c (Fmacroexpand): ENVIRONMENT is now a function to call to do the actual expansion if non-nil; this also simplifies the memoization * lispmach.c (Fjade_byte_code): access globals in current structure, deprecated OP_DSET, added OP_STRUCT_REF and OP_SCM_TEST * bytecodes.h (OP_STRUCT_REF, OP_SCM_TEST): new bytecodes * lispcmds.c (Fload): removed the IN-CURRENT-ENV option; filename suffixes are stored in a cons cell in %load-suffixes in the current structure; return value of last loaded form evaluated (Ffeaturep, Fprovide, Frequire): moved to structures.c * lisp.c (rep_readl): read foo#bar as (structure-ref foo bar) (rep_readl, rep_scm_f, rep_scm_t): support scheme booleans (rep_load_autoload): if the filename is a symbol, require that module (eval): increment and check recursion depth counter * timers.c, tables.c, repsdbm.c, repgdbm.c, readline.c, gettext.c: modularized -- these each create their own structure * files.c (rep_call_file_handler): for now, dereference file handler names in the default structure (should probably use a separate namespace..) * datums.c: unmodularized, now part of the core * continuations.c: track addition of structure field to call stack 2000-04-13 John Harper * version 0.11.3 2000-04-12 John Harper * lisp.c (rep_load_autoload): when throwing error, don't refer to uninitialized variable (merged from HEAD) 2000-04-09 John Harper * version 0.11.2 2000-04-06 John Harper * values.c, lispmach.c, lisp.c: removed all min-stack stuff, an ancient relic from the Amiga * lisp.c (fast_getc): inlined getc function that handles reading from files locally (seems to decrease start up time by around 25%), only called from within loops * values.c (cons_sweep): don't try to free unused allocation blocks, profiling shows this function takes around 10% time cumulatively, so attempt to optimize it * continuations.c (primitive_call_cc): save current regexp data across continuations 2000-04-03 John Harper * symbols.c (symbol_cmp): compare symbol names if non-equal * main.c (rep_load_environment): remember to protect the file name until it's actually used 2000-03-29 John Harper * misc.c (rep_misc_init): removed references to `value' field of symbols * symbols.c (Fmark_symbol_defined): new function, sets rep_SF_DEFVAR flag if allowed to (Fdefine_value): deleted, now a macro * lispmach.c (Fjade_byte_code): implement the OP_DSET instruction inline (with comment that it's deprecated) * lispcmds.c (Fdefmacro, Fdefun, Fdefconst): deleted, now macros 2000-03-28 John Harper * numbers.c (rep_number_mul): fix small typo 2000-03-22 John Harper * lisp.c (rep_readl): handle EOF terminated `#\X' formatted characters 2000-03-21 John Harper * unix_dl.c: `#define RTLD_GLOBAL 0' if configure detected a version of Tru64 with a broker loader; this means that librep now fully supports Tru64 (from Aron Griffis ) 2000-03-20 John Harper * continuations.c (thread_invoke): calculate rep_sleep_for () length correctly (was subtracting twice!) 2000-03-19 John Harper * lisp.c (rep_bind_lambda_list, rep_eval_lambda): both have an extra argument, EVAL-IN-ENV. When true rep_bind_lambda_list won't evaluate the arguments in the _previous_ innermost environment, but the _current_ innermost environment. All callers changed. (eval): call inline lambda expressions directly, without evaluating the car to a closure that is then discarded immediately 2000-03-15 John Harper * datums.c: plugin for user-defined opaque data types 2000-03-14 John Harper * lisp.c (rep_readl): some work to accept standard CL and Scheme syntax -- recognize `#| ... |#' block comments; read characters as #\X or #\WORD for WORD in: space, newline, backspace, tab, linefeed, return, page, rubout; read vectors as `#(...)' * lispcmds.c (Fprog2): deleted, now a macro * lispcmds.c (Funwind_protect): noted in doc string that behaviour in conjunction with call/cc is undefined * symbols.c (Fsetq_default): deleted, now a macro 2000-03-13 John Harper * lisp.c (rep_bind_lambda_list): call Fcopy_sequence () on &rest values (may prevent the program being modified) * macros.c: new file, implements Fmacroexpand (). Added a memoization facility for when env == nil. Caches all macro expansions in an eq hash table, discards cached values each gc * lispcmds.c (Fdefmacro): call rep_macros_clear_history () * main.c (rep_init_from_dump): call rep_macros_init () * values.c (Fgarbage_collect): call rep_macros_before_gc () * symbols.c (Flet, Fletstar): deleted, now macros * lispcmds.c (Ffunction, Fif, Fand, For): ditto 2000-03-12 John Harper * version 0.11.1 * lispmach.c (Fjade_byte_code): open-coded some fixnum arithmetic operations * unix_dl.c (x_dlsym) [DLSYM_NEED_USCORE]: use alloca instead of malloc * numbers.c (rep_parse_number): some optimizations 2000-03-11 John Harper * lispcmds.c (Fload): use Fexpand_file_name to concatenate file names with directories * tables.c (Fequal_hash): handle non-fixnum numbers 2000-03-10 John Harper * rep.c, main.c: updated usage information * repgdbm.c (Fgdbm_fetch): always copy the returned string, since it may not be zero terminated 2000-03-07 John Harper * numbers.c (maybe_demote): fixed typo when demoting rationals to bignums * streams.c (Fformat): implemented the `+' and ` ' flags 2000-03-05 John Harper * version 0.11 2000-03-02 John Harper * numbers.c: in most functions possibly returning floats, return integers where possible 2000-03-01 John Harper * numbers.c (rep_print_number_to_string): avoid trying to print non-numeric things as numbers * misc.c (Fsystem): given an interactive decl * repgdbm.c: new file, binding for GDBM. Mostly compatible with sdbm binding * repdoc.c: use GDBM instead of SDBM * values.c (rep_box_string): new function, create a lisp string from a malloc-allocated string (and assume responsibility for its memory) 2000-02-29 John Harper * symbols.c (symbol_print): try harder to never print something that may be read as a number * numbers.c (number_cmp): fix stupid bug of subtracting floats to see if they're equal, but then truncating result to an integer (e.g. (= 0.2 0.8) -> t) 2000-02-28 John Harper * timers.c, repsdbm.c, readline.c, gettext.c: don't use rep_dl_subrs or rep_dl_feature (some BSD systems have (had?) problems with data segment relocations) 2000-02-27 John Harper * values.c: represents strings as a two-word header and a separate chunk of data. This saves one word per string, and may also improve gc performance (only need to touch (contiguous) headers when gc-ing, so better dcache performance) * streams.c (Fformat): use rep_print_number_to_string for all numeric conversions * rep_lisp.h: moved unnecessary definitions to .c files. Changed how strings are represented * lispcmds.c (=, /=): these functions now accept N arguments, and do a general (i.e. not just numeric) comparison * lispmach.c, bytecodes.h: deleted OP_NUMEQ and OP_NUM_NOTEQ; OP_LSH becomes OP_ASH 2000-02-25 John Harper * rep.h.in: added rep_long_long define, will be `long long' if available, `long' otherwise * rep_lisp.h: new type rep_Number, only the bits in the car are publicly accessible * numbers.c: new file, handles all numeric stuff * values.c: don't register numeric types, mark rep_Number * main.c: call rep_numbers_init () * lisp.c: parse new number representations correctly * lispcmds.c: moved all arithmetic functions to numbers.c * bytecodes.h, lispmach.c (OP_QUOTIENT, OP_FLOOR, OP_CEILING, OP_TRUNCATE, OP_ROUND, OP_EXP, OP_LOG, OP_SIN, OP_COS, OP_TAN, OP_SQRT, OP_EXPT): new instructions 2000-02-23 John Harper * continuations.c (rep_max_sleep_for): handle root_barrier == 0 2000-02-17 John Harper * lispmach.c (OP_DSET): call Fdefine_value () to implement this instruction * lispcmds.c (Ffunction): dereference symbols, instead of enclosing them 2000-02-14 John Harper * lispmach.c (Fjade_byte_code): fix typo in OP_SETG instruction * tables.c: added support for weakly-keyed hash tables * continuations.c: test if root_barrier == 0 at sensible points 2000-02-12 John Harper * files.c (rep_file_fdopen): new function, open a file object from a file descriptor and libc mode string 2000-02-09 John Harper * lisp.c (rep_load_autoload): handle overwriting macro definitions (rep_funcall): fixed the macro autoload magic * lispmach.c (Fmake_byte_code_subr): allow a single symbol as the arg spec 2000-02-08 John Harper * lisp.c (Fmacroexpand): while evaluating the macro expansion, bind the special variable macro-environment to the environment passed into macroexpand. This allows macros to expand inner macro forms correctly * continuations.c (Fthread_queue_length): deleted this function, it's pretty useless * readline.c (rep_dl_init): set rl_basic_quote_characters to include only the double-quote character (from Matt Krai) * continuations.c (rep_max_sleep_for): new function, returns the maximum number of milliseconds that the current thread may sleep for * unix_main.c (wait_for_input): use rep_max_sleep_for * continuations.c (make_thread): protect the thunk against gc until it's actually called * lisp.c (rep_funcall): remember to switch environment before loading autoload cells 2000-02-07 John Harper * continuations.c (unlink_thread): unlink from the actual barrier the thread is in, not the current root (thread_suspend): don't use LONG_MAX when setting timeval members, it produces warning with the weird Solaris definition * lisp.c (rep_funcall): don't install closed environments until last possible moment (notably, not until _after_ evaluating any arguments) * lisp.c (read_symbol): make "," and "`" terminate symbols * lispmach.c (bound_specials): fixed for new way of remembering bound variables * lispcmds.c (Fload): fix interpreted-mode breaking dl loads 2000-02-06 John Harper * lispmach.c, bytecodes.h (rep_FORBID, rep_PERMIT): new instructions * lisp.c: call debugger in its own dynamic root * rep.c: create a dynamic root * continuations.c: introduced the idea of continuation barriers, a method of limiting and/or detecting control flow when using continuations. Can be similar to Guile's dynamic roots. Added support for software threads (call-with-object, call-with-dynamic-root, call-with-barrier, continuation-callable-p): functions for manipulating barriers (make-thread, thread-yield, thread-delete, thread-suspend, thread-wake, threadp, thread-suspended-p, current-thread, thread-queue-length, thread-forbid, thread-permit): thread functions * rep_lisp.h (rep_MAY_YIELD, rep_FORBID, rep_PERMIT): new macros dealing with thread preemption (rep_TEST_INT_SLOW): call rep_MAY_YIELD * lisp.c, lispmach.c (rep_funcall, Fjade_byte_code): call rep_MAY_YIELD (preempt threads) at suitable points * unix_main.c (wait_for_input): if it might be beneficial, don't sleep in select (), just poll then yield * misc.c (rep-interface-id): new variable 2000-02-04 John Harper * tables.c (table_mark): remember to mark hash_fun and compare_fun * tables.c (Fequal_hash): improved this to break off at a certain depth of recursion, not to resort to eq hashing for unknown types (use their type code instead), and don't use XOR to combine cons hashes (hash_value): do direct calls for all predefined hash functions 2000-02-03 John Harper * lispmach.c: handle new binding mechanisms, new way of binding exception handlers `(error . (PC . SP))', try to optimize function inlining (for ultrasparc anyway) * lisp.c (rep_special_bindings): new variable, alist of special variable bindings currently in effect (max-lisp-depth): now a single-parameter function * symbols.c (rep_bind_symbol, rep_unbind_symbols): now store binding history as a _single_ cons cell (SPECIALS . LEXICALS), the number of bindings of each type (Fset, Fsymbol_value, Fdefault_value, Fset_default): handle deep binding of special variables * values.c (garbage-threshold, idle-garbage-threshold): now single-parameter functions, not variables * lisp.c, lispcmds.c, rep_lisp.h, symbols.c, values.c: removed all rep_Var cruft * files.c, lisp.c, lispcmds.c, main.c, misc.c, unix_dl.c, unix_main.c: don't access `SYM->value' directly, use Fset and Fsymbol_value * main.c: removed --warn-shadowing option * continuations.c: save and restore rep_special_bindings in the environment now that special bindings are deep-bound 2000-02-02 John Harper * main.c (rep_stack_bottom): moved here from continuations.c * continuations.c: made into a plugin (feature `callcc') * lispcmds.c (Fload): search for foo.la before libfoo.la 2000-02-01 John Harper * tables.c: new file, implements hash tables * lispmach.c (Fjade_byte_code): check if needing to gc before entering the main loop (needed when tail-calling). Also, check for exceeding max-lisp-depth. (First pointed out by Ceri Storey) * rep-xgettext.jl: new options --include and --only-commands * unix_dl.c, timers.c: remember alloca preprocessor magic (pointed out by Daniel Burrows) 2000-01-31 John Harper * repdoc.c: check for errors from sdbm_store () * lisp.c (rep_bind_lambda_list): now handles improper lists of bound variables (i.e. (foo . bar) == (foo &rest bar)) * lispmach.c (Fjade_byte_code): fixed bug in `unbindall' instruction (not resetting impurity correctly) 2000-01-30 John Harper * values.c (rep_box_pointer, rep_unbox_pointer): new functions, translate from C pointers to lisp data, and back again * lisp.c (Fdebug_frame_environment): new function, returns an environment given a frame pointer (Feval): call debug-entry, debug-exit and debug-error-entry with an extra argument, a boxed frame pointer * lispmach.c (Fjade_byte_code): handle calling subrs that are wrapped in closures * continuations.c: removed unused STACK_SLOP definition, removed extra call to FLUSH_REGISTER_WINDOWS 2000-01-28 John Harper * main.c (rep_init_from_dump): find the stack base by looking at the passed in address of `argc'. This is a kludge, but it's the best method I can find.. * continuations.c: fixes for Linux/ix86, let's hope it still works on sparc! * continuations.c: support for `call/cc' (also has the alias call-with-current-continuation). Only tested on sparc so far, may need tweaking for other architectures. Doesn't attempt to save or restore dynamic bindings * main.c (rep_init_from_dump): init continuations, and save initial stack pointer * find.c (saved_regexp_data): made global, and added rep_ prefix * files.c, repint.h: moved file-ops enum decl and blocked_ops structure decl to repint.h, since continuations need access * lisp.c (lisp_depth, max_lisp_depth): added rep_ prefix and made global 2000-01-27 John Harper * symbols.c (Fget, Fput): properties don't have to be symbols now, use `equal' comparisons as in scheme 2000-01-25 John Harper * unix_main.c (interrupt_signal_handler, termination_signal_handler): if a signal arrives before a previous signal has been handled (i.e. the system is unreponsive) then raise the signal causing the default action (i.e. termination) * rep-xgettext.jl: support for outputting strings as a file of C code * rep-xgettext.jl (scan): support `case' statement * main.c (rep_top_level_exit): call before-exit-hook * unix_main.c (rep_sig_restart): use siginterrupt () instead of sigaction () when possible (it seems to be more reliable in certain cases?) 2000-01-24 John Harper * lispcmds.c (Fcase): new special form, similar to in scheme but with `t' instead of `else' * lispmach.c (Fjade_byte_code): if GCC, use its variable length auto arrays to allocate the VM stack. This allows tail-calls to deallocate and free stack as required, cf. alloca () which gives no method for freeing allocations except by exiting the function 2000-01-23 John Harper * bytecodes.h (OP_RETURN, OP_UNBINDALL): new instructions * lispmach.c: implement OP_RETURN and OP_UNBINDALL (which actually unbinds to the argument values, not all the way). Keep track of dynamic `impurity', the number of dynamic bindings (of any type) currently in place. When this value is zero, and there's a call to bytecode followed by a return instruction, just goto the top of the function, snapping all arguments * symbols.c (rep_unbind_symbols): now returns an int, the number of _special_ bindings it removed * lisp.c (rep_funcall): explicitly protect fun and args, now. Tail-calling may remove them from the call stack (rep_bind_lambda_list): try to optimize lexical binding (rep_funcall): call bytecode interpreter with new fourth argument, and don't unbind its frame on return 2000-01-22 John Harper * bytecodes.h: new bytecode version 9.0 (OP_REFN, OP_SETN): lexical address instructions (OP_REFG, OP_SETG): global lexical instructions (OP_BINDSPEC): create a special binding * lispmach.c: support the new instructions (OP_SETQ, OP_REFQ): remove optimisations for lexical scope (OP_BIND): always creates lexical bindings * rep_lisp.h (rep_cons_block): ensure that the cons cells are aligned to sizeof (rep_cons) -- prevents any cell straddling a cache line boundary * rep_lisp.h, lispmach.c, lisp.c, symbols.c: closures now have a flag in their car marking whether or not they're allowed to call the bytecode interpreter. The variable rep_bytecode_interpreter contains either the interpreter to call, or a null pointer. Fset_environment scans for Qjade_byte_code 2000-01-19 John Harper * lisp.c (rep_handle_error): if error-handler-function is defined and functionp, then call it, otherwise handle the error locally * rep.h.in: define rep_INTERFACE to the current library interface version * lisp.c (rep_handle_error): for errors with >3 data values, print as a list * values.c (run_guardians): fixed bug where cons GC mark bits could be mangled when moving list items * lisp.c (rep_lisp_prin): when printing closures, don't truncate long names 2000-01-18 John Harper * values.c (rep_register_type): if no comparison function is given, just compare repv's 2000-01-15 John Harper * unix_files.c (rep_expand_file_name): merge contiguous slashes in filenames, instead of assuming they represent a new root 2000-01-12 John Harper * rep_lisp.h (rep_guardian): new data type (cell16) * values.c (Fmake_primitive_guardian, Sprimitive_guardian_push, Sprimitive_guardian_pop): new functions, they provide the underlying mechanism for the make-guardian function (see ftp://ftp.cs.indiana.edu/pub/scheme-repository/doc/pubs/guardians.ps.gz) * values.c (Qafter_gc_hook): new hook, called after each gc 2000-01-09 John Harper * version 0.10 2000-01-08 John Harper * Makefile.in: only include ../intl objects in libgettext.la if USE_INCLUDED_LIBINTL is set to `yes'. Also ensure that libgettext.la exports its symbols * gettext.c: if LIBC_GETTEXT is defined remove the gnu_ prefixes to libintl function invocations 2000-01-07 John Harper * debug-buffer.c: don't generate stack backtraces if gcc's __builtin_return_address () is broken (patch from George ) * symbols.c (Fdefvar): allow symbols to be re-defvar'd from restricted environments, but only if it was originally defvar'd from a restricted environment. Also, only set the value if it's unbound, or weak, but not weak-mod, and we're unrestricted 1999-12-31 John Harper * unix_dl.c: use stdio method of signalling errors when things haven't been initialised yet; also read Qdl_load_reloc_now safely * rep_lisp.h, symbols.c, values.c: some tweaks for new dumping regime * rep.c: use rep_load_environment () and rep_top_level_exit () * main.c (rep_init_from_dump): new function, as rep_init but with a file of dumped definitions (rep_load_environment): new function, called with a single arg, the script to load (after loading init.jl) to boot the system (rep_top_level_exit): new function, returns the value that the process should return when it exits * lispcmds.c (Ffeaturep, Fprovide, Frequire): in C again 1999-12-23 Ceri Storey * readline.c (init_bouncing_parens, find_matching_paren, match_paren): steal parentheses bouncing code from guile 1999-12-21 John Harper * regexp.c (regmatch): fix typo in non-greedy operator match (from Matt Kraai ) * lispcmds.c (Fif): make (if t) => nil, not nil 1999-12-19 John Harper * unix_dl.c (rep_open_dl_library): protect `file_name' against gc while calling load_requires () * lispcmds.c (Fload): scan after-load-alist when loading dl objects, as well as lisp files 1999-12-17 John Harper * symbols.c (Fdefine_value): new function, a combination of set and defvar (but doesn't imply dynamic scoping) * unix_dl.c (rep_open_dl_library): the .la file may have a line "rep_requires='FEATURES...'" naming other dl objects to load before this one. Treat the returned value of rep_dl_init as a feature if it's a symbol and isn't nil or t. Add the feature by hand, instead of calling provide * lispcmds.c (Qfeatures): new symbol, initialised to nil * timers.c, repsdbm.c, readline.c, gettext.c: don't use rep_dl_feature anymore, just return the feature symbol 1999-12-16 John Harper * unix_dl.c: check .la files for `rep_open_globally=yes' line, if so, open with RTLD_GLOBAL to export all symbols 1999-12-12 John Harper * version 0.9 1999-12-11 John Harper * rep-xgettext.jl (output): fixed checking for multiple occurrences in the same file * bytecodes.h (OP_CAAR, OP_CADR, OP_CDAR, OP_CDDR, OP_CADDR, OP_CADDDR, OP_CADDDDR, OP_CADDDDDR, OP_CADDDDDDR, OP_CADDDDDDDR): new instructions * lispmach.c: execute c..r instructions 1999-12-10 John Harper * readline.c: new plugin, wraps the readline () function, or calls Fread_line if not available 1999-12-07 John Harper * rep-xgettext.jl: scan the car of lists as well as the cdr; only emit duplicated strings once * lispmach.c, bytecodes.h (OP_ENCLOSE): new instruction, a single-argument version of OP_MAKE_CLOSURE * symbols.c (Fmake_variable_special): new function 1999-12-06 John Harper * main.c (usage): fix backslash lossage (pointed out by Conrad Steenberg * version 0.8.1 1999-12-04 John Harper * symbols.c (Fdefvar): set `documentation' property not `variable-documentation' 1999-11-29 John Harper * values.c, unix_processes.c, unix_main.c, timers.c, symbols.c, streams.c, repsdbm.c, misc.c, main.c, lispmach.c, lispcmds.c, lisp.c, find.c, files.c: changed embedded doc keys 1999-11-28 John Harper * version 0.8 1999-11-27 John Harper * unix_processes.c, timers.c, symbols.c, repsdbm.c, files.c: remember to add to rep_data_after_gc when allocating data 1999-11-25 John Harper * values.c, unix_dl.c, timers.c, symbols.c, rep_subrs.h, rep_lisp.h, rep.c, rep-xgettext.jl, main.c, lispmach.c, lispcmds.c, lisp.c, files.c, bytecodes.h: More big changes: unified the value/function namespaces, evaluate the function argument of list forms as normal, don't allow function names in place of actual functions (subrs or closures), lambda is now a special form evaluating to a closure In case you hadn't noticed, this is very scheme-like; the reason is that gaolled code can escape through naming functions that it can't call itself 1999-11-21 John Harper * lispcmds.c (Ffunctionp, Fmacrop, Fspecial_form_p, Fsubr_name): use Fsymbol_function for dereferencing the symbol, instead of just looking in the function slot * files.c (Fset_file_handler_environment): new function, gives a safe method of granting access to checked file handlers (provided the actual invoking function is accessible) * symbols.c (Fmake_closure): initialise fh_env * values.c (mark_value): mark fh_env * rep_lisp.h (rep_USE_DEFAULT_ENV): new macro 1999-11-19 John Harper * gettext.c: all gettext functions are now prefixed by gnu_ 1999-11-18 John Harper * lispcmds.c (Fstring_equal, Fstring_lessp): case-insensitive string comparisons * rep-xgettext.jl: new script, scan lisp files for strings that should be translated * gettext.c: new plugin, provides _, bindtextdomain and textdomain functions 1999-11-16 John Harper * streams.c (Fformat): support the `n$' prefix for i18n, i.e. doing (format nil "%2$s, %1$s" "hello" "world") gives "world, hello" 1999-11-15 John Harper * repint_subrs.h, rep_subrs.h (rep_call_stack): now in rep_subrs.h * rep_lisp.h (rep_SF_DEFVAR): new flag, has the symbol been defvar'd (set by rep_INTERN_SPECIAL) * symbols.c (Fdefvar): moved here from lispcmds.c, allow restricted environments to defvar un-defvar'd symbols * unix_processes.c (run_process, rep_system): reset SIGPIPE to SIG_DFL before calling exec () (from lantz moore ) 1999-11-11 John Harper * symbols.c (Fsetplist, Fsymbol_plist, Fput): symbol must be in caller's special environment * lisp.c, lispmach.c: only allow bytecode subrs to be called if jade-byte-code is in the function environment of the called function 1999-11-10 John Harper * rep_lisp.h (rep_Funarg): new cell8 type, replaces rep_File, describes an enclosed function (rep_SF_SPECIAL, rep_SF_WEAK, rep_SF_WEAK_MOD): new symbol flags, for special variables (rep_COMPILED_MACRO_P): deleted, there's now no difference between bytecode objects representing functions or macros (rep_PUSH_CALL, rep_POP_CALL): new macros for handling the Lisp call stack (rep_INTERN_SPECIAL): new macro, similar to rep_INTERN, but marks the variable as being special * lisp.c (rep_env, rep_fenv, rep_special_env): the environments for lexical variables, functions and special variables (need special environment for access-control purposes) (rep_funcall): lambda expressions and bytecode objects are no longer considered functions -- only closures, subrs and autoloads are functions (it may not be secure to call an unclosed function) * symbols.c (Fmake_closure, Fclosure_function, Fset_closure_function, Fclosurep, Fset_variable_environment, Fset_function_environment, Fset_special_environment): new functions (Fsave_environment): new special form (rep_bind_symbol, rep_unbind_symbols): handle both lexical and special variables (rep_bind_function, rep_unbind_functions): new functions (Fsymbol_value, Fset, Fdefault_value, Fset_default): handle lexical scoping and dynamic scoping, and the new access rules for special variables (the WEAK and WEAK_MOD flags to protect exploits from restricted special environments) (Fflet, Fmacrolet): new special forms (Fspecial_variable_p): new function * values.c: support Funarg type (closures) * lispcmds.c (Ffunction): special form to create closures from constant lambda expressions (Fdefvar): access control/protection when a restricted special environment has already defined the special variable (and therefore it's already in the restricted environment) (Fload): new optional fifth arg: IN-CURRENT-ENVIRONMENT, unless non-nil evaluate forms in a new lexical environment (Ffeaturep, Fprovide, Frequire): deleted, now in lisp.jl * lispmach.c (Fjade_byte_code): handle the new instructions, special-case lexical binding in OP_SETQ and OP_REFQ instead of dynamic bindings * bytecodes.h: create a new major bytecode version (OP_MAKE_CLOSURE, OP_FBIND, OP_CLOSUREP, OP_BINDENV): new virtual machine instructions * streams.c, rep.c, misc.c, main.c: misc changes for lexical scoping * files.c: allocate the file type dynamically, since we stole its cell8 slot for closures * unix_dl.c (rep_open_dl_library): provide is now defined by Lisp code 1999-11-01 John Harper * unix_dl.c: define RTLD_LAZY to 1 if it's not already defined anywhere (from remark in the Perl sources, via glib) 1999-10-31 John Harper * version 0.7.1 1999-10-29 John Harper * regexp.c: ANSII-fy function definitions 1999-10-28 John Harper * rep-config.sh: expect ${libdir} as second argument, not ${exec_prefix} * Makefile.in: pass ${libdir} to rep-config.sh * rep_lisp.h: comment out use of #warning, doesn't work on solaris cc * dlmalloc.c: change the sbrk () thing again for FreeBSD * timers.c (insert_timer): fix problem when inserting new timer before existing timer (with same seconds, but less milliseconds) 1999-10-27 John Harper * unix_main.c: make the rep_alloc tracking work once more * dlmalloc.c: fix sbrk () declaration on FreeBSD (from Yukihiro Nakai ) 1999-10-24 John Harper * version 0.7 * lispcmds.c (Fload): remember to call Fclose_file on any opened streams 1999-10-23 John Harper * lispmach.c: some more small optimisations * unix_processes.c (rep_system): fix child termination on being unable to exec /bin/sh 1999-10-21 John Harper * streams.c (Fformat): revert the long-int printing, since it truncates the values and generally doesn't work. But added some fixes for printing on sizeof(int) != sizeof(repv) systems * lispmach.c: some optimisations; disable stack usage checking unless CHECK_STACK_USAGE is defined * misc.c (Frandom): if LIMIT is <= 0, set LIMIT = MAXINT 1999-10-20 John Harper * streams.c (Fformat): handle long-integers in the integer conversions 1999-10-14 John Harper * unix_dl.c: support underscore-prefixed symbol names 1999-10-13 John Harper * unix_processes.c (Fprocess_id): return pid of interpreter if given a nil argument * main.c (get_main_options): don't handle --version * rep.c (main): handle --version option 1999-10-06 John Harper * unix_dl.c: untested support for shl_load () (HP-UX) 1999-10-03 John Harper * version 0.6.2 1999-10-01 John Harper * rep_lisp.h: remove rep_ALIGN macro, since it's only used once, by rep_ALIGN_CELL. This now knows about implicit alignment on the DEC C compiler 1999-09-20 John Harper * lisp.c (Qautoload_verbose): only print autoloading messages if this is non-nil (it is by default) * version 0.6.1 * lispcmds.c (Fload): only try to load files if they're readable and not a directory (not if they just exist) 1999-09-17 John Harper * realpath.c: bracketed function definition by #ifndef HAVE_REALPATH just in case 1999-09-15 John Harper * unix_files.c (rep_file_modes_as_string): change ulong to u_long 1999-09-14 John Harper * version 0.6 * unix_processes.c (rep_system): construct environ from process-environment as with start-process and call-process * regexp.c (regrepeat): workaround a bug in GCC 2.95 on sparcs 1999-09-12 John Harper * version 0.5 1999-09-11 John Harper * rep_lisp.h: updated and expanded some comments 1999-09-10 John Harper * rep.c (main): by default, always load a script named `rep', not a script defined by argv[0] * unix_main.c (fatal_signal_handler): finally changed message from `jade: ...' to `rep: ...' 1999-09-09 John Harper * unix_processes.c (check_for_zombies): removed the assertion that every pid must have a process structure 1999-09-08 John Harper * files.c (Fset_input_handler): new function, allows async input on a file handle 1999-08-30 John Harper * version 0.4 * unix_main.c (usr_signal_handler): now invoked by USR2 as well as USR1. USR2 prints all debug buffers to stderr 1999-08-29 John Harper * unix_processes.c, unix_main.c, test-dl.c, repsdbm.c, rep_lisp.h, rep.c, misc.c, message.c, lisp.c, debug-buffer.c: fixed some possible compiler errors (from `-ansi -pedantic') 1999-08-28 John Harper * rep.h.in: (rep_PTR_SIZED_INT_SUFFIX, rep_PTR_SIZED_INT_CONV): new macros (rep_PTR_SIZED_INT_BITS): now defined in terms of sizeof () and CHAR_BIT instead of statically * rep_lisp.h (rep_VALUE_CONST): new macro, uses rep_PTR_SIZED_INT_SUFFIX to make a constant of the needed width (rep_vector): define the data as a one-element array not a zero-element array (for ansii-ness) * misc.c (Frandom): don't use `#if' to decide how many random samples to take, use normal `if' instead, since the parameters are known at compile-time the compiler should eliminate unneeded stuff * main.c: don't check rep_PTR_SIZED_INT_BITS anymore since we use sizeof to define it now * lispmach.c, lisp.c: use rep_PTR_SIZED_INT_CONV when printf-ing lisp integers 1999-08-27 John Harper * main.c (rep_init): changed some of the type consistency checking done on initialisation -- just check that the values are within the correct bounds, not that they exactly match the size of void * * unix_dl.c (rep_find_c_symbol): check for HAVE_DLADDR * rep_lisp.h: changed string type layout -- removed the inline static string option since it's a hack, but more importantly, since it defines the library's interface, and shouldn't change * rep_lisp.h, files.c, misc.c: changed some instances of `1 << X' to `1L << X' for when sizeof(int) < sizeof(long) * values.c (rep_make_string, rep_string_dupn): changed `length' arg from int to long 1999-08-22 John Harper * version 0.3 1999-08-17 John Harper * values.c (Fgarbage_collect): defining DEBUG_GC and setting debug_gc = 1 enables code to print the current backtrace at each garbage collection 1999-08-16 John Harper * version 0.2 * lispcmds.c (lispcmds_init): add REP_COMMON_EXEC_DIRECTORY to the dl-load-path 1999-08-15 John Harper * timers.c: added some documentation strings 1999-08-13 John Harper * rep_lisp.h (rep_CELL8_TYPE_MASK): changed from 0x1f to 0x3f to include the rep_CELL_IS_16 bit (otherwise all cell16 types are reported as being symbolp!) 1999-08-06 John Harper * main.c (rep_handle_input_exception): if Qerror_mode is `top-level', then only the top-level event loop handles errors, if it's `exit' then errors cause the interpreter to exit. Qinterrupt_mode works similarly for user interrupts * unix_main.c: make SIGINT, SIGTERM and SIGHUP non-restartable 1999-08-03 John Harper * version 0.1 1999-07-29 John Harper * unix_main.c (rep_sig_restart): make syscalls restart or not restart for any signal (wait_for_input): make both SIGCHLD and SIGALRM non-restartable during select () * unix_processes.c (rep_sigchld_restart): replaced by the more general rep_sig_restart * timers.c: new file, a dynamically loadable module providing multiple one-shot timers 1999-07-27 John Harper * misc.c (Frandom): return zero if LIMIT <= 0 1999-07-22 John Harper * lispcmds.c (Fload): while evaluating the forms from a file, bind load-filename to the full name of the file being loaded * debug-buffer.c: dladdr seems to work again under linux 1999-07-09 John Harper * rep-remote.c (do_get, do_put): don't assume an error if reading doesn't get as much as we asked for 1999-07-07 John Harper * rep-remote.c (do_readlink): don't assume the output of readlink() is null-terminated * streams.c (Fcopy_stream): fixed this when the buffer overflows (was dropping every 512th character) 1999-07-06 John Harper * unix_processes.c: new process-connection-type: `socketpair' * unix_main.c (wait_for_input): fixed for when input doesn't arrive within the first second (the input fdset used to be munged) (usr1_signal_handler): connected to SIGUSR1, outputs the Lisp backtrace when called * rep-remote.c: new program, provides a method of accessing files on a remote host (using the remote-rep.jl Lisp backend) 1999-07-05 John Harper * streams.c (Fread_chars): new function 1999-07-04 John Harper * unix_files.c, files.c: new file operations: read-symlink and make-symlink 1999-06-29 John Harper * unix_processes.c (rep_proc_init): don't create a new process group anymore 1999-06-06 John Harper * bytecodes.h: OP_SETQ now pops the value from the stack. Deleted OP_PUSHIW, replaced by OP_PUSHIWN and OP_PUSHIWP, for pushing negative and positive values respectively * unix_dl.c (rep_kill_dl_libraries): never call dlclose, it's not possible to know if any references to the library still exist * unix_main.c (rep_map_inputs): new function, call a specified function for all registered (fd, callback) pairs * misc.c (Fsystem): new function, execute a shell command * unix_processes.c (rep_system): back-end of Fsystem * lisp.c (rep_readl): don't return nil on EOF, instead signal an end-of-stream error * lispcmds.c (Fload): catch any end-of-stream error's signalled while reading the file * files.c (Fclose_file): when closing a file with rep_LFF_DONT_CLOSE set, freopen it onto /dev/null 1999-06-03 John Harper * misc.c (default_beep): new function, echo ^G, used to initialise the rep_beep_fun hook * main.c (Fget_command_line_option): don't return rep_NULL when an option requiring an argument isn't given * lispmach.c (Fjade_byte_code): optimise common cases of OP_REFQ and OP_SETQ instructions, when accessing a variable which can't be locally stored, and isn't a rep_Var type * unix_processes.c (Fsignal_process): new function 1999-05-31 John Harper * rep_regexp.h (NGSTAR, NGPLUS): new operators, non-greedy plus and minus * regexp.c: implemented non-greedy *, + and ? operators: *?, +? and ?? (as in Perl) 1999-05-30 John Harper * rep_regexp.h, regexp.c (WORD, NWORD, WSPC, NWSPC, DIGI, NDIGI, WEDGE, NWEDGE): new operators; they are Perl's \w, \W, \s, \S, \d, \D, \b, \B syntax, respectively 1999-05-29 John Harper * lispcmds.c (rep_lispcmds_init): add a null string to the end of the load-path (i.e. the current directory) * lisp.c (rep_load_autoload): only display messages if not in batch-mode 1999-05-26 John Harper * repsdbm.c (Fsdbm_open): call local-file-name on the file parameter 1999-05-15 John Harper * added `#define _GNU_SOURCE' at the top of all source files. This seems to be necessary with glibc 2.1 1999-04-25 John Harper * main.c (rep_kill): kill the dl libraries a bit later down the line * unix_processes.c (rep_proc_kill): disable SIGCHLD _before_ killing the processes 1999-04-24 John Harper * lispmach.c (Fjade_byte_code): yow! if a subr with five parameters has four values applied to it, it was being called _twice_ (a missing break statement). This bug must have existed forever! 1999-03-28 John Harper * lispmach.c (Fjade_byte_code): don't test for called function returning rep_NULL individually, since some don't even though an error has been signalled. Instead check for, and handle, errors outside the big switch 1999-03-23 John Harper * unix_processes.c (rep_sigchld_fun): new hook, called by the sigchld handler * repsdbm.c (rep_dl_init): set a rep_dl_feature value * unix_dl.c (struct dl_lib_info): new field `feature_sym', a symbol noting the feature provided by this library (find_dl_by_feature): new function (rep_open_dl_library): if a symbol `rep_dl_feature' exists in the opened object, it's assumed to contain the name of the feature provided by this object, Fprovide is called (rep_find_dl_symbol): new function, given a feature and a symbol name, return the address * main.c (Frecursive_edit): update the rep_recurse_depth variable here now 1999-03-19 John Harper * main.c (rep_event_loop_fun): new hook, allows the standard event loop to be replaced * unix_main.c (rep_register_input_fd_fun, rep_deregister_input_fd_fun): new hooks, allows non-standard event loops to catch inputs 1999-03-18 John Harper * repsdbm.c (rep_dl_init): return Qt * lisp.c (rep_test_int_period): this was a about factor of 100 too large * unix_main.c (wait_for_input): break the timeout period into a series of second-long timeouts, with a check for an interrupt occurring between each call to select 1999-03-17 John Harper * rep.c (main): test for (throw 'quit RC) when exiting * lisp.c (rep_readl): when `#!' is encountered at the start of a file, skip until `!#' is found 1999-03-16 John Harper * values.c: allocate the buffer of static gc roots dynamically * rep_lisp.h: define some new macros, rep_CDRLOC, and various rep_CAAR, rep_CADR combinations (up to four dereferences) * rep-config.sh: new option `--execdir' * main.c (Qprogram_name): new symbol argv[0] of the invoking program * lispcmds.c (Qdl_load_reloc_now): new symbol * unix_dl.c (rep_open_dl_library): when dl-load-reloc-now is non-nil, open with the RTLD_NOW mode, not RTLD_LAZY 1999-03-15 John Harper * rep_lisp.h (rep_DECLARE): the third argument is now the entire predicate expression, not just the name of the predicate. The rep_DECLAREX variants are unchanged 1999-03-12 John Harper * files.c (file_prin): the `name' field is _nil_ if unbound, not rep_NULL * misc.c (Fchar_downcase): this was using toupper not tolower 1999-03-09 John Harper * repsdbm.c: changed all function names from dbm- to sdbm- * sdbm_pair.c, sdbm_hash.c, sdbm.h, sdbm.c: replaced dbm_ by sdbm_ and DBM by SDBM to prevent clashing with libc dbm * repdoc.c: removed the -a option, never open the db O_TRUNC, replace dbm_ by sdbm_ 1999-03-06 John Harper * main.c (rep_get_option): accept `--foo=bar' as well as `--foo bar' (Fget_command_line_option): wrapper for rep_get_option 1999-03-02 John Harper * main.c (rep_get_option): new function, searches the command-line-args variable for a specified option * main.c (get_main_options): new option `--interp', this sets the LISP variable interpreted-mode * lispcmds.c (Fload): if interpreted-mode is non-nil, don't load .jlc or .jld files * unix_processes.c (proc_puts): remember that the input data may be a C or LISP string 1999-02-28 John Harper * MAJOR CHANGES: separated all LISP interpreter specific parts into a separate library, librep (Read-Eval-Print) 1999-02-17 John Harper * unix_processes.c (check_for_zombies): always check for zombies, even if we received no SIGCHLD 1999-02-12 John Harper * unix_files.c (sys_canonical_file_name): preserve the trailing slash or lack thereof 1999-01-31 John Harper * bytecodes.h: several OP_PUSHI opcodes for pushing immediate integers (of various sizes) * lispmach.c (cmd_jade_byte_code): added PUSHI instructions * lispmach.c (cmd_validate_byte_code): had the minor comparisons the wrong way around * x11_windowsys.h (struct x11_display): added `name' field * x11_main.c (x11_get_display): new function, searches for a named open display (x11_open_display): call x11_get_display before creating a new one 1999-01-29 John Harper * unix_processes.c (run_process): clean up better when fork fails 1999-01-27 John Harper * views.c (cmd_with_view): fix bug when switching windows as well as views 1999-01-24 John Harper * views.c (format_mode_string, format_mode_value, update_status_buffer): buf_len is now signed, so that negative values are detected, not wrapped around! 1999-01-20 John Harper * buffers.c (make_marks_non_resident): add a comment noting that any TX fields used must be explicitly gc marked * values.c (mark_value): in the V_Mark case, remember to mark tx_File, now that make_marks_non_resident accesses it 1999-01-17 John Harper * lisp.c (cmd_eval): preserve regexp matches while calling the debugger 1999-01-14 John Harper * buffers.c (cmd_set_mark_file): bug-fixes 1999-01-13 John Harper * keys.c (cmd_lookup_event_binding): return multiple prefix keymaps correctly, by faking a call to next-keymap-path. Also, remove the optional RESET parameter, always reset next-keymap-path to null * edit.h (Lisp_Mark): new field `canon_file' used in non-resident marks to store the canonical file name, `file' reverts to being the possibly abbreviated file name * buffers.c: changes for the modified Lisp_Mark structure, also fix the mark_cmp function for non-resident marks * values.c (mark_value): updated for `canon_file' mark field 1998-12-09 John Harper * keys.c (eval_input_event): don't overwrite prefix-arg after handling prefix-keymap 1998-12-08 John Harper * unix_files.c (sys_expand_file_name): handle "foo/../bar" correctly (where we have to backtrack to the start of the output buffer) 1998-12-03 John Harper * misc.c (cmd_user_full_name): if given a parameter, it's the chosen name of the user 1998-11-29 John Harper * keys.c (overriding-local-keymap): new variable, when non-nil, overrides all local keymaps 1998-11-24 John Harper * keys.c: big changes. No longer have the keymap-path variable, instead we steal Emacs' notion of a set of active keymaps; these include the variables global-keymap, and local-keymap, the minor-mode-keymap-alist associating minor modes and their keymaps, and the `keymap' extent properties of all extents under the cursor (in reverse order of priority). Also, when evaluating events, a command that is a symbol with the function value `keymap' is used as a prefix key (keymap in the value slot). Multiple bindings to the same prefix keys are allowed, the union of their specified keymaps is used to resolve the next event (cmd_search_keymap): new function, scan a single keymap for a binding of a specified event 1998-11-20 John Harper * lists.c, lists.h: removed these files, nothing uses them anymore 1998-11-14 John Harper * unix_main.c (handle_input): fixes to the input_pending stuff 1998-11-12 John Harper * unix_main.c (sys_mark_input_pending): new function, records that an input fd has input read but not yet handled (and therefore needs to be disposed of next time round the event loop) * x11_main.c (x11_handle_input): when working asynchronously, ensure that any events read but not handled cause sys_mark_input_pending to be called 1998-11-11 John Harper * windows.c (cmd_make_window): set the w_CurrVW field explicitly to the first view in the window * editcommands.c (cmd_empty_line_p): add some error checking * views.c (cmd_with_view): save the current window and the current view in the window to be altered so that the state can be properly recovered later * lispmach.c (cmd_jade_byte_code): in the BIND-VIEW instruction, save the current window, and the current view in the window to be altered 1998-11-10 John Harper * main.c (on_idle): protect against calling the idle-hook recursively * unix_main.c (handle_input): set refreshp on an interrupt 1998-11-01 John Harper * x11_windows.c (sys_new_window): when setting the XSizeHints structure set the base_height to zero 1998-10-27 John Harper * streams.c (stream_puts, stream_putc): when growing the window message remember to allocate a byte for the zero terminator.. * values.c (data_types): remove mark_sweep (mark_value): when marking a resident mark, mark the canonical name of the associated buffer (it's required if the mark is made non-resident) * buffers.c (buffer_sweep): call mark_sweep before sweeping buffers, the ordering is important. Only call make_marks_non_resident if there actually are marks in the buffer (this stops us occasionally using freed memory) * streams.c (stream_putc, stream_puts): when appending to the window's message, use sys_realloc not str_dupn * edit.c (FREE_LL): fix non-r_alloc version * buffers.c (mark_cmp): compare non-resident marks correctly 1998-10-26 John Harper * dlmalloc.c: enable __morecore_hook when JADE is defined, set the default value to __jade_morecore * ralloc.c: include "dlmalloc.h" or when necessary * dlmalloc.c, dlmalloc.h: use Doug Lea's malloc instead of GNU malloc, it seems to use a lot less memory * stringmem.c, stringmem.h: removed these two files, all allocation is done by standard malloc now, dlmalloc.c seems to handle it a lot better.. * buffers.c, edit.c, edit.h, find.c, jade.h, lisp.c, lisp.h, lispcmds.c, main.c, misc.c, streams.c, unix_defs.c, unix_dl.c, unix_main.c, unix_processes.c, values.c, windows.c, x11_main.c, x11_misc.c: use sys_alloc (i.e. malloc) instead of sm_alloc or str_alloc (and other associated functions) 1998-10-25 John Harper * ralloc.c: more fixes in non-emacs section for when DOUG_LEA_MALLOC isn't defined (and therefore using gmalloc) 1998-10-24 John Harper * Makefile.in: use the JADE_LIBOBJS variable, extra objects for the jade[d] binary * edit.c: switch on definition USE_R_ALLOC for whether or not to use the relocating allocator for line arrays * ralloc.c: in non-emacs section, include when HAVE_CONFIG_H is defined * unix_main.c (sys_realloc): new function 1998-10-23 John Harper * edit.c: use GNU malloc's r_alloc relocating allocator for the buffer line arrays (the tx_Lines field) * streams.c, regjade.c, movement.c, glyphs.c, files.c, editcommands.c, edit.c: remove all caching of the tx_Lines field, the relocating malloc would screw this up * values.c (gc_inhibit): removed this ill-advised feature (I thought this the reason that the memory usage increased massively sometimes--it's not, but it's a Good Thing) Anyway, the effect of removing this variable is that all functions that call stream_(getc|ungetc|putc|puts) must protect themselves against a garbage collection (since a stream may be a Lisp function) * unix_processes.c, streams.c, main.c, lispmach.c, lisp.h, lisp.c, keys.c: added more gc protection for the loss of gc_inhibit 1998-10-19 John Harper * faces.c (mark_glyph_buf_faces): ignore GA_Garbage attributes * edit.c (MAX_SPARE_LINES, ALLOC_SPARE_LINES): separated the definitions of these two constants. Also increased both of them (M_S_L by more than A_S_L though) 1998-10-18 John Harper * debug-buffer.c: on linux, undef DB_RESOLVE_SYMBOLS for the time being--it crashes on my system (egcs-1.1/glibc-2.0.6) (db_print_backtrace): changed output format, only look for at most eight frames, and workaround for a egcs/linux bug 1998-10-15 John Harper * jade.h: describe the three preprocessor symbols noted below, only DB_RESOLVE_SYMBOLS is set by default * debug-buffer.c (db_print_backtrace): print symbols instead of addresses when DB_RESOLVE_SYMBOLS is defined (db_return_address): new function, try to return the return address of the calling function * unix_main.c: when DEBUG_SYS_ALLOC is defined, record all outstanding memory allocations. On exit, print any that are still unfreed. Also define a function unix-print-allocations that does the same thing (fatal_error_handler): print the C backtrace * unix_dl.c (find_c_symbol): function to look up the name of the closest symbol preceding a specified address * edit.h, edit.c, buffers.c: only give each buffer it's own allocation pool if STRINGPOOL_PER_BUFFER is defined 1998-10-13 John Harper * streams.c (cmd_format): recognize the %X format (doh!) * views.c (format_mode_string): added `%m' format, represents the state of the marked block * value.h (VALUE_BITS): defined as PTR_SIZED_INT_BITS * main.c (main): validate PTR_SIZED_INT_BITS at startup * lisp.h (LISP_INT_BITS): define from VALUE_BITS, don't assume 32-bit VALUEs * misc.c (cmd_random): handle case where RAND_MAX is too small to get all random bits in a single call to rand(). Also, prefer lrand48() over rand() if it's available 1998-10-12 John Harper * unix_files.c (sys_file_modes_as_string): use stat_file directly instead of calling sys_file_modes which masks out all but the permission bits * unix_files.c (sys_delete_file): use `unlink' instead of `remove'. This means it won't allow the deletion of directories (sys_make_directory, sys_delete_directory): new functions * files.c (cmd_make_directory, cmd_delete_directory): new functions, both have file-handler names associated with them * files.c (read_file_into_tx): don't store the average line length of the previous file read. Instead, defer predicting the expected number of lines until N lines of the new file have been read. This seems to drastically reduce the memory needed to read large files 1998-10-10 John Harper * misc.c (cmd_random): new function 1998-10-08 John Harper * editcommands.c (cmd_insert): when POSITION isn't specified but BUFFER is, use the position of the cursor in BUFFER, not in the current view 1998-10-06 John Harper * views.c (format_mode_string): fix printing percentages when buffer is narrowed 1998-10-04 John Harper * debug-buffer.c (db_print_backtrace): minor bug fix * commands.c (cmd_call_command): reinitialise the current-prefix-arg before calling the actual command 1998-09-21 John Harper * lispmach.c, bytecodes.h: changed op-set and op-fset to use the CALL_2 macro. This means that there arguments are in the reverse order to what they used to be, and they leave a value on the stack * extent.c (find_extent): when searching the cache for "near-enough" extents, use the global position of the cached extent, not the position local to its parent (cmd_move_extent): use unlink_extent not several calls to unlink_extent_fragment (adjust_extents_XX): more fixes to these functions, in addition, make sure that they invalidate the cache 1998-09-17 John Harper * streams.c (cmd_format): make the "0" flag work with the %s format 1998-09-13 John Harper * x11_windows.c (sys_draw_glyphs): when drawing underlines, draw one less pixel than before 1998-09-10 John Harper * unix_main.c (sys_sit_for): only redisplay if the timeout is greater than zero 1998-09-09 John Harper * extent.c (insert_extent): when chaining frags together, do it properly 1998-09-08 John Harper * extent.c (extent_cmp): only compare the two objects if they have the same type (i.e. both extents) 1998-09-06 John Harper * main.c (get_main_options): added `-batch' option (inner_main): if in batch mode, exit after executing the initialisation script * x11_windows.c (sys_new_window): if in batch mode, don't map the window * x11_main.c (x11_open_display): call sys_recolor_cursor * debug-buffer.c (db_print_frame): renamed as `db_print_backtrace', changed a few things 1998-09-04 John Harper * faces.c (mouse-cursor-face): new variable * x11_main.c (sys_recolor_cursor): new function * faces.c (mark_merged_faces): mark both glyph buffers (faces_init): check for success of colour allocations, returning failure if unsuccessful * main.c (common_db): debug buffer for misc. uses (inner_main): move faces_init later, move the error printing code later so it catches more errors (not just from the init script) * redisplay.c (redisplay_lock): mutex variable to prevent redisplay being entered more than once concurrently * x11_main.c: added "-visual" option and "visual" resource to allow the visual to be specified (use_options): if specified, find the named visual with the most bitplanes. Allocate a colormap when using a non-default visual (sys_make_color): use the first x11_display in the list (x11_handle_async_input): only do anything if redisplay_lock isn't set * x11_windows.c (sys_new_window): use XCreateWindow so the visual may be specified * x11_windowsys.h (struct x11_display): added `visual', `depth' and `colormap' fields * unix_processes.c (get_pty): possibly check both /dev/ptmx and /dev/ptyXX (if they both exist), in that order * debug-buffer.c (db_print_frame): new function, print the current call backtrace (gcc only) (db_spew): ignore buffer if empty 1998-09-02 John Harper * edit.h (Merged_Face): new structure, pared down version of Lisp_Face, used to amalgamate face attributes from the various source faces for each character (FACEFF_INVERT, FACEFF_BOXED): new face attributes, used for drawing the cursor (and its ghosting) (WIN): new field `w_MergedFaces', a table of the actual faces used for drawing in this window. Currently it's limited to 64 entries * faces.c (cmd_make_face): no longers copies from a source face, now all faces are created equal (and empty) (cmd_delete_face, mark_faces, cmd_face_id): deleted, no longer needed now faces don't have id's associated with them (cmd_set_face_attribute, cmd_face_attribute): new attributes `inverted' and `boxed' (merge_faces): new function, compute a face for an extent (get_face_id): new function, compute a face from a face (mark_merged_faces): new function * glyphs.c (make_window_glyphs, make_message_glyphs): support merged faces * values.c (cmd_garbage_collect): call mark_merge_faces in each window * x11_windows.c: support merged faces * x11_main.c (x11_free_dpy_colors): fix infinite loop bug * unix_processes.c (cmd_accept_process_output): check if there's any queued notifications as well as SIGCHLDs before waiting for output 1998-09-01 John Harper * unix_processes.c (cmd_accept_process_output): accept termination notifications as well as stream output 1998-08-30 John Harper * glyphs.c (make_window_glyphs): reload the glyph-table each time the current extent changes 1998-08-29 John Harper * views.c (cmd_set_status_message): deleted this function * edit.h (VW): deleted vw_StatusOverride field * extent.c (cmd_extent_get, cmd_extent_put, cmd_extent_set): moved the EXTENT argument to be first instead of last 1998-08-28 John Harper * main.c (on_idle): only call idle-hook once per idle period * extent.c: various fixes, including reverting the last change to unlink_extent_recursively. Mostly in the adjust_extents_X functions * extent.c (unlink_extent_recursively): fixed to unlink all children in each node, not just the first (make_global_extent, reset_global_extent): minor fixes, and remember to invalidate the cache (cmd_extent_get, cmd_extent_put): new special property `catch-variables'. When set this hijacks any attempts at setting non-permanent-local buffer-local symbols, and sets them in the innermost extent with this property (buffer_set_if_bound): function to implement the above * edit.h (EXTFF_CATCH_VARIABLES): new flag in Lisp_Extent * symbols.c (cmd_set): call buffer_set_if_bound if the symbol has the SF_BUFFER_LOCAL property * editcommands.c (cmd_clear_buffer): don't call reset_global_extent until _after_ clearing the buffer 1998-08-27 John Harper * views.c (update-status-buffer): can now be customized through the mode-line-format variable, I copied most of Emacs syntax.. * edit.h (tx_ModeName, tx_MinorModeNameList, tx_MinorModeNameString): deleted these elements * buffers.c (var_mode_name, var_minor_mode_names): deleted * extent.c (cmd_buffer_symbol_value): only search if SF_BUFFER_LOCAL is set * faces.c (cmd_set_face_attribute): if setting the background or foreground attributes, and the value is a string, call get-color with that string * editcommands.c (cmd_clear_buffer): call reset_global_extent * extent.c (extent_cmp): function to test if two fragments belong to the same `extent'. Used by the `equal' function (cmd_buffer_put): deleted (cmd_map_extents): map a function over all extents in an area (map_section_extents): protect against gc 1998-08-26 John Harper * extent.c (cmd_extent_start, cmd_extent_end): new functions (cmd_extent_put, cmd_extent_get): special property `local-variables' linked to the `locals' field (cmd_delete_extent): remove the option of deleting individual fragments; this shouldn't be visible * extent.c (find_extent): record cache miss statistics * x11_windows.c (sys_set_font): for the specified font, try to load a bold version as well. This is done by querying the full name, then replacing the third component by `bold' (sys_draw_glyphs): handle the bold attribute by swapping fonts * x11_windowsys.c (w_WindowSys): new field ws_BoldFont * extent.c: new file, extents allow property lists to be maintained for buffer regions (also local variables). In fact the old style buffer-local values are now a special case of this, stored in the root extent covering the entire buffer * faces.c: new file. Faces associate rendering attributes (colour, underline, bold, etc) with the attribute codes understood by the redisplay algorithm. This file also implements the colour type * glyphs.c: traverses the extent tree, modifying the output attribute as the `face' property changes * edit.c (read_only_pos, read_only_section): these functions replace the read_only function. In case an extent has a local value of the read-only variable * housekeeping.c: the adjust_marks_X functions now call a related adjust_extents_Y function, and also update the positions in the extent caches * symbols.c (cmd_symbol_value): look for buffer-local values in the current stack of extents (use the buffer-symbol-value function) (cmd_set): if setting a buffer-local value, only ever set the buffer-wide value (use the buffer-set function to set a value in a specified extent) (cmd_kill_all_local_variables, cmd_kill_local_variable): these only kill the buffer-wide values, not in inner extents * x11_main.c: support for colour allocation and management. Also added some more resources for the various colours that are always allocated on startup * x11_windowsys.h, views.c, values.c, streams.c, redisplay.c, main.c, lisp.h, keys.c, jade.h, files.c, editcommands.c, edit.h, commands.c, buffers.c, Makefile.in: misc changes * x11_windows.c (sys_draw_glyphs): support rendering from faces * regexp.c, regjade.c (regmatch): fix bug of not being case-insensitive (if necessary) after matching a star or plus 1998-08-19 John Harper * keys.c (lookup_event_name): minor change to limit the number of modifier bits tested 1998-08-18 John Harper * keys.c (lookup_event, lookup_event_name): moved from x11_keys.c and rewritten to be portable * x11_keys.c (sys_lookup_mod, sys_lookup_code, sys_lookup_mod_name, sys_lookup_code_name): new functions 1998-08-11 John Harper * lisp.c (funcall): support for autoloading macros (but only if the list of arguments is still to be evaluated) 1998-08-10 John Harper * files.c (files_init): ADD_SUBR the make-file-from-stream function 1998-08-06 John Harper * buffers.c, debug-buffer.c, lisp.c, streams.c, symbols.c, unix_processes.c, views.c, windows.c: if possible, replace all unsafe uses of sprintf and vsprintf with snprintf and vsnprintf 1998-08-02 John Harper * buffers.c, edit.h: tx_FileName and tx_CanonicalFileName are now nil if unset, not the null string 1998-07-16 John Harper * x11_windowsys.h (struct x11_display): added last_click and last_click_button fields, for tracking double-clicks * x11_keys.c (translate_event): now takes an x11_display structure as an extra argument, only accepts double clicks if they're from the _same_ mouse button as the first click * x11_main.c: pass extra arg to translate_event 1998-07-12 John Harper * redisplay.c (patch_display): fix warning about relative precedence of && and || operators * x11_main.c (x11_handle_input): when using WINFF_PRESERVING, set it in all windows at once, since redisplay will update all windows (possibly losing their original contents) 1998-07-11 John Harper * edit.h (WIN): added new flag `WINFF_PRESERVING' used by asynchronous expose events to tell redisplay that the original window contents are being redrawn * x11_main.c (x11_handle_input): return whether or not a redisplay might be required, use WINFF_PRESERVING in asynchronous expose events * redisplay.c (cmd_redisplay): don't generate w_NewContents if WINFF_PRESERVING is set in the window 1998-07-10 John Harper * unix_main.c: deleted all the SIGIO stuff (sys_poll_input): new function * lisp.h (TEST_INT, TEST_INT_GUTS, TEST_INT_PERIOD, TEST_INT_SLOW): expanded testing for interrupts * lisp.c (lisp_test_int_counter): new variable * x11_main.c (x11_handle_input): handle asynchronous input, just look for the events we want, C-g causes an interrupt (x11_handle_sync_input, x11_handle_async_input): new functions * x11_defs.h: define TEST_INT_GUTS as x11_handle_async_input() * unix_defs.h: remove the TEST_INT definition * unix_processes.c (run_process): use TEST_INT_SLOW to test for interrupts in synchronous processes 1998-07-04 John Harper * lispmach.c (cmd_make_byte_code_subr): don't allocate the optional fourth and fifth elements unless they're required * unix_defs.h: remove EXEC_DIR define, just use JADE_EXEC_DIR * lispcmds.c: misc. changes to how the build directories and load-paths are set up (mainly, rename `X-dir' as `X-directory') 1998-07-03 John Harper * lispcmds.c (dl-load-path, exec-directory): new variables for dynamic loading (cmd_load): support for dynamic loading (search dl-path after exhausting load-path) * unix_defs.h (EXEC_DIR): new definition * unix_dl.c: new file, use dlopen() for dynamic loading * values.c (cmd_garbage_collect): call mark_dl_data * lisp.h (DEFUN, DEFUN_INT, ADD_SUBR, ADD_SUBR_INT): cleaned up a bit 1998-07-01 John Harper * find.c (mark_cached_regexps): fixed bug in chopping the list one element too late Tue Jun 30 00:08:36 1998 John Harper * edit.h (enum Glyph_Attrs): added new _Rect variants of the four standard attributes. These are used to display `ghosted' cursors when the window is out of focus * glyphs.c, redisplay.c, x11_main.c, x11_windowsys.h: changes to support the above attributes Sun Jun 28 16:05:45 1998 John Harper * windows.c (cmd_make_window): make a copy of the current window's buffer-list with copy-sequence; don't use it twice Sat Jun 27 18:21:30 1998 John Harper * find.c (compile_regexp): when searching the cache, before comparing strings, test if they're eq to one another Fri Jun 26 16:54:54 1998 John Harper * find.c (release_cached_regexp): renamed mark_cached_regexps, now marks the `regexp' field as it should (release_cached_regexps): new function, flushes the cache * find.c (compile_regexp, release_cached_regexp): instead of just caching a single compile regular expression, cache all of them. Then at gc, release as many of the least-recently-used regexps to satisfy a size limit (by default 1k). The hit ratios are immense (regexp-cache-control): function to set the size limit, and to report cache statistics * regexp.h, regexp.c (regexp): added regsize field, contains the true size of the compiled regular expression Tue Jun 23 12:19:54 1998 John Harper * unix_processes.c (check_for_zombies): before closing all streams, check for any pending output (read_from_one_fd): only check errno==EINTR when the result from read is _less_ than zero (doh!) * buffers.c (cmd_make_mark): ensure that all fields of the new mark object are valid for when GC could occur Mon Jun 22 10:48:48 1998 John Harper * glyphs.c (make_message_glyphs): when outputting messages that are longer than the window is wide, use more than the single bottommost line (when the minibuffer view has > 1 row) Sun Jun 21 01:14:21 1998 John Harper * unix_processes.c (run_process): the new method of detecting when synchronous processes have exited still didn't work. Use the simple option, only exit when EOF on oth streams is received. This puts the onus on callers to redirect streams if necessary * unix_processes.c (cmd_call_process): ensure that the INPUT-FILE parameter is a _local_ file name (signal an error if it points to a remote file) Fri Jun 19 00:06:20 1998 John Harper * unix_files.c (sys_directory_file_name): don't remove the trailing slash in a single character string (i.e. "/") Thu Jun 18 23:50:37 1998 John Harper * unix_main.c (handle_input, cmd_sit_for, sys_accept_output): stop prematurely if a Lisp error is detected * unix_processes.c (proc_notification): stop on a Lisp error Tue Jun 16 12:00:24 1998 John Harper * unix_processes.c (run_process): another attempt at fixing the process-exited-but-no-eof problem. Again, I think I may have it this time.. * lispcmds.c (make-list, nth, nthcdr, make-vector, aset, aref, make-string, substring): check and signal negative arguments * stringmem.h, stringmem.c: add some more statistics: the number of _block_ allocations and frees Sun Jun 14 11:53:36 1998 John Harper * files.c (cmd_copy_file): handle local->remote and remote->local copies correctly Sat Jun 13 11:08:18 1998 John Harper * buffers.c (var_last_save_time): was expecting parameters in long-int format, not as a timestamp * unix_files.c (sys_file_modes): mask out all but the permission bits Fri Jun 12 18:11:17 1998 John Harper * unix_files.c (sys_expand_file_names): fix somes bugs when handling "." and ".." in otherwise empty strings Thu Jun 11 16:44:42 1998 John Harper * unix_main.c (wait_for_input, handle_input, sys_event_loop, sys_sit_for, sys_accept_input): use local copies of the master fd set to allow recursive use of sys_accept_input Wed Jun 10 20:49:05 1998 John Harper * misc.c (cmd_sit_for): new function, wait for input or a timeout * unix_main.c (sys_event_loop): split into separate parts to allow new functions sys_sit_for and sys_accept_input * unix_processes.c (cmd_accept_process_output): new function, accept and process output, or timeout Mon Jun 8 14:50:17 1998 John Harper * lisp.c (read_symbol): don't accept `0x' as a hex. number * lispcmds.c (cmd_mapc, cmd_mapcar): tidied up slightly * lispmach.c (cmd_jade_byte_code): ensure that _all_ functions that may end up calling Lisp code set the gc_stackbase slot * lisp.c (funcall): always add the current function to the backtrace stack. This simplifies gc protection, and provides better Lisp debugging information Sat Jun 6 16:09:35 1998 John Harper * views.c (kill_view): new function to clean up an unused but non-gc'd view (update_views_dimensions): dont crash when the window no longer has room for all views, instead delete views from the top of the window until they all fit (cmd_next_view, cmd_previous_view): don't ignore inactive minibuffer views * glyphs.c (make_window_glyphs, make_message_glyphs): handle minibuffer views with more than one line. Always output the minibuffer contents, then if necessary overwrite the _bottom_ line with the window's message * views.c (cmd_view_position): new function, return the position in the window of a specified view (cmd_find_view_by_pos): include status line in view (cmd_translate_pos_to_view): do boundary checks, return nil if the position isn't in the specified view, return t if it's in the status line Thu Jun 4 14:52:49 1998 John Harper * find.c (mystrcmp, mystrrstrn, mystrrchrn): deleted these functions * misc.c (cmd_make_completion_string): renamed as `complete-string', added another arg FOLD-CASE * bytecodes.h, lisp.c, lispmach.c: excise all traces of the return function and the OP_RETURN instruction * buffers.c (cmd_all_buffers): new function, return a list of all existing buffers Tue Jun 2 09:06:58 1998 John Harper * lispcmds.c (cmd_load): execute multiple matching items from the after-load-alist, not just the first * lispcmds.c (cmd_load): after using an entry in after-load-alist, delete it * main.c: add -no-rc to usage string Sun May 31 19:13:39 1998 John Harper * views.c (cmd_viewp): new function * windows.c (cmd_windowp): new function Thu May 28 18:07:09 1998 John Harper * lisp.h (MAKE_TIME, GET_TIME, TIMEP): new way of storing timestamps (DAYS . SECONDS) instead of in long-integer form * unix_files.c (sys_file_modtime): use new timestamp format * misc.c (cmd_current_time, cmd_current_time_string): use new timestamp format (cmd_fix_time): new function to normalise the two parts of a timestamp Mon May 25 17:11:32 1998 John Harper * lispcmds.c (cmd_if, cmd_and, cmd_or): reinstated these special forms * lisp.c (throw_value): declared as volatile. This stops the compiler optimizing tests out of existence Sun May 24 10:24:16 1998 John Harper * edit.h (WIN): new field w_DisplayedName; the string currently displayed as the name of this window (the current buffer's status id string) * values.c (mark_value): mark w_DisplayedName * redisplay.c (cmd_redisplay): if a window's current buffer's status id is different to its displayed name, reset it * x11_windows.c (sys_set_win_name): new function, set the name of a window * x11_windows.c (sys_new_window): fix size_hints structure, set icon name to `jade', don't bother setting window name * x11_main.c: added a `-rv' option to give proper reverse video (get_resources): capitalise resource names when we search under "Jade" (I'm sure this is incorrect, but who knows). Also added a reverseVideo resource * x11_windows.c (sys_new_window): take note of -rv option Sat May 23 11:28:01 1998 John Harper * keys.c (cmd_make_keytab, cmd_make_keylist): renamed as make-keymap and make-sparse-keymap. make-sparse-keymap takes an optional argument, a sparse keymap whose bindings should be inherited (achieved by consing the whole thing onto the end of the new keymap) (findkey, cmd_unbind_keys): cope with finding inherited keymaps in the middle of lists * keys.h, keys.c: changed the definition of KEY (the representation of a single binding) to (COMMAND . (CODE . MODS)) instead of the old [CODE MODS COMMAND]. The cons cell version uses less memory Fri May 22 10:13:26 1998 John Harper * keys.c (next_keymap_path): changed semantics slightly, now it's LISP_NULL if unset, not nil. Also changed the Lisp variable next-keymap-path into a function * buffers.c (cmd_set_buffer_name): if the buffer-status-id looks as though it still just names the buffer, reset it to use the new name Mon May 18 09:21:33 1998 John Harper * lispcmds.c (cmd_delete_if, cmd_delete_if_not): added gc protection to these functions; how long have they been unsafe? Sun May 17 19:50:36 1998 John Harper * housekeeping.c (adjust_marks_split_y): fix this again, maybe this time I've got it right Sat May 16 13:51:54 1998 John Harper * housekeeping.c (adjust_marks_split_y): wasn't looking at the column position to ignore positions before the split in the line * x11_misc.c (write_clip, read_clip): deleted, not used anymore * unix_files.c, ../config.h.in: remove definition and use of HAVE_REALPATH since we provide an implementation for when libc doesn't Tue May 12 16:35:42 1998 John Harper * x11_keys.c (translate_mods): extra arg SUBST-META controlling whether or not to switch the designated meta modifier for the more general EV_MOD_META bit. Needed by x11_find_meta. Sun May 10 21:19:48 1998 John Harper * keys.c (ev_mod_meta): deleted, replaced by window-local meta codes * keys.h (EV_MOD_FAKE_META): renamed as EV_MOD_META; this is now used internally, instead of its translation * x11_keys.c (translate_mods): if the translated set of modifiers includes the current window's meta mask, replace this bit by EV_MOD_META (sys_find_meta): renamed x11_find_meta, now takes a x11_display structure as its argument. It finds the Meta modifier for a particular display * x11_main.c (x11_open_display): call x11_find_meta and set the display's meta_mod field * x11_windowsys.h (struct x11_display): added meta_mod field, the Meta modifier for this display Wed May 6 12:49:17 1998 John Harper * lisp.c (load_autoload): new parameter IS-VARIABLE for autoloading variables * lispcmds.c (cmd_defvar): set variables that are boundp, but whose value is an autoload definition * keys.c (lookup_binding): works with autoloaded variables * unix_client.c (main): call make-window-on-display, not open-window-on-display for the -x and -X options Tue May 5 10:29:45 1998 John Harper * lispcmds.c (cmd_call_hook): allow the HOOK argument to be a symbol or a list, not just a symbol Mon May 4 12:12:53 1998 John Harper * views.c (update_status_buffer): changed the layout of the status line again; also some kludgey attempts at catching buffer overruns Sun May 3 12:20:21 1998 John Harper * views.c (update_status_buffer): pad the gap between the tx_StatusId string and the mode details with hyphens not spaces * misc.c (cmd_version_and_build_string): renamed as build-id-string, doesn't have the version-string on the front, but does have the HOST_TYPE (i.e. i586-pc-gnu, or whatever) on the end * unix_main.c (fatal_signal_handler): minor changes to try and stop the infinite looping seen with Linux at times Wed Apr 29 09:48:37 1998 John Harper * debug-buffer.c, redisplay.c: change malloc/free for sys_alloc/sys_free * undo.c (cmd_undo): when clearing the modified status, set tx_LastSaveChanges as well as tx_ProperSaveChanges Tue Apr 28 15:57:54 1998 John Harper * Makefile.in: added files.o to list of dependencies * edit.h (TX): added tx_StatusId field, a string to display in the status line (VW): removed vw_StatusBuf and STATUS_BUFSIZ, added vw_StatusOverride, remove VWFF_CUSTOM_STATUS flag * buffers.c (cmd_make_buffer): set tx_StatusId to "Jade: BUFFER-NAME" by default (buffer-status-id): interface to tx_StatusId * glyphs.c (make_window_glyphs): change how update_status_buffer is called, now it formats straight into the glyph buffer * values.c (mark_value): add tx_StatusId and vw_StatusOverride * views.c (make_view): don't allocate vw_StatusBuf (update_status_buffer): changed dramatically, now it looks more like Emacs; still needs to be more customisable (cmd_set_status_message): changed for VW structure mods * symbols.c (cmd_put): fix how dumped plists are modified; cons onto their head any new values instead Mon Apr 27 10:51:34 1998 John Harper * symbols.c (kill-all-local-variables): obey the `permanent-local' property of symbols * views.c (make_view): when copying the vw_BufferList, actually make a _copy_ using copy-sequence not just copy the pointer Sun Apr 26 19:23:28 1998 John Harper * views.c (make_view): minor changes to how we set up the view * windows.c (cmd_make_window, cmd_destroy_window): assume responsibilities of open-window and close-window. destroy-window renamed as delete-window, and split into two functions, delete_window, and cmd_delete_window. The Lisp variant calls save-and-quit if window_count==1 (sym_make_window_hook): no longer passed an argument (sym_destroy_window_hook): renamed delete-window-hook (cmd_window_list): new function (sym_window_closed_hook): deleted * x11_windows.c (cmd_make_window_on_display): made interactive * x11_main.c (handle_event): call delete-window, not window-closed-hook * redisplay.c, glyphs.c: another attempt to fix a display bug * edit.h (TXFF_SPECIAL): deleted this flag * buffers.c (destroy-buffer): deleted this function, let buffers be garbage collected as other objects are (buffer-modified-p): don't look at the TXFF_SPECIAL flag (set-buffer-special, buffer-special-p): deleted * views.c (update_status_buffer): ignore TXFF_SPECIAL, give read-only flag higher priority than modified flag Fri Apr 24 11:35:03 1998 John Harper * unix_processes.c (cmd_active_processes): new function, return a list of all active processes (proc_notification): when calling functions, now pass the process as the sole argument * unix_processes.c (mark_active_processes): function to mark any processes that are currently active * values.c (cmd_garbage_collect): call mark_active_processes when HAVE_SUBPROCESSES is defined. This stops executing processes with no references from disappearing Wed Apr 22 17:21:07 1998 John Harper * views.c (make_view): try to initialise the vw_BufferList (cmd_make_view): renamed split-view, deleted the BUFFER parameter, made interactive. This replaces open-view (cmd_destroy_view): renamed delete-view, made interactive. This replaces close-view Tue Apr 21 16:45:05 1998 John Harper * unix_processes.c (get_pty): minor change to order in which pty masters are searched * misc.c (cmd_sleep_for): new function, pauses for a specified time length * unix_main.c (sys_sleep_for): support for sleep-for * buffers.c, streams.c (mark_prin, file_prin): wasn't calling stream_puts correctly Sat Apr 18 00:16:46 1998 John Harper * find.c (buffer_reverse_strpbrk): when matching a newline, the position returned was one column too far to the left * unix_processes.c (run_process): when running synchronously, if the child exits before EOFs are received, allow a few more polls of input before exiting. Hopefully this should be enough to ensure that no final output from the process is missed. Of course, this means that putting a shell command into the background will take a few seconds to return * lispcmds.c (sym_jade_dir, sym_lisp_lib_dir, sym_site_lisp_dir): new pre-defined symbols (lispcmds_init): when defined, the environment variables JADEDIR, JADELISPLIB, JADESITELISP and JADEDOCFILE are used to initialise the locations of the corresponding files and directories * unix_defs.h (LISP_LIB_DIR, SITE_LISP_DIR, DOC_FILE): renamed each macro to ..._SUFFIX, removing the constant JADE_DIR prefix Fri Apr 17 14:20:01 1998 John Harper * lisp.c, lispmach.c, redisplay.c, symbols.c: add preprocessor magic from autoconf manual to handle alloca declaration * unix_main.c (sys_event_loop): when C_ALLOCA is defined call alloca(0) to garbage collect * files.c (cmd_canonical_file_name): call sys_canonical_file_name for unhandled files * unix_files.c (sys_canonical_file_name): new function, uses realpath to expand links in a file name (sys_expand_file_name): fix bug in expanding "foo/../bar" * unix_defs.h: prototype for realpath when HAVE_REALPATH isn't defined * Makefile.in: handle LIBOBJS and ALLOCA correctly, some cosmetic changes Tue Apr 7 11:20:28 1998 John Harper * unix_processes.c (run_process): when running synchronously, look for the child exiting, as well as EOF on its output streams. If it does exit, stop and close all streams. This is to allow shell commands to be put into the background mainly (though they'll get a SIGPIPE if they do any output) Mon Apr 6 09:26:30 1998 John Harper * glyphs.c (make_window_glyphs): reinitialise glyph_row each view; I think this may fix an intermittent bug in which the line after the end of the glyph buffer is accessed Sat Apr 4 17:57:50 1998 John Harper * unix_files.c (sys_file_symlink_p): fixed to use lstat() again instead of stat_file(), and therefore stat() (sys_file_modes_as_string): S and T bits had their case the wrong way around, now they're lowercase if the corresponding execute bit is also set, as in "ls -l" Fri Apr 3 10:47:31 1998 John Harper * edit.h (glyph_buf): includes arrays of pointers to each line instead of the GLYPH_BUF_CODES and GLYPH_BUF_ATTRS macros * glyphs.c, redisplay.c: modifications for new glyph_buf structure * redisplay.c (hash_glyph_row): don't rotate, the hash values it generated weren't very well distributed. Go back to K=33 * unix_server.c: if DEBUG_SERVER is defined generate trace of all server traffic into a debug buffer (server_accept_connection): set the fd returned from accept() to be _blocking_. I didn't realise that accepted connections inherit the characteristics of listening socket. This was the cause of the intermittent bug (a read returning EAGAIN when I didn't expect it) * unix_main.c (unix_set_fd_blocking): new function, opposite of unix_set_fd_nonblocking * jade.h: include * debug-buffer.c (db_printf, db_vprintf): split the old db_printf into these two functions * undo.c (undo_record_unmodified): function to call when a buffer is set as being unmodified; it deletes any previous "unmodified" mark in the undo list * buffers.c (cmd_set_buffer_modified): when STATUS is nil, call undo_record_unmodified * redisplay.c (hash_glyph_row): rotate the hash value instead of just shifting Wed Apr 1 00:54:36 1998 John Harper * files.c: new file, groups together all functions dealing with files; also implements Emacs-like magic-file-names using the `file-handler-alist' variable * unix_files.c: new file, functions to implement the built-in file handler for files in the local filing system * lisp.h: changed Lisp_File structure slightly * buffers.c, edit.c, lispcmds.c, streams.c, unix_main.c, unix_processes.c, unix_server.c, values.c, x11_main.c: modifications to handle new file primitives. Mainly to deal with canonical names (to compare to files), and most importantly, ensuring that everything is gc-protected whilst calling any function in files.c that could invoke some Lisp code * edit.h (TX): added tx_CanonicalFileName field * find.c (push_regexp_data, pop_regexp_data): functions for preserving the regexp match data * jade.h: always include regexp.h * keys.c (eval_input_event): fix bug when inserting repeated string * lisp.c (cmd_add_doc_string, cmd_get_doc_string): deleted (call_lisp3, call_lisp4): new functions (funcall): guarantee that arguments will be gc-protected * lispcmds.c (sym_documentation_file): new variable (cmd_substring): moved here from misc.c * main.c: if an error occurs in startup, print it to stderr * misc.c: lots of reorganisation, including: (sym_operating_system, sym_window_system): replace x11-p, unix-p and amiga-p functions (system): deleted (getenv): deleted, now in environ.jl * unix_main.c (unix_set_fd_nonblocking, unix_set_fd_cloexec): new functions (sigio_handler): unused support for async input * unix_processes.c: use process-environment variable to give environ of each subprocess Fri Mar 20 12:24:50 1998 John Harper * x11_windowsys.h (CLEAR_GLYPHS, FILL_GLYPHS): new macros, for clearing and filling a horizontal sequence of glyphs in a window * redisplay.c (redisplay_do_draw): while scanning a line for attribute changes, also check if the chunk to be drawn consists only of spaces. If so use the CLEAR_GLYPHS or FILL_GLYPHS macros to draw it Thu Mar 19 14:54:39 1998 John Harper * unix_client.c: two new options "-" and "--", for different methods of evaluating forms read from stdin. "-" is intended for interactive use, "--" for batch use * symbols.c (cmd_makunbound, cmd_fmakunbound): don't set slots to LISP_NULL, but to void_value Tue Mar 17 11:11:29 1998 John Harper * glyphs.c (recenter_cursor): fixed a couple of bugs (line_glyph_length): added special case for direct-mapped cache; currently this is what's being used Mon Mar 16 10:47:21 1998 John Harper * lispmach.c, bytecodes.h (OP_FILTER, OP_MACROP, OP_BYTECODEP): new opcodes * lispcmds.c (cmd_filter): new function, similar to the Miranda function of the same name, construct a new list containing elements of an input list that satisfy a predicate * x11_keys.c (translate_event): was always using the display at the head of the x11_display_list to convert keycodes to keysyms; now use the display that the event came from Sat Mar 14 14:58:34 1998 John Harper * streams.c (cmd_format, sym_format_hooks_alist): big overhaul of the format function. Now flags work with most conversions, and user-defined conversions are possible via the format-hooks-alist variable * unix_main.c (cmd_file_symlink_p): was using stat() instead of lstat() to get the file's attributes Fri Mar 13 15:06:28 1998 John Harper * unix_main.c (cmd_file_modes_as_string): returns an "ls -l" type attribute string * misc.c (cmd_file_name_as_directory, cmd_directory_file_name): new functions * unix_main.c (file_name_as_directory, directory_file_name): support for the above * misc.c (cmd_current_time_string): now takes two optional arguments, a timestamp and a strftime() style format string * lisp.c (bindlambdalist): fixed the bug of binding like let* instead of like let Tue Mar 10 20:23:41 1998 John Harper * find.c (cmd_search_forward, cmd_search_backward): fixed case-insensitive matching (first character was always being compared sensitively) Mon Mar 9 09:29:23 1998 John Harper * unix_processes.c (get_pty, run_process): handle not being able to get a pty gracefully (i.e. don't dump core) * regexp.c (regmatch_string): new function, basically a wrapper for regtry(), i.e. compares a regexp to a string with no searching * find.c (cmd_string_match): swapped the order of the NOCASEP and START args (now START is first). Should really make NOCASEP a variable (cmd_string_looking_at): new function, matches a regexp at one place and one place only in a string Tue Mar 3 22:13:22 1998 John Harper * redisplay.c (COMPARE_FAST_AND_LOOSE): when defined as non-zero (the default) just compare hash codes to see if two lines are the same, don't bother actually comparing them byte by byte (hash_glyph_row): changed how the attrs are included (redisplay_message): hash the message line Mon Mar 2 11:10:59 1998 John Harper * unix_client.c: new options "-x DISPLAY" and "-X" to simplify opening a window to the server process * x11_windowsys.h (struct x11_display): data structure to track per-Display data (WINDOW_XDPY): macro giving a pointer to the display data of a partcular window * x11_main.c (x11_open_display, x11_close_display, x11_close_all_displays): functions for managing Displays (x11_display_list): list of all open Display connections * x11_windows.c: misc. updates to handle multiple displays (cmd_make_window_on_display): low-level function to open a window on a specified display (currently always opening a new display connection) * x11_keys.c: misc. updates to handle multiple displays; needs to maintain individual Meta mappings per display * x11_misc.c: misc. updates to handle multiple displays * windows.c (cmd_destroy_window): call sys_unset_font before closing the window * unix_server.c: now accepts different types of requests, the old find-file, eval, and end-of-session. Also, the connection isn't closed after a file has been replied to * unix_client.c: expanded to handle the new multiple request server. New options -f, -e, and -q * unix_defs.h (enum server_request): defines the request types for the client/server stuff * values.c (STATIC_ROOTS): increased from 128 to 160 Sat Feb 28 15:38:33 1998 John Harper * keys.c (eval_input_event): always clear prefix-arg Fri Feb 27 12:31:48 1998 John Harper * movement.c (cmd_center_display): changed semantics of argument, positive args now count from zero, not one * command.c (cmd_call_command): two new flags, @ and !. If the result of the command is a position, and @ is set, move the cursor to this position before returning. If ! is set, before moving the cursor call the lisp function set-auto-mark * movement.c (cmd_end_of_buffer, cmd_start_of_buffer, cmd_end_of_line, cmd_start_of_line, cmd_forward_line, cmd_forward_char, cmd_forward_tab, cmd_find_matching_bracket): use new interactive decl flags @ and ! Tue Feb 24 12:16:47 1998 John Harper * redisplay.c (redisplay_message): new function, draws the message line in the specified window * glyphs.c (make_message_glyphs): new function, outputs the glyphs needed to draw the message in the specified window * windows.c, lisp.c: when the message has to be redisplayed immediately call redisplay_message() instead of doing a full redisplay * views.c (cmd_get_buffer_view): new function, find a view displaying a specified buffer Thu Feb 19 00:01:16 1998 John Harper * Makefile.in: added @top_srcdir@/lib-src to VPATH * lispcmds.c: added prototypes for all DEFSYMS * windows.c (no_message): deleted, it was never called * glyphs.c (recenter_cursor): global instead of static * views.c (cmd_view_origin): calls recenter_cursor() to ensure that the returned value will be correct after the next redisplay (assuming that the current configuration still exists) * buffers.c (swap_buffer, swap_buffer_tmp): swap_buffer_tmp deleted, this was almost the same as swap_buffer anyway. Added code to remove a message that may obscure a newly activated minibuffer * keys.c (eval_input_event): modifications to allow prefix arguments to work with unbound events (i.e. they insert ARG copies of whatever they would normally insert) (unbound-key-hook): this is now an `or' style hook * glyphs.c (make_window_glyphs): only display a cursor in the current window * lisp.c (readl): accept the various backquote characters, that is `X => (backquote X), ,@X => (backquote-splice X), and ,X => (backquote-unquote X) Wed Feb 18 22:52:13 1998 John Harper * glyphs.c (gl_cache_entry_t, gl_cache, line_glyph_length): structures and functions for caching the number of glyphs in a line. Currently a 2-way associative 200 entry cache (indexed by line number) (string_glyph_length): renamed as uncached_string_glyph_length (make_window_glyphs): much work to support line wrapping as well as the old truncation display method (skip_glyph_rows_forwards, skip_glyph_rows_backwards): new functions for moving through a buffer as it would be displayed on screen (recenter_cursor): new function to handle the display origin of each view. Replaces the old resync_xy() (calc_cursor_offset): renamed as get_cursor_column(), now actually returns the column number (char_glyphs): deleted (adjust_cursor_to_glyph): replaced by set_cursor_vertically, this takes a view and a line number and moves the cursor to that line trying to keep the original horizontal screen position (cmd_display_to_char_pos, cmd_char_to_display_pos): translate between screen coordinates in a view and character positions * redisplay.c (cmd_redisplay): don't call resync_xy() * movement.c (sym_next_screen_context_lines): overlap for when scrolling by the screenful (cmd_center_display, cmd_forward_line): updated for wrapped lines (move_down_screens, move_up_screens): deleted (cmd_next_screen, cmd_prev_screen): updated for wrapped lines, also moves the cursor relative to the screen origin, and may leave some context (cmd_mouse_pos): deleted, now implemented in edit.jl * housekeeping.c (resync_xy, set_start_col, set_start_line): all deleted * editcommands.c (cmd_indent_to): call get_cursor_column() instead of calc_cursor_offset() * edit.h (Mark): type renamed as Lisp_Mark, removed mk_ prefix from field names, removed MKFF_RESIDENT flag, implied by type of "file" field. Added MARK_IS_RESIDENT_P() macro (TXFF_DONT_WRAP_LINES): flag controlling whether long lines are truncated or wrapped when rendering. TX_WRAP_LINES_P() accessor macro. (VWFF_AT_BOTTOM): flag set by recenter_cursor() when the end of the buffer is displayed by the view * edit.c (check_row): new function, similar to check_line but takes a line number instead of a position * buffers.c (cmd_in_restriction_p): deleted (cmd_buffer_restricted_p): new function, returns t when the buffer is restricted to less than its full size (var_truncate_lines): new variable, controls the TXFF_DONT_WRAP_LINES flag (cmd_set_mark): deleted (cmd_set_mark_pos, cmd_set_mark_file): new functions * windows.c (cmd_make_window): call make-window-hook * views.c (cmd_destroy_view): updated for line wrapping (use skip_glyph_rows functions) (update_status_buffer): use VWFF_AT_BOTTOM for position flag (cmd_translate_pos_to_view): updated for new display regime * unix_server: replace all occurrences of server-open-file with server-find-file * symbols.c (symbols_init): explicitly initialise the function value of sym_nil in case it was dumped (and left as 0) * lispcmds.c (cmd_list): add test for interrupt (cmd_list_star): new function, creates a dotted list (cmd_atom): somehow I'd inverted the meaning of this predicate (cmd_macrop): new function (cmd_subrp): don't treat bytecode objects as subrs * Makefile.in: use substitution opt_enable_dumped instead of enable_dumped Thu Feb 12 18:30:19 1998 John Harper * jade.h, io.c, lispcmds.c, lispmach.c, redisplay.c, regexp.c, symbols.c, undo.c, unix_client.c, unix_main.c, unix_processes.c, unix_server.c, x11_defs.h, x11_keys.c, x11_misc.c: changes to work with autoconf/configure managed configuration process * memcmp.c: new file, defines the memcmp() library function in case its not in libc * unix_processes.c (get_pty): support for /dev/ptmx style opening of pseudo terminals * glyphs.c (make_window_glyphs): a lot of reorganisation, mostly aimed at simplifying things * housekeeping.c (resync_y): fixed gaps at the end of buffers not being suppressed. It now goes the other way, and is possibly a bit too eager now, but I'll see if I get used to it.. (see the function for a comment) Tue Feb 10 11:15:06 1998 John Harper * glyphs.c (make_window_glyphs): fix for rectangular blocks not working in glyph coordinates Thu Feb 5 17:46:50 1998 John Harper * glyphs.c (make_window_glyphs): fix for block ending past last displayed column * views.c (update_status_buffer): fix for "All of" not being displayed when the last line in the buffer falls exactly on the last line of the view Mon Feb 2 00:05:12 1998 John Harper * edit.h (TX): deleted tx_LastLogical? and tx_Mod?, also removed the flags TXFF_REFRESH_ALL and TXFF_REFRESH_STATUS. The functions flag_insertion, flag_deletion, and flag_modification are now macros that simply bump the buffer's change counter. (VW): removed vw_LastDisplayOrigin and vw_LastBlock?. Changed vw_BlockStatus to an int. Replaced vw_?Pix by vw_FirstX and vw_FirstY. Deleted VWFF_FORCE_REFRESH, VWFF_REFRESH_BLOCK, and VWFF_REFRESH_STATUS flags. (glyph_code, glyph_attr, enum Glyph_Attrs, glyph_buf): types for glyph buffers (WIN): w_Content and w_NewContent, old and new glyph buffers. Deleted w_FontStart, not used anywhere. * glyphs.c (make_glyph_array, expand_tabs): deleted (make_window_glyphs): new function, out of the ashes of make_glyph_array(), it creates the glyph buffer of a window (GlyphTable): changed name to glyph_table_t * redisplay.c: new file, provides a general redisplay algorithm using diffing of glyph buffers to decide what to redraw * x11_windowsys.h: all macros deleted, replaced by DRAW_GLYPHS and COPY_GLYPHS * main.c (inner_main): call redisplay_init instead of refresh_init, don't control cursor (cmd_recursive_edit): don't mess with cursor * unix_main.c (event_loop): don't control refresh explicitly, just call cmd_redisplay() once per loop * views.c (recalc_pixel_measures): renamed recalc_measures (cmd_destroy_view): when there's no preceding view to give the space to, ensure that the following view is ``scrolled'' upwards such that no display scrolling takes place (var_max_scroll): deleted * windows.c: allocation/deallocation of glyph buffers (update_window_dimensions): centralised function to call when the window changes size * x11_main.c: handle Expose events by marking that a rectangle of the current glyph buffer is garbage. Also handle GraphicsExpose here now (sys_flush_output): deleted, call cmd_flush_output() instead * x11_windows.c: minor changes * edit.c (pos_in_block, page_in_block, line_in_block, set_block_refresh): all deleted * editcommands.c: don't call set_block_refresh * housekeeping.c: don't update vw_LastBlock? or tx_Mod? positions since they don't exist anymore * buffers.c, io.c, streams.c: don't set any of the explicit refresh flags anymore, since they were removed * values.c (make_value): don't mark tx_Mod? or vw_LastBlock? or vw_LastDisplayOrigin * movement.c (cmd_mouse_pos): use vw_FirstY instead of vw_TopPix * refresh.c, render.c, x11_render.c: deleted * unix_processes.c, unix_server.c: don't control cursor anymore * lisp.c: don't call refresh_message(); cmd_flush_output() to get a message displayed, just cmd_redisplay(), also don't turn cursor on or off, or call refresh_X * lisp.h (VGLYPHTAB): new name for underlying typedef * keys.c (usekey): renamed as eval_input_event(). Also, don't do anything to handle the display Sun Jan 25 14:03:09 1998 John Harper * io.c (cmd_write_buffer_contents): don't call check_section to check the START and END arguments since it looks at the current restriction, not what is required, so do it manually. Also try to defend against START and END pointing past the end of their respective lines Sat Jan 24 16:46:25 1998 John Harper * io.c (cmd_read_buffer): renamed as read-file-contents (cmd_write_buffer): deleted (cmd_write_buffer_area): renamed as write-buffer-contents. Moved the FILE argument to be first, START and END are now optional, by default the start and end of the current buffer (ignoring restrictions) (cmd_insert_file_contents): new function * unix_processes.c (cmd_call_process_area): calls cmd_write_buffer_contents now * jade.h: moved CONCAT() and QUOTE() to the top of the file, include "unix_defs.h", "x11_defs.h" and "amiga_defs.h" (when necessary) instead of in the config file. Also the configuration file is defined by the macro CONFIG_FILE (it will be quoted) * lisp.c (eval_lambda, funcall): handle throw to 'defun (i.e. a non-local return) properly (cmd_condition_case): ensure that throw_value == LISP_NULL while chasing down the list of handlers * lisp.h: definitions for dumped Lisp constants (CONS_WRITABLE_P): true when the cons cell arg is not in read-only storage (V_Compiled): set to 7 (VECTOR_WRITABLE_P): defined in terms of dumped_text_start and dumped_text_end (COMPILED_WRITABLE_P): deleted, use VECTOR_W_P (dumped_X_{start,end}): prototypes for the symbols created by dump.jl (DUMPED_SYM_NIL): a pointer to the dumped nil symbol * symbols.c (OB_NIL): now defined as &void_object (symbols_sweep): treat all dumped symbols as an extra allocation block (albeit one in which unused symbols are never put on the free-list) (cmd_put): check that cons cell being updated is CONS_WRITABLE_P, if not allocate a new one (pre_symbols_init): new function to create the obarray * lispcmds.c (cmd_nconc, cmd_rplaca, cmd_rplacd, cmd_nreverse): check if CONS_WRITABLE_P(), signal setting-constant error if not (cmd_load): check for ".jld" suffix first when DUMPED is defined, these are the files of non-constant forms output by dump.jl (cmd_subr_documentation): for built-in subroutines, don't return the string from the DOC file, just its position * lispmach.c (cmd_jade_byte_code): in OP_ERRORPRO don't do one to many cdrs when finding the error data * main.c (main): mods for dumped constants. Call pre_values_init() and pre_symbols_init(), then dumped_init() when DUMPED is defined, then the normal stuff * regexp.h, regjade.c, regsub.c: replace #ifdef BUILD_JADE by #ifdef JADE. Also moved to the main src directory so remove .. in included file names. * streams.c (cmd_open, cmd_close): renamed as open-file and close-file (cmd_seek_file): new function, a combination of ftell() and fseek() (cmd_read_file_until): deleted * unix_main.c (read_file): deleted * unix_processes.c (run_process): set close-on-exec for pr_Stderr. Order of interrupt signals for synchronous processes is not SIGINT, SIGTERM, SIGKILL. * values.c (string_cmp): use memcmp to compare strings, not strcmp which exits on finding a zero byte, doh! (mark_value): don't mark read-only cons or vector cells (values_init): now called pre_values_init (values_init2): now called values_init (dumped_init): function to get all dumped data ready for use, basically interns all symbols, setting NULL pointers they contain to nil. Also initialises the allocated_X counts * io.c (cmd_read_file, cmd_write_file): deleted these functions Mon Jan 19 00:32:48 1998 John Harper * lisp.h (Lisp_Compiled): changed to allow a minimum of four items in the vector, also changed some of the related macros * lispcmds.c (cmd_bytecodep): new function (cmd_defun, cmd_defmacro): now accept bytecode objects as second argument * lispmach.c (cmd_jade_byte_code): check when handling exceptions that throw_value != LISP_NULL * find.c (compile_regexp): check for NULL value of last program * buffers.c, commands.c, editcommands.c, find.c, keys.c, lisp.c, lispmach.c, main.c, symbols.c, undo.c, unix_processes.c, unix_server.c, views.c, windows.c, x11_misc.c: made all DEFSYM's global and ensured that each DEFSYM is on a separate line. * lisp.h (VECTOR_WRITABLE_P): check if a vector is in writable memory or not * lispcmds.c (cmd_aset): check when modifying a vector that the cell8 static bit isn't set. For this and (now) for modifying a static string the setting-constant error is raised * lispmach.c (cmd_jade_byte_code): use a single switch statement, instead of differentiating between those instructions with embedded arguments, and those without. Sun Jan 18 00:10:41 1998 John Harper * lisp.h (Lisp_Compiled): new type, a five-element vector representing a byte code subroutine (Lisp_Cell): given each cell8 type a `static' bit as bit 7, this also doubles the maximum size of strings * values.c: minor changes for new type * streams.c (stream_put_cntl): deleted since it was never used * lispmach.c (cmd_jade_byte_code): calling byte code subrs (cmd_make_byte_code_subr): new function * lispcmds.c: updated to support byte code subrs in most places that vectors are supported * lisp.c: big changes: support for byte code subrs, eval now uses funcall to call functions, only macroexpands expands macros, #[...] reads and prints as a byte code object, cleaned up what is protected from garbage collection, only funcall increments and checks max-lisp-depth.. (print-escape-newlines): now called `print-escape', can also be set to produce octal escapes for _all_ non-printing characters * edit.c (free_line_buf): function version of FREE_LINE_BUF * io.c (read_tx): use free_line_buf() to free lines * commands.c: updated to handle byte code subrs * edit.h, edit.c, buffers.c, io.c: each buffer now gets its own StrMem pool * stringmem.c (sm_init): initialise more of the fields * stringmem.h, stringmem.c: new field in MemBucket structure, `mbu_FreeCount', contains the number of available objects in the buffer * lisp.h: Changed the VALUE format again. Now its: "Bit definitions for VALUE pointers. The lowest bit is always zero except during GC. If bit one is set the object is a 30-bit signed integer, with the data bits stored in the pointer as bits 2->31. If bit one is clear the VALUE is a pointer to a "cell", all objects apart from integers are represented by various types of cells. Every cell has a VALUE as its first element, the lowest bits of this VALUE define the actual type of the cell. If bit zero is unset, the cell is a cons, a pair of two values the car and the cdr (the GC mark bit of the cons is bit zero of the cdr). If bit zero is set the cell more type information is stored in bits 1->6, with bit 7 the mark bit." Fri Jan 16 00:40:41 1998 John Harper * unix_misc.c: renamed as unix_main.c (register_input_fd, deregister_input_fd): functions to register that we need to listen for input on a file description, and the function to be called when input is available (event_loop): a totally general input loop using select(), made from old bits of x11_eventloop.c * x11_display.c: renamed as x11_main.c, inherited what's left of x11_eventloop.c (x11_handle_input): a function that's registered as the input handler for the X11 Display fd; does all event handling (sys_flush_output): a function called from event_loop() that just calls XFlush() * main.c (on_idle): new function to move the idle actions out of the system-specific code (handle_input_exception): similar idea for handling of exceptions in low-level input loops (doconmsg, input_lock, cmd_input_lock): deleted all these remnants of Amigadom * unix_processes.c: uses [de]register_input_fd() (cmd_signal_process): deleted this function, it was ill-guided, instead define a function do_signal_command by which the Lisp functions that send signals are implemented * unix_server.c: uses [de]register_input_fd() * values.c (cmd_cons): _will_ return LISP_NULL if we are out of memory, this will break things further up the line.. Thu Jan 15 12:46:46 1998 John Harper * lispcmds.c (cmd_nth, cmd_nthcdr): these now check for interrupts * lisp.c (find_member_by_index, move_down_list): removed these functions, they were (almost) the same as nth and nthcdr * commands.c (interactive_spec, cmd_interactivep): don't use find_member_by_index() and move_down_list(), use nth and nthcdr instead. * streams.c (cmd_format): don't use ARG1 and ARG2 macros * lisp.h: removed ARG1-4 and ARGN macros * lisp.c (debug_on_error): made this into a normal variable, not a subr-variable type thing * misc.c (cmd_make_completion_string): cleaned up this function * lispcmds.c (cmd_function, cmd_return): removed, defined as a macro in lisp.jl (cmd_make_list): don't build the list front-to-back, ordering's not important (cmd_eval_hook, cmd_eval_hook2): deleted (cmd_call_hook): new function, three arguments, HOOK-SYMBOL, ARG-LIST, and optionally TYPE. TYPE is one of nil, or, and, defining how the return values of the hook functions are treated. * commands.c, editcommands.c, keys.c, views.c, windows.c, x11_eventloop.c: changed calls to eval-hook to use call-hook Wed Jan 14 17:49:27 1998 John Harper * lispmach.c, bytecodes.h: totally rethought how exceptions (i.e. unwind-protect, catch/throw and condition-case) are handled. Before the handler forms were compiled into separate byte-code forms. Now we handle them inline to the original piece of code. The idea is that the new instruction OP_BINDERR registers an exception handler (an offset into the byte-code string), along with the current stack pointer, by adding to the binding stack. When an exception occurs the bind stack is unbound, when a (PC . SP) item is found, the stack pointer is set to SP, throw_value is pushed onto it, and PC is jumped to. The EJMP instruction can be used to give control back to the C error handler. (OP_CATCH_KLUDGE, OP_UNWIND_PRO, OP_UN_UNWIND_PRO, OP_ERROR_PRO) all been deleted. (OP_CATCH): new opcode. This takes two arguments, TAG and THROW-VALUE. THROW-VALUE is the saved copy of throw_value, if (car THROW-VALUE) == TAG we match, and we leave two values on the stack, nil on top (to pacify EJMP), (cdr THROW-VALUE) below that. (OP_BINDERR): Pop our single argument and cons it onto the bind- stack in a pair with the current stack-pointer. This installs an address in the code string as an error handler. (OP_ERRORPRO): This should be called with three values on the stack. 1. conditions of the error handler 2. throw_value of the exception 3. symbol to bind the error data to (or nil). It pops (1) and tests it against the error in (2). If they match it sets (2) to nil, and binds the error data to the symbol in (3). (OP_EJMP): Pop the stack; if it's nil jmp pc[0,1], otherwise set throw_value=ARG and goto the C error handler. * lisp.c (cmd_error_protect): renamed this as condition-case and inserted a new first parameter VAR, the symbol to bind the error data to. This is the same as Emacs function, it's necessary for the new VM error handling (compare_error): new function to compare the conditions a handler says it will take, against the error that was signalled * lispcmds.c (cmd_unwind_protect): only reinstall the old throw if it's actually an error and there was no error in the cleanup forms. This way the newest error takes precedence Mon Jan 12 22:15:55 1998 John Harper * find.c (buffer-compare-string): function to compare a string with a position in a buffer * lisp.c (sym_debug_macros, eval): when debug-macros is nil the debugger is never entered to expand a macro definition * lispcmds.c (cmd_max, cmd_min): new functions * bytecodes.h, lispmach.c (OP_MAX, OP_MIN): new instructions Sun Jan 11 19:16:09 1998 John Harper * lispcmds.c (cmd_load, sym_eval_after_load): a method of having a form be evaluated after a specified Lisp-library is loaded. Tue Jan 6 13:06:06 1998 John Harper * edit.c (pad_cursor): reinstall the original cursor position after calling pad_pos(), since spaces may have been inserted before it, pushing it further down the line. * unix_processes.c (check_for_zombies): re-ordered a lot of this function. Also fixed the bug where errno was being looked at even if the return from waitpid() was zero. Sat Jan 3 20:57:03 1998 John Harper * refresh.c (refresh_block): move the initialisation of tstart and tend to before they're passed as arguments to sub_regions() Sun Dec 21 02:48:28 1997 John Harper * lisp.h (VCONS): don't mask out the VALUE_CONS_MARK_BIT, if this needs to be done, it's done explicitly * lisp.h (LISP_MAX_INT, LISP_MIN_INT): macros defining the limits of what can be stored in integer values * lisp.c (read_symbol): rewrote the code to parse integers, it does all calculation inline, removing the need to call strtol() at the end, plus negative hexadecimal numbers work properly now. Sat Dec 20 00:01:55 1997 John Harper * misc.c, build-info, Makefile.in: the shell script build-info produces a header file build.h, defining some of the circumstances of the build process. misc.c includes this header file and makes the information available through the `version-and-build-string' function. * lisp.h (Lisp_Data_Type): Added a new `sweep' field, a function to call in the sweep phase of GC * values.c (data_types): filled in the new `sweep' field (cmd_garbage_collect): call each `sweep' function in turn instead of doing this by name * unix_processes.c (proc_init): now installs type information about V_Process objects in data_types[] itself. also removed the __waitpid__ debugging since the bug never occurred, maybe it will now... * lisp.h: Positions are now (ROW . COL), we keep the `Pos' structures for internal use, to avoid the masking and shifting required to access Lisp cons and integers. Having said that, they're not used that widely, just a few functions. * editcommands.c (pos-col, pos-line): removed these, they're defined in lisp.jl as macros (cdr and car respectively) * bytecodes.h, lispmach.c (OP_POS, OP_POSP): two new opcodes, the pos and posp functions. Note that pos isn't the same as cons since it replaces nil arguments with the current row or column of the cursor (also, of course, the arguments are the opposite order to in the cons function.) * lisp.h: Totally changed the way that VALUEs (Lisp objects) are defined; instead of wasting memory storing type information in cons cells and storing integers as allocated objects, we now do some bit-twiddling to store a subset of the type information in the two or three lowest bits of the VALUE. This means that cons cells only take 2 words (8 bytes) instead of 3, and integers can be stored in the VALUE itself (but now we only have 29-bit signed integers, not 32). Also we have to enforce strict alignment rules: cons cells to at least eight bytes, _everything_ else to at least four bytes. It's basically trading memory use in the data section for some code bloat (the extra instructions to do the bit twiddling). It's not too bad though, all objects but cons cells and numbers can be accessed from a VALUE as-is, once their type has been established (which does take a few more instructions). I've also taken this opportunity to clean up some of the other Lisp object handling code. Also, the plan is to remove position objects completely and store them as a cons cell containing two integers. To overcome the loss of the three bits in integers, I've defined a new pseudo-type called LONG_INT, which is a cons cell containing the low 24 bits in its car, and the high bits in the cdr. This allows large values like time stamps to be stored without dropping bits. * configs/config.h.*: added some more configuration macros, all to do with alignment, (MALLOC_ALIGNMENT): this has to be defined to the minimum alignment of malloc() allocations. It's checked in an assert in unix_memory.c currently (PTR_SIZED_INT): by default `long int', this must be an implicitly signed integer of the same size as a standard pointer (i.e. sizeof(PTR_SIZED_INT) == sizeof(void *), this is also checked, in main.c) (ALIGN_4, ALIGN_8): these aren't actually mentioned in the config files, but they align definitions to four and eight bytes respectively. For GNU CC they'll be defined in jade.h when not already existing * lisp.c (handle_var_long_int): similar to handle_var_int, but for 32 bit integers stored in cons cells * buffers.c (var_last_save_time): defined as a LONG_INT now * misc.c (cmd_current_time): returns a LONG_INT now (cmd_time_later_p): new function for comparing time stamps * edit.h (TX): Changed some long fields to ints, to signal that they can be stored in less than 24 bits * jade.h (ALIGN_4, ALIGN_8): definitions for GNU CC (CONCAT, OFFSETOF): new macros * stringmem.c, stringmem.h: formalised old alignment assumptions, all allocated blocks will be aligned to at least four bytes. (STRMEM_ALIGNMENT): defined to the minimum alignment of blocks allocated by sm_alloc() Tue Dec 16 12:05:14 1997 John Harper * lispcmds.c (cmd_or, cmd_and): deleted, these are now macros in lisp.jl Mon Dec 15 10:52:24 1997 John Harper * edit.c: When allocating line buffers, use the knowledge that stringmem.c allocates memory in multiples of eight bytes to improve our allocation strategy. Lines are also allocated in multiples of eight bytes, and insertions/deletions that don't cause a multiple-of-eight boundary to be crossed are handled by a simple memory copy. (LINE_BUF_SIZE, ALLOC_LINE_BUF, FREE_LINE_BUF): macros to implement the above strategy (alloc_line_buf): function version of ALLOC_LINE_BUF (delete_section): when joining two lines, optimise the case where either of the lines is empty * io.c (read_tx): all line allocations use alloc_line_buf() now. * bytecodes.h (OP_JPN, OP_JPT): new opcodes, jump-and-pop-if-t and jump-and-pop-if-nil * lispmach.c (jade-byte-code): implemented JPN and JPT Sun Dec 14 14:10:47 1997 John Harper * editrect.c: removed, now implemented in Lisp in rectangle.jl * Makefile.in: removed editrect.c from COMMON_SRCS * main.c (inner_main): removed call to editrect_init() * glyphs.c (char-to-glyph-pos, glyph-to-char-pos): now check the validity of the POS argument * find.c (string-match): new optional arg START, defining where in the string to start searching * Radically changed the way in which position objects are handled. Removed the old POS/LPos distinction; now we only have positions as Lisp objects, two new macros VCOL(p) and VROW(p) to access the two components of a position. But perhaps the most important change is that positions in Lisp objects are _immutable_, that is, once they've been created their contents can not be modified. Although this may appear to involve many more objects being allocated, this isn't necessarily the case since pointers to position objects may be passed around much more freely, for example, when creating undo information. There is a distinction made between accessing positions through VALUEs, and through `Pos *' pointers---the latter are generally stored on the stack and hence writable. The immutability of positions means that the functions next-char, et al. which _modify_ position objects are no longer valid. A list of function changes follows: * editcommands.c (set-pos-col, set-pos-row, split-line): removed, split-line implemented in edit.jl * movement.c (next-char, prev-char): renamed as forward-char (next-line, prev-line): renamed as forward-line (next-tab, prev-tab): renamed as forward-tab In all of these backward-X is provided by lisp/edit.jl. These functions are similar to the old ones, but always return a new position. (screen-top-line, screen-bottom-line, screen-first-column, screen-last-column): removed, they were never used (left-char, right-char): removed, sort of implemented as macros in edit.jl (goto-char): renamed as `goto' (buffer-end, line-end): renamed as `end-of-X' (buffer-start, line-start): renamed a `start-of-X' (goto-buffer-start, goto-buffer-end, goto-line-start, goto-buffer-end, goto-next-line, goto-prev-line, goto-left-char, goto-right-char, goto-prev-tab, goto-next-tab, goto-next-char, goto-prev-char): removed, most of the new functions can be called interactively instead (match-brackets): renamed as `find-matching-bracket' * find.c: lots of name changes. Also added a 1-deep cache of compiled regexps, preliminary results indicate a 10% hit ratio (find-next-regexp, find-prev-regexp): renamed as `re-search-forward' and `re-search-backward' (find-next-string, find-prev-string): renamed as `search-forward' and `search-backward' (find-next-char, find-prev-char): renamed as `char-search-forward' and `char-search-backward' (regexp-quote): renamed as `quote-regexp' (regexp-match): renamed as `string-match' (replace-string, replace-regexp, regexp-expand, regexp-expand-line, regexp-match-line): removed, replace-string implemented in lisp/replace.jl (expand-last-match): expands a template using the subexpression data of the most recent regexp match * I have a sed script that will perform a lot of these name changes, s/(buffer-start/(start-of-buffer/ s/(buffer-end/(end-of-buffer/ s/(line-start/(start-of-line/ s/(line-end/(end-of-line/ s/(goto-char/(goto/ s/(match-brackets/(find-matching-bracket/ s/(next-char/(forward-char/ s/(next-line/(forward-line/ s/(next-tab/(forward-tab/ s/(goto-buffer-start)/(goto (start-of-buffer))/ s/(goto-buffer-end)/(goto (end-of-buffer))/ s/(goto-line-start)/(goto (start-of-line))/ s/(goto-line-end)/(goto (end-of-line))/ s/(find-next-regexp/(re-search-forward/ s/(find-prev-regexp/(re-search-backward/ s/(find-next-string/(search-forward/ s/(find-prev-string/(search-backward/ s/(find-next-char/(char-search-forward/ s/(find-prev-char/(char-search-backward/ s/(regexp-quote/(quote-regexp/ s/(regexp-match/(string-match/ It still leaves a lot to be done by hand though, all prev-char, prev-line and prev-tab calls should be changed to forward-X with negative arguments (faster than calling backward-X); also the result of the function must be used now. * unix_processes.c: once again I've simplified the process termination code; now the only thing done in the SIGCHLD handler is to set a flag that is checked by a function called after every event/timeout by x11_eventloop.c, I've also added some debugging trace info. to try and narrow down the intermittent bug that causes synchronous processes to hang on exit (if it still exists) * debug-buffer.c: new file; provides circular output buffers and a `db_printf' function to output to them, on a crash or by called `db_spew' their contents is output * unix_misc.c: all standard signal handling is here now, including the SIGINT handler that used to be in x11_display.c All error signals (FPE, ILL, SEGV, BUS, QUIT, ABRT) are trapped and cause all debug buffers, and the lisp backtrace to be output before termination. SIGINT works as before, by stuffing int_cell into throw_value All other termination signals (TERM, HUP) cause term_cell to be stuffed into throw_value, this winds back to the top-level event loop, which auto-saves all modified files before quitting * x11_eventloop.c: now calls proc_periodically() instead of proc_notification(), also handles finding sym_term_interrupt in the car of the throw_value (as described in the previous paragraph). * x11_windows.c (screen-width, screen-height, window-left-edge, window-top-edge, window-width, window-height, window-bar-height): removed, they weren't used by anything * buffers.c (auto-save-buffers): new boolean argument, `force_save', when true the time factor when looking for files to auto save is ignored. (get_tx_cursor_ptr): similar to `get_tx_cursor' but returns a ptr-to-a-ptr * edit.c: cleaned up the myriad of insignificant functions * misc.c (strtoc, ctostr): removed these ugly functions (version-string): new function returning a string describing the current editor version * streams.c (stderr-file): does for stderr what stdout-file does for stdout * views.c (view-origin): returns the position of the top-left character in the view * configs/config.h.* (HAVE_PSIGNAL, HAVE_STRSIGNAL): two new configuration macros * regexp/regexp.h, regexp/regjade.c, regexp/regsub.c: changes for new position objects, also some changes to calling format Mon Dec 8 11:32:15 1997 John Harper * undo.c (undo_record_insertion, undo_record_deletion, undo_record_modification, undo_push_deletion): ensure that null commands are ignored (i.e. when START == END) * editcommands.c (cmd_set_indent_pos): in the `diff > 0' section, the undo_record_modification() function was being called _after_ the modification had been performed, not before as it should be * unix_processes.c: Simplified the async. process clean up; the PR_EXITED value has been scrapped. Now we assume that once we receive SIGCHLD from a process there won't be any more output coming from it. This seems to work ok but I think there may be race-conditions involved (between the main select() and the clean up code). Needs serious investigation. * x11_eventloop.c: Removed call to proc_on_idle() Wed Nov 26 13:13:52 1997 John Harper * jade.h: reorganised a bit (MAX,MIN,POS): macros for maximum, minimum, and positive part, respectively (ROUND_UP_INT, ROUND_DOWN_INT): rounding macros * housekeeping.c (resync_y): rewritten; fixed the bug in which the cursor was sometimes being left outside the visible region. Also avoids unnecessary space being left at the bottom of the display in certain circumstances Mon Nov 24 11:25:06 1997 John Harper * lispcmds.c (cmd_last): now returns the last element as it should, not the last cons cell Sun Nov 23 16:09:44 1997 John Harper * lisp.c (signal_missing_arg): put the argument number into a list. * lispcmds.c (APPLY_COMPARISON): don't check for numerical args, comparison works on all objects. Signal an error if less than two arguments are given * lispmach.c (unbind_one_level): when reinstalling a view, check that its parent window is still valid * views.c (cmd_with_view): don't save the old window, it's stored in the view structure * windows.c (cmd_with_window): reinstall the current view in the old window, as well as the window itself Fri Nov 21 12:23:16 1997 John Harper * lispcmds.c: generally improved error reporting, especially of missing arguments (a lot of functions just returned NULL, no errors or anything..) Also functions which take lists as arguments don't silently ignore anything that's not a cons cell, an error is signalled if it's not LISTP (cons or nil) (cmd_plus): no arguments gives a result of zero. (cmd_product): no arguments gives a result of one. (cmd_remainder): restricted to two arguments now, any more are pretty meaningless (cmd_mod): new function implementing the modulo operation, similar to cmd_remainder but works properly for negative arguments. (cmd_gtthan, cmd_gethan, cmd_ltthan, cmd_lethan): can now take more than two arguments * lisp.c (signal_missing_arg): new function for convenience * lisp.h (LISTP): new macro, disjunction of NILP and CONSP * bytecodes.h, lispmach.c (OP_MOD): renamed as OP_REM to allow a new instruction OP_MOD that does the proper modulo operation * lispmach.c (cmd_validate_byte_code): new function to check if a given byte code instruction set version may be executed in the current version of the editor * bytecodes.h (BYTECODE_MAJOR_VERSION, BYTECODE_MINOR_VERSION): macros defining the current byte code version Mon Nov 17 19:02:44 1997 John Harper * undo.c (undo_end_of_command): this new function replaces both undo_distinct() and undo_new_group(). Instead of trying to be clever when adding group separators, simply add one after _every_ event is processed. Also, separators are added to _every_ buffer whose last undo item is not already a separator. (cmd_undo): new optional arg controlling the number of commands that are undone; when called interactively this is taken from the prefix arg. * commands.c (cmd_call_command): removed calls to undo_distinct(). * x11_eventloop.c, amiga_eventloop.c: removed all calls to undo_distinct(), replaced by two strategically placed calls to undo_end_of_command(). * keys.c (usekey): removed calls to undo_distinct(). To ensure that successive self-bound key insertions are merged in the undo list, any leading group-separator after a previous insertion command is removed before inserting the text (and then replaced at the head of the undo list afterwards). * views.c (cmd_translate_pos_to_view): adds vw_StartCol into the column of the result Sun Nov 16 01:22:06 1997 John Harper * movement.c (cmd_raw_mouse_pos): new function giving the glyph position of the mouse relative to the origin of the current window * views.c (cmd_find_view_by_pos): new function to find the view in a window specified by a window-relative position (cmd_translate_pos_to_view): new function to make a buffer-relative glyph position from a window-relative glyph position and a view * x11_eventloop.c, x11_windows.c (handle_event, sys_get_mouse_pos): try not to query the server for the pointer position---when possible grab it from the last event. * glyphs.c (char_col): try to handle columns past the end of a line without crashing Fri Nov 14 12:44:01 1997 John Harper * io.c (read_tx): Now uses a predictive method of allocating the array of line headers whilst loading files. The average number of chars-per-line in the last file loaded is used to predict the number of lines in the current file. If this prediction is wrong the chars-per-line of the loaded portion of the new file is used to refine the predicted number of lines. * unix_misc.c, amiga_misc.c (sys_file_length): new function to return the size, in bytes, of a named file, or -1 if the size is unknown. Currently the Amiga implementation is totally untested. * edit.c (clear_line_list, kill_line_list, resize_line_list): the tx_Line array of line headers now includes "slack", i.e. unused entries at the end of the array. Currently a maximum of 32 extra entries, allocated as +/- 16. This makes line insertion/deletion faster, as well as possibly reducing memory fragmentation. * edit.h (TX): added tx_TotalLines field to allow unused entries at the end of the tx_Lines array Fri Nov 7 09:52:30 1997 John Harper * render.c (draw_bit, draw_line, draw_block_line, draw_line, draw_line_part, draw_line_glyph_length): miscellaneous fixes, mostly to help fix block rendering * edit.h (TX): new variables tx_LastLogicalStart and tx_LastLogicalEnd; the restriction at the last refresh. * refresh.c: now uses tx_LastLogical{Start,End} to see if the restriction has changed, if so just redraw everything * buffers.c (cmd_restrict_buffer): don't set TXFF_REFRESH_ALL anymore, it's covered by the variables described above * housekeeping.c: the position updating functions also update tx_LastLogical{Start,End} Mon Nov 3 01:27:49 1997 John Harper * refresh.c (refresh_block, refresh_view, sub_intersect_regions, sub_regions): _much_ better handling of block refresh--now only the stuff that needs to be redrawn actually is! The sub_* functions implement two set/logical operations on pairs of regions * render.c (redraw_region): better clipping of region * views.c (cmd_set_rect_blocks): sets the VWFF_FORCE_REFRESH flag; this should really be done properly * edit.c (set_block_refresh): just sets VWFF_REFRESH_BLOCK * edit.h (VW): new fields vw_LastBlockS, vw_LastBlockE, vw_LastBlockStatus. * housekeeping.c: updates the two new fields in the VW structure. Thu Oct 30 13:16:45 1997 John Harper * unix_processes.c (run_process): some fixes made to the synchronous parent code; shouldn't hang anymore (?) and now does time outs to look for user interruptions Tue Oct 28 17:07:53 1997 John Harper * unix_processes.c: Hopefully fixed the long-running "process exited but no eof" debacle; everything should work now (famous last words). Also separates the stdout and stderr streams when using pipes; the process-error-stream and set-process-error-stream functions control where the output actually goes. By default it's set to the same value as the output-stream (run_process): when using a pty initialise some of the more basic control codes to sensible values * x11_eventloop.c (event_loop): now calls proc_notification() _after_ going through the input fd's and handling the idle stuff Tue Oct 7 13:12:03 1997 John Harper * movement.c (cmd_center_display): renamed from centre-display. Now takes a second optional argument controlling where in the display to put the line under the cursor. Taken from the prefix-arg when interactive. Thu Oct 2 18:32:17 1997 John Harper * unix_processes.c (proc_on_idle): new function called when the editor is idle; it acts as a safety net for processes that have exited but haven't given an EOF over the connection. Any such processes are marked as truly dead * x11_eventloop.c (event_loop): calls proc_on_idle() Wed Oct 1 21:00:17 1997 John Harper * render.c (redraw_lines_clr): check arguments against tx_Logical{Start,End} more rigorously. Sun Sep 28 22:03:43 1997 John Harper * housekeeping.c (adjust_marks_join_y): fixed a really bad bug that must have existed for _years_. If the position being updated was past the two lines being joined it wasn't adjusted Sat Sep 27 11:34:13 1997 John Harper * lisp.c (sym_print_escape_newlines, sym_print_level, sym_print_length): variables controlling how lists and strings are printed * housekeeping.c (adjust_marks_add_y, adjust_marks_sub_y, adjust_marks_split_y, adjust_marks_join_y): these now update vw_LastDisplayOrigin iff they update vw_DisplayOrigin. This stops the refresh code scrolling erroneously * x11_render.c (redraw_exposed_area): recognises when expose events hit status lines correctly now Thu Sep 25 09:48:57 1997 John Harper * unix_misc.c (same_files): tries to compare files that don't actually exist (cmd_file_absolute_p): new function * amiga_misc.c (cmd_file_name_absolute_p): new function * unix_defs.h, amiga_defs.h: Define SITE_LISP_DIR * lispcmds.c (sym_load_path): added site-lisp directory * revision.h: Now protected by #ifndef stuff * Makefile.in: Added revision.h to HDRS * jade.h: Include revision.h Wed Sep 24 11:11:49 1997 John Harper * misc.c (cmd_file_name_equal): new function, called file-name=, that tests whether two filenames actually refer to the same file. * x11_eventloop.c (x11_last_event_time): variable containing the timestamp from the last X11 event (that has a timestamp). * x11_misc.c: Now each selection info has the timestamp of when the selection was created. x11_lose_selection() ignores events with times less than or equal to this time * x11_misc.c (cmd_x11_own_selection_p): returns t when Jade has the selection (x11_window_lose_selections): lose anything owned by a particular window (x11_set_selection): can now set a string as the current selection * x11_windows.c (sys_kill_window): calls x11_window_lose_selections() Tue Sep 23 10:55:03 1997 John Harper (john@dcs.warwick.ac.uk) * views.c (update_status_buffer): all line numbers/counts now take note of the current restriction. Also the buffer position is displayed in "all/top/bottom/percentage" style * refresh.c (refresh_view): call resync_xy() before redrawing the status line, not after. * unix_server.c, amiga_server.c: (server-reply): compare files with same_file() not just comparing their names (which doesn't always work) Mon Sep 22 17:53:50 1997 John Harper (john@gem.dcs.warwick.ac.uk) * editcommands.c (delete-area): given it an interactive spec (the current block) * buffers.c (restrict_buffer): made the interactive spec clear the block * keys.c, keys.h: new handling of meta modifier. Now defined as a variable in keys.c. This allows meta to change from system to system. * x11_keys.c, amiga_keys.c (sys_find_meta): new function to return the meta modifier mask for the current system. Also some work to decode and encode meta modifiers Mon Sep 22 00:03:08 1997 John Harper (john@orcrist) * lispmach.c: (slightly) better error reporting for when arguments aren't of the required type for inlined functions * views.c, windows.c, buffers.c (cmd_with_view, cmd_with_window, cmd_with_buffer): these now signal an error if the first argument isn't of the required type * lispcmds.c (cmd_unwind_protect): don't lose errors occuring in the cleanup-forms anymore Sun Sep 21 14:42:19 1997 John Harper (john@orcrist) * views.c (cmd_destroy_view): don't let minibuffer views be killed anymore Sat Sep 20 00:20:29 1997 John Harper (john@orcrist) * unix_processes.c (cmd_call_process_area): new function to call a process with a portion of the current buffer as its input. * misc.c (cmd_tmp_file_name): now uses its own buffer * io.c (cmd_write_buffer_area): fixed bug which could cause an attempt to write -1 (i.e. MAXUINT) bytes. Also added an interactive spec so it can be called as a command * unix_processes.c (cmd_run_process): renamed as call-process * unix_misc.c, amiga_misc.c (cmd_file_size): new function that return the size of a specified file. The Amiga version is totally untested and probably wrong * io.c (cmd_write_buffer, cmd_write_buffer_area): both functions now accept streams for output, as well as the original file name interface * lisp.h (VIEWP): now checks if vw_Win pointer is non-null; this happens when the view has been destroyed but is still in scope. * views.c (view_prin): prints "#" for views that have been destroyed Fri Sep 19 00:48:20 1997 John Harper * find.c (buffer_strpbrk, buffer_reverse_strpbrk, buffer_strchr, buffer_reverse_strchr, buffer_compare_n, forward_char, backward_char): new buffer utility functions. Used mainly by the new regexp matcher * find.c: Most of the lisp functions have been rewritten to use the new regexp matcher. All functions now allow matches across line boundaries (including string and char variants) find-{next,prev}-string both set the match-start and match-end variables. * editcommands.c (sym_flatten_table): variable containing a translation table that converts newlines to spaces Thu Sep 18 21:06:05 1997 John Harper * movement.c (prev_char, delete_char): deleted these functions, they're replaced by forward_char and backward_char in find.c * edit.c (delete_section): doesn't trash the `startPos' and `endPos' parameters anymore Sun Sep 14 19:39:50 1997 John Harper (john@orcrist) * views.c (cmd_view_dimensions, cmd_set_view_dimensions): commands for reading and manipulating the size of a view (set_scroll_steps): checks that the scroll step isn't greater than the width/height of the view * windows.c (cmd_window_dimensions): returns the glyph dimensions of a window * movement.c (cmd_mouse_pos): now adds in vw_StartCol Sat Sep 13 11:55:23 1997 John Harper (john@orcrist) * edit.c (check_pos, check_line, check_section): when these functions return FALSE they also signal an error. Also check_pos() now returns FALSE (not void), when the line is out of range * find.c, movement.c, editcommands.c: now check the return value of check_pos() * lisp.c (sym_invalid_pos): new error symbol * buffers.c (cmd_restrict_buffer): now calls cmd_unrestrict_buffer() before checking the validity of the specified section. Otherwise anything outside the current restriction will be rejected. Mon Sep 8 00:24:47 1997 John Harper (john@orcrist) * unix_misc.c (cmd_system_name): try harder to get a fully qualified host name (with domain information) Sun Sep 7 00:05:37 1997 John Harper (john@orcrist) * views.c (update_status_buffer): surrounds the cursor position with square brackets when a restriction is in effect * streams.c: all streams using buffers take note of any restriction to that buffer * io.c (read_buffer): clears any restriction before reading (write_buffer): option to only write restricted text * edit.c (check_pos, check_line, check_section): region being validated must be inside any restriction * movement.c, editcommands.c, find.c: restrict parts of the buffer that may be used to the restriction (if it exists) * buffers.c (cmd_in_restriction_p): new function; a predicate on whether a position is in the restricted part of a buffer * buffers.c (cmd_restriction_end): now does what it is documented as doing, returns the last character of the line before tx_LogicalEnd * movement.c (cmd_buffer_end): when I-R-P is null just return the value of restriction-end Sat Sep 6 13:34:55 1997 John Harper (john@orcrist) * housekeeping.c (adjust_marks_add_y): doesn't shift tx_LogicalStart if it equals the insertion line * buffers.c (cmd_restrict_buffer, cmd_unrestrict_buffer, cmd_restriction_start, cmd_restriction_end): new functions to work with tx_LogicalStart and tx_LogicalEnd * edit.h (TX): added tx_LogicalStart and tx_LogicalEnd fields; the line numbers of the first and last+1 lines that may be displayed in the buffer * movement.c (cmd_buffer_end, cmd_buffer_start): extra argument IGNORE-RESTRICTION-P (cmd_centre_display, cmd_goto_buffer_end, cmd_goto_buffer_start, cmd_goto_next_line, cmd_goto_prev_line, move_down_screens, move_up_screens): modified to work with buffer restrictions * housekeeping.c (adjust_marks_add_y, adjust_marks_sub_y, adjust_marks_split_y, adjust_marks_join_y, resync_y): modified to work with buffer restrictions * io.c (read_tx): sets the buffer restriction to the entire file initially. * edit.c (clear_line_list): initialises restriction * render.c: ensure that nothing outside the restriction is rendered. * All files are now under RCS control, not before time Fri Sep 5 20:06:32 1997 John Harper (john@orcrist) * view.c (update_status_buffer): fixed display "line" or "lines" depending on the number of lines in the buffer Thu Sep 4 00:11:59 1997 John Harper (john@orcrist) * command.c (sym_pre_command_hook, sym_post_command_hook, cmd_call_command): these two hooks bracket the evaluation of each command. pre-command-hook is given the command to be called as its sole arg. * keys.c (usekey): calls pre-command-hook and post-command-hook around insertion of unbound keys. Wed Sep 3 20:41:19 1997 John Harper (john@orcrist) * render.c (redraw_status_buffer): when VWFF_CUSTOM_STATUS is set draw the status line in the highlight colour to make it stand out. * lispmach.c, bytecodes.h: renamed quite a few opcodes. Also changed the op-setq and op-set (previously op-vsetc and op-vset) instructions to the set value on the stack. Wed Sep 3 15:53:37 1997 John Harper (john@gem) * stringmem.c, stringmem.h: some general cleaning up of the code. Only notable change is that when STRMEM_STATS is defined it now prints the statistics when sm_kill() is invoked. * revision.h: bumped version to 4.0 alpha Tue Sep 2 23:38:39 1997 John Harper (john@orcrist) * bytecodes.h: new header file defining all bytecodes in lispmach.c * lispmach.c (unbind_one_level): new function that handles undoing the first element in the `bindstack'. It can handle symbol bindings, unwind-protect forms, and binding to buffers, views and windows. OP_UNWIND calls this function. (OP_BIND_BUFFER, OP_BIND_VIEW, OP_BIND_WINDOW): these opcodes replace the OP_SWAP_X opcodes. They install their sole argument (on the stack) (a buffer, view or window) and add an entry to the bindstack to let it be unwound later. (OP_UN_UNWIND_PRO): removed, OP_UNWIND does this now. Mon Sep 1 21:52:48 1997 John Harper (john@orcrist) * lisp.c (max_lisp_depth): doubled to 500, the compiler was catching the limit sometimes * lispcommands.c (cmd_if, cmd_when, cmd_unless): removed; these are now defined as macros in lisp.jl * view.c (update_views_dimensions): won't abort if vertical size is still the same but horizontal has changed Sun Aug 31 11:12:09 1997 John Harper (john@orcrist) * Makefile.in: removed *commandline.c; added views.c * amiga_commandline.c, commandline.c, x11_commandline.c: banished to the obsolete directory (not before time) * buffers.c (first_buffer): creates the buffer before the window, this lets make-view find at least one buffer in existence. (get_tx_cursor): now checks active-view, other views in the same window, then views in other windows. (cmd_current_buffer, cmd_set_current_buffer): now operate on views not windows (cmd_set_buffer_file_name, cmd_set_buffer_name, cmd_set_buffer_modified, cmd_set_buffer_special, cmd_set_buffer_read_only, var_mode_name, var_minor_mode_names): all set the flag TXFF_REFRESH_STATUS to show that any status lines reflecting this buffer may need updating. (cmd_with_buffer): saves the current view so that the reset stage works when the active view changes. I don't think this works in the compiled version properly.. * configs/: all config-*.h files now have an extra Makefile entry, EXTRA_LIBS * edit.c (resize_line_list): uses memset() not bzero() * edit.h (TX): new flag TXFF_REFRESH_STATUS -- reflects when a view displaying the buffer needs to refresh its status display (VW): now represents a single view in a window, as such all window system data has been removed. Has a `vw_NextView' field pointing to the view beneath it in the window. `vw_MaxY' and `vw_MaxX' refer to the size of the view. The flags VWFF_SLEEPING and VWFF_MESSAGE have been removed; new flags VWFF_MINIBUF and VWFF_CUSTOM_STATUS have been added. (WIN): new structure representing a physical window (what Emacs would call a frame). Most things are those that were removed from the VW. `w_ViewList' points to the top view in the window, `w_CurrVW' to the current view, and `w_MiniBuf' to the minibuffer view. (MINIBUFFER_ACTIVE_P(win)): macro to check if a window's minibuffer view is in use. * editcommands.c (sym_block_status_hook): hook called when the current view's block status changes; one argument the block status. * editrect.c (cmd_insert_rect): tries to return the position following the insertion; not so useful as it doesn't lead to the size of the rectangle. * lisp.c (sym_window_error): new error type * lisp.h (V_View, VVIEW, VIEWP): define the view type * lispmach.c (OP_VIEWP, OP_SWAP_VIEW, OP_CURRENT_VIEW, OP_SWAP2): new opcodes. swap-buffer has changed incompatibly!, but probably still won't work in case of errors * movement.c (cmd_centre_display, cmd_mouse_pos): work relative to the current view now, not the window. * refresh.c (refresh_window) renamed as `refresh_view' and made to work on a per-view basis. A new function ` refresh_window' has been added that cycles through each view in a window refreshing each in turn. (vert_scroll): calls portable scroll_vw() not sys_scroll_vw() (refresh_message): function to redraw a window's message if necessary. * render.c: all functions work relative to the view now, in fact they assume the view is at position (0,0) and let the window-system macros (i.e. MOVE, DRAW, etc...) work out where the view actually is. It is also assumed that four pens exist now: P_TEXT, P_TEXT_RV, P_BLOCK, and P_BLOCK_RV. (redraw_cmd_line, redraw_cmd_line_from, cmd_line_cursor): deleted. (draw_message_line, redraw_message, redraw_status_buffer): added. (scroll_vw): portable version of sys_scroll_vw(), uses CLR_AREA and COPY_AREA macros * streams.c: writing to the message line works on the current window, not the current view * unix_misc.c: used ENVIRON_UNDEFINED, not ENVIRON_UNDECLARED, doh! * unix_processes.c: include not , also includes and * values.c (ValueClasses): entries for V_View (mark_value): changed V_Window and V_View actions (cmd_garbage_collect): added view_sweep() to list of sweep functions. * views.c: new file providing view functions (view_chain, curr_vw): list of all views, and current view (make-view-hook, destroy-view-hook): what they say (cmd_make_view, cmd_destroy_view): also what they say (update_view_dimension): recalibrates the view dimensions of a window after the window size has changed (update_status_buffer): reformats the status line (cmd_next_view, cmd_previous_view): for traversing views (cmd_with_view): similar to `with-window' (cmd_minibuffer_view, cmd_minibuffer_view_p, cmd_minibuffer_active_p): new functions (cmd_set_status_message): allows the hijacking of the status line. * windows.c: many things changed to use `WIN *' instead of `VW *', some functions moved to the new file views.c (win_chain, curr_win): replace `view_chain' and `curr_vw' (copy_prefs): renamed `copy_win_prefs' (cmd_make_window): creates two views by default, a main view with everything but the one row taken by the minibuffer view * x11_display.c: includes not (x11_high_pixel): pixel colour used to provide P_BLOCK pens (x11_jade_sel): property used to transfer selection's atom (x11_get_options): `-hl' for highlight pixel (handle_event): works in windows not views, now handles MotionNotify, SelectionRequest, and SelectionClear events. (event_loop): in the timeout try to remove messages from minibuffers if the minibuffer is active. * x11_keys.c (translate_event): handles MotionNotify events (KeyDescr): remove pounds-sterling sign; it seems that Solaris strcasecmp() only works with 7-bit ASCII? * x11_misc.c (x11_convert_selection, x11_lose_selection, cmd_x11_set_selection, cmd_x11_selection_active_p, cmd_x11_get_selection, cmd_x11_lose_selection, sym_xa_primary, sym_xa_secondary, x11_misc_init): selection handling * x11_render.c (redraw_exposed_area): new function; given a window and a rectangular region, works out which bits in each view need redrawing, and redraws them. (sys_scroll_vw): deleted * x11_windows.c (INPUT_EVENTS): added ButtonMotionMask and PointerMotionHintMask. (sys_sleep_vw, sys_unsleep_vw, sys_set_vw_pos): renamed `sys_sleep_win', `sys_unsleep_win', and 'sys_set_win_pos' (sys_new_window): creates GCs for all four pens * x11_windowsys.h (W_WindowSys): new entry ws_GC_array[] which holds all GCs. (P_TEXT, P_TEXT_RV, P_BLOCK, P_BLOCK_RV, P_MAX): defined (MOVE, PEN_X, PEN_Y, CLR_AREA, CLR_RECT, SET_AREA, SET_RECT, COPY_AREA, DRAW_LINE): all coordinates are relative to the specified view. SET_{RECT,AREA} now take a PEN argument defining the GC to use. Thu Jul 13 11:56:35 1995 John Harper (jsh@orcrist) * Makefile.in: fixed the _JADE_DIR macro containing a leading space character. * unix_defs.h, unix_server.c, unix_client.c (JADE_SOCK_NAME): This is now defined in the unix_defs.h header file to prevent any more embarassing mistakes (changing its definition in only one place) * render.c (clear_lines): New function * refresh.c (flag_deletion): The tx_ModEnd is set to the end of the deleted text, not the same place as the beginning of the deletion. This fixes the annoying ``delete a block near the end of the buffer'' bug which sometimes occurs. What does it break though? (it probably hits performance..) Sun May 28 01:11:57 1995 John Harper (jsh@orcrist) * jade.h (QUOTE): Macro to stringify its argument * Makefile.in, unix_defs.h (_JADE_DIR, JADE_DIR): Due to rot in cpp the method of passing in JADE_DIR broke. Now it's passed from the command line without quotes. The definitions of LISP_LIB_DIR and DOC_FILE quote it. Wed Feb 22 20:15:18 1995 John Harper (jsh@orcrist) * movement.c (next_char): When POS is past the end of the line move it back to the end. Thu Jan 12 16:27:23 1995 John Harper (jsh@orcrist) * lispcmds.c (cmd_divide, cmd_remainder): Now check for divide-by-zero and signal an error if it will occur. Wed Jan 11 14:43:33 1995 John Harper (jsh@orcrist) * commands.c (interactive_spec): Doesn't assume that lambda expressions are always valid anymore Sat Dec 24 15:46:52 1994 John Harper (jsh@orcrist) * render.c (draw_line_glyph_length, draw_rect): Hopefully fixed the problem of the glyph in the right-most column sometimes being left undrawn. Sun Nov 13 19:48:55 1994 John Harper (jsh@orcrist) * buffers.c (var_auto_save_interval): corrected its doc-string Sun Oct 30 15:24:16 1994 John Harper (jsh@orcrist) * x11_windows.c (sys_new_window): windows are now called `Jade' Wed Oct 26 17:52:44 1994 John Harper (jsh@orcrist) * unix_client.c (JADE_SOCK_NAME): changed to ".Jade_rendezvous"; I'd changed this in unix_server.c but not here (oops!) Sun Oct 23 19:54:24 1994 John Harper (jsh@orcrist) * windows.c (save_message, restore_message): Mechanism for temporarily installing a message. * values.c (cmd_garbage_collect): Prints a message while gc'ing (again). * lisp.c (load_autoload): Temporarily prints a message while loading the file. * Makefile.in: moved the definitions of CFLAGS and LDFLAGS to `../Makefile'; hopefully this means the user can override them properly when compiling. Fri Oct 7 15:12:19 1994 John Harper (jsh@orcrist) * Version 3.2 released Tue Oct 4 00:06:10 1994 John Harper (jsh@orcrist) * lisp.h, symbols.c, values.c: new type V_Void. Used to denote a void value in a symbol. * symbols.c (cmd_symbol_value, cmd_symbol_function, cmd_default_value): these now take an extra argument `NO-ERROR'. Unless this is t, when the value is void they signal an error. * symbols.c: rewrote buffer-local variables to be compatible with Emacs. Removed `set-buffer-variable' and `buffer-variable-p', renamed `delete-buffer-variables' to `kill-all-local-variables' and created the new functions, `make-local-variable', `make-variable-buffer-local' and `kill-local-variable'. (cmd_set): SF_BUFFER_LOCAL only means that a variable may have a local value; not that one should be created (see next entry) * lisp.h (SF_SET_BUFFER_LOCAL): new flag, means that setting this symbol gives it a buffer-local binding Mon Oct 3 17:53:07 1994 John Harper (jsh@orcrist) * io.c (read_tx): no longer scans for code section * buffers.c (eval_file_code): removed * editrect.c (col_copy_sect): removed * housekeeping.c (set-start-line): this was doing it's own rendering; a bad thing all in all * Most module's _kill function didn't set that module's private chain of objects to NULL. In particular the Amiga menus were stepping through the de-allocated view_chain and guruing... Sat Oct 1 14:48:49 1994 John Harper (jsh@orcrist) * amiga_keys.c (lookup_event_name): doesn't pass any qualifiers to MapRawKey() anymore * commands.c (cmd_call_command): the `N' code-letter was screwed * main.c, x11_display.c, amiga_display.c: startup modified so that the sys_init() function calls a new function inner_main() which does most of what main() used to do. This allows the Amiga version of sys_init() to play with the stack * amiga_display.c (sys_init): now contains code to allocate a larger stack if the `-stack' argument is given. * unix_processes.c (run_process): when using pipes stderr is also connected up Thu Sep 29 15:33:23 1994 John Harper (jsh@orcrist) * unix_processes.c (cmd_signal_process, cmd_interrupt_process, cmd_kill_process, cmd_stop_process, cmd_continue_process): All have a new argument, SIGNAL-GROUP, which makes them signal the whole process group. Mon Sep 26 21:13:32 1994 John Harper (jsh@orcrist) * unix_processes.c (cmd_make_process): default value of the connection-type component is now `pipe' Tue Sep 20 14:22:22 1994 John Harper (jsh@orcrist) * refresh.c (refresh_world_curs): no longer makes an ill-judged guess as to whether a window should be refreshed or not; sometimes it got it wrong :-( * keys.c (var_next_keymap_path): now passes the prefix-arg through the chain of multi-key bindings * x11_keys.c, amiga_keys.c (lookup_event): doesn't look for backslash characters anymore, also a `-' character as the first character in a token won't terminate the token. Sun Sep 18 15:37:00 1994 John Harper (jsh@orcrist) * misc.c (cmd_file_concat): renamed as `file-name-concat' Wed Sep 14 15:08:52 1994 John Harper (jsh@orcrist) * misc.c (cmd_path_name, cmd_base_name): renamed as `file-name- directory' and `file-name-nondirectory' respectively * symbols.c (bind_symbol, unbind_symbols): uses the `set-default' and `default-value' functions to bind variables (cmd_set_default, cmd_default_value): now checks for a V_Var type of object Tue Sep 13 15:10:56 1994 John Harper (jsh@orcrist) * unix_misc.c, amiga_misc.c (cmd_setenv): new function * housekeeping.c (resync_y): checks for a blank area at the bottom of the display; if one exists it's removed Fri Sep 9 14:59:16 1994 John Harper (jsh@orcrist) * render.c (cut_paste_lines): when deleting lines, and the stuff which couldn't be blitted is only partly in the buffer, the rest is cleared. (cut_paste_lines): doesn't check if `srcLine' is greater than the last line displayed anymore; this is perfectly valid Tue Sep 6 14:47:48 1994 John Harper (jsh@orcrist) * housekeeping.c (resync_y): when the cursor goes totally out of the display its put back at the center of the screen. * unix_server.c, amiga_server.c (cmd_server_open, cmd_server_close): these can now be called interactively Sat Sep 3 15:50:18 1994 John Harper (jsh@orcrist) * find.c (replaceit): now expands the replacement before deleting the original text; a much better idea (i.e. it works) Thu Sep 1 14:17:57 1994 John Harper (jsh@orcrist) * commands.c (cmd_interactive): now a special form Wed Aug 31 20:28:06 1994 John Harper (jsh@orcrist) * x11_eventloop.c, amiga_eventloop.c: the hook `close-gadget-hook' has been renamed to `window-closed-hook'. Tue Aug 30 11:47:17 1994 John Harper (jsh@orcrist) * keys.c (cmd_bind_keys, cmd_unbind_keys): the KEY-DESCRIPTION may now be an event * keys.h: redefined the EV_TYPE and EV_MOD defines so that most events will fit this field into 8 bits, and hence will use the pre-allocated static integers to save memory. Mon Aug 29 12:47:47 1994 John Harper (jsh@orcrist) * glyphs.c (cmd_set_glyph): when a glyph-string of "" is set the first glyph is set to ' ' (cmd_glyph_to_char_pos): POS isn't optional anymore * buffers.c (mark_prin): doesn't add one to the marks line and column before printing them anymore. Also resident marks have their buffer printed not their name (cmd_set_mark): setting the name of the file should work now Tue Aug 23 13:11:34 1994 John Harper (jsh@orcrist) * lispcmds.c (cmd_bit_not, cmd_bit_or, cmd_bit_and): renamed as `lognot', `logior' and `logand' respectively. * lispcmds.c (cmd_logxor): new function * lispmach.c (OP_LOGXOR_2): new opcode Thu Aug 18 16:20:48 1994 John Harper (jsh@orcrist) * streams.c (cmd_make_string_input_stream, cmd_make_string_output_stream, cmd_get_output_stream_string, cmd_streamp): new functions (cmd_file_p): renamed as `filep' Wed Aug 17 14:30:17 1994 John Harper (jsh@orcrist) * lispcmds.c (cmd_defvar, cmd_defconst): the default value of buffer-local variables is set, not the local value (cmd_list): now conses up a *new* list, doesn't use its arg list; this could be risky (cmd_apply): now signals an error if its last argument is not a list Tue Aug 16 19:32:02 1994 John Harper (jsh@orcrist) * symbols.c (cmd_default_boundp, cmd_set_default): new functions Sun Aug 14 19:45:52 1994 John Harper (jsh@orcrist) * symbols.c: obarrays no longer use NULL to terminate a bucket: any non-symbol object can be used instead. This means that having a NULL sym_Next can signify that a symbol is not interned, making the SF_INTERNED flag obsolete -- it's been removed. * symbols.c (var_obarray): new variable -- provides access to the default obarray Sat Aug 13 12:40:00 1994 John Harper (jsh@orcrist) * glyphs.c (cmd_glyph_table_p): new function * lispcmds.c (cmd_reverse): this was totally screwed (cmd_aref, cmd_aset): changed documentation (cmd_arrayp, cmd_elt): new functions * editcmds.c (cmd_alpha_char_p, cmd_upper_case_p, cmd_lower_case_p, cmd_digit_char_p, cmd_alphanumericp, cmd_space_char_p): these now accept non-integer arguments -- they just return nil for them. Fri Aug 12 14:09:06 1994 John Harper (jsh@orcrist) * x11_display.c (x11_text_cursor): cursor to use in all windows * x11_windows.c (sys_new_window): sets the window's cursor Thu Aug 11 20:13:10 1994 John Harper (jsh@orcrist) * lispcmds.c (cmd_mod): this was actually a remainder function not modulo; it's renamed to `%' (cmd_lsh): this was actually an arithmetic shift, new function `ash' to do this and lsh is fixed (cmd_integerp): new function Sun Jul 17 13:46:40 1994 John Harper (jsh@orcrist) * movement.c (cmd_next_char, cmd_goto_next_char, cmd_prev_char, cmd_goto_prev_char): now take a COUNT argument: the number of characters to move. The new args to next-char and prev-char are incompatible with the old ones :-( Fri Jul 15 15:01:20 1994 John Harper (jsh@orcrist) * lisp.c (lisp_init): int_cell is now (user-interrupt) not (error user-interrupt). This means that interrupts are no longer errors and therefore are unable to be caught by error-pro. * x11_eventloop.c, amiga_eventloop.c (event_loop): checks for explicitly for user-interrupt Thu Jul 14 15:54:10 1994 John Harper (jsh@orcrist) * unix_server.c (server_accept_connection): the connection fd is marked to be discarded on exec() (server_kill): closes the open connections now Wed Jul 13 18:20:03 1994 John Harper (jsh@orcrist) * lispcmds.c (cmd_eql): new function * lispmach.c (cmd_lisp_code2): added OP_EQL Tue Jul 12 13:05:08 1994 John Harper (jsh@orcrist) * amiga_menus.c (cmd_set_menu): the action of the menu is a command not a list of forms * undo.c (undo_trim): when an undo is in progress tries to truncate the oldest of the three undo-lists * lispmach.c (CALL_1, CALL_2, CALL_3): macros containing the code to call a function for an instruction. Lots more opcodes have been added. Mon Jul 11 11:53:56 1994 John Harper (jsh@orcrist) * edit.c (pad_pos): now adds the insertion to the buffer's undo-list * undo.c: doesn't use prefix counts to group items anymore. Instead a marker (`nil') is placed between each group. This lets me make each command a separate undo-group; also undo through several recursive edits works properly. * commands.c (var_last_command): no longer checks if VAL is nil Sun Jul 10 20:06:15 1994 John Harper (jsh@orcrist) * keys.c (print_event_prefix): now prints the whole sequence each time. (event_buf, event_index): records all events in the current sequence. (cmd_current_key_string): renamed to `current-event-string' Thu Jul 7 15:05:40 1994 John Harper (jsh@orcrist) * commands.c: New file; stuff for interactive function calling * streams.c (stream_puts, stream_putc): When writing to a string an extra byte is allocated to hold the zero terminator (cmd_format): writes each chunk of characters between format specifiers as one string instead of individually Wed Jul 6 19:32:31 1994 John Harper (jsh@orcrist) * streams.c (cmd_format): with a STREAM of nil a string is constructed. * edit.h, symbols.c, windows.c: Window-local Lisp variables are no longer supported; they were only used for one variable, the `buffer-list'. This variable is now an entry in the VW structure. * lispcmds.c (cmd_aset): doesn't modify V_StaticString's * editcommands.c (cmd_translate_string): checks for read-only strings * lisp.h (STRING_WRITEABLE_P): macro to check if a Lisp string may be modified. Sun Jul 3 15:08:17 1994 John Harper (jsh@orcrist) * lispcmds.c (cmd_defconst): an error is signalled if the symbol is already bound. * refresh.c (refresh_window): when a deletion is recognised the line it occurs is *always* redrawn from the first char deleted. * misc.c (cmd_expand_file_name): new arg, QUALIFY-FULLY. When t this says to get an absolute name. * amiga_misc.c, unix_misc.c (sys_fully_qualify_file_name): new function for the above Lisp function. * movement.c: (cmd_file_start, cmd_file_end, cmd_goto_file_start, cmd_goto_file_end): renamed, ``file'' replaced by ``buffer'' * buffers.c (cmd_file_length): now called `buffer-length' (cmd_file_name): now called `buffer-file-name' (cmd_set_file_name): now called `set-buffer-file-name' Fri Jul 1 10:51:45 1994 John Harper (jsh@orcrist) * refresh.c (flag_deletion): tx_ModEnd is set to the start of the deletion not the end (refresh_window): when (tx_ModDelta < 0) (i.e. a deletion) the cut & paste operation is a bit different now (hopefully this way works!?) * render.c (redraw_region): returns immediately when (START == END) * editcommands.c (sym_inhibit_read_only): new variable * edit.c (read_only): takes note of `inhibit-read-only' when it's bound and non-nil. Wed Jun 29 16:48:46 1994 John Harper (jsh@orcrist) * Major alterations to all files; I've tried to impose a sensible naming style onto all symbols. All global symbols have a prefix. This is either null for files common to all configurations, `x11_' for stuff accessed only by the X files, likewise for `unix_' and `ami_'. The `sys_' prefix is for things which are accessed from the common area but exists in one of the non-common files. Tue Jun 28 14:42:30 1994 John Harper (jsh@orcrist) * amiga_windows.c (newwindow): calculates for the status line when opening the window * amiga_display.c (initwinsys): uses onbreak() to hijack ^C signals caught by stdio * configs/config.h.amiga (HAVE_ONBREAK): new macro for above Sun Jun 26 16:26:43 1994 John Harper (jsh@orcrist) * x11_windowsys.h, amiga_windowsys.h (DRAW_LINE): new macro, draws a 1-pixel wide line * render.c, x11_render.c, amiga_render.c, x11_windows.c, amiga_windows.c: all stuff to do with the status/message line is made system-independant. This means that messages on the Amiga now use the bottom line of the window as in X * amiga_eventloop.c (eventloop): in idle timeout calls print_event_prefix() and also refreshes the display if necessary. * amiga_keys.c (lookup_event_name): uses MapRawKey() to decipher unknown keycodes. * amiga_eventloop.c (eventloop): calls undo_distinct() when the current window changes * amiga_defs.h (TEST_INT): tests for SIGBREAKF_CTRL_C and calls amiga_interrupt_handler() * amiga_display.c (amiga_interrupt_handler): new function, resets the ^C signal bit and throws an interrupt (JadeProc): pointer to our process Thu Jun 23 19:57:13 1994 John Harper (jsh@orcrist) * keys.c (KEYTAB_HASH_FUN): macro defining how to make a hash key from an event. Now key-tables are 127 entries long not 128. * keys.c: meta-sends-esc is reversed to become esc-means-meta, now there is no separate map for meta/esc keys Wed Jun 22 16:38:52 1994 John Harper (jsh@orcrist) * unix_processes.c (proc_notification): now blocks sigchld * keys.c (usekey): unbound insertions now set the last-command variable to t. * undo.c: now records when a buffer changes from un-modified to modified so this too can be undone. Mon Jun 20 22:23:46 1994 John Harper (jsh@orcrist) * undo.c: new file, undo recording and undo-ing * Wherever flag*tion() is called undo_record_*tion() is also called. * x11_eventloop.c (eventloop): calls undo_distinct() when the current window changes * editcommands.c (cmd_insert): now returns the position of the end of the insertion Sat Jun 18 11:54:50 1994 John Harper (jsh@orcrist) * lisp.c (read_str): an escaped newline is now ignored (read_symbol): checks that its static buffer doesn't overflow * x11_windows.c (unsleep): this may work now? (sleepwin, unsleep): now use the VWFF_SLEEPING flag * x11_eventloop.c (handleevent): if we get an Expose event while sleeping assume that we woke up. Also if the VWFF_FORCE_REFRESH flag is set we discard all Expose events, when one has a count of zero (the last) do a total redraw of the window Thu Jun 16 20:18:58 1994 John Harper (jsh@orcrist) * refresh.c (refreshwindow): sets vw_LastDisplayOrigin here after completing refresh * housekeeping.c (resyncxy): no longer sets vw_LastDisplayOrigin * movement.c (cmd_centre_display): new function Wed Jun 15 16:06:13 1994 John Harper (jsh@orcrist) * lispcmds.c (cmd_concat): no longer stomps on memory when the string grows very quickly :-) * streams.c (cmd_write): optional LENGTH arg for strings * symbols.c (cmd_delete_buffer_variables): new function Tue Jun 14 10:54:03 1994 John Harper (jsh@orcrist) * windows.c (stdtitle): now calls calc_cursor_offset() * find.c (cmd_match_start, cmd_match_end): new functions; these replace the variables `find-last-start-pos' and `find-last-end-pos'. Now the position of any expression can be found and in strings as well as in buffers. * editcommands.c (cmd_offset_to_pos, cmd_pos_to_offset): new functions for converting between byte counts and positions * unix_processes.c (struct Proc): pr_UsePty changed to pr_ConnType (runproc): option to set the ECHO flag in a pty (cmd_set_process_connection_type): now uses named symbols Mon Jun 13 00:44:26 1994 John Harper (jsh@orcrist) * unix_processes.c (runproc): now connects stdin of the child to a defined file when running synchronously. (cmd_run_process): new arg IN-FILE to make use of the above feature (runproc, readfromproc): don't write to pr_OutputStream if it's nil Sun Jun 12 02:05:10 1994 John Harper (jsh@orcrist) * unix_processes.c (struct Proc): pr_File becomes pr_Prog, pr_Argv becomes pr_Args and is now a list of arguments 1..N. Arg #0 is taken from pr_Prog (cmd_start_process, cmd_run_process): new arg spec. ARGS are now passed as the last N args in the call. Also the PROCESS arg is optional, a vanilla process will be created if necessary (cmd_process_name, cmd_set_process_name): renamed to process-prog and set-process-prog (cmd_process_argv, cmd_set_process_argv): renamed argv to args and takes a list instead of a vector * lispcmds.c (cmd_copy_list, cmd_copy_string): combined into cmd_copy_sequence(). (cmd_sequencep): new function Sat Jun 11 19:21:00 1994 John Harper (jsh@orcrist) * x11_eventloop.c (eventloop): some reorganisations * lisp.c (handleerror): now handles cursor and reresh itself * windows.c (cmd_title): renamed as `message', also a new arg saying draw it immediately (cmd_title_now): removed (var_status_line_cursor): variable controlling VWFF_STATUS_CURS * render.c (cursor): Takes note of VWFF_STATUS_CURS (but only in X11 so far) * edit.h (VW): vw_Sleeping and vw_NonStdTitle now in vw_Flags. New flag VWFF_STATUS_CURS means draw the cursor in the status line. * keys.c (usekey, print_event_prefix): a second after a prefix key is received the current prefix is displayed Fri Jun 10 19:24:36 1994 John Harper (jsh@orcrist) * streams.c (cmd_format): added octal formatting (`%o') (cmd_format): `%%' doesn't swallow an argument anymore * keys.c (usekey): the `unbound-key-hook' is now called for all unbound events -- not just keyboard events * amiga_keys.c: updated after yesterday's changes, not finished yet I can't remember the name of a function I need to use :-( Thu Jun 9 11:32:49 1994 John Harper (jsh@orcrist) * keys.c, keys.h: massive changes; all key/event structures are now standard Lisp types (vector & cons cells). Some new functions for manipulating events and their bindings. * x11_keys.c (lookup_event_name): new function Wed Jun 8 20:04:27 1994 John Harper (jsh@orcrist) * keys.c (sym_idle_hook): new hook, called periodically when idle time is available * amiga_eventloop.c, x11_eventloop.c (eventloop): calls idle-hook * values.c (cmd_garbage_collect): no longer prints a message while gc is in progress Tue Jun 7 00:24:30 1994 John Harper (jsh@orcrist) * edit.c (cmd_set_indent_pos): didn't rebuild line if it already had the correct number of indentation characters * unix_processes.c (queue_notify, proc_notification): The callback function for a process isn't called directly anymore, this is too risky. (cmd_make_process, runproc, cmd_fork_process, cmd_run_process): now more arguments can be passed to set the state of the process object. (cmd_process_connection_type, cmd_set_process_connection_type): support for using pipes *or* ptys when connecting to a process (cmd_fork_process): renamed as `start-process' Mon Jun 6 20:23:55 1994 John Harper (jsh@orcrist) * unix_misc.c (cmd_copy_file): oops, didn't open the destination file with O_TRUNC :-( * misc.c (cmd_substr): renamed as `substring' and significantly changed. * find.c (cmd_regexp_quote): new function Sun Jun 5 22:58:43 1994 John Harper (jsh@orcrist) * lisp.c, lispcmds.c, lispmach.c, lisp.h, x11_eventloop.c, amiga_eventloop.c: Interrupt support -- now you can break those annoying infinite loops :) * x11_display.c (x11_int_handler): handler for SIGINT Sat Jun 4 14:08:48 1994 John Harper (jsh@orcrist) * keys.c (var_this_command, var_last_command): new functions Thu Jun 2 12:29:11 1994 John Harper (jsh@orcrist) * Version 3.1 released Wed Jun 1 21:02:03 1994 John Harper (jsh@orcrist) * x11_windows.c (makemousepos): didn't check that the returned value was legal Mon May 30 16:48:21 1994 John Harper (jsh@deep) * windows.c (stdtitle): changed the format string * amiga_misc.c (cmd_file_req): sets the length of the returned string to its correct value * render.c (cutpastelines): doesn't assume that the window contains an integral number of lines -- screen debris was left between the end of the last line and the bottom of the window * misc.c (memchr): in case the C library doesn't provide memchr(), one of mine doesn't :( * configs/: new option in all config files `HAVE_MEMCHR' * amiga_menus.c (setallmenus, clearallmenus): Didn't ignore window objects which don't have a physical window open, this was causing Enforcer hits Wed May 25 19:16:11 1994 John Harper (jsh@orcrist) * find.c (findprev): kludged the index manipulation * movement.c (findmatchingbracket): new argument ESC plus code to check for escape chars (cmd_match_brackets): new arg ESC, for the above modification Tue May 24 16:06:14 1994 John Harper (jsh@orcrist) * movement.c (cmd_screen_bottom_line, cmd_screen_last_column): returned 1 to big * editcommands.c (get-char): didn't return newlines * lispmach.c (cmd_lisp_code2): renamed the conditional jumps * render.c (redraw_line_from, redraw_region): these now notice if they're told to start drawing before the first visible column * lispmach.c (cmd_lisp_code2): wasn't setting ThrowValue to NULL while evaluating unwind-protect forms * symbols.c (cmd_setq_default, cmd_default_value): new functions for accessing the default value of symbols * Makefile.in: no longer uses CFLAGS to pass the JADE_DIR define Mon May 23 02:07:53 1994 John Harper (jsh@orcrist) * Changed the origin of a buffer's coordinates to (0,0) not (1,1), what will this break?? * glyphs.c (expand_tabs): didn't like START-GLYPH==0 * editcommands.c (cmd_set_indent_pos, cmd_indent_to): options to only insert spaces, not tabs * movement.c: fixed the `tab' functions to work with glyph positions * stringmem.c (sm_free): when a (non-malloc'd) string is freed increment DataAfterGC by its size Sun May 22 23:13:10 1994 John Harper (jsh@orcrist) * values.c (cmd_garbage_collect): calls sm_flush() on the MainStrMem block. * buffers.c (cmd_destroy_buffer): doesn't bother calling sm_flush() anymore Sat May 21 20:59:11 1994 John Harper (jsh@orcrist) * refresh.c (refreshworldcurs): doesn't try to setvwtitle() closed windows anymore Fri May 20 21:52:37 1994 John Harper (jsh@orcrist) * configs: added HAVE_SETPGID and HAVE_SETPGRP options * unix_processes.c: takes note of the above macros Thu May 19 21:02:06 1994 John Harper (jsh@orcrist) * unix_client.c, amiga_client.c (main): resets the line number for each file. * x11_windows.c (cmd_window_left_edge, cmd_window_top_edge): these used to return coordinates relative to our parent window (created by the wm) not the root window. Sun May 15 00:30:48 1994 John Harper (jsh@orcrist) * lispmach.c: new instruction OP_RETURN * find.c (replacit, replaceitstr): calls flaginsertion() before inserting the string not after (when the pos has been advanced) * lispcmds.c (cmd_unwind_protect): temporarily sets `ThrowValue' to NULL while evaluating the body. * lispmach.c (cmd_lisp_code2): similar to the above when unwinding Fri May 13 21:52:40 1994 John Harper (jsh@orcrist) * editcommands.c (cmd_set_char): new function Thu May 12 19:24:22 1994 John Harper (jsh@orcrist) * lispmach.c: cmd_lisp_code renamed as cmd_lisp_code2 since compiled forms are now different. * lisp.c (string_print): no longer escapes tabs or newlines * editcommands.c (cmd_translate_string, cmd_get_char): new functions. Tue May 10 21:19:29 1994 John Harper (jsh@orcrist) * lisp.h, value.h: New definition of the VALUE type, no longer is it (void *) Sun May 8 18:42:03 1994 John Harper (jsh@orcrist) * editrect.c: New file. Most rectangle code has moved here from edit.c and updated to cope with the fact that a character's position in a line may not be the same as its position on the screen. Also lots of TAB handling. * keys.c (evalbinding): if the symbol `meta-sends-esc' is non-nil any meta-modified events get translated into ESC then the un-meta'd event. Sat May 7 13:53:59 1994 John Harper (jsh@orcrist) * glyphs.c: each buffer can now have its own glyph-table. A new data type for glyph-tables has been created. New functions to manipulate these. Fri May 6 20:31:33 1994 John Harper (jsh@orcrist) * editcommands.c (cmd_indent_to): new function * edit.c: changes uses of strcpy() and family to memcpy() so nul bytes don't cause havoc. Thu May 5 17:08:23 1994 John Harper (jsh@orcrist) * unix_processes.c (writetoproc): new arg BUFLEN * streams.c (stream_puts): new arg BUFLEN, the length of the string being written (stream_read_esc): now understands octal escapes of less than 3 chars and hex escapes * lisp.h: strings allocated (as opposed to being string-constants) now contain a length field. This will allow these strings to contain '\000' characters. The macro STRING_LEN gives the number of characters in any type of Lisp string. * values.c: accommodate the above changes * io.c (cmd_write_file): uses fwrite() not fputs Wed May 4 20:28:31 1994 John Harper (jsh@orcrist) * edit.c (posinblock): for rectangular blocks uses glyph coords * housekeeping.c: the block marks are only updated in the y direction if rectangular blocks are being marked. * render.c (draw_bit): END arg is now inclusive * amiga_misc.c, unix_misc.c (fileexists): now returns bool Tue May 3 08:30:52 1994 John Harper (jsh@orcrist) * buffers.c (var_disk_tab, var_save_tabs): removed (var_screen_tab): renamed as var_tab_size * edit.h (struct _TX): removed tx_DiskTab and tx_SaveTabs :) * movement.c (cmd_next_tab, cmd_goto_next_tab, cmd_prev_tab, cmd_goto_prev_tab): new arg TAB-SIZE. Also the goto variants convert glyph-pos to char-pos. The other return the *glyph* pos. * find.c (strrchrn, strrstrn): renamed as mystrrchrn() and mystrrstrn() incase they clash with anyone's C library * misc.c (stpblk, stpalnum, cpyalnum): deleted, they were not used anymore * find.c (mystricmp): args toupper() and tolower() had side effects! Deleted this function since it's not used anymore anyway * housekeeping.c: #undef's no longer state the macro's args, I'm told this is illegal * movement.c (cmd_goto): renamed as cmd_goto_char (cmd_goto_glyph): new function * editcommands.c (cmd_indent_pos, cmd_set_indent_pos): hacked to allow `proper' TABs * edit.c (insertstring): no longer has to expand TAB chars. * io.c (readtx): rewritten, no longer has to expand TAB chars, should make it a lot faster? (writeline): not needed anymore * render.c: many changes to cope with the `glyphs' code, now there are two types of column position, the `character' one which is the number of characters from the start of the line, and the `glyph' pos, the number of glyphs from the start of the line. * glyphs.c: new file, manages mappings between characters and their printed representations. Includes new Lisp functions, `glyph-to-char-pos', `char-to-glyph-pos', `set-glyph' and `get-glyph'. Mon May 2 10:13:12 1994 John Harper (jsh@orcrist) * windows.c (stdtitle): bracketing around mode names now shows if in a recursive-edit * values.c (cmd_dup_pos): renamed as cmd_copy_pos * streams.c (streamputc, streamputs): strings now have a number associated with them, their *actual* size. * lispcmds.c (cmd_rassoc, cmd_rassq): new functions (cmd_copy_string): new function Sun May 1 23:36:00 1994 John Harper (jsh@orcrist) * lisp.c: Optimised some of the read functions, got rid of the nextlispexp() function. Sat Apr 30 10:44:56 1994 John Harper (jsh@orcrist) * symbols.c (symbols_init): nil and t are now constants * windows.c (cmd_make_window): only calls updatescroller() if tx is non-NULL, should fix the other Enforcer hit? * buffers.c (firstbuffer): now calls updatescroller() *after* switching in the first buffer, I think this should kill the Enforcer hit at startup? * refresh.c (refreshworldcurs): updates status line properly * edit.c (checksect, checkpos, checkline): didn't make sure the line number was positive * unix_client.c: now takes a series of files * amiga_eventloop.c (eventloop): Wait()'s for ServerSig as well * amiga_server.c, amiga_client.c: new files (untested, as yet) Fri Apr 29 21:38:03 1994 John Harper (jsh@orcrist) * unix_server.c, unix_client.c: new files Thu Apr 28 19:21:43 1994 John Harper (jsh@orcrist) * amiga_defs.h, unix_defs.h (DOC_FILE): renamed as DOC * unix_misc.c (geterrstring): macro HAVE_STRERROR replaces ERRNO_STRING, much simpler. Thu Apr 28 14:39:49 1994 J.S.Harper (jsh@raven.ukc.ac.uk) * render.c (cutpastelines): fixed one [more] bug Thu Apr 28 01:26:58 1994 John Harper (jsh@orcrist) * editcommands.c (cmd_delete_area, cmd_cut_area): these now call padpos() on their section markers. Wed Apr 27 19:53:27 1994 John Harper (jsh@orcrist) * unix_memory.c, unix_defs.h (myfree, initmem, killmem): these are now macros in unix_defs.h Tue Apr 26 22:59:44 1994 John Harper (jsh@orcrist) * Makefile.in: new file, cpp source to make src/Makefile. Now only one configuration file has to be edited, src/config.h, it's used for both Makefile and C configurations. Mon Apr 25 22:14:41 1994 John Harper (jsh@orcrist) * keys.c (cmd_current_key_string): new function * buffers.c (var_minor_mode_names): list of strings which is printed in the status line. * edit.h (TX): tx_MinorModeNameList and tx_MinorModeNameString Sun Apr 24 13:06:56 1994 John Harper (jsh@orcrist) * unix_misc.c (cmd_directory_files): oops. If it couldn't open the named dir, it signalled the error with the C-string not the Lisp one. * misc.c (cmd_expand_file_name): new function * unix_misc.c (expand_file_name): does the work of the above function * unix_defs.h: #define EXPAND_FILE_NAME expand_file_name * unix_processes.c (runproc): initialises the pty more carefully * streams.c (posputc, posputs): uses `tx_DiskTab' for tab size, not `tx_TabSize'. What will this break? Sat Apr 23 21:05:34 1994 John Harper (jsh@orcrist) * lispcmds.c (cmd_defvar, cmd_defconst): these are now in C * find.c (cmd_looking_at): used to set `find-last-end-pos' to the wrong position, also, the NOCASE_P arg was being ignored. Wed Apr 20 16:02:28 1994 John Harper (jsh@orcrist) * Version 3.0 released Tue Apr 19 20:51:28 1994 John Harper (jsh@deep) * refresh.c (refreshworldcurs): Checks if buffer has switched * amiga_minrexx.c (disp_rexx_port): changed the way that results are returned. Numbers and Strings are returned via RESULT. `nil' means RC=1 (command failed), anything else RC=0 (command succeeded). Mon Apr 18 20:54:42 1994 John Harper (jsh@orcrist) * lisp.c (LispDepth, MaxLispDepth, var_max_lisp_depth, _eval, funcall): Protection against infinite recursion. Mon Apr 18 11:13:52 1994 John Harper (jsh@deep) * prefs.c (copyfileprefs): by default `save-tabs' is 'all Sun Apr 17 19:29:37 1994 John Harper (jsh@orcrist) * refresh.c (refreshwindow): simpler way of checking if block has already been drawn. Not good, but it may actually work! * render.c (cursor): checks if cursor is off bottom of window * x11_commandline.c (docmdline): now redraws the separator line on an expose event. * unix_misc.c, amiga_misc.c (cmd_move_file): renamed to `cmd_rename_file'. * unix_misc.c, amiga_misc.c (cmd_copy_file, cmd_file_nlinks, cmd_file_modes, cmd_set_file_modes): New functions Sat Apr 16 14:04:45 1994 John Harper (jsh@orcrist) * Added license notices at the beginning of all source files. * All instances of the string `jed' have been changed to `jade'. I decided to change its name since there is at least one other editor called jed. Fri Apr 15 14:35:55 1994 John Harper (jsh@deep) * amiga_windows.c (newwindow, sleepwin): `DefDims' contains the number of rows/columns, not pixels. * amiga_display.c (initwinsys): Command line arguments `-pubscreen' and `-font' Thu Apr 14 20:23:27 1994 John Harper (jsh@deep) * values.c (values_kill): Due to a typo blocks of Numbers weren't being deallocated, now they are. * amiga_eventloop.c (eventloop): Fixed idle test. It's not ideal -- it uses 10 Intuiticks equal one second. Of course, the main loss is that Intuiticks are only sent while one of our windows is active :-( Thu Apr 14 11:31:49 1994 John Harper (jsh@orcrist) * amiga_menus.c: More or less wholly rewritten. Doesn't take menu definitions from a file anymore, but from a list. No support for submenus at the moment though. * buffers.c (makemarksres, makemarksnonres): Don't bother checking for a NULL `tx_FileName', this can't happen. * values.c (markvalue): Marks don't get gc-marked down their chain, this was wrong. * buffers.c (sweep_mark, unchainmark): To go with the above, marks are now unchained from their buffer when swept. * misc.c (cmd_file_concat): function to stick together path-name components. * amiga_misc.c, unix_misc.c (addfilepart): for the above function Wed Apr 13 11:31:45 1994 John Harper (jsh@orcrist) * symbols.c (bindsymbol, unbindsymbols): Can now bind to V_Var objects properly (the function is used to retrieve and set its value) Tue Apr 12 14:55:56 1994 John Harper (jsh@orcrist) * x11_windowsys.h: CLR_RECT and SET_RECT did one two many columns/rows * find.c (cmd_looking_at): new function Mon Apr 11 23:17:56 1994 John Harper (jsh@orcrist) * symbols.c: `make-*-variable' functions have been changed to `set-*-variable'. They don't make anything, just set a flag. Sun Apr 10 19:22:35 1994 John Harper (jsh@orcrist) * find.c (strrchrn): Now uses a pointer instead of an array index. Fri Apr 8 20:21:07 1994 John Harper (jsh@orcrist) * symbols.c (cmd_symbol_value, symbol_function): Got rid of the `void-symbol-function' hook. Tue Apr 05 15:19:47 1994 John Harper (jsh@deep) * amiga_windows.c (cmd_font_size): Removed, obsoleted by the `font-y-size' function * windows.c (cmd_font_x_size, cmd_font_y_size): New commands * amiga_misc.c (cmd_full_name): No longer returns NULL when it can't read the ENV: variable `REALNAME'. * amiga_clipboard.c: Errors now reported via signal, not just printed in the status line. (readclip): Used to return a normal string not a VALUE Mon Apr 4 12:40:00 1994 John Harper (jsh@orcrist) * Makefile, DMakefile: Now *all* source files are scanned for doc-strings. This is so that there is only one `DOC-strings' file for any particular revision (not one for each target OS). Sun Apr 3 20:57:24 1994 John Harper (jsh@orcrist) * main.c, x11_eventloop.c, amiga_eventloop.c: Now eventloop() calls refreshworldcurs() when it is entered, this used to be done in cmd_recursive_edit() (but not in main()). Thu Mar 31 12:27:21 1994 John Harper (jsh@orcrist) * Files in the directories `amiga/', `unix/' and `x11/' have been moved into the root source dir with prefixes of `amiga_', `unix_' and `x11_' respectively. This makes compilation a lot easier. Tue Mar 29 00:45:13 1994 John Harper (jsh@orcrist) * render.c: As much as possible of x11/render.c has been moved to here. Uses macros defined in windowsys.h to do as much platform- independant rendering as possible. This turns out to be everything but the prompt line. * refresh.c: Copied most of render.c into this file. Fri Mar 25 13:20:11 1994 John Harper (jsh@orcrist) * x11/eventloop.c: increasing the vertical size of a window no longer leaves the old status line in the middle of the display (if the buffer doesn't overwrite it). * values.c (cons_sweep): wholly unused blocks are now freed (markvalue): attempt to limit recursion as much as possible Thu Mar 24 09:51:07 1994 John Harper (jsh@orcrist) * symbols.c: Got rid of `symbol-flags' function. Now there's none of these annoying `flags' functions left :-) * buffers.c: TXFF_IMMORTAL and TXFF_NOCHANGE are consolidated into TXFF_SPECIAL. New functions `set-buffer-special' and `buffer-special-p'. Got rid of `tx-flags' function. (set-buffer-name, set-file-name): Order of arguments reversed, this is more consistent with all other `set*' functions. * files.c: renamed to buffers.c, this makes more sense now Wed Mar 23 12:06:02 1994 John Harper (jsh@orcrist) * values.c (markvalue): Two new algorithms for marking cons cells * General code cleanup so that it will compile with -Wparentheses. Sat Mar 19 03:45:03 1994 John Harper (jsh@orcrist) * find.c (cmd_find_next_regexp, cmd_find_prev_regexp, cmd_regexp_match, cmd_regexp_match_line): optional arg `IGNORE-CASE-P' * regexp/regexp.h, regexp/regexp.c: new flag to regexec2(), REG_NOCASE, means ignore case when comparing strings (but not for character classes). * io.c: new command `read-file-from-to' * streams.c: new commands `read-line' and `read-file-until' Fri Mar 18 01:03:28 1994 John Harper (jsh@orcrist) * doc/: Directory with manual stuff, new Makefile * find.c: New command `regexp-expand-line' a cross between `regexp-expand' and `regexp-match-line'. Thu Mar 17 18:55:54 1994 John Harper (jsh@orcrist) * jed.h, windows.c: Got rid of obsolete VWFF_NOSAVEPOS flag. Also the var `vw-flags' is gone. Functions `rect-blocks-p' and `set-rect-blocks' are used instead (the other flags are internal). * unix/processes.c: Now uses SA_RESTART if possible and O_NONBLOCK instead of O_NDELAY. Tue Mar 15 23:04:34 1994 John Harper (jsh@orcrist) * jed.texi: New file, at last! I've started the manual * files.c (var_save_tabs): Now uses descriptive symbols for the options, not magic numbers. Mon Mar 14 21:21:41 1994 John Harper (jsh@orcrist) * unix/processes.c: Now uses sigaction() and sigprocmask() instead of signal(). I'm not sure if I've done this correctly, from looking at the kernel sources it seems ok... Sat Mar 12 22:25:36 1994 John Harper (jsh@orcrist) * x11/display.c: Added `-name' option -- sets the name which is primarily used to lookup resources with. * x11/display.c (getxresources): If unable to find a resource with the program name tries with the string "Jed". Thu Mar 10 22:08:33 1994 John Harper (jsh@orcrist) * find.c: (cmd_replace_regexp, cmd_replace_string): Checks if `pos' is out of range (instead of just seg-faulting). Mon Mar 7 21:27:25 1994 John Harper (jsh@orcrist) * lispcmds.c: New symbol `lisp-lib-dir' * lisp.c (cmd_add_doc_string): New command to write a new doc-string to the DOC file and return its index. Sun Mar 6 12:49:38 1994 John Harper (jsh@orcrist) * windows.c (window_prin): Handles dead windows now. * windows.c (cmd_destroy_window): Now does (throw 'quit 0) when no more windows exist. * windows.c, amiga/windows.c: Fixed `NumWindows' variable -- it's now decremented in `cmd_destroy_window'. Sat Mar 5 01:21:35 1994 John Harper (jsh@orcrist) * edit.c: #if 0'd `stuffline'. This is now done inline where functions can take advantage of knowing the length of the line. * editcommands.c (cmd_translate_area): Applies a translation-table (a string) to a region of a buffer. Also, variables `upcase-table' and `downcase-table' are provided. Needs `cmd_translate_rect'. Fri Mar 4 18:55:38 1994 John Harper (jsh@orcrist) * lispcmds.c (cmd_functionp, cmd_special_form_p): Fixed null-ref when a symbol has no function value. * edit.c (rectinsertstring, rectdeletesect): Now calls the `flag*' functions properly. Also fixed bug that inserting past the bottom of the file didn't work properly. * files.c: Changed `cmd_find_file' to `cmd_get_file_buffer' and `cmd_find_buffer' to `cmd_get_buffer'. Thu Mar 3 21:36:01 1994 John Harper (jsh@orcrist) * lispcmds.c (cmd_eval_hook2): Could exit with `GCinhibit' still set. * keys.c (usekey): Now checks for a read-only buffer before inserting a keypress. Mon Feb 28 19:34:54 1994 John Harper (jsh@orcrist) * symbols.c, lisp.h: New flag in Symbol struct: SF_INTERNED. This gets set when a symbol is interned. Lets me protect against interning a symbol twice. * streams.c (cmd_stdin_file, cmd_stdout_file): These didn't actually set the LFF_DONT_CLOSE flag which I had so carefully prepared for them :-( Sun Feb 27 20:48:56 1994 John Harper (jsh@orcrist) * x11/windows.c (activatewin): Actually does something now -- raises the window and warps the mouse to it's top-left corner. Tue Feb 22 21:58:18 1994 John Harper (jsh@orcrist) * x11/render.c (cutpastelines): Doesn't bother if `dstLine' is off bottom of window. * lisp.c, lispcmds.c, lispmach.c, ../lisp/lisp.jl: Got rid of 'lambda throw tag, this won't work as expected in some pieces of compiled code. Replaced by 'defun tag which returns a value from a defun. Mon Feb 21 02:05:56 1994 John Harper (jsh@orcrist) * lispcmds.c (cmd_load): Now takes note of variable `load-path' (list of directory names) and warns if compiled file is older than it's source. Also an option to suppress the error when file doesn't exist. Sun Feb 20 21:20:02 1994 John Harper (jsh@orcrist) * io.c (cmd_write_buffer_area): New command, writes a portion of a buffer to a file. Sat Feb 19 00:45:53 1994 John Harper (jsh@orcrist) * lisp.c, lispmach.c (cmd_backtrace): Now keeps a stack of all living Lisp function calls. This is mainly so it's easy to see where an error occurs. * lisp.c [mainly]: Error signalling written. New subrs, signal, error-protect (similar to emacs' `condition-case') and a var, debug-on-error. New byte-opcodes introduced -- op-signal and op-error-protect. Tue Feb 15 20:59:53 1994 John Harper (jsh@orcrist) * x11/render.c (cutpastelines): Some optimisation of what lines get moved (now leaves trailing blank lines alone). * unix/misc.c (cmd_user_login_name): Tries getlogin() before getpwuid(). Mon Feb 14 21:32:27 1994 John Harper (jsh@orcrist) * Changed doc-string handling -- now all subr doc-strings are kept in a separate file. All source files containg `DEFUN's have been changed to accomplish this and a new tool `makedoc' has been written. This only saves about 40K in the binary but since that was about a quarter of the whole size I think it's worth it. Sat Feb 12 14:35:05 1994 J.S.Harper (jsh@falcon.ukc.ac.uk) * find.c (cmd_regexp_match_line): New command, matches a regexp to a line of a buffer. * movement.c (cmd_next_tab, cmd_goto_next_tab, cmd_prev_tab, cmd_goto_prev_tab): These would go into a (near-)infinite loop when given a negative argument. * unix/misc.c (cmd_user_full_name): `FULL_NAME_TERMINATOR' option. Sat Feb 12 01:28:01 1994 John Harper (jsh@orcrist) * misc.c (cmd_major_version_number, cmd_minor_version_number): New commands. Thu Feb 10 03:15:12 1994 John Harper (jsh@orcrist) * render.c: '#if 0' out `cmd_refresh_window'. This isn't possible anymore -- there's no way of saying that a certain window has been updated re: a buffer while other views of that buffer haven't. This is no big loss, use `refresh-all' instead. * jed.h, x11/windowsys.h, amiga/windowsys.h: Took out most #ifdef's from the VW structure. Now all window-system specific bits of a VW are in a separate structure (`VW_WindowSystem'). Wed Feb 9 22:46:34 1994 John Harper (jsh@orcrist) * jed.h, files.c, ../lisp/buffers.jl: Fixed problem of buffer being marked unmodified after an auto-save. -Introduced new field, `tx_ProperSaveChanges', containing the change count at the last time the buffer was written to its file (*not* an auto-save). * io.c (readtx, writetx): No longer assumes that all files end in '\n'. This means that files without a trailing newline don't get given one anyway when they're written to disk. Tue Feb 8 03:29:19 1994 John Harper (jsh@orcrist) * files.c (cmd_buffer_changes, cmd_buffer_modified_p, cmd_set_buffer_modified): New method of dealing with modification counts. `tx_Changes' is *never* reset -- when the buffer is `un-modified' another field `tx_LastSaveChanges' is set to the current value of `tx_Changes'. This is so the new refresh code can rely on the change counter. * render.c, x11/render.c, edit.c, editcommands.c: Rewrote functions which control what gets redrawn and when. This almost works. Much more efficient and loses some embarassing misfeatures. Sun Feb 6 01:25:15 1994 John Harper (jsh@orcrist) * lisp.h, streams.c: New flag in LFile structure, `LFF_DONT_CLOSE', means *never* fclose() the lf_File field. * streams.c (cmd_stdin_file, cmd_stdout_file): Access to stdin/out. * .gdbinit: New file, command to print a lisp object in gdb. * lisp.c (bindlambdalist): uses static symbols to match ampersand- keywords (`&optional', `&rest', `&aux'). * amiga/misc.c: merged amiga/io.c into this file. * amiga/misc.c (cmd_user_login_name, cmd_user_real_name, cmd_user_home_directory, cmd_system_name): New commands in line with their unix counterparts, get their values from strategically placed environment variables. * unix/misc.c: merged unix/io.c into this file. * unix/io.c (cmd_user_login_name, cmd_user_real_name, cmd_user_home_directory, cmd_system_name): These now cache their results after the first time they're called. * unix/io.c (cmd_system_name): Now returns the full hostname, with domains and everything. Sat Feb 5 21:36:22 1994 John Harper (jsh@orcrist) * windows.c (cmd_with_window): special-form (similar to `with-buffer'). * lispmach.c, ../lisp/compiler.jl: support for above special form, new opcodes `swap-window' and `windowp'. * lispmach.c: Put stack bounds checking inside `#ifdef PARANOID' * unix/processes.c (signalprocess): Signals no longer use characters. (Unless you define `SIGNALS_VIA_CHARS'.) Fri Feb 4 23:26:31 1994 John Harper (jsh@orcrist) * ChangeLog starts here, I've decided to try and keep one of these things.