mirror of
https://github.com/rfivet/uemacs.git
synced 2024-12-17 23:06:25 -05:00
Use binary search for name to function lookup. Fix name mapping table order. Rework test scripts.
This commit is contained in:
parent
6f7d89b1ac
commit
521d96fbda
@ -67,3 +67,4 @@ set %D 0 # looking EAST
|
||||
beginning-of-file
|
||||
set $curline 3
|
||||
set $curcol 1
|
||||
unmark-buffer
|
||||
|
2
eval.c
2
eval.c
@ -35,8 +35,6 @@
|
||||
|
||||
#define MAXVARS 255
|
||||
|
||||
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
|
||||
|
||||
/* Macro argument token types */
|
||||
|
||||
#define TKNUL 0 /* end-of-string */
|
||||
|
@ -61,3 +61,8 @@ set %NC &asc "█"
|
||||
!endwhile
|
||||
set $curline 3
|
||||
set $curcol 1
|
||||
select-buffer stack
|
||||
unmark-buffer
|
||||
select-buffer %thisbuf
|
||||
unmark-buffer
|
||||
delete-buffer stack
|
||||
|
18
input.c
18
input.c
@ -157,24 +157,6 @@ int ectoc( int c) {
|
||||
return c ;
|
||||
}
|
||||
|
||||
/*
|
||||
* match fname to a function in the names table
|
||||
* and return any match or NULL if none
|
||||
*
|
||||
* char *fname; name to attempt to match
|
||||
*/
|
||||
const name_bind *fncmatch( char *fname) {
|
||||
const name_bind *ffp ; /* pointer to entry in name binding table */
|
||||
|
||||
/* scan through the table, returning any match */
|
||||
for( ffp = names ; ffp->n_func != NULL ; ffp++)
|
||||
if( strcmp( fname, bind_name( ffp)) == 0)
|
||||
break ;
|
||||
|
||||
return ffp ;
|
||||
}
|
||||
|
||||
|
||||
const name_bind *getfncnb( fnp_t func) {
|
||||
const name_bind *nptr ; /* pointer into the name binding table */
|
||||
|
||||
|
1
input.h
1
input.h
@ -29,7 +29,6 @@ int newmlargt( char **outbufref, const char *prompt, int size) ;
|
||||
int ectoc( int c) ;
|
||||
|
||||
/* Look up in names to function association table */
|
||||
const name_bind *fncmatch( char *name) ; /* by name */
|
||||
const name_bind *getname( void) ; /* interactively */
|
||||
const name_bind *getfncnb( fnp_t func) ; /* by function */
|
||||
|
||||
|
51
names.c
51
names.c
@ -8,6 +8,8 @@
|
||||
* processing.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "basic.h"
|
||||
#include "bind.h"
|
||||
#include "bindable.h"
|
||||
@ -22,13 +24,14 @@
|
||||
#include "random.h"
|
||||
#include "search.h"
|
||||
#include "spawn.h"
|
||||
#include "util.h"
|
||||
#include "window.h"
|
||||
#include "word.h"
|
||||
|
||||
const name_bind names[] = {
|
||||
{" abort-command", ctrlg} ,
|
||||
{" add-mode", setemode} ,
|
||||
{" add-global-mode", setgmode} ,
|
||||
{" add-mode", setemode} ,
|
||||
#if APROP
|
||||
{" apropos", apro} ,
|
||||
#endif
|
||||
@ -55,8 +58,8 @@ const name_bind names[] = {
|
||||
{" ctlx-prefix", cex} ,
|
||||
{"!delete-blank-lines", deblank} ,
|
||||
{" delete-buffer", killbuffer} ,
|
||||
{" delete-mode", delmode} ,
|
||||
{" delete-global-mode", delgmode} ,
|
||||
{" delete-mode", delmode} ,
|
||||
{"!delete-next-character", forwdel} ,
|
||||
{"!delete-next-word", delfword} ,
|
||||
{" delete-other-windows", onlywind} ,
|
||||
@ -80,14 +83,6 @@ const name_bind names[] = {
|
||||
{" execute-file", execfile} ,
|
||||
{" execute-macro", ctlxe} ,
|
||||
{" execute-macro-1", cbuf1} ,
|
||||
{" execute-macro-2", cbuf2} ,
|
||||
{" execute-macro-3", cbuf3} ,
|
||||
{" execute-macro-4", cbuf4} ,
|
||||
{" execute-macro-5", cbuf5} ,
|
||||
{" execute-macro-6", cbuf6} ,
|
||||
{" execute-macro-7", cbuf7} ,
|
||||
{" execute-macro-8", cbuf8} ,
|
||||
{" execute-macro-9", cbuf9} ,
|
||||
{" execute-macro-10", cbuf10} ,
|
||||
{" execute-macro-11", cbuf11} ,
|
||||
{" execute-macro-12", cbuf12} ,
|
||||
@ -98,6 +93,7 @@ const name_bind names[] = {
|
||||
{" execute-macro-17", cbuf17} ,
|
||||
{" execute-macro-18", cbuf18} ,
|
||||
{" execute-macro-19", cbuf19} ,
|
||||
{" execute-macro-2", cbuf2} ,
|
||||
{" execute-macro-20", cbuf20} ,
|
||||
{" execute-macro-21", cbuf21} ,
|
||||
{" execute-macro-22", cbuf22} ,
|
||||
@ -108,6 +104,7 @@ const name_bind names[] = {
|
||||
{" execute-macro-27", cbuf27} ,
|
||||
{" execute-macro-28", cbuf28} ,
|
||||
{" execute-macro-29", cbuf29} ,
|
||||
{" execute-macro-3", cbuf3} ,
|
||||
{" execute-macro-30", cbuf30} ,
|
||||
{" execute-macro-31", cbuf31} ,
|
||||
{" execute-macro-32", cbuf32} ,
|
||||
@ -118,7 +115,13 @@ const name_bind names[] = {
|
||||
{" execute-macro-37", cbuf37} ,
|
||||
{" execute-macro-38", cbuf38} ,
|
||||
{" execute-macro-39", cbuf39} ,
|
||||
{" execute-macro-4", cbuf4} ,
|
||||
{" execute-macro-40", cbuf40} ,
|
||||
{" execute-macro-5", cbuf5} ,
|
||||
{" execute-macro-6", cbuf6} ,
|
||||
{" execute-macro-7", cbuf7} ,
|
||||
{" execute-macro-8", cbuf8} ,
|
||||
{" execute-macro-9", cbuf9} ,
|
||||
{" execute-named-command", namedcmd} ,
|
||||
#if PROC
|
||||
{" execute-procedure", execproc} ,
|
||||
@ -137,9 +140,9 @@ const name_bind names[] = {
|
||||
#endif
|
||||
{" grow-window", enlargewind} ,
|
||||
{"!handle-tab", insert_tab} ,
|
||||
{" hunt-forward", forwhunt} ,
|
||||
{" hunt-backward", backhunt} ,
|
||||
{" help", help} ,
|
||||
{" hunt-backward", backhunt} ,
|
||||
{" hunt-forward", forwhunt} ,
|
||||
{" i-shell", spawncli} ,
|
||||
#if ISRCH
|
||||
{" incremental-search", fisearch} ,
|
||||
@ -186,9 +189,9 @@ const name_bind names[] = {
|
||||
{"!quote-character", quote} ,
|
||||
{"!read-file", fileread} ,
|
||||
{" redraw-display", reposition} ,
|
||||
{"!replace-string", sreplace} ,
|
||||
{" resize-window", resize} ,
|
||||
{" restore-window", restwnd} ,
|
||||
{"!replace-string", sreplace} ,
|
||||
#if ISRCH
|
||||
{" reverse-incremental-search", risearch} ,
|
||||
#endif
|
||||
@ -197,8 +200,8 @@ const name_bind names[] = {
|
||||
#endif
|
||||
{"!save-file", filesave} ,
|
||||
{" save-window", savewnd} ,
|
||||
{" scroll-next-up", scrnextup} ,
|
||||
{" scroll-next-down", scrnextdw} ,
|
||||
{" scroll-next-up", scrnextup} ,
|
||||
{" search-forward", forwsearch} ,
|
||||
{" search-reverse", backsearch} ,
|
||||
{" select-buffer", usebuffer} ,
|
||||
@ -232,4 +235,24 @@ const name_bind names[] = {
|
||||
{" ", NULL}
|
||||
};
|
||||
|
||||
|
||||
const name_bind *fncmatch( char *name) {
|
||||
int found = ARRAY_SIZE( names) - 1 ; /* index of last entry/ catch all */
|
||||
int low = 0 ;
|
||||
int high = found - 1 ;
|
||||
do {
|
||||
int cur = (high + low) / 2 ;
|
||||
int s = strcmp( name, bind_name( &names[ cur])) ;
|
||||
if( s < 0)
|
||||
high = cur - 1 ;
|
||||
else if( s == 0) {
|
||||
found = cur ;
|
||||
break ;
|
||||
} else
|
||||
low = cur + 1 ;
|
||||
} while( low <= high) ;
|
||||
|
||||
return &names[ found] ;
|
||||
}
|
||||
|
||||
/* end of names.c */
|
||||
|
Loading…
Reference in New Issue
Block a user