nasm.sl
资源名称:nasm-0.98.zip [点击查看]
上传用户:yuppie_zhu
上传日期:2007-01-08
资源大小:535k
文件大小:10k
源码类别:
编译器/解释器
开发平台:
C/C++
- % This file defines a NASM editor mode for the JED editor.
- % JED's home page is http://space.mit.edu/~davis/jed.html.
- %
- % To install, copy this file into your JED_LIBRARY directory
- % (/usr/local/jed/lib or C:JEDLIB or whatever), then add the
- % following lines to your .jedrc or jed.rc file:
- % autoload("nasm_mode", "nasm");
- % add_mode_for_extension("nasm", "asm");
- % (you can of course replace "asm" with whatever file extension
- % you like to use for your NASM source files).
- variable Nasm_Instruction_Indent = 10;
- variable Nasm_Comment_Column = 33;
- variable Nasm_Comment_Space = 1;
- variable nasm_kw_2 = strcat("ahalaxbhblbpbtbxchclcscxdbdddhdidldqdsdtdwdxes",
- "fsgsinjajbjcjejgjljojpjsjzorsispssto");
- variable nasm_kw_3 = strncat("a16a32aaaaadaamaasadcaddandbsfbsrbtcbtrbtscbw",
- "cdqclccldclicmccmpcr0cr2cr3cr4cwddaadasdecdiv",
- "dr0dr1dr2dr3dr6dr7eaxebpebxecxediedxequesiesp",
- "farfldfsthltincintjaejbejgejlejmpjnajnbjncjne",
- "jngjnljnojnpjnsjnzjpejpolarldslealeslfslgslsl",
- "lssltrmm0mm1mm2mm3mm4mm5mm6mm7movmulnegnopnot",
- "o16o32outpopporrclrcrrepretrolrorrsmsalsarsbb",
- "segshlshrsmist0st1st2st3st4st5st6st7stcstdsti",
- "strsubtr3tr4tr5tr6tr7wrtxor", 9);
- variable nasm_kw_4 = strncat("arplbytecallcltscwdeemmsfabsfaddfbldfchsfcom",
- "fcosfdivfenifildfistfld1fldzfmulfnopfsinfstp",
- "fsubftstfxamfxchibtsidivimulinsbinsdinswint1",
- "int3intoinvdiretjcxzjnaejnbejngejnlelahflgdt",
- "lidtlldtlmswlocklongloopmovdmovqnearpandpopa",
- "popfpushpxorreperepzresbresdresqrestreswretf",
- "retnsahfsalcsetasetbsetcsetesetgsetlsetosetp",
- "setssetzsgdtshldshrdsidtsldtsmswtestumovverr",
- "verwwaitwordxaddxbtsxchg", 9);
- variable nasm_kw_5 = strncat("boundbswapcmovacmovbcmovccmovecmovgcmovlcmovo",
- "cmovpcmovscmovzcmpsbcmpsdcmpswcpuiddwordenter",
- "f2xm1faddpfbstpfclexfcomifcompfdisifdivpfdivr",
- "ffreefiaddficomfidivfimulfinitfistpfisubfldcw",
- "fldpifmulpfpremfptanfsavefsqrtfstcwfstswfsubp",
- "fsubrfucomfyl2xicebpint01iretdiretwjecxzleave",
- "lodsblodsdlodswloopeloopzmovsbmovsdmovswmovsx",
- "movzxoutsboutsdoutswpaddbpadddpaddwpandnpopad",
- "popawpopfdpopfwpslldpsllqpsllwpsradpsrawpsrld",
- "psrlqpsrlwpsubbpsubdpsubwpushapushfqwordrdmsr",
- "rdpmcrdtscrepnerepnzscasbscasdscaswsetaesetbe",
- "setgesetlesetnasetnbsetncsetnesetngsetnlsetno",
- "setnpsetnssetnzsetpesetposhortstosbstosdstosw",
- "timestwordwrmsrxlatb", 14);
- variable nasm_kw_6 = strncat("cmovaecmovbecmovgecmovlecmovnacmovnbcmovnc",
- "cmovnecmovngcmovnlcmovnocmovnpcmovnscmovnz",
- "cmovpecmovpofcmovbfcmovefcmovufcomipfcompp",
- "fdivrpficompfidivrfisubrfldenvfldl2efldl2t",
- "fldlg2fldln2fpatanfprem1frstorfscalefsetpm",
- "fstenvfsubrpfucomifucompincbininvlpgloopne",
- "loopnzpaddsbpaddswpmulhwpmullwpsubsbpsubsw",
- "pushadpushawpushfdpushfwsetnaesetnbesetnge",
- "setnlewbinvd", 9);
- variable nasm_kw_7 = strncat("cmovnaecmovnbecmovngecmovnlecmpxchgfcmovbe",
- "fcmovnbfcmovnefcmovnufdecstpfincstpfrndint",
- "fsincosfucomipfucomppfxtractfyl2xp1loadall",
- "paddusbpadduswpcmpeqbpcmpeqdpcmpeqwpcmpgtb",
- "pcmpgtdpcmpgtwpmaddwdpsubusbpsubusw", 5);
- variable nasm_kw_8 = "fcmovnbepackssdwpacksswbpackuswb";
- variable nasm_kw_9 = strcat("cmpxchg8bpunpckhbwpunpckhdqpunpckhwdpunpcklbw",
- "punpckldqpunpcklwd");
- variable nasm_kw_10 = "cmpxchg486loadall286";
- define nasm_indent_line() {
- variable word, len, e, c;
- e = eolp();
- push_spot();
- EXIT_BLOCK {
- pop_spot();
- if (what_column() <= Nasm_Instruction_Indent)
- skip_white();
- }
- bol_skip_white();
- c = what_column();
- if (orelse
- {looking_at_char(';')}
- {looking_at_char('#')}
- {looking_at_char('[')}) {
- bol_trim();
- pop_spot();
- EXIT_BLOCK {
- }
- return;
- }
- if (looking_at_char('%')) {
- go_right_1();
- !if (orelse
- {looking_at_char('$')}
- {looking_at_char('%')}
- {looking_at_char('+')}
- {looking_at_char('-')}
- {looking_at_char('0')}
- {looking_at_char('1')}
- {looking_at_char('2')}
- {looking_at_char('3')}
- {looking_at_char('4')}
- {looking_at_char('5')}
- {looking_at_char('6')}
- {looking_at_char('7')}
- {looking_at_char('8')}
- {looking_at_char('9')}) {
- bol_trim();
- pop_spot();
- EXIT_BLOCK {
- }
- return;
- }
- go_left_1();
- }
- push_mark();
- skip_chars("%$+-");
- skip_chars("0-9a-zA-Z_.");
- word = bufsubstr();
- if (orelse
- {c == 1}
- {looking_at_char(':')}) {
- push_spot();
- bol_trim();
- pop_spot();
- len = strlen(word);
- if (looking_at_char(':')) {
- go_right_1();
- len++;
- }
- trim();
- if (e or not(eolp())) {
- if (len >= Nasm_Instruction_Indent) {
- pop();
- whitespace(1);
- } else
- whitespace(Nasm_Instruction_Indent - len);
- if (e) {
- pop_spot();
- eol();
- push_spot();
- }
- }
- } else {
- bol_trim();
- whitespace(Nasm_Instruction_Indent);
- }
- }
- define nasm_newline_indent {
- push_spot();
- bol_skip_white();
- if (eolp())
- trim();
- pop_spot();
- newline();
- nasm_indent_line();
- }
- define nasm_bol_self_ins {
- push_spot();
- bskip_white();
- bolp();
- pop_spot();
- call("self_insert_cmd");
- % Grotty: force immediate update of the syntax highlighting.
- insert_char('.');
- deln(left(1));
- if (())
- nasm_indent_line();
- }
- define nasm_self_ins_ind {
- call("self_insert_cmd");
- % Grotty: force immediate update of the syntax highlighting.
- insert_char('.');
- deln(left(1));
- nasm_indent_line();
- }
- define nasm_insert_comment {
- variable spc;
- bol_skip_white();
- if (looking_at_char(';')) {
- bol_trim();
- go_right(1);
- skip_white();
- return;
- } else if (eolp()) {
- bol_trim();
- insert("; ");
- return;
- }
- forever {
- skip_chars("^;n'"");
- if (looking_at_char(''')) {
- go_right_1();
- skip_chars("^'n");
- !if (eolp())
- go_right_1();
- } else if (looking_at_char('"')) {
- go_right_1();
- skip_chars("^"n");
- !if (eolp())
- go_right_1();
- } else if (looking_at_char(';')) {
- !if (bolp()) {
- go_left_1();
- trim();
- !if (looking_at_char(';'))
- go_right_1();
- }
- break;
- } else {
- break;
- }
- }
- spc = Nasm_Comment_Column - what_column();
- if (spc < Nasm_Comment_Space)
- spc = Nasm_Comment_Space;
- whitespace(spc);
- if (eolp()) {
- insert("; ");
- } else {
- go_right_1();
- skip_white();
- }
- }
- $1 = "NASM";
- create_syntax_table($1);
- define_syntax (";", "", '%', $1);
- define_syntax ("([", ")]", '(', $1);
- define_syntax ('"', '"', $1);
- define_syntax (''', ''', $1);
- define_syntax ("0-9a-zA-Z_.@#", 'w', $1);
- define_syntax ("-+0-9a-fA-F.xXL", '0', $1);
- define_syntax (",:", ',', $1);
- define_syntax ('%', '#', $1);
- define_syntax ("|^&<>+-*/%~", '+', $1);
- set_syntax_flags($1,1);
- #ifdef HAS_DFA_SYNTAX
- enable_highlight_cache("nasm.dfa", $1);
- define_highlight_rule(";.*$", "comment", $1);
- define_highlight_rule("[A-Za-z_\.\?][A-Za-z0-9_\.\?\$#@~]*",
- "Knormal", $1);
- define_highlight_rule("$([A-Za-z_\.\?][A-Za-z0-9_\.\?\$#@~]*)?",
- "normal", $1);
- define_highlight_rule("[0-9]+(\.[0-9]*)?([Ee][\+\-]?[0-9]*)?",
- "number", $1);
- define_highlight_rule("[0-9]+[QqBb]", "number", $1);
- define_highlight_rule("(0x|\$[0-9A-Fa-f])[0-9A-Fa-f]*", "number", $1);
- define_highlight_rule("[0-9A-Fa-f]+[Hh]", "number", $1);
- define_highlight_rule(""[^"]*"", "string", $1);
- define_highlight_rule(""[^"]*$", "string", $1);
- define_highlight_rule("'[^']*'", "string", $1);
- define_highlight_rule("'[^']*$", "string", $1);
- define_highlight_rule("[\(\)\[\],:]*", "delimiter", $1);
- define_highlight_rule("^[ t]*#", "PQpreprocess", $1);
- define_highlight_rule("^[ t]*\%{?[^%\$\+\-0-9]", "PQpreprocess", $1);
- define_highlight_rule("^%$", "preprocess", $1);
- define_highlight_rule("[\|\^&<>\+\-\*/%~]*", "operator", $1);
- define_highlight_rule("%([%\$]?-?[0-9A-Za-z_\.\?\$~@]+|{[^}]*}?)",
- "preprocess", $1);
- define_highlight_rule("[ t]*", "normal", $1);
- define_highlight_rule(".", "normal", $1);
- build_highlight_table($1);
- #endif
- define_keywords_n($1, nasm_kw_2, 2, 0);
- define_keywords_n($1, nasm_kw_3, 3, 0);
- define_keywords_n($1, nasm_kw_4, 4, 0);
- define_keywords_n($1, nasm_kw_5, 5, 0);
- define_keywords_n($1, nasm_kw_6, 6, 0);
- define_keywords_n($1, nasm_kw_7, 7, 0);
- define_keywords_n($1, nasm_kw_8, 8, 0);
- define_keywords_n($1, nasm_kw_9, 9, 0);
- define_keywords_n($1, nasm_kw_10, 10, 0);
- define_keywords_n($1, "org", 3, 1);
- define_keywords_n($1, "bitsiend", 4, 1);
- define_keywords_n($1, "aligngroupstruc", 5, 1);
- define_keywords_n($1, "alignbcommonexternglobalistruc", 6, 1);
- define_keywords_n($1, "sectionsegmentlibrary", 7, 1);
- define_keywords_n($1, "absoluteendstruc", 8, 1);
- define_keywords_n($1, "uppercase", 9, 1);
- !if (keymap_p ($1)) make_keymap ($1);
- definekey("nasm_bol_self_ins", ";", $1);
- definekey("nasm_bol_self_ins", "#", $1);
- definekey("nasm_bol_self_ins", "%", $1);
- definekey("nasm_bol_self_ins", "[", $1);
- definekey("nasm_self_ins_ind", ":", $1);
- definekey("nasm_insert_comment", "^[;", $1);
- define nasm_mode {
- set_mode("NASM", 4);
- use_keymap ("NASM");
- use_syntax_table ("NASM");
- set_buffer_hook ("indent_hook", "nasm_indent_line");
- set_buffer_hook ("newline_indent_hook", "nasm_newline_indent");
- runhooks("nasm_mode_hook");
- }