Mercurial > emacs
view src/vmsmap.c @ 30411:41f228350eca
Got rid of all byte-compiler warnings on Emacs Load
ada-xref.el before ada-prj.el, so that the Project menu is created
when ada-prj tries to add to it.
(ada-activate-keys-for-case): Suppress the characters that are not
part of the Ada syntax. Better compatibility with else-mode
(ada-adjust-case-interactive): When auto-casing is not active,
correctly insert newlines (used to insert only ^M). Prevent the
syntax table from being changed in case of an error
(or '_' becomes part of a word and some commands are confused).
Do nothing if ada-auto-case is nil.
(ada-after-keyword-p): Ignore keywords that are also attributes
(ada-batch-reformat): Update usage comment
(ada-call-from-contextual-menu): New function
(ada-case-read-exceptions): Reinitialize the casing exception list
first to nil first, so that the casing exception file can be
shared.
(ada-check-defun-name): Handles "configure" keyword for gnatdist
files.
(ada-compile-goto-error): Fix regexp used to detect a file:line
anywhere in the error message
(ada-contextual-menu-last-point): New variable
(ada-create-keymap): If the variable delete-key-deletes-forward is
t on XEmacs, it means that DEL should delete one character
forward.
(ada-create-menu): Use :included instead of :visible for XEmacs.
New submenu "Options".
(ada-end-stmt-re): Correctly indent "select ... then abort"
statements.
(ada-fill-comment-paragraph): Correctly delete all leading '--'
even if they don't match ada-fill-comment-prefix Fix handling of
paragraphs on the first or last line of a file.
(ada-format-paramlist): Fix handling of default parameter values.
(ada-get-body-name): New function.
(ada-get-current-indent): Optimized by searchling directly for an
existing generic part or a statement outside of it. Handle
ada-indent-align-comments when indenting comments Replaced some
regexps by testing directly the next character. This results in a
huge speedup on some files. New indentation scheme for renames
statements. Stop looking for the 'while' or 'for' associated with
a 'loop' at the first semicolon encountered. A "return" can also
match an anonymous access subprogram declaration.
(ada-get-indent-noindent): Ignore strings and comments when
looking for the keywords "record" and "private".
(ada-goto-matching-decl-start): When matching "if", make sure we
are not in fact seeing "end if". Ignore "when" statements except
when initial keyword was "begin". Fix handling of nested
procedures. Add a recursive call to this function to skip over
other 'end' statmts. Fix indentation for "when .. => begin"
(ada-in-open-paren-p): Fix indentation for complex boolean
expressions, where 'and then', 'or else' and parenthesis
statements are mixed up.
(ada-in-paramlist-p): Skip comments while searching for the
beginning Fix handling of operator declarations.
(ada-indent-align-comments): New variable
(ada-indent-current): Change the syntax table only in the
protected section, so that we are sure it is restored correctly.
(ada-indent-on-previous-lines): Use ada-use-indent and
ada-with-indent Correctly indent "select ... then"
(ada-indent-region): Slight speedup.
(ada-indent-renames): New variable.
(ada-last-which-function-subprog, ada-last-which-function-line):
New variables
(ada-looking-at-semi-private): Correctly indent the 'private'
keyword when it is the first word in a package declaration.
(ada-loose-case-word): Stop searching if at the end of the buffer.
(ada-loose-case-word, ada-capitalize-word): Recase the whole word
even if point is not initially at the end of the word.
(ada-matching-decl-start-re): Add "when".
(ada-mode): Add support for abbrev-mode, outline-mode and
which-func-mode Override the old find-file.el entry in
ff-special-constructs since it is using the obsolete
ada-spec-suffix variable
(ada-no-auto-case): New function
(ada-scan-paramlist): When parsing the argument type, accept
spaces (as in "X 'Class", generated by Rational Rose).
(ada-other-file-name): No longer loads the other file.
(ada-popup-menu): Save and restore the current buffer and cursor
position before and after displaying the menu.
(ada-search-ignore-complex-boolean): New function.
(ada-uncomment-region): Emacs21 already knows how to delete
comments not starting in the first column.
(ada-use-indent): New variable
(ada-which-function): New function.
(ada-with-indent): New variable
(ada-xemacs): evaluate it at compile time too, so that ada-mode.el
can be batch-compiled from the command line.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Mon, 24 Jul 2000 11:14:26 +0000 |
parents | ee40177f6c68 |
children |
line wrap: on
line source
/* VMS mapping of data and alloc arena for GNU Emacs. Copyright (C) 1986, 1987 Free Software Foundation, Inc. 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, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Written by Mukesh Prasad. */ #ifdef VMS #include <config.h> #include "lisp.h" #include <rab.h> #include <fab.h> #include <rmsdef.h> #include <secdef.h> /* RMS block size */ #define BLOCKSIZE 512 /* Maximum number of bytes to be written in one RMS write. * Must be a multiple of BLOCKSIZE. */ #define MAXWRITE (BLOCKSIZE * 30) /* This funniness is to ensure that sdata occurs alphabetically BEFORE the $DATA psect and that edata occurs after ALL Emacs psects. This is because the VMS linker sorts all psects in a cluster alphabetically during the linking, unless you use the cluster_psect command. Emacs uses the cluster command to group all Emacs psects into one cluster; this keeps the dumped data separate from any loaded libraries. */ globaldef {"$D$ATA"} char sdata[512]; /* Start of saved data area */ globaldef {"__DATA"} char edata[512]; /* End of saved data area */ /* Structure to write into first block of map file. */ struct map_data { char * sdata; /* Start of data area */ char * edata; /* End of data area */ int datablk; /* Block in file to map data area from/to */ }; static void fill_fab (), fill_rab (); static int write_data (); extern char *start_of_data (); extern int vms_out_initial; /* Defined in malloc.c */ /* Maps in the data and alloc area from the map file. */ int mapin_data (name) char * name; { struct FAB fab; struct RAB rab; int status, size; int inadr[2]; struct map_data map_data; /* Open map file. */ fab = cc$rms_fab; fab.fab$b_fac = FAB$M_BIO|FAB$M_GET; fab.fab$l_fna = name; fab.fab$b_fns = strlen (name); status = sys$open (&fab); if (status != RMS$_NORMAL) { printf ("Map file not available, running bare Emacs....\n"); return 0; /* Map file not available */ } /* Connect the RAB block */ rab = cc$rms_rab; rab.rab$l_fab = &fab; rab.rab$b_rac = RAB$C_SEQ; rab.rab$l_rop = RAB$M_BIO; status = sys$connect (&rab); if (status != RMS$_NORMAL) lib$stop (status); /* Read the header data */ rab.rab$l_ubf = &map_data; rab.rab$w_usz = sizeof (map_data); rab.rab$l_bkt = 0; status = sys$read (&rab); if (status != RMS$_NORMAL) lib$stop (status); status = sys$close (&fab); if (status != RMS$_NORMAL) lib$stop (status); if (map_data.sdata != start_of_data ()) { printf ("Start of data area has moved: cannot map in data.\n"); return 0; } if (map_data.edata != edata) { printf ("End of data area has moved: cannot map in data.\n"); return 0; } fab.fab$l_fop |= FAB$M_UFO; status = sys$open (&fab); if (status != RMS$_NORMAL) lib$stop (status); /* Map data area. */ inadr[0] = map_data.sdata; inadr[1] = map_data.edata; status = sys$crmpsc (inadr, 0, 0, SEC$M_CRF | SEC$M_WRT, 0, 0, 0, fab.fab$l_stv, 0, map_data.datablk, 0, 0); if (! (status & 1)) lib$stop (status); } /* Writes the data and alloc area to the map file. */ mapout_data (into) char * into; { struct FAB fab; struct RAB rab; int status; struct map_data map_data; int datasize, msize; if (vms_out_initial) { error ("Out of initial allocation. Must rebuild emacs with more memory (VMS_ALLOCATION_SIZE)."); return 0; } map_data.sdata = start_of_data (); map_data.edata = edata; datasize = map_data.edata - map_data.sdata + 1; map_data.datablk = 2 + (sizeof (map_data) + BLOCKSIZE - 1) / BLOCKSIZE; /* Create map file. */ fab = cc$rms_fab; fab.fab$b_fac = FAB$M_BIO|FAB$M_PUT; fab.fab$l_fna = into; fab.fab$b_fns = strlen (into); fab.fab$l_fop = FAB$M_CBT; fab.fab$b_org = FAB$C_SEQ; fab.fab$b_rat = 0; fab.fab$b_rfm = FAB$C_VAR; fab.fab$l_alq = 1 + map_data.datablk + ((datasize + BLOCKSIZE - 1) / BLOCKSIZE); status = sys$create (&fab); if (status != RMS$_NORMAL) { error ("Could not create map file"); return 0; } /* Connect the RAB block */ rab = cc$rms_rab; rab.rab$l_fab = &fab; rab.rab$b_rac = RAB$C_SEQ; rab.rab$l_rop = RAB$M_BIO; status = sys$connect (&rab); if (status != RMS$_NORMAL) { error ("RMS connect to map file failed"); return 0; } /* Write the header */ rab.rab$l_rbf = &map_data; rab.rab$w_rsz = sizeof (map_data); status = sys$write (&rab); if (status != RMS$_NORMAL) { error ("RMS write (header) to map file failed"); return 0; } if (! write_data (&rab, map_data.datablk, map_data.sdata, datasize)) return 0; status = sys$close (&fab); if (status != RMS$_NORMAL) { error ("RMS close on map file failed"); return 0; } return 1; } static int write_data (rab, firstblock, data, length) struct RAB * rab; char * data; { int status; rab->rab$l_bkt = firstblock; while (length > 0) { rab->rab$l_rbf = data; rab->rab$w_rsz = length > MAXWRITE ? MAXWRITE : length; status = sys$write (rab, 0, 0); if (status != RMS$_NORMAL) { error ("RMS write to map file failed"); return 0; } data = &data[MAXWRITE]; length -= MAXWRITE; rab->rab$l_bkt = 0; } return 1; } /* write_data */ #endif /* VMS */