1 /* gEDA - GPL Electronic Design Automation
2 * gschem - gEDA Schematic Capture
3 * Copyright (C) 1998-2010 Ales Hvezda
4 * Copyright (C) 1998-2010 gEDA Contributors (see ChangeLog for details)
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA
36 #ifdef HAVE_LIBDMALLOC
50 static struct gsubr_t gschem_funcs
[] = {
52 { "gschem-version", 1, 0, 0, g_rc_gschem_version
},
54 { "display-color-map", 0, 1, 0, g_rc_display_color_map
},
55 { "display-outline-color-map", 0, 1, 0, g_rc_display_outline_color_map
},
57 { "net-endpoint-mode", 1, 0, 0, g_rc_net_endpoint_mode
},
58 { "net-midpoint-mode", 1, 0, 0, g_rc_net_midpoint_mode
},
59 { "net-direction-mode", 1, 0, 0, g_rc_net_direction_mode
},
60 { "net-selection-mode", 1, 0, 0, g_rc_net_selection_mode
},
61 { "net-style", 1, 0, 0, g_rc_net_style
},
62 { "bus-style", 1, 0, 0, g_rc_bus_style
},
63 { "pin-style", 1, 0, 0, g_rc_pin_style
},
64 { "line-style", 1, 0, 0, g_rc_line_style
},
65 { "zoom-with-pan", 1, 0, 0, g_rc_zoom_with_pan
},
66 { "action-feedback-mode", 1, 0, 0, g_rc_action_feedback_mode
},
67 { "text-feedback", 1, 0, 0, g_rc_text_feedback
},
68 { "text-display-zoomfactor", 1, 0, 0, g_rc_text_display_zoomfactor
},
69 { "scrollbars", 1, 0, 0, g_rc_scrollbars
},
70 { "scrollbar-update", 1, 0, 0, g_rc_scrollbar_update
},
71 { "object-clipping", 1, 0, 0, g_rc_object_clipping
},
72 { "embed-components", 1, 0, 0, g_rc_embed_components
},
73 { "component-dialog-attributes",1, 0, 0, g_rc_component_dialog_attributes
},
74 { "logging", 1, 0, 0, g_rc_logging
},
75 { "text-size", 1, 0, 0, g_rc_text_size
},
76 { "snap-size", 1, 0, 0, g_rc_snap_size
},
78 { "text-caps-style", 1, 0, 0, g_rc_text_caps_style
},
79 { "logging-destination", 1, 0, 0, g_rc_logging_destination
},
81 { "attribute-name", 1, 0, 0, g_rc_attribute_name
},
82 { "paper-size", 2, 0, 0, g_rc_paper_size
},
83 { "paper-sizes", 3, 0, 0, g_rc_paper_sizes
},
84 { "postscript-font-scale", 1, 0, 0, g_rc_postscript_font_scale
},
86 { "output-type", 1, 0, 0, g_rc_output_type
},
87 { "output-orientation", 1, 0, 0, g_rc_output_orientation
},
88 { "output-color", 1, 0, 0, g_rc_output_color
},
89 { "output-capstyle", 1, 0, 0, g_rc_output_capstyle
},
90 { "image-color", 1, 0, 0, g_rc_image_color
},
91 { "image-size", 2, 0, 0, g_rc_image_size
},
92 { "log-window", 1, 0, 0, g_rc_log_window
},
93 { "log-window-type", 1, 0, 0, g_rc_log_window_type
},
94 { "third-button", 1, 0, 0, g_rc_third_button
},
95 { "middle-button", 1, 0, 0, g_rc_middle_button
},
96 { "scroll-wheel", 1, 0, 0, g_rc_scroll_wheel
},
97 { "net-consolidate", 1, 0, 0, g_rc_net_consolidate
},
98 { "file-preview", 1, 0, 0, g_rc_file_preview
},
99 { "enforce-hierarchy", 1, 0, 0, g_rc_enforce_hierarchy
},
100 { "text-origin-marker", 1, 0, 0, g_rc_text_origin_marker
},
101 { "fast-mousepan", 1, 0, 0, g_rc_fast_mousepan
},
102 { "raise-dialog-boxes-on-expose", 1, 0, 0, g_rc_raise_dialog_boxes_on_expose
},
103 { "continue-component-place", 1, 0, 0, g_rc_continue_component_place
},
104 { "undo-levels", 1, 0, 0, g_rc_undo_levels
},
105 { "undo-control", 1, 0, 0, g_rc_undo_control
},
106 { "undo-type", 1, 0, 0, g_rc_undo_type
},
107 { "undo-panzoom", 1, 0, 0, g_rc_undo_panzoom
},
109 { "drag-can-move", 1, 0, 0, g_rc_drag_can_move
},
111 { "draw-grips", 1, 0, 0, g_rc_draw_grips
},
112 { "netconn-rubberband", 1, 0, 0, g_rc_netconn_rubberband
},
113 { "magnetic-net-mode", 1, 0, 0, g_rc_magnetic_net_mode
},
114 { "sort-component-library", 1, 0, 0, g_rc_sort_component_library
},
115 { "add-menu", 2, 0, 0, g_rc_add_menu
},
116 { "window-size", 2, 0, 0, g_rc_window_size
},
117 { "warp-cursor", 1, 0, 0, g_rc_warp_cursor
},
118 { "toolbars", 1, 0, 0, g_rc_toolbars
},
119 { "handleboxes", 1, 0, 0, g_rc_handleboxes
},
120 { "setpagedevice-orientation", 1, 0, 0, g_rc_setpagedevice_orientation
},
121 { "setpagedevice-pagesize", 1, 0, 0, g_rc_setpagedevice_pagesize
},
122 { "bus-ripper-size", 1, 0, 0, g_rc_bus_ripper_size
},
123 { "bus-ripper-type", 1, 0, 0, g_rc_bus_ripper_type
},
124 { "bus-ripper-rotation", 1, 0, 0, g_rc_bus_ripper_rotation
},
125 { "force-boundingbox", 1, 0, 0, g_rc_force_boundingbox
},
126 { "dots-grid-dot-size", 1, 0, 0, g_rc_dots_grid_dot_size
},
127 { "dots-grid-mode", 1, 0, 0, g_rc_dots_grid_mode
},
128 { "dots-grid-fixed-threshold", 1, 0, 0, g_rc_dots_grid_fixed_threshold
},
129 { "mesh-grid-display-threshold", 1, 0, 0, g_rc_mesh_grid_display_threshold
},
130 { "add-attribute-offset", 1, 0, 0, g_rc_add_attribute_offset
},
131 { "mousepan-gain", 1, 0, 0, g_rc_mousepan_gain
},
132 { "keyboardpan-gain", 1, 0, 0, g_rc_keyboardpan_gain
},
133 { "print-command", 1, 0, 0, g_rc_print_command
},
134 { "select-slack-pixels", 1, 0, 0, g_rc_select_slack_pixels
},
135 { "zoom-gain", 1, 0, 0, g_rc_zoom_gain
},
136 { "scrollpan-steps", 1, 0, 0, g_rc_scrollpan_steps
},
138 /* backup functions */
139 { "auto-save-interval", 1, 0, 0, g_rc_auto_save_interval
},
141 /* general guile functions */
142 { "gschem-print", 1, 0, 0, g_funcs_print
},
143 { "gschem-postscript", 1, 0, 0, g_funcs_postscript
},
144 { "gschem-image", 1, 0, 0, g_funcs_image
},
145 { "gschem-use-rc-values", 0, 0, 0, g_funcs_use_rc_values
},
146 { "gschem-exit", 0, 0, 0, g_funcs_exit
},
147 { "gschem-log", 1, 0, 0, g_funcs_log
},
148 { "gschem-msg", 1, 0, 0, g_funcs_msg
},
149 { "gschem-confirm", 1, 0, 0, g_funcs_confirm
},
150 { "gschem-filesel", 2, 0, 1, g_funcs_filesel
},
151 { "gschem-browse-wiki", 0, 1, 0, g_funcs_browse_wiki
},
153 /* keymapping callbacks */
154 { "file-new-window", 0, 0, 0, g_keys_file_new_window
},
155 { "file-new", 0, 0, 0, g_keys_file_new
},
156 { "file-open", 0, 0, 0, g_keys_file_open
},
157 { "file-script", 0, 0, 0, g_keys_file_script
},
158 { "file-save", 0, 0, 0, g_keys_file_save
},
159 { "file-save-as", 0, 0, 0, g_keys_file_save_as
},
160 { "file-save-all", 0, 0, 0, g_keys_file_save_all
},
161 { "file-print", 0, 0, 0, g_keys_file_print
},
162 { "file-image", 0, 0, 0, g_keys_file_write_png
},
163 { "file-close-window", 0, 0, 0, g_keys_file_close
},
164 { "file-quit", 0, 0, 0, g_keys_file_quit
},
165 { "edit-undo", 0, 0, 0, g_keys_edit_undo
},
166 { "edit-redo", 0, 0, 0, g_keys_edit_redo
},
167 { "edit-select", 0, 0, 0, g_keys_edit_select
},
168 { "edit-copy", 0, 0, 0, g_keys_edit_copy
},
169 { "edit-copy-hotkey", 0, 0, 0, g_keys_edit_copy_hotkey
},
170 { "edit-mcopy", 0, 0, 0, g_keys_edit_mcopy
},
171 { "edit-mcopy-hotkey", 0, 0, 0, g_keys_edit_mcopy_hotkey
},
172 { "edit-move", 0, 0, 0, g_keys_edit_move
},
173 { "edit-move-hotkey", 0, 0, 0, g_keys_edit_move_hotkey
},
174 { "edit-delete", 0, 0, 0, g_keys_edit_delete
},
175 { "edit-rotate-90", 0, 0, 0, g_keys_edit_rotate_90
},
176 { "edit-rotate-90-hotkey", 0, 0, 0, g_keys_edit_rotate_90_hotkey
},
177 { "edit-mirror", 0, 0, 0, g_keys_edit_mirror
},
178 { "edit-mirror-hotkey", 0, 0, 0, g_keys_edit_mirror_hotkey
},
179 { "edit-slot", 0, 0, 0, g_keys_edit_slot
},
180 { "edit-color", 0, 0, 0, g_keys_edit_color
},
181 { "edit-edit", 0, 0, 0, g_keys_edit_edit
},
182 { "edit-text", 0, 0, 0, g_keys_edit_text
},
183 { "edit-lock", 0, 0, 0, g_keys_edit_lock
},
184 { "edit-unlock", 0, 0, 0, g_keys_edit_unlock
},
185 { "edit-linetype", 0, 0, 0, g_keys_edit_linetype
},
186 { "edit-filltype", 0, 0, 0, g_keys_edit_filltype
},
187 { "edit-translate", 0, 0, 0, g_keys_edit_translate
},
188 { "edit-invoke-macro", 0, 0, 0, g_keys_edit_invoke_macro
},
189 { "edit-embed", 0, 0, 0, g_keys_edit_embed
},
190 { "edit-unembed", 0, 0, 0, g_keys_edit_unembed
},
191 { "edit-update", 0, 0, 0, g_keys_edit_update
},
192 { "edit-show-hidden", 0, 0, 0, g_keys_edit_show_hidden
},
193 { "edit-make-text-visible", 0, 0, 0, g_keys_edit_make_visible
},
194 { "edit-find-text", 0, 0, 0, g_keys_edit_find
},
195 { "edit-show-text", 0, 0, 0, g_keys_edit_show_text
},
196 { "edit-hide-text", 0, 0, 0, g_keys_edit_hide_text
},
197 { "edit-autonumber", 0, 0, 0, g_keys_edit_autonumber_text
},
199 { "clipboard-copy", 0, 0, 0, g_keys_clipboard_copy
},
200 { "clipboard-cut", 0, 0, 0, g_keys_clipboard_cut
},
201 { "clipboard-paste", 0, 0, 0, g_keys_clipboard_paste
},
202 { "clipboard-paste-hotkey", 0, 0, 0, g_keys_clipboard_paste_hotkey
},
204 { "buffer-copy1", 0, 0, 0, g_keys_buffer_copy1
},
205 { "buffer-copy2", 0, 0, 0, g_keys_buffer_copy2
},
206 { "buffer-copy3", 0, 0, 0, g_keys_buffer_copy3
},
207 { "buffer-copy4", 0, 0, 0, g_keys_buffer_copy4
},
208 { "buffer-copy5", 0, 0, 0, g_keys_buffer_copy5
},
209 { "buffer-cut1", 0, 0, 0, g_keys_buffer_cut1
},
210 { "buffer-cut2", 0, 0, 0, g_keys_buffer_cut2
},
211 { "buffer-cut3", 0, 0, 0, g_keys_buffer_cut3
},
212 { "buffer-cut4", 0, 0, 0, g_keys_buffer_cut4
},
213 { "buffer-cut5", 0, 0, 0, g_keys_buffer_cut5
},
214 { "buffer-paste1", 0, 0, 0, g_keys_buffer_paste1
},
215 { "buffer-paste2", 0, 0, 0, g_keys_buffer_paste2
},
216 { "buffer-paste3", 0, 0, 0, g_keys_buffer_paste3
},
217 { "buffer-paste4", 0, 0, 0, g_keys_buffer_paste4
},
218 { "buffer-paste5", 0, 0, 0, g_keys_buffer_paste5
},
219 { "buffer-paste1-hotkey", 0, 0, 0, g_keys_buffer_paste1_hotkey
},
220 { "buffer-paste2-hotkey", 0, 0, 0, g_keys_buffer_paste2_hotkey
},
221 { "buffer-paste3-hotkey", 0, 0, 0, g_keys_buffer_paste3_hotkey
},
222 { "buffer-paste4-hotkey", 0, 0, 0, g_keys_buffer_paste4_hotkey
},
223 { "buffer-paste5-hotkey", 0, 0, 0, g_keys_buffer_paste5_hotkey
},
225 { "view-redraw", 0, 0, 0, g_keys_view_redraw
},
226 { "view-zoom-full", 0, 0, 0, g_keys_view_zoom_full
},
227 { "view-zoom-extents", 0, 0, 0, g_keys_view_zoom_extents
},
228 { "view-zoom-in", 0, 0, 0, g_keys_view_zoom_in
},
229 { "view-zoom-out", 0, 0, 0, g_keys_view_zoom_out
},
230 { "view-zoom-in-hotkey", 0, 0, 0, g_keys_view_zoom_in_hotkey
},
231 { "view-zoom-out-hotkey", 0, 0, 0, g_keys_view_zoom_out_hotkey
},
232 { "view-zoom-box", 0, 0, 0, g_keys_view_zoom_box
},
233 { "view-zoom-box-hotkey", 0, 0, 0, g_keys_view_zoom_box_hotkey
},
234 { "view-pan", 0, 0, 0, g_keys_view_pan
},
235 { "view-pan-hotkey", 0, 0, 0, g_keys_view_pan_hotkey
},
236 { "view-pan-left", 0, 0, 0, g_keys_view_pan_left
},
237 { "view-pan-right", 0, 0, 0, g_keys_view_pan_right
},
238 { "view-pan-up", 0, 0, 0, g_keys_view_pan_up
},
239 { "view-pan-down", 0, 0, 0, g_keys_view_pan_down
},
240 { "view-dark-colors", 0, 0, 0, g_keys_view_dark_colors
},
241 { "view-light-colors", 0, 0, 0, g_keys_view_light_colors
},
242 { "view-bw-colors", 0, 0, 0, g_keys_view_bw_colors
},
243 { "page-manager", 0, 0, 0, g_keys_page_manager
},
244 { "page-next", 0, 0, 0, g_keys_page_next
},
245 { "page-prev", 0, 0, 0, g_keys_page_prev
},
246 { "page-new", 0, 0, 0, g_keys_page_new
},
247 { "page-close", 0, 0, 0, g_keys_page_close
},
248 { "page-revert", 0, 0, 0, g_keys_page_revert
},
249 { "page-discard", 0, 0, 0, g_keys_page_discard
},
250 { "page-print", 0, 0, 0, g_keys_page_print
},
251 { "add-component", 0, 0, 0, g_keys_add_component
},
252 { "add-attribute", 0, 0, 0, g_keys_add_attribute
},
253 { "add-attribute-hotkey", 0, 0, 0, g_keys_add_attribute_hotkey
},
254 { "add-net", 0, 0, 0, g_keys_add_net
},
255 { "add-net-hotkey", 0, 0, 0, g_keys_add_net_hotkey
},
256 { "add-bus", 0, 0, 0, g_keys_add_bus
},
257 { "add-bus-hotkey", 0, 0, 0, g_keys_add_bus_hotkey
},
258 { "add-text", 0, 0, 0, g_keys_add_text
},
259 { "add-line", 0, 0, 0, g_keys_add_line
},
260 { "add-line-hotkey", 0, 0, 0, g_keys_add_line_hotkey
},
261 { "add-box", 0, 0, 0, g_keys_add_box
},
262 { "add-box-hotkey", 0, 0, 0, g_keys_add_box_hotkey
},
263 { "add-picture", 0, 0, 0, g_keys_add_picture
},
264 { "add-picture-hotkey", 0, 0, 0, g_keys_add_picture_hotkey
},
265 { "add-circle", 0, 0, 0, g_keys_add_circle
},
266 { "add-circle-hotkey", 0, 0, 0, g_keys_add_circle_hotkey
},
267 { "add-arc", 0, 0, 0, g_keys_add_arc
},
268 { "add-arc-hotkey", 0, 0, 0, g_keys_add_arc_hotkey
},
269 { "add-pin", 0, 0, 0, g_keys_add_pin
},
270 { "add-pin-hotkey", 0, 0, 0, g_keys_add_pin_hotkey
},
271 { "hierarchy-down-schematic", 0, 0, 0, g_keys_hierarchy_down_schematic
},
272 { "hierarchy-down-symbol", 0, 0, 0, g_keys_hierarchy_down_symbol
},
273 { "hierarchy-up", 0, 0, 0, g_keys_hierarchy_up
},
274 { "hierarchy-documentation", 0, 0, 0, g_keys_hierarchy_documentation
},
275 { "attributes-attach", 0, 0, 0, g_keys_attributes_attach
},
276 { "attributes-detach", 0, 0, 0, g_keys_attributes_detach
},
277 { "attributes-show-name", 0, 0, 0, g_keys_attributes_show_name
},
278 { "attributes-show-value", 0, 0, 0, g_keys_attributes_show_value
},
279 { "attributes-show-both", 0, 0, 0, g_keys_attributes_show_both
},
280 { "attributes-visibility-toggle", 0, 0, 0, g_keys_attributes_visibility_toggle
},
281 { "options-text-size", 0, 0, 0, g_keys_options_text_size
},
282 { "options-snap-size", 0, 0, 0, g_keys_options_snap_size
},
283 { "options-scale-up-snap-size", 0, 0, 0, g_keys_options_scale_up_snap_size
},
284 { "options-scale-down-snap-size",0, 0, 0, g_keys_options_scale_down_snap_size
},
285 { "options-action-feedback", 0, 0, 0, g_keys_options_afeedback
},
286 { "options-grid", 0, 0, 0, g_keys_options_grid
},
287 { "options-snap", 0, 0, 0, g_keys_options_snap
},
288 { "options-rubberband", 0, 0, 0, g_keys_options_rubberband
},
289 { "options-magneticnet", 0, 0, 0, g_keys_options_magneticnet
},
290 { "options-show-log-window", 0, 0, 0, g_keys_options_show_log_window
},
291 { "options-show-coord-window", 0, 0, 0, g_keys_options_show_coord_window
},
292 { "help-about", 0, 0, 0, g_keys_help_about
},
293 { "help-hotkeys", 0, 0, 0, g_keys_help_hotkeys
},
294 { "help-component", 0, 0, 0, g_keys_hierarchy_documentation
},
295 { "misc-misc", 0, 0, 0, g_keys_misc
},
296 { "misc-misc2", 0, 0, 0, g_keys_misc2
},
297 { "misc-misc3", 0, 0, 0, g_keys_misc3
},
298 { "cancel", 0, 0, 0, g_keys_cancel
},
300 /*help functions for generating netlists*/
301 { "get-selected-filename", 0, 0, 0, g_get_selected_filename
},
302 { "get-selected-component-attributes", 0, 0, 0, g_get_selected_component_attributes
},
304 { NULL
, 0, 0, 0, NULL
} };
306 /*! \brief Define a hook.
307 * \par Function Description
308 * Creates a Guile new hook with \a n_args arguments, and binds it to
309 * the variable \a name, returning the newly created hook.
311 * \param n_args Number of arguments the hook should take.
312 * \param name Name of variable to bind the hook to.
314 * \return the newly-created hook.
317 create_hook (const char *name
, int n_args
)
319 SCM hook
= scm_make_hook (scm_from_int (n_args
));
320 scm_c_define (name
, hook
);
321 return scm_permanent_object (hook
);
324 /*! \brief Register function with Scheme.
325 * \par Function Description
326 * Creates <B>subr</B> objects to make <B>g_rc_*</B> functions that are defined * #g_rc.c, #g_keys.c and #g_funcs.c visible to Scheme.
328 void g_register_funcs (void)
330 struct gsubr_t
*tmp
= gschem_funcs
;
332 while (tmp
->name
!= NULL
) {
333 scm_c_define_gsubr (tmp
->name
, tmp
->req
, tmp
->opt
, tmp
->rst
, tmp
->fnc
);
338 scm_c_define_gsubr ("add-attribute-to-object", 5, 0, 0, g_add_attrib
);
339 scm_c_define_gsubr ("get-object-attributes", 1, 0, 0, g_get_object_attributes
);
340 scm_c_define_gsubr ("get-object-bounds", 3, 0, 0, g_get_object_bounds
);
341 scm_c_define_gsubr ("get-object-pins", 1, 0, 0, g_get_object_pins
);
342 scm_c_define_gsubr ("get-pin-ends", 1, 0, 0, g_get_pin_ends
);
343 scm_c_define_gsubr ("set-attribute-text-properties!", 7, 0, 0, g_set_attrib_text_properties
);
344 scm_c_define_gsubr ("set-attribute-value!", 2, 0, 0, g_set_attrib_value_x
);
345 scm_c_define_gsubr ("add-component-at-xy", 7, 0, 0, g_add_component
);
346 scm_c_define_gsubr ("get-objects-in-page", 1, 0, 0, g_get_objects_in_page
);
347 scm_c_define_gsubr ("get-current-page", 0, 0, 0, g_get_current_page
);
349 add_component_hook
= create_hook ("add-component-hook", 1);
350 add_component_object_hook
= create_hook ("add-component-object-hook", 1);
351 rotate_component_object_hook
= create_hook ("rotate-component-object-hook", 1);
352 mirror_component_object_hook
= create_hook ("mirror-component-object-hook", 1);
353 copy_component_hook
= create_hook ("copy-component-hook", 1);
354 move_component_hook
= create_hook ("move-component-hook", 1);
355 deselect_component_hook
= create_hook ("deselect-component-hook", 1);
356 deselect_net_hook
= create_hook ("deselect-net-hook", 1);
357 deselect_all_hook
= create_hook ("deselect-all-hook", 1);
358 select_component_hook
= create_hook ("select-component-hook", 1);
359 select_net_hook
= create_hook ("select-net-hook", 1);
361 add_pin_hook
= create_hook ("add-pin-hook", 1);
362 mirror_pin_hook
= create_hook ("mirror-pin-hook", 1);
363 rotate_pin_hook
= create_hook ("rotate-pin-hook", 1);
364 add_attribute_hook
= create_hook ("add-attribute-hook", 1);
365 new_page_hook
= create_hook ("new-page-hook", 1);
366 complex_place_list_changed_hook
= create_hook ("complex-place-list-changed-hook", 1);