After three years of looking.. this is the best program I've seen for springs
BTW as far as the legalize....
it's free, and worth every penny.
Eat your green vegetables and call your Mother
Adios
; SPRING.LSP
;
; Made for "Authorized User" info@safew.com
;
; By Theo L.A. Groenenberg
; Leusden NL
; acadvice@worldonline.nl
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun veererror (s)
(if (/= s "Function cancelled"

(princ (strcat "\nError: " s))
)
(setvar "osmode" oudosmode)
(setq *error* olderr)
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun polyveer ()
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setq ainc (/ (* pi 2) stap)
dhinc (/ expan stap)
dvinc (/ spoed stap)
dv dvinc
ang 0.0
tp (polar centrum ang stra)
orig tp
zas (polar tp (/ pi 2) (/ stra (/ stap (* 2 pi))))
zas (list (car zas)(cadr zas)(+ (caddr zas) dvinc))
)
(prompt "\nConstructing a 3dpoly ....."

(command "3dpoly" tp)
(repeat omwent
(repeat stap
(setq tp (polar centrum (setq ang (+ ang ainc))
(setq stra (+ stra dhinc))
)
tp (list (car tp)(cadr tp)(+ dv (caddr tp)))
dv (+ dv dvinc)
)
(command tp)
)
)
(command ""

(setq poly (entlast))
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:spring ()
(setq olderr *error*
*error* veererror
oudosmode (getvar "osmode"

)
(setvar "cmdecho" 0)
(initget 1)
(setq centrum (getpoint "\nCenterpoint "

)
(initget 7)
(setq omwent (getint "\nNumber of revolutions "

)
(initget 1)
(setq ddiam (getdist "\nWire diameter "

)
(initget 7)
(setq stra (getdist centrum "\nStart radius "

stra (- stra (/ ddiam 2))
)
(initget 1)
(setq expan (getdist "\nExpansion per revolution "

)
(initget 3)
(setq spoed (getdist "\nPitch "

)
(initget 6)
(setq stap (getint "\nResolution per revolution <90> "

)
(cond ((null stap) (setq stap 90)))
(polyveer)
(prompt "\nMaking a spring....."

(command "ucs" "za" orig zas
"circle" "0,0,0" (/ ddiam 2)
"ucs" "p"
"extrude" "l" "" "p" orig
)
(entdel poly)
(redraw)
(setvar "osmode" oudosmode)
(setq *error* olderr)
(princ "Regards Theo."

(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;