Hi,
Before the code, some comments:
Command: (entget (car (entsel)))
Command: Select Object
Pick a block that is inserted with angle 90 - and here is the dump:
((-1 . <Objektname: 14749f0>) (0 . "INSERT"

(330 . <Objektname:
14748f8>) (5 . "3E"

(100 . "AcDbEntity"

(67 . 0) (410 . "Model"

(8 . "0"
(100 . "AcDbBlockReference"

(2 . "tempi"

(10 220.534 70.6133 0.0) (41 . 1.0)
(42 . 1.0) (43 . 1.0) (50 . 1.5708) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0)
(210 0.0 0.0 1.0))
Indeed group code 50 corresponds to the angle of rotation - but in radians! Not in degrees.
It is half of pi. 3.1416/2 = 1.5708
The precision depends on the setting for units in the drawing.
So, here is the trick:
(cond
((= (dxf 50 ED) (angtof "90.0000"

) (found90))
((= (dxf 50 ED) (angtof "0.0000"

) (found00))
((= 1 1)(foundinclined))
);END cond
ED is the entity data from entget. dxf is a one line function below. found90 and found00 are very short functions below.
We are comparing the value of group code 50 with (angtof "90.0000"

This converts the angle given as text into radians and with default precision - we dont even need to know what the precision is.
So, whatever precision the units in the drawing are set to, applies to both sides of the equation.
An inspiration of mine, lighted up just today. What do you think?
I wrote this code today, for you. I debugged it on Acad2000.
The structure is lightly spread so that other code may easily be inserted
to do things with those blocks. Namely, functions starting with found.. are to be extended.
Hope this is helpful.
The functions used are the same for Acad14 but still, I would appreciate feedback on debugging there.
Have fun.
tigrek@hotpop.com
----------------------------
;file blockrotation.lsp
;sorts all blocks in the drawing according to inclination - vertical, horizontal, inclined.
;ssget can be revised to allow selecting blocks in part of the drawing.
;to remove the "X" from the ssget statement should allow this - but I did not test.
(defun C:BlockRotation()
(setq SSrot00 (ssadd))
(setq SSrot90 (ssadd))
(setq SSrotxx (ssadd))
(setq filt1 (list (cons 0 "Insert"

))
(setq SUZY (ssget "X" filt1)) ;while
(if (> (sslength SUZY) 0)(progn
;for each filtered block
(setq LENSUZY (sslength SUZY))
(setq COUNTER 0)
(while (setq EDNA (ssname SUZY COUNTER))
(setq ED (entget EDNA))
(cond
((= (dxf 50 ED) (angtof "90.0000"

) (found90))
((= (dxf 50 ED) (angtof "0.0000"

) (found00))
((= 1 1)(foundinclined))
);END cond
(setq COUNTER (+ 1 COUNTER))
);END while
));END if progn
(print "total vertical blocks in SSrot00... "

(princ (sslength SSrot90))
(print "total horizontal blocks in SSrot90... "

(princ (sslength SSrot00))
(print "total inclined blocks in SSrotxx... "

(princ (sslength SSrotxx))
(print "Sum total blocks in drawing... "

(princ (+ (sslength SSrot90)
(sslength SSrot00)
(sslength SSrotxx)
)
)
(princ)
);END defun
;--------
(DEFUN found90()
(ssadd EDNA SSrot90)
(print "Found vertical block. Angle = "

(princ (dxf 50 ED))
)
;--------
(DEFUN found00()
(ssadd EDNA SSrot00)
(print "Found horizontal block. Angle = "

(princ (dxf 50 ED))
)
;--------
(DEFUN foundinclined()
(ssadd EDNA SSrotxx)
(print "Found inclined block. Angle = "

(princ (dxf 50 ED))
)
;----------
(defun dxf (n ed) (cdr (assoc n ed)))
;-----------------