saveas R14

We are presently installing several seats of Bricscad v8 in an office with mostly Autocad R14. I've set Bricscad to save as version R14 for compatibility.One issue I've found with this is that when a file drawn in Bricscad v8 is opened in Autocad R14 and then audited, blocks with negative rotations are reset to 0.It seems that Autocad R14 regards these as errors.This strikes me as being a possibly dangerous corruption when saving as R14, because a user would not notice anything immediately wrong.I discussed this in a support request (no. 12886)and I said I would develop a workaround which would reset these negative rotations (-15 deg. would be converted to 345 deg.) on save using a vlisp reactor. This seems to work nicely.I noticed later though that it is not recommended that (command ...) be used in a routine included in a reactor. I use (command "-layer" ...) to unlock and then relock layers to enable the reset, and I use (command "undo" "begin") and(command "undo" "end") to turn the whole operation into a single undo operation.Can anybody suggest a more elegant way to do these things without (command ...)?Though it seems to work okay as it is.(defun %fix_neg_rot (Caller CmdSet) (setq #fix (ssget "x" '((0 . "insert") (-4 . "<") (50 . 0.0))) @n 0 @t T lock "" ) (setvar "CMDECHO" 0) (command "undo" "begin") (while (setq $lyr (tblnext "LAYER" @t)) ;save locked layer list (setq @t nil) (if (minusp (cdr (assoc 62 $lyr))) (setq *lock (strcat *lock "," (cdr (assoc 2 $lyr)))) ) ) (setq *lock (substr *lock 2)) (command "-layer" "unlock" "" "") (foreach &fix (%sslist #fix) (setq $fix (entget &fix) @r (cdr (assoc 50 $fix)) @r (+ (* 2 PI) @r) $fix (subst (cons 50 @r) (assoc 50 $fix) $fix) lyr (cdr (assoc 8 $fix)) ) (entmod $fix) ) (setq @t T @n (if #fix (sslength #fix) 0) ) (while (setq $h (tblnext "BLOCK" @t)) ;block scan (setq @t nil @70 (cdr (assoc 70 $h)) ) (if (or (= 0 @70)(= (logand @70 2) 2)) ;not xrefs,etc. (progn (setq &h (cdr (assoc -2 $h))) (while &h (setq $fix (entget &h) &h (entnext &h) ) (if (eq "INSERT" (cdr (assoc 0 $fix)))(progn (setq @r (cdr (assoc 50 $fix))) (if (and (minusp @r) (not (equal 0.0 @r 0.000001)))(progn (setq @n (1+ @n) @r (+ ( 2 PI) @r) $fix (subst (cons 50 @r) (assoc 50 $fix) $fix) ) (entmod $fix) )) )) ) ));if );while (command "-layer" "lock" *lock "") (command "undo" "end") (setvar "CMDECHO" 1) (princ (strcat "\n" (itoa @n) " entity negative rotations fixed")) (setq #fix nil) (princ))(if (not &fix_neg_rot_save) (setq &fix_neg_rot_save (vlr-dwg-reactor nil '((:vlr-BeginSave . %fix_neg_rot))) ))