Microsoft Small Basic
Program Listing:
Embed this in your website
<object id='sbapp' data='data:application/x-silverlight-2,' type='application/x-silverlight-2' width='640' height='480'> <param name='source' value='http://smallbasic.com/program/ClientBin/SBWeb.xap'/> <param name='onError' value='onSilverlightError' /> <param name='background' value='white' /> <param name='minRuntimeVersion' value='3.0.40624.0' /> <param name='autoUpgrade' value='true' /> <param name='initParams' value='programId=RVG849' /> </object>
' Capricornus 0.1
' Copyright (c) 2013 Nonki Takahashi. All rights reserved.
'
' History:
' 0.1 2013/01/03 Created from Serpens 0.1 (RSH103). ()
' 0.0 2013/01/03 19:47:07 Generated by Shapes 1.5
'
' Reference:
' http://en.wikipedia.org/wiki/List_of_stars_in_Capricornus
'
GraphicsWindow
.
Title
=
"Capricornus 0.1"
GraphicsWindow
.
BackgroundColor
=
"MidnightBlue"
InitStars
(
)
num
=
Array
.
GetItemCount
(
edge
)
index
=
Array
.
GetAllIndices
(
edge
)
Shapes_Init
(
)
' initialize shapes
scale
=
1.2
Shapes_Add
(
)
' add shapes
angle
=
0
DrawGrids
(
)
GraphicsWindow
.
PenWidth
=
1
GraphicsWindow
.
PenColor
=
"DarkGray"
For
i
=
1
To
num
e
=
edge
[
index
[
i
]
]
m
=
Text
.
GetIndexOf
(
e
,
"-"
)
ra
=
star
[
Text
.
GetSubText
(
e
,
1
,
m
-
1
)
]
[
"RA"
]
dec
=
star
[
Text
.
GetSubText
(
e
,
1
,
m
-
1
)
]
[
"Dec"
]
RADec2XY
(
)
x1
=
x
y1
=
y
ra
=
star
[
Text
.
GetSubTextToEnd
(
e
,
m
+
1
)
]
[
"RA"
]
dec
=
star
[
Text
.
GetSubTextToEnd
(
e
,
m
+
1
)
]
[
"Dec"
]
RADec2XY
(
)
x2
=
x
y2
=
y
Shapes
.
AddLine
(
x1
,
y1
,
x2
,
y2
)
EndFor
num
=
Array
.
GetItemCount
(
star
)
index
=
Array
.
GetAllIndices
(
star
)
GraphicsWindow
.
BrushColor
=
"White"
For
i
=
1
To
num
ra
=
star
[
index
[
i
]
]
[
"RA"
]
dec
=
star
[
index
[
i
]
]
[
"Dec"
]
RADec2XY
(
)
mag
=
star
[
index
[
i
]
]
[
"Mag"
]
d
=
20
/
mag
ell
=
Shapes
.
AddEllipse
(
d
,
d
)
Shapes
.
Move
(
ell
,
x
-
d
/
2
,
y
-
d
/
2
)
EndFor
GraphicsWindow
.
BrushColor
=
"White"
GraphicsWindow
.
FontSize
=
30
GraphicsWindow
.
DrawText
(
40
,
50
,
"January"
)
GraphicsWindow
.
FontSize
=
40
GraphicsWindow
.
DrawText
(
40
,
90
,
"2013"
)
Cal_Init
(
)
sBuf
=
"2013,1"
Command_GetArgs
(
)
iYear
=
sArg
[
1
]
if
iYear
=
""
Then
Goto
lEnd
Endif
If
Math
.
Remainder
(
iYear
,
4
)
=
0
And
Math
.
Remainder
(
iYear
,
100
)
>
0
Or
Math
.
Remainder
(
iYear
,
400
)
=
0
Then
iDoM
[
2
]
=
iDoM
[
2
]
+
1
Endif
iNoL
=
Math
.
Floor
(
(
iYear
-
1
)
/
4
)
-
Math
.
Floor
(
(
iYear
-
1
)
/
100
)
+
Math
.
Floor
(
(
iYear
-
1
)
/
400
)
' number of leap year
iWoY
=
Math
.
Remainder
(
(
iYear
+
iNoL
)
,
7
)
' week of year
iMonth
=
sArg
[
2
]
If
iMonth
=
""
Then
iM0
=
1
iM1
=
12
Else
iM0
=
iMonth
iM1
=
iMonth
Endif
iDoY
=
0
' days of year
iNoM
=
1
' number of month
For
iM
=
iM0
To
iM1
While
iNoM
<
iM
iDoY
=
iDoY
+
iDoM
[
iNoM
]
iNoM
=
iNoM
+
1
EndWhile
Cal_DrawMonth
(
)
EndFor
lEnd
:
' Blink start
While
"True"
Program
.
Delay
(
2900
)
Shapes
.
HideShape
(
shape
[
12
]
[
"obj"
]
)
Program
.
Delay
(
100
)
Shapes
.
ShowShape
(
shape
[
12
]
[
"obj"
]
)
EndWhile
' end of main
Sub
Cal_Init
' Calender | Initialize days of month
CRLF
=
Text
.
GetCharacter
(
13
)
+
Text
.
GetCharacter
(
10
)
iDoM
=
"1=31;2=28;3=31;4=30;5=31;6=30;7=31;8=31;9=30;10=31;11=30;12=31;"
EndSub
Sub
Cal_DrawMonth
' Calender | Print month
' param iM - month
' param iDoY - days of year
' param iWoY - week of year
GraphicsWindow
.
FontSize
=
16
GraphicsWindow
.
FontName
=
"Consolas"
iW
=
Math
.
Remainder
(
(
iDoY
+
iWoY
)
,
7
)
line
=
"SUN MON TUE WED THU FRI SAT"
+
CRLF
iWoM
=
0
While
iWoM
<
iW
line
=
line
+
" "
iWoM
=
iWoM
+
1
EndWhile
For
iD
=
1
To
iDoM
[
iM
]
If
iD
<
10
Then
line
=
line
+
" "
+
iD
+
" "
Else
line
=
line
+
" "
+
iD
+
" "
EndIf
If
Math
.
Remainder
(
iWoM
,
7
)
=
6
Then
line
=
line
+
CRLF
EndIf
iWoM
=
iWoM
+
1
EndFor
If
Math
.
Remainder
(
iWoM
,
7
)
>
0
Then
line
=
line
+
CRLF
EndIf
cal
=
Shapes
.
AddText
(
line
)
Shapes
.
Move
(
cal
,
340
,
260
)
EndSub
Sub
Command_GetArgs
' Command line | Get arguments
' param sBuf - input buffer
' return sArg[] - arguments
' return iN - number of arguments
iP
=
1
' buffer pointer
iN
=
1
' number of args
iC
=
Text
.
GetIndexOf
(
sBuf
,
","
)
' index of comma
While
iC
>
iP
sArg
[
iN
]
=
Text
.
GetSubText
(
sBuf
,
iP
,
iC
-
iP
)
iP
=
iC
+
1
iN
=
iN
+
1
iC
=
Text
.
GetIndexOf
(
sBuf
,
","
)
EndWhile
iE
=
Text
.
GetLength
(
sBuf
)
+
1
' end of buffer
sArg
[
iN
]
=
Text
.
GetSubText
(
sBuf
,
iP
,
iE
-
iP
)
EndSub
Sub
DrawGrids
GraphicsWindow
.
PenWidth
=
1
GraphicsWindow
.
PenColor
=
"DimGray"
y1
=
0
y2
=
GraphicsWindow
.
Height
For
ra
=
19
To
22
RADec2XY
(
)
Shapes
.
AddLine
(
x
,
y1
,
x
,
y2
)
EndFor
x1
=
0
x2
=
GraphicsWindow
.
Width
For
dec
=
-
30
To
0
Step
10
If
dec
>
0
Then
dec
=
Text
.
Append
(
"+"
,
Math
.
Abs
(
dec
)
)
EndIf
RADec2XY
(
)
Shapes
.
AddLine
(
x1
,
y
,
x2
,
y
)
EndFor
EndSub
Sub
RADec2XY
x
=
Text
.
GetSubText
(
ra
,
1
,
2
)
x
=
x
+
Text
.
GetSubText
(
ra
,
4
,
2
)
/
60
x
=
x
+
Text
.
GetSubText
(
ra
,
7
,
5
)
/
3600
x
=
30
-
(
x
-
22
)
*
3600
/
24
y
=
Text
.
GetSubText
(
dec
,
2
,
2
)
y
=
y
+
Text
.
GetSubText
(
dec
,
5
,
2
)
/
60
y
=
y
+
Text
.
GetSubText
(
dec
,
8
,
5
)
/
3600
y
=
y
*
Text
.
Append
(
Text
.
GetSubText
(
dec
,
1
,
1
)
,
"1"
)
y
=
100
-
y
*
3600
/
360
EndSub
Sub
InitStars
' index: Flamsteed designation
' RA (Right ascension), Dec (Declination), Mag (Apparent magnitude)
star
[
6
]
=
"name=α2 Cap;RA=20 18 03.22;Dec=-12 32 41.5;Mag=3.58;"
star
[
9
]
=
"name=β Cap;RA=20 21 00.65;Dec=-14 46 53.0;Mag=3.05;"
star
[
16
]
=
"name=ψ Cap;RA=20 46 05.77;Dec=-25 16 13.9;Mag=4.13;"
star
[
18
]
=
"name=ω Cap A;RA=20 51 49.30;Dec=-26 55 08.9;Mag=4.12;"
star
[
34
]
=
"name=ζ Cap;RA=21 26 40.03;Dec=-22 24 41.0;Mag=3.77;"
star
[
49
]
=
"name=δ Cap;RA=21 47 02.29;Dec=-16 07 35.6;Mag=2.85;"
star
[
40
]
=
"name=γ Cap;RA=21 40 05.34;Dec=-16 39 44.1;Mag=3.69;"
star
[
32
]
=
"name=ι Cap;RA=21 22 14.78;Dec=-16 50 04.4;Mag=4.28;"
star
[
23
]
=
"name=θ Cap;RA=21 05 56.78;Dec=-17 13 57.8;Mag=4.08;"
edge
=
"1=6-9;2=9-16;3=16-18;4=18-34;5=34-49;6=49-40;7=40-32;"
edge
=
edge
+
"8=32-23;9=23-9;"
EndSub
Sub
Shapes_Init
' Shapes | Initialize shapes data
' return shX, shY - current position of shapes
' return shape - array of shapes
shX
=
10
' x offset
shY
=
121
' y offset
shape
=
""
shape
[
1
]
=
"func=rect;x=191;y=68;width=44;height=86;bc=#83809C;pw=0;"
shape
[
2
]
=
"func=tri;x=179;y=6;x1=8;y1=0;x2=0;y2=73;x3=17;y3=73;angle=339;bc=#83809C;pw=0;"
shape
[
3
]
=
"func=tri;x=207;y=0;x1=8;y1=0;x2=0;y2=73;x3=17;y3=73;angle=343;bc=#83809C;pw=0;"
shape
[
4
]
=
"func=line;x=171;y=144;x1=26;y1=46;x2=0;y2=0;pc=#83809C;pw=16;"
shape
[
5
]
=
"func=line;x=193;y=188;x1=0;y1=0;x2=58;y2=24;pc=#83809C;pw=16;"
shape
[
6
]
=
"func=line;x=149;y=145;x1=21;y1=68;x2=0;y2=0;pc=#83809C;pw=16;"
shape
[
7
]
=
"func=line;x=102;y=200;x1=64;y1=6;x2=0;y2=0;pc=#83809C;pw=16;"
shape
[
8
]
=
"func=ell;x=1;y=82;width=97;height=99;bc=#83809C;pw=0;"
shape
[
9
]
=
"func=ell;x=59;y=72;width=144;height=87;angle=351;bc=#83809C;pw=0;"
shape
[
10
]
=
"func=tri;x=0;y=54;x1=39;y1=0;x2=0;y2=73;x3=79;y3=73;angle=173;bc=#83809C;pc=#191970;pw=4;"
shape
[
11
]
=
"func=ell;x=35;y=123;width=15;height=16;bc=#191970;pw=0;"
shape
[
12
]
=
"func=ell;x=210;y=93;width=15;height=16;bc=#191970;pw=0;"
shape
[
13
]
=
"func=tri;x=155;y=63;x1=20;y1=0;x2=0;y2=20;x3=41;y3=20;angle=206;bc=#83809C;pw=0;"
shape
[
14
]
=
"func=tri;x=223;y=67;x1=20;y1=0;x2=0;y2=20;x3=41;y3=20;angle=164;bc=#83809C;pw=0;"
shape
[
15
]
=
"func=line;x=208;y=141;x1=0;y1=0;x2=8;y2=18;pc=#191970;pw=4;"
shape
[
16
]
=
"func=tri;x=192;y=151;x1=6;y1=0;x2=0;y2=38;x3=13;y3=38;angle=181;bc=#83809C;pw=0;"
shape
[
17
]
=
"func=tri;x=29;y=91;x1=24;y1=0;x2=0;y2=47;x3=48;y3=47;angle=172;bc=#83809C;pw=0;"
shape
[
18
]
=
"func=line;x=211;y=101;x1=0;y1=0;x2=12;y2=0;pc=#191970;pw=4;"
EndSub
Sub
Shapes_Add
' Shapes | Add shapes as shapes data
' param shape - array of shapes
' param scale - to zoom
' return nShapes - number of shapes
' return shAngle - current angle of shapes
Stack
.
PushValue
(
"local"
,
i
)
nShapes
=
Array
.
GetItemCount
(
shape
)
s
=
scale
For
i
=
1
To
nShapes
GraphicsWindow
.
PenWidth
=
shape
[
i
]
[
"pw"
]
*
s
If
shape
[
i
]
[
"pw"
]
>
0
Then
GraphicsWindow
.
PenColor
=
shape
[
i
]
[
"pc"
]
EndIf
If
shape
[
i
]
[
"func"
]
=
"rect"
Then
GraphicsWindow
.
BrushColor
=
shape
[
i
]
[
"bc"
]
shape
[
i
]
[
"obj"
]
=
Shapes
.
AddRectangle
(
shape
[
i
]
[
"width"
]
*
s
,
shape
[
i
]
[
"height"
]
*
s
)
ElseIf
shape
[
i
]
[
"func"
]
=
"ell"
Then
GraphicsWindow
.
BrushColor
=
shape
[
i
]
[
"bc"
]
shape
[
i
]
[
"obj"
]
=
Shapes
.
AddEllipse
(
shape
[
i
]
[
"width"
]
*
s
,
shape
[
i
]
[
"height"
]
*
s
)
ElseIf
shape
[
i
]
[
"func"
]
=
"tri"
Then
GraphicsWindow
.
BrushColor
=
shape
[
i
]
[
"bc"
]
shape
[
i
]
[
"obj"
]
=
Shapes
.
AddTriangle
(
shape
[
i
]
[
"x1"
]
*
s
,
shape
[
i
]
[
"y1"
]
*
s
,
shape
[
i
]
[
"x2"
]
*
s
,
shape
[
i
]
[
"y2"
]
*
s
,
shape
[
i
]
[
"x3"
]
*
s
,
shape
[
i
]
[
"y3"
]
*
s
)
ElseIf
shape
[
i
]
[
"func"
]
=
"line"
Then
shape
[
i
]
[
"obj"
]
=
Shapes
.
AddLine
(
shape
[
i
]
[
"x1"
]
*
s
,
shape
[
i
]
[
"y1"
]
*
s
,
shape
[
i
]
[
"x2"
]
*
s
,
shape
[
i
]
[
"y2"
]
*
s
)
EndIf
Shapes
.
Move
(
shape
[
i
]
[
"obj"
]
,
shX
+
shape
[
i
]
[
"x"
]
*
s
,
shY
+
shape
[
i
]
[
"y"
]
*
s
)
If
Text
.
IsSubText
(
"rect|ell|tri"
,
shape
[
i
]
[
"func"
]
)
And
shape
[
i
]
[
"angle"
]
<>
0
Then
Shapes
.
Rotate
(
shape
[
i
]
[
"obj"
]
,
shape
[
i
]
[
"angle"
]
)
EndIf
shape
[
i
]
[
"rx"
]
=
shape
[
i
]
[
"x"
]
shape
[
i
]
[
"ry"
]
=
shape
[
i
]
[
"y"
]
EndFor
shAngle
=
0
i
=
Stack
.
PopValue
(
"local"
)
EndSub
Copyright (c) Microsoft Corporation. All rights reserved.