magic/lisp/scm/help.scm

169 lines
4.6 KiB
Scheme

;-------------------------------------------------------------------------
;
; (c) 1997 California Institute of Technology
; Department of Computer Science
; Pasadena, CA 91125.
; All Rights Reserved
;
; Permission to use, copy, modify, and distribute this software
; and its documentation for any purpose and without fee is hereby
; granted, provided that the above copyright notice appear in all
; copies. The California Institute of Technology makes no representations
; about the suitability of this software for any purpose. It is
; provided "as is" without express or implied warranty. Export of this
; software outside of the United States of America may require an
; export license.
;
; $Header$
;
;-------------------------------------------------------------------------
;------------------------------------------------------------------------
;
; Help for scheme commands
;
;------------------------------------------------------------------------
(define scm-help ())
(define scm-add-help ())
(letrec (
(scm-help-list ())
(module-name (lambda (x) (car x)))
(module-long-form (lambda (x) (cadr x)))
(module-fns (lambda (x) (caddr x)))
(dump-module-list
(lambda (l)
(if (null? l) #t
(begin
(echo
(string-append
(string-append (module-name (car l)) " :: ")
(module-long-form (car l))
)
)
(dump-module-list (cdr l))
)
)
)
)
(dump-help
(lambda (l name)
(cond ((null? l) (echo "Module not found"))
((string=? (module-name (car l)) name)
(begin
(echo)
(echo (module-fns (car l))))
)
(#t (dump-help (cdr l) name))
)
)
)
)
(begin
(set! scm-help
(lambda (name)
(cond ((and (procedure? name)
(eqv? name ?))
(begin
(echo "Available help:")
(echo)
(dump-module-list scm-help-list)
(collect-garbage)
)
)
((not (string? name))
(echo "Argument to scm-help must be a string"))
((string=? name "?")
(begin
(echo "Available modules:") (echo)
(dump-module-list scm-help-list)
(collect-garbage)
)
)
(#t (dump-help scm-help-list name))
)
)
)
(set! scm-add-help
(lambda (name long-form fns)
(set! scm-help-list (cons (list name long-form fns) scm-help-list))
)
)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;
; Everyone should put their help file in their own particular
; implementation directory.
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(scm-add-help
"sel" "Selection commands"
"Selection:
:sel.netlist \"nm\" Selects a netlist labelled nm restricted by the box.
All labels named nm under the box are selected along
with whatever is electrically connected to them.
:sel.push Pushes current selection onto selection stack
:sel.pop Pops top of selection stack
:sel.cmp Compares current selection with the top-of-stack. The
List of labels that are different are bound to the label
search list and can be browsed using label.find-next."
)
(scm-add-help
"prs" "Production-rule drawing"
"Production rule drawing:
:prs.draw w \"rule\" Draws transistor stacks for production rule with
diffusion width w.
:prs.talldraw w \"rule\" Same as prs.draw, only doesn't squish out diffusion
between poly and contacts for intermediate nodes.
:prs.mgn pw nw \"r1\" ... Draws list of rules, sharing contacts if possible.
:prs.tallmgn pw nw \"r1\" Same as before, except unsquished diffusion."
)
(scm-add-help
"label" "Label manipulation"
"Label Manipulation
:label.rename \"n1\" \"n2\" renames all instances of n1 under the current
box with n2.
:label.swap \"n1\" \"n2\" renames all instances of n1 with n2 and n2 with
n1 under the current box.
:label.search \"n\" looks for all labels matching n under box.
:label.find-next moves box to the next label position."
)
(scm-add-help
"gate" "Standard gates"
"Standard gate generation
The gate generation commands are of the form
:command pw nw o i1 i2 ... iN
pw and nw specify the width of the p- and n-diffusion stacks. o is the output,
and i1 thru iN are the inputs.
:gate.c pw nw o i1 .. iN C-element
:gate.cf pw nw o i1 .. iN Folded C-element
:gate.inv pw nw o i Inverter
:gate.nor pw nw o i1 .. iN NOR gate
:gate.nand pw nw o i1 .. iN NAND gate"
)