FUNCTION gettextwidth,text, $
                      NORMAL=normal, $
                      DEVICE=device, $
                      DATA=data

@compile_opt

; default is charsize units

n=N_ELEMENTS(text)
width=DBLARR(n)

    IF N_ELEMENTS(normal) EQ 0 THEN normal=0
    IF N_ELEMENTS(device) EQ 0 THEN device=0
    IF N_ELEMENTS(data)   EQ 0 THEN data=0

FOR i=0,n-1 DO BEGIN
    XYOUTS,2,2,text[i],/NORMAL,NOCLIP=0,WIDTH=widthx
    IF device NE 0 THEN BEGIN
        widthx*=!D.X_SIXE
    ENDIF ELSE IF data NE 0 THEN BEGIN
        c=CONVERT_COORD([0,widthx],[0,0],/NORMAL,/TO_DATA)
        widthx=c[0,1]-c[0,0]
    ENDIF ELSE IF normal EQ 0 THEN BEGIN
        widthx*=!D.X_SIZE/!D.X_CH_SIZE
    ENDIF
    width[i]=widthx
ENDFOR

IF n EQ 1 THEN width=width[0]

RETURN,width
END
