I used them in my program. Any part of the program that does a certain thing, well, the code you write to do it is called an algorithm. This collection of subroutines pops up a calculator that does basic math.
$INCLUDE "\pb32\pbwindo.inc"
%false = 0
%true = -1
cls
scalc
SUB scalc
SHARED trow%,leftborder%,rightborder%,brow%,back%,fore%,calcscreen$,row%,col%
SHARED savecalc$
blinkoff
savecalc$ = savescreen$
fore% = 15
back% = 9
trow% = 5 'this variable connot be less than 3
leftborder% = 4 'nor can this one
rightborder% = 4
brow% = 5
' draw frame for calculater
popwindow trow%-2,leftborder%-1,brow%+10,rightborder%+13,2,fnattr%(fore%,back%) ,0,0,0,""
popwindow trow%,leftborder%,brow%,rightborder%,1,fnattr%(fore%,back%),0,0,0,""
xqprint "7",trow%,leftborder%,fnattr%(fore%,back%)
popwindow trow%,leftborder%+3,brow%,rightborder%+3,1,fnattr%(fore%,back%),0,0,0,""
xqprint "8",trow%,leftborder%+3,fnattr%(fore%,back%)
popwindow trow%,leftborder%+6,brow%,rightborder%+6,1,fnattr%(fore%,back%),0,0,0,""
xqprint "9",trow%,leftborder%+6,fnattr%(fore%,back%)
popwindow trow%,leftborder%+9,brow%,rightborder%+9,1,fnattr%(fore%,back%),0,0,0,""
xqprint "/",trow%,leftborder%+9,fnattr%(fore%,back%)
popwindow trow%,leftborder%+12,brow%,rightborder%+12,1,fnattr%(fore%,back%),0,0,0,""
xqprint CHR$(27),trow%,leftborder%+12,fnattr%(fore%,back%)
''next row
popwindow trow%+3,leftborder%,brow%+3,rightborder%,1,fnattr%(fore%,back%),0,0,0,""
xqprint "4",trow%+3,leftborder%,fnattr%(fore%,back%)
popwindow trow%+3,leftborder%+3,brow%+3,rightborder%+3,1,fnattr%(fore%,back%),0,0,0,""
xqprint "5",trow%+3,leftborder%+3,fnattr%(fore%,back%)
popwindow trow%+3,leftborder%+6,brow%+3,rightborder%+6,1,fnattr%(fore%,back%),0,0,0,""
xqprint "6",trow%+3,leftborder%+6,fnattr%(fore%,back%)
popwindow trow%+3,leftborder%+9,brow%+3,rightborder%+9,1,fnattr%(fore%,back%),0,0,0,""
xqprint "*",trow%+3,leftborder%+9,fnattr%(fore%,back%)
popwindow trow%+3,leftborder%+12,brow%+3,rightborder%+12,1,fnattr%(fore%,back%),0,0,0,""
xqprint "A",trow%+3,leftborder%+12,fnattr%(fore%,back%)
''next row
popwindow trow%+6,leftborder%,brow%+6,rightborder%,1,fnattr%(fore%,back%),0,0,0,""
xqprint "1",trow%+6,leftborder%,fnattr%(fore%,back%)
popwindow trow%+6,leftborder%+3,brow%+6,rightborder%+3,1,fnattr%(fore%,back%),0,0,0,""
xqprint "2",trow%+6,leftborder%+3,fnattr%(fore%,back%)
popwindow trow%+6,leftborder%+6,brow%+6,rightborder%+6,1,fnattr%(fore%,back%),0,0,0,""
xqprint "3",trow%+6,leftborder%+6,fnattr%(fore%,back%)
popwindow trow%+6,leftborder%+9,brow%+6,rightborder%+9,1,fnattr%(fore%,back%),0,0,0,""
xqprint "+",trow%+6,leftborder%+9,fnattr%(fore%,back%)
popwindow trow%+6,leftborder%+12,brow%+6,rightborder%+12,1,fnattr%(fore%,back%),0,0,0,""
xqprint "=",trow%+6,leftborder%+12,fnattr%(fore%,back%)
''ZERO
popwindow trow%+9,leftborder%,brow%+9,rightborder%,1,fnattr%(fore%,back%),0,0,0,""
xqprint "0",trow%+9,leftborder%,fnattr%(fore%,back%)
popwindow trow%+9,leftborder%+3,brow%+9,rightborder%+3,1,fnattr%(fore%,back%),0,0,0,""
xqprint ".",trow%+9,leftborder%+3,fnattr%(fore%,back%)
popwindow trow%+9,leftborder%+6,brow%+9,rightborder%+6,1,fnattr%(fore%,back%),0,0,0,""
xqprint "%",trow%+9,leftborder%+6,fnattr%(fore%,back%)
popwindow trow%+9,leftborder%+9,brow%+9,rightborder%+9,1,fnattr%(fore%,back%),0,0,0,""
xqprint "-",trow%+9,leftborder%+9,fnattr%(fore%,back%)
popwindow trow%+9,leftborder%+12,brow%+9,rightborder%+12,1,fnattr%(fore%,back%),0,0,0,""
xqprint "C",trow%+9,leftborder%+12,fnattr%(fore%,back%)
xqprint SPACE$(15),trow%-2,leftborder%-1,fnattr%(0,7)
initialize
END SUB
SUB initialize
SHARED process_flag%,first#,second#,temp$,calc$,leftborder%,trow%,a$
SHARED row%,col%,multi_flag%,shared_total#,mode_flag%,calc_flag%
SHARED total#,divtotal#,percent_flag%,percent_total#
percent_flag% = %false
percent_total# = %false
col% = leftborder%-1
row% = trow%-2
process_flag% = %false
div_flag% = %false
multi_flag% = %false
total# = %false
first# = %false
second# = %false
a$ = ""
temp$ = ""
shared_total# = %false
mode_flag% = %false
calc_flag% = %false
total# = %false
divtotal# = %false
TIMER OFF
calc$ = SPACE$(14)+"0"
xqprint calc$,row%,col%,fnattr%(0,15)
LOCATE row%,col%+14,1
dataEntry
END SUB
SUB DataEntry
SHARED trow%,leftborder%,rightborder%,brow%,back%,fore%,calcscreen$,row%,col%,calc$
SHARED process_flag%,total#,first#,second#,temp$,calc$,a$,multi_flag%
SHARED shared_total#,mode_flag%,calc_flag%,savecalc$,mode_flag%,percent_flag%
SHARED percent_total#
DO
WHILE NOT INSTAT
WEND
a$=UCASE$(INKEY$)
IF percent_flag% THEN
percent_flag% = %false
SELECT CASE a$
CASE "+"
INCR shared_total#,percent_total#
EXIT SELECT
CASE "-"
DECR shared_total#,percent_total#
EXIT SELECT
CASE ELSE
a$ = ""
shared_total# = %false
ITERATE
END SELECT
END IF
SELECT CASE a$
CASE CHR$(0,66)
restorescreen savecalc$
calc_flag% = %true
blinkon
EXIT FAR
CASE "A"
popwindow trow%+3,leftborder%+12,brow%+3,rightborder%+12,2,fnattr%(15,9),0,0,0,""
xqprint "A",trow%+3,leftborder%+12,fnattr%(15,9)
DELAY .09
popwindow trow%+3,leftborder%+12,brow%+3,rightborder%+12,1,fnattr%(fore%,back%),0,0,0,""
xqprint "A",trow%+3,leftborder%+12,fnattr%(fore%,back%)
process_flag% = 7
CASE "C"
popwindow trow%+9,leftborder%+12,brow%+9,rightborder%+12,2,fnattr%(15,9),0,0,0,""
xqprint "C",trow%+9,leftborder%+12,fnattr%(15,9)
DELAY .09
popwindow trow%+9,leftborder%+12,brow%+9,rightborder%+12,1,fnattr%(fore%,back%),0,0,0,""
xqprint "C",trow%+9,leftborder%+12,fnattr%(fore%,back%)
process_flag% = 6
CASE CHR$(27)
process_flag% = 10
CASE CHR$(0,46)
process_flag% = 7
CASE "="
popwindow trow%+6,leftborder%+12,brow%+6,rightborder%+12,2,fnattr%(15,9),0,0,0,""
xqprint "=",trow%+6,leftborder%+12,fnattr%(15,9)
delay .09
popwindow trow%+6,leftborder%+12,brow%+6,rightborder%+12,1,fnattr%(fore%,back%),0,0,0,""
xqprint "=",trow%+6,leftborder%+12,fnattr%(fore%,back%)
process_flag% = 11
EXIT SELECT
CASE "/"
popwindow trow%,leftborder%+9,brow%,rightborder%+9,2,fnattr%(15,9),0,0,0,""
xqprint "/",trow%,leftborder%+9,fnattr%(15,9)
DELAY .09
popwindow trow%,leftborder%+9,brow%,rightborder%+9,1,fnattr%(fore%,back%),0,0,0,""
xqprint "/",trow%,leftborder%+9,fnattr%(fore%,back%)
process_flag% = 5
EXIT SELECT
CASE CHR$(48) TO CHR$(57)
SELECT CASE a$
CASE "1"
popwindow trow%+6,leftborder%,brow%+6,rightborder%,2,fnattr%(15,9),0,0,0,""
xqprint "1",trow%+6,leftborder%,fnattr%(15,9)
DELAY .09
popwindow trow%+6,leftborder%,brow%+6,rightborder%,1,fnattr%(fore%,back%),0,0,0,""
xqprint "1",trow%+6,leftborder%,fnattr%(fore%,back%)
EXIT SELECT
CASE "2"
popwindow trow%+6,leftborder%+3,brow%+6,rightborder%+3,2,fnattr%(15,9),0,0,0,""
xqprint "2",trow%+6,leftborder%+3,fnattr%(15,9)
delay .1
popwindow trow%+6,leftborder%+3,brow%+6,rightborder%+3,1,fnattr%(fore%,back%),0,0,0,""
xqprint "2",trow%+6,leftborder%+3,fnattr%(fore%,back%)
EXIT SELECT
CASE "3"
popwindow trow%+6,leftborder%+6,brow%+6,rightborder%+6,2,fnattr%(15,9),0,0,0,""
xqprint "3",trow%+6,leftborder%+6,fnattr%(15,9)
DELAY .09
popwindow trow%+6,leftborder%+6,brow%+6,rightborder%+6,1,fnattr%(fore%,back%),0,0,0,""
xqprint "3",trow%+6,leftborder%+6,fnattr%(fore%,back%)
EXIT SELECT
CASE "4
popwindow trow%+3,leftborder%,brow%+3,rightborder%,2,fnattr%(15,9),0,0,0,""
xqprint "4",trow%+3,leftborder%,fnattr%(15,9)
DELAY .09
popwindow trow%+3,leftborder%,brow%+3,rightborder%,1,fnattr%(fore%,back%),0,0,0,""
xqprint "4",trow%+3,leftborder%,fnattr%(fore%,back%)
EXIT SELECT
CASE "5"
popwindow trow%+3,leftborder%+3,brow%+3,rightborder%+3,2,fnattr%(15,9),0,0,0,""
xqprint "5",trow%+3,leftborder%+3,fnattr%(15,9)
DELAY .09
popwindow trow%+3,leftborder%+3,brow%+3,rightborder%+3,1,fnattr%(fore%,back%),0,0,0,""
xqprint "5",trow%+3,leftborder%+3,fnattr%(fore%,back%)
EXIT SELECT
CASE "6"
popwindow trow%+3,leftborder%+6,brow%+3,rightborder%+6,2,fnattr%(15,9),0,0,0,""
xqprint "6",trow%+3,leftborder%+6,fnattr%(15,9)
DELAY .09
popwindow trow%+3,leftborder%+6,brow%+3,rightborder%+6,1,fnattr%(fore%,back%),0,0,0,""
xqprint "6",trow%+3,leftborder%+6,fnattr%(fore%,back%)
EXIT SELECT
CASE "7"
popwindow trow%,leftborder%,brow%,rightborder%,2,fnattr%(15,9),0,0,0,""
xqprint "7",trow%,leftborder%,fnattr%(15,9)
DELAY .09
popwindow trow%,leftborder%,brow%,rightborder%,1,fnattr%(fore%,back%),0,0,0,""
xqprint "7",trow%,leftborder%,fnattr%(fore%,back%)
EXIT SELECT
CASE "8"
popwindow trow%,leftborder%+3,brow%,rightborder%+3,2,fnattr%(15,9),0,0,0,""
xqprint "8",trow%,leftborder%+3,fnattr%(15,9)
DELAY .09
popwindow trow%,leftborder%+3,brow%,rightborder%+3,1,fnattr%(fore%,back%),0,0,0,""
xqprint "8",trow%,leftborder%+3,fnattr%(fore%,back%)
EXIT SELECT
CASE "9"
popwindow trow%,leftborder%+6,brow%,rightborder%+6,2,fnattr%(7%,back%),0,0,0,""
xqprint "9",trow%,leftborder%+6,fnattr%(fore%,back%)
DELAY .09
popwindow trow%,leftborder%+6,brow%,rightborder%+6,1,fnattr%(fore%,back%),0,0,0,""
xqprint "9",trow%,leftborder%+6,fnattr%(fore%,back%)
EXIT SELECT
CASE "0"
popwindow trow%+9,leftborder%,brow%+9,rightborder%,2,fnattr%(15,9),0,0,0,""
xqprint "0",trow%+9,leftborder%,fnattr%(15,9)
DELAY .09
popwindow trow%+9,leftborder%,brow%+9,rightborder%,1,fnattr%(fore%,back%),0,0,0,""
xqprint "0",trow%+9,leftborder%,fnattr%(fore%,back%)
EXIT SELECT
END SELECT
process_flag% = 1
EXIT SELECT
CASE "."
IF RTRIM$(temp$) = "0" THEN EXIT SELECT
IF INSTR(temp$,".") THEN ITERATE DO
IF RTRIM$(temp$) = "" THEN temp$ = "0"
popwindow trow%+9,leftborder%+3,brow%+9,rightborder%+3,2,fnattr%(15,9),0,0,0,""
xqprint ".",trow%+9,leftborder%+3,fnattr%(15,9)
DELAY .09
popwindow trow%+9,leftborder%+3,brow%+9,rightborder%+3,1,fnattr%(fore%,back%),0,0,0,""
xqprint ".",trow%+9,leftborder%+3,fnattr%(fore%,back%)
process_flag% = 1
EXIT SELECT
CASE CHR$(8)
popwindow trow%,leftborder%+12,brow%,rightborder%+12,2,fnattr%(15,9),0,0,0,""
xqprint CHR$(27),trow%,leftborder%+12,fnattr%(15,9)
DELAY .09
popwindow trow%,leftborder%+12,brow%,rightborder%+12,1,fnattr%(fore%,back%),0,0,0,""
xqprint CHR$(27),trow%,leftborder%+12,fnattr%(fore%,back%)
process_flag% = 8
EXIT SELECT
CASE "C","c" 'clear
process_flag% = 6
CASE "-"
popwindow trow%+9,leftborder%+9,brow%+9,rightborder%+9,2,fnattr%(15,9),0,0,0,""
xqprint "-",trow%+9,leftborder%+9,fnattr%(15,9)
DELAY .09
popwindow trow%+9,leftborder%+9,brow%+9,rightborder%+9,1,fnattr%(fore%,back%),0,0,0,""
xqprint "-",trow%+9,leftborder%+9,fnattr%(fore%,back%)
process_flag% = 3
CASE "*"
popwindow trow%+3,leftborder%+9,brow%+3,rightborder%+9,2,fnattr%(15,9),0,0,0,""
xqprint "*",trow%+3,leftborder%+9,fnattr%(15,9)
DELAY .09
popwindow trow%+3,leftborder%+9,brow%+3,rightborder%+9,1,fnattr%(fore%,back%),0,0,0,""
xqprint "*",trow%+3,leftborder%+9,fnattr%(fore%,back%)
process_flag% = 4
EXIT SELECT
CASE "+"
popwindow trow%+6,leftborder%+9,brow%+6,rightborder%+9,2,fnattr%(15,9),0,0,0,""
xqprint "+",trow%+6,leftborder%+9,fnattr%(15,9)
DELAY .09
popwindow trow%+6,leftborder%+9,brow%+6,rightborder%+9,1,fnattr%(fore%,back%),0,0,0,""
xqprint "+",trow%+6,leftborder%+9,fnattr%(fore%,back%)
process_flag% = 2
EXIT SELECT
CASE "%"
process_flag% = 9
popwindow trow%+9,leftborder%+6,brow%+9,rightborder%+6,2,fnattr%(15,9),0,0,0,""
xqprint "%",trow%+9,leftborder%+6,fnattr%(15,9)
DELAY .09
popwindow trow%+9,leftborder%+6,brow%+9,rightborder%+6,1,fnattr%(fore%,back%),0,0,0,""
xqprint "%",trow%+9,leftborder%+6,fnattr%(fore%,back%)
EXIT SELECT
CASE ELSE
ITERATE
END SELECT
SELECT CASE process_flag%
CASE 1
display temp$,a$
CASE 2
addition temp$,a$
CASE 3
subtract temp$,a$
CASE 4
multiply temp$,a$
CASE 5
division temp$,a$
CASE 6
a$ = ""
temp$ = ""
calc$ = SPACE$(14)+"0"
xqprint calc$,row%,col%,fnattr%(0,15)
LOCATE row%,col%+14,1
CASE 7
initialize
CASE 8
temp$ = RTRIM$(temp$)
IF temp$= "" THEN EXIT SELECT
leng% = LEN(temp$)
bs$ = LEFT$(temp$,leng%-1)
temp$ = bs$
temp$ = " "+temp$
IF RTRIM$(temp$) = "" THEN temp$ = "0"
xqprint temp$,row%,col%+(15-LEN(temp$)),fnattr%(0,15)
temp$ = LTRIM$(temp$)
bs$ = ""
leng% = 0
LOCATE row%,col%+14,1
CASE 9
cpercent temp$,a$
CASE 10
restorescreen calcscreen$
blinkon
EXIT FAR
CASE 11
equal temp$,a$
END SELECT
LOOP
END SUB
SUB division (value1$,value2$)
SHARED shared_total#,mode_flag%,divtotal#
mode_flag% = 4
IF shared_total# = 0 THEN
value2$ = ""
display value1$,value2$
shared_total# = VAL(value1$)
divtotal# = VAL(value1$)
value1$ = ""
EXIT SUB
END IF
SELECT CASE VAL(value1$)
CASE <> 0
divtotal# = shared_total# / VAL(value1$)
shared_total# = divtotal#
CASE ELSE
divtotal# = shared_total#
EXIT SUB
END SELECT
value1$ = STR$(shared_total#)
value2$ = ""
display value1$,value2$
'shared_total# = 0
value1$ = ""
END SUB
SUB equal (value1$,value2$)
SHARED shared_total#,mode_flag%,divtotal#
LOCAL total#
SELECT CASE mode_flag%
CASE 1
INCR shared_total#,VAL(value1$)
CASE 2
shared_total# = shared_total#*VAL(value1$)
CASE 3
DECR shared_total#,VAL(value1$)
CASE 4
IF divtotal# = 0 THEN
initialize
ELSE
IF VAL(value1$) = 0 THEN initialize
shared_total# = shared_total#/VAL(value1$)
shared_total#=ROUND(shared_total#,2)
divtotal# = shared_total#
END IF
END SELECT
value1$ = STR$(shared_total#)
value2$ = ""
display value1$,value2$
'shared_total# = 0
value1$ = ""
END SUB
SUB addition (value1$,value2$)
SHARED shared_total#,mode_flag%
mode_flag% = 1
INCR shared_total#,VAL(value1$)
value1$ = STR$(shared_total#)
value2$ = ""
display value1$,value2$
value1$ = ""
EXIT SUB
END SUB
SUB subtract (value1$,value2$)
SHARED shared_total#,mode_flag%
mode_flag% = 3
'IF shared_total# = 0 THEN shared_total# = VAL(value1$)
DECR shared_total#,VAL(value1$)
value1$ = STR$(shared_total#)
value2$ = ""
display value1$,value2$
value1$ = ""
EXIT SUB
END SUB
SUB multiply (value1$,value2$)
SHARED shared_total#,mode_flag%,total#
LOCAL product#,mtotal#
mode_flag% = 2
IF shared_total# = 0 THEN
IF total# = 0 THEN
shared_total# = VAL(value1$)
total# = VAL(value1$)
display value1$,nul$
value1$ = ""
EXIT SUB
END IF
END IF
mode_flag% = 2
IF total# <> 0 THEN
product# = total#*VAL(value1$)
product# = ROUND(product#,2)
value1$ = STR$(product#)
shared_total#=product#
total# = product#
product# = 0
display value1$,nul$
value1$ = ""
END IF
EXIT SUB
END SUB
SUB display (oldkey$,keystroke$)
SHARED row%,col%,mode_flag%
LOCAL new$,errorflag%
errorflag% = %false
IF oldkey$ = "0" THEN oldkey$ = ""
new$ = oldkey$+keystroke$
new$ = RTRIM$(new$)
new$ = LTRIM$(new$)
pad% = LEN(new$)
IF LEN(new$) > 15 THEN
new$ = "OVERFLOW ERROR"
errorflag% = %true
END IF
pad% = LEN(new$)
xqprint SPACE$(15),row%,col%,fnattr%(0,15)
xqprint new$,row%,(col%+15)-pad%,fnattr%(0,15)
oldkey$ = new$
IF errorflag% THEN
oldkey$ = ""
new$ = ""
errorflag% = %false
DO
WHILE NOT INSTAT
WEND
keypres$=UCASE$(inkey$)
LOOP UNTIL keypres$ = "C" OR keypres$ = "A"
initialize
END IF
END SUB
SUB cpercent (value1$,value2$)
SHARED shared_total#,percent_flag%,percent_total#
percent_flag% = %true
percent_op# = VAL(value1$)/100
percent_total# = shared_total#
percent_total# = shared_total# * percent_op#
percent_total#=ROUND(percent_total#,2)
value1$ = STR$(percent_total#)
value2$ = ""
display value1$,value2$
value1$ = ""
END SUB
SUB blinkon
' enable blink
Reg 2,1
Reg 1,&H1003 ' BIOS service to disable/enable blink
Call Interrupt &H10
END SUB
SUB blinkoff
'*** disable blink
Reg 2,0
Reg 1,&H1003 ' BIOS service to disable/enable blink
Call Interrupt &H10
END SUB
DEF FNattr%( fore%, back% )
local temp%
temp% = ( back% * 16 ) + fore%
if fore% > 15 then temp% = temp% + 112
fnattr% = temp%
END DEF
FUNCTION SaveScreen$
REG 1, 15 * 256
CALL INTERRUPT &H10
IF REG( 1 ) - ( REG( 1 ) \ 256 ) * 256 = 7 THEN Address = &HB000 ELSE Address = &HB800
DEF SEG = ADDRESS
SaveScreen$ = PEEK$( 0, 4000 )
DEF SEG
ON ERROR GOTO 0
EXIT function
END FUNCTION
SUB RestoreScreen( S$ )
REG 1, 15 * 256
CALL INTERRUPT &H10
IF REG( 1 ) - ( REG( 1 ) \ 256 ) * 256 = 7 THEN Address = &HB000 ELSE Address = &HB800
DEF SEG = Address
POKE$ 0, S$
DEF SEG
s$ = ""
EXIT SUB
END SUB