view lisp/term/scoansi.el @ 5169:6c6d78781d59

cleanup of code related to xfree(), better KKCC backtrace capabilities, document XD_INLINE_LISP_OBJECT_BLOCK_PTR, fix some memory leaks, other code cleanup -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-03-24 Ben Wing <ben@xemacs.org> * array.h: * array.h (XD_LISP_DYNARR_DESC): * dumper.c (pdump_register_sub): * dumper.c (pdump_store_new_pointer_offsets): * dumper.c (pdump_reloc_one_mc): * elhash.c: * gc.c (lispdesc_one_description_line_size): * gc.c (kkcc_marking): * lrecord.h: * lrecord.h (IF_NEW_GC): * lrecord.h (enum memory_description_type): * lrecord.h (enum data_description_entry_flags): * lrecord.h (struct opaque_convert_functions): Rename XD_LISP_OBJECT_BLOCK_PTR to XD_INLINE_LISP_OBJECT_BLOCK_PTR and document it in lrecord.h. * data.c: * data.c (finish_marking_weak_lists): * data.c (continue_marking_ephemerons): * data.c (finish_marking_ephemerons): * elhash.c (MARK_OBJ): * gc.c: * gc.c (lispdesc_indirect_count_1): * gc.c (struct): * gc.c (kkcc_bt_push): * gc.c (kkcc_gc_stack_push): * gc.c (kkcc_gc_stack_push_lisp_object): * gc.c (kkcc_gc_stack_repush_dirty_object): * gc.c (KKCC_DO_CHECK_FREE): * gc.c (mark_object_maybe_checking_free): * gc.c (mark_struct_contents): * gc.c (mark_lisp_object_block_contents): * gc.c (register_for_finalization): * gc.c (mark_object): * gc.h: * lisp.h: * profile.c: * profile.c (mark_profiling_info_maphash): Clean up KKCC code related to DEBUG_XEMACS. Rename kkcc_backtrace() to kkcc_backtrace_1() and add two params: a `size' arg to control how many stack elements to print and a `detailed' arg to control whether Lisp objects are printed using `debug_print()'. Create front-ends to kkcc_backtrace_1() -- kkcc_detailed_backtrace(), kkcc_short_backtrace(), kkcc_detailed_backtrace_full(), kkcc_short_backtrace_full(), as well as shortened versions kbt(), kbts(), kbtf(), kbtsf() -- to call it with various parameter values. Add an `is_lisp' field to the stack and backtrace structures and use it to keep track of whether an object pushed onto the stack is a Lisp object or a non-Lisp structure; in kkcc_backtrace_1(), don't try to print a non-Lisp structure as a Lisp object. * elhash.c: * extents.c: * file-coding.c: * lrecord.h: * lrecord.h (IF_NEW_GC): * marker.c: * marker.c (Fmarker_buffer): * mule-coding.c: * number.c: * rangetab.c: * specifier.c: New macros IF_OLD_GC(), IF_NEW_GC() to simplify declaration of Lisp objects when a finalizer may exist in one but not the other. Use them appropriately. * extents.c (finalize_extent_info): Don't zero out data->soe and data->extents before trying to free, else we get memory leaks. * lrecord.h (enum lrecord_type): Make the first lrecord type have value 1 not 0 so that 0 remains without implementation and attempts to interpret zeroed memory as a Lisp object will be more obvious. * array.c (Dynarr_free): * device-msw.c (msprinter_delete_device): * device-tty.c (free_tty_device_struct): * device-tty.c (tty_delete_device): * dialog-msw.c (handle_directory_dialog_box): * dialog-x.c: * emacs.c (free_argc_argv): * emodules.c (attempt_module_delete): * file-coding.c (chain_finalize_coding_stream_1): * file-coding.c (chain_finalize_coding_stream): * glyphs-eimage.c: * glyphs-eimage.c (jpeg_instantiate_unwind): * glyphs-eimage.c (gif_instantiate_unwind): * glyphs-eimage.c (png_instantiate_unwind): * glyphs-eimage.c (tiff_instantiate_unwind): * imgproc.c: * imgproc.c (build_EImage_quantable): * insdel.c (uninit_buffer_text): * mule-coding.c (iso2022_finalize_detection_state): * objects-tty.c (tty_finalize_color_instance): * objects-tty.c (tty_finalize_font_instance): * objects-tty.c (tty_font_list): * process.c: * process.c (finalize_process): * redisplay.c (add_propagation_runes): * scrollbar-gtk.c: * scrollbar-gtk.c (gtk_free_scrollbar_instance): * scrollbar-gtk.c (gtk_release_scrollbar_instance): * scrollbar-msw.c: * scrollbar-msw.c (mswindows_free_scrollbar_instance): * scrollbar-msw.c (unshow_that_mofo): * scrollbar-x.c (x_free_scrollbar_instance): * scrollbar-x.c (x_release_scrollbar_instance): * select-x.c: * select-x.c (x_handle_selection_request): * syntax.c: * syntax.c (uninit_buffer_syntax_cache): * text.h (eifree): If possible, whenever we call xfree() on a field in a structure, set the field to 0 afterwards. A lot of code is written so that it checks the value being freed to see if it is non-zero before freeing it -- doing this and setting the value to 0 afterwards ensures (a) we won't try to free twice if the cleanup code is called twice; (b) if the object itself stays around, KKCC won't crash when attempting to mark the freed field. * rangetab.c: Add a finalization method when not NEW_GC to avoid memory leaks. (#### We still get memory leaks when NEW_GC; need to convert gap array to Lisp object).
author Ben Wing <ben@xemacs.org>
date Wed, 24 Mar 2010 01:22:51 -0500
parents 74fd4e045ea6
children 697ef44129c6 308d34e9f07d
line wrap: on
line source

;; scoansi.el --- set up key names for SCO ansi console

;; Copyright (C) 1985, 1986, 1992 Free Software Foundation, Inc.

;; Author: Kean Johnston <jkj@paradigm.co.za>

;; This file is part of GNU Emacs.

;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING.  If not, write to
;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.

;; HISTORY
;;    jkj - Jan 18, 1993: Created.
;;    jkj - Nov 18, 1993: Modified to work with Emacs 19.21

;;
;; First of all, the normal cursor movement keys. Some of these, if not
;; all, should be set up my termcap/terminfo. We reset them anyway for
;; the sake of completeness.
;;
(define-key function-key-map "\e[A" [up])
(define-key function-key-map "\e[B" [down])
(define-key function-key-map "\e[C" [right])
(define-key function-key-map "\e[D" [left])
(define-key function-key-map "\e[E" [center])
(define-key function-key-map "\e[F" [end])
(define-key function-key-map "\e[G" [next])
(define-key function-key-map "\e[H" [home])
(define-key function-key-map "\e[I" [prior])
(define-key function-key-map "\e[L" [insert])
(define-key function-key-map "\e[-" [kp-subtract])
(define-key function-key-map "\e[+" [kp-add])

;;
;; And now all the function keys
;;

;; Normal, unshifted keys
(define-key function-key-map "\e[M" [f1])
(define-key function-key-map "\e[N" [f2])
(define-key function-key-map "\e[O" [f3])
(define-key function-key-map "\e[P" [f4])
(define-key function-key-map "\e[Q" [f5])
(define-key function-key-map "\e[R" [f6])
(define-key function-key-map "\e[S" [f7])
(define-key function-key-map "\e[T" [f8])
(define-key function-key-map "\e[U" [f9])
(define-key function-key-map "\e[V" [f10])
(define-key function-key-map "\e[W" [f11])
(define-key function-key-map "\e[X" [f12])

;; Shift-function keys
(define-key function-key-map "\e[Y" [(shift f1)])
(define-key function-key-map "\e[Z" [(shift f2)])
(define-key function-key-map "\e[a" [(shift f3)])
(define-key function-key-map "\e[b" [(shift f4)])
(define-key function-key-map "\e[c" [(shift f5)])
(define-key function-key-map "\e[d" [(shift f6)])
(define-key function-key-map "\e[e" [(shift f7)])
(define-key function-key-map "\e[f" [(shift f8)])
(define-key function-key-map "\e[g" [(shift f9)])
(define-key function-key-map "\e[h" [(shift f10)])
(define-key function-key-map "\e[i" [(shift f11)])
(define-key function-key-map "\e[j" [(shift f12)])

;; Control function keys
(define-key function-key-map "\e[k" [(control f1)])
(define-key function-key-map "\e[l" [(control f2)])
(define-key function-key-map "\e[m" [(control f3)])
(define-key function-key-map "\e[n" [(control f4)])
(define-key function-key-map "\e[o" [(control f5)])
(define-key function-key-map "\e[p" [(control f6)])
(define-key function-key-map "\e[q" [(control f7)])
(define-key function-key-map "\e[r" [(control f8)])
(define-key function-key-map "\e[s" [(control f9)])
(define-key function-key-map "\e[t" [(control f10)])
(define-key function-key-map "\e[u" [(control f11)])
(define-key function-key-map "\e[v" [(control f12)])

;; Shift-control function keys
(define-key function-key-map "\e[w" [(control shift f1)])
(define-key function-key-map "\e[x" [(control shift f2)])
(define-key function-key-map "\e[y" [(control shift f3)])
(define-key function-key-map "\e[z" [(control shift f4)])
(define-key function-key-map "\e[@" [(control shift f5)])
(define-key function-key-map "\e[[" [(control shift f6)])
(define-key function-key-map "\e[\\" [(control shift f7)])
(define-key function-key-map "\e[]" [(control shift f8)])
(define-key function-key-map "\e[^" [(control shift f9)])
(define-key function-key-map "\e[_" [(control shift f10)])
(define-key function-key-map "\e[`" [(control shift f11)])
(define-key function-key-map "\e[{" [(control shift f12)])

;;;
;;; Now come the extended key names. Please refer to README.sco for
;;; more information regarding these keys and how to set them up.
;;;
(define-key function-key-map "\e]A" [(shift home)])
(define-key function-key-map "\e]B" [(shift up)])
(define-key function-key-map "\e]C" [(shift prior)])
(define-key function-key-map "\e]D" [(shift left)])
(define-key function-key-map "\e]E" [(shift right)])
(define-key function-key-map "\e]F" [(shift end)])
(define-key function-key-map "\e]G" [(shift down)])
(define-key function-key-map "\e]H" [(shift next)])
(define-key function-key-map "\e]I" [(shift insert)])
(define-key function-key-map "\e]J" [(shift delete)])

(define-key function-key-map "\e]K" [(control home)])
(define-key function-key-map "\e]L" [(control up)])
(define-key function-key-map "\e]M" [(control prior)])
(define-key function-key-map "\e]N" [(control left)])
(define-key function-key-map "\e]O" [(control right)])
(define-key function-key-map "\e]P" [(control end)])
(define-key function-key-map "\e]Q" [(control down)])
(define-key function-key-map "\e]R" [(control next)])
(define-key function-key-map "\e]S" [(control insert)])
(define-key function-key-map "\e]T" [(control delete)])

(define-key function-key-map "\e]U" [(meta home)])
(define-key function-key-map "\e]V" [(meta up)])
(define-key function-key-map "\e]W" [(meta prior)])
(define-key function-key-map "\e]X" [(meta left)])
(define-key function-key-map "\e]Y" [(meta right)])
(define-key function-key-map "\e]Z" [(meta end)])
(define-key function-key-map "\e]a" [(meta down)])
(define-key function-key-map "\e]b" [(meta next)])
(define-key function-key-map "\e]c" [(meta insert)])
(define-key function-key-map "\e]d" [(meta delete)])

(define-key function-key-map "\e]e" [(control center)])
(define-key function-key-map "\e]f" [(control kp-subtract)])
(define-key function-key-map "\e]g" [(control kp-add)])

(define-key function-key-map "\e]h" [(meta center)])
(define-key function-key-map "\e]i" [(meta kp-subtract)])
(define-key function-key-map "\e]j" [(meta kp-add)])