<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0em 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0em 1em;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
noscript {display:none;}
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
<!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

----
Also see AdvancedOptions
<<importTiddlers>>
Function. Returns the absolute value of the parameter.
{{{
 PRINT ABS (-1)
}}}
Function. Returns the arc cosine of the parameter.
Function. Returns the hyperbolic arc cosine of the parameter.
Function:
{{{
ALLOC_MEMORY (n)
}}}
Allocates a block of memory of size n and return his address. The block of memory is readable, writable and executable if the operating system allows it. See the sample program machinecode.bas for an example of use. 
Operator. Does a integer or logical (depending on the state of the system flags) binary and between its arguments.
Function. Returns the code of the first char of the argument, 0 if the string is empty. The name comes from the ASCII character set, but the code can be outside the ascii range (0-127).
Function. Returns the arc sine value of the parameter.
Function. Returns the hyperbolic arc sine of the parameter.
PRINT modifier.
{{{
PRINT ... AT y, x ...
}}}
Place the cursor in the x column of the line y. Contrary to the other cursor movement instructions, the upper left of the screen is 0, 0.
Function. Returns the arc tangent of the argument.
Function.
{{{
ATAN (y, x)
}}}
returns the arc between the x axis and the line (0, 0) - (x,y).
Function. Returns the hyperbolic arc tangent of the argument.
{{{
AUTO [initial number] [, increment]
}}}
Enter the auto numbering mode. The default values are 10 and 10 but can be modified via the system vars AutoInit and AutoInc or with the -a command line option.
Increment of line number used by AUTO by default and when loading text programs without line numbers.
Starting number of line used by AUTO by default and when loading text programs without line numbers.
Makes a beep.
Function.
{{{
BIN$ (number [,c] )
}}}
Returns a string of binary digits with the value of {{{number}}}, if the {{{c}}} argument is present and the length of the result is shorter than c is filled with zeroes.
Environment variable used to control printer output. See [[Printing Guide]].
!Instruction:
{{{
BRIGHT  [#channel, ] value
}}}
Set or unset bright mode in {{{channel}}}, according to {{{value}}}.
!PRINT modifier:
{{{
BRIGHT value
}}}
Same effect as the instruction, but his effect disapperar at the end of the PRINT.

See also: [[PRINT Modifiers]], [[INVERSE]], [[INK]].
{{{
CHAIN filename$ [ , line ]
}}}
Loads a program in memory and begin execution from the beginning or from line. Variables are not cleared.

{{{
CHAIN MERGE filename$ [ , line ] [ , DELETE range ]
}}}
Merge a program with the present in memory and begins executing the resulting program from the beginning or from line. If the DELETE part is present the range of lines is deleted before the merge, range can be a single line or in the form initial-final where initial and final are line numbers and can be omitted.

See also [[MERGE]].
Changes current directory.
Function. Returns a string of lenght 1 with the char that has the argument as code.
Function. Returns the argument rounded to integer.
{{{
CIRCLE (x, y), r, [ color ], [ initial ], [ final ] [ , e ]
}}}
Draws a circumference centered in (x, y) with radius r, setting the graphics pen to color beginning in angle 0 or in initial and ending in 2 * PI radians or in final.

If e is present an ellipse is drawed instead, if e is greater than 1 the x axis is divided by e, else the y axis is multiplied by it.
{{{
CLEAR
}}}
Clear all variables and arrays, close all opened files, erase user defined functions, set trigonometric mode to radians, forget pending loops.

{{{
CLEAR INK
}}}
Restore all inks to its default values.

{{{
CLEAR INPUT
}}}
Discards all key and mouse button events actually buffered.
Instruction.
{{{
CLOSE
}}}
Close all open file channels.

{{{
CLOSE INPUT [#]channel
}}}
Close for input the {{{channel}}} specified.

{{{
CLOSE OUTPUT [#]channel
}}}
Close for output the {{{channel}}} specified.

{{{
CLOSE LPRINT
}}}
Close the printer channel, fushing ing any pending output. See [[Printing Guide]].

{{{
CLOSE [#]channel
}}}
Close the {{{channel}}} specified. It can be a file, socket or text window channel.
In text mode: {{{CLS}}} Clear the screen.

In graphics mode {{{CLS [ #window ]}}} Clear the text window specified (0 by default) using his current background color.

See also [[GRAPHICS CLS]].
Continue execution previously stopped by a [[STOP]] instruction or a break.
Function.
{{{
COPYCHR$ (#window)
}}}
Returns the character present at the current cursor position in {{{window}}}, or the empty string if the character can't be recognized.
Function. Returns the cosine value or the argument.
Function. Returns the hyperbolic cosine value of the argument.
Categories of instructions, functions and operators.
Location in memory of the character generator used in graphics mode.
"In case it wasn't clear, options are usually optional." (The tao of option parsing, in Optik documentation).

; -a&zwnj; n1[,n2]
: Auto number values. n1 is the first line number to be used, n2 the increment. Stablishes the values for the system vars AutoInit and AutoInc. 
; -&zwnj;-&zwnj;allflags
: Set all compatibility flags to 1. Useful only for testing. 
; -&zwnj;-&zwnj;appleII
: Adjust several system vars to Apple II Basic compatibility. 
; -&zwnj;-&zwnj;cpc
: Adjust several system vars to Amstrad CPC Basic compatibility. 
; -&zwnj;d
: Detach from console. 
; -&zwnj;-&zwnj;debug level
: Set the debug level to level, the value is asigned to the DebugLevel system var and is used by the IF_DEBUG instruction. 
; -&zwnj;e command
: Execute command and exit. Must be the last option. You must take care with the quoting conventions of your shell. Example in unix whith sh: blassic -e 'print "Hola" ' 
; -&zwnj;-&zwnj;errout
: Redirect the error output to the standard output. 
; -&zwnj;-&zwnj;gwbasic
: Adjust several system vars to GW Basic compatibility. 
;* -&zwnj;-&zwnj;info
: Show additional info in some error conditions.
: -&zwnj;-&zwnj;lfcr
: Convert line feed to carriage return in INKEY$ and GET in text mode in unix. 
; -&zwnj;m mode_number | mode_name | widthxheight
: Mode. Executes MODE mode_number or MODE "mode_name" or MODE width, height. 
; -&zwnj;-&zwnj;norun
: If a program is specified as argument, load it but not run. 
; -&zwnj;p list of expressions
: Print each of the expressions with the PRINT instruction. 
; -&zwnj;-&zwnj;rotate
: Rotate 90 degrees all graphics modes. Useful on ~PDAs. Arrow keys are also rotated. 
; -&zwnj;-&zwnj;spectrum
: Adjust several system vars to Spectrum Basic compatibility. 
; -&zwnj;-&zwnj;tron
: Enter tron mode. Same effect as the TRON instruction without arguments. 
; -&zwnj;-&zwnj;tronline
: Entre tron line mode. Same effect as the TRON LINE instruction without arguments. 
; -&zwnj;x keyword
: Exclude keyword from the list of Blassic keywords. Useful to execute a program that uses a Blassic keyword as variable name. Can be specified several times to exclude more keywords. 
; -&zwnj;-&zwnj;
: Inside of a list of expressions for the -p option marks the end of the list. In other case, marks the end of options. 
; -&zwnj;
: Used as program name means read the program form standard input. 
Blassic is compatible to some point with the Basic dialects of several machines from the '80 and '90. All of them Basic with mandatory line numbers, editors based on the numbering and goto and gosub instructions based on them.

To enhance compatibility, there are several command line options and system variables that modifies Blassic behavior. If you want to run old programs without changes, you may try some of them.

The main source of inspiration for Blassic where the Locomotive Basic used in the Amstrad 8 bit machines and the ~MBasic/~GwBasic family used in ~CP/M, ~MS-DOS, and other machines and operating systems. 

Also, the Sinclair Basic used in the ~ZX-81 and the ~ZX-Spectrum are main targets for high degree of compatibility.
/***
|''Name:''|CryptoFunctionsPlugin|
|''Description:''|Support for cryptographic functions|
***/
//{{{
if(!version.extensions.CryptoFunctionsPlugin) {
version.extensions.CryptoFunctionsPlugin = {installed:true};

//--
//-- Crypto functions and associated conversion routines
//--

// Crypto "namespace"
function Crypto() {}

// Convert a string to an array of big-endian 32-bit words
Crypto.strToBe32s = function(str)
{
	var be = Array();
	var len = Math.floor(str.length/4);
	var i, j;
	for(i=0, j=0; i<len; i++, j+=4) {
		be[i] = ((str.charCodeAt(j)&0xff) << 24)|((str.charCodeAt(j+1)&0xff) << 16)|((str.charCodeAt(j+2)&0xff) << 8)|(str.charCodeAt(j+3)&0xff);
	}
	while (j<str.length) {
		be[j>>2] |= (str.charCodeAt(j)&0xff)<<(24-(j*8)%32);
		j++;
	}
	return be;
};

// Convert an array of big-endian 32-bit words to a string
Crypto.be32sToStr = function(be)
{
	var str = "";
	for(var i=0;i<be.length*32;i+=8)
		str += String.fromCharCode((be[i>>5]>>>(24-i%32)) & 0xff);
	return str;
};

// Convert an array of big-endian 32-bit words to a hex string
Crypto.be32sToHex = function(be)
{
	var hex = "0123456789ABCDEF";
	var str = "";
	for(var i=0;i<be.length*4;i++)
		str += hex.charAt((be[i>>2]>>((3-i%4)*8+4))&0xF) + hex.charAt((be[i>>2]>>((3-i%4)*8))&0xF);
	return str;
};

// Return, in hex, the SHA-1 hash of a string
Crypto.hexSha1Str = function(str)
{
	return Crypto.be32sToHex(Crypto.sha1Str(str));
};

// Return the SHA-1 hash of a string
Crypto.sha1Str = function(str)
{
	return Crypto.sha1(Crypto.strToBe32s(str),str.length);
};

// Calculate the SHA-1 hash of an array of blen bytes of big-endian 32-bit words
Crypto.sha1 = function(x,blen)
{
	// Add 32-bit integers, wrapping at 32 bits
	add32 = function(a,b)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF);
		var msw = (a>>16)+(b>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Add five 32-bit integers, wrapping at 32 bits
	add32x5 = function(a,b,c,d,e)
	{
		var lsw = (a&0xFFFF)+(b&0xFFFF)+(c&0xFFFF)+(d&0xFFFF)+(e&0xFFFF);
		var msw = (a>>16)+(b>>16)+(c>>16)+(d>>16)+(e>>16)+(lsw>>16);
		return (msw<<16)|(lsw&0xFFFF);
	};
	// Bitwise rotate left a 32-bit integer by 1 bit
	rol32 = function(n)
	{
		return (n>>>31)|(n<<1);
	};

	var len = blen*8;
	// Append padding so length in bits is 448 mod 512
	x[len>>5] |= 0x80 << (24-len%32);
	// Append length
	x[((len+64>>9)<<4)+15] = len;
	var w = Array(80);

	var k1 = 0x5A827999;
	var k2 = 0x6ED9EBA1;
	var k3 = 0x8F1BBCDC;
	var k4 = 0xCA62C1D6;

	var h0 = 0x67452301;
	var h1 = 0xEFCDAB89;
	var h2 = 0x98BADCFE;
	var h3 = 0x10325476;
	var h4 = 0xC3D2E1F0;

	for(var i=0;i<x.length;i+=16) {
		var j,t;
		var a = h0;
		var b = h1;
		var c = h2;
		var d = h3;
		var e = h4;
		for(j = 0;j<16;j++) {
			w[j] = x[i+j];
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=16;j<20;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),d^(b&(c^d)),w[j],k1);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=20;j<40;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k2);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=40;j<60;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),(b&c)|(d&(b|c)),w[j],k3);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}
		for(j=60;j<80;j++) {
			w[j] = rol32(w[j-3]^w[j-8]^w[j-14]^w[j-16]);
			t = add32x5(e,(a>>>27)|(a<<5),b^c^d,w[j],k4);
			e=d; d=c; c=(b>>>2)|(b<<30); b=a; a = t;
		}

		h0 = add32(h0,a);
		h1 = add32(h1,b);
		h2 = add32(h2,c);
		h3 = add32(h3,d);
		h4 = add32(h4,e);
	}
	return Array(h0,h1,h2,h3,h4);
};


}
//}}}
Function without arguments.
Returns a string with the current date in the format mm-dd-yyyy.
Function.
{{{
DEC$ ( number, format)
}}}
Returns a string representing the number using the specified format, that is a format specifier like the used in PRINT USING limited to numeric formats that represent a single number.
{{{
DEF DBL | INT | REAL | SNG | STR letter-specifier
}}}
Define that the variables beginning by a letter specified in the letter-specifier are of type: DBL, REAL, SNG -> floating point, INT -> integer, STR -> string. The various types of floating point are admitted for compatibility with other Basics.

The letter-specifier is a comma separated list of single letter of ranges of letters.

DEFDBL is the same as DEF DBL.
DEFINT is the same as DEF INT.
DEFREAL is the same as DEF REAL.
DEFSNG is the same as DEF SNG.
DEFSTR is the same as DEF STR.

See also: [[DEF FN]]
Defines a user defined function.

{{{
DEF FN name [list of parameters]= expression
}}}
Defines a single line user defined function.

{{{
DEF FN name [list of parameters]]
}}}
Defines a multiple lines user defined function.
Set the trigonometric mode to degrees.
Delete a line or range or lines.

See also [[CHAIN]].
Instruction.
{{{
DELIMITER [#channel, ] delimiter$ [, quote$ [, escape$] ]
}}}

Set the delimiter for {{{channel}}}, which must be a text channel, to {{{delimiter$}}} and optionally set the quote character and the escape character. Only the first char of each string is used.

These values are used in the [[INPUT]] and [[WRITE]] instructions. Actually only the usage of delimiter is well tested.
Current debug level. Used by the IF_DEBUG instruction.
[[Index]]
/***
|''Name:''|DeprecatedFunctionsPlugin|
|''Description:''|Support for deprecated functions removed from core|
***/
//{{{
if(!version.extensions.DeprecatedFunctionsPlugin) {
version.extensions.DeprecatedFunctionsPlugin = {installed:true};

//--
//-- Deprecated code
//--

// @Deprecated: Use createElementAndWikify and this.termRegExp instead
config.formatterHelpers.charFormatHelper = function(w)
{
	w.subWikify(createTiddlyElement(w.output,this.element),this.terminator);
};

// @Deprecated: Use enclosedTextHelper and this.lookaheadRegExp instead
config.formatterHelpers.monospacedByLineHelper = function(w)
{
	var lookaheadRegExp = new RegExp(this.lookahead,"mg");
	lookaheadRegExp.lastIndex = w.matchStart;
	var lookaheadMatch = lookaheadRegExp.exec(w.source);
	if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
		var text = lookaheadMatch[1];
		if(config.browser.isIE)
			text = text.replace(/\n/g,"\r");
		createTiddlyElement(w.output,"pre",null,null,text);
		w.nextMatch = lookaheadRegExp.lastIndex;
	}
};

// @Deprecated: Use <br> or <br /> instead of <<br>>
config.macros.br = {};
config.macros.br.handler = function(place)
{
	createTiddlyElement(place,"br");
};

// Find an entry in an array. Returns the array index or null
// @Deprecated: Use indexOf instead
Array.prototype.find = function(item)
{
	var i = this.indexOf(item);
	return i == -1 ? null : i;
};

// Load a tiddler from an HTML DIV. The caller should make sure to later call Tiddler.changed()
// @Deprecated: Use store.getLoader().internalizeTiddler instead
Tiddler.prototype.loadFromDiv = function(divRef,title)
{
	return store.getLoader().internalizeTiddler(store,this,title,divRef);
};

// Format the text for storage in an HTML DIV
// @Deprecated Use store.getSaver().externalizeTiddler instead.
Tiddler.prototype.saveToDiv = function()
{
	return store.getSaver().externalizeTiddler(store,this);
};

// @Deprecated: Use store.allTiddlersAsHtml() instead
function allTiddlersAsHtml()
{
	return store.allTiddlersAsHtml();
}

// @Deprecated: Use refreshPageTemplate instead
function applyPageTemplate(title)
{
	refreshPageTemplate(title);
}

// @Deprecated: Use story.displayTiddlers instead
function displayTiddlers(srcElement,titles,template,unused1,unused2,animate,unused3)
{
	story.displayTiddlers(srcElement,titles,template,animate);
}

// @Deprecated: Use story.displayTiddler instead
function displayTiddler(srcElement,title,template,unused1,unused2,animate,unused3)
{
	story.displayTiddler(srcElement,title,template,animate);
}

// @Deprecated: Use functions on right hand side directly instead
var createTiddlerPopup = Popup.create;
var scrollToTiddlerPopup = Popup.show;
var hideTiddlerPopup = Popup.remove;

// @Deprecated: Use right hand side directly instead
var regexpBackSlashEn = new RegExp("\\\\n","mg");
var regexpBackSlash = new RegExp("\\\\","mg");
var regexpBackSlashEss = new RegExp("\\\\s","mg");
var regexpNewLine = new RegExp("\n","mg");
var regexpCarriageReturn = new RegExp("\r","mg");

}
//}}}
Instruction and functions for directory handling.
{{{
EDIT linenum
}}}
Edit the line {{{linenum}}}.
Instruction.
{{{
END
}}}
Terminates the program, returning to interactive mode or exiting Blassic.
All opened file channels are closed.
{{{
ERASE arrayname [, arrayname...]
}}}
Delete the array variable specified by {{{arrayname}}}, freeing the memory used.
Function without parameters.
Returns the program line where the last error was generated, used normally inside an [[ON ERROR GOTO]] routine.

See also: [[ERR]].
Function without parameters. Returns the code of the last error generated, used normally inside an [[ON ERROR GOTO]] routine.

See also: [[ERL]].
{{{
ERROR n
}}}
Forces the error number {{{n}}}, stopping the program or jumping to the position established by an [[ON ERROR GOTO]] instruction. For a list of the error numbers used by blassic refer to the error.h file in the sources.
{{{
EXIT [exitcode]
}}}
Quit blassic returning to the operating system. The {{{exitcode}}} value, 0 if not specified, is used as the return value of the blassic command (the ERRORLEVEL value in Windows).
Function.
Returns the exponential of the argument, that is, e (the base of natural logarithms) raised to that power.

See also: [[LOG]].
!In unix-like operating systems:

You can write programs that execute as normal commands, without using "blassic program". You only need to put in the first line:
{{{
# !/usr/bin/blassic
}}}
and give it execute permission. When loading the program Blassic ignores the first line if begins with an "#", so you can use this unix usual method.

!In Windows:

The following registry keys can be added:

{{{
[HKEY_CLASSES_ROOT\.bas]
@="blassicfile"
[HKEY_CLASSES_ROOT\.blc]
@="blassicfile"
[HKEY_CLASSES_ROOT\blassicfile]
[HKEY_CLASSES_ROOT\blassicfile\shell]
[HKEY_CLASSES_ROOT\blassicfile\shell\open]
[HKEY_CLASSES_ROOT\blassicfile\shell\open\command]
@="blassic \"%1\""
}}}

You can do it automatically by clicking on this link: http://blassic.org/bin/blassic.reg and selecting execute, or downloading the file and executing it.

To execute graphics programs avoiding that a text window stay opened you can add the -d option to the command value, o create another entry associated with others file extensions (I suggest .basw and .blcw).

This assumes that you have blassic.exe in some directory included in the PATH, if not you must put the complete path in the command entry. Depending on the windows version and how is configured, it can be necessary to put the entire path even in that case.
Frequently (or not) answered questions about Blassic.

; Can I compile Blassic programs?
: There is no Blassic compiler and I don't have plans to write one, but other compilers can be able to compile programs developed with Blassic, provided that Blassic specific features are not used and you take care with compatibility.
; Is Blassic compatible with...?
: See the [[Compatibility with other Basic]] section.
; What about svgalib support?
: Firsts versions of Blassic had some degree of svgalib support, later versions maintained the code and options related to it without updating just in case someone volunteer to take care of it. Version 0.11.0 drops even this limited support.
; Can I create windows?
: See the [[Graphics]] section.
; Is there a binary package for my system?
: In the site http://blassic.org I maintain a list of binary packages for several systems according information submitted by his creators or users. I don't have time and resources to verify this packages, so take them with a grain of salt.
{{{
FILES
}}}
List files in current directory.

{{{
FILES [ #channel , ] "mask"
}}}
List files in current directory that matches mask. The wildcards allowed are operating system dependent. The listing is directed to the {{{channel}}} specified, 0 by default, that can be a window or a file.
Function.
{{{
FINDFIRST$ (mask$)
}}}
Returns the first file that matches wiht {{{mask$}}} or the empty string if there is no match . The wildcards allowed and his interpretation are operating system dependent.

See also: [[FINDNEXT$]].
Function without parameters.
Returns the next file that matches with the mask$ used in the last [[FINDFIRST$]] executed, or the empty string if there is no more matches.
Function. As FIND_FIRST_OF but with characters that are not in char$.
Function.
{{{
FIND_FIRST_OF (searched$, char$)
}}}
Returns the first position of {{{searched$}}} that contains a character of {{{char$}}}, or 0 if none is found.
Function. As FIND_LAST_OF, but with characters thar are not in char$.
Fuction. As FIND_FIRST_OF but returns the last position.
Function.
Returns the integral part of his argument.
Function without parameters.
Returns the lower free channel number.
Deallocates the memory at the address sppecified. The addres must have been obtained by a previous ALLOC_MEMORY function, otherwise the result is undefined. 
* Bit 0: style of LOCATE, 0 Microsoft (row, col), 1 Amstrad CPC (col, row). Default value 0.
* Bit 1: TAB style: 0 normal, 1 Spectrum.
* Bit 2: THEN omitted, 0 not accepted, 1 accepted.
* Bit 3: space before positive number in PRINT, 0 No, 1 Yes.
* Bit 4: space before positive number in STR$, 0 No, 1 Yes.
* Bit 5: convert Line Feed to Carriage Return in GET and INKEY$, 0 No, 1 Yes.
* Bit 6: show additional info on some error conditions.
* Bit 7: relaxed goto mode. 0 the line specified must exist, 1 use the next line existent.
* Bit 0: GO TO and GO SUB in listings.
* Bit 1: value of true: 0 - true is -1, 1 - true is 1
* Bit 2: type of boolean operations: 0 - numeric, 1 - boolean
* Bit 3: take empty lines as comments when loading text programs: 0 - no, 1 - yes
All other bits reserved for future use.
Blassic functions.

Categories:
*[[Rounding Functions]].
*[[Trigonometric Functions]].
{{{
GOSUB line_specification
}}}
Calls the subroutine located at line_specification, that can be a line number or a valid LABEL. The control will return to the actual point when a RETURN is executed.

See also [[ON ... GOSUB]], [[GOTO]].
{{{
GOTO line_specification
}}}
Transfer the control to the position line_specification, tnat can be a line number or a valid LABEL.

See also: [[ON ... GOTO]], [[GOSUB]].
See: [[GRAPHICS CLS]], [[GRAPHICS PAPER]], [[GRAPHICS PEN]] and [[GRAPHICS SCROLL]].
Clear the graphics window using the current graphics background color.
{{{
GRAPHICS PAPER inknumber
}}}
Set the graphics background color to {{{inknumber}}}.
{{{
GRAPHICS PEN [inknumber] [,transparentmode]
}}}

Set the graphics foreground color to {{{inknumber}}}, if specified, and the transparent mode to the value of {{{transparentmode}}}, if specified (0 opaque, 1 transparent).
{{{
GRAPHICS SCROLL x1, y1, x2, y2, xoff, yoff [, ink]
}}}

Scrolls the rectangular section of the graphics window defined by (x1, y1) - (x2, y2) xoff pixels horizontally and yoff pixels vertically. If ink is specified, the remaining area of the rectangle is filled with that ink.

See also: [[SCROLL]].
Type of graphics rotation: 0 - no rotation, 1 - 90 degress, other values undefined.
Blassic's graphics system mimics the behavior of old 8 and 16 bits computers. It uses windows under the graphical system but uses a buffer to be able to redraw the content at any time, thus avoiding the need for event oriented programming. This way also make possible the [[Synchronize mode]].

!Multiple Display.
Blassic 0.11.0 introduces the Multiple Display capability. It can create several graphics windows, and each can be opened in different displays. See the [[SCREEN]] instruction.

This feature is experimental.
Height of the window in graphics mode.
Width of the window in graphics mode.
Function.
{{{
HEX$ (number [ , width] )
}}}
Returns the hexadecimal representation of number as string. If width is specified and is too great the result will be filed with leading zeros, if is too small the result is NOT shortened.
Hyperbolic Functions
{{{
IF_DEBUG n
}}}
If debug level is greater or equal than {{{n}}} the rest of the line is executed, otherwise is ignored.

See the -&zwnj;-&zwnj;debug [[command line option|Command Line Options]] and the DebugLevel system var.
{{{
INK n
}}}
Same as [[PEN]] n

{{{
INK n, color [, second]
}}}
Define the ink number n as the color, from the table of Amstrad CPC compatible colors. The optional second parameter is accepted for compatibility with the CPC but is ignored.

{{{
INK n, r, g, b
}}}
Define the ink number n as the color from the rgb componentes, r, g and b between 0 and 255.

[[PRINT]] modifier: {{{INK n}}} Same as standalone instruction, but the effects remains only until the actual [[PRINT]] ends.
Function.

Mimics the INKEY function of Locomotive Basic in Amstrad CPC computers. Unfinished, may not work as intended depending of keyboard layout and X Server used.
Function:

Without parameters: read the first key in keyboard buffer and returns it, or the empty string if the buffer is empty.

With parameters:
{{{
INKEY$ (#channel)
}}}
Reads a char or key from the {{{channel}}} specified and returns it.
Function:
{{{
INPUT$ (n[, #channel])
}}}
Read {{{n}}} characters from the {{{channel}}} specified.
Function.
{{{
INSTR ([start , ]searched$, string_to_find$)
}}}
Returns the position of the first occurrence of {{{string_to_find$}}} in {{{searched$}}}, or 0 if not present.The position at which to start can be specified as {{{start}}}.
Function.
Returns the floor of his argument.
!Instruction:
{{{
INVERSE  [#channel, ] value
}}}
Set or unset inverse mode in {{{channel}}}, according to {{{value}}}.
!PRINT modifier:
{{{
INVERSE value
}}}
Same effect as the instruction, but his effect disapperar at the end of the PRINT.

See also: [[PRINT Modifiers]], [[BRIGHT]], [[INK]].
[[Introduction]]
[[Line numbers]]
[[Execute a program]]
[[Graphics]]
[[Command Line Options]]
[[Compatibility with other Basic]]
[[Keywords]]
[[Categories]]
[[System Variables]]
[[Printing Guide]]
[[FAQ]]
Blassic instructions.
Blassic is a classic Basic interpreter. The line numbers are mandatory, and it has PEEK & POKE. The main goal is to execute programs written in old interpreters, even those that use peculiar control flow constructs or automodifiable code. However, it can be used as a scripting language, and has some not-so-classic instructions. It has graphics modes that are compatible with some classic systems and user defined.

This documentation refers to the last version of Blassic. Older versions may lack several features described here.

Web site: http://blassic.org/
* [[ABS]]
* [[ACOS]]
* [[ACOSH]]
* AFTER See [[SYMBOL AFTER]].
* ALLOC_MEMORY
* [[AND]]
* APPEND See [[OPEN]].
* AS See [[OPEN]], [[SOCKET]], [[FIELD]] and [[NAME]].
* [[ASC]]
* [[ASIN]]
* [[ASINH]]
* [[AT]]
* [[ATAN]]
* [[ATAN2]]
* [[ATANH]]
* [[AUTO]]
* [[BEEP]]
* [[BIN$]]
* BINARY See [[OPEN]]
* BREAK See [[ON BREAK]]
* [[BRIGHT]]
* [[CHAIN]]
* [[CHDIR]]
* [[CHR$]]
* [[CINT]]
* [[CIRCLE]]
* [[CLEAR]]
* [[CLOSE]]
* [[CLS]]
* [[COLOR]]
* [[CONT]]
* [[COPYCHR$]]
* [[COS]]
* [[COSH]]
* [[CVD]]
* [[CVDMBF]]
* [[CVI]]
* [[CVL]]
* [[CVS]]
* [[CVSMBF]]
* [[DATA]]
* [[DATE$]]
* [[DEC$]]
* [[DEF]] See also [[DEF FN]].
* DEFDBL See [[DEF]].
* DEFINT See [[DEF]].
* DEFREAL See [[DEF]].
* DEFSNG See [[DEF]].
* DEFSTR See [[DEF]].
* [[DELETE]]
* [[DEG]]
* [[DELIMITER]]
* [[DIM]]
* [[DRAW]]
* [[DRAWARC]]
* [[DRAWR]]
* [[EDIT]]
* ELSE See [[IF]].
* [[END]]
* [[ENVIRON]]
* [[ENVIRON$]]
* [[EOF]]
* [[ERASE]]
* [[ERL]]
* [[ERR]]
* [[ERROR]]
* [[EXIT]]
* [[EXP]]
* [[FIELD]]
* [[FILES]]
* FIND_FIRST_NOT_OF
* FIND_FIRST_OF
* FIND_LAST_NOT_OF
* FIND_LAST_OF
* [[FINDFIRST$]]
* [[FINDNEXT$]]
* [[FIX]]
* [[FN]]
* [[FOR]]
* FREE_MEMORY
* [[FREEFILE]]
* [[GET]]
* [[GOSUB]]
* [[GOTO]]
* [[GRAPHICS]]
* [[HEX$]]
* [[IF]]
* IF_DEBUG
* [[INK]]
* [[INKEY]]
* [[INKEY$]]
* [[INPUT]]
* [[INPUT$]]
* [[INSTR]]
* [[INT]]
* [[INVERSE]]
* [[KILL]]
* [[LABEL]]
* LCASE$ See [[LOWER$]].
* [[LEFT$]]
* [[LEN]]
* [[LET]]
* [[LINE]]
* [[LIST]]
* [[LLIST]]
* [[LOAD]]
* [[LOC]]
* [[LOCAL]]
* [[LOCATE]]
* [[LOF]]
* [[LOG]]
* LOG10
* [[LOWER$]]
* [[LPRINT]]
* [[LSET]]
* [[LTRIM$]]
* [[MASK]]
* [[MAX]]
* [[MERGE]]
* [[MID$]]
* [[MIN]]
* [[MKD$]]
* [[MKDIR]]
* [[MKDMBF$]]
* [[MKI$]]
* [[MKL$]]
* [[MKS$]]
* [[MKSMBF$]]
* [[MOD]]
* [[MODE]]
* [[MOVE]]
* [[MOVER]]
* [[NAME]]
* [[NEW]]
* [[NEXT]]
* [[NOT]]
* [[OCT$]]
* ON See [[ON BREAK]], [[ON ERROR GOTO]], [[ON ... GOTO]] and [[ON ... GOSUB]].
* [[OPEN]]
* [[OR]]
* [[ORIGIN]]
* [[OSFAMILY$]]
* [[OSNAME$]]
* [[OUTPUT]]
* [[PAINT]]
* [[PAPER]]
* [[PAUSE]]
* [[PEEK]]
* PEEK16
* PEEK32
* [[PEN]]
* [[PI]]
* [[PLEASE]]
* [[PLOT]]
* [[PLOTR]]
* [[POKE]]
* POKE16
* POKE32
* [[POP]]
* [[POPEN]]
* [[POS]]
* [[PRINT]]
* [[PROGRAMARG$]]
* [[PROGRAMPTR]]
* [[PULL]]
* [[PUT]]
* [[RAD]]
* RANDOM See [[OPEN]].
* [[RANDOMIZE]]
* [[READ]]
* REAL See [[DEF]].
* [[REGEXP_INSTR]]
* [[REGEXP_REPLACE$]]
* [[REM]]
* [[RENUM]]
* [[REPEAT]]
* [[RESTORE]]
* [[RESUME]]
* [[RETURN]]
* [[RIGHT$]]
* [[RINSTR]]
* [[RMDIR]]
* [[RND]]
* [[ROUND]]
* [[RSET]]
* [[RTRIM$]]
* [[RUN]]
* [[SAVE]]
* [[SCREEN]]
* [[SCREEN$]]
* [[SCROLL]]
* [[SET_TITLE]]
* [[SGN]]
* [[SHELL]]
* [[SIN]]
* [[SINH]]
* [[SOCKET]]
* [[SPACE$]]
* [[SPC]]
* [[SQR]]
* STEP See [[FOR]].
* [[STOP]]
* STR See [[DEF]]
* [[STR$]]
* [[STRING$]]
* [[SWAP]]
* [[SYMBOL]]
* [[SYNCHRONIZE]]
* [[SYSTEM]]
* [[SYSVARPTR]]
* [[TAB]]
* [[TAG]]
* [[TAGOFF]]
* [[TAN]]
* [[TANH]]
* [[TEST]]
* [[TESTR]]
* [[THEN]]
* [[TIME]]
* [[TIME$]]
* TO See [[FOR]].
* [[TRIM$]]
* [[TROFF]]
* [[TRON]]
* UCASE$ See [[UPPER$]].
* UNTIL See [[REPEAT]].
* [[UPPER$]]
* USING
* [[USR]]
* [[VAL]]
* [[VAL$]]
* [[VARPTR]]
* [[VPOS]]
* [[WEND]]
* WIDTH See [[WIDTH LPRINT]].
* [[WHILE]]
* [[WINDOW]]
* [[WRITE]]
* [[XMOUSE]]
* [[XOR]]
* [[XPOS]]
* [[YMOUSE]]
* [[YPOS]]
* [[ZONE]]
* ZX_PLOT
* ZX_UNPLOT
{{{
LABEL identifier
}}}
Define a label in the program, then instructions that normally uses a line number as parameter, such as [[GOTO]], can use the identifier instead. LABEL must be the first instruction in a line, otherwise is ignored.
Function.
{{{
LEFT$ (string$, n)
}}}
Returns the first {{{n}}} charaters from {{{string$}}}, or {{{string$}}} if n is greater than the length of ({{{string$}}}).
Function.
{{{
LEN (string$)
}}}
Returns the length of the string.
Note for C programmers: The total length of the string is returned, including possible NUL characters contained.
Instruction.
Prefix an assignment instruction. Can be omitted.
{{{
LOAD "program"
}}}
Load a blassic program. If program is not found program.blc and program.bas are tried.

{{{
LOAD "filename", var$
}}}
Load a file into a string var.

{{{
LOAD "filename", address [, size]
}}}
Load a file in the address of memory specified. If size is given loads only that size, otherwise the entire file. 
Function.
Returns the current position in the channel number specified, 0 if no read or write operation has been done yet, that must be a file opened in random mode.
{{{
LOCATE [ #channel , ] a, b
}}}
Move the cursor to the position specified with the coordinates a, b. The screen origin is 1, 1.

Channel must be a graphics window in graphics mode or the console output in text mode, if omitted channel 0 is used.

The order of the coordinates is dependant of the system variable Flags1, by default ~GwBasic style (row, col) is used.
Function.
Returns the length of the file associated with the channel number specified.
Function.
Returns the natural logarithm of the argument.

See also: [[LOG10]], [[EXP]].
Function.
Returns the decimal logarithm of the argument.

See also: [[LOG]].
Function.
Returns the string argument converted to lower case. {{{LCASE$}}} is a synonym of this function, included for compatibility with other dialects.
Function.
Left trim. Returns the string argument without possible initial spaces.
/***
|''Name:''|LegacyStrikeThroughPlugin|
|''Description:''|Support for legacy (pre 2.1) strike through formatting|
|''Version:''|1.0.2|
|''Date:''|Jul 21, 2006|
|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|
|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|
|''License:''|[[BSD open source license]]|
|''CoreVersion:''|2.1.0|
***/

//{{{
// Ensure that the LegacyStrikeThrough Plugin is only installed once.
if(!version.extensions.LegacyStrikeThroughPlugin) {
version.extensions.LegacyStrikeThroughPlugin = {installed:true};

config.formatters.push(
{
	name: "legacyStrikeByChar",
	match: "==",
	termRegExp: /(==)/mg,
	element: "strike",
	handler: config.formatterHelpers.createElementAndWikify
});

} //# end of "install only once"
//}}}
You can be confused by the fact that the presentation of Blassic says "line numbers are mandatory" but many of the sample programas have no line numbers at all. The answer is simple, Blassic always use line numbers, but when a program is loaded in text format the numbers are auto generated if not present. That way using [[LABEL]] as target of [[GOTO]] and [[GOSUB]] you can efectively write a program without worrying about the line numbers, but they are here if your program need them.

If you want to strip the line numbers of a program you can save it in binary form and use the sample program list.bas with the -n option, like this:
{{{
blassic list -n program.blc > newprogram.bas
}}}
Function.
{{{
MAX (list of numeric expresssions)
}}}
Returns the maximum value of the list.

See also: [[MIN]].
{{{
MERGE filename$
}}}
Merge a program file with the program already in memory.

See also [[CHAIN]].
Function:
{{{
MID$ (string$, pos [ , length ] )
}}}
Returns the substring of string$ that begins at pos and has length characters or to the end of string$ if length is not specified or is too long.

Instruction:
{{{
MID$ (string$, pos [, length] )= stringexpr$
}}}
Replaces the substring of string$ specified as in MID$ function with stringexpr$.
Function.
{{{
MIN (list of numeric expressions)
}}}
Returns the minimum value of the list.

See also: [[MAX]].
{{{
MKDIR dirname$
}}}
Create the directory {{{dirname$}}}.
Operator.
{{{
a MOD b
}}}
Returns the remainder of a / b.
[[Introduction]]
[[Index]]
[[Categories]]
[[FAQ]]
Math Functions.

See also [[Rounding Functions]].
Maximum level of nested FN calls.
Maximun size of the history buffer.
{{{
NAME file1$ AS file2$
}}}
Renames the file named {{{file1$}}} as {{{file2$}}}.
Operator.
Return the binary not of the argument taken as integer.
Numbers of args passed to the program from the command line (program name excluded).
Function.
{{{
OCT$ (number [ , width ] )
}}}
Returns the octal representation of {{{number}}} as string. If {{{width}}} is specified and is too great the result will be filled with leading zeros, if is too small the result is NOT shortened.
{{{
ON BREAK CONT
}}}
Cancel the effect of ctrl-c of stopping the program.

{{{
ON BREAK GOSUB n
}}}
When ctrl-c is pressed the program whill jump to the subroutine specified. n can be a line number or a label.

{{{
ON BREAK STOP
}}}
Disables the effect of ON BREAK CONT and ON BREAK GOSUB, ctrl-c will interrupt the program.
{{{
ON ERROR GOTO n
}}}
Jumps to the specified line when an error is detected in the program. {{{n}}} can be a line number or a label.

See also: [[RESUME]], [[ERR]], [[ERL]].
Operator.
Does a integer or logical (depending on the state of the system flags) binary or between its arguments.
Function without parameters. Returns the type of the operating system under which Blassic is used. Actually only two familys are defined, "windows" and "unix".

The value will be unix under Windows if the version of Blassic was compiled with Cygwin.
Function without parameters. Returns the name of the operating system under wich Blassic is used.

The value will be "Windows" under Windows (except if compiled under Cygwin) and the value returned from a {{{uname}}} system call otherwise.
Blassic operators.
!Instruction:
{{{
PAPER [#channel, ]inknum
}}}
Set {{{inknun}}} as background color in {{{channel}}}, which must be a terminal or a text window.

!PRINT modifier:
{{{
PAPER inknum
}}}
Same effect as the instruction, but his effect disapperar at the end of the PRINT.

See also: [[PRINT Modifiers]], [[PEN]], [[INK]].
!Instruction:
{{{
PEN [#channel, ] inknum [, transparent]
}}}
Set {{{inknun}}} as foreground color in {{{channel}}}, which must be a terminal or a text window.

!PRINT modifier:
{{{
PEN inknum
}}}
Same effect as the instruction, but his effects disappear at the end of the PRINT.

See also: [[PRINT Modifiers]], [[PAPER]], [[INK]].
Function without parameters.
Returns the value of the &pi; (pi) number.
Undocumented instruction, [[PLEASE]] do not use.
Discard the last value of the GOSUB/RETURN stack. Variables defined as [[LOCAL]] are restored to his previous values.
{{{
POPEN cmd$ [ERROR] [FOR INPUT|OUTPUT] AS [#]channel
}}}
Executes the {{{cmd$}}} command in the system's shell,  with his standard input, output, or both directed to {{{channel}}}.

If {{{ERROR}}} is specified, the standard error is also redirected.

See also: [[CLOSE]].
Function.
{{{
POS (#channel)
}}}
Returns the horizontal position of the cursos in that channel. Only screen channels are allowed.

See also: [[VPOS]].
PRINT Modifiers
Function:
{{{
PROGRAMARG$ (n)
}}}
Returns the {{{n}}} command line parameter with blassic is calles, excluded the blassic command and the program name, or the empty string if there is not enough parameters.

Instruction:
{{{
PROGRAMARG$ arg1$ [, args$ ....]
}}}
Establishes the return values of the PROGRAMARG$ function to the args specified. Useful when debugging.
Funtion without parameters.
Returns the address of the program memory area, or 0 if there is no program. See the autoview.bas and automod.bas sample programs.
{{{
PULL
}}}
Drops the las element of the REPEAT / UNTIL stack.

{{{
PULL FOR
}}}
Drops the las element of the FOR / NEXT stack.

{{{
PULL GOSUB
}}}
Same as POP.

{{{
PULL REPEAT
}}}
Same as PULL.

{{{
PULL WHILE
}}}
Drops the las element of the WHILE / WEND stack.
Type of line separator in printer output. 0 --> LF only, 1 --> CR + LF, 2 --> CR only. The default value is 1 in Windows and 0 in other systems.
!Printer output.

Printer output is buffered until Blassic exits or CLOSE LPRINT is done. Thus the amount of printable data is limited by the available memory.

The type of ouptut is controlled by the environment variable {{{BLASSIC_PRINT_COMMAND}}}. His value is used as a command that will receive in his standard input the printer output bufferd. If empty, "lp" is used in unix versions and a raw write to the default printer is done in windows.

!Line width and line separator.

The line width of the printer output is limited to a value definable with the [[WIDTH LPRINT]] instruction, inserting a line separator when exceeded. The line separator is controlled with the system variable PrinterLine, and can be a Line Feed (default value in unix versions, a Carriage Return and a Line Feed (default value in Windows) or Carriage Return. If you do not want this insertion of line separator you can do WIDTH LPRINT 0. The count of characters that forms a line is restored when a LPRINT sentence that ends without separator is executed, a line feed or carriage return explicitly printed is not considered as a line end. This can change in future versions of Blassic.

![[LPRINT]] and [[LLIST]] instructions.

The [[LPRINT]] and [[LLIST]] instructions are the same as [[PRINT]] and [[LIST]], the only difference is the default channel used, that in [[LPRINT]] and [[LLIST]] is 65535 instead of 0. That channel is directed to the printer output, unless an [[OPEN]], [[POPEN]] or [[SOCKET]] instruction was used with that number. In that case, when closed will be directed again to the printer output.
You can redirect that channel with an special form of the [[OPEN]] instruction: OPEN "filename" AS LPRINT, that is equivalent to open for output in channel 65535.

![[ZONE]] in printing.

When [[ZONE]] 0 is specified, the , separator of [[PRINT]] will emit a tab character, in other case the space until the next zone is filled with space characters.
Last page is not printed.

Blassic does not emit any type of form feed at the end of the job. In unix versions the spooler probably add it, but in windows, using raw output as we do, will not be added, then in page printers the last data remains in the printer memory waiting for more. The next printing job will probably force a form feed, or you may force it using the printer controls, or you can a add the form feed sequence of your printer to the end of the printing (usually 1A hex, 26 dec character).

!Postscript printers.

Postscript printers are not directly supported, unless your spooler in unix converts automatically non-postscrips job. You can, of course, write a Blassic program that writes valid postscript code.
Set trigonometric mode to radians.
Function:
{{{
REGEXP_INSTR ([pos, ]searched$, regexp$[, flags])
}}}
Returns the position of the first match of the {{{regexp$}}} regular expression in {{{searched$}}}, or 0 if no match. If {{{pos}}} is specified the regexp matching begins at that position.

For the values of the flag parameter see [[REGEXP_REPLACE$]]. 
Function:
{{{
REGEXP_REPLACE$ ([ pos, ]searched$, regexp$, rep[, flags])
}}}
Returns the string {{{searched$}}} with the matches of the regular expression {{{regexp$}}} replaced by the {{rep}} parameter, that can be a string or a FN. In the former case, the {{{$n}}} contained in the string are replaced by the subexpressions matched, in the later the FN function is called with the subexpressions as arguments.

The bits on the flag affect the result in the follwing mode: bit 0 sets nocase mode, bit 1 set nobegin mode (the string is treated as no located as the begin in a line), bit 2 set noend mode (the string is treated as no located at the end of a line), bit 3 sets the newline mode (the 'any charater' wildcards not match a newline character) and the other bits are reserved for future use, must be 0.

If {{{pos}}} is specified the regexp matching begins at that position.
Remark. The rest of the line is ignored.
{{{
RESUME [NEXT | n] 
}}}
On an [[ON ERROR GOTO]] routine, returns to the statement that produced the error, to the next statement, or to the position specified by {{{n}}}, that can be a number line or a label.
Continues execution after the point of the last [[GOSUB]]. Variables defined with [[LOCAL]] are restored to his previous values.
Function.
{{{
RIGHT$ (string$, n)
}}}
Returns the last {{{n}}} charaters from {{{string$}}}, or {{{string$}}} if {{{n}}} is greater than the length of {{{string$}}}.
Function. Like INSTR but from end ot string to beginning.
{{{
RMDIR dirname$
}}}
Remove the directory {{{dirname$}}}.
Function.
Right trim. Returns the string argument without possible final spaces.
Rounding Functions.

See also [[Math Functions]].
{{{
SAVE "program"
}}}
Saves the program in Blassic binary format. The recommended extension is .blc, but is not added automatically.

{{{
SAVE "program", A
}}}
Saves the program in text format. The recommended extension is .bas but is not added automatically.

{{{
SAVE "filename", B, var$
}}}
Save the content of the string var$ into filename.

{{{
SAVE "filename", B, address, length
}}}
Save {{{length}}} bytes of memory beginning at {{{address}}}.
{{{
SCREEN [#]num
}}}
Set {{{num}}} as the current screen.

{{{
SCREEN [#]num, name$
}}}
Set {{{name$}}} as the display for the screen number {{{num}}}.

New in Blassic 0.11.0
{{{
SCROLL [#window ,] [n]
}}}
Scroll the text window specified by {{{window}}}, 0 by default, the number of lines specified by {{{n}}}, 1 by default. If n is positive scrolls up and place the cursor at the beginning of the last line, if negative scrolls down and place the cursor at the beginning of the screen. 

See also [[GRAPHICS SCROLL]].
Set the title of the window.

In graphics mode, the title of the graphics window is affected.

In text mode, in windows the console window is affected, in unix if the terminal type is xterm, aixterm, dtterm, iris-ansi, sun-cmd or hpterm the title of the terminal window is affected, otherwise the instruction has no effect.
{{{
SHELL command$
}}}
Executes {{{command$}}} as a shell command.
Function. Returns the sine value or the argument.
Function. Returns the hyperbolic sine value or the argument.
{{{
SOCKET host$, portnum AS #channel
}}}
Open a socket and connect it to the {{{host$}}} specified using the tcp port {{{potnum}}}, and associates it to the input/output {{{channel}}}.
Function.
Returns a string composed of the number of spaces indicated by the argument.

See also: [[SPC]].
PRINT modifier.
Prints the number of spaces indicated by the argument.

See also: [[PRINT Modifiers]], [[SPACE$]].
Function. Returns the square root of the argument.
Stops execution.

See also: [[CONT]].
{{{
SYMBOL n, b1, b2, b3, b4, b5, b6, b7, b8
}}}
Define the char number n with 8 bytes of data, each bit corresponding to one pixel. b1 to b8 can be omitted, 0 is applied in that case.

See also [[SYMBOL AFTER]].
{{{
SYMBOL AFTER n
}}}
Set the number of permissible user defined characters. Characteres with values from n to 255 become definables. With 0 all chars are definables, with 256 none. All characters are reset to their default values.
Manages the synchronize mode of graphics.
{{{
SYNCHRONIZE n
}}}
Enable, when {{{n}}} is 1, or disable, when {{{n}}} is 0, synchronize mode.
{{{
SYNCHRONIZE
}}}
When in synchronize mode, update the graphics window.
Quits blassic returning to the operating system.
Function without parameters. Returns the address of the system vars memory area.

See [[System Variables]].
Return value of the last command invoked by the SHELL instruction.
Blassic documentation
Blassicdoc
/***
|''Name:''|SparklinePlugin|
|''Description:''|Sparklines macro|
***/
//{{{
if(!version.extensions.SparklinePlugin) {
version.extensions.SparklinePlugin = {installed:true};

//--
//-- Sparklines
//--

config.macros.sparkline = {};
config.macros.sparkline.handler = function(place,macroName,params)
{
	var data = [];
	var min = 0;
	var max = 0;
	var v;
	for(var t=0; t<params.length; t++) {
		v = parseInt(params[t]);
		if(v < min)
			min = v;
		if(v > max)
			max = v;
		data.push(v);
	}
	if(data.length < 1)
		return;
	var box = createTiddlyElement(place,"span",null,"sparkline",String.fromCharCode(160));
	box.title = data.join(",");
	var w = box.offsetWidth;
	var h = box.offsetHeight;
	box.style.paddingRight = (data.length * 2 - w) + "px";
	box.style.position = "relative";
	for(var d=0; d<data.length; d++) {
		var tick = document.createElement("img");
		tick.border = 0;
		tick.className = "sparktick";
		tick.style.position = "absolute";
		tick.src = "data:image/gif,GIF89a%01%00%01%00%91%FF%00%FF%FF%FF%00%00%00%C0%C0%C0%00%00%00!%F9%04%01%00%00%02%00%2C%00%00%00%00%01%00%01%00%40%02%02T%01%00%3B";
		tick.style.left = d*2 + "px";
		tick.style.width = "2px";
		v = Math.floor(((data[d] - min)/(max-min)) * h);
		tick.style.top = (h-v) + "px";
		tick.style.height = v + "px";
		box.appendChild(tick);
	}
};


}
//}}}
The synchronize mode allows the use semi-automatic double-buffering, to smooth animations. In normal mode, all drawings are done at the same time in the visible window and in his corresponding graphics buffer. In synchronize mode, only the buffer receives the drawings, and the visible widow is not updated until the windowing system demands redrawing (when the user minimizes and restores the window, for example) or a [[SYNCHRONIZE]] instruction is used.

To enable or disable synchronize mode use the {{{SYNCHRONIZE n}}} instruction, 1 to enable and 0 to disable.

Synchronize mode is temporarily disabled during a text input in a channel associated with the graphics window.
|!Name|!Position|!Length|!Writable|
|GraphicsWidth|0|2|No|
|GraphicsHeight|2|2|No|
|NumArgs|4|2|No|
|VersionMajor|6|2|No|
|VersionMinor|8|2|No|
|VersionRelease|10|2|
|AutoInit|12|4|Yes|
|AutoInc|16|4|Yes|
|CharGen|20|4|No|
|ShellResult|24|1|No|
|TypeOfVal|25|1|Yes|
|TypeOfNextCheck|26|1|Yes|
|TypeOfDimCheck|27|1|Yes|
|MaxHistory|28|2|Yes|
|[[Flags1]]|30|1|Yes|
|PrinterLine|31|1|Yes|
|MaxFnLevel|32|4|Yes|
|DebugLevel|36|2|Yes|
|[[Zone]]|38|2|Yes|
|GraphRotate|40|1|Yes|
|[[Flags2]]|41|1|Yes|
|TronChannel|42|2|No|
|TronFlags|44|1|No|
PRINT modifier. {{{TAB n}}} Prints spaces until the horizontal postition of printing reaches {{{n}}}. If {{{n}}} is greater than the current position, before doing this spaces are printed until reached the end of the line if the current channel is a graphic window, then a line end is emitted..
Function.
Returns the tangent of the argument.
Function.
Returns the hyperbolic tangent of the argument.
Function.
{{{
TEST (x, y)
}}}
Moves the graphic cursor to {{{x}}}, {{{y}}} and returns the ink number corresponding to the color of that point.

See also: [[TESTR]].
Function.
Same as [[TEST]] but the cursor movement is relative to the current position.
Function. Returns the string argument without possible initial and final spaces.
Set trace mode to off. See [[TRON]].
Set trace mode to on and stablishes the type of trace.
{{{
TRON [ LINE ] [ #channel ]
}}}
When the trace mode is on, information is printed about the current line before executing it. Without LINE the information printed is [line-number] (The [ ] are literal in this case); with LINE specified the entire line is printed. The information is printed in the {{{channel}}} specified, 0 if omitted.

See also: [[TROFF]].
Blassic Trigonometric Functions
Last channel number used for TRON or TRON LINE.
* Bit 0: TRON or TRON LINE is active.
* Bit 1: TRON LINE is active.
All other bits reserved for future use.
Type of DIM check: 0, DIM an array already dimensioned is an error; 1, is accepted.
Type of NEXT check: 0, all FOR has to be nested; 1, check relaxed.
Type of VAL function: 0 for only numbers, 1 for expressions evaluation.
Function.
Returns the string argument converted to upper case. {{{UCASE$}}} is a synonym of this function, included for compatibility with other dialects.
Function.
Returns the value of the first characters of the string argument that are a valid number according to the syntax of Blassic (0 if nome), or the entire string evaluated as a Blassic numeric expression, depending of the value of the system variable TypeOfVal.
Function.
Returns the value of the string argument evaluated as a Blassic string expression.
Function.
{{{
VPOS (#chanel)
}}}
Returns the vertical position of the cursor in channel. Only screen channels in graphics mode are allowed.

See also: [[POS]].
First chunk of version number.
Second chunk of version number.
Last chunk of version number. 
{{{
WIDTH LPRINT n [, m]
}}}
Stablishes the width of the printer output, when the width is exceeded a line separator is emitted (see the PrinterLine system variable. A value of 0 means unlimited width. The value m if specified set the left margin for the printer in chars.
Function without parameters.
Returns the x coordinate of the mouse position (only in graphics mode).

See also: [[YMOUSE]].
Operator.
Does a integer binary xor (exclusive or) between its arguments.
Function without parameters.
Returns the x coordinate of the graphics cursor.

See also [[YPOS]].
Function without parameters.
Returns the y coordinate of the mouse position (only in graphics mode).

See also: [[XMOUSE]].
Function without parameters.
Returns the y coordinate of the graphics cursor.

See also: [[XPOS]].
{{{
ZONE value
}}}
Establishes value as the width of the zones used by the , PRINT delimiter. A value of 0 means 8 in the graphics window and that a tab character is used instead of spaces in printer and in text mode.
Mimics the PLOT instruction of the ~ZX-81 Basic. 
Mimics the UNPLOT instruction of the ~ZX-81 Basic.
Size of the zone for the , PRINT separator in graphics mode and printer output. Stablished by a ZONE instruction.