Just to show off what I have been working. The two attached files include a script for reading in a schematic file. The second is my attempt to document the api that either exists or that I have been implementing. Comments, suggestions are always welcome. If we can figure out the pcad file formats I would be happy to modify or tweek the api for the sake of translating the pcad files. Depending on interest I can do a code release either (as i had planned) after I have the vhdl, spice, verilog netlist formats, or earlier (after i complete the basic schematic, symbol file io migration to guile) and a trivial translation application. Steve Meier Dan McMahill wrote: > Steven Ball wrote: > >> The PDIF writer seems to be able to convert anything to an ASCII output. >> >> http://snurkle.net/~hamster/geda/ >> > > By any chance does the documentation for PCAD have details on that > format? If not, it looks like it could largely be figured out. > > >> I'll dig around and see if I can find a .pcb file to convert and post >> as well. Let me know what you think and how I can be of help. >> > > just to clarify, pcad uses .pcb too as the suffix. The format you'll > get there is similar in style to the schematics. > > > > > _______________________________________________ > geda-user mailing list > geda-user@xxxxxxxxxxxxxx > http://www.seul.org/cgi-bin/mailman/listinfo/geda-user > >
;;; AKEDA - Alaskan Electronic Design Automation
;;; aknetlist - GNU Netlist
;;; Copyright (C) 2007 Stephen F Meier
;;;
;;; 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.
;; Inport an AKEDA style schematic as a page in libakeda
(use-modules (srfi srfi-13))
(use-modules (ice-9 popen))
(use-modules (ice-9 rdelim))
(define OBJ_LINE "L" );
(define OBJ_BOX "B" );
(define OBJ_PICTURE "G" );
(define OBJ_CIRCLE "V" );
(define OBJ_NET_SEGMENT "N" );
(define OBJ_BUS_SEGMENT "U" );
(define OBJ_COMPLEX "C" );
(define OBJ_TEXT "T" );
(define OBJ_PIN "P" );
(define OBJ_ARC "A" );
(define OBJ_ROUTE "R" );
(define OBJ_THRU_HOLE "H" );
(define OBJ_BUSRIPPER "S" );
(define OBJ_EMPTY "0" );
(define OBJ_VERSION "v" );
(define OBJ_PLACEHOLDER "X" );
(define STARTATTACH_ATTR "{" );
(define ENDATTACH_ATTR "}" );
(define START_EMBEDDED "[" );
(define END_EMBEDDED "]" );
(define (akeda-sch-read sch-filename tl_bool)
(let ((port (open-input-file sch-filename)))
(define my_page (ak-toplevel-new-page sch-filename tl_bool))
(define buffer "")
(define buf_str "")
(define my_line "")
(define new_obj_smob "")
(define attach_obj_smob "")
(define embed_obj_smob "")
(define str_list "")
(define my_string "")
(define index 0)
(define num_lines 0)
(define selected "0")
(define visible "0")
(define locked "0")
(define schematic_attrib_type "1")
(define symbol_attrib_type "0")
(define state_attach #f)
(define state_embed #f)
(define state_text #f)
(define x2 0)
(define y2 0)
(while (not (eof-object? buf_str))
(set! buffer (%read-line port))
(set! buf_str (car buffer))
(if (not (eof-object? buf_str))
(begin
(set! my_line (string-split buf_str #\space))
(if (string=? (list-ref my_line 0) STARTATTACH_ATTR)
(begin
(set! state_attach #t)
(set! attach_obj_smob new_obj_smob)
)
)
(if (string=? (list-ref my_line 0) ENDATTACH_ATTR)
(begin
(set! state_attach #f)
)
)
(if (string=? (list-ref my_line 0) START_EMBEDDED)
(begin
(set! state_embed #t)
(set! embed_obj_smob new_obj_smob)
)
)
(if (string=? (list-ref my_line 0) END_EMBEDDED)
(begin
(set! state_embed #f)
)
)
(if (string=? (list-ref my_line 0) OBJ_TEXT)
(begin
(set! new_obj_smob (ak-object-new OBJ_TEXT selected visible locked))
(ak-text-new new_obj_smob (list-ref my_line 1) (list-ref my_line 2) (list-ref my_line 4) (list-ref my_line 8)
(list-ref my_line 7) (list-ref my_line 9) (list-ref my_line 5) (list-ref my_line 6) (list-ref my_line 3))
(set! index 0)
(set! num_lines (list-ref my_line 9))
(set! num_lines (string->number (list-ref my_line 9)))
(set! str_list (make-list num_lines))
(while (< index num_lines)
(begin
(set! my_string (car (%read-line port)))
(display my_string)
(display "\n")
(list-set! str_list index my_string)
(set! index (+ index 1))
)
)
(set! my_string (string-join str_list " "))
(ak-text-set-string new_obj_smob my_string)
(if state_attach
(begin
(ak-object-attrib-new attach_obj_smob new_obj_smob schematic_attrib_type)
)
(begin
(if state_embed
(begin
(ak-complex-attach-object embed_obj_smob new_obj_smob)
(ak-object-attrib-new embed_obj_smob new_obj_smob symbol_attrib_type)
)
(begin
(ak-page-attach-object my_page new_obj_smob)
)
)
)
)
)
)
(if (string=? (list-ref my_line 0) OBJ_BUS_SEGMENT)
(begin
(set! new_obj_smob (ak-object-new OBJ_BUS_SEGMENT selected visible locked))
(ak-segment-new new_obj_smob (list-ref my_line 1) (list-ref my_line 2) (list-ref my_line 3) (list-ref my_line 4) "1")
(ak-page-attach-object my_page new_obj_smob)
)
)
(if (string=? (list-ref my_line 0) OBJ_COMPLEX)
(begin
(set! new_obj_smob (ak-object-new OBJ_COMPLEX selected visible locked))
(ak-complex-new new_obj_smob (list-ref my_line 1) (list-ref my_line 2) "0" "0" "0" (list-ref my_line 6))
(ak-page-attach-object my_page new_obj_smob)
)
)
(if (string=? (list-ref my_line 0) OBJ_NET_SEGMENT)
(begin
(set! new_obj_smob (ak-object-new OBJ_NET_SEGMENT selected visible locked))
(ak-segment-new new_obj_smob (list-ref my_line 1) (list-ref my_line 2) (list-ref my_line 3) (list-ref my_line 4) "0")
(ak-page-attach-object my_page new_obj_smob)
)
)
(if (string=? (list-ref my_line 0) OBJ_ARC)
(begin
(set! new_obj_smob (ak-object-new OBJ_ARC selected visible locked))
(ak-arc-new new_obj_smob (list-ref my_line 1) (list-ref my_line 2) (list-ref my_line 1) (list-ref my_line 2)
(list-ref my_line 1) (list-ref my_line 2) (list-ref my_line 1))
(if state_embed
(begin
(ak-complex-attach-object embed_obj_smob new_obj_smob)
)
(begin
(ak-page-attach-object my_page new_obj_smob)
)
)
)
)
(if (string=? (list-ref my_line 0) OBJ_BOX)
(begin
(set! new_obj_smob (ak-object-new OBJ_BOX selected visible locked))
(set! x2 (+ (string->number (list-ref my_line 1)) (string->number (list-ref my_line 3))))
(set! y2 (+ (string->number (list-ref my_line 2)) (string->number (list-ref my_line 4))))
(ak-box-new new_obj_smob (list-ref my_line 1) (list-ref my_line 2) (number->string x2) (number->string y2)
(list-ref my_line 5) (list-ref my_line 8) (list-ref my_line 6))
(if state_embed
(begin
(ak-complex-attach-object embed_obj_smob new_obj_smob)
)
(begin
(ak-page-attach-object my_page new_obj_smob)
)
)
)
)
(if (string=? (list-ref my_line 0) OBJ_CIRCLE)
(begin
(set! new_obj_smob (ak-object-new OBJ_CIRCLE selected visible locked))
(if state_embed
(begin
(ak-complex-attach-object embed_obj_smob new_obj_smob)
)
(begin
(ak-page-attach-object my_page new_obj_smob)
)
)
)
)
(if (string=? (list-ref my_line 0) OBJ_LINE)
(begin
(set! new_obj_smob (ak-object-new OBJ_LINE selected visible locked))
(ak-line-new new_obj_smob (list-ref my_line 5) (list-ref my_line 8)
(list-ref my_line 1) (list-ref my_line 2) (list-ref my_line 3)
(list-ref my_line 4) (list-ref my_line 7))
(if state_embed
(begin
(ak-complex-attach-object embed_obj_smob new_obj_smob)
)
(begin
(ak-page-attach-object my_page new_obj_smob)
)
)
)
)
(if (string=? (list-ref my_line 0) OBJ_PICTURE)
(begin
(set! new_obj_smob (ak-object-new OBJ_PICTURE selected visible locked))
(if state_embed
(begin
(ak-complex-attach-object embed_obj_smob new_obj_smob)
)
(begin
(ak-page-attach-object my_page new_obj_smob)
)
)
)
)
(if (string=? (list-ref my_line 0) OBJ_PIN)
(begin
(set! new_obj_smob (ak-object-new OBJ_PIN selected visible locked))
(if state_embed
(begin
(ak-complex-attach-object embed_obj_smob new_obj_smob)
)
(begin
(ak-page-attach-object my_page new_obj_smob)
)
)
)
)
)
)
)
(close-input-port port)
)
)
Attachment:
guile_interface_rev0.02.odt
Description: application/vnd.oasis.opendocument.text
_______________________________________________ geda-user mailing list geda-user@xxxxxxxxxxxxxx http://www.seul.org/cgi-bin/mailman/listinfo/geda-user