' ***********************************************************
' PROGRAM:      dpicalc.bac
' PURPOSE:      to calculate dpi for a given screen resolution
'                       and size
' AUTHOR:               vovchik (Puppy Linux forum)
' COMMENTS:     ported from an Arch Linux python script                
' DEPENDS:      bash, bacon
' PLATFORM:     Puppy Linux (actually, any *nix)
' DATE:         22-01-2010
' VERSION:      0.1
' ***********************************************************

' *****************
' DECLARATIONS
' *****************

GLOBAL hres, vres, dsize, dpi, mydpi TYPE FLOATING
GLOBAL version$ TYPE STRING

' *****************
' END DECLARATIONS
' *****************

' *****************
' INIT VARS
' *****************

version$ = "v. 0.1"

' *****************
' END INIT VARS
' *****************


' *****************
' FUNCTIONs
' *****************

FUNCTION CALCDPI(FLOATING hres, FLOATING vres, FLOATING dsize)
        dpi = hres/(hres / SQR(POW(hres,2) + POW(vres,2)) * dsize)
        RETURN dpi
END FUNCTION

FUNCTION USAGE()
        PRINT NL$,"BaCon DPI Calculator - ", version$,NL$
        PRINT "Usage: dpicalc hres vres size", NL$
        PRINT "Where:"
        PRINT "  hres = horizontal resolution in pixels"
        PRINT "  vres = vertical resolution in pixels"
        PRINT "  size = diag. size of screen in inches",NL$
        PRINT "Example: dpicalc 1280 1024 19", NL$
        END
        RETURN TRUE
END FUNCTION

FUNCTION GETARGS()
        SPLIT ARGUMENT$ BY " " TO array$ SIZE dimension
        IF dimension < 4 THEN
                USAGE
        ELSE
                IF VAL(array$[1]) > 0 AND VAL(array$[2]) > 0 AND VAL(array$[3]) > 0 THEN
                        hres   = VAL(array$[1])
                        vres   = VAL(array$[2])
                        dsize  = VAL(array$[3])
                ELSE
                        PRINT NL$, "DPI Calculator: Input arguments contain bad values."
                        USAGE
                END IF
        END IF
        RETURN TRUE
END FUNCTION

FUNCTION SHOWRESULTS()
        STR1$ = "Calculated DPI for screen resolution of "
        PRINT NL$, STR1$, hres,"x",vres,"pixels and ",dsize, " in."," diagonal = ", mydpi, NL$
        RETURN TRUE
END FUNCTION

' *****************
' END FUNCTIONS
' *****************


' *****************
' MAIN
' *****************

GETARGS
mydpi = CALCDPI(hres, vres, dsize)
SHOWRESULTS
END

' *****************
' END MAIN
' *****************