;;; compiled by rms@mole.gnu.ai.mit.edu on Sat May 29 18:26:01 1993
;;; from file /home/fsf/rms/e19/lisp/c-mode.el
;;; emacs version 19.9.0.
;;; bytecomp version FSF 2.08
;;; optimization is on.

(defvar c-mode-abbrev-table nil "\
Abbrev table in use in C mode.")
(define-abbrev-table (quote c-mode-abbrev-table) nil)
(defvar c-mode-map nil "\
Keymap used in C mode.")
(byte-code "O  ############" [c-mode-map make-sparse-keymap define-key "{" electric-c-brace "}" ";" electric-c-semi "#" electric-c-sharp-sign ":" electric-c-terminator "" mark-c-function "" indent-c-exp "a" c-beginning-of-statement "e" c-end-of-statement "q" c-fill-paragraph "" backward-delete-char-untabify "	" c-indent-command] 4)
(autoload (quote c-macro-expand) "cmacexp" "\
Display the result of expanding all C macros occurring in the region.
The expansion is entirely correct because it uses the C preprocessor." t)
(defvar c-mode-syntax-table nil "\
Syntax table in use in C-mode buffers.")
(byte-code "O  ############" [c-mode-syntax-table make-syntax-table modify-syntax-entry 92 "\\" 47 ". 14" 42 ". 23" 43 "." 45 61 37 60 62 38 124 39 "\""] 4)
(defconst c-indent-level 2 "\
*Indentation of C statements with respect to containing block.")
(defconst c-brace-imaginary-offset 0 "\
*Imagined indentation of a C open brace that actually follows a statement.")
(defconst c-brace-offset 0 "\
*Extra indentation for braces, compared with other text in same context.")
(defconst c-argdecl-indent 5 "\
*Indentation level of declarations of C function arguments.")
(defconst c-label-offset -2 "\
*Offset of C label lines and case statements relative to usual indentation.")
(defconst c-continued-statement-offset 2 "\
*Extra indent for lines not starting new statements.")
(defconst c-continued-brace-offset 0 "\
*Extra indent for substatements that start with open-braces.
This is in addition to c-continued-statement-offset.")
(byte-code "" [(("GNU" (c-indent-level . 2) (c-argdecl-indent . 5) (c-brace-offset . 0) (c-label-offset . -2) (c-continued-statement-offset . 2)) ("K&R" (c-indent-level . 5) (c-argdecl-indent . 0) (c-brace-offset . -5) (c-label-offset . -5) (c-continued-statement-offset . 5)) ("BSD" (c-indent-level . 4) (c-argdecl-indent . 4) (c-brace-offset . -4) (c-label-offset . -4) (c-continued-statement-offset . 4)) ("C++" (c-indent-level . 4) (c-continued-statement-offset . 4) (c-brace-offset . -4) (c-argdecl-indent . 0) (c-label-offset . -4) (c-auto-newline . t)) ("Whitesmith" (c-indent-level . 4) (c-argdecl-indent . 4) (c-brace-offset . 0) (c-label-offset . -4) (c-continued-statement-offset . 4))) c-style-alist nil] 1)
(defconst c-auto-newline nil "\
*Non-nil means automatically newline before and after braces,
and after colons and semicolons, inserted in C code.
If you do not want a leading newline before braces then use:
  (define-key c-mode-map \"{\" 'electric-c-semi)")
(defconst c-tab-always-indent t "\
*Non-nil means TAB in C mode should always reindent the current line,
regardless of where in the line point is when the TAB command is used.")
(byte-code "" ["case[ 	'/(]\\|default\\(\\S_\\|'\\)" c-switch-label-regexp nil] 1)
(defalias 'c-mode #[nil " \n!\n!!P!!!!!!!!!!!!!" [kill-all-local-variables use-local-map c-mode-map c-mode major-mode "C" mode-name c-mode-abbrev-table local-abbrev-table set-syntax-table c-mode-syntax-table make-local-variable paragraph-start "^$\\|" page-delimiter paragraph-separate paragraph-ignore-fill-prefix t indent-line-function c-indent-line indent-region-function c-indent-region require-final-newline comment-start "/* " comment-end " */" comment-column 32 comment-start-skip "/\\*+ *" comment-indent-function c-comment-indent parse-sexp-ignore-comments run-hooks c-mode-hook] 2 "\
Major mode for editing C code.
Expression and list commands understand all C brackets.
Tab indents for C code.
Comments are delimited with /* ... */.
Paragraphs are separated by blank lines only.
Delete converts tabs to spaces as it moves back.
\\{c-mode-map}
Variables controlling indentation style:
 c-tab-always-indent
    Non-nil means TAB in C mode should always reindent the current line,
    regardless of where in the line point is when the TAB command is used.
 c-auto-newline
    Non-nil means automatically newline before and after braces,
    and after colons and semicolons, inserted in C code.
 c-indent-level
    Indentation of C statements within surrounding block.
    The surrounding block's indentation is the indentation
    of the line on which the open-brace appears.
 c-continued-statement-offset
    Extra indentation given to a substatement, such as the
    then-clause of an if or body of a while.
 c-continued-brace-offset
    Extra indentation given to a brace that starts a substatement.
    This is in addition to c-continued-statement-offset.
 c-brace-offset
    Extra indentation for line if it starts with an open brace.
 c-brace-imaginary-offset
    An open brace following other text is treated as if it were
    this far to the right of the start of its line.
 c-argdecl-indent
    Indentation level of declarations of C function arguments.
 c-label-offset
    Extra indentation for line that is a label, or case or default.

Settings for K&R and BSD indentation styles are
  c-indent-level                5    8
  c-continued-statement-offset  5    8
  c-brace-offset               -5   -8
  c-argdecl-indent              0    8
  c-label-offset               -5   -8

Turning on C mode calls the value of the variable c-mode-hook with no args,
if that value is non-nil." nil])
(fset (quote c-comment-indent) #[nil "! `!! !iTI !* !. ʂI b!UD nD I iT]*" [looking-at "^/\\*" 0 opoint forward-line "[ 	]*}[ 	]*\\($\\|/\\*\\)" search-forward "}" "^#[ 	]*endif[ 	]*" "^#[ 	]*else[ 	]*" 7 skip-chars-backward " 	" comment-column] 2])
(defalias 'c-fill-paragraph #[(&optional arg) "!!! `)<  =< ! `)#`)!!S !i\" \\ ! i!`!\"`!\"`)\"!` `\"))PP݊	 	b !i `  \"*	 	\\b#!`)\"'!ebV ``\\\"db!#!! .'!*" [nil comment-start-place forward-line 0 skip-chars-forward " 	\n" looking-at comment-start-skip first-line calculate-c-indent t re-search-forward end-of-line "[ 	]*/\\*.*\\*/" make-string 32 1 line-width buffer-substring move-to-column calculate-c-indent-within-comment max-prefix-end " 	*" delete-region paragraph-start "\\|^[ 	]*/\\*[ 	]*$\\|^[ 	]*\\*/[ 	]*$\\|^[ 	/*]*$" paragraph-separate chars-to-delete fill-prefix narrow-to-region search-backward "/*" column insert-char 2 search-forward "*/" move fill-paragraph arg -1 "[ 	]*\\*/" delete-indentation] 7 "\
Like \\[fill-paragraph] but handle C comments.
If any of the current line is a comment or within a comment,
fill the comment or the paragraph of it that point is in,
preserving the comment indentation or line-starting decorations." "P"])
(defalias 'electric-c-brace #[(arg) "\nA lA !n) A   c 3  `Z 	< 	Tb!)	R 	b\n!!)W \n!!)" [nil insertpos arg skip-chars-backward " 	" c-auto-newline c-indent-line newline last-command-char 2 delete-char -1 self-insert-command prefix-numeric-value] 3 "\
Insert character and correct line's indentation." "P"])
(defalias 'electric-c-sharp-sign #[(arg) "!n) !)!!" [skip-chars-backward " 	" nil c-auto-newline electric-c-terminator arg self-insert-command prefix-numeric-value] 3 "\
Insert character and correct line's indentation." "P"])
(defalias 'electric-c-semi #[(arg) " \n!\n!!" [c-auto-newline electric-c-terminator arg self-insert-command prefix-numeric-value] 3 "\
Insert character and correct line's indentation." "P"])
(defalias 'electric-c-terminator #[(arg) "` l !!gUU 	=9 !9 !!`	W)U  `	\"8T 8T 8)) 	c t  t  `Z \n} \nTb!)\n \nb!!) !!*" [nil end insertpos arg forward-line 0 skip-chars-forward " 	" 35 last-command-char 58 looking-at c-switch-label-regexp "a-zA-Z0-9_$" beginning-of-defun parse-partial-sexp pps 3 4 5 c-indent-line c-auto-newline c-inside-parens-p newline 2 delete-char -1 self-insert-command prefix-numeric-value] 3 "\
Insert character and correct line's indentation." "P"])
(fset (quote c-inside-parens-p) #[nil "" [nil (byte-code "` `\"db`# efU*" [narrow-to-region beginning-of-defun scan-lists -1 1 40] 4) ((error))] 3])
(defalias 'c-indent-command #[(&optional whole-exp) "?   !!`)`W0 !`! )V= $+Q !n)Q   " [whole-exp c-indent-line nil end beg shift-amt c-tab-always-indent forward-line 0 1 forward-sexp skip-chars-forward " 	\n" indent-code-rigidly "#" skip-chars-backward " 	" insert-tab] 5 "\
Indent current line as C code, or in some cases insert a tab character.
If `c-tab-always-indent' is non-nil (the default), always indent current line.
Otherwise, indent the current line only if point is at the left margin or
in the line's indentation; otherwise insert a tab.

A numeric argument, regardless of its value, means indent rigidly all the
lines of the expression starting after point so that this line becomes
properly indented.  The relative indentation among the lines of the
expression are preserved." "P"])
(defalias 'c-indent-line #[nil "!d`Z!`=#   =1   !=  !<L @!e !q !!)q \\] ! !   ) !    ) !  )   ) gU Z gU !\\!iZU d\nZ`V	d\nZb	`\"jd\nZ`V	d\nZb-" [calculate-c-indent nil pos case-fold-search shift-amt beg indent forward-line 0 current-indentation t calculate-c-indent-within-comment looking-at "[ 	]*#" skip-chars-forward " 	" c-switch-label-regexp "[A-Za-z]" forward-sexp 1 ":" c-label-offset "else\\b" "else\\s_" c-backward-to-start-of-if "}[ 	]*else" forward-char backward-sexp "while\\b" c-backward-to-start-of-do 125 c-indent-level 123 c-brace-offset delete-region] 7 "\
Indent current line as C code.
Return the amount the indentation changed by."])
(defalias 'calculate-c-indent #[(&optional parse-start) "!` b  `W5 ``#A@ 8A 8G 8\\ b!gU] \\d e!#m ! !t ُ!!)  ! ! !Sb`!`W g> ! # #?   +\\fUTbi\\b!h=*h=C`Zf=*`Zf!>Ch=8!!!!\n`010|!hU)a!I!gUu!`1I0N1b*h>b!gU)!7ib!g)=8\\\\\\b!9!!gU!gU!# `9)!`W!9`V ?ZigU@ Z*\\n8AU8@7\\:AB !nHJChD =XE ! \\\\-" [forward-line 0 nil containing-sexp state case-fold-search indent-point parse-start beginning-of-defun parse-partial-sexp 3 4 skip-chars-forward " 	" 123 c-backward-to-noncomment re-search-backward "^[^ 	\n#]" move lim comment looking-at " *[({}#/]" 1 (backward-sexp 1) ((error)) "DEFUN\\b" c-argdecl-indent "\\sw\\|\\s_" "[^\"\n=(]*(" match-end (forward-sexp 1) ((error)) " 	" (44 59) search-forward "/*" t "*/" 44 58 2 39 char-syntax (119 95) forward-char -1 c-backward-to-start-of-continued-exp stop found end-of-line 92 35 (nil 44 59 125 123) 125 c-continued-statement-offset c-continued-brace-offset colon-line-end " 	\n" "#\\|/\\*\\|case[ 	\n'/(].*:\\|[a-zA-Z0-9_$]*:" 47 ":" current-indentation c-label-offset c-brace-offset c-indent-level skip-chars-backward c-brace-imaginary-offset 41 forward-sexp] 5 "\
Return appropriate indentation for current line as C code.
In usual case returns an integer: the column to indent to.
Returns nil if line starts inside a string, t if in a comment."])
(defalias 'calculate-c-indent-within-comment #[(&optional after-star) "!!gU!`!!\n. !. !\n#E 	E \nE !Tb!V hUV iTW i+" [nil star-start end forward-line 0 skip-chars-forward " 	" 42 skip-chars-backward " 	\n" after-star looking-at "\\*" re-search-forward "\\*[ 	]*" "/\\*[ 	]*" t match-beginning "[ 	]*$"] 4 "\
Return the indentation amount for line inside a block comment.
Optional arg AFTER-STAR means, if lines in the comment have a leading star,
return the indentation of the text that would follow this star."])
(byte-code "MM" [c-backward-to-noncomment #[(lim) "	?M \"``\\Y- !!)- # `XA !!!)? ! *" [nil stop opoint skip-chars-backward " 	\n" lim 2 forward-char -2 looking-at "\\*/" search-backward "/*" move forward-line 0 skip-chars-forward " 	" "#"] 5] c-backward-to-start-of-continued-exp #[(lim) "h>\n !!`X Tb!" [(41 34) forward-sexp -1 forward-line 0 lim skip-chars-forward " 	"] 2]] 2)
(defalias 'c-backward-to-start-of-if #[(&optional limit) "  `)o?E U?E !!+ T !7 S `W b *" [limit beginning-of-defun 1 nil case-fold-search if-level 0 backward-sexp looking-at "else\\b" "if\\b"] 2 "\
Move to the start of the last \"unbalanced\" `if'."])
(defalias 'c-backward-to-start-of-do #[(&optional limit) "  `)`k `ɏg !- g != hUS Q hUQ ҂R $)\\ g `Wg ) =u y b+" [limit beginning-of-defun t nil done startpos first next-start (backward-sexp 1) ((error (byte-code "" [fail done] 1))) looking-at "do\\b" succeed forward-sexp 1 125 search-forward ";" 2 fail] 6 "\
If point follows a `do' statement, move to beginning of it and return t.
Otherwise return nil and don't move point."])
(defalias 'c-beginning-of-statement #[(count) "` `\n$)	86 	86 	P!6 !`Zb!)> [!d VQ  S@ Wd  TS *" [nil state here beginning-of-defun parse-partial-sexp 3 4 looking-at "[ 	]*" comment-start-skip skip-chars-backward " 	" 2 "\\*/" forward-sentence count 0 c-beginning-of-statement-1 c-end-of-statement-1] 6 "\
Go to the beginning of the innermost C statement.
With prefix arg, go back N - 1 statements.  If already at the beginning of a
statement then go to the beginning of the preceeding one.
If within a string or comment, or next to a comment (only whitespace between),
move by sentences instead of statements." "p"])
(defalias 'c-end-of-statement #[(count) "	[!" [c-beginning-of-statement count] 2 "\
Go to the end of the innermost C statement.
With prefix arg, go forward N - 1 statements.
Move forward to end of the next statement if already at end.
If within a string or comment, move by sentences instead of statements." "p"])
(byte-code "MM" [c-beginning-of-statement-1 #[nil "`ŏ*" [t first last-begin nil (byte-code "o !\n # `  b" [backward-sexp 1 first re-search-forward "[;{}]" last-begin t nil] 4) ((error (byte-code " !b" [first backward-up-list 1 last-begin] 2)))] 3] c-end-of-statement-1 #[nil "" [nil (byte-code "m `!`b#+  !!" [beg forward-sexp 1 end re-search-forward "[;{}]" t re-search-backward "[;}]" forward-char] 4) ((error (byte-code "`!`b#*" [beg backward-up-list -1 end search-forward ";" move] 4)))] 3]] 2)
(defalias 'mark-c-function #[nil "`! `#  " [push-mark end-of-defun nil t beginning-of-defun backward-paragraph] 4 "\
Put mark at end of C function, point at beginning." nil])
(defalias 'indent-c-exp #[(&optional endpos) "C`$ ! `)`\"ʏ*% `C!)` `)# `%!!8? !8?)  !*m? `W ?m ߉` `%@AA@ AA@Y AA@8  8! ߉ ;W;	C\"C\"TT\"8T\"?DX 8Ve	AASLUpW	BBTr@A@!`)\"!!l 	@+	@Y+@fU	@E!gU!\n!h>@!6i7\\\\'\n! '#\n!# '	@)E	@7	@[8\n!<	<\")=!^!g!!)g@\\]gA UvBZgUC\\liUgD UE `!`\"j! ` `)#`%!!8?!8?) !) ." [nil indent-stack opoint endpos funbeg forward-char 1 beginning-of-defun narrow-to-region (byte-code "!`)" [backward-up-list 1] 2) ((error (byte-code "`" [funbeg opoint] 1))) contain-stack case-fold-search restart outer-loop-done inner-loop-done state ostate this-indent last-sexp at-else at-brace at-while last-depth 0 next-depth forward-sexp beg re-search-forward comment-start-skip end-of-line t parse-partial-sexp new-state 3 5 indent-for-comment forward-line 4 c-indent-line append setcar nthcdr 6 -1 skip-chars-forward " 	" 123 looking-at "else\\W" "while\\b" c-backward-to-noncomment (nil 44 59 125 58 123) c-backward-to-start-of-continued-exp c-continued-statement-offset c-continued-brace-offset c-backward-to-start-of-if current-indentation c-backward-to-start-of-do calculate-c-indent val c-switch-label-regexp "[A-Za-z]" ":" c-label-offset 125 c-indent-level c-brace-offset 35 delete-region] 7 "\
Indent each line of the C grouping following point.
If optional arg ENDPOS is given, indent each line, stopping when
ENDPOS is encountered." nil])
(byte-code "MM" [indent-c-find-real-comment #[nil "	5  `)#5 Ɗ!`)`	%\n\n8?0 \n8?) 	)" [nil win re-search-forward comment-start-skip end-of-line t parse-partial-sexp forward-line 0 state state-1 3 5] 6] c-indent-region #[(start end) "b\n!n l  !\"*" [start copy-marker end endmark c-indent-line indent-c-exp set-marker nil] 3]] 2)
(defalias 'set-c-style #[(style &optional global) "	\n\"A 	\".  @@!@@@ALA )" [assoc style c-style-alist vars error "Invalid C indentation style `%s'" global make-local-variable nil] 4 "\
Set C-mode variables to use one of several different indentation styles.
The arguments are a string representing the desired style
and a flag which, if non-nil, means to set the style globally.
(Interactively, the flag comes from the prefix argument.)
Available styles are GNU, K&R, BSD and Whitesmith." (list (completing-read "Use which C indentation style? " c-style-alist nil t) current-prefix-arg)])
(defvar c-backslash-column 48 "\
*Minimum column for end-of-line backslashes of macro definitions.")
(defalias 'c-backslash-region #[(from to delete-flag) "b	 \"8 `W8  hU, !!iT]! \"V] \\\\\"\" W\\ )b`Wq lq !` `W !`W)  !  !q \"+" [from c-backslash-column make-marker endmark column move-marker to delete-flag end-of-line 92 forward-char -1 skip-chars-backward " 	" forward-line 1 % tab-width 0 * / adjusted window-width c-append-backslash c-delete-backslash nil] 6 "\
Insert, align, or delete end-of-line backslashes on the lines in the region.
With no argument, inserts backslashes and aligns existing backslashes.
With an argument, deletes the backslashes.

This function does not modify the last line of the region if the region ends 
right at the start of the following line; it does not modify blank lines
at the start of the region.  So you can put the region around an entire macro
definition and conveniently use this command." "r\nP"])
(byte-code "MM" [c-append-backslash #[(column) " hU ! jjc" [end-of-line 92 forward-char -1 delete-horizontal-space column "\\"] 2] c-delete-backslash #[nil " !! `T!`\"" [end-of-line forward-char -1 looking-at "\\\\" delete-region skip-chars-backward " 	"] 4]] 2)
(defalias 'c-up-conditional #[(count) "W Â \n Ƃ `	U \n-   # !!4 !!_ \\| !v \n| U| `| ZW `\n4  4 ) !b*Z! ) b-" [count 0 forward -1 1 increment re-search-forward re-search-backward search-function opoint nil new end-of-line found depth "#[ 	]*\\(if\\|elif\\|endif\\)" t forward-line looking-at "^[ 	]*#[ 	]*\\(if\\|elif\\|endif\\)" "[ 	]*#[ 	]*endif" "[ 	]*#[ 	]*elif" error "No containing preprocessor conditional" push-mark] 5 "\
Move back to the containing preprocessor conditional, leaving mark behind.
A prefix argument acts as a repeat count.  With a negative argument,
move forward to the end of the containing preprocessor conditional.
When going backwards, `#elif' is treated like `#else' followed by `#if'.
When going forwards, `#elif' is ignored." "p"])
