Jump to content

What's if the user pressed CANCEL while running a lisp


Recommended Posts

Posted (edited)

Here is what I would consider a minimum for a robust error trap:

 

[color=#8b4513];++++++++++++ Set Modes & Error ++++++++++++++++++++++++++++++++++[/color]
[b][color=BLACK]([/color][/b]defun err_smd [b][color=FUCHSIA]([/color][/b][b][color=FUCHSIA])[/color][/b]

[color=#8b4513];;;START AN UNDO GROUP[/color]
[b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]zerop [b][color=MAROON]([/color][/b]getvar [color=#2f4f4f]"UNDOCTL"[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]command [color=#2f4f4f]"_.UNDO"[/color] [color=#2f4f4f]"_ALL"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
[b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]= [b][color=MAROON]([/color][/b]logand [b][color=GREEN]([/color][/b]getvar [color=#2f4f4f]"UNDOCTL"[/color][b][color=GREEN])[/color][/b] 2[b][color=MAROON])[/color][/b] 2[b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]command [color=#2f4f4f]"_.UNDO"[/color] [color=#2f4f4f]"_CONTROL"[/color] [color=#2f4f4f]"_ALL"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
[b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]= [b][color=MAROON]([/color][/b]logand [b][color=GREEN]([/color][/b]getvar [color=#2f4f4f]"UNDOCTL"[/color][b][color=GREEN])[/color][/b] 8[b][color=MAROON])[/color][/b] 8[b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]command [color=#2f4f4f]"_.UNDO"[/color] [color=#2f4f4f]"_END"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
[b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]"_.UNDO"[/color] [color=#2f4f4f]"_GROUP"[/color][b][color=FUCHSIA])[/color][/b]

[color=#8b4513];;:DEFINE ERROR TRAP[/color]
[b][color=FUCHSIA]([/color][/b]setq *error* [b][color=NAVY]([/color][/b]lambda [b][color=MAROON]([/color][/b]msg[b][color=MAROON])[/color][/b]
               [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]> [b][color=BLUE]([/color][/b]getvar [color=#2f4f4f]"CMDACTIVE"[/color][b][color=BLUE])[/color][/b] 0[b][color=GREEN])[/color][/b]
                      [b][color=GREEN]([/color][/b]command[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
               [b][color=MAROON]([/color][/b]and [b][color=GREEN]([/color][/b]/= msg [color=#2f4f4f]"quit / exit abort"[/color][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]princ [b][color=BLUE]([/color][/b]strcat [color=#2f4f4f]"\nError: *** "[/color] msg [color=#2f4f4f]" *** "[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
               [b][color=MAROON]([/color][/b]and [b][color=GREEN]([/color][/b]= [b][color=BLUE]([/color][/b]logand [b][color=RED]([/color][/b]getvar [color=#2f4f4f]"UNDOCTL"[/color][b][color=RED])[/color][/b] 8[b][color=BLUE])[/color][/b] 8[b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]command [color=#2f4f4f]"_.UNDO"[/color] [color=#2f4f4f]"_END"[/color] [color=#2f4f4f]"_.U"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
               [b][color=MAROON]([/color][/b]err_rmd[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]

[color=#8b4513];;;DECLARE SYSVAR ATOMS[/color]
      err_var '[b][color=NAVY]([/color][/b][b][color=MAROON]([/color][/b][color=#2f4f4f]"CMDECHO"[/color]   . 0[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"OSMODE"[/color]    . 0[b][color=MAROON])[/color][/b]
                [b][color=MAROON]([/color][/b][color=#2f4f4f]"SNAPMODE"[/color]  . 1[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"ORTHOMODE"[/color] . 1[b][color=MAROON])[/color][/b]
                [b][color=MAROON]([/color][/b][color=#2f4f4f]"ELEVATION"[/color] . 0[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"THICKNESS"[/color] . 0[b][color=MAROON])[/color][/b]
                [b][color=MAROON]([/color][/b][color=#2f4f4f]"UCSICON"[/color]   . 1[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"HIGHLIGHT"[/color] . 1[b][color=MAROON])[/color][/b]
                [b][color=MAROON]([/color][/b][color=#2f4f4f]"COORDS"[/color]    . 2[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"DRAGMODE"[/color]  . 2[b][color=MAROON])[/color][/b]
                [b][color=MAROON]([/color][/b][color=#2f4f4f]"DIMZIN"[/color]    . 1[b][color=MAROON])[/color][/b]
                [b][color=MAROON]([/color][/b][color=#2f4f4f]"CECOLOR"[/color]   . [color=#2f4f4f]"BYLAYER"[/color][b][color=MAROON])[/color][/b]
                [b][color=MAROON]([/color][/b][color=#2f4f4f]"CELTYPE"[/color]   . [color=#2f4f4f]"BYLAYER"[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]

[color=#8b4513];;;SET SYSVAR ATOMS[/color]
[b][color=FUCHSIA]([/color][/b]foreach v err_var
  [b][color=NAVY]([/color][/b]and [b][color=MAROON]([/color][/b]getvar [b][color=GREEN]([/color][/b]car v[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]setq err_rst [b][color=GREEN]([/color][/b]cons [b][color=BLUE]([/color][/b]cons [b][color=RED]([/color][/b]car v[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]getvar [b][color=PURPLE]([/color][/b]car v[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] err_rst[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]setvar [b][color=GREEN]([/color][/b]car v[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cdr v[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]

[b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

[color=#8b4513];++++++++++++ Return Modes & Error +++++++++++++++++++++++++++++++[/color]
[b][color=BLACK]([/color][/b]defun err_rmd [b][color=FUCHSIA]([/color][/b][b][color=FUCHSIA])[/color][/b]

[color=#8b4513];;;RESET SYSVAR ATOMS[/color]
 [b][color=FUCHSIA]([/color][/b]foreach v err_rst [b][color=NAVY]([/color][/b]setvar [b][color=MAROON]([/color][/b]car v[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cdr v[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]

[color=#8b4513];;;END THE UNDO GROUP[/color]
 [b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]"_.UNDO"[/color] [color=#2f4f4f]"_END"[/color][b][color=FUCHSIA])[/color][/b]

[color=#8b4513];;;EXIT CLEAN[/color]
 [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

[color=#8b4513];************ Main Program ***************************************[/color]
[b][color=BLACK]([/color][/b]defun c:test [b][color=FUCHSIA]([/color][/b]/ *error* err_var err_rst[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]err_smd[b][color=FUCHSIA])[/color][/b]

 [color=#8b4513];;;PLACE YOUR CODE HERE[/color]

 [b][color=FUCHSIA]([/color][/b]err_rmd[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 

This will cancel any command that is active at the time of the error/escape, reset the sysvars modes and undo any changes to the database that the the program has made.

 

IMO, Just redefining *error* so that it doesn't display an error is misleading the user into thinking that everything has been reset is not a good thing. My $0.02 -David

Edited by David Bethel
  • Replies 21
  • Created
  • Last Reply

Top Posters In This Topic

  • alanjt

    8

  • Sweety

    8

  • The Buzzard

    3

  • lpseifert

    1

Top Posters In This Topic

Posted
I guess now it's correct . :)

 

(defun *error* (msg)
   (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
     (progn
       (princ (strcat "\nError: " msg))
(and os (setvar 'osmode os))
     )
   )
)

 

Tell me please .

 

Many thanks

Dude, I posted you the correct way: http://www.cadtutor.net/forum/showthread.php?53521-What-s-if-the-user-pressed-CANCEL-while-running-a-lisp&p=362805&viewfull=1#post362805

 

You want the reset to occur, regardless of the error message. The message portion of the code should not be touched.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...