home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / AAEMA95A.ZIP / MAIN.CC < prev    next >
Encoding:
C/C++ Source or Header  |  1995-10-06  |  16.1 KB  |  343 lines

  1. /* This file is MAIN.CC */
  2. #include "em.h"
  3. //FILE*debug;
  4. int gethex(int&i,char*&f){char c; int j=0,k=0,s=1;
  5. while((c=*f++)==' '?:c=='\t'); if(c=='-') {s=-1; c=*f++;}
  6. A: if(c>='0') if(c<='9') {j=j*16+c-'0'; c=*f++; k++; goto A;}
  7. if(c>='A') if(c<='F') {j=j*16+c+10-'A'; c=*f++; k++; goto A;}
  8. if(c>='a') if(c<='f') {j=j*16+c+10-'a'; c=*f++; k++; goto A;} i=j*s; return k;}
  9. /*-----*/
  10. char DIR[64],helpfile[128],bighelpfile[128],infofile[128],*dictname=0;
  11. char *altnames[256],*altshortnames[256]; val keynames[13]; char rept;
  12. macrinfo basemi,*mi=&basemi; int nscreenmodes,oldmx,oldmy;
  13. c_short_addr graphicalscreen(0xa0000); jmp_buf Exit;
  14. /*-----*//* remove null args */
  15. //static void dustman(int&n,char**arg){reg i,j; reg char*s;
  16. //for(i=j=0;i<n;i++) if(s=arg[i]) arg[j++]=s; n=j;}
  17. /*-----*/
  18. char Getchar(){int i; A: i=get_key(); if(i<0) goto A; printch(i); return i;}
  19. /*-----*/
  20. void Gets(char*s){int i; char*t=s;
  21. A: i=Getchar(); *t++=i; if(i!=10) if(i!=13) goto A; t[-1]=0;}
  22. /*-----*/
  23. void myhandler(){MOAN("out of store");}
  24. /*-----*/
  25. void*myalloc(int i){void*x=malloc(i); if(!x) myhandler(); return x;}
  26. /*-----*/
  27. main(int nargs,char**Arg){
  28. c_mem Dustbin(512); c_short_addr dustbin(Dustbin); Subr*S; char*s,**info=0;
  29. int i,j,k,m,n,w; jmp_buf emacserror; buffer*C=0; char *T,**arg;
  30. char goodmode[]={0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0};
  31. Jerry.range(2048,2048); Jerry.mc=0;
  32. arg=(char**)myalloc(nargs*sizeof(char*)); for(i=0;i<nargs;i++) arg[i]=Arg[i];
  33. if(nargs>1) if(!strcmp(arg[1],"/help")) {
  34.     ps("in AAEMACS, type 'ctrl-_ ?' to find how to get help.\n"); exit(0);}
  35. gp_Cols=ScreenCols(); gp_Rows=ScreenRows(); clock();
  36. /**** These 2 addresses are specific for Gnu C's virtual store system:- ****/
  37. /* gp_Cols=*(uns short*)0xe000044a; gp_Rows=*(byte*)0xe0000484+1; */
  38. for(i=0;s=(S=&subrname[i])->name;i++) S->n=strlen(s); i=0;
  39. keynames[i++]=val("null",0);
  40. keynames[i++]=val("tab",'I'-64);
  41. keynames[i++]=val("ret",CR);
  42. keynames[i++]=val("esc",'['-64);
  43. keynames[i++]=val("space",' ');
  44. keynames[i++]=val("ctrlleftsqbrkt",'['-64);
  45. keynames[i++]=val("ctrlbackslash",'\\'-64);
  46. keynames[i++]=val("ctrlrightsqbrkt",']'-64);
  47. keynames[i++]=val("ctrlcircumflex",'^'-64);
  48. keynames[i++]=val("ctrlunderline",'_'-64);
  49. keynames[i++]=val("char127",127);
  50. keynames[i++]=val("char255",255);
  51. keynames[i++]=val(0,0);
  52. for(i=0;i<255;i++) {to__upper[i]=to__lower[i]=i; chtype[i]=0;}
  53. for(i='a';i<='z';i++) {to__upper[i]-=32; chtype[i]|=c_alpha|c_alnum;}
  54. for(i='A';i<='Z';i++) {to__lower[i]+=32; chtype[i]|=c_alpha|c_alnum;}
  55. for(i='0';i<='9';i++) chtype[i]|=c_alnum; chtype['_']|=c_alnum;
  56. chtype[' ']|=c_white; chtype[9]|=c_white; chtype[LF]|=c_white;
  57. set_new_handler(&out_of_store); Moan=Display=0;
  58. lastyank=region(); Found=region(); for(i=0;i<16;i++) killring[i]=Text();
  59. if(T=getenv("AAEMACS")) {strcpy(DIR,T); goto DIR_FOUND;}
  60. wr("parameter AAEMACS not set in AUTOEXEC.BAT\n");
  61. if(nargs>0) {strcpy(DIR,arg[0]); n=strlen(DIR);
  62.     for(i=0;i<n;i++) DIR[i]=DIR[i]=='/'?'\\':to__upper[DIR[i]&255];
  63.     if(!strcmp(DIR,"EMACS")) goto ASK_FOR_DIR;
  64.     if(n>=6) if(!strcmp(DIR+n-6,"\\EMACS")) {DIR[n-6]=0;
  65.     pr(CW,"is your AAEMACS on directory '%s'?",DIR);
  66.     if(Yesno(CW)) goto DIR_FOUND;}}
  67. ASK_FOR_DIR: wr("what directory is your AAEMACS on?"); Gets(DIR);
  68. DIR_FOUND: pr(helpfile,"%s\\"HELPFILE,DIR); n=strlen(DIR);
  69. for(i=0;i<n;i++) DIR[i]=DIR[i]=='/'?'\\':to__upper[DIR[i]&255];
  70. pr(bighelpfile,"%s\\"BIGHELPFILE,DIR); pr(infofile,"%s\\INFO.DAT",DIR);
  71. if(!(info=readtext(infofile))) {ps("I can't open file %s\n",infofile); exit(1);}
  72. m=gp_mode(); *graphicalscreen=16; _ax=(*graphicalscreen).val();
  73. if(m<20 ? !goodmode[m] : _ax==16 ?: ScreenCols()<80 ?: ScreenRows()<20) {
  74. /* if(outportb(0x3c0,0x10),inportb(0x3c1)&3 *//* eliminate mono & graphic */
  75.     ps("this screen mode (%1x hex) is not suitable for AAEMACS\n",m); exit(1);}
  76. if(ScreenCols()<80) {ps("this screen mode (%1x hex) has < 80 chars/line,\
  77.  so is not suitable for AAEMACS\n",m); exit(1);}
  78. pr(CW,"%s\\"DICTFILE,DIR); dictname=copyof(CW);
  79. for(i=0;i<strsize;i++) CW[i]=0;
  80. for(i=0;i<256;i++) altnames[i]=altshortnames[i]=0;
  81. for(j=0;s=info[j];j++) {w=strlen(s); if(w) if(s[w-1]==LF) s[--w]=0;
  82.     i=atoi(s); for(k=0;k<w;k++) if(s[k]==' ') s[k]=0;
  83.     if(!s[4]?1:!s[21]) {ps("bad line in %s\n",infofile); exit(1);}
  84.     i&=255; altnames[i]=copyof(s+4); altshortnames[i]=copyof(s+21);}
  85. delete info[0]; delete info; info=0;
  86. bad=&emacserror; if(setjmp(*bad)){
  87.     clearscreen(); ps("\n%s\n",Moan?:"AAEMACS aborted"); exit(1);}
  88. clearscreen(); line0=new line(); line0->next=line0; thisstep.f=kf(&_idle);
  89. B=buf0=new buffer(); B->initbuffer(); laststep.f=kf(&_idle);
  90. B->row1=0; B->nrows=gp_Rows; B->ncols=gp_Cols; B->lastrow=B->row1+B->nrows-1;
  91. for(i=0;i<256;i++) {Sl[i].lp=Sl[i].nlp=0;
  92.     Sl[i].buf=B; Sl[i].l=line0; Sl[i].ok=0; Sl[i].sa=dustbin;}
  93. for(i=0;i<gp_Rows;i++) Sl[i].sa=screen+i*gp_Cols; /* screen address of line */
  94. /* bind the keys:- (printing chars are unbound and unbindable) */
  95. keys.subarray(); keys[0].subarray();
  96. keys[0][alt_0]=alt0;keys[0][alt_1]=alt1;keys[0][alt_2]=alt2;keys[0][alt_3]=alt3;
  97. keys[0][alt_4]=alt4;keys[0][alt_5]=alt5;keys[0][alt_6]=alt6;keys[0][alt_7]=alt7;
  98. keys[0][alt_8]=alt8;keys[0][alt_9]=alt9;keys[0][alt_minus]=altminus;
  99. keys[0][alt_A]=skipsentb;
  100. keys[0][alt_B]=skipwordb;
  101. keys[0][alt_C]=capitalize;
  102. keys[0][alt_D]=killwordf;
  103. keys[0][alt_E]=skipsentf;
  104. keys[0][alt_F]=skipwordf;
  105. keys[0][alt_G]=gotoline;
  106. keys[0][alt_H]=killwordb;
  107. keys[0][alt_I]=checkspelling;
  108. keys[0][alt_J]=finalcr;
  109. keys[0][alt_K]=killsent;
  110. keys[0][alt_L]=lwcasewords;
  111. keys[0][alt_M]=modemenu;
  112. keys[0][alt_N]=skipparaf;
  113. keys[0][alt_O]=gotodir;
  114. keys[0][alt_P]=skipparab;
  115. keys[0][alt_Q]=formatpara;
  116. keys[0][alt_R]=repl;
  117. keys[0][alt_S]=replask;
  118. keys[0][alt_T]=twiddlewords;
  119. keys[0][alt_U]=upcasewords;
  120. keys[0][alt_V]=page_up;
  121. keys[0][alt_W]=copykill;
  122. keys[0][alt_X]=callsubr;
  123. keys[0][alt_Y]=replyank;
  124. keys[0][alt_Z]=showregion;
  125. keys[0][pageup]=page_up;                keys[0][pagedown]=page_down;
  126. keys[0][home]=gotobof;                  keys[0][end_]=gotoeof;
  127. keys[0][del_]=delet;                    keys[0][ins]=insertspaces;
  128. keys[0][leftarrow]=goleft;              keys[0][rightarrow]=goright;
  129. keys[0][uparrow]=goup;                  keys[0][downarrow]=godown;
  130. keys[0][ctrl_uparrow]=gouppart;         keys[0][ctrl_downarrow]=godownpart;
  131. keys[0][alt_home]=markbof;              keys[0][alt_end]=markeof;
  132. keys[0][alt_downarrow]=skipsentf;       keys[0][alt_uparrow]=skipsentb;
  133. keys[0][alt_leftarrow]=skipwordb;       keys[0][alt_rightarrow]=skipwordf;
  134. keys[0][alt_del]=killwordf;             keys[0][alt_bksp]=killwordb;
  135. keys[0][alt_insert]=openline;           keys[0][alt_equals]=menu;
  136. keys[0][mbutton]=menu2;                 keys[0][rbutton]=menu2;
  137. keys[0][lbutton]=mouse_mode;            keys[0][ctrl_2]=cbrackets;
  138. keys[0][mbuttond]=_idle;                keys[0][rbuttond]=_idle;
  139. keys[0][lbuttond]=setolddot;            keys[0][mousemove]=mouse_move;
  140. keys[0][alt_sharp]=macromenu;
  141. keys['A'-64]=gotobol;
  142. keys['B'-64]=goleft;
  143. keys['D'-64]=delet;
  144. keys['E'-64]=gotoeol;
  145. keys['F'-64]=goright;
  146. keys['G'-64]=whoa;
  147. keys['H'-64]=backspace;
  148. keys['I'-64]=tabulate;
  149. keys['J'-64]=newline;
  150. keys['K'-64]=kill_to_eol;
  151. keys['L'-64]=refresh_display;
  152. keys['M'-64]=newline;
  153. keys['N'-64]=godown;
  154. keys['O'-64]=openline;
  155. keys['P'-64]=goup;
  156. keys['Q'-64]=literalchar;
  157. keys['R'-64]=findb;
  158. keys['S'-64]=findf;
  159. keys['T'-64]=twiddle;
  160. keys['U'-64]=times4;
  161. keys['V'-64]=page_down;
  162. keys['W'-64]=killregion;
  163. keys['X'-64].subarray(); keys['X'-64][0].subarray();
  164. keys['X'-64]['B'-64]=buffermenu;
  165. keys['X'-64]['D'-64]=cstrchr;
  166. keys['X'-64]['E'-64]=calldos;
  167. keys['X'-64]['F'-64]=openfile;
  168. keys['X'-64]['I'-64]=insertfile;
  169. keys['X'-64]['L'-64]=lwcaseregion;
  170. keys['X'-64]['O'-64]=delblanklines;
  171. keys['X'-64]['Q'-64]=formatinsetregion;
  172. keys['X'-64]['S'-64]=savebuffer;
  173. keys['X'-64]['T'-64]=expandtabs;
  174. keys['X'-64]['U'-64]=upcaseregion;
  175. keys['X'-64]['W'-64]=writebuffer;
  176. keys['X'-64]['X'-64]=swopmark;
  177. keys['X'-64]['Y'-64]=maketabs;
  178. keys['X'-64]['Z'-64]=finish;
  179. keys['X'-64]['(']=beginmacro;
  180. keys['X'-64][')']=endmacro;
  181. keys['X'-64]['=']=showinfo;
  182. keys['X'-64]['1']=onewindow;
  183. keys['X'-64]['2']=splitwindow;
  184. keys['X'-64]['D']=cchrstr;
  185. keys['X'-64]['E']=obey;
  186. keys['X'-64]['F']=setrightmargin;
  187. keys['X'-64]['N']=renamebuffer;
  188. keys['X'-64]['R']=incrfindb;
  189. keys['X'-64]['S']=incrfindf;
  190. keys['X'-64]['X']=gotonbuf;
  191. keys['Y'-64]=yank;
  192. keys['Z'-64]=repeat;
  193. keys[esc].subarray(); keys[esc][0].subarray();
  194. keys[esc][0][alt_K]=bindkeybuf;
  195. keys[esc][0][alt_R]=replword;
  196. keys[esc][0][alt_S]=replwordask;
  197. keys[esc]['/']=leaveonewhite;
  198. keys[esc]['0']=esc0;keys[esc]['1']=esc1;keys[esc]['2']=esc2;keys[esc]['3']=esc3;
  199. keys[esc]['4']=esc4;keys[esc]['5']=esc5;keys[esc]['6']=esc6;keys[esc]['7']=esc7;
  200. keys[esc]['8']=esc8;keys[esc]['9']=esc9;keys[esc]['-']=escminus;
  201. keys[esc]['F'-64]=restorebuf;
  202. keys[esc]['K'-64]=unbindkey;
  203. keys[esc]['N'-64]=namemacro;
  204. keys[esc]['R'-64]=findwordb;
  205. keys[esc]['S'-64]=findwordf;
  206. keys[esc][' ']=setmark; keys[esc]['.']=pushmark; keys[esc][',']=popmark;
  207. keys[esc]['#']=remmark;
  208. keys[esc]['C']=copytext;
  209. keys[esc]['G']=gotocol;
  210. keys[esc]['J']=nofinalcr;
  211. keys[esc]['K']=bindkeymacro;
  212. keys[esc]['M']=movetext;
  213. keys[esc]['N']=nextwindow;
  214. keys[esc]['P']=prevwindow;
  215. keys[esc]['Q']=formatregion;
  216. keys[esc]['T']=twiddlelines;
  217. keys[esc]['X']=displayhex;
  218. keys[esc]['\\']=deletewhite;
  219. keys['_'-64]=help;
  220. Jerry.setup(); Jerry.settrap(0x7f,&event); /* releases & movement */
  221. clearscreen(); T=nargs>=2?arg[1]:".";
  222. n=strlen(T); for(i=0;i<n;i++) if(T[i]=='['?:T[i]==']') {T="."; break;}
  223. /* attrib acts odd if there is a [ or ] in the filename */
  224. if(setjmp(*bad)) {mi=&basemi; thisstep.f=&_idle; goto BEG;}
  225. fullfilename(Fn.s,T); Fn.n=strlen(Fn.s); i=attrib(Fn.s);
  226. if(i==3*256) { /* can't find directory, so give menu of current directory */
  227.     strcpy(CW,"."); fullfilename(Fn.s,CW); Fn.n=strlen(Fn.s); i=attrib(Fn.s);}
  228. if(i&16){findbuf(val("(no file)",9))->go_to();
  229.     window[0]=B; filefromdirmenu(Fn,"file:");}
  230. Macro=new macro(); Macro->name=CMN; basemi.prevstep=&laststep; /* so Macro!=0 */
  231. findbuf(Fn)->go_to(); laststep.f=kf(&_idle);
  232. window[0]=B; Moan="AAEMACS (version of "VERSION"): for help, type ctrl-_";
  233. BEG: set_new_handler(myhandler); if(setjmp(Exit)) goto END;
  234. LOOP: bad=&emacserror; if(!rept) laststep=thisstep;
  235. thisstep.clear(); macdepth=0; refreshscreen();
  236. Jerry.range(2048,2048); oldmy=1024;
  237. oldmx=B->longlines ? linewhere(B->dot)%gp_Cols : B->dot.r->to_tabexp(B->dot.c);
  238. Jerry.move(oldmy,oldmx); if(C!=B) B->olddot=B->dot; C=B; showmoan();
  239. gp_cursor(cursor); basemi.rec=1; T1t.s=T1w; T2t.s=T2w; Fn.s=Filename;
  240. B->dot2=B->dot1; B->dot1=B->dot; rept=0; Obey();
  241. if(!rept) if(basemi.rec) if(record) (*record)+=thisstep.copy(); goto LOOP;
  242. END:;}
  243. /*-----*//* show displays and moans */
  244. void showmoan(){int j=B->lastrow; if(Display)display(Display,Moan?j-1:j,0,Cyan);
  245. Display=0; if(Moan) display(Moan,j,0,Red); Moan=0;}
  246. /*-----*/
  247. void(*cf[3])(int,byte)={&insert_,&overlay_,&nomove_};
  248. subr*cff[3]={&insert,&overlay,&nomove};
  249. /*-----*//* obey keysequence 'c,c2' (-1 == to be read). If D!=0, arg==N */
  250. void Obey(val N/*=val(1,0)*/){int c,j,z=1; val Key; line*L=B->dot.r;
  251. char*C; keyarray *keytable,*kt[33]; prevobtype=obtype; obtype=ob_other;
  252. B->col.Reg=region(mark(0,0),mark(0,0)); c=getkey(); kt[1]=keytable=&keys;
  253. if(B->dotcc>=0) {B->dotcc2=B->dotcc; B->dotcc=-1;} thisstep.N=N;
  254. ARRAY: if(c<0) {keyseqc[z++]=0; keyseqc[z++]=-c; Key=(*keytable)[0][-c];}
  255. else {keyseqc[z++]=c; Key=(*keytable)[c];} keyseqc[0]=z;
  256. switch(Key.n){ /* = type of key binding. N.i==repeat count, usually */
  257. case _unbound: if(c>=32) if(z==2) {cf[B->overlay](int(N.i),c); /* character */
  258. /* auto newline:- */
  259.     if(B->wrap) if(L->to_tabexp(B->dot.c)>=B->rmargin-1) L->split_if_long();
  260.     thisstep.f=kf(cff[B->overlay]); thisstep.T1=char(c); break;}
  261.     C=keyseqc+keyseqc[0]; /* unbound esc letter treated as alt-letter:- */
  262.     if(C[-2]=='['-64) if(C[-3]) if(isalpha(j=to_upper(c))){
  263.     c=-esc_alt[j-'A']; keytable=kt[z-=2]; goto ARRAY;}
  264.     pr(CW,"%k not defined. For help type ctrl-_",&keyseq);basemi.rec=0;MOAN(CW);
  265. case _subr: thisstep.f=Key; Key.f(N,val(),val()); break;
  266. case _macro: thisstep.f=Key; if(N.n) thisstep.N=N; (*Key.m)(N); break;
  267. case _keyarray: pr(CW,"%k typed: more please",&keyseq);
  268.     display(CW,B->lastrow,0,Cyan); c=getkey(); B->redraw_info();
  269.     if(c>0) c=to_upper(c); kt[z]=keytable=Key.k; goto ARRAY;
  270. case _buffer: thisstep.f=kf(&buffer_);
  271.     thisstep.T1=copyof(Key.b->name?:"(no file)");
  272.     (*Key.b)(int(N.i)); break; default: break;} mi=&basemi;}
  273. /*-----*/
  274. int Yesno(char*s) {char c,d; do{ps("%s",s);
  275. c=d=Getchar(); while(d!=LF) d=Getchar();
  276. if(c=='Y'?1:c=='y') return 1; if(c=='N'?1:c=='n') return 0;
  277. ps("(answer 'y' or 'n') ");} while(1);}
  278. /*-----*/
  279. #define _(name,args) {&name,0,#name,args}
  280. #define __(name,Name,args) {&name,0,Name,args}
  281. /* initial _adinf == 'do not evaluate this func call at compile time' */
  282. short AS[]={_adinf,_string,0},
  283. A[]={_adinf,0,0},
  284. III[]={_int,_int,_int,0},
  285. II[]={_int,_int,0},
  286. IK[]={_int,_keyseq,0},
  287. IL[]={_int,_label,0},
  288. IMS[]={_int,_magic,_string,0},
  289. IM[]={_int,_magic,0},
  290. IF[]={_int,666,666,0},
  291. ISK[]={_int,_string,_keyseq,0},
  292. ISS[]={_int,_string,_string,0},
  293. IS[]={_int,_string,0},
  294. I[]={_int,0},
  295. KCA[]={_keyseq,_char,_adinf},
  296. AIS[]={_adinf,_int,_string,0}; /* allowed arg patterns */
  297. Func funcname[]= {
  298. __(_andthen,"%O,",A),
  299. _(currentbuffer,AS),
  300. __(keyseq_,"keyseq",KCA),
  301. _(lastkill,AS),
  302. __(_yesno,"yesno",AIS),
  303. {0,0,0,0}};
  304. Subr subrname[]= {_(_idle,I), _(accentedletters,I), _(alt0,I), _(alt1,I),
  305. _(alt2,I), _(alt3,I), _(alt4,I), _(alt5,I), _(alt6,I), _(alt7,I), _(alt8,I),
  306. _(alt9,I), _(altminus,I), _(backspace,I), _(beginmacro,ISK), _(bindkeybuf,IK),
  307. _(bindkeymacro,IK), _(bindkeysubr,ISK), __(buffer_,"buffer",ISK),
  308. _(buffermenu,I), _(calldos,IS), _(callsubr,IS), _(capitalize,I), _(casemode,I),
  309. _(cbrackets,I), _(cccmode,I), _(cchrstr,I), _(char_from_menu,I), _(checkhelp,I),
  310. _(checkspelling,I), _(copybufmodes,IS), _(copydir,I), _(copykill,I),
  311. _(copytext,I), _(cstrchr,I), _(delblanklines,I), _(delbuf,I),
  312. __(delet,"delete",I), _(deletewhite,I), __(dis_play,"display",IS),
  313. _(displayhex,I), _(emptyappendix,I), _(endmacro,I), _(esc0,I), _(esc1,I),
  314. _(esc2,I), _(esc3,I), _(esc4,I), _(esc5,I), _(esc6,I), _(esc7,I), _(esc8,I),
  315. _(esc9,I), _(escminus,I), _(expandtabs,I), _(finalcr,I), _(findb,IM),
  316. _(findf,IM), _(findwordb,IS), _(findwordf,IS), _(finish,I),
  317. _(formatinsetregion,ISS), _(formatpara,I), _(formatregion,I), _(getappendix,I),
  318. _(godown,I), _(godownpart,I), _(goleft,I), _(goright,I), _(gotobof,I),
  319. _(gotobol,I), _(gotocol,I), _(gotodir,I), _(gotoeof,I), _(gotoeol,I),
  320. _(gotoline,I), _(gotonbuf,I), _(goup,I), _(gouppart,I), __(go_to,"goto",IL),
  321. _(help,IK), __(If,"if",IF), _(incrfindb,I), _(incrfindf,I), _(insert,IS),
  322. _(insertfile,IS), _(insertspaces,I), _(kill_to_eol,I), _(killregion,I),
  323. _(killsent,I), _(killwordb,I), _(killwordf,I), _(leaveonewhite,I),
  324. _(linefeed,I), _(literalchar,I), _(longlinesmode,I), _(lwcaseregion,I),
  325. _(lwcasewords,I), _(macromenu,I), _(maketabs,I), _(markbof,I), _(markeof,I),
  326. _(menu,I), _(mergefile,IS), _(modemenu,I), _(mouse_mode,I), _(mouse_move,I),
  327. _(movetext,I), _(namemacro,ISK), _(newline,I), _(nextwindow,I), _(nofinalcr,I),
  328. _(nomove,IS), _(obey,IK), _(onewindow,I), _(openfile,IS), _(openline,I),
  329. _(overlay,IS), _(overlaymode,I), _(page_down,I), _(page_up,I), _(popmark,I),
  330. _(prbindings,I), _(prbuffers,I), _(prevwindow,I), _(prkeynames,I), _(prkeys,I),
  331. _(prmacro,I), _(prmacros,I), _(prsubrnames,I), _(pushmark,I), _(putappendix,I),
  332. _(readmacros,IS), _(refresh_display,I), _(remmark,I), _(renamebuffer,IS),
  333. _(repeat,I), _(repl,IMS), _(replask,IMS), _(replword,ISS), _(replwordask,ISS),
  334. _(replyank,I), _(restorebuf,I), _(savebuffer,I), _(setmark,I), _(setolddot,I),
  335. _(setrightmargin,I), _(setsortcol,I), _(showinfo,I), _(showregion,I),
  336. _(skipafterwordmode,I), _(skipparab,I), _(skipparaf,I), _(skipsentb,I),
  337. _(skipsentf,I), _(skipwordb,I), _(skipwordf,I), _(sortlines,I),
  338. _(splitwindow,IS), _(swopmark,I), _(tabmode,I), _(tabulate,I), _(times4,I),
  339. _(twiddle,I), _(twiddlelines,I), _(twiddlewords,I), _(twodmode,I),
  340. _(unbindkey,IK), _(upcaseregion,I), _(upcasewords,I), _(version,I), _(whoa,I),
  341. _(wrapmode,I), _(writebuffer,IS), _(yank,I), {0,0,0,0}};
  342. #undef _
  343.