home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 13 / 13.iso / p / p024 / 5.img / SUPPORT2.LIB / DDATTDEF.LSP < prev    next >
Encoding:
Text File  |  1993-02-08  |  17.9 KB  |  579 lines

  1. ;;;------------------------------------------------------------------------
  2. ;;;  DDATTDEF.LSP
  3. ;;;  ¬⌐┼v (C) 1992  Autodesk ñ╜Ñq
  4. ;;;
  5. ;;;  Ñ╗│n┼ΘºK╢O¿╤▒z╢iªµÑ⌠ª≤Ñ╬│~╗▌¿D¬║½■¿⌐íB¡╫º∩ñ╬╡oªµ, ª²¼O░╚╜╨┐φ┤`ñU¡z
  6. ;;;  ¡∞½h :
  7. ;;;
  8. ;;;  1)  ñWªC¬║¬⌐┼v│qºi░╚╗▌ÑX▓{ªb¿Cñ@Ñ≈½■¿⌐∙╪íC
  9. ;;;  2)  ¼█├÷¬║╗í⌐·ñσÑ≤ñ]Ñ▓╢╖⌐·╕ⁿ¬⌐┼v│qºiñ╬Ñ╗╢╡│\Ñi│qºiíC
  10. ;;;
  11. ;;;  Ñ╗│n┼Θ╢╚┤ú¿╤º@¼░└│Ñ╬ñW¬║░╤ª╥, ª╙Ñ╝┴n⌐·⌐╬┴⌠ºtÑ⌠ª≤½O├╥; ╣∩⌐≤Ñ⌠ª≤»S«φ
  12. ;;;  Ñ╬│~ñº╛A║┘⌐╩, ÑHñ╬░╙╖~╛P░Γ⌐╥┴⌠ºtÑX¿π¬║½O├╥, ªbª╣ñ@╖ºñ⌐ÑHº_╗{íC
  13. ;;;
  14. ;;;
  15. ;;;------------------------------------------------------------------------
  16. ;;;  DESCRIPTION
  17. ;;;
  18. ;;;  This is an enhancement to the ATTDEF command. It loads up a dialogue box
  19. ;;;  which presents the user the set of options for attribute definition.
  20. ;;;
  21. ;;;------------------------------------------------------------------------
  22. ;;;   Prefixes in command and keyword strings:
  23. ;;;      "."  specifies the built-in AutoCAD command in case it has been
  24. ;;;           redefined.
  25. ;;;      "_"  denotes an AutoCAD command or keyword in the native language
  26. ;;;           version, English.
  27. ;;;------------------------------------------------------------------------
  28. ;;;
  29. ;;; ===================== load-time error checking ========================
  30.  
  31.   (defun ai_abort (app msg)
  32.      (defun *error* (s)
  33.         (if old_error (setq *error* old_error))
  34.         (princ)
  35.      )
  36.      (if msg
  37.        (alert (strcat " └│Ñ╬╡{ªí┐∙╗~: "
  38.                       app
  39.                       " \n\n  "
  40.                       msg
  41.                       "  \n"
  42.               )
  43.        )
  44.      )
  45.      (exit)
  46.   )
  47.  
  48. ;;; Check to see if AI_UTILS is loaded, If not, try to find it,
  49. ;;; and then try to load it.
  50. ;;;
  51. ;;; If it can't be found or it can't be loaded, then abort the
  52. ;;; loading of this file immediately, preserving the (autoload)
  53. ;;; stub function.
  54.  
  55.   (cond
  56.      (  (and ai_dcl (listp ai_dcl)))          ; it's already loaded.
  57.  
  58.      (  (not (findfile "ai_utils.lsp"))                     ; find it
  59.         (ai_abort "DDATTDEF"
  60.                   (strcat "ºΣñú¿∞íuAI_UTILS.LSPív└╔«╫;"
  61.                           "\n  ╜╨└╦¼díusupportívÑ╪┐²íC")))
  62.  
  63.      (  (eq "failed" (load "ai_utils" "failed"))            ; load it
  64.         (ai_abort "DDATTDEF" "╡L¬k╕ⁿñJíuAI_UTILS.LSPív└╔«╫"))
  65.   )
  66.  
  67.   (if (not (ai_acadapp))               ; defined in AI_UTILS.LSP
  68.       (ai_abort "DDATTDEF" nil)         ; a Nil <msg> supresses
  69.   )                                    ; ai_abort's alert box dialog.
  70.  
  71. ;;; ==================== end load-time operations =========================
  72.  
  73. (defun c:ddattdef ( /
  74.                    aflags       def_val      pt2          x_temp
  75.                    align_prev   height       rot          y_pt
  76.                    att_exist    i            style_list   y_temp
  77.                    att_prompt   justif_list  tag          z_pt
  78.                    att_tag      old_cmd      tstyle p     z_temp
  79.                    c            old_error    v
  80.                    cjustif      p            what_next
  81.                    dcl_id       pt           x_pt         undo_init
  82.                   )
  83.  
  84.   (setq aflags (getvar "aflags"))  ; Get attribute mode system variable
  85.  
  86.   ;;
  87.   ;;  This function creates 2 lists. The first one: style_list is a list of
  88.   ;;  available text styles. The second one: justif_list is a list of text
  89.   ;;  justifications.
  90.   ;;
  91.   (defun load_list ()
  92.  
  93.     (setq style_list (ai_table "style" 4))
  94.     (if (>= (getvar "maxsort") (length style_list))
  95.       (setq style_list (acad_strlsort style_list))
  96.     )
  97.     (setq justif_list (list "Left"     "Align"     "Fit"       "Center"
  98.                             "Middle"   "Right"
  99.                             "Top Left"      "Top Center"    "Top Right"
  100.                             "Middle Left"   "Middle Center" "Middle Right"
  101.                             "Bottom Left"   "Bottom Center" "Bottom Right"
  102.                       )
  103.     )
  104.   )
  105.   ;;
  106.   ;;  Initilization of variables.
  107.   ;;
  108.   (defun init_variables ()
  109.     (setq tstyle
  110.             (itoa (- (length style_list)
  111.                   (length (member (strcase (getvar "textstyle")) style_list))
  112.                   ))
  113.           cjustif    "0"
  114.           height     (rtos (getvar "textsize"))
  115.           att_exist  (ssget "x" (list (cons 0 "attdef")))
  116.           what_next  5
  117.           align_prev "0"
  118.     )
  119.     (if (not pt) (setq pt (list 0.0 0.0 0.0)))
  120.  
  121.     (setq x_pt (rtos (car pt))
  122.           y_pt (rtos (cadr pt))
  123.           z_pt (rtos (caddr pt))
  124.     )
  125.     (if (not rot) (setq rot (angtos 0.0)))
  126.   )
  127.   ;;
  128.   ;;  Initialization of tiles. Called in main program loop.
  129.   ;;
  130.   (defun init_tiles ()
  131.     (if att_tag (set_tile "att_tag" att_tag))
  132.     (if att_prompt (set_tile "att_prompt" att_prompt))
  133.     (if def_val (set_tile "def_val" def_val))
  134.     (if (not att_exist)
  135.       (mode_tile "align_prev" 1)
  136.       (set_tile "align_prev" align_prev)
  137.     )
  138.  
  139.     ;parse attribute mode local variable "aflags" in case it changed,
  140.     ;for setting state of mode radio buttons.
  141.     (if (/= 0 (logand 1 aflags))
  142.       (setq i "1")
  143.       (setq i "0")
  144.     )
  145.     (if (/= 0 (logand 2 aflags))
  146.       (progn (setq c "1") (prompt_set))
  147.       (setq c "0")
  148.     )
  149.     (if (/= 0 (logand 4 aflags))
  150.       (setq v "1")
  151.       (setq v "0")
  152.     )
  153.     (if (/= 0 (logand 8 aflags))
  154.       (setq p "1")
  155.       (setq p "0")
  156.     )
  157.  
  158.     (set_tile "invisible" i)
  159.     (set_tile "constant" c)
  160.     (set_tile "verify" v)
  161.     (set_tile "preset" p)
  162.  
  163.     (set_tile "x_pt" x_pt)
  164.     (set_tile "y_pt" y_pt)
  165.     (set_tile "z_pt" z_pt)
  166.  
  167.     (start_list "tstyle")
  168.     (mapcar 'add_list style_list)
  169.     (end_list)
  170.     (set_tile "tstyle" tstyle)
  171.  
  172.     (start_list "cjustif")
  173.     (mapcar 'add_list justif_list)
  174.     (end_list)
  175.     (set_tile "cjustif" cjustif)
  176.  
  177.     (set_tile "height" height)
  178.  
  179.     (set_tile "rot" rot)
  180.  
  181.     (cond                                      ; set focus
  182.       ((= 2 what_next)(mode_tile "x_pt" 2))
  183.       ((= 3 what_next)(mode_tile "height" 2))
  184.       ((= 4 what_next)(mode_tile "rot" 2))
  185.       ((= 5 what_next)(mode_tile "att_tag" 2))
  186.     )
  187.   )
  188.   ;;
  189.   ;; If the current justification is aligned or if the current text style has
  190.   ;; a non zero height, disable the height button and edit box.  Also
  191.   ;; disable/enable rotation if justification is fit or align.
  192.   ;;
  193.   (defun grey_height()
  194.     (if (or (= 1 (atoi cjustif))
  195.             (/= 0.0 (cdr (cadddr
  196.                            (tblsearch "style" (nth (atoi tstyle) style_list))
  197.             )))
  198.         )
  199.       (progn
  200.         (mode_tile "height" 1)
  201.         (mode_tile "bheight" 1)
  202.       )
  203.       (progn
  204.         (mode_tile "height" 0)
  205.         (mode_tile "bheight" 0)
  206.       )
  207.     )
  208.     (if (or (= 1 (atoi cjustif))
  209.             (= 2 (atoi cjustif))
  210.         )
  211.       (progn
  212.         (mode_tile "rot" 1)
  213.         (mode_tile "brot" 1)
  214.       )
  215.       (progn
  216.         (mode_tile "rot" 0)
  217.         (mode_tile "brot" 0)
  218.       )
  219.     )
  220.   )
  221.   ;;
  222.   ;; Update the local aflags variable (attribute mode).
  223.   ;;
  224.   (defun update_aflags()
  225.     (setq aflags 0)
  226.     (if (= "1" i) (setq aflags (+ 1 aflags)))
  227.     (if (= "1" c) (setq aflags (+ 2 aflags)))
  228.     (if (= "1" v) (setq aflags (+ 4 aflags)))
  229.     (if (= "1" p) (setq aflags (+ 8 aflags)))
  230.   )
  231.   ;;
  232.   ;; Reset the error tile to nil.
  233.   ;;
  234.   (defun rs_error()
  235.     (set_tile "error" "")
  236.   )
  237.   ;;
  238.   ;;  Get all the actions associated with each tile.
  239.   ;;
  240.   (defun get_actions ()
  241.     (action_tile "invisible"  "(setq i $value)(update_aflags)")
  242.     (action_tile "constant"   "(setq c $value)(prompt_set)(update_aflags)")
  243.     (action_tile "verify"     "(setq v $value)(update_aflags)")
  244.     (action_tile "preset"     "(setq p $value)(update_aflags)")
  245.     (action_tile "att_tag"    "(rs_error)(tag_check (setq att_tag $value))")
  246.     (action_tile "att_prompt" "(rs_error)(setq att_prompt $value)")
  247.     (action_tile "def_val"    "(rs_error)(setq def_val $value)")
  248.     (action_tile "pick_pt" "(get_tag)(done_dialog 2)")
  249.  
  250.     (action_tile "align_prev"
  251.                  "(rs_error)(setq align_prev $value)(en_dis_able)")
  252.     (action_tile "x_pt"
  253.                  "(rs_error)(ai_num (setq x_pt $value) \"Invalid X coordinate.\" 0)")
  254.     (action_tile "y_pt"
  255.                  "(rs_error)(ai_num (setq y_pt $value) \"Invalid Y coordinate.\" 0)")
  256.     (action_tile "z_pt"
  257.                  "(rs_error)(ai_num (setq z_pt $value) \"Invalid Z coordinate.\" 0)")
  258.  
  259.     (action_tile "cjustif" "(rs_error)(setq cjustif $value) (grey_height)")
  260.     (action_tile "tstyle"  "(rs_error)(setq tstyle $value)(grey_height)")
  261.     (action_tile "height"
  262.                  "(rs_error)(ai_num (setq height $value) \"Invalid Height.\" 6)")
  263.     (action_tile "bheight" "(get_tag)(done_dialog 3)")
  264.     (action_tile "rot"
  265.                  "(rs_error)(ai_angle (setq rot $value) \"Invalid Rotation angle.\")")
  266.     (action_tile "brot" "(get_tag)(done_dialog 4)")
  267.     (action_tile "accept"  "(check_input)")
  268.     (action_tile "cancel"  "(done_dialog 0)")
  269.     (action_tile "help"    "(acad_helpdlg \"acad.hlp\" \"ddattdef\")")
  270.  
  271.     (setq what_next (start_dialog))
  272.     (cond
  273.       ; Drops dialogue box temporarily and lets user pick a point.
  274.       ((= 2 what_next)
  275.         (initget 1)
  276.         (setq pt (getpoint "\n░_⌐l┬I: ")
  277.               x_pt (rtos (car pt))
  278.               y_pt (rtos (cadr pt))
  279.               z_pt (rtos (caddr pt))
  280.         )
  281.       )
  282.       ; Drops dialogue box temporarily and lets user pick a height.
  283.       ((= 3 what_next)
  284.         (temp_pt)
  285.         (initget 1)
  286.         (setq height (rtos (getdist pt "\nªr░¬: ")))
  287.       )
  288.       ; Drops dialogue box temporarily and lets user pick an angle.
  289.       ((= 4 what_next)
  290.         (temp_pt)
  291.         (initget 1)
  292.         (setq rot (angtos (getangle pt "\n▒█┬α¿ñ: ")))
  293.       )
  294.     )
  295.   )
  296.   (defun get_tag ()
  297.     (setq att_tag (get_tile "att_tag"))
  298.     (setq att_prompt (get_tile "att_prompt"))
  299.     (setq def_val (get_tile "def_val"))
  300.   )
  301.   ;;
  302.   ;; When picking height and rotation from the graphics screen a base point
  303.   ;; of the Start Point is used.  However, the X, Y or Z fields could
  304.   ;; contain invalid information, so these fields have to be checked and
  305.   ;; if the data is invalid, a coordinate of 0.0 is used.
  306.   ;;
  307.   (defun temp_pt()
  308.     (if (not (setq x_temp (distof x_pt))) (setq x_temp 0.0))
  309.     (if (not (setq y_temp (distof y_pt))) (setq y_temp 0.0))
  310.     (if (not (setq z_temp (distof z_pt))) (setq z_temp 0.0))
  311.     (setq pt (list x_temp y_temp z_temp))
  312.   )
  313.   ;;
  314.   ;;  Enables and disables the pick point feature if action_tile
  315.   ;;  "next" is picked. The "next" action tile is enabled only if
  316.   ;;  an attribute has been previously defined. The function of
  317.   ;;  "next" is to place the attribute right under the previously
  318.   ;;  defined attribute.
  319.   ;;
  320.   (defun en_dis_able ()
  321.     (if (= 1 (atoi align_prev))
  322.       (progn
  323.         (mode_tile "pick_pt" 1)
  324.         (mode_tile "x_pt" 1)
  325.         (mode_tile "y_pt" 1)
  326.         (mode_tile "z_pt" 1)
  327.         (mode_tile "cjustif" 1)
  328.         (mode_tile "tstyle" 1)
  329.         (mode_tile "height" 1)
  330.         (mode_tile "bheight" 1)
  331.         (mode_tile "rot" 1)
  332.         (mode_tile "brot" 1)
  333.       )
  334.       (progn
  335.         (mode_tile "pick_pt" 0)
  336.         (mode_tile "x_pt" 0)
  337.         (mode_tile "y_pt" 0)
  338.         (mode_tile "z_pt" 0)
  339.         (mode_tile "cjustif" 0)
  340.         (mode_tile "tstyle" 0)
  341.         (mode_tile "height" 0)
  342.         (mode_tile "bheight" 0)
  343.         (mode_tile "rot" 0)
  344.         (mode_tile "brot" 0)
  345.         (grey_height)                ; Height could still be disabled.
  346.       )
  347.     )
  348.   )
  349.   ;;
  350.   ;;  Enables or disables the attribute prompt tile. If constant is turned on
  351.   ;;  then attribute prompt is disabled. If not, attribute prompt is enabled.
  352.   ;;
  353.   (defun prompt_set ()
  354.     (if (= c "1")
  355.       (progn
  356.         (mode_tile "att_prompt" 1)
  357.         (mode_tile "verify" 1)
  358.         (mode_tile "preset" 1)
  359.       )
  360.       (progn
  361.         (mode_tile "att_prompt" 0)
  362.         (mode_tile "verify" 0)
  363.         (mode_tile "preset" 0)
  364.       )
  365.     )
  366.   )
  367.   ;;
  368.   ;;  Checks the validity of a tag and return the tag name if correct
  369.   ;;  and nil otherwise.
  370.   ;;
  371.   (defun tag_check (tag)
  372.     (cond
  373.       ((= "" tag)
  374.         (set_tile "error" "ñúñ╣Ñ╬íuNullív╝╨┼╥íC")
  375.         nil
  376.       )
  377.       ((wcmatch tag "* *")
  378.         (set_tile "error" "íu╝╨┼╥ívññª│╡L«─¬║¬┼«µíC")
  379.         nil
  380.       )
  381.       (T tag)
  382.     )
  383.   )
  384.   ;;
  385.   ;;  check_input is called when Ok button is picked. Uses tag_check to check
  386.   ;;  the tag for invalid values such as a space or an empty string.  Convert
  387.   ;;  strings to reals where necessary.
  388.   ;;
  389.   (defun check_input()
  390.     (setq att_tag (get_tile "att_tag"))
  391.     (cond
  392.       ((not (tag_check (get_tile "att_tag")))(mode_tile "att_tag" 2))
  393.       ((and (= 0 (atoi align_prev))
  394.             (not (setq x_pt
  395.                        (ai_num (get_tile "x_pt") "íuX «y╝╨ív╡L«─íC" 0))
  396.             )
  397.        )
  398.         (mode_tile "x_pt" 2)
  399.       )
  400.       ((and (= 0 (atoi align_prev))
  401.             (not (setq y_pt
  402.                        (ai_num (get_tile "y_pt") "íuY «y╝╨ív╡L«─íC" 0))
  403.             )
  404.        )
  405.         (mode_tile "y_pt" 2)
  406.       )
  407.       ((and (= 0 (atoi align_prev))
  408.             (not (setq z_pt
  409.                        (ai_num (get_tile "z_pt") "íuZ «y╝╨ív╡L«─íC" 0))
  410.             )
  411.        )
  412.         (mode_tile "z_pt" 2)
  413.       )
  414.       ((and (= 0 (atoi align_prev))
  415.             (not (or (= 1 (atoi cjustif))
  416.                      (/= 0.0 (cdr (cadddr (tblsearch "style" (nth (atoi tstyle) style_list)))))
  417.                  )
  418.             )
  419.             (not (setq height
  420.                        (ai_num (get_tile "height") "íuªr░¬ív╡L«─íC" 6))
  421.             )
  422.        )(mode_tile "height" 2)
  423.       )
  424.       ((and (= 0 (atoi align_prev))
  425.             (not (or (= 1 (atoi cjustif))
  426.                      (= 2 (atoi cjustif))
  427.             ))
  428.             (not (setq rot
  429.                        (ai_angle (get_tile "rot") "íu▒█┬α¿ñív╡L«─íC"))
  430.             )
  431.        )
  432.         (mode_tile "rot" 2)
  433.       )
  434.       (T (setq pt (list x_pt y_pt z_pt))(done_dialog 1))
  435.     )
  436.   )
  437.   ;;
  438.   ;;  Function actually starts the attribute definition command.
  439.   ;;
  440.   (defun start_command ()
  441.     (setvar "aflags" aflags)
  442.     (setvar "textstyle" (nth (atoi tstyle) style_list))
  443.  
  444.     (command "_.attdef" "")
  445.     (command att_tag)
  446.     (if (= c "0")
  447.       (progn
  448.         (if att_prompt
  449.           (command att_prompt)
  450.           (command "")
  451.         )
  452.       )
  453.     )
  454.     (if def_val
  455.       (command def_val)
  456.       (command "")
  457.     )
  458.     (if (= 0 (atoi align_prev))
  459.       (progn
  460.         (cond
  461.           ((= (atoi cjustif) 0)  ;  left
  462.             (command (list x_pt y_pt z_pt))
  463.           )
  464.           ((= (atoi cjustif) 1)  ;  aligned
  465.             (setq pt (getpoint "\nñσªr░≥╖╟╜u 1: ")
  466.                   pt2 (getpoint pt "\nñσªr░≥╖╟╜u 2: ")
  467.             )
  468.             (command "_j" "_a" pt pt2)
  469.           )
  470.           ((= (atoi cjustif) 2)  ;  fit
  471.             (setq pt (getpoint "\nñσªr░≥╖╟╜u 1: ")
  472.                   pt2 (getpoint pt "\nñσªr░≥╖╟╜u 2: ")
  473.             )
  474.             (command "_j" "_f" pt pt2)
  475.           )
  476.           ((= (atoi cjustif) 3)  ;  center
  477.             (command "_j" "_c" pt)
  478.           )
  479.           ((= (atoi cjustif) 4)  ;  middle
  480.             (command "_j" "_m" pt)
  481.           )
  482.           ((= (atoi cjustif) 5)  ;  right
  483.             (command "_j" "_r" pt)
  484.           )
  485.           ((= (atoi cjustif) 6)  ;  top left
  486.             (command "_j" "_tl" pt)
  487.           )
  488.           ((= (atoi cjustif) 7)  ;  top center
  489.             (command "_j" "_tc" pt)
  490.           )
  491.           ((= (atoi cjustif) 8)  ;  top right
  492.             (command "_j" "_tr" pt)
  493.           )
  494.           ((= (atoi cjustif) 9)  ;  middle left
  495.             (command "_j" "_ml" pt)
  496.           )
  497.           ((= (atoi cjustif) 10)  ;  middle center
  498.             (command "_j" "_mc" pt)
  499.           )
  500.           ((= (atoi cjustif) 11)  ;  middle right
  501.             (command "_j" "_mr" pt)
  502.           )
  503.           ((= (atoi cjustif) 12)  ;  bottom left
  504.             (command "_j" "_bl" pt)
  505.           )
  506.           ((= (atoi cjustif) 13)  ;  bottom center
  507.             (command "_j" "_bc" pt)
  508.           )
  509.           ((= (atoi cjustif) 14)  ;  bottom right
  510.             (command "_j" "_br" pt)
  511.           )
  512.         )
  513.         (if (not (or (= 1 (atoi cjustif))
  514.                      (/= 0.0 (cdr (cadddr (tblsearch "style"
  515.                                             (nth (atoi tstyle) style_list)))
  516.                              )
  517.                      )
  518.                  )
  519.             )
  520.           (command height)
  521.         )
  522.         (if (not (or (= 1 (atoi cjustif))
  523.                      (= 2 (atoi cjustif))
  524.                  )
  525.             )
  526.           (command rot)
  527.         )
  528.       )
  529.       (command "") ; if user picks next for start point then the
  530.                    ; attribute tag goes to the line below the
  531.                    ; previous tag.
  532.     )
  533.   )
  534.   ;;
  535.   ;; Pop up the dialogue.
  536.   ;;
  537.   (defun ddattdef_main()
  538.  
  539.     (setq height (rtos (getvar "textsize")))
  540.     (load_list)
  541.     (init_variables)
  542.     (while (> what_next 1)
  543.       (if (not (new_dialog "ddattdef" dcl_id))
  544.         (exit)
  545.       )
  546.       (init_tiles)
  547.       (grey_height)
  548.       (get_actions)
  549.     )
  550.     (if (= 1 what_next) (start_command))
  551.   )
  552.  
  553.   ;; Set up error function.
  554.   (setq old_cmd (getvar "cmdecho")    ; save current setting of cmdecho
  555.         old_error  *error*            ; save current error function
  556.         *error* ai_error              ; new error function
  557.   )
  558.  
  559.   (setvar "cmdecho" 0)
  560.  
  561.   (cond
  562.      (  (not (ai_notrans)))                        ; transparent not OK
  563.      (  (not (ai_acadapp)))                        ; ACADAPP.EXP xloaded?
  564.      (  (not (setq dcl_id (ai_dcl "ddattdef"))))   ; is .DCL file loaded?
  565.      (T (ai_undo_push)
  566.         (ddattdef_main)                            ; proceed!
  567.         (ai_undo_pop)
  568.      )
  569.   )
  570.  
  571.   (setq *error* old_error)
  572.   (setvar "cmdecho" old_cmd)
  573.   (princ)
  574. )
  575.  
  576. ;;;---------------------------------------------------------------------------;
  577. (princ "  íuDDATTDEFívñw╕ⁿñJíC")
  578. (princ)
  579.