Ejemplo n.º 1
0
/* KeyBind::readBinds
 * Reads keybind defeinitions from tokenizer [tz]
 *******************************************************************/
bool KeyBind::readBinds(Tokenizer& tz)
{
    // Parse until ending }
    string name = tz.getToken();
    while (name != "}" && !tz.atEnd())
    {
        // Clear any current binds for the key
        getBind(name).keys.clear();

        // Read keys
        while (1)
        {
            string keystr = tz.getToken();

            // Finish if no keys are bound
            if (keystr == "unbound")
                break;

            // Parse key string
            string key, mods;
            if (keystr.Find("|") >= 0)
            {
                mods = keystr.BeforeFirst('|');
                key = keystr.AfterFirst('|');
            }
            else
                key = keystr;

            // Add the key
            addBind(name, keypress_t(key, mods.Find('a') >= 0, mods.Find('c') >= 0, mods.Find('s') >= 0));

            // Check for more keys
            if (tz.peekToken() == ",")
                tz.getToken();			// Skip ,
            else
                break;
        }

        // Next keybind
        name = tz.getToken();
    }

    // Create sorted list
    keybinds_sorted = keybinds;
    std::sort(keybinds_sorted.begin(), keybinds_sorted.end());

    return true;
}
Ejemplo n.º 2
0
void BindState::readBindOp(const uint8_t* bindsStart, const uint8_t*& p)
{
	uintptr_t offset;
	uint8_t op = *p & BIND_OPCODE_MASK;
	uint8_t imm = *p & BIND_IMMEDIATE_MASK;
	
	if (!last_start)
		last_start = bindsStart;
	offset = last_start - bindsStart;
	
	LOG << "bind: op=" << std::hex << int(op) << " imm=" << int(imm) << std::dec << " @" << (void*)p << ", bindsStart at " << (void*)bindsStart << std::endl;
	p++;
	
	switch (op)
	{
	case BIND_OPCODE_DONE:
		last_start = p;
		break;

	case BIND_OPCODE_SET_DYLIB_ORDINAL_IMM:
		ordinal = imm;
		break;

	case BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB:
		ordinal = uleb128(p);
		break;

	case BIND_OPCODE_SET_DYLIB_SPECIAL_IMM:
		if (imm == 0)
			ordinal = 0;
		else
			ordinal = BIND_OPCODE_MASK | imm;
		
		break;

	case BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM:
		sym_name = reinterpret_cast<const char*>(p);
		p += strlen(sym_name) + 1;
		LOGF("sym_name=%s\n", sym_name);
		break;

	case BIND_OPCODE_SET_TYPE_IMM:
		type = imm;
		break;

	case BIND_OPCODE_SET_ADDEND_SLEB:
		addend = sleb128(p);
		break;

	case BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB:
		seg_index = imm;
		seg_offset = uleb128(p);
		break;

	case BIND_OPCODE_ADD_ADDR_ULEB:
		seg_offset += uleb128(p);
		break;

	case BIND_OPCODE_DO_BIND:
		addBind(offset);
		break;

	case BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB:
		LOGF("BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB\n");
		addBind(offset);
		seg_offset += uleb128(p);
		break;

	case BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED:
		LOGF("BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED %d\n", (int)imm);
		addBind(offset);
		seg_offset += imm * mach->m_ptrsize;
		break;

	case BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB: {
		uint64_t count = uleb128(p);
		uint64_t skip = uleb128(p);
		LOGF("BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB %u %u\n",
			(unsigned)count, (unsigned)skip);
		for (uint64_t i = 0; i < count; i++)
		{
			addBind(offset);
			seg_offset += skip;
		}
		break;
	}

	default:
		fprintf(stderr, "unknown op: %x\n", op);
	}
 }
Ejemplo n.º 3
0
/* KeyBind::initBinds
 * Initialises all default keybinds
 *******************************************************************/
void KeyBind::initBinds()
{
    // General
    string group = "General";
    addBind("copy", keypress_t("C", KPM_CTRL), "Copy", group);
    addBind("cut", keypress_t("X", KPM_CTRL), "Cut", group);
    addBind("paste", keypress_t("V", KPM_CTRL), "Paste", group);
    addBind("select_all", keypress_t("A", KPM_CTRL), "Select All", group);

    // Entry List (el*)
    group = "Entry List";
    addBind("el_new", keypress_t("N", KPM_CTRL), "New Entry", group);
    addBind("el_delete", keypress_t("delete"), "Delete Entry", group);
    addBind("el_move_up", keypress_t("U", KPM_CTRL), "Move Entry up", group);
    addBind("el_move_down", keypress_t("D", KPM_CTRL), "Move Entry down", group);
    addBind("el_rename", keypress_t("R", KPM_CTRL), "Rename Entry", group);
    addBind("el_rename", keypress_t("f2"));
    addBind("el_import", keypress_t("I", KPM_CTRL), "Import to Entry", group);
    addBind("el_import_files", keypress_t("I", KPM_CTRL|KPM_SHIFT), "Import Files", group);
    addBind("el_export", keypress_t("E", KPM_CTRL), "Export Entry", group);
    addBind("el_up_dir", keypress_t("backspace"), "Up one directory", group);

    // Text editor (ted*)
    group = "Text Editor";
    addBind("ted_autocomplete", keypress_t("space", KPM_CTRL), "Open Autocompletion list", group);
    addBind("ted_calltip", keypress_t("space", KPM_CTRL|KPM_SHIFT), "Open CallTip", group);
    addBind("ted_findreplace", keypress_t("F", KPM_CTRL), "Find/Replace", group);
    addBind("ted_findnext", keypress_t("f3"), "Find next", group);
    addBind("ted_findprev", keypress_t("f3", KPM_SHIFT), "Find previous", group);
    addBind("ted_replacenext", keypress_t("R", KPM_ALT), "Replace next", group);
    addBind("ted_replaceall", keypress_t("R", KPM_ALT|KPM_SHIFT), "Replace all", group);
    addBind("ted_jumptoline", keypress_t("G", KPM_CTRL), "Jump to Line", group);
    addBind("ted_fold_foldall", keypress_t("[", KPM_CTRL|KPM_SHIFT), "Fold All", group);
    addBind("ted_fold_unfoldall", keypress_t("]", KPM_CTRL|KPM_SHIFT), "Fold All", group);

    // Texture editor (txed*)
    group = "Texture Editor";
    addBind("txed_patch_left", keypress_t("left", KPM_CTRL), "Move Patch left", group);
    addBind("txed_patch_left8", keypress_t("left"), "Move Patch left 8", group);
    addBind("txed_patch_up", keypress_t("up", KPM_CTRL), "Move Patch up", group);
    addBind("txed_patch_up8", keypress_t("up"), "Move Patch up 8", group);
    addBind("txed_patch_right", keypress_t("right", KPM_CTRL), "Move Patch right", group);
    addBind("txed_patch_right8", keypress_t("right"), "Move Patch right 8", group);
    addBind("txed_patch_down", keypress_t("down", KPM_CTRL), "Move Patch down", group);
    addBind("txed_patch_down8", keypress_t("down"), "Move Patch down 8", group);
    addBind("txed_patch_add", keypress_t("insert"), "Add Patch", group);
    addBind("txed_patch_delete", keypress_t("delete"), "Delete Patch", group);
    addBind("txed_patch_replace", keypress_t("f2"), "Replace Patch", group);
    addBind("txed_patch_replace", keypress_t("R", KPM_CTRL));
    addBind("txed_patch_duplicate", keypress_t("D", KPM_CTRL), "Duplicate Patch", group);
    addBind("txed_patch_forward", keypress_t("]"), "Bring Patch forward", group);
    addBind("txed_patch_back", keypress_t("["), "Send Patch back", group);
    addBind("txed_tex_up", keypress_t("up", KPM_CTRL), "Move Texture up", group);
    addBind("txed_tex_up", keypress_t("U", KPM_CTRL));
    addBind("txed_tex_down", keypress_t("down", KPM_CTRL), "Move Texture down", group);
    addBind("txed_tex_down", keypress_t("D", KPM_CTRL));
    addBind("txed_tex_new", keypress_t("N", KPM_CTRL), "New Texture", group);
    addBind("txed_tex_new_patch", keypress_t("N", KPM_CTRL|KPM_SHIFT), "New Texture from Patch", group);
    addBind("txed_tex_new_file", keypress_t("N", KPM_CTRL|KPM_ALT), "New Texture from File", group);
    addBind("txed_tex_delete", keypress_t("delete"), "Delete Texture", group);

    // Map Editor (map*)
    group = "Map Editor General";
    addBind("map_edit_accept", keypress_t("return"), "Accept edit", group);
    addBind("map_edit_accept", keypress_t("num_enter"));
    addBind("map_edit_cancel", keypress_t("escape"), "Cancel edit", group);
    addBind("map_toggle_3d", keypress_t("Q"), "Toggle 3d mode", group);
    addBind("map_screenshot", keypress_t("P", KPM_CTRL|KPM_SHIFT), "Take Screenshot", group);

    // Map Editor 2D (me2d*)
    group = "Map Editor 2D Mode";
    addBind("me2d_clear_selection", keypress_t("C"), "Clear selection", group);
    addBind("me2d_pan_view", keypress_t("mouse3"), "Pan view", group);
    addBind("me2d_pan_view", keypress_t("space", KPM_CTRL));
    addBind("me2d_move", keypress_t("Z"), "Toggle item move mode", group);
    addBind("me2d_zoom_in_m", keypress_t("mwheelup"), "Zoom in (towards mouse)", group);
    addBind("me2d_zoom_out_m", keypress_t("mwheeldown"), "Zoom out (towards mouse)", group);
    addBind("me2d_zoom_in", keypress_t("="), "Zoom in (towards screen center)", group);
    addBind("me2d_zoom_out", keypress_t("-"), "Zoom out (towards screen center)", group);
    addBind("me2d_show_object", keypress_t("=", KPM_SHIFT), "Zoom in, show current object", group);
    addBind("me2d_show_object", keypress_t("mwheelup", KPM_SHIFT));
    addBind("me2d_show_all", keypress_t("-", KPM_SHIFT), "Zoom out, show full map", group);
    addBind("me2d_show_all", keypress_t("mwheeldown", KPM_SHIFT));
    addBind("me2d_left", keypress_t("left"), "Scroll left", group);
    addBind("me2d_right", keypress_t("right"), "Scroll right", group);
    addBind("me2d_up", keypress_t("up"), "Scroll up", group);
    addBind("me2d_down", keypress_t("down"), "Scroll down", group);
    addBind("me2d_grid_inc", keypress_t("["), "Increment grid level", group);
    addBind("me2d_grid_dec", keypress_t("]"), "Decrement grid level", group);
    addBind("me2d_grid_toggle_snap", keypress_t("G", KPM_SHIFT), "Toggle Grid Snap", group);
    addBind("me2d_mode_vertices", keypress_t("V"), "Vertices mode", group);
    addBind("me2d_mode_lines", keypress_t("L"), "Lines mode", group);
    addBind("me2d_mode_sectors", keypress_t("S"), "Sectors mode", group);
    addBind("me2d_mode_things", keypress_t("T"), "Things mode", group);
    addBind("me2d_flat_type", keypress_t("F", KPM_CTRL), "Cycle flat type", group);
    addBind("me2d_split_line", keypress_t("S", KPM_CTRL|KPM_SHIFT), "Split nearest line", group);
    addBind("me2d_lock_hilight", keypress_t("H", KPM_CTRL), "Lock/unlock hilight", group);
    addBind("me2d_begin_linedraw", keypress_t("space"), "Begin line drawing", group);
    addBind("me2d_begin_shapedraw", keypress_t("space", KPM_SHIFT), "Begin shape drawing", group);
    addBind("me2d_create_object", keypress_t("insert"), "Create object", group);
    addBind("me2d_delete_object", keypress_t("delete"), "Delete object", group);
    addBind("me2d_copy_properties", keypress_t("C", KPM_CTRL|KPM_SHIFT), "Copy object properties", group);
    addBind("me2d_paste_properties", keypress_t("V", KPM_CTRL|KPM_SHIFT), "Paste object properties", group);
    addBind("me2d_begin_object_edit", keypress_t("E"), "Begin object edit", group);
    addBind("me2d_toggle_selection_numbers", keypress_t("N"), "Toggle selection numbers", group);
    addBind("me2d_mirror_x", keypress_t("M", KPM_CTRL), "Mirror selection horizontally", group);
    addBind("me2d_mirror_y", keypress_t("M", KPM_CTRL|KPM_SHIFT), "Mirror selection vertically", group);
    addBind("me2d_object_properties", keypress_t("return"), "Object Properties", group, false, 100);

    // Map Editor 2D Lines mode (me2d_line*)
    group = "Map Editor 2D Lines Mode";
    addBind("me2d_line_change_texture", keypress_t("T", KPM_CTRL), "Change texture(s)", group);
    addBind("me2d_line_flip", keypress_t("F"), "Flip line(s)", group);
    addBind("me2d_line_flip_nosides", keypress_t("F", KPM_SHIFT), "Flip line(s) but not sides", group);
    addBind("me2d_line_tag_edit", keypress_t("T", KPM_SHIFT), "Begin tag edit", group);

    // Map Editor 2D Sectors mode (me2d_sector*)
    group = "Map Editor 2D Sectors Mode";
    addBind("me2d_sector_light_up16", keypress_t("'"), "Light level up 16", group);
    addBind("me2d_sector_light_up", keypress_t("'", KPM_SHIFT), "Light level up 1", group);
    addBind("me2d_sector_light_down16", keypress_t(";"), "Light level down 16", group);
    addBind("me2d_sector_light_down", keypress_t(";", KPM_SHIFT), "Light level down 1", group);
    addBind("me2d_sector_floor_up8", keypress_t(".", KPM_CTRL), "Floor height up 8", group);
    addBind("me2d_sector_floor_up", keypress_t(".", KPM_CTRL|KPM_SHIFT), "Floor height up 1", group);
    addBind("me2d_sector_floor_down8", keypress_t(",", KPM_CTRL), "Floor height down 8", group);
    addBind("me2d_sector_floor_down", keypress_t(",", KPM_CTRL|KPM_SHIFT), "Floor height down 1", group);
    addBind("me2d_sector_ceil_up8", keypress_t(".", KPM_ALT), "Ceiling height up 8", group);
    addBind("me2d_sector_ceil_up", keypress_t(".", KPM_ALT|KPM_SHIFT), "Ceiling height up 1", group);
    addBind("me2d_sector_ceil_down8", keypress_t(",", KPM_ALT), "Ceiling height down 8", group);
    addBind("me2d_sector_ceil_down", keypress_t(",", KPM_ALT|KPM_SHIFT), "Ceiling height down 1", group);
    addBind("me2d_sector_height_up8", keypress_t("."), "Height up 8", group);
    addBind("me2d_sector_height_up", keypress_t(".", KPM_SHIFT), "Height up 1", group);
    addBind("me2d_sector_height_down8", keypress_t(","), "Height down 8", group);
    addBind("me2d_sector_height_down", keypress_t(",", KPM_SHIFT), "Height down 1", group);
    addBind("me2d_sector_change_texture", keypress_t("T", KPM_CTRL), "Change texture(s)", group);
    addBind("me2d_sector_join", keypress_t("J"), "Join sectors", group);
    addBind("me2d_sector_join_keep", keypress_t("J", KPM_SHIFT), "Join sectors (keep lines)", group);

    // Map Editor 2D Things mode (me2d_thing*)
    group = "Map Editor 2D Things Mode";
    addBind("me2d_thing_change_type", keypress_t("T", KPM_CTRL), "Change type", group);
    addBind("me2d_thing_quick_angle", keypress_t("D"), "Quick angle edit", group);

    // Map Editor 3D (me3d*)
    group = "Map Editor 3D Mode";
    addBind("me3d_toggle_fog", keypress_t("F"), "Toggle fog", group);
    addBind("me3d_toggle_fullbright", keypress_t("B"), "Toggle full brightness", group);
    addBind("me3d_adjust_brightness", keypress_t("B", KPM_SHIFT), "Adjust brightness", group);
    addBind("me3d_toggle_gravity", keypress_t("G"), "Toggle camera gravity", group);
    addBind("me3d_release_mouse", keypress_t("tab"), "Release mouse cursor", group);
    addBind("me3d_clear_selection", keypress_t("C"), "Clear selection", group);
    addBind("me3d_toggle_things", keypress_t("T"), "Toggle thing display", group);
    addBind("me3d_thing_style", keypress_t("T", KPM_SHIFT), "Cycle thing render style", group);
    addBind("me3d_toggle_hilight", keypress_t("H"), "Toggle hilight", group);
    addBind("me3d_copy_tex_type", keypress_t("C", KPM_CTRL), "Copy texture or thing type", group);
    addBind("me3d_copy_tex_type", keypress_t("mouse3"));
    addBind("me3d_paste_tex_type", keypress_t("V", KPM_CTRL), "Paste texture or thing type", group);
    addBind("me3d_paste_tex_type", keypress_t("mouse3", KPM_SHIFT));
    addBind("me3d_toggle_info", keypress_t("I"), "Toggle information overlay", group);
    addBind("me3d_quick_texture", keypress_t("T", KPM_CTRL), "Quick Texture", group);

    // Map Editor 3D Camera (me3d_camera*)
    group = "Map Editor 3D Mode Camera";
    addBind("me3d_camera_forward", keypress_t("W"), "Camera forward", group, true);
    addBind("me3d_camera_back", keypress_t("S"), "Camera backward", group, true);
    addBind("me3d_camera_left", keypress_t("A"), "Camera strafe left", group, true);
    addBind("me3d_camera_right", keypress_t("D"), "Camera strafe right", group, true);
    addBind("me3d_camera_up", keypress_t("up"), "Camera move up", group, true);
    addBind("me3d_camera_down", keypress_t("down"), "Camera move down", group, true);
    addBind("me3d_camera_turn_left", keypress_t("left"), "Camera turn left", group, true);
    addBind("me3d_camera_turn_right", keypress_t("right"), "Camera turn right", group, true);

    // Map Editor 3D Light (me3d_light*)
    group = "Map Editor 3D Mode Light";
    addBind("me3d_light_up16", keypress_t("'"), "Sector light level up 16", group);
    addBind("me3d_light_up", keypress_t("'", KPM_SHIFT), "Sector light level up 1", group);
    addBind("me3d_light_down16", keypress_t(";"), "Sector light level down 16", group);
    addBind("me3d_light_down", keypress_t(";", KPM_SHIFT), "Sector light level down 1", group);
    addBind("me3d_light_toggle_link", keypress_t("L", KPM_CTRL), "Toggle linked flat light levels", group);

    // Map Editor 3D Offsets (me3d_xoff*, me3d_yoff*)
    group = "Map Editor 3D Mode Offsets";
    addBind("me3d_xoff_up8", keypress_t("num_4"), "X offset up 8", group);
    addBind("me3d_xoff_up", keypress_t("num_left"), "X offset up 1", group);
    addBind("me3d_xoff_down8", keypress_t("num_6"), "X offset down 8", group);
    addBind("me3d_xoff_down", keypress_t("num_right"), "X offset down 1", group);
    addBind("me3d_yoff_up8", keypress_t("num_8"), "Y offset up 8", group);
    addBind("me3d_yoff_up", keypress_t("num_up"), "Y offset up 1", group);
    addBind("me3d_yoff_down8", keypress_t("num_2"), "Y offset down 8", group);
    addBind("me3d_yoff_down", keypress_t("num_down"), "Y offset down 1", group);
    addBind("me3d_wall_reset", keypress_t("R"), "Reset offsets and scaling", group);
#ifdef __WXGTK__
    addBind("me3d_xoff_up", keypress_t("num_left", KPM_SHIFT));
    addBind("me3d_xoff_down", keypress_t("num_right", KPM_SHIFT));
    addBind("me3d_yoff_up", keypress_t("num_up", KPM_SHIFT));
    addBind("me3d_yoff_down", keypress_t("num_down", KPM_SHIFT));
#endif

    // Map Editor 3D Scaling (me3d_scale*)
    group = "Map Editor 3D Mode Scaling";
    addBind("me3d_scalex_up_l", keypress_t("num_4", KPM_CTRL), "X scale up (large)", group);
    addBind("me3d_scalex_up_s", keypress_t("num_left", KPM_CTRL), "X scale up (small)", group);
    addBind("me3d_scalex_down_l", keypress_t("num_6", KPM_CTRL), "X scale down (large)", group);
    addBind("me3d_scalex_down_s", keypress_t("num_right", KPM_CTRL), "X scale down (small)", group);
    addBind("me3d_scaley_up_l", keypress_t("num_8", KPM_CTRL), "Y scale up (large)", group);
    addBind("me3d_scaley_up_s", keypress_t("num_up", KPM_CTRL), "Y scale up (small)", group);
    addBind("me3d_scaley_down_l", keypress_t("num_2", KPM_CTRL), "Y scale down (large)", group);
    addBind("me3d_scaley_down_s", keypress_t("num_down", KPM_CTRL), "Y scale down (small)", group);

    // Map Editor 3D Walls (me3d_wall*)
    group = "Map Editor 3D Mode Walls";
    addBind("me3d_wall_toggle_link_ofs", keypress_t("O", KPM_CTRL), "Toggle linked wall offsets", group);
    addBind("me3d_wall_autoalign_x", keypress_t("A", KPM_CTRL), "Auto-align textures on X", group);
    addBind("me3d_wall_unpeg_lower", keypress_t("L"), "Toggle lower unpegged", group);
    addBind("me3d_wall_unpeg_upper", keypress_t("U"), "Toggle upper unpegged", group);

    // Map Editor 3D Flats (me3d_flat*)
    group = "Map Editor 3D Mode Flats";
    addBind("me3d_flat_height_up8", keypress_t("num_plus"), "Height up 8", group);
    addBind("me3d_flat_height_up8", keypress_t("mwheelup"));
    addBind("me3d_flat_height_up", keypress_t("num_plus", KPM_SHIFT), "Height up 1", group);
    addBind("me3d_flat_height_up", keypress_t("mwheelup", KPM_SHIFT));
    addBind("me3d_flat_height_down8", keypress_t("num_minus"), "Height down 8", group);
    addBind("me3d_flat_height_down8", keypress_t("mwheeldown"));
    addBind("me3d_flat_height_down", keypress_t("num_minus", KPM_SHIFT), "Height down 1", group);
    addBind("me3d_flat_height_down", keypress_t("mwheeldown", KPM_SHIFT));

    // Map Editor 3D Things (me3d_thing*)
    group = "Map Editor 3D Mode Things";
    addBind("me3d_thing_remove", keypress_t("delete"), "Remove", group);
    addBind("me3d_thing_up8", keypress_t("num_8"), "Z up 8", group);
    addBind("me3d_thing_up", keypress_t("num_up"), "Z up 1", group);
    addBind("me3d_thing_down8", keypress_t("num_2"), "Z down 8", group);
    addBind("me3d_thing_down", keypress_t("num_down"), "Z down 1", group);

    // Set above keys as defaults
    for (unsigned a = 0; a < keybinds.size(); a++)
    {
        for (unsigned k = 0; k < keybinds[a].keys.size(); k++)
            keybinds[a].defaults.push_back(keybinds[a].keys[k]);
    }

    // Create sorted list
    keybinds_sorted = keybinds;
    std::sort(keybinds_sorted.begin(), keybinds_sorted.end());
}
Ejemplo n.º 4
0
void LibRnrsUnicode::init(KevesCommon* common) {
  std::cout << "LibRnrsUnicode::init()" << std::endl;

  // setID("rnrs", "unicode-bin");
  // setVerNum(6);
					       
  sym_char_alphabetic_q_ = SymbolKev::make(common, "char-alphabetic?");
  sym_char_downcase_ = SymbolKev::make(common, "char-downcase");
  sym_char_general_category_ = SymbolKev::make(common, "char-general-category");
  sym_char_lower_case_q_ = SymbolKev::make(common, "char-lower-case?");
  sym_char_numeric_q_ = SymbolKev::make(common, "char-numeric?");
  sym_char_title_case_q_ = SymbolKev::make(common, "char-title-case?");
  sym_char_titlecase_ = SymbolKev::make(common, "char-titlecase");
  sym_char_foldcase_ = SymbolKev::make(common, "char-foldcase");
  sym_char_ci_eq_q_ = SymbolKev::make(common, "char-ci=?");
  sym_char_ci_lt_q_ = SymbolKev::make(common, "char-ci<?");
  sym_char_ci_gt_q_ = SymbolKev::make(common, "char-ci>?");
  sym_char_ci_lte_q_ = SymbolKev::make(common, "char-ci<=?");
  sym_char_ci_gte_q_ = SymbolKev::make(common, "char-ci>=?");
  sym_char_upcase_ = SymbolKev::make(common, "char-upcase");
  sym_char_upper_case_q_ = SymbolKev::make(common, "char-upper-case?");
  sym_char_whitespace_q_ = SymbolKev::make(common, "char-whitespace?");
  sym_string_downcase_ = SymbolKev::make(common, "string-downcase");
  sym_string_foldcase_ = SymbolKev::make(common, "string-foldcase");
  sym_string_titlecase_ = SymbolKev::make(common, "string-titlecase");
  sym_string_upcase_ = SymbolKev::make(common, "string-upcase");

  proc_char_upcase_.set(&Function::make<Function::IsChar, CharUpcase>, sym_char_upcase_);
  proc_char_downcase_.set(&Function::make<Function::IsChar, CharDowncase>, sym_char_downcase_);
  proc_char_titlecase_.set(&Function::make<Function::IsChar, CharTitlecase>, sym_char_titlecase_);
  proc_char_foldcase_.set(&Function::make<Function::IsChar, CharFoldcase>, sym_char_foldcase_);
  proc_char_ci_eq_q_.set(&Function::compare<Function::IsChar, IsCharCiEqual>, sym_char_ci_eq_q_);
  proc_char_ci_lt_q_.set(&Function::compare<Function::IsChar, IsCharCiLT>, sym_char_ci_lt_q_);
  proc_char_ci_gt_q_.set(&Function::compare<Function::IsChar, IsCharCiGT>, sym_char_ci_gt_q_);
  proc_char_ci_lte_q_.set(&Function::compare<Function::IsChar, IsCharCiLTE>, sym_char_ci_lte_q_);
  proc_char_ci_gte_q_.set(&Function::compare<Function::IsChar, IsCharCiGTE>, sym_char_ci_gte_q_);
  proc_char_alphabetic_q_.set(&Function::predicate<Function::IsChar, IsCharAlphabetic>, sym_char_alphabetic_q_);
  proc_char_numeric_q_.set(&Function::predicate<Function::IsChar, IsCharNumeric>, sym_char_numeric_q_);
  proc_char_whitespace_q_.set(&Function::predicate<Function::IsChar, IsCharWhitespace>, sym_char_whitespace_q_);
  proc_char_upper_case_q_.set(&Function::predicate<Function::IsChar, IsCharUpperCase>, sym_char_upper_case_q_);
  proc_char_lower_case_q_.set(&Function::predicate<Function::IsChar, IsCharLowerCase>, sym_char_lower_case_q_);
  proc_char_title_case_q_.set(&Function::predicate<Function::IsChar, IsCharTitleCase>, sym_char_title_case_q_);
  proc_char_general_category_.set(&Function::make<Function::IsChar, CharGeneralCategory>, sym_char_general_category_);
  proc_string_upcase_.set(&Function::make<Function::IsString, StringUpcase>, sym_string_upcase_);
  proc_string_downcase_.set(&Function::make<Function::IsString, StringDowncase>, sym_string_downcase_);
  proc_string_titlecase_.set(&Function::make<Function::IsString, StringTitlecase>, sym_string_titlecase_);
  proc_string_foldcase_.set(&Function::make<Function::IsString, StringFoldcase>, sym_string_foldcase_);

  addBind("char-alphabetic?", &proc_char_alphabetic_q_);
  addBind("char-upcase", &proc_char_upcase_);
  addBind("char-downcase", &proc_char_downcase_);
  addBind("char-titlecase", &proc_char_titlecase_);
  addBind("char-foldcase", &proc_char_foldcase_);
  addBind("char-ci=?", &proc_char_ci_eq_q_);
  addBind("char-ci<?", &proc_char_ci_lt_q_);
  addBind("char-ci>?", &proc_char_ci_gt_q_);
  addBind("char-ci<=?", &proc_char_ci_lte_q_);
  addBind("char-ci>=?", &proc_char_ci_gte_q_);
  addBind("char-numeric?", &proc_char_numeric_q_);
  addBind("char-whitespace?", &proc_char_whitespace_q_);
  addBind("char-upper-case?", &proc_char_upper_case_q_);
  addBind("char-lower-case?", &proc_char_lower_case_q_);
  addBind("char-title-case?", &proc_char_title_case_q_);
  addBind("char-general-category", &proc_char_general_category_);
  addBind("string-upcase", &proc_string_upcase_);
  addBind("string-downcase", &proc_string_downcase_);
  addBind("string-titlecase", &proc_string_titlecase_);
  addBind("string-foldcase", &proc_string_foldcase_);

}