Beispiel #1
0
void bind_key(int argc, char **argv){
    if(argc < 3) return;
    if(argv[1][0] == '^'){
        if(argv[1][1] != '\0')
            add_binding(GDK_CONTROL_MASK, argv[1][1], argc-2, argv+2);
    }
    else if(argv[1][0] != '\0')
        add_binding(0, argv[1][0], argc-2, argv+2);
}
int main (void) {
        state_t vec1, vec2, vec3;
        binding_t b;
        int i;
       
        srand(time(NULL));
        fprintf(stdout, "--- Debut\n");
       
        /* Creation du vecteur */
        vec1 = create_state();
        vec2 = create_state();
        vec3 = create_state();
       
        /* Remplissage */
        for (i=0; i<15; i++) {
                b.id = i;
                b.place = (int) rand() % 40;
                add_binding(&vec1, b);
                add_binding(&vec3, b);
        }
       
        /* Remplissage */
        for (i=0; i<15; i++) {
                b.id = i;
                b.place = (int) rand() % 40;
                add_binding(&vec2, b);
        }
       
        print_state(vec1);
        print_state(vec2);

        /* Suppression */
        for (i=0; i<10; i++) {
                int r = (int) rand() % 15;
                fprintf(stdout,"Suppression du %d\n",r);
                erase_binding(&vec1, find_binding(vec1,r));
                erase_binding(&vec3, find_binding(vec3,r));
        }

        /* Suppression */
        for (i=0; i<10; i++) {
                int r = (int) rand() % 15;
                fprintf(stdout,"Suppression du %d\n",r);
                erase_binding(&vec2, find_binding(vec2,r));
        }

        print_state(vec1);
        print_state(vec2);
       
        /* Comparaison */
        if (compare_states(&vec1, &vec2)) { fprintf(stdout, "VEC1 = VEC2\n"); } else { fprintf(stdout, "VEC1 != VEC2\n"); }
        if (compare_states(&vec1, &vec3)) { fprintf(stdout, "VEC1 = VEC3\n"); } else { fprintf(stdout, "VEC1 != VEC3\n"); }

        return 1;
}
Beispiel #3
0
int
VControl_AddJoyHatBinding (int port, int which, Uint8 dir, int *target)
{
#ifdef HAVE_JOYSTICK
	if (port >= 0 && port < joycount)
	{
		joystick *j = &joysticks[port];
		if (!(j->stick))
			create_joystick (port);
		if ((which >= 0) && (which < j->numhats))
		{
			if (dir == SDL_HAT_LEFT)
			{
				add_binding(&joysticks[port].hats[which].left, target);
			}
			else if (dir == SDL_HAT_RIGHT)
			{
				add_binding(&joysticks[port].hats[which].right, target);
			}
			else if (dir == SDL_HAT_UP)
			{
				add_binding(&joysticks[port].hats[which].up, target);
			}
			else if (dir == SDL_HAT_DOWN)
			{
				add_binding(&joysticks[port].hats[which].down, target);
			}
			else
			{
				// log_add (log_Debug, "VControl: Attempted to bind to illegal direction");
				return -1;
			}
			return 0;
		}
		else
		{
			// log_add (log_Debug, "VControl: Attempted to bind to illegal hat %d", which);
			return -1;
		}
	}
	else
#else
	(void) port;
	(void) which;
	(void) dir;
	(void) target;
#endif /* HAVE_JOYSTICK */
	{
		// log_add (log_Debug, "VControl: Attempted to bind to illegal port %d", port);
		return -1;
	}
}
Beispiel #4
0
int
VControl_AddJoyButtonBinding (int port, int button, int *target)
{
#ifdef HAVE_JOYSTICK
	if (port >= 0 && port < joycount)
	{
		joystick *j = &joysticks[port];
		if (!(j->stick))
			create_joystick (port);
		if ((button >= 0) && (button < j->numbuttons))
		{
			add_binding(&joysticks[port].buttons[button], target);
			return 0;
		}
		else
		{
			// log_add (log_Debug, "VControl: Attempted to bind to illegal button %d", button);
			return -1;
		}
	}
	else
#else
	(void) port;
	(void) button;
	(void) target;
#endif /* HAVE_JOYSTICK */
	{
		// log_add (log_Debug, "VControl: Attempted to bind to illegal port %d", port);
		return -1;
	}
}
Beispiel #5
0
void
test_keycmd (void) {
    add_binding("insert", "set insert_mode = 1");
    add_binding("command", "set insert_mode = 0");

    /* the 'keycmd' command */
    parse_command("keycmd", "insert", NULL);

    g_assert_cmpint(1, ==, reuzbl.behave.insert_mode);
    g_assert_cmpstr("", ==, reuzbl.state.keycmd);

    /* setting the keycmd variable directly, equivalent to the 'keycmd' comand */
    set_var_value("keycmd", "command");

    g_assert_cmpint(0, ==, reuzbl.behave.insert_mode);
    g_assert_cmpstr("", ==, reuzbl.state.keycmd);
}
Beispiel #6
0
void mode_tempbinding(int newmode, int newvalue)
{
   short saveval;
   XPoint cpos;
   Widget window = areawin->viewport;

   if (boundfunction(window, BUTTON1, &saveval) == button1mode) {
      remove_binding(window, BUTTON1, button1mode);
      add_binding(window, BUTTON1, newmode, (short)newvalue);
      cpos = UGetCursor();
      eventdispatch(BUTTON1, (int)cpos.x, (int)cpos.y);
      remove_binding(window, BUTTON1, newmode);
      add_binding(window, BUTTON1, button1mode, saveval);
   }
   else
      fprintf(stderr, "Error: No such button1 binding %s\n",
                func_to_string(button1mode).toLocal8Bit().data());
}
Beispiel #7
0
void mode_rebinding(int newmode, int newvalue)
{
   Widget window = areawin->viewport;

   remove_binding(window, BUTTON1, button1mode);
   add_binding(window, BUTTON1, newmode, (short)newvalue);
   button1mode = newmode;
   toolcursor(newmode);
}
Beispiel #8
0
int
VControl_AddJoyAxisBinding (int port, int axis, int polarity, int *target)
{
#ifdef HAVE_JOYSTICK
	if (port >= 0 && port < joycount)
	{
		joystick *j = &joysticks[port];
		if (!(j->stick))
			create_joystick (port);
		if ((axis >= 0) && (axis < j->numaxes))
		{
			if (polarity < 0)
			{
				add_binding(&joysticks[port].axes[axis].neg, target);
			}
			else if (polarity > 0)
			{
				add_binding(&joysticks[port].axes[axis].pos, target);
			}
			else
			{
				log_add (log_Debug, "VControl: Attempted to bind to polarity zero");
				return -1;
			}
		}
		else
		{
			// log_add (log_Debug, "VControl: Attempted to bind to illegal axis %d", axis);
			return -1;
		}
	}
	else
#else
	(void) port;
	(void) axis;
	(void) polarity;
	(void) target;
#endif /* HAVE_JOYSTICK */
	{
		// log_add (log_Debug, "VControl: Attempted to bind to illegal port %d", port);
		return -1;
	}
	return 0;
}
Beispiel #9
0
int
VControl_AddKeyBinding (SDLKey symbol, int *target)
{
	if ((symbol < 0) || (symbol >= num_sdl_keys)) {
		log_add (log_Warning, "VControl: Illegal key index %d", symbol);
		return -1;
	}
	add_binding(&bindings[symbol], target);
	return 0;
}
Beispiel #10
0
int add_keybinding(Widget window, const char *keystring, const char *fstring)
{
   short value = -1;
   int function = string_to_func(fstring, &value);
   int keywstate = string_to_key(keystring);

   if (function < 0)
      return -1;
   else
      return add_binding(window, keywstate, function, value);
}
Beispiel #11
0
void generic_bcache::update_binding(in_addr_t hoa, in_addr_t ha, in_addr_t coa, __u16 lifetime)
{
  if (lifetime == 0) {
    remove_binding(hoa, ha, coa);
    return;
  }

  binding *b = add_binding(hoa, ha, coa);
  b->hoa = hoa;
  b->ha = ha;
  b->coa = coa;
  if (lifetime == 0xffff)
    b->timeout = 0;
  else
    b->timeout = time(NULL) + ntohs(lifetime);
}
Beispiel #12
0
Datei: menu.c Projekt: Cougar/pwm
void init_menus()
{
	WFuncBinder binder={&dummy_func, 0, ARGTYPE_NONE};

	add_binding(ACT_BUTTONPRESS, ACTX_MENU, 0, AnyButton, &binder);
	add_binding(ACT_BUTTONMOTION, ACTX_MENU, 0, AnyButton, &binder);
	add_binding(ACT_BUTTONCLICK, ACTX_MENU, 0, AnyButton, &binder);
	
	binder.func=lookup_func("menu_raisekeep", ARGTYPE_NONE);
	add_binding(ACT_BUTTONPRESS, ACTX_MENUTITLE, 0, AnyButton, &binder);
	binder.func=lookup_func("menu_close", ARGTYPE_NONE);
	add_binding(ACT_BUTTONDBLCLICK, ACTX_MENUTITLE, 0, AnyButton, &binder);
	binder.func=lookup_func("move", ARGTYPE_NONE);
	add_binding(ACT_BUTTONMOTION, ACTX_MENUTITLE, 0, AnyButton, &binder);
}
Beispiel #13
0
static void
settings_init () {
    GKeyFile* config;
    gboolean res  = FALSE;
    char *saveptr;
    gchar** keys = NULL;

    if (!config_file) {
        const char* XDG_CONFIG_HOME = getenv ("XDG_CONFIG_HOME");
        if (! XDG_CONFIG_HOME || ! strcmp (XDG_CONFIG_HOME, "")) {
          XDG_CONFIG_HOME = (char*)XDG_CONFIG_HOME_default;
        }
        printf("XDG_CONFIG_HOME: %s\n", XDG_CONFIG_HOME);
    
        strcpy (config_file_path, XDG_CONFIG_HOME);
        strcat (config_file_path, "/uzbl/config");
        if (file_exists (config_file_path)) {
          printf ("Config file %s found.\n", config_file_path);
          config_file = &config_file_path[0];
        } else {
            // Now we check $XDG_CONFIG_DIRS
            char *XDG_CONFIG_DIRS = getenv ("XDG_CONFIG_DIRS");
            if (! XDG_CONFIG_DIRS || ! strcmp (XDG_CONFIG_DIRS, ""))
                XDG_CONFIG_DIRS = XDG_CONFIG_DIRS_default;

            printf("XDG_CONFIG_DIRS: %s\n", XDG_CONFIG_DIRS);

            char buffer[512];
            strcpy (buffer, XDG_CONFIG_DIRS);
            const gchar* dir = (char *) strtok_r (buffer, ":", &saveptr);
            while (dir && ! file_exists (config_file_path)) {
                strcpy (config_file_path, dir);
                strcat (config_file_path, "/uzbl/config_file_pathig");
                if (file_exists (config_file_path)) {
                    printf ("Config file %s found.\n", config_file_path);
                    config_file = &config_file_path[0];
                }
                dir = (char * ) strtok_r (NULL, ":", &saveptr);
            }
        }
    }

    if (config_file) {
        config = g_key_file_new ();
        res = g_key_file_load_from_file (config, config_file, G_KEY_FILE_NONE, NULL);
          if (res) {
            printf ("Config %s loaded\n", config_file);
          } else {
            fprintf (stderr, "Config %s loading failed\n", config_file);
        }
    } else {
        printf ("No configuration.\n");
    }

    if (res) {
        history_handler    = g_key_file_get_value   (config, "behavior", "history_handler",    NULL);
        download_handler   = g_key_file_get_value   (config, "behavior", "download_handler",   NULL);
        always_insert_mode = g_key_file_get_boolean (config, "behavior", "always_insert_mode", NULL);
        show_status        = g_key_file_get_boolean (config, "behavior", "show_status",        NULL);
        modkey             = g_key_file_get_value   (config, "behavior", "modkey",             NULL);
        status_top         = g_key_file_get_boolean (config, "behavior", "status_top",         NULL);
        if (! fifo_dir)
            fifo_dir        = g_key_file_get_value  (config, "behavior", "fifo_dir",           NULL);
        if (! socket_dir)
            socket_dir     = g_key_file_get_value   (config, "behavior", "socket_dir",         NULL);
        keys               = g_key_file_get_keys    (config, "bindings", NULL,                 NULL);
    }

    printf ("History handler: %s\n",    (history_handler    ? history_handler  : "disabled"));
    printf ("Download manager: %s\n",   (download_handler   ? download_handler : "disabled"));
    printf ("Fifo directory: %s\n",     (fifo_dir           ? fifo_dir         : "disabled"));
    printf ("Socket directory: %s\n",   (socket_dir         ? socket_dir       : "disabled"));
    printf ("Always insert mode: %s\n", (always_insert_mode ? "TRUE"           : "FALSE"));
    printf ("Show status: %s\n",        (show_status        ? "TRUE"           : "FALSE"));
    printf ("Status top: %s\n",         (status_top         ? "TRUE"           : "FALSE"));
    printf ("Modkey: %s\n",             (modkey             ? modkey           : "disabled"));

    if (! modkey)
        modkey = "";

    //POSSIBLE MODKEY VALUES (COMBINATIONS CAN BE USED)
    gchar* modkeyup = g_utf8_strup (modkey, -1);
    if (g_strrstr (modkeyup,"SHIFT") != NULL)    modmask |= GDK_SHIFT_MASK;    //the Shift key.
    if (g_strrstr (modkeyup,"LOCK") != NULL)     modmask |= GDK_LOCK_MASK;     //a Lock key (depending on the modifier mapping of the X server this may either be CapsLock or ShiftLock).
    if (g_strrstr (modkeyup,"CONTROL") != NULL)  modmask |= GDK_CONTROL_MASK;  //the Control key.
    if (g_strrstr (modkeyup,"MOD1") != NULL)     modmask |= GDK_MOD1_MASK;     //the fourth modifier key (it depends on the modifier mapping of the X server which key is interpreted as this modifier, but normally it is the Alt key).
    if (g_strrstr (modkeyup,"MOD2") != NULL)     modmask |= GDK_MOD2_MASK;     //the fifth modifier key (it depends on the modifier mapping of the X server which key is interpreted as this modifier).
    if (g_strrstr (modkeyup,"MOD3") != NULL)     modmask |= GDK_MOD3_MASK;     //the sixth modifier key (it depends on the modifier mapping of the X server which key is interpreted as this modifier).
    if (g_strrstr (modkeyup,"MOD4") != NULL)     modmask |= GDK_MOD4_MASK;     //the seventh modifier key (it depends on the modifier mapping of the X server which key is interpreted as this modifier).
    if (g_strrstr (modkeyup,"MOD5") != NULL)     modmask |= GDK_MOD5_MASK;     //the eighth modifier key (it depends on the modifier mapping of the X server which key is interpreted as this modifier).
    if (g_strrstr (modkeyup,"BUTTON1") != NULL)  modmask |= GDK_BUTTON1_MASK;  //the first mouse button.
    if (g_strrstr (modkeyup,"BUTTON2") != NULL)  modmask |= GDK_BUTTON2_MASK;  //the second mouse button.
    if (g_strrstr (modkeyup,"BUTTON3") != NULL)  modmask |= GDK_BUTTON3_MASK;  //the third mouse button.
    if (g_strrstr (modkeyup,"BUTTON4") != NULL)  modmask |= GDK_BUTTON4_MASK;  //the fourth mouse button.
    if (g_strrstr (modkeyup,"BUTTON5") != NULL)  modmask |= GDK_BUTTON5_MASK;  //the fifth mouse button.
    if (g_strrstr (modkeyup,"SUPER") != NULL)    modmask |= GDK_SUPER_MASK;    //the Super modifier. Since 2.10
    if (g_strrstr (modkeyup,"HYPER") != NULL)    modmask |= GDK_HYPER_MASK;    //the Hyper modifier. Since 2.10
    if (g_strrstr (modkeyup,"META") != NULL)     modmask |= GDK_META_MASK;     //the Meta modifier. Since 2.10  */
    free (modkeyup);

    if (keys) {
        int i;
        for (i = 0; keys[i]; i++) {
            gchar *value = g_key_file_get_string (config, "bindings", keys[i], NULL);
            
            add_binding(g_strstrip(keys[i]), value);
            g_free(value);
        }

        g_strfreev(keys);
    }

    /* networking options */
    if (res) {
        proxy_url      = g_key_file_get_value   (config, "network", "proxy_server",       NULL);
        http_debug     = g_key_file_get_integer (config, "network", "http_debug",         NULL);
        useragent      = g_key_file_get_value   (config, "network", "user-agent",         NULL);
        max_conns      = g_key_file_get_integer (config, "network", "max_conns",          NULL);
        max_conns_host = g_key_file_get_integer (config, "network", "max_conns_per_host", NULL);
    }

    if(proxy_url){
        g_object_set(G_OBJECT(soup_session), SOUP_SESSION_PROXY_URI, soup_uri_new(proxy_url), NULL);
    }
	
    if(!(http_debug <= 3)){
        http_debug = 0;
        fprintf(stderr, "Wrong http_debug level, ignoring.\n");
    } else if (http_debug > 0) {
        soup_logger = soup_logger_new(http_debug, -1);
        soup_session_add_feature(soup_session, SOUP_SESSION_FEATURE(soup_logger));
    }
	
    if(useragent){
        char* newagent  = malloc(1024);

        strcpy(newagent, str_replace("%webkit-major%", itos(WEBKIT_MAJOR_VERSION), useragent));
        strcpy(newagent, str_replace("%webkit-minor%", itos(WEBKIT_MINOR_VERSION), newagent));
        strcpy(newagent, str_replace("%webkit-micro%", itos(WEBKIT_MICRO_VERSION), newagent));

        if (uname (&unameinfo) == -1) {
            printf("Error getting uname info. Not replacing system-related user agent variables.\n");
        } else {
            strcpy(newagent, str_replace("%sysname%",     unameinfo.sysname, newagent));
            strcpy(newagent, str_replace("%nodename%",    unameinfo.nodename, newagent));
            strcpy(newagent, str_replace("%kernrel%",     unameinfo.release, newagent));
            strcpy(newagent, str_replace("%kernver%",     unameinfo.version, newagent));
            strcpy(newagent, str_replace("%arch-system%", unameinfo.machine, newagent));

            #ifdef _GNU_SOURCE
                strcpy(newagent, str_replace("%domainname%", unameinfo.domainname, newagent));
            #endif
        }

        strcpy(newagent, str_replace("%arch-uzbl%",    ARCH,                       newagent));
        strcpy(newagent, str_replace("%commit%",       COMMIT,                     newagent));

        useragent = malloc(1024);
        strcpy(useragent, newagent);
        g_object_set(G_OBJECT(soup_session), SOUP_SESSION_USER_AGENT, useragent, NULL);
    }

    if(max_conns >= 1){
        g_object_set(G_OBJECT(soup_session), SOUP_SESSION_MAX_CONNS, max_conns, NULL);
    }

    if(max_conns_host >= 1){
        g_object_set(G_OBJECT(soup_session), SOUP_SESSION_MAX_CONNS_PER_HOST, max_conns_host, NULL);
    }

    printf("Proxy configured: %s\n", proxy_url ? proxy_url : "none");
    printf("HTTP logging level: %d\n", http_debug);
    printf("User-agent: %s\n", useragent? useragent : "default");
    printf("Maximum connections: %d\n", max_conns ? max_conns : 0);
    printf("Maximum connections per host: %d\n", max_conns_host ? max_conns_host: 0);

    //Cookies
    cookie_text_file = g_key_file_get_value (config, "behavior", "cookie_text_file",   NULL);
    if (cookie_text_file) {
        printf("Cookie text file location: %s\n", cookie_text_file);        
        soup_cookie = soup_cookie_jar_text_new (cookie_text_file, FALSE);
        soup_session_add_feature(soup_session, SOUP_SESSION_FEATURE(soup_cookie));
    }
}
Beispiel #14
0
static Lexeme * evaluate_binding(Lexeme * tree, Lexeme * env) {
    Lexeme * n = get_binding_name(tree);
    Lexeme * v = evaluate(get_binding_value(tree), env);
    add_binding(env, n, v);
    return v;
}
Beispiel #15
0
void default_keybindings()
{
   add_binding(ALL_WINDOWS, '1', XCF_Page, 1);
   add_binding(ALL_WINDOWS, '2', XCF_Page, 2);
   add_binding(ALL_WINDOWS, '3', XCF_Page, 3);
   add_binding(ALL_WINDOWS, '4', XCF_Page, 4);
   add_binding(ALL_WINDOWS, '5', XCF_Page, 5);
   add_binding(ALL_WINDOWS, '6', XCF_Page, 6);
   add_binding(ALL_WINDOWS, '7', XCF_Page, 7);
   add_binding(ALL_WINDOWS, '8', XCF_Page, 8);
   add_binding(ALL_WINDOWS, '9', XCF_Page, 9);
   add_binding(ALL_WINDOWS, '0', XCF_Page, 10);

   add_binding(ALL_WINDOWS, SHIFT | XK_KP_1, XCF_Justify, 0);
   add_binding(ALL_WINDOWS, SHIFT | XK_KP_2, XCF_Justify, 1);
   add_binding(ALL_WINDOWS, SHIFT | XK_KP_3, XCF_Justify, 2);
   add_binding(ALL_WINDOWS, SHIFT | XK_KP_4, XCF_Justify, 3);
   add_binding(ALL_WINDOWS, SHIFT | XK_KP_5, XCF_Justify, 4);
   add_binding(ALL_WINDOWS, SHIFT | XK_KP_6, XCF_Justify, 5);
   add_binding(ALL_WINDOWS, SHIFT | XK_KP_7, XCF_Justify, 6);
   add_binding(ALL_WINDOWS, SHIFT | XK_KP_8, XCF_Justify, 7);
   add_binding(ALL_WINDOWS, SHIFT | XK_KP_9, XCF_Justify, 8);

   add_binding(ALL_WINDOWS, XK_KP_End, XCF_Justify, 0);
   add_binding(ALL_WINDOWS, XK_KP_Down, XCF_Justify, 1);
   add_binding(ALL_WINDOWS, XK_KP_Next, XCF_Justify, 2);
   add_binding(ALL_WINDOWS, XK_KP_Left, XCF_Justify, 3);
   add_binding(ALL_WINDOWS, XK_KP_Begin, XCF_Justify, 4);
   add_binding(ALL_WINDOWS, XK_KP_Right, XCF_Justify, 5);
   add_binding(ALL_WINDOWS, XK_KP_Home, XCF_Justify, 6);
   add_binding(ALL_WINDOWS, XK_KP_Up, XCF_Justify, 7);
   add_binding(ALL_WINDOWS, XK_KP_Prior, XCF_Justify, 8);

   add_binding(ALL_WINDOWS, XK_Delete, XCF_Text_Delete);
   add_binding(ALL_WINDOWS, XK_Return, XCF_Text_Return);
   add_binding(ALL_WINDOWS, BUTTON1, XCF_Text_Return);
   add_binding(ALL_WINDOWS, XK_BackSpace, XCF_Text_Delete);
   add_binding(ALL_WINDOWS, XK_Left, XCF_Text_Left);
   add_binding(ALL_WINDOWS, XK_Right, XCF_Text_Right);
   add_binding(ALL_WINDOWS, XK_Up, XCF_Text_Up);
   add_binding(ALL_WINDOWS, XK_Down, XCF_Text_Down);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_X, XCF_Text_Split);
   add_binding(ALL_WINDOWS, XK_Home, XCF_Text_Home);
   add_binding(ALL_WINDOWS, XK_End, XCF_Text_End);
   add_binding(ALL_WINDOWS, XK_Tab, XCF_TabForward);
   add_binding(ALL_WINDOWS, SHIFT | XK_Tab, XCF_TabBackward);
#ifdef XK_ISO_Left_Tab
   add_binding(ALL_WINDOWS, SHIFT | XK_ISO_Left_Tab, XCF_TabBackward);
#endif
   add_binding(ALL_WINDOWS, ALT | XK_Tab, XCF_TabStop);
   add_binding(ALL_WINDOWS, XK_KP_Add, XCF_Superscript);
   add_binding(ALL_WINDOWS, XK_KP_Subtract, XCF_Subscript);
   add_binding(ALL_WINDOWS, XK_KP_Enter, XCF_Normalscript);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_F, XCF_Font, 1000);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_B, XCF_Boldfont);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_I, XCF_Italicfont);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_N, XCF_Normalfont);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_U, XCF_Underline);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_O, XCF_Overline);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_E, XCF_ISO_Encoding);
   add_binding(ALL_WINDOWS, ALT | XK_Return, XCF_Linebreak);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_H, XCF_Halfspace);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_Q, XCF_Quarterspace);
#ifndef TCL_WRAPPER
   add_binding(ALL_WINDOWS, ALT | Qt::Key_P, XCF_Parameter);
#endif
   add_binding(ALL_WINDOWS, '\\', XCF_Special);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_C, XCF_Special);
   add_binding(ALL_WINDOWS, 'p', XCF_Edit_Param);
   add_binding(ALL_WINDOWS, 'd', XCF_Edit_Delete);
   add_binding(ALL_WINDOWS, XK_Delete, XCF_Edit_Delete);
   add_binding(ALL_WINDOWS, 'i', XCF_Edit_Insert);
   add_binding(ALL_WINDOWS, XK_Insert, XCF_Edit_Insert);
   add_binding(ALL_WINDOWS, 'e', XCF_Edit_Next);
   add_binding(ALL_WINDOWS, BUTTON1, XCF_Edit_Next);
   add_binding(ALL_WINDOWS, 'A', XCF_Attach);
   add_binding(ALL_WINDOWS, 'V', XCF_Virtual);
   add_binding(ALL_WINDOWS, 'l', XCF_Next_Library);
   add_binding(ALL_WINDOWS, 'L', XCF_Library_Directory);
   add_binding(ALL_WINDOWS, 'c', XCF_Library_Copy);
   add_binding(ALL_WINDOWS, 'E', XCF_Library_Edit);
   add_binding(ALL_WINDOWS, 'e', XCF_Library_Edit);
   add_binding(ALL_WINDOWS, 'D', XCF_Library_Delete);
   add_binding(ALL_WINDOWS, 'C', XCF_Library_Duplicate);
   add_binding(ALL_WINDOWS, 'H', XCF_Library_Hide);
   add_binding(ALL_WINDOWS, 'V', XCF_Library_Virtual);
   add_binding(ALL_WINDOWS, 'M', XCF_Library_Move);
   add_binding(ALL_WINDOWS, 'm', XCF_Library_Move);
   add_binding(ALL_WINDOWS, 'p', XCF_Page_Directory);
   add_binding(ALL_WINDOWS, '<', XCF_Library_Pop);
   add_binding(ALL_WINDOWS, HOLD | BUTTON1, XCF_Library_Pop);
   add_binding(ALL_WINDOWS, 'h', XCF_Help);
   add_binding(ALL_WINDOWS, '?', XCF_Help);
   add_binding(ALL_WINDOWS, ' ', XCF_Redraw);
   add_binding(ALL_WINDOWS, XK_Redo, XCF_Redraw);
   add_binding(ALL_WINDOWS, XK_Undo, XCF_Redraw);
   add_binding(ALL_WINDOWS, XK_Home, XCF_View);
   add_binding(ALL_WINDOWS, 'v', XCF_View);
   add_binding(ALL_WINDOWS, 'Z', XCF_Zoom_In);
   add_binding(ALL_WINDOWS, 'z', XCF_Zoom_Out);
   add_binding(ALL_WINDOWS, 'p', XCF_Pan, 0);
   add_binding(ALL_WINDOWS, '+', XCF_Double_Snap);
   add_binding(ALL_WINDOWS, '-', XCF_Halve_Snap);
   /// \todo handled by the scroll area, we should pass those on when
   /// not needed
   add_binding(ALL_WINDOWS, XK_Left, XCF_Pan, 1);
   add_binding(ALL_WINDOWS, XK_Right, XCF_Pan, 2);
   add_binding(ALL_WINDOWS, XK_Up, XCF_Pan, 3);
   add_binding(ALL_WINDOWS, XK_Down, XCF_Pan, 4);
   add_binding(ALL_WINDOWS, 'W', XCF_Write);
   add_binding(ALL_WINDOWS, 'O', XCF_Rotate, -5);
   add_binding(ALL_WINDOWS, 'o', XCF_Rotate, 5);
   add_binding(ALL_WINDOWS, 'R', XCF_Rotate, -15);
   add_binding(ALL_WINDOWS, 'r', XCF_Rotate, 15);
   add_binding(ALL_WINDOWS, 'f', XCF_Flip_X);
   add_binding(ALL_WINDOWS, 'F', XCF_Flip_Y);
   add_binding(ALL_WINDOWS, 'S', XCF_Snap);
   add_binding(ALL_WINDOWS, '<', XCF_Pop);
   add_binding(ALL_WINDOWS, '>', XCF_Push);
   add_binding(ALL_WINDOWS, XK_Delete, XCF_Delete);
   add_binding(ALL_WINDOWS, 'd', XCF_Delete);
   add_binding(ALL_WINDOWS, XK_F19, XCF_Select);
   add_binding(ALL_WINDOWS, 'b', XCF_Box);
   add_binding(ALL_WINDOWS, 'a', XCF_Arc);
   add_binding(ALL_WINDOWS, 't', XCF_Text);
   add_binding(ALL_WINDOWS, 'X', XCF_Exchange);
   add_binding(ALL_WINDOWS, 'c', XCF_Copy);
   add_binding(ALL_WINDOWS, 'j', XCF_Join);
   add_binding(ALL_WINDOWS, 'J', XCF_Unjoin);
   add_binding(ALL_WINDOWS, 's', XCF_Spline);
   add_binding(ALL_WINDOWS, 'e', XCF_Edit);
   add_binding(ALL_WINDOWS, 'u', XCF_Undo);
   add_binding(ALL_WINDOWS, 'U', XCF_Redo);
   add_binding(ALL_WINDOWS, 'M', XCF_Select_Save);
   add_binding(ALL_WINDOWS, 'm', XCF_Select_Save);
   add_binding(ALL_WINDOWS, 'x', XCF_Unselect);
   add_binding(ALL_WINDOWS, '|', XCF_Dashed);
   add_binding(ALL_WINDOWS, ':', XCF_Dotted);
   add_binding(ALL_WINDOWS, '_', XCF_Solid);
   add_binding(ALL_WINDOWS, '%', XCF_Prompt);
   add_binding(ALL_WINDOWS, '.', XCF_Dot);
#ifndef TCL_WRAPPER
   /* TCL_WRAPPER version req's binding to specific windows */
   add_binding(ALL_WINDOWS, BUTTON1, XCF_Wire);
#endif
   add_binding(ALL_WINDOWS, 'w', XCF_Wire);
   add_binding(ALL_WINDOWS, CTRL | ALT | Qt::Key_Q, XCF_Exit);
   add_binding(ALL_WINDOWS, HOLD | BUTTON1, XCF_Move);
   add_binding(ALL_WINDOWS, BUTTON1, XCF_Continue_Element);
   add_binding(ALL_WINDOWS, BUTTON1, XCF_Continue_Copy);
   add_binding(ALL_WINDOWS, BUTTON1, XCF_Finish);
   add_binding(ALL_WINDOWS, XK_Escape, XCF_Cancel);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_R, XCF_Rescale);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_S, XCF_SnapTo);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_Q, XCF_Netlist);
   add_binding(ALL_WINDOWS, '/', XCF_Swap);
   add_binding(ALL_WINDOWS, 'T', XCF_Pin_Label);
   add_binding(ALL_WINDOWS, 'G', XCF_Pin_Global);
   add_binding(ALL_WINDOWS, 'I', XCF_Info_Label);
   add_binding(ALL_WINDOWS, ALT | Qt::Key_W, XCF_Connectivity);

   /* These are for test purposes only.  Menu selection is	*/
   /* preferred.						*/
   if (0) {
       add_binding(ALL_WINDOWS, ALT | Qt::Key_D, XCF_Sim);
       add_binding(ALL_WINDOWS, ALT | Qt::Key_A, XCF_SPICE);
       add_binding(ALL_WINDOWS, ALT | Qt::Key_F, XCF_SPICEflat);
       add_binding(ALL_WINDOWS, ALT | Qt::Key_P, XCF_PCB);
   }

   /* 2-button vs. 3-button mouse bindings (set with -2	*/
   /* commandline option; 3-button bindings default)	*/

   if (pressmode == 1) {
      add_binding(ALL_WINDOWS, BUTTON3, XCF_Text_Return);
      add_binding(ALL_WINDOWS, BUTTON3, XCF_Select);
      add_binding(ALL_WINDOWS, HOLD | BUTTON3, XCF_SelectBox);
      add_binding(ALL_WINDOWS, BUTTON3, XCF_Finish_Element);
      add_binding(ALL_WINDOWS, BUTTON3, XCF_Finish_Copy);

      add_binding(ALL_WINDOWS, XK_BackSpace, XCF_Cancel_Last);
      add_binding(ALL_WINDOWS, XK_BackSpace, XCF_Cancel);
   }
   else {
      add_binding(ALL_WINDOWS, BUTTON2, XCF_Text_Return);
      add_binding(ALL_WINDOWS, SHIFT | BUTTON1, XCF_Text_Return);
      add_binding(ALL_WINDOWS, BUTTON2, XCF_Select);
      add_binding(ALL_WINDOWS, SHIFT | BUTTON1, XCF_Select);
      add_binding(ALL_WINDOWS, HOLD | BUTTON2, XCF_SelectBox);
      add_binding(ALL_WINDOWS, SHIFT | HOLD | BUTTON1, XCF_Select);
      add_binding(ALL_WINDOWS, BUTTON2, XCF_Finish_Element);
      add_binding(ALL_WINDOWS, SHIFT | BUTTON1, XCF_Finish_Element);
      add_binding(ALL_WINDOWS, BUTTON2, XCF_Finish_Copy);
      add_binding(ALL_WINDOWS, SHIFT | BUTTON1, XCF_Finish_Copy);
      add_binding(ALL_WINDOWS, BUTTON3, XCF_Cancel_Last);
      add_binding(ALL_WINDOWS, BUTTON3, XCF_Cancel);
   }
}
Beispiel #16
0
void parse_args(int argc, char *argv[], address_pool *pool)
{
    int c;

    opterr = 0;

    while ((c = getopt (argc, argv, "a:d:o:p:s:")) != -1)
	switch (c) {

	case 'a': // parse IP address pool
	    {
		char *opt    = strdup(optarg);
		char *sfirst = opt;
		char *slast  = strchr(opt, ',');
	    
		if (slast == NULL)
		    usage("error: comma not present in option -a.", 1);
		*slast = '\0';
		slast++;
	    
		uint32_t *first, *last;
		
		if (parse_ip(sfirst, (void **)&first) != 4)
		    usage("error: invalid first ip in address pool.", 1);
		
		if (parse_ip(slast, (void **)&last) != 4)
		    usage("error: invalid last ip in address pool.", 1);

		pool->indexes.first   = *first;
		pool->indexes.last    = *last;
		pool->indexes.current = *first;
		
		free(first);
		free(last);
		free(opt);
		
		break;
	    }

	case 'd': // network device to use
	    {
		strncpy(pool->device, optarg, sizeof(pool->device));
		break;
	    }
	    
	case 'o': // parse dhcp option
	    {
		uint8_t id;

		char *opt   = strdup(optarg);
		char *name  = opt;
		char *value = strchr(opt, ',');
		
		if (value == NULL)
		    usage("error: comma not present in option -o.", 1);
		*value = '\0';
		value++;
		
		dhcp_option *option = calloc(1, sizeof(*option));
		
		if((id = parse_option(option, name, value)) == 0) {
		    char msg[128];
		    snprintf(msg, sizeof(msg),
			     "error: invalid dhcp option specified: %s,%s",
			     name, value);
		    usage(msg, 1);
		}
		
		append_option(&pool->options, option);

		if(option->id == IP_ADDRESS_LEASE_TIME)
		    pool->lease_time = ntohl(*((uint32_t *)option->data));

		free(option);
		free(opt);
		break;
	    }

	case 'p': // parse pending time
	    {
		time_t *t;

		if(parse_long(optarg, (void **)&t) != 4)
		    usage("error: invalid pending time.", 1);

		pool->pending_time = *t;
		free(t);
		break;
	    }

	case 's': // static binding
	    {
		char *opt = strdup(optarg);
		char *shw  = opt;
		char *sip  = strchr(opt, ',');
		
		if (sip == NULL)
		    usage("error: comma not present in option -s.", 1);
		*sip = '\0';
		    sip++;
		
		uint32_t *ip;
		uint8_t  *hw;
		
		if (parse_mac(shw, (void **)&hw) != 6)
		    usage("error: invalid mac address in static binding.", 1);
		
		if (parse_ip(sip, (void **)&ip) != 4)
		    usage("error: invalid ip in static binding.", 1);
		
		add_binding(&pool->bindings, *ip, hw, 6, 1);
		
		free(ip);
		free(hw);
		free(opt);
	    }
	    
	case '?':
	    usage(NULL, 1);

	default:
	    usage(NULL, 1);
	}

    if(optind >= argc)
	usage("error: server address not provided.", 1);

    uint32_t *ip;

    if (parse_ip(argv[optind], (void **)&ip) != 4)
	usage("error: invalid server address.", 1);

    pool->server_id = *ip;
    
    free(ip);
}
Beispiel #17
0
void default_keybindings()
{
   add_vbinding(ALL_WINDOWS, XK_1, XCF_Page, 1);
   add_vbinding(ALL_WINDOWS, XK_2, XCF_Page, 2);
   add_vbinding(ALL_WINDOWS, XK_3, XCF_Page, 3);
   add_vbinding(ALL_WINDOWS, XK_4, XCF_Page, 4);
   add_vbinding(ALL_WINDOWS, XK_5, XCF_Page, 5);
   add_vbinding(ALL_WINDOWS, XK_6, XCF_Page, 6);
   add_vbinding(ALL_WINDOWS, XK_7, XCF_Page, 7);
   add_vbinding(ALL_WINDOWS, XK_8, XCF_Page, 8);
   add_vbinding(ALL_WINDOWS, XK_9, XCF_Page, 9);
   add_vbinding(ALL_WINDOWS, XK_0, XCF_Page, 10);

   add_vbinding(ALL_WINDOWS, SHIFT | XK_KP_1, XCF_Justify, 0);
   add_vbinding(ALL_WINDOWS, SHIFT | XK_KP_2, XCF_Justify, 1);
   add_vbinding(ALL_WINDOWS, SHIFT | XK_KP_3, XCF_Justify, 2);
   add_vbinding(ALL_WINDOWS, SHIFT | XK_KP_4, XCF_Justify, 3);
   add_vbinding(ALL_WINDOWS, SHIFT | XK_KP_5, XCF_Justify, 4);
   add_vbinding(ALL_WINDOWS, SHIFT | XK_KP_6, XCF_Justify, 5);
   add_vbinding(ALL_WINDOWS, SHIFT | XK_KP_7, XCF_Justify, 6);
   add_vbinding(ALL_WINDOWS, SHIFT | XK_KP_8, XCF_Justify, 7);
   add_vbinding(ALL_WINDOWS, SHIFT | XK_KP_9, XCF_Justify, 8);

   add_vbinding(ALL_WINDOWS, XK_KP_End, XCF_Justify, 0);
   add_vbinding(ALL_WINDOWS, XK_KP_Down, XCF_Justify, 1);
   add_vbinding(ALL_WINDOWS, XK_KP_Next, XCF_Justify, 2);
   add_vbinding(ALL_WINDOWS, XK_KP_Left, XCF_Justify, 3);
   add_vbinding(ALL_WINDOWS, XK_KP_Begin, XCF_Justify, 4);
   add_vbinding(ALL_WINDOWS, XK_KP_Right, XCF_Justify, 5);
   add_vbinding(ALL_WINDOWS, XK_KP_Home, XCF_Justify, 6);
   add_vbinding(ALL_WINDOWS, XK_KP_Up, XCF_Justify, 7);
   add_vbinding(ALL_WINDOWS, XK_KP_Prior, XCF_Justify, 8);

   add_binding(ALL_WINDOWS, XK_Delete, XCF_Text_Delete);
   add_binding(ALL_WINDOWS, XK_Return, XCF_Text_Return);
   add_binding(ALL_WINDOWS, BUTTON1, XCF_Text_Return);
   add_binding(ALL_WINDOWS, XK_BackSpace, XCF_Text_Delete);
   add_binding(ALL_WINDOWS, XK_Left, XCF_Text_Left);
   add_binding(ALL_WINDOWS, XK_Right, XCF_Text_Right);
   add_binding(ALL_WINDOWS, XK_Up, XCF_Text_Up);
   add_binding(ALL_WINDOWS, XK_Down, XCF_Text_Down);
   add_binding(ALL_WINDOWS, ALT | XK_x, XCF_Text_Split);
   add_binding(ALL_WINDOWS, XK_Home, XCF_Text_Home);
   add_binding(ALL_WINDOWS, XK_End, XCF_Text_End);
   add_binding(ALL_WINDOWS, XK_Tab, XCF_TabForward);
   add_binding(ALL_WINDOWS, SHIFT | XK_Tab, XCF_TabBackward);
#ifdef XK_ISO_Left_Tab
   add_binding(ALL_WINDOWS, SHIFT | XK_ISO_Left_Tab, XCF_TabBackward);
#endif
   add_binding(ALL_WINDOWS, ALT | XK_Tab, XCF_TabStop);
   add_binding(ALL_WINDOWS, XK_KP_Add, XCF_Superscript);
   add_binding(ALL_WINDOWS, XK_KP_Subtract, XCF_Subscript);
   add_binding(ALL_WINDOWS, XK_KP_Enter, XCF_Normalscript);
   add_vbinding(ALL_WINDOWS, ALT | XK_f, XCF_Font, 1000);
   add_binding(ALL_WINDOWS, ALT | XK_b, XCF_Boldfont);
   add_binding(ALL_WINDOWS, ALT | XK_i, XCF_Italicfont);
   add_binding(ALL_WINDOWS, ALT | XK_n, XCF_Normalfont);
   add_binding(ALL_WINDOWS, ALT | XK_u, XCF_Underline);
   add_binding(ALL_WINDOWS, ALT | XK_o, XCF_Overline);
   add_binding(ALL_WINDOWS, ALT | XK_e, XCF_ISO_Encoding);
   add_binding(ALL_WINDOWS, ALT | XK_Return, XCF_Linebreak);
   add_binding(ALL_WINDOWS, ALT | XK_h, XCF_Halfspace);
   add_binding(ALL_WINDOWS, ALT | XK_q, XCF_Quarterspace);
#ifndef TCL_WRAPPER
   add_binding(ALL_WINDOWS, ALT | XK_p, XCF_Parameter);
#endif
   add_binding(ALL_WINDOWS, XK_backslash, XCF_Special);
   add_binding(ALL_WINDOWS, ALT | XK_c, XCF_Special);
   add_binding(ALL_WINDOWS, XK_p, XCF_Edit_Param);
   add_binding(ALL_WINDOWS, XK_d, XCF_Edit_Delete);
   add_binding(ALL_WINDOWS, XK_Delete, XCF_Edit_Delete);
   add_binding(ALL_WINDOWS, XK_i, XCF_Edit_Insert);
   add_binding(ALL_WINDOWS, XK_Insert, XCF_Edit_Insert);
   add_binding(ALL_WINDOWS, XK_e, XCF_Edit_Next);
   add_binding(ALL_WINDOWS, BUTTON1, XCF_Edit_Next);
   add_binding(ALL_WINDOWS, XK_A, XCF_Attach);
   add_binding(ALL_WINDOWS, XK_V, XCF_Virtual);
   add_binding(ALL_WINDOWS, XK_l, XCF_Next_Library);
   add_binding(ALL_WINDOWS, XK_L, XCF_Library_Directory);
   add_binding(ALL_WINDOWS, XK_c, XCF_Library_Copy);
   add_binding(ALL_WINDOWS, XK_E, XCF_Library_Edit);
   add_binding(ALL_WINDOWS, XK_e, XCF_Library_Edit);
   add_binding(ALL_WINDOWS, XK_D, XCF_Library_Delete);
   add_binding(ALL_WINDOWS, XK_C, XCF_Library_Duplicate);
   add_binding(ALL_WINDOWS, XK_H, XCF_Library_Hide);
   add_binding(ALL_WINDOWS, XK_V, XCF_Library_Virtual);
   add_binding(ALL_WINDOWS, XK_M, XCF_Library_Move);
   add_binding(ALL_WINDOWS, XK_m, XCF_Library_Move);
   add_binding(ALL_WINDOWS, XK_P, XCF_Page_Directory);
   add_binding(ALL_WINDOWS, XK_less, XCF_Library_Pop);
   add_binding(ALL_WINDOWS, HOLD | BUTTON1, XCF_Library_Pop);
   add_binding(ALL_WINDOWS, XK_h, XCF_Help);
   add_binding(ALL_WINDOWS, XK_question, XCF_Help);
   add_binding(ALL_WINDOWS, XK_space, XCF_Redraw);
   add_binding(ALL_WINDOWS, XK_Redo, XCF_Redraw);
   add_binding(ALL_WINDOWS, XK_Undo, XCF_Redraw);
   add_binding(ALL_WINDOWS, XK_Home, XCF_View);
   add_binding(ALL_WINDOWS, XK_v, XCF_View);
   add_binding(ALL_WINDOWS, XK_Z, XCF_Zoom_In);
   add_binding(ALL_WINDOWS, XK_z, XCF_Zoom_Out);
   add_vbinding(ALL_WINDOWS, XK_p, XCF_Pan, 0);
   add_binding(ALL_WINDOWS, XK_plus, XCF_Double_Snap);
   add_binding(ALL_WINDOWS, XK_minus, XCF_Halve_Snap);
   add_vbinding(ALL_WINDOWS, XK_Left, XCF_Pan, 1);
   add_vbinding(ALL_WINDOWS, XK_Right, XCF_Pan, 2);
   add_vbinding(ALL_WINDOWS, XK_Up, XCF_Pan, 3);
   add_vbinding(ALL_WINDOWS, XK_Down, XCF_Pan, 4);
   add_binding(ALL_WINDOWS, XK_W, XCF_Write);
   add_vbinding(ALL_WINDOWS, XK_O, XCF_Rotate, -5);
   add_vbinding(ALL_WINDOWS, XK_o, XCF_Rotate, 5);
   add_vbinding(ALL_WINDOWS, XK_R, XCF_Rotate, -15);
   add_vbinding(ALL_WINDOWS, XK_r, XCF_Rotate, 15);
   add_binding(ALL_WINDOWS, XK_f, XCF_Flip_X);
   add_binding(ALL_WINDOWS, XK_F, XCF_Flip_Y);
   add_binding(ALL_WINDOWS, XK_S, XCF_Snap);
   add_binding(ALL_WINDOWS, XK_less, XCF_Pop);
   add_binding(ALL_WINDOWS, XK_greater, XCF_Push);
   add_binding(ALL_WINDOWS, XK_Delete, XCF_Delete);
   add_binding(ALL_WINDOWS, XK_d, XCF_Delete);
   add_binding(ALL_WINDOWS, XK_F19, XCF_Select);
   add_binding(ALL_WINDOWS, XK_b, XCF_Box);
   add_binding(ALL_WINDOWS, XK_a, XCF_Arc);
   add_binding(ALL_WINDOWS, XK_t, XCF_Text);
   add_binding(ALL_WINDOWS, XK_X, XCF_Exchange);
   add_binding(ALL_WINDOWS, XK_c, XCF_Copy);
   add_binding(ALL_WINDOWS, XK_j, XCF_Join);
   add_binding(ALL_WINDOWS, XK_J, XCF_Unjoin);
   add_binding(ALL_WINDOWS, XK_s, XCF_Spline);
   add_binding(ALL_WINDOWS, XK_e, XCF_Edit);
   add_binding(ALL_WINDOWS, XK_u, XCF_Undo);
   add_binding(ALL_WINDOWS, XK_U, XCF_Redo);
   add_binding(ALL_WINDOWS, XK_M, XCF_Select_Save);
   add_binding(ALL_WINDOWS, XK_m, XCF_Select_Save);
   add_binding(ALL_WINDOWS, XK_x, XCF_Unselect);
   add_binding(ALL_WINDOWS, XK_bar, XCF_Dashed);
   add_binding(ALL_WINDOWS, XK_colon, XCF_Dotted);
   add_binding(ALL_WINDOWS, XK_underscore, XCF_Solid);
   add_binding(ALL_WINDOWS, XK_percent, XCF_Prompt);
   add_binding(ALL_WINDOWS, XK_period, XCF_Dot);
#ifndef TCL_WRAPPER
   /* TCL_WRAPPER version req's binding to specific windows */
   add_binding(ALL_WINDOWS, BUTTON1, XCF_Wire);
#endif
   add_binding(ALL_WINDOWS, XK_w, XCF_Wire);
   add_binding(ALL_WINDOWS, CTRL | ALT | XK_q, XCF_Exit);
   add_binding(ALL_WINDOWS, HOLD | BUTTON1, XCF_Move);
   add_binding(ALL_WINDOWS, BUTTON1, XCF_Continue_Element);
   add_binding(ALL_WINDOWS, BUTTON1, XCF_Continue_Copy);
   add_binding(ALL_WINDOWS, BUTTON1, XCF_Finish);
   add_binding(ALL_WINDOWS, XK_Escape, XCF_Cancel);
   add_binding(ALL_WINDOWS, ALT | XK_r, XCF_Rescale);
   add_binding(ALL_WINDOWS, ALT | XK_s, XCF_SnapTo);
   add_binding(ALL_WINDOWS, ALT | XK_q, XCF_Netlist);
   add_binding(ALL_WINDOWS, XK_slash, XCF_Swap);
   add_binding(ALL_WINDOWS, XK_T, XCF_Pin_Label);
   add_binding(ALL_WINDOWS, XK_G, XCF_Pin_Global);
   add_binding(ALL_WINDOWS, XK_I, XCF_Info_Label);
   add_binding(ALL_WINDOWS, ALT | XK_w, XCF_Connectivity);

/* These are for test purposes only.  Menu selection is	*/
/* preferred.						*/

/* add_binding(ALL_WINDOWS, ALT | XK_d, XCF_Sim);		*/
/* add_binding(ALL_WINDOWS, ALT | XK_a, XCF_SPICE);		*/
/* add_binding(ALL_WINDOWS, ALT | XK_f, XCF_SPICEflat);	*/
/* add_binding(ALL_WINDOWS, ALT | XK_p, XCF_PCB);		*/

   /* Avoid spurious Num_Lock messages */
   add_binding(ALL_WINDOWS, XK_Num_Lock, XCF_Nothing);

   /* 2-button vs. 3-button mouse bindings (set with -2	*/
   /* commandline option; 3-button bindings default)	*/

   if (pressmode == 1) {
      add_binding(ALL_WINDOWS, BUTTON3, XCF_Text_Return);
      add_binding(ALL_WINDOWS, BUTTON3, XCF_Select);
      add_binding(ALL_WINDOWS, HOLD | BUTTON3, XCF_SelectBox);
      add_binding(ALL_WINDOWS, BUTTON3, XCF_Finish_Element);
      add_binding(ALL_WINDOWS, BUTTON3, XCF_Finish_Copy);

      add_binding(ALL_WINDOWS, XK_BackSpace, XCF_Cancel_Last);
      add_binding(ALL_WINDOWS, XK_BackSpace, XCF_Cancel);
   }
   else {
      add_binding(ALL_WINDOWS, BUTTON2, XCF_Text_Return);
      add_binding(ALL_WINDOWS, SHIFT | BUTTON1, XCF_Text_Return);
      add_binding(ALL_WINDOWS, BUTTON2, XCF_Select);
      add_binding(ALL_WINDOWS, SHIFT | BUTTON1, XCF_Select);
      add_binding(ALL_WINDOWS, HOLD | BUTTON2, XCF_SelectBox);
      add_binding(ALL_WINDOWS, SHIFT | HOLD | BUTTON1, XCF_Select);
      add_binding(ALL_WINDOWS, BUTTON2, XCF_Finish_Element);
      add_binding(ALL_WINDOWS, SHIFT | BUTTON1, XCF_Finish_Element);
      add_binding(ALL_WINDOWS, BUTTON2, XCF_Finish_Copy);
      add_binding(ALL_WINDOWS, SHIFT | BUTTON1, XCF_Finish_Copy);
      add_binding(ALL_WINDOWS, BUTTON3, XCF_Cancel_Last);
      add_binding(ALL_WINDOWS, BUTTON3, XCF_Cancel);
   }
}