December 8, 2011

Better X11 font handling, stepped instances, GDS import script. Plot command can write a multi-layer gerber file (can be split into seperate layer files with gerbsplit script). Postscript output has very flexible page size options (uses either papersize name like ":Pletter", or desired size ":P8.5x11"). All code uses ANSI prototypes. Mitred lines for microwave transmission lines (see :h option of add command). Window titlebar now tracks currently edited cell name.

May 9, 2010

A lot has changed. Piglet has fine-grained autosave and cell recovery (like vi). More ENV variables. Postscript now does filling and line types. Pigrc startup file can source ENV vars and DEFine macros. Parenthesized numerical expressions are evaluated in parser. Compiles -Wall clean on 64 bit platforms.

September 10, 2008

Cut/Paste now works. Large number of ENV variables control default behaviors. DUMP and PLOT now have :F fit option. DUMP has :T<.gif|.ppm|.png|...> argument to save files in various formats. DUMP has :R reverse video option to save ink.

Piglet now lives in a git repository. If you have a copy of git installed on your local machine, you can copy the entire development tree with the command "git clone yourpath". Alternative, you can pull across tar or zip copies of the most recent version.

Release 0.95e August 15, 2008

The Piglet parser now executes UNIX commands using the PATH variable. If a command is typed which is not an internal Piglet command then it will be searched for in the PATH definition. If a UNIX executable is found in the PATH will be run with the standard output sent to the Piglet text window. Any variables that you SET inside piglet will be accessible inside the subshell with $VARNAME.

The SET command is implemented. Piglet now inheirits environment variables from its parent process. SET with no arguments will print all ENV variables. SET with one argument will print the value of the named variable. SET with two arguments will set the value of the named variable.

WIN :Z redraws the last window.

Commas are now optional between coords. You can type "ADD R1 0 0 1 1;"

SMA now has a recursive option :R and a point option :P. :P is the default, but :R lets you smash many things at once by region.

Release 0.95 January 13, 2007

Biggest new feature is unlimited UNDO/REDO. Each cell has its own pair of UNDO/REDO stacks. Works with all commands that change the drawing. A bit-for-bit copy of the cell database structure is pushed on the UNDO stack after every change. Changes to cells are automatically detected with a simple hash function.

Clicking on a zoom origin with mouse middle button and dragging right or up will zoom in. Left or down zooms out.

Better stipple and fill pallete with much expanded default PROCESS file. EQUate command now has :F command for specifying fill patterns. All stipples have been defined so that stipples of different colors are offset and do not overlay each other.

Better line and arc drawing. The old construction lines have been removed so each element is a complete polygonal outline.

Release 0.94 October 19, 2006

STRetch command works with regions. CHA applied to TEXT, NOTES puts the selected text into the command line history buffer. DEL by region (:R) works. Better HELp messages (gives syntax synopsis). Spent some time with the valgrind program closing several memory leaks. Valgrind is great!

ADD NOTE and ADD TEXT have :J options to add text anchored to the N,S,E,W,NE,NW,SE,SW sides/corners or "C" for centered.

Mouse wheel zooms and pans even while adding a line or polygon.

Fixed subtle clipping problem with Sutherland/Hodgman algorithm.

Text is now filled properly with "WIN :O".

Added RAW mode for tokenizer as a step towards on-screen text editing.

Added GPL "COPYING" file and initial start-up screen license notice.

Makefile now builds dependencies automatically.

SAVE code behaves more nicely when there is a permissions problem in the cells directory.

Removed redundant manpage installation code in ./man/makemans script.

Release 0.92 August 25, 2006

STRetch command can change vertices of arcs, lines, polys, rects and adjust circle diameters. It defaults to MOV behavior for text, notes and instances. STRetch by region will be in next release.

Both MOVe and COPy have :R and :P options to allow move and copy by region. Default is by point.

WIN :O toggles polygon filling. All postscript output goes through the Cohen-Sutherland clipper routine so that zoomed drawings are efficiently represented in the postscript file.

EQUATE command fully implemented. Process files are now properly read allowing layer names, colors, line types, plotting pen assignments to be defined in PROCDATA.P.

WIN :O toggles polygon filling. All postscript output goes through the Cohen-Sutherland clipper routine so that zoomed drawings are efficiently represented in the postscript file.

WRAP is working. SMAsh is working. If wrapped region is not named, a "NONAME_nnn" instance is automatically created. Wrapped instances can be rotated, scaled and mirrored. When a cell is saved, the anonymous NONAME instances are automatically SMAshed to disk.

TIME/DATE TSLANT and FSIZE commands working.

DIStance command now prints out angle in degrees between two points.

Piglet now searches a PATH for all startup files, and can be started from any directory. Default PATH is .:./.pigrc:~/.pigrc:/usr/local/lib/piglet:/usr/lib/piglet.

Release 0.8 May 25, 2005

Piglet now supports Arcs! An Arc is added with "ADD A<layer> xy1 xy2 xy3". The first two coordinates are the endpoints, and the third is a point on the curve.

Rectangles, Circles, Arcs and Lines all support the :W<width> option. This creates an object drawn with a line of <width>. Please note that the finished object will be <width> wider and taller than an object drawn with zero width.

Filling has been added to rectangles and polygons and circles. The old Cohen-Sutherland vector clipper has been replaced by a Sutherland-Hodgman polygon clipping pipeline (see clipl() in the file draw.c). Shapes are filled by stipples drawn from a 3x3 pixel grid so that colors blend when overlapped. Now that polygon filling is properly handled, it will be an easy job to add the EQUate and PROcess file commands to release 0.9 so that fill colors and patterns can be assigned to specific layers.

I upgraded my laptop to Fedora Core III in early February and this exposed several undeclared/uninitialized variables. I suppose the old compiler was automatically initializing variables to zero? I'm now using the "-Wall" gcc compiler flag for maximum compiler error-checking. After several hours fixing header files and cleaning up the code Piglet now compiles error-free with maximum checking!

Version 0.7 had a problem with the SHOW settings being held in a global variable. SHOW settings are now stored in memory along with the definitions for each component. This allows every cell to have an individual SHOW setting, so that only the cells being worked on have to be unlocked, making it less likely that a critical cell gets accidently modified. All SHOW settings default to visible and non-modifiable on initial read-in.

There were some pointer crash problems in the obscure case where one is editing a cell and then does an archive RETrieve of the same cell. The editor used to save a pointer to the current cell, push an edit stack and read in the archive commands. The archive would proceed to delete the cell and then redefine it. When the stack got popped, the saved pointer would be undefined and piglet would crash. Now we save the name of the cell instead, and re-look it up after any RET, INP, or EDI operation.

Release 0.7 (December 8, 2004)

Piglet now does nested edits. This means that you can type EDIT at any point and jump to any cell including a cell inside the device you are currently editing. When you exit the nested edit, you pop back to the cell you were previously editing. The only constraint is that no cell may appear in the edit stack more than once. Nested edits are very convenient for working on cells which have mutual dependancies. The next planned enhancement in this regard is "edit-in-place" which will allow you to click on a sub-cell and edit it in the context of the current device. Probably something for release 0.8.

The DUMP command now automatically tops the graphics window. It was really a job to get the X event queue flushed so that the window was definitely drawn before dumping. If anyone understands this stuff better please clean up the code. I'm sure I made it more complicated than it needs to be.

CHAnge now allows the modification of text/note strings and modification of layer number and any standard options for all components. Scale, rotation and shearing can be changed for text/notes and instances.

Several really tricky bugs were hunted down which involved how the editor behaved when cells were purged from memory, leaving a pointer to a non-existant cell. The bottom line - always check to see if a db_tab pointer is non-NULL before trying to reference it! If it is NULL, then have some logical and graceful policy for dealing with it.

A robust method was introduced to disallow any edit operations that would introduce infinite recursion in the editor. When adding a component X to a drawing Y, Piglet now checks to make sure that Y never appears anywhere in X's hierarchy. This is now done by the db_contains(Y,X) routine as a check before adding instances.

Fixed a bug in which adding a new cell to a drawing could have a side effect of changing either the grid or window setting. This was due to global variables holding the edit state, which was totally inadequate when recursively adding a large new hierarchy. The solution was to store all display state variables in the cell definition structures.

The GRID now supports any integer multiple of 1/(RESOLUTION) point spacing. This opens the way for easy implementation of the UNITS command, which now becomes simply a policy decision for what to do when the UNITS are changed in mid-edit. Currently the RESOLUTION is set to 100 by default. I'm inclined to let each device have an independant UNITs and RESolution which are save with the device definition file. This way the user can either use the same UNITs everywhere, or have the option of defining, for example, metric screws in 100ths of centimeters and english screws in 1/1000ths of inches.

Wanted to stay on a monthly release schedule, and felt that significant improvements had been made. Didn't yet get to STRetch, EQUate and GROUP, but did get CHAnge, nested EDIts and customizable MENUs working.

Release 0.6 (November 10, 2004)

MOVe, COPy, DELete, UNDo, POInt, LISt, DISTance are working now. The next big commands for version 0.7 will be STRetch and CHAnge.

PLOt now creates a letter-sized postscript file and automatically fits the drawing to either landscape or portrait mode. The internal code allows setting arbitrary paper sizes, so it will be easy to add options to PLOt to support other paper sizes such as A4, legal, etc.

The on-screen menu is working and is dynamically settable from a text definition file. Mouse picks on the menu items are correctly recognized and inserted into the parse stream. It is now possible to do nearly every edit function with only mouse picks. The main exception is typing instance names at the keyboard when adding a new component to the drawing.

The UNIts command functionality is in place. Currently, the resolution is hardwired to 100, but it will be an easy job now to make it dynamically settable.

The man pages are much more complete now. Every working command has a page which describes all the valid options. In many cases there is an IMPLEMENTATION section which describes missing features and gives hints for how they can be easily implemented.

The goal for 0.7 will be CHAnge, GROup, a fully working MENU, nested EDIts, and process file support with EQUate.

Release 0.5 (October 10, 2004)

Version 0.5 is very stable (in my experience) and is able to read and display very large archive files. The matrix math for managing the nested cell definitions and the database routines are all very stable.

The ADD, GRId, SAVe, PLOt, WINdow, SHOw, RETrieve, ARChive and DUMP commands are all fully working.

Piglet 0.5 does not yet have several key interactive commands implemented, such as MOVe, DELete, and COPy. This makes it difficult to recommend Piglet for general use. As of version 0.5 IDEntify is working and the framework for interactive cell selection is in place.

Rick Walker (rick_walker AT omnisterra DOT com)