This page provide some sample Silk scripts (source code).
This example calculates the principle and interest payment amount on a loan. It assumes the host application defines the
functions Print()
, PrintLine()
, ReadLine()
, ReadKey()
, ClearScreen()
and SetColor()
. It also assumed the
host application has defined color variables for user with SetColor()
.
///////////////////////////////////////////////////////////////
// Silk - Sample script
//
main()
{
setcolor white, darkblue
clearscreen
print "Enter loan amount: "
loanamount = readline()
print "Enter number of years: "
payments = readline()
print "Enter the interest rate percent: "
interestrate = readline()
print "Payment (principle and interest) is: "
print "$", round(calculatepayment(loanamount, payments * 12, interestrate / 100 / 12), 2)
printline
}
calculatepayment(loanamount, payments, interestrate)
{
if payments = 0
return loanamount
if interestrate = 0
return loanamount / payments
temp = pow(interestrate + 1.0, payments)
return -(-(loanamount * temp) / ((temp - 1) / interestRate))
}
This example displays all the prime numbers within the specified range. It assumes the host application defines the
functions Print()
, PrintLine()
, ReadLine()
, ReadKey()
, ClearScreen()
and SetColor()
. It also assumed the
host application has defined color variables for user with SetColor()
.
///////////////////////////////////////////////////////////////
// Silk - Sample script
//
main()
{
// Set colors and clear screen
setcolor white, darkblue
clearscreen
// Get start number
print "Enter starting number: "
start = readline()
if start = ""
return
// Get end number
print "Enter ending number: "
end = readline()
if end = ""
return
for i = start to end
{
flag_var = 0
for j = 2 to i / 2
{
if(i % j = 0)
{
flag_var = 1
break
}
}
if flag_var = 0
printline i
}
}
This example indicates whether or not the entered years are leap years. It assumes the host application defines the
functions Print()
, PrintLine()
, ReadLine()
, ReadKey()
, ClearScreen()
and SetColor()
. It also assumed the
host application has defined color variables for user with SetColor()
.
///////////////////////////////////////////////////////////////
// Silk - Sample script
//
main()
{
// Set colors and clear screen
setcolor cyan, darkblue
clearscreen
// Get year
print "Enter year: "
year = readline()
while len(year) = 4
{
print year & " is"
if not isleapyear(year)
print " not"
printline " a leap year"
printline
print "Enter year: "
year = readline()
}
}
isleapyear(y)
{
// leap year if perfectly divisible by 400
if (y % 400 = 0)
return true
// not a leap year if divisible by 100
// but not divisible by 400
if (y % 100 = 0)
return false
// leap year if not divisible by 100
// but divisible by 4
if (y % 4 = 0)
return true
// all other years are not leap years
return false
}
This example paints a Mandelbrot image. This is probably not an idea application of the Silk library as the image can
take a while to render, especially if the window is large. But it does show the flexibility and power of Silk. This
examplle assumes the host application defines the functions SetPixel()
, Clear()
, Width()
and Height()
. It also
assumes the host application has defined color variables for use with SetPixel()
.
///////////////////////////////////////////////////////////////
// Silk - Mandelbrot example script
// Adapted from:
// http://csharphelper.com/blog/2014/07/draw-a-mandelbrot-set-fractal-in-c/
//
var MAX_MAG_SQUARED = 4.0
var MaxIterations = 64
var Zr = 0.0
var Zim = 0.0
var Z2r = 0.0
var Z2im = 0.0
var m_Xmin = -2.2
var m_Xmax = 1.0
var m_Ymin = -1.2
var m_Ymax = 1.2
var Colors
Main()
{
Colors = { Black, Red, Orange, Yellow, Green, Cyan, Blue, Magenta }
DrawMandelbrot
}
DrawMandelbrot()
{
// Clear the drawing surface
Clear
// Adjust the coordinate bounds to fit drawing surface
AdjustAspect
// dReaC is the change in the real part (X value) for C
// dImaC is the change in the imaginary part (Y value)
width = float(Width())
height = float(Height())
dReaC = (m_Xmax - m_Xmin) / (width - 1)
dImaC = (m_Ymax - m_Ymin) / (height - 1)
// Calculate the values
num_colors = len(Colors)
ReaC = m_Xmin
for X = 0 to width - 1
{
ImaC = m_Ymin
for Y = 0 to height - 1
{
ReaZ = Zr
ImaZ = Zim
ReaZ2 = Z2r
ImaZ2 = Z2im
clr = 1
while ((clr < MaxIterations) and (ReaZ2 + ImaZ2 < MAX_MAG_SQUARED))
{
// Calculate Z (clr)
ReaZ2 = ReaZ * ReaZ
ImaZ2 = ImaZ * ImaZ
ImaZ = 2 * ImaZ * ReaZ + ImaC
ReaZ = ReaZ2 - ImaZ2 + ReaC
clr = clr + 1
}
// Set the pixel's value
SetPixel X, Y, Colors[(clr % num_colors) + 1]
ImaC = ImaC + dImaC
}
ReaC = ReaC + dReaC
}
}
// Adjust the aspect ratio of the selected coordinates so they fit
// the window properly
AdjustAspect()
{
want_aspect = (m_Ymax - m_Ymin) / (m_Xmax - m_Xmin)
picCanvas_aspect = float(Height()) / float(Width())
if (want_aspect > picCanvas_aspect)
{
// The selected area is too tall and thin.
// Make it wider.
width = (m_Ymax - m_Ymin) / picCanvas_aspect
mid = (m_Xmin + m_Xmax) / 2
m_Xmin = mid - width / 2
m_Xmax = mid + width / 2
}
else
{
// The selected area is too short and wide.
// Make it taller.
height = (m_Xmax - m_Xmin) * picCanvas_aspect
mid = (m_Ymin + m_Ymax) / 2
m_Ymin = mid - height / 2
m_Ymax = mid + height / 2
}
}