Table of Contents

OOBDTemple - The OOBD Source Code Template Tool

Why another template tool?

There are virtual dozens of template tools available, but they all take a template and some data and create the output out of it.

We were looking for something instead with which we can write and test source code as usual, then identify the pieces of the code inside one source file, which could be used also in similar cases. These common parts we want to extract as a template and import and update them into other source files.

The Princible

Image, you have a source code:

overall initialization

some specific variable initialization

a generic doTo loop:

for (i=0 ...

            some specific tasks in here
}

specific shutdown

generic shutdown

Now image you put some markers into that source, which tells, which parts of the code are generic. The specific parts of the code stays unmarked.

//>>>> oobdtemple >>>>

overall initialization

//<<<< oobdtemple <<<<

some specific variable initialization

//>>>> oobdtemple >>>>

a generic doTo loop:

for (i=0 ...

            //<<<< oobdtemple <<<<

            some specific tasks in here

            //>>>> oobdtemple >>>>

}

//<<<< oobdtemple <<<<

specific shutdown

//>>>> oobdtemple >>>>

generic shutdown

//<<<< oobdtemple <<<<

As you can see, the generic parts are enclosed into an »» oobdtemple »» code «« oobdtemple «« pair.

But to allow nested template code, the markers needs to have a identifier, to which template they belong to.

Now the markers belongs all to the template called base:

//>>>> oobdtemple base >>>>

overall initialization

//<<<< oobdtemple base <<<<

some specific variable initialization

//>>>> oobdtemple base >>>>

a generic doTo loop:

for (i=0 ...

            //<<<< oobdtemple base <<<<

            some specific tasks in here

            //>>>> oobdtemple base >>>>

}

//<<<< oobdtemple base <<<<

specific shutdown

//>>>> oobdtemple base >>>>

generic shutdown

//<<<< oobdtemple base <<<<

That would already work so far, but it might become complicated, which opening marker now exactly belongs to which closing marker. So for that reason the markers can be named. These names are optional, but if used, they must align to each other.

//>>>> oobdtemple base init >>>>

overall initialization

//<<<< oobdtemple base init <<<<

some specific variable initialization

//>>>> oobdtemple base loop>>>>

a generic doTo loop:

for (i=0 ...

            //<<<< oobdtemple base <<<<

            some specific tasks in here

            //>>>> oobdtemple base >>>>

}

//<<<< oobdtemple base loop <<<<

specific shutdown

//>>>> oobdtemple base shutdown >>>>

generic shutdown

//<<<< oobdtemple base shutdown <<<<

The oobdtemple Commands

Above we've seen how a source code amended with markers looks like. Now lets see how oobdtemple deals with that:

First we take something simple

oobdtemple --struct : Show template structure

oobdtemple template_name --struct file

Prints the actual template struct in <file> to stdout. Helpful for finding errors when oobdtemple complains about template structure differences

oobdtemple --extract : Extract template

     oobdtemple template_name --extract file

Prints the actual template content in <file> to stdout. Helpful to generate a fresh template file out of an given soure file.


Now we start to copying templates in and out of files:

oobdtemple --update : Update source file

oobdtemple template_name --update sourcefile templatefile

Updates the actual template content of <templatefile> into <sourcefile>. Stops, if template structure between <sourcefile> and <templatefile> is different

oobdtemple --writetemplate : Update template file

oobdtemple template_name --writetemplate sourcefile templatefile

Saves actual template content of <sourcefile> to <templatefile>. Stops, if template structure between <sourcefile> and <templatefile> is different


This were the commands for evaluate or modifying files. The next two commands should be placed into the make process to make sure that the template fits to the content of the source file to work with.

oobdtemple --check : Check source code and template file consistency

oobdtemple template_name --check sourcefile templatefile

Checks, if the template of <templatefile> is 1:1 included in <sourcefile>. Exits with exitcode 1 if not, otherways with 0

But as an inconsistency between source code and template can easily happen during the development phase, there's a special command to just give a warning but to not stop the make process:

oobdtemple --develop : Warns for source code and template file consistency

oobdtemple template_name --develop sourcefile templatefile

Same as –check, but just writes warnings to stderr and exit with 0 to not stop a make process

The oobdtemple Structure checks

As it obviously can create a lot of damage in the source codes, when you try to merge a template structure into a source, which has a complete different template structure, oobdtemple does a few checks first before merging files. If one of these tests fails, the operation stops and the files remains untouched: