From d352dc2e179cb870080596bb24dacece0e041414 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Fri, 27 Jan 2017 11:05:13 +0100 Subject: [PATCH] C mode for EMACS. --- build/build.tcl | 3 +- src/emacs1/c.1 | 159 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 161 insertions(+), 1 deletion(-) create mode 100755 src/emacs1/c.1 diff --git a/build/build.tcl b/build/build.tcl index 2b33ed50..d36cd192 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -286,7 +286,8 @@ respond "\n" "\033xgenerate\033emacs;abstr\033emacs1;abstr\r" respond ":EJ" "\025\033x& compress file\033emacs1;auto-s\r" respond "Compressing file" "\033xgenerate\033emacs;auto-s\033emacs1;auto-s\r" respond ":EJ" "\033xbare\033emacs1;bare\r" -respond "\n" "\033xgenerate\033emacs;delim\033emacs1;delim\r" +respond "\n" "\033xgenerate\033emacs;c\033emacs1;c\r" +respond ":EJ" "\033xgenerate\033emacs;delim\033emacs1;delim\r" respond ":EJ" "\033xgenerate\033emacs;dired\033emacs1;dired\r" respond ":EJ" "\033xgenerate\033emacs;doclsp\033emacs1;doclsp\r" respond ":EJ" "\033xgenerate\033emacs;docond\033emacs1;docond\r" diff --git a/src/emacs1/c.1 b/src/emacs1/c.1 new file mode 100755 index 00000000..3267c270 --- /dev/null +++ b/src/emacs1/c.1 @@ -0,0 +1,159 @@ + +!* -*-TECO-*- ! + +!~Filename~:! !Functions for editing C code.! +C + +!& Setup C Library:! !S Set up the C ..D table.! + + m.vC_..D !* Define ..D for C Mode.! + [..O FSBCREATE G..D + [0 0U0 ]0 !* Make all Alphabetic! + (*5+1JF( + [*5+1JF( + <*5+1JF_ !* angle brackets are like space! + {*5+1JF( + )*5+1JF) + ]*5+1JF) + >*5+1JF_ + }*5+1JF) + $*5+1JF/ !* dollar sign quotes! + "*5+1JF| + 11.*5+1JF_ !* Tab! + 12.*5+1JF_ !* LF! + 14.*5+1JF_ !* FF! + 15.*5+1JF_ !* CR! + 40.*5+1JF_ !* Space! + =*5+1JF_ !* = breaks! + '*5+1JF| !* ' is a string delimiter! + .*5+1JF_ + ,*5+1JF_ + 41.*5+1JF' + %*5+1JF' + ;*5+1JF' + :*5+1JF_ + HXC_..D + + + +!^R C Syntax Checker:! !^R Check the syntax of a buffer of C code. +Normally checks the entire buffer. Given an argument, checks +from . to Z. Checks for balanced braces, brackets, quotes, etc. +Does not check things like arg list syntax.! + +1:< + :I*Cfs echo disp + @FTSyntax_checking + FF"E J' !* Beginning of buffer if no arg! + [0[1[2[3[4[5[6[7 + :I7[null] !* default bracket name ! + 1:< -1F[NOQUITW !* make sure ctrl-G enabled! + !TOP! .U3 0U2 [3 [2 + !AGAIN! :S{(["/*'])}U1 .U0 + Q1"E ]2 ]3 Q2"E OWIN' OUNM' !*No more braces, so win if stack empty! + 0,-1A-$"E OAGAIN' !* $ quotes chars; if no quote, then decide if open! + 0,-1A-^"E 0,-2A-$"E OAGAIN' ' !* handle $^[ and such! + Q1+5U1 + Q1"E :S*/"E OUNM' !* flush comments! + "#OAGAIN' ' + Q1-1"G [0 [1 OAGAIN' !* Open bracket! + Q1+1"L ]2 ]3 Q2"E OXTRA' !* close bracket, match??! + Q1+Q2"N OMISM' + 0,0AU4 + Q4-]"N Q4-}"N OAGAIN' ' !* Special hacking for braces! + .U4 Q3J q7U5 q7U6 + :S"E ORCHK' Q3-.+1"E ORCHK' !* go to rchk if unnamed brace! + Q3,.-1X5 !* name of this bracket! + !RCHK! Q4J + :S"E ZJ' + "# R' + Q4-."E Q5-q7"E Q4J OAGAIN' + OAGAIN' + Q4,.X6 !name of close! + F=56"N OAGAIN' Q4J OAGAIN ' + .U3 Q1-1"E m(m.m&_find_dq)"E OUNM' OAGAIN ' + Q1+1"E m(m.m&_find_sq)"E OUNM' OAGAIN ' + !MISM! 7FSIMAGE 0,Q3-.A:I2 0,Q0-.A:I1 :I*Cfs echo disp + @ft2_Mismatched_by_1  + q0j + m(m.m^r_set/pop_mark) + Q3-1J 0; + !UNM! 7FSIMAGE 0,Q3-.A:I2 + :I*Cfs echo disp + @ft2_Unmatched_ + q0j + m(m.m^r_set/pop_mark) + Q3-1J 0; + !NUNM! 7FSIMAGE + Q5"E Q7U5' Q6"E Q7U6' 0,Q3-.A:I2 + :I*Cfsecho disp + @ftNamed_braces_5_and_6_unmatched_ + q4j + m(m.m^r_set/pop_mark) + Q3-1J 0; + !XTRA! 7FSIMAGE 0,0A:I2 + :I*Cfsecho disp + @ft2_Extraneous  + R .u0 + Q3-1j + m(m.m^r_set/pop_mark) + q0j 0; + !WIN! :I*Cfsecho disp + @ftSyntax_Correct_>U0 + Q0F"L-^FEQIT"E '' +> +0fsecho act +1 + + +!& find dq:! !S Search for double quote to end C string! + [0 :i0" + M(m.m&_FIND_END) + + +!& find sq:! !S Search for single quote to end C string! + [0 :i0' + M(m.m&_FIND_END) + + +!& find end:! !S Find end of C string.! + [1 :s0 +U1 !* look for lf, eot, or terminator! + Q1"E 0' !* aint nothing here! + Q1+2"E 0' !* linefeed! + -1 !* guess i found it! + + +!C Mode:! !C Setup things for editting C code. +Like Text mode, but uses C syntax. Also makes the following +command character assignments: + C-M-D ^R Down List + C-M-K ^R Kill Sexp + C-M-S ^R C Syntax Checker! + + M(M.M Text_Mode) + M.M Make_Local_Q-register[.Q + M.Q ...D + M.Q ...K + M.Q ...S + M.M ^R_Down_ListU...D !* Please leave for CCA and friends! + M.M ^R_Kill_SexpU...K !* Ditto! + M.M ^R_C_Syntax_CheckerU...S + + M.M^R_Indent_Nested M.Q I !* make tab indent nested.! + :@I*/ -1M(M.M^R_Indent_Nested) / M.Q ...I !* indent more.! + :@I*/ I} 2M(M.M^R_Indent_Nested) / M.Q } !* undent.! + 4 M.L Indent_Increment  + + M.Q ..D + qC_..DU..D !* Set up ..D properly! + + (@:I*\/*\)M.L Comment_Start + -1M.VDisplay_Matching_Paren + 0M.VPermit_Unmatched_Paren + (@:I*\/*_\)M.L Comment_Begin + (@:I*\_*/\)M.L Comment_End + 40 M.L Comment_Column + (@:I*\sys:cc.exe.0\)M.L Compiler_Filename + 1M(M.M &_Set_Mode_Line)C +