User Tools

Site Tools


As an exercise let's do something easy, like adding an action to PCB.

Before you start coding take a look at: Build system It is essential that you have a working build system.

When working on the source code of PCB then please make use of lots and lots of comments (preferably doxygen style). In trying to understand the code I was very grateful for every piece of comment the developer had written.

First make a file called example.c and add:

 * =====================================================================================
 *                                      COPYRIGHT
 *  Example action implementation for PCB.
 *  Copyright (C) 2015 Robert Zeegers
 *  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
 *  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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 *  \File:   example.c
 *  \Brief:  Example on how to implement a action in the PCB program.
 *  \par Description
 *   Example action implementation for PCB, interactive printed circuit board design
 *  \copyright (C) 2015 Robert Zeegers
 *  \Version:  1.0
 *  Created:  24/07/15
 *  \Todo:     nothing
 *  \Bug:      not that I know of
 * =====================================================================================
/* First thing todo is include global.h  */
/* This will automatically also include const.h and macro.h */
#include "global.h"
/* Second we include hid.h because we want to register our action to the HID */
#include "hid.h"
/* We are going to add an action and therefore we want it to show-up in the PCB manual, */
/* so we add some documentation comments */
/* For the documentation style see the "extract-docs" perl script in the doc directory */
/* %start-doc actions DoSilly
   This function doesn't do anything useful.
   @end example
   %end-doc */
/* All action entry functions must have the same syntax as defined in */
/* typedef struct HID_Action (hid.h)  */
static int
ExampleDo (int argc, char **argv, int x, int y)
    /* It should do something, so let's do something silly */
    /* Let's write a Dutch songtext to the Message Log window */
    /* The struct HID is defined in hid.h */
    /* and the variable gui is made available there by "extern HID *gui;" */
    /* First we check if we have a gui. */
    if( 1 == gui->gui )
        /*  if we have one let's write the songtext */
        gui->log (_("Iedereen is van de wereld en de wereld is van iedereen!\n"));
/* Now we have to make an action list. */
/* Here we make the connection between our command "DoSilly()" and */
/* the actual function which should be executed ExampleDo().*/
static HID_Action exampledo_action_list[] = {
  {"DoSilly", "Example action", ExampleDo, "Always provide some help", "DoSilly()"}
/* Next a macro to register the action in the HID */
/* Note the missing ; at the end, that's correct ;-) */
REGISTER_ACTIONS (exampledo_action_list)

For an explanation on the REGISTER_ACTION macro see paragraph REGISTER.

Next we need to add our file to the build system.
We do that in the file
Open and look for the variable PCB_SRCS and add the file example.c there like the others.

Clean your build directory by doing:

make distclean

Then do:


Now our file is in

Next do:




In the PCB program type “:DoSilly()” and watch the message log window.

And do check out the pcb manual in doc/pcb.pdf search for “DoSilly”

geda/pcb_adding_a_core_action.txt · Last modified: 2018/01/28 10:21 by cparker