Your Pages‎ > ‎

User Subroutines

Add your User Subroutines or Functions contributions below...

Random RGB Colour - Electroguard 2/4/18

CODE: Random RGB Colour

sub randomcol(ret$)

local R, G, B

R = rnd(256)+1: G = rnd(256)+1: B = rnd(256)+1:

ret$ = "#" + right$("00000" + hex$((R << 16) + (G << 8) + B), 6)

end sub

Two User Subs for creating 3-byte numbers (hhmmss, yymmdd) from time and date strings ("hh:mm:ss", "dd/mm/yy") - Electroguard 2/4/18
Used for making straight-forward numeric comparisons of times or dates, ie: which of 2 dates is the latest.


sub time(t$,ret)

local h,m,sy,

h = val(word$(t$,1,":"))

m = val(word$(t$,2,":"))

s = val(word$(t$,3,":"))

ret = (h << 16) + (m << 8) + s

end sub

sub date(d$,ret)

local d,m,y,ret

d = val(word$(d$,1,"/"))

m = val(word$(d$,2,"/"))

y = val(word$(d$,3,"/"))

ret = (y << 16) + (m << 8) + d

end sub

Save and Re-load parameters from a configuration file - Electroguard 2/4/18



' Saves settings to file

a$ = ""

if FILE.EXISTS(filename$) > 0 then a$ = FILE.READ$(filename$)

if a$ <> "" then b$ = a$

gosub setpars

FILE.SAVE filename$, a$

gosub paint



' Loads settings from file

a$ = ""

gosub setpars

b$ = a$

a$ = ""

if FILE.EXISTS(filename$) > 0 then a$ = FILE.READ$(filename$)

gosub getpars


gosub paint



if WORD.GETPARAM$(a$,"font$") <> ""  then font$ = WORD.GETPARAM$(a$,"font$")

if WORD.GETPARAM$(a$,"fontcol$") <> ""  then fontcol$ = WORD.GETPARAM$(a$,"fontcol$")

if WORD.GETPARAM$(a$,"fontstyle$") <> ""  then fontstyle$ = WORD.GETPARAM$(a$,"fontstyle$")

if WORD.GETPARAM$(a$,"fontweight$") <> ""  then fontweight$ = WORD.GETPARAM$(a$,"fontweight$")

if WORD.GETPARAM$(a$,"fontbak$") <> ""  then fontbak$ = WORD.GETPARAM$(a$,"fontbak$")

if WORD.GETPARAM$(a$,"fontgrad$") <> ""  then fontgrad$ = WORD.GETPARAM$(a$,"fontgrad$")

if WORD.GETPARAM$(a$,"fontgradflag$") <> ""  then fontgradflag = val(WORD.GETPARAM$(a$,"fontgradflag$"))

if WORD.GETPARAM$(a$,"fontpad$") <> ""  then fontpad$ = WORD.GETPARAM$(a$,"fontpad$")

if WORD.GETPARAM$(a$,"fontsize$") <> ""  then fontsize$ = WORD.GETPARAM$(a$,"fontsize$")

if WORD.GETPARAM$(a$,"bordsize$") <> ""  then bordsize$ = WORD.GETPARAM$(a$,"bordsize$")

if WORD.GETPARAM$(a$,"bordrad$") <> ""  then bordrad$ = WORD.GETPARAM$(a$,"bordrad$")

if WORD.GETPARAM$(a$,"bordcol$") <> ""  then bordcol$ = WORD.GETPARAM$(a$,"bordcol$")

if WORD.GETPARAM$(a$,"bakcol$") <> ""  then bakcol$ = WORD.GETPARAM$(a$,"bakcol$")



WORD.SETPARAM  a$, "font$", font$

WORD.SETPARAM  a$, "fontstyle$", fontstyle$

WORD.SETPARAM  a$, "fontweight$", fontweight$

WORD.SETPARAM  a$, "fontcol$", fontcol$

WORD.SETPARAM  a$, "fontbak$", fontbak$

WORD.SETPARAM  a$, "fontgrad$", fontgrad$

WORD.SETPARAM  a$, "fontgradflag$", str$(fontgradflag )

WORD.SETPARAM  a$, "fontpad$", fontpad$

WORD.SETPARAM  a$, "fontsize$", fontsize$

WORD.SETPARAM  a$, "bordsize$", bordsize$

WORD.SETPARAM  a$, "bordrad$", bordrad$

WORD.SETPARAM  a$, "bordcol$", bordcol$

WORD.SETPARAM  a$, "bakcol$", bakcol$



A User Sub to control buffered output to the browser in manageable mouthfuls to avoid memory indigestion.
It allows my script to run for continued development, whereas it had previously been stopping with 'out of memory' errors when sending output to the browser, so that's all I'm interested in.
Instead of using an accumulating variable (eg: a$=a$+"more") each line is sent directly to the HTM user sub as shown in the example snippet.
The HTM user sub will accumulate each new incoming$ string into buffer$ until it reaches the assigned buffersize, which will then cause that buffered mouthful to be sent to the browser, and pause long enough for it to be digested before sending any more.
Sending an empty string, ie: HTM  "", will flush the existing partial buffer$ contents out to the browser, so use this after sending all the data.. 


HTM  "first bit" + "<br>"
HTM  "second bit" + "<br>"
HTM  ""            'calling subroutine with empty string causes existing buffer contents to be flushed out to the browser

sub HTM(incoming$)
if (len(incoming$)+len(buffer$) > buffersize) or (incoming$="") then
 html buffer$
 pause 200        'allows time for the browser to digest the current mouthful before being sent another (play with the delay to suit yourself)
end sub

Inc(rement) and Dec(crement) user subs - Electroguard 1/10/20

Each time a variable needs incrementing or decrementing the variable name only needs using once,eg:  inc page_number  instead of  page_number = page_number + 1

sub inc( it )
it = it + 1
end sub

sub dec( it )
it = it - 1
end sub

There is no conflict with reserved using the current  Annex32 1.43.5, but it would be easy to slightly rename the user subs to eg: incr and decr if ever needed.