(defun c:arrow()
 (setq temp_osnap (getvar "osmode"))
 (setq size (getvar "dimasz"))
 (setvar "osmode" 512) ;nearest point
 (setq p0 (getpoint))
 (setq p1 (osnap p0 "mid"))
 (setq p2 (osnap p0 "end"))
 (setq p3 (osnap p0 "cen"))
 (if (= p3 nil)
     (progn  ;// in case of "line"
 (setq a9 (angle p2 p1))
     )
     (progn  ;// in case of "arc"
 (setq a0 (angle p3 p2))
 (setq a1 (angle p3 p1))
 ;// µÎ º¤ÅÍÀÇ »çÀÕ°¢ÀÌ 180µµ º¸´Ù ÀÛ°Ô
 (if (> (- a0 a1) (dtr 180))
     (setq a0 (- a0 (dtr 360)))
 )
 (if (< (- a0 a1) (dtr -180))
     (setq a1 (- a1 (dtr 360)))
 )
 (if (> a0 a1) ;// determine the dir. of arr.
     ;// in counterclockwise
     (setq a2 (- a0 (dtr 90)))
     ;// in clockwise
     (setq a2 (+ a0 (dtr 90)))
 )
 (setq a9 a2)      
     )
 )
 
 ;// drawing
 (setq xx (+ (car p2) (* size (cos a9))))
 (setq yy (+ (cadr p2) (* size (sin a9))))
 (setq p9 (list xx yy))
 (command "osmode" 0)
 (command "pline" p2 "w" 0 (/ size 3) p9 "w" 0 0 "")
 (setvar "osmode" temp_osnap)
)