User Tools

Site Tools


geda:hse_howto

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision Both sides next revision
geda:hse_howto [2007/05/24 22:27]
127.0.0.1 external edit
geda:hse_howto [2007/05/24 22:27] (current)
127.0.0.1 external edit
Line 1: Line 1:
 +====== Hooks/​Scheme Extension HOWTO ======
 +<​code>​gEDA - GPL Electronic Design Automation
  
 +HOOKS AND SCHEME EXTENSION IN GSCHEM
 +==================================== ​
 +
 +Copyright (C) 2000 Stefan Petersen
 +
 +This program is free software; you can redistribute it and/or modify
 +it under the terms of the GNU General Public License as published by
 +the Free Software Foundation; either version 2 of the License, or
 +(at your option) any later version.
 +
 +This program is distributed in the hope that it will be useful,
 +but WITHOUT ANY WARRANTY; without even the implied warranty of
 +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ​ See the
 +GNU General Public License for more details.
 +
 +You should have received a copy of the GNU General Public License
 +along with this program; if not, write to the Free Software
 +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 +
 +
 +Introduction
 +------------
 +gschem has a scheme interpreter (called Guile) built in. Though not 
 +complete, there are extensions to this interpreter to get access to 
 +different parts of the schematic.
 +
 +There are a couple of other scheme extensions available that will not be 
 +described here. They belong mainly to rc-files (resource files in 
 +gEDA programs are really scheme scripts) and to the keymapping system ​
 +(described in separate keymapping documentation).
 +
 +The rest I will try to describe here. 
 +
 +
 +Scheme functions
 +----------------
 +There are two function available for handling attributes in the schematic.
 +
 +* get-attribute-name-value
 +Inparameter ​ : an attribute
 +Outparameter : a pair with the name of the attribute as string in the 
 +        car element and the value of the attribute in the cdr 
 +        ​element.
 +Description ​ : Simply an accessor to the information hidden in the type
 +        ​attribute. The functionality of this is placed in libgeda
 +        since the C-type ATTRIBUTE is defined there.
 +
 +* set-attribute-value!
 +Inparameter ​ : an attribute and a string.
 +Outparameter : undefined.
 +Description ​ : Sets a new value to an attribute. The attribute must 
 +               be defined, the function can't create a new attribute. ​
 +        ​Defined both in gschem and libgeda, mainly because ​
 +        where different variables and information are available.
 +
 +
 +Hooks
 +-----
 +Hooks are a way to define functions that will be called during different
 +part of a programs execution. In gschem there are (currently) three 
 +different hooks available:
 +* add-component-hook
 +* copy-component-hook
 +* move-component-hook
 +
 +As their name indicate, they are called at different occasions. When 
 +you add a component add-component-hook is called, etc.
 +
 +To add a function to be called you simply use the Guile funtion add-hook!.
 +An example; to run the function auto-uref when you add a component you
 +simply add the following line, preferrably in ${HOME}/​.gEDA/​gschemrc:​
 +(add-hook! add-component-hook auto-uref)
 +
 +The function to be called from a hook (for example auto-uref above) has 
 +to accept one parameter, a list of attributes.
 +
 +A small example that prints all attributes on a component to be placed:
 +
 +(define (print-all-attributes attribute-list)
 +  (foreach (lambda (attribute) (display attribute)) attribute-list))
 +
 +
 +How to use this
 +---------------
 +The most complete example utilizing all of the above functions are in fact
 +the auto-uref scheme script that currently is part of the gschem distribution.
 +You can find it <where gschem is installed>/​share/​gEDA/​scheme/​auto-uref.scm.
 +Uninstalled it's available at gschem/​scheme/​auto-uref.scm
 +
 +All components have a reference designator that must be unique so 
 +gnetlist can handle it properly. By automatically assigning a number
 +to each instance of a component when you place and copy it, you can 
 +simplify the naming operation.
 +
 +All components has, per default, an uref attribute, for example uref=R?​. ​
 +The letter varies with component type. The auto-uref script enumerates ​
 +uref based on what prefix the component has and assigns a number. ​
 +
 +For example, the first component you place has per default uref=U? gets 
 +the attribute uref=U1. Next component with uref=U? gets uref=U2 and so on.
 +
 +To be able to use the auto-uref script you simply add two lines in
 +${HOME}/​.gEDA/​gschemrc. They are:
 +(load "<​where gschem is installed>/​share/​gEDA/​scheme/​auto-uref.scm"​)
 +(add-hook! add-component-hook auto-uref)
 +
 +If you want auto enumeration to work when you copy the component too, you 
 +simply add the following line:
 +(add-hook! copy-component-hook auto-uref)
 +
 +Good luck!
 +
 +</​code>​
geda/hse_howto.txt ยท Last modified: 2007/05/24 22:27 by 127.0.0.1