home *** CD-ROM | disk | FTP | other *** search
- ;;; TABLES.LSP
- ;;; (C) ¬⌐┼v 1988-1992 Autodesk ñ╜Ñq
- ;;;
- ;;; Ñ╗╡{ªíñwÑ╤ Autodesk ñ╜Ñq╡∙ÑU¬⌐┼v, ╢╚⌐≤ñU¡z▒í¬pñUÑi▒┬╗P▒zíu│\ÑiívíC
- ;;; ╗╒ñUñú▒oÑHÑ⌠ª≤º╬ªí╡oªµ⌐╬ÑX¬⌐ª╣╡{ªí¬║íu¡∞⌐l╜Xív; ª²ñ╣│\▒zªb»S⌐w¡lÑ═
- ;;; ¬║ñuº@ñW╡▓ªXª╣╡{ªí¬║íuÑ╪¬║╜Xív¿╧Ñ╬íCª│├÷│o├■¡lÑ═ñuº@¬║▒°Ñ≤ªpñU:
- ;;;
- ;;; ( i) │]¡pñW╗Pñuº@ñW¼╥»┬║Θ░w╣∩ Autodesk ñ╜Ñq¬║▓ú½~íC
- ;;; (ii) ╕ⁿª│íu¬⌐┼v (C) 1988-1992 Autodesk ñ╜Ñqív¬║¬⌐┼v│qºiíC
- ;;;
- ;;;
- ;;;
- ;;; AUTODESKñ╜Ñq┤ú¿╤ª╣╡{ªí╢╚¿╤º@íu├■ªⁿív¬║░╤ª╥, ª╙ÑBñú▒╞░úª│Ñ⌠ª≤┐∙╗~¬║
- ;;; Ñi»αíCAUTODESKñ╜Ñq»Sª╣º_╗{Ñ⌠ª≤»S⌐wÑ╬│~ñº╛A║┘⌐╩, ÑHñ╬░╙╖~╛P░Γ⌐╥┴⌠ºt
- ;;; ÑX¿π¬║½O├╥íCAUTODESKñ╜ÑqªP«╔ÑτñúÑX¿πª╣╡{ªí░⌡ªµ«╔ñ@⌐wñú╖|íuññ┬_ív⌐╬
- ;;; íuº╣Ñ■╡L╗~ív¬║½O├╥íC
- ;;;
- ;;;
- ;;;--------------------------------------------------------------------------
- ;;; DESCRIPTION
-
- ;;; This is a programming example.
- ;;; Exerciser for (TBLNEXT) and (TBLSEARCH) functions.
-
- ;;; The functions (LAYER), (LTYPE), (VIEW), (STYLE), (BLOCK)
- ;;; (UCS), and (VPORT) can be called independently. Each lists the
- ;;; entries in the associated symbol table, optionally in alphabetical
- ;;; order. The TABLES command ((C:TABLES) function) calls each of them
- ;;; in turn.
-
- ;;; For the layer, linetype, and text style tables, an asterisk in column
- ;;; one marks the current setting. If the current linetype is "BYLAYER",
- ;;; the linetype corresponding to the current layer will be marked with
- ;;; an "L" in column one.
-
- ;;; by Duff Kurland - Autodesk, Inc.
- ;;; October 12, 1986
-
- ;;; Added (UCS) and (VPORT) - May 1988
-
- ;;; (LAYER) - Dump the layer table
-
- (defun myerror (s) ; If an error (such as CTRL-C) occurs
- ; while this command is active...
- (if (/= s "Function cancelled")
- (princ (strcat "\n┐∙╗~: " s))
- )
- (setvar "cmdecho" ocmd) ; Restore saved modes
- (setvar "blipmode" oblp)
- (setq *error* olderr) ; Restore old *error* handler
- (princ)
- )
-
- (defun layer ( / c d f ln lt ly n x)
- (tblset "layer")
- (write-line " ╣╧╝h ¬¼║A ├CªΓ ╜u½¼ ¬■¡z")
- (terpri)
- (setq cl (getvar "clayer")) ; get current layer
- (setq n 0)
- (setq x (next T)) ; get first layer
- (while x
- (setq n (1+ n)
- ly (fld 2 x) ; layer name
- ln (fld 6 x) ; linetype name
- c (fld 62 x) ; color number
- f (logand (fld 70 x) 1) ; "frozen" flag
- lt (tblsearch "ltype" ln) ; linetype table entry
- d (fld 3 lt) ; linetype prose description
- )
- (write-line
- (strcat
- (if (= ly cl) "* " " ") ; flag current layer
- (strfill ly 12) ; edit layer name
- (strfill
- (cond
- ((= f 1) "Frozen") ; edit status
- ((< c 0) "Off")
- (T "On")
- )
- 8
- )
- (strfill (itoa (abs c)) 7) ; edit color number
- (strfill ln 12) ; edit linetype name
- (substr d 1 30) ; edit linetype description
- )
- )
- (setq x (next nil)) ; get next layer entry
- )
- (princ (if (= n 0) " -╡L-\n\n" "\n"))
- nil
- )
-
-
- ;;; (LTYPE) - Dump the linetype table
-
- (defun ltype ( / a cl d f lt n s x)
- (tblset "ltype")
- (write-line " ╜u½¼ ╣∩╗⌠ ▓╒¼q ¬■¡z")
- (terpri)
- (setq cl (getvar "celtype")) ; get current linetype
- (setq f "* ") ; set default "current" flag
-
- ;; If current linetype is "BYLAYER", look up the linetype
- ;; associated with the current layer, and change the
- ;; "current" flag from "* " to "L ".
-
- (setq cl
- (cond
- ((= cl "BYBLOCK") "")
- ((= cl "BYLAYER")
- (setq f "L ")
- (fld 6 (tblsearch "layer" (getvar "clayer")))
- )
- (T cl)
- )
- )
- (setq n 0)
- (setq x (next T)) ; first linetype
- (while x
- (setq n (1+ n)
- lt (fld 2 x) ; linetype name
- d (fld 3 x) ; linetype prose description
- a (fld 72 x) ; alignment code
- s (fld 73 x) ; number of dash length items
- )
- (write-line
- (strcat
- (if (= lt cl) f " ") ; flag current entity linetype
- (strfill lt 12) ; edit layer name
- (strfill (chr a) 7) ; alignment code
- (strfill (itoa s) 6) ; number of dash length items
- (substr d 1 30) ; linetype description
- )
- )
- (if (> s 0)
- (progn
-
- ;;; Edit dash length items
-
- (setq x (member (assoc 49 x) x)) ; get list of dash items
- (while x
- (setq s (cdar x)) ; get dash length
- (write-line
- (strcat
- (strfill " " 27)
- (cond
- ((= s 0) "Dot")
- ((> s 0) (strcat "┤ú╡º " (rtos s 2 4)))
- (T (strcat "ñU╡º " (rtos (abs s) 2 4)))
- )
- )
- )
- (setq x (cdr x)) ; get next dash item
- )
- )
- )
- (setq x (next nil)) ; get next linetype entry
- )
- (princ (if (= n 0) " -╡L-\n\n" "\n"))
- nil
- )
-
-
- ;;; (VIEW) - Dump the named view table
-
- (defun view ( / c d h n v w x)
- (tblset "view")
- (write-line " ╡°┤║ ░¬½╫x╝e½╫ ñññ▀ ¬■¡z")
- (terpri)
- (setq n 0)
- (setq x (next T)) ; get first view
- (while x
- (setq n (1+ n)
- v (fld 2 x) ; view name
- c (fld 10 x) ; center point
- d (fld 11 x) ; view direction
- h (fld 40 x) ; height
- w (fld 41 x) ; width (valid only for windows)
- )
- (write-line
- (strcat
- " "
- (strfill v 12) ; edit view name
- (strfill (strcat (rtos h 2 4) ; edit height x width
- "x"
- (rtos w 2 4)) 18
- )
- (strfill (strcat (rtos (car c) 2 4) ; edit center point
- ","
- (rtos (cadr c) 2 4)) 18
- )
- (rtos (car d) 2 4) ; edit X portion of direction
- ","
- (rtos (cadr d) 2 4) ; edit Y portion of direction
- ","
- (rtos (caddr d) 2 4) ; edit Z portion of direction
- )
- )
- (setq x (next nil)) ; get next view entry
- )
- (princ (if (= n 0) " -╡L-\n\n" "\n"))
- nil
- )
-
-
- ;;; (STYLE) - Dump the text style table
-
- (defun style ( / cs fb ff g h n o s w x)
- (tblset "style")
- (write-line " ªr½¼ ░¬½╫ ╝e½╫ ╢╔▒╫ ║X╕╣ ªr┼Θ ñjªr┼Θ")
- (terpri)
- (setq cs (getvar "textstyle")) ; get current style
- (setq n 0)
- (setq x (next T)) ; get first style
- (while x
- (setq n (1+ n)
- s (fld 2 x) ; style name
- ff (fld 3 x) ; primary font file
- fb (fld 4 x) ; big font file
- h (fld 40 x) ; height
- w (fld 41 x) ; width factor
- o (fld 50 x) ; obliquing angle
- g (fld 71 x) ; generation flags
- )
- (write-line
- (strcat
- (if (= s cs) "* " " ") ; flag current style
- (strfill s 12) ; edit style name
- (strfill (rtos h 2 4) 8) ; height
- (strfill (rtos w 2 4) 8) ; width factor
- (strfill (angtos o 0 2) 7) ; obliquing angle
- (strfill (itoa g) 7) ; generation flags
- (strfill ff 10) ; primary font file
- fb ; big font file
- )
- )
- (setq x (next nil)) ; get next style entry
- )
- (princ (if (= n 0) " -╡L-\n\n" "\n"))
- nil
- )
-
-
- ;;; (BLOCK) - Dump the block definition table
-
- (defun block ( / b e ec ed et f n o x)
- (tblset "block")
- (write-line " ╣╧╕s ║X╕╣ ¡∞┬I")
- (terpri)
- (setq n 0)
- (setq x (next T)) ; get first block definition
- (while x
- (setq n (1+ n)
- b (fld 2 x) ; block name
- o (fld 10 x) ; origin X,Y,Z
- f (fld 70 x) ; flags
- )
- (write-line
- (strcat
- " "
- (strfill b 12) ; edit block name
- (strfill (itoa f) 7) ; flags
- (rtos (car o) 2 4) ; origin X
- ","
- (rtos (cadr o) 2 4) ; origin Y
- ","
- (rtos (caddr o) 2 4) ; origin Z
- )
- )
-
- ;;; Display interesting facts about the entities comprising
- ;;; this block definition.
-
- (setq e (fld -2 x)) ; point to first entity
- (while e
- (setq ed (entget e)) ; get the entity data
- (setq et (fld 0 ed)) ; entity type
- (setq ec (fld 62 ed)) ; entity color
- (write-line
- (strcat
- (strfill " " 14)
- (strfill et 9) ; edit entity type
- " ª∞⌐≤╣╧╝híu"
- (fld 8 ed) ; edit layer name
- "ív, ├CªΓíu"
- (cond
- ((= ec 0) "BYBLOCK") ; edit color number
- ((null ec) "BYLAYER")
- (T (itoa ec))
- )
- "ív"
- )
- )
- (if (setq e (entnext e)) ; if there's another entity,
- (setq ed (entget e)) ; read its data
- )
- )
- (terpri)
- (setq x (next nil)) ; get next block entry
- )
- (princ (if (= n 0) " -╡L-\n\n" "\n"))
- nil
- )
-
- ;;; (UCS) - Dump the UCS table
-
- (defun ucs ( / n x na o xd yd)
- (tblset "ucs")
- (write-line
- " UCS ¡∞┬I X ╢bñΦªV Y ╢bñΦªV ")
- (terpri)
- (setq n 0)
- (setq x (next T)) ; get first ucs
- (while x
- (setq n (1+ n)
- na (fld 2 x) ; UCS name
- o (fld 10 x) ; origin
- xd (fld 11 x) ; X axis direction
- yd (fld 12 x) ; Y axis direction
- )
- (write-line
- (strcat
- (if (= na cucs) "* " " ") ; flag current UCS
- (strfill na 12) ; edit UCS name
- (strfill
- (strcat "("
- (rtos (car o) 2 2) ; edit UCS origin
- ","
- (rtos (cadr o) 2 2)
- ","
- (rtos (caddr o) 2 2)
- ")"
- )
- 18
- )
- (strfill
- (strcat "("
- (rtos (car xd) 2 2) ; edit X axis direction
- ","
- (rtos (cadr xd) 2 2)
- ","
- (rtos (caddr xd) 2 2)
- ")"
- )
- 20
- )
- "("
- (rtos (car yd) 2 2) ; edit Y axis direction
- ","
- (rtos (cadr yd) 2 2)
- ","
- (rtos (caddr yd) 2 2)
- ")"
- )
- )
- (setq x (next nil)) ; get next UCS entry
- )
- (princ (if (= n 0) " -╡L-\n\n" "\n"))
- nil
- )
-
- ;;; (VPORT) - Dump the viewport table
-
- (defun vport ( / n x na ll ur v)
- (setq prev nil)
- (tblset "vport")
- (write-line " ╡°╡í ѬñU¿ñ┬Iª∞ ÑkñW¿ñ┬Iª∞ ╡°┤║╝╥ªí ")
- (terpri)
- (setq n 0)
- (setq x (nextvp T prev)) ; get first viewport
- (while x
- (setq n (1+ n)
- na (fld 2 x) ; viewport name
- ll (fld 10 x) ; lower left corner
- ur (fld 11 x) ; upper right corner
- v (fld 71 x) ; view mode
- )
- (write-line
- (strcat
- " "
- (strfill na 10) ; edit viewport name
- " "
- (strfill
- (strcat "(" ; edit lower left corner
- (rtos (car ll) 2 2)
- ","
- (rtos (cadr ll) 2 2)
- ")"
- )
- 15
- )
- (strfill
- (strcat "(" ; edit upper right corner
- (rtos (car ur) 2 2)
- ","
- (rtos (cadr ur) 2 2)
- ")"
- )
- 15
- )
- " "
- (rtos v 2 2) ; edit view mode
- )
- )
- (setq x (nextvp nil prev)) ; get next viewport entry
- )
- (princ (if (= n 0) " -╡L-\n\n" "\n"))
- nil
- )
-
- ;;; Blank-fill the given string to a specified number of characters
-
- (defun strfill (s len)
- (substr (strcat s " ") 1 len)
- )
-
- ;;; Return the value associated with a particular entity field
-
- (defun fld (num lst)
- (cdr (assoc num lst))
- )
-
- ;;; Set up to process specified symbol table. If TBLSORT is not yet
- ;;; defined, ask user whether the entries should be sorted. If sorting
- ;;; is enabled, obtain all entries and sort them forming TBLENTS list.
-
- (defun tblset (tbl / new s)
- (textscr)
- (setq tblname tbl) ; set table name
- (if (null tblsort)
- (progn ; sorting not yet determined
- (initget 1 "Yes No") ; Establish keywords, no null
- (setq s (getkword "\n▒N╣╧ñ╕íu▒╞º╟ív(Y/N) ? "))
- (setq tblsort (if (= s "Yes") 1 0))
- )
- )
- (if (= tblsort 1)
- (progn ; if sorting is enabled
- (setq tblents nil) ; start with null list
- (setq new (cdr (assoc 2 (tblnext tbl T)))) ; get first entry name
- (while new
- (setq tblents (cons new tblents)) ; add to list
- (setq new (cdr (assoc 2 (tblnext tbl)))) ; get next entry name
- )
- (setq tblents (str-sort tblents)) ; sort the name list
- )
- )
- )
-
- ;;; Obtain next (or first) entry from table, or from sorted entry list.
-
- (defun next (first / temp)
- (if (= tblsort 1) (progn ; if sorting enabled
- (setq temp (car tblents)) ; get next name from list
- (if temp
- (progn ; if not end of list...
- (setq tblents (cdr tblents)) ; chop from list
- (tblsearch tblname temp) ; get table entry for this name
- )
- )
- )
- (tblnext tblname first) ; else get next (or first) table entry
- )
- )
-
- ;;; Obtain next (or first) vports entry from table, or from sorted entry list.
-
- (defun nextvp (first prev / temp)
- (if (= tblsort 1)
- (progn ; if sorting enabled
- (if first
- (setq temp (car tblents)) ; get first name from list
- (progn
- (setq prev (car tblents)) ; store previous name
- (setq temp (cadr tblents)) ; get next name from list
- )
- )
- (if temp
- (progn
- (if (null first)
- (setq tblents (cdr tblents)); chop from list
- )
- (if (= prev temp)
- (progn
- (setq prev temp)
- (tblnext tblname first) ; get next table entry
- )
- (progn
- (setq prev temp)
- (tblsearch tblname temp T) ; get table entry for this name
- )
- )
- )
- )
- )
- (tblnext tblname first) ; else get next (or first) table entry
- )
- )
-
- ;;; Sort a list of strings.
-
- (defun str-sort (x)
- (cond
- ((null (cdr x)) x)
- (T (str-merge (str-sort (first-half x))
- (str-sort (last-half x)))
- )
- )
- )
-
- (defun str-merge (a b)
- (cond
- ((null a) b)
- ((null b) a)
- ((< (strcmp (car a) (car b)) 0)
- (cons (car a) (str-merge (cdr a) b)))
- (t
- (cons (car b) (str-merge a (cdr b)))
- )
- )
- )
-
- (defun first-half (l)
- (head l (1- (length l)))
- )
-
- (defun head (l n)
- (cond
- ((minusp n) nil)
- (t (cons (car l) (head (cdr l) (- n 2))))
- )
- )
-
- (defun last-half (l)
- (tail l (1- (length l)))
- )
-
- (defun tail (l n)
- (cond
- ((minusp n) l)
- (t (tail (cdr l) (- n 2)))
- )
- )
-
- ;;; Compare two strings. Return 0 if they are equal, -1 if the
- ;;; first string is less than the second in ASCII collating sequence,
- ;;; and 1 if the second string is less than the first.
-
- (defun strcmp (a b)
- (cond
- ((= a b) 0)
- (T
- (cond
- ((< (ascii a) (ascii b)) -1)
- ((> (ascii a) (ascii b)) 1)
- (t (strcmp (substr a 2) (substr b 2)))
- )
- )
- )
- )
-
- ;;; Dump all the symbol tables
-
- (defun C:TABLES (/ olderr ocmd oblp)
- (setq olderr *error*
- *error* myerror
- )
- (setq ocmd (getvar "cmdecho"))
- (setq oblp (getvar "blipmode"))
- (setvar "cmdecho" 0)
- (setq tblsort nil) ; Force "Sort Y/N" query
- (layer)
- (ltype)
- (view)
- (style)
- (block)
- (ucs)
- (vport)
- (setvar "cmdecho" ocmd)
- (setvar "blipmode" oblp)
- (setq *error* olderr) ; Restore old *error* handler
- (princ)
- )