<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[yab | yet another Basic for HAIKU - Snippets]]></title>
		<link>https://yab.orgfree.com/forum/</link>
		<description><![CDATA[yab | yet another Basic for HAIKU - https://yab.orgfree.com/forum]]></description>
		<pubDate>Thu, 30 Apr 2026 08:22:12 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Deskbar tray status indicator.]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=104</link>
			<pubDate>Mon, 25 Jun 2018 20:02:02 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=1">bbjimmy</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=104</guid>
			<description><![CDATA[Add a status indicator to the deskbar tray.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
<br />
doc Place a description of your<br />
doc program here.<br />
doc<br />
doc Author, date, license<br />
<br />
// set DEBUG = 1 to print out all messages on the console<br />
DEBUG = 1<br />
dir&#36;=attribute get&#36; "",""<br />
dir&#36;=dir&#36;+"/"<br />
OpenWindow()<br />
<br />
// Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;nCommands = token(message&#36;, msg&#36;(), "|")<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;for everyCommand = 1 to nCommands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG and msg&#36;(everyCommand)&lt;&gt;"") print msg&#36;(everyCommand)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(msg&#36;(everyCommand))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leavingLoop = true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "on/off"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if off=1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;off=0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPTION SET "on/off", "Label", "Stop"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("copyattr -n BEOS:ICON "+dir&#36;+"Color_12_Green "+dir&#36;+"On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if link=1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("desklink --remove=On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("desklink &#92;"cmd=Remove replicant:desklink --remove=On-Off&#92;" "+dir&#36;+"On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPTION SET "on/off", "Label", "Run"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("copyattr -n BEOS:ICON "+dir&#36;+"Color_06_Red "+dir&#36;+"On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;off=1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if link=1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("desklink --remove=On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("desklink &#92;"cmd=Remove replicant:desklink --remove=On-Off&#92;" "+dir&#36;+"On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "link"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if link=0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("desklink &#92;"cmd=Remove replicant:desklink --remove=On-Off&#92;" "+dir&#36;+"On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPTION SET "link", "Label", "Remove"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link=1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("desklink --remove=On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link=0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPTION SET "link", "Label", "DeskLink"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;next everyCommand<br />
<br />
wend<br />
<br />
CloseWindow()<br />
<br />
end<br />
<br />
<br />
// Setup the main window here<br />
sub OpenWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window open 100,100 to 600,500, "MainWindow", "On-Off"<br />
&nbsp;&nbsp;&nbsp;&nbsp;off=1<br />
&nbsp;&nbsp;&nbsp;&nbsp;link=0<br />
&nbsp;&nbsp;&nbsp;&nbsp;button 30,30 to 80,50, "on/off", "Run", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;button 30,100 to 120,120, "link", "DeskLink", "MainWindow"&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub<br />
<br />
// Close down the main window<br />
sub CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;system("copyattr -n BEOS:ICON "+dir&#36;+"Color_06_Red "+dir&#36;+"On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;system("desklink --remove=On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;window close "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub</code></div></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://yab.orgfree.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11" target="_blank" title="">on-off.zip</a> (Size: 56.21 KB / Downloads: 4)
<!-- end: postbit_attachments_attachment -->]]></description>
			<content:encoded><![CDATA[Add a status indicator to the deskbar tray.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
<br />
doc Place a description of your<br />
doc program here.<br />
doc<br />
doc Author, date, license<br />
<br />
// set DEBUG = 1 to print out all messages on the console<br />
DEBUG = 1<br />
dir&#36;=attribute get&#36; "",""<br />
dir&#36;=dir&#36;+"/"<br />
OpenWindow()<br />
<br />
// Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;nCommands = token(message&#36;, msg&#36;(), "|")<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;for everyCommand = 1 to nCommands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG and msg&#36;(everyCommand)&lt;&gt;"") print msg&#36;(everyCommand)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(msg&#36;(everyCommand))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leavingLoop = true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "on/off"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if off=1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;off=0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPTION SET "on/off", "Label", "Stop"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("copyattr -n BEOS:ICON "+dir&#36;+"Color_12_Green "+dir&#36;+"On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if link=1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("desklink --remove=On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("desklink &#92;"cmd=Remove replicant:desklink --remove=On-Off&#92;" "+dir&#36;+"On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPTION SET "on/off", "Label", "Run"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("copyattr -n BEOS:ICON "+dir&#36;+"Color_06_Red "+dir&#36;+"On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;off=1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if link=1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("desklink --remove=On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("desklink &#92;"cmd=Remove replicant:desklink --remove=On-Off&#92;" "+dir&#36;+"On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "link"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if link=0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("desklink &#92;"cmd=Remove replicant:desklink --remove=On-Off&#92;" "+dir&#36;+"On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPTION SET "link", "Label", "Remove"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link=1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system("desklink --remove=On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link=0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OPTION SET "link", "Label", "DeskLink"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;next everyCommand<br />
<br />
wend<br />
<br />
CloseWindow()<br />
<br />
end<br />
<br />
<br />
// Setup the main window here<br />
sub OpenWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window open 100,100 to 600,500, "MainWindow", "On-Off"<br />
&nbsp;&nbsp;&nbsp;&nbsp;off=1<br />
&nbsp;&nbsp;&nbsp;&nbsp;link=0<br />
&nbsp;&nbsp;&nbsp;&nbsp;button 30,30 to 80,50, "on/off", "Run", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;button 30,100 to 120,120, "link", "DeskLink", "MainWindow"&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub<br />
<br />
// Close down the main window<br />
sub CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;system("copyattr -n BEOS:ICON "+dir&#36;+"Color_06_Red "+dir&#36;+"On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;system("desklink --remove=On-Off")<br />
&nbsp;&nbsp;&nbsp;&nbsp;window close "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub</code></div></div><br /><!-- start: postbit_attachments_attachment -->
<br /><!-- start: attachment_icon -->
<img src="https://yab.orgfree.com/forum/images/attachtypes/zip.gif" title="ZIP File" border="0" alt=".zip" />
<!-- end: attachment_icon -->&nbsp;&nbsp;<a href="attachment.php?aid=11" target="_blank" title="">on-off.zip</a> (Size: 56.21 KB / Downloads: 4)
<!-- end: postbit_attachments_attachment -->]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[finding a process id]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=103</link>
			<pubDate>Fri, 22 Jun 2018 22:59:34 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=1">bbjimmy</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=103</guid>
			<description><![CDATA[Sometimes it is necessary to kioll a running process. This is not easy if the process id has not been saved. The following program finds the process id from the shell.  I call the program:<br />
<br />
<span style="font-weight: bold;" class="mycode_b"> pid</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
program&#36;=peek&#36;("argument")<br />
program&#36;=trim&#36;(program&#36;)<br />
if program&#36;="" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "usage:&nbsp;&nbsp;pid&nbsp;&nbsp;programname"<br />
&nbsp;&nbsp;&nbsp;&nbsp;exit<br />
endif<br />
a&#36;=system&#36;("ps "+program&#36;)<br />
dim w&#36;(1) <br />
num=token(a&#36;,w&#36;())<br />
if arraysize(w&#36;(),1)&lt; 7 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;print program&#36;+" not found"<br />
&nbsp;&nbsp;&nbsp;&nbsp;exit<br />
endif <br />
print w&#36;(7)</code></div></div><br />
This can be used in a shell script:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!sh<br />
pid Terminal&gt;Terminal.pid<br />
pid=`cat Terminal.pid`<br />
kill &#36;pid</code></div></div>]]></description>
			<content:encoded><![CDATA[Sometimes it is necessary to kioll a running process. This is not easy if the process id has not been saved. The following program finds the process id from the shell.  I call the program:<br />
<br />
<span style="font-weight: bold;" class="mycode_b"> pid</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
program&#36;=peek&#36;("argument")<br />
program&#36;=trim&#36;(program&#36;)<br />
if program&#36;="" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "usage:&nbsp;&nbsp;pid&nbsp;&nbsp;programname"<br />
&nbsp;&nbsp;&nbsp;&nbsp;exit<br />
endif<br />
a&#36;=system&#36;("ps "+program&#36;)<br />
dim w&#36;(1) <br />
num=token(a&#36;,w&#36;())<br />
if arraysize(w&#36;(),1)&lt; 7 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;print program&#36;+" not found"<br />
&nbsp;&nbsp;&nbsp;&nbsp;exit<br />
endif <br />
print w&#36;(7)</code></div></div><br />
This can be used in a shell script:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!sh<br />
pid Terminal&gt;Terminal.pid<br />
pid=`cat Terminal.pid`<br />
kill &#36;pid</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Large font textconterol]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=95</link>
			<pubDate>Mon, 19 Feb 2018 20:23:46 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=1">bbjimmy</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=95</guid>
			<description><![CDATA[A textcontrol cannot set the text font, but a textedit can.<br />
<br />
this example shows how to use a one-line textedit as a textcontrol and use a large font.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
<br />
doc Place a description of your<br />
doc program here.<br />
doc<br />
doc Author, date, license<br />
<br />
// set DEBUG = 1 to print out all messages on the console<br />
DEBUG = 0<br />
<br />
OpenWindow()<br />
<br />
// Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;ret = TEXTEDIT GET "test", "countlines"<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ret&gt;1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;a&#36;=textedit get&#36; "test"<br />
&nbsp;&nbsp;&nbsp;&nbsp;print a&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ret = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;TEXTEDIT CLEAR "test"<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;nCommands = token(message&#36;, msg&#36;(), "|")<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;for everyCommand = 1 to nCommands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG and msg&#36;(everyCommand)&lt;&gt;"") print msg&#36;(everyCommand)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(msg&#36;(everyCommand))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leavingLoop = true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;next everyCommand<br />
<br />
wend<br />
<br />
CloseWindow()<br />
<br />
end<br />
<br />
<br />
// Setup the main window here<br />
sub OpenWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window open 100,100 to 600,500, "MainWindow", "Main Window"<br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit 10,10 to 300,50, "test", 0,"MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;TEXTEDIT SET "test", "font", "DejaVu Sans,Condensed Bold,32"<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub<br />
<br />
// Close down the main window<br />
sub CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window close "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub</code></div></div>]]></description>
			<content:encoded><![CDATA[A textcontrol cannot set the text font, but a textedit can.<br />
<br />
this example shows how to use a one-line textedit as a textcontrol and use a large font.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
<br />
doc Place a description of your<br />
doc program here.<br />
doc<br />
doc Author, date, license<br />
<br />
// set DEBUG = 1 to print out all messages on the console<br />
DEBUG = 0<br />
<br />
OpenWindow()<br />
<br />
// Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;ret = TEXTEDIT GET "test", "countlines"<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ret&gt;1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;a&#36;=textedit get&#36; "test"<br />
&nbsp;&nbsp;&nbsp;&nbsp;print a&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ret = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;TEXTEDIT CLEAR "test"<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;nCommands = token(message&#36;, msg&#36;(), "|")<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;for everyCommand = 1 to nCommands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG and msg&#36;(everyCommand)&lt;&gt;"") print msg&#36;(everyCommand)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(msg&#36;(everyCommand))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leavingLoop = true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;next everyCommand<br />
<br />
wend<br />
<br />
CloseWindow()<br />
<br />
end<br />
<br />
<br />
// Setup the main window here<br />
sub OpenWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window open 100,100 to 600,500, "MainWindow", "Main Window"<br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit 10,10 to 300,50, "test", 0,"MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;TEXTEDIT SET "test", "font", "DejaVu Sans,Condensed Bold,32"<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub<br />
<br />
// Close down the main window<br />
sub CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window close "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Fullscreen programs]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=85</link>
			<pubDate>Tue, 04 Apr 2017 22:44:35 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=2">clasqm</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=85</guid>
			<description><![CDATA[This will appear as an appendix in the next version of <span style="font-style: italic;" class="mycode_i">Programming with yab</span>.<br />
<br />
Yab does not have a built-in facility to write apps that run in a formal fullscreen mode. But we can fake it! Writing such a program is not very difficult. It boils down to the following steps:<br />
<br />
1, Find out the dimensions of the screen using the PEEK command<br />
2. Create a window from 0, 0 to those dimensions, in other words, cover the entire screen with a window.<br />
3. Remove all the window decor with WINDOW SET <br />
4. Continue writing the rest of the program.<br />
<br />
That's all there is to it, really! The following little demo shows how to do this.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
doc Fullscreen demo<br />
OpenWindow()<br />
<br />
// Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
//This is a dummy loop just to stop the demo from closing<br />
wend<br />
end<br />
// Setup the main window here<br />
sub OpenWindow()<br />
local xw, yh<br />
xw = peek("desktopwidth")<br />
yh = peek ("desktopheight")<br />
&nbsp;&nbsp;&nbsp;&nbsp;window open 0,0 to xw,yh, "MainWindow", "Main Window"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "look", "no-border"<br />
end sub</code></div></div><br />
In an actual program, though, I would do one thing differently. Those values for <span style="font-style: italic;" class="mycode_i">xw</span> and <span style="font-style: italic;" class="mycode_i">yh</span> - I am going to need them all over the place once I start placing widgets on this window. So just this once, I would consider making them global rather than local variables. Global variables are not intrinsically evil: if you know what you are doing, a good mixture of global and local variables is perfectly acceptable.<br />
<br />
This is of course just a regular application that happens to take up the entire screen. Other apps can hide behind it or come up in front of it. A true full-screen mode is provided by the operating system and prevents that from happening.<br />
 <br />
There is a way to specify that a yab app should always remain on top (see the documentation for WINDOW SET), but that is normally a bad idea when you are working full-screen. You would prevent your user from getting to Tracker or the Deskbar, for one thing. If you are going to do that, make sure to provide an obvious way to minimize or close your app. Yes, you will need to do it - you can't just leave it to the window tab, because we removed it!<br />
<br />
But what if you want your program to toggle between a window and full screen? WINDOW SET can help you there too: it has a range of options for moving and resizing your window.]]></description>
			<content:encoded><![CDATA[This will appear as an appendix in the next version of <span style="font-style: italic;" class="mycode_i">Programming with yab</span>.<br />
<br />
Yab does not have a built-in facility to write apps that run in a formal fullscreen mode. But we can fake it! Writing such a program is not very difficult. It boils down to the following steps:<br />
<br />
1, Find out the dimensions of the screen using the PEEK command<br />
2. Create a window from 0, 0 to those dimensions, in other words, cover the entire screen with a window.<br />
3. Remove all the window decor with WINDOW SET <br />
4. Continue writing the rest of the program.<br />
<br />
That's all there is to it, really! The following little demo shows how to do this.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
doc Fullscreen demo<br />
OpenWindow()<br />
<br />
// Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
//This is a dummy loop just to stop the demo from closing<br />
wend<br />
end<br />
// Setup the main window here<br />
sub OpenWindow()<br />
local xw, yh<br />
xw = peek("desktopwidth")<br />
yh = peek ("desktopheight")<br />
&nbsp;&nbsp;&nbsp;&nbsp;window open 0,0 to xw,yh, "MainWindow", "Main Window"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "look", "no-border"<br />
end sub</code></div></div><br />
In an actual program, though, I would do one thing differently. Those values for <span style="font-style: italic;" class="mycode_i">xw</span> and <span style="font-style: italic;" class="mycode_i">yh</span> - I am going to need them all over the place once I start placing widgets on this window. So just this once, I would consider making them global rather than local variables. Global variables are not intrinsically evil: if you know what you are doing, a good mixture of global and local variables is perfectly acceptable.<br />
<br />
This is of course just a regular application that happens to take up the entire screen. Other apps can hide behind it or come up in front of it. A true full-screen mode is provided by the operating system and prevents that from happening.<br />
 <br />
There is a way to specify that a yab app should always remain on top (see the documentation for WINDOW SET), but that is normally a bad idea when you are working full-screen. You would prevent your user from getting to Tracker or the Deskbar, for one thing. If you are going to do that, make sure to provide an obvious way to minimize or close your app. Yes, you will need to do it - you can't just leave it to the window tab, because we removed it!<br />
<br />
But what if you want your program to toggle between a window and full screen? WINDOW SET can help you there too: it has a range of options for moving and resizing your window.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Getting the system fonts]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=84</link>
			<pubDate>Mon, 20 Mar 2017 23:03:28 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=1">bbjimmy</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=84</guid>
			<description><![CDATA[yab did not include a way to determine the currently set system font.  this library file should do the trick!<br />
<br />
<a href="https://github.com/bbjimmy/yab-lib/tree/master/getsystemfonts" target="_blank" rel="noopener" class="mycode_url">https://github.com/bbjimmy/yab-lib/tree/...ystemfonts</a><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>//export sub getfont_family&#36;(fonttype&#36;)<br />
//returns the string needed by draw set to set this font -- less the point size.<br />
<br />
//export sub getfont_size&#36;(fonttype&#36;)<br />
// returns the piont size of the font<br />
<br />
//fonttype&#36; can be "bold", "book", or "mono"<br />
<br />
<br />
<br />
<br />
////////////////////////////////////<br />
<br />
sub getsystemfonts()<br />
local a&#36;,num,x<br />
dim font&#36;(1)<br />
a&#36;=system&#36;("message /boot/home/config/settings/system/app_server/fonts")<br />
num=split(a&#36;,font&#36;(),"&#92;n")<br />
for x=2 to 10<br />
&nbsp;&nbsp;&nbsp;&nbsp;a&#36;=gststring&#36;(font&#36;(x))<br />
&nbsp;&nbsp;&nbsp;&nbsp;if a&#36;&lt;&gt;"" font&#36;(x)=a&#36;<br />
next<br />
font&#36;(4)=getsize&#36;(font&#36;(4))<br />
font&#36;(7)=getsize&#36;(font&#36;(7))<br />
font&#36;(10)=getsize&#36;(font&#36;(10))<br />
<br />
end sub<br />
<br />
////////////////////////////////////<br />
<br />
sub gststring&#36;(a&#36;)<br />
local x<br />
x=instr(a&#36;,chr&#36;(34))<br />
a&#36;=right&#36;(a&#36;,len(a&#36;)-x)<br />
x=instr(a&#36;,chr&#36;(34))<br />
a&#36;=left&#36;(a&#36;,x-1)<br />
return a&#36;<br />
end sub<br />
<br />
////////////////////////////////////<br />
<br />
sub getsize&#36;(a&#36;)<br />
x=instr(a&#36;,"(")<br />
a&#36;=right&#36;(a&#36;,len(a&#36;)-x)<br />
x=instr(a&#36;,".")<br />
a&#36;=left&#36;(a&#36;,x-1)<br />
return a&#36;<br />
end sub<br />
<br />
////////////////////////////////////<br />
<br />
<br />
export sub getfont_family&#36;(fonttype&#36;)<br />
dim font&#36;(1)<br />
x=arraysize(font&#36;(),1)<br />
if x=1 getsystemfonts()<br />
fonttype&#36;=lower&#36;(fonttype&#36;) <br />
if fonttype&#36;="book" return font&#36;(2)+", "+font&#36;(3)+", "<br />
if fonttype&#36;="bold" return font&#36;(5)+", "+font&#36;(6)+", "<br />
if fonttype&#36;="mono" return font&#36;(8)+", "+font&#36;(9)+", "<br />
end sub<br />
<br />
////////////////////////////////////<br />
<br />
<br />
export sub getfont_size&#36;(fonttype&#36;)<br />
dim font&#36;(1)<br />
x=arraysize(font&#36;(),1)<br />
if x=1 getsystemfonts()<br />
fonttype&#36;=lower&#36;(fonttype&#36;) <br />
if fonttype&#36;="book" return font&#36;(4)<br />
if fonttype&#36;="bold" return font&#36;(7)<br />
if fonttype&#36;="mono" return font&#36;(10)<br />
end sub</code></div></div>]]></description>
			<content:encoded><![CDATA[yab did not include a way to determine the currently set system font.  this library file should do the trick!<br />
<br />
<a href="https://github.com/bbjimmy/yab-lib/tree/master/getsystemfonts" target="_blank" rel="noopener" class="mycode_url">https://github.com/bbjimmy/yab-lib/tree/...ystemfonts</a><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>//export sub getfont_family&#36;(fonttype&#36;)<br />
//returns the string needed by draw set to set this font -- less the point size.<br />
<br />
//export sub getfont_size&#36;(fonttype&#36;)<br />
// returns the piont size of the font<br />
<br />
//fonttype&#36; can be "bold", "book", or "mono"<br />
<br />
<br />
<br />
<br />
////////////////////////////////////<br />
<br />
sub getsystemfonts()<br />
local a&#36;,num,x<br />
dim font&#36;(1)<br />
a&#36;=system&#36;("message /boot/home/config/settings/system/app_server/fonts")<br />
num=split(a&#36;,font&#36;(),"&#92;n")<br />
for x=2 to 10<br />
&nbsp;&nbsp;&nbsp;&nbsp;a&#36;=gststring&#36;(font&#36;(x))<br />
&nbsp;&nbsp;&nbsp;&nbsp;if a&#36;&lt;&gt;"" font&#36;(x)=a&#36;<br />
next<br />
font&#36;(4)=getsize&#36;(font&#36;(4))<br />
font&#36;(7)=getsize&#36;(font&#36;(7))<br />
font&#36;(10)=getsize&#36;(font&#36;(10))<br />
<br />
end sub<br />
<br />
////////////////////////////////////<br />
<br />
sub gststring&#36;(a&#36;)<br />
local x<br />
x=instr(a&#36;,chr&#36;(34))<br />
a&#36;=right&#36;(a&#36;,len(a&#36;)-x)<br />
x=instr(a&#36;,chr&#36;(34))<br />
a&#36;=left&#36;(a&#36;,x-1)<br />
return a&#36;<br />
end sub<br />
<br />
////////////////////////////////////<br />
<br />
sub getsize&#36;(a&#36;)<br />
x=instr(a&#36;,"(")<br />
a&#36;=right&#36;(a&#36;,len(a&#36;)-x)<br />
x=instr(a&#36;,".")<br />
a&#36;=left&#36;(a&#36;,x-1)<br />
return a&#36;<br />
end sub<br />
<br />
////////////////////////////////////<br />
<br />
<br />
export sub getfont_family&#36;(fonttype&#36;)<br />
dim font&#36;(1)<br />
x=arraysize(font&#36;(),1)<br />
if x=1 getsystemfonts()<br />
fonttype&#36;=lower&#36;(fonttype&#36;) <br />
if fonttype&#36;="book" return font&#36;(2)+", "+font&#36;(3)+", "<br />
if fonttype&#36;="bold" return font&#36;(5)+", "+font&#36;(6)+", "<br />
if fonttype&#36;="mono" return font&#36;(8)+", "+font&#36;(9)+", "<br />
end sub<br />
<br />
////////////////////////////////////<br />
<br />
<br />
export sub getfont_size&#36;(fonttype&#36;)<br />
dim font&#36;(1)<br />
x=arraysize(font&#36;(),1)<br />
if x=1 getsystemfonts()<br />
fonttype&#36;=lower&#36;(fonttype&#36;) <br />
if fonttype&#36;="book" return font&#36;(4)<br />
if fonttype&#36;="bold" return font&#36;(7)<br />
if fonttype&#36;="mono" return font&#36;(10)<br />
end sub</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[using a treebox]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=83</link>
			<pubDate>Wed, 08 Mar 2017 20:14:16 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=1">bbjimmy</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=83</guid>
			<description><![CDATA[Treeboxes are the yab version of the Outline List View. They allow the user to select an item like a listbox while allowing for sub items for each listed item. This takes some special handeling to set-up.<br />
<br />
<br />
First, add the treebox : <br />
<br />
TREEBOX 0,0 to 300,400, "TB", 1, View&#36;<br />
<br />
Next add all the top level items in the order to be shown:<br />
<br />
TREEBOX ADD "TB", "First Item"<br />
TREEBOX ADD "TB", "Second Item"<br />
TREEBOX ADD "TB", "Third Item"<br />
<br />
Now add the sub-items grouped together and in the reverse order:<br />
<br />
TREEBOX ADD "TB", "First Item", "Sub item2",0<br />
TREEBOX ADD "TB", "First Item", "Sub item1",0<br />
TREEBOX ADD "TB", "Sub item1", "Detail2", 0<br />
TREEBOX ADD "TB", "Sub item1", "Detail1", 0<br />
TREEBOX ADD "TB", "Second Item", "Sub item2,2",0<br />
TREEBOX ADD "TB", "Second Item", "Sub item2,1",0<br />
<br />
<br />
Haiku has issues with the outlinelistview therefore yab has the same issue. If one colapsed a menu and later expands the menu and attempts to make a selection, the wrong item is selected. The following is a work-around that will always make the proper selection, although it adds a minor visual glitch.<br />
<br />
In the program loop do the following:<br />
<br />
if left&#36;(msg&#36;(everyCommand),11)="TB:_Select:" then<br />
tmp=treebox get "TB"<br />
TREEBOX SELECT "TB", tmp<br />
// now process the selection <br />
endif<br />
<br />
It seems that treebox get was not included in the documentation. It makes one wonder how many other yab commands are missing from the docs.<br />
<br />
The magic here is:<br />
<br />
TREEBOX SELECT "TB", tmp<br />
<br />
this selects the item, but the loop will come around soon enough to re-select the sub-idem that was really intended. otherwise outlinelistview will continue to reurn the wrong message and the user will see his selection not take effect. <br />
<br />
Example program:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
<br />
doc Place a description of your<br />
doc program here.<br />
doc<br />
doc Author, date, license<br />
<br />
// set DEBUG = 1 to print out all messages on the console<br />
DEBUG = 1<br />
dim tbitem&#36;(10)<br />
OpenWindow()<br />
for x=1 to treebox count "TB"<br />
tbitem&#36;(x) = "This should be &#92;""+(treebox get&#36; "TB",x)+".&#92;"": print tbitem&#36;(x)<br />
next<br />
<br />
// Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;nCommands = token(message&#36;, msg&#36;(), "|")<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;for everyCommand = 1 to nCommands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG and msg&#36;(everyCommand)&lt;&gt;"") print msg&#36;(everyCommand)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(msg&#36;(everyCommand))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leavingLoop = true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if left&#36;(msg&#36;(everyCommand),11)="TB:_Select:" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp=treebox get "TB"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX SELECT "TB", tmp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TEXTEDIT CLEAR "TE"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TEXTEDIT ADD "TE", "Message: "+ msg&#36;(everyCommand) +"&#92;n&#92;n"+tbitem&#36;(tmp)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;next everyCommand<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
wend<br />
<br />
CloseWindow()<br />
<br />
end<br />
<br />
<br />
// Setup the main window here<br />
sub OpenWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window open 100,100 to 600,500, "MainWindow", "Main Window"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Window set "MainWindow","flags", "Not-Zoomable Not-Resizable"<br />
&nbsp;&nbsp;&nbsp;&nbsp;SPLITVIEW 0,0 TO 500,400, "SplitView", 1, 1, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;SPLITVIEW SET "SplitView", "Divider", 100<br />
&nbsp;&nbsp;&nbsp;&nbsp;SPLITVIEW SET "SplitView", "MinimumSizes", 100, 200<br />
&nbsp;&nbsp;&nbsp;&nbsp;TEXTEDIT 0,0 TO 500,400, "TE", 0,"SplitView2"<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX 0,0 to 300,400, "TB", 1, "SplitView1"<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "First Item"<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "Second Item"<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "Third Item"<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "First Item", "Sub item2",0<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "First Item", "Sub item1",0<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "Sub item1", "Detail2", 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "Sub item1", "Detail1", 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "Second Item", "Sub item2,2",0<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "Second Item", "Sub item2,1",0<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
end sub&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
//close down the main window<br />
sub CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window close "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub</code></div></div>]]></description>
			<content:encoded><![CDATA[Treeboxes are the yab version of the Outline List View. They allow the user to select an item like a listbox while allowing for sub items for each listed item. This takes some special handeling to set-up.<br />
<br />
<br />
First, add the treebox : <br />
<br />
TREEBOX 0,0 to 300,400, "TB", 1, View&#36;<br />
<br />
Next add all the top level items in the order to be shown:<br />
<br />
TREEBOX ADD "TB", "First Item"<br />
TREEBOX ADD "TB", "Second Item"<br />
TREEBOX ADD "TB", "Third Item"<br />
<br />
Now add the sub-items grouped together and in the reverse order:<br />
<br />
TREEBOX ADD "TB", "First Item", "Sub item2",0<br />
TREEBOX ADD "TB", "First Item", "Sub item1",0<br />
TREEBOX ADD "TB", "Sub item1", "Detail2", 0<br />
TREEBOX ADD "TB", "Sub item1", "Detail1", 0<br />
TREEBOX ADD "TB", "Second Item", "Sub item2,2",0<br />
TREEBOX ADD "TB", "Second Item", "Sub item2,1",0<br />
<br />
<br />
Haiku has issues with the outlinelistview therefore yab has the same issue. If one colapsed a menu and later expands the menu and attempts to make a selection, the wrong item is selected. The following is a work-around that will always make the proper selection, although it adds a minor visual glitch.<br />
<br />
In the program loop do the following:<br />
<br />
if left&#36;(msg&#36;(everyCommand),11)="TB:_Select:" then<br />
tmp=treebox get "TB"<br />
TREEBOX SELECT "TB", tmp<br />
// now process the selection <br />
endif<br />
<br />
It seems that treebox get was not included in the documentation. It makes one wonder how many other yab commands are missing from the docs.<br />
<br />
The magic here is:<br />
<br />
TREEBOX SELECT "TB", tmp<br />
<br />
this selects the item, but the loop will come around soon enough to re-select the sub-idem that was really intended. otherwise outlinelistview will continue to reurn the wrong message and the user will see his selection not take effect. <br />
<br />
Example program:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
<br />
doc Place a description of your<br />
doc program here.<br />
doc<br />
doc Author, date, license<br />
<br />
// set DEBUG = 1 to print out all messages on the console<br />
DEBUG = 1<br />
dim tbitem&#36;(10)<br />
OpenWindow()<br />
for x=1 to treebox count "TB"<br />
tbitem&#36;(x) = "This should be &#92;""+(treebox get&#36; "TB",x)+".&#92;"": print tbitem&#36;(x)<br />
next<br />
<br />
// Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;nCommands = token(message&#36;, msg&#36;(), "|")<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;for everyCommand = 1 to nCommands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG and msg&#36;(everyCommand)&lt;&gt;"") print msg&#36;(everyCommand)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(msg&#36;(everyCommand))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leavingLoop = true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if left&#36;(msg&#36;(everyCommand),11)="TB:_Select:" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp=treebox get "TB"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX SELECT "TB", tmp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TEXTEDIT CLEAR "TE"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TEXTEDIT ADD "TE", "Message: "+ msg&#36;(everyCommand) +"&#92;n&#92;n"+tbitem&#36;(tmp)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;next everyCommand<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
wend<br />
<br />
CloseWindow()<br />
<br />
end<br />
<br />
<br />
// Setup the main window here<br />
sub OpenWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window open 100,100 to 600,500, "MainWindow", "Main Window"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Window set "MainWindow","flags", "Not-Zoomable Not-Resizable"<br />
&nbsp;&nbsp;&nbsp;&nbsp;SPLITVIEW 0,0 TO 500,400, "SplitView", 1, 1, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;SPLITVIEW SET "SplitView", "Divider", 100<br />
&nbsp;&nbsp;&nbsp;&nbsp;SPLITVIEW SET "SplitView", "MinimumSizes", 100, 200<br />
&nbsp;&nbsp;&nbsp;&nbsp;TEXTEDIT 0,0 TO 500,400, "TE", 0,"SplitView2"<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX 0,0 to 300,400, "TB", 1, "SplitView1"<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "First Item"<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "Second Item"<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "Third Item"<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "First Item", "Sub item2",0<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "First Item", "Sub item1",0<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "Sub item1", "Detail2", 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "Sub item1", "Detail1", 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "Second Item", "Sub item2,2",0<br />
&nbsp;&nbsp;&nbsp;&nbsp;TREEBOX ADD "TB", "Second Item", "Sub item2,1",0<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
end sub&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
//close down the main window<br />
sub CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window close "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[More spinner stuff.]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=70</link>
			<pubDate>Mon, 16 May 2016 21:29:18 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=1">bbjimmy</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=70</guid>
			<description><![CDATA[I added a slinner to a Filebox.<br />
<br />
FileboxDemo.yab ( minor changes)<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
<br />
import spinner<br />
import Filebox_spin<br />
<br />
<br />
<br />
dir&#36; = "/boot/home/"<br />
<br />
window open 100,100 to 500,500, "Demo",dir&#36;<br />
Window set "Demo","flags","Not-Zoomable Not-Resizable"<br />
Filebox(10,20,350,385,"Filebox", 1, "Demo")<br />
button 10,0,32,20, "DirUp", "..", "Demo"<br />
FileboxDirectory("Filebox", dir&#36;, true)<br />
<br />
<br />
dim msg&#36;(1)<br />
inloop = true<br />
while(inloop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = split(message&#36;, msg&#36;(), "|")<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=1 to n<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print msg&#36;(i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Quit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(msg&#36;(i) = "Demo:_QuitRequested") inloop = false<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Button pressed and we are not in the root directory<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(msg&#36;(i) = "DirUp" and dir&#36;"/") then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t = len(dir&#36;)-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(mid&#36;(dir&#36;,t,1)"/") <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t = t - 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wend<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir&#36; = left&#36;(dir&#36;,t)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WINDOW SET "Demo", "Title", dir&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileboxDirectory("Filebox", dir&#36;, false)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// An item is invoked<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(instr(msg&#36;(i),"Filebox:_Invoke:")) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position = val(right&#36;(msg&#36;(i),len(msg&#36;(i))-16))<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// if the item is a directory, then update the filebox else print the filename<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(FileboxIsDirectory("Filebox", position,dir&#36;)) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir&#36; = dir&#36; + FileboxName&#36;("Filebox", position) + "/"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WINDOW SET "Demo", "Title", dir&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileboxDirectory("Filebox", dir&#36;, true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print dir&#36;+FileboxName&#36;("Filebox", position)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;next i<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 0.01<br />
wend<br />
<br />
window close "Demo"</code></div></div><br />
<br />
Filebox_spin.yab (modified Filebox.yab library file)<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Filebox is a library to have an easy access to a list of files.<br />
// This is easier than poking around with columnboxes yourself.<br />
<br />
// Open a new filebox from (x1,y1) to (x2,y2)<br />
// with the id ID&#36;, the type of scrollbar ScrollbarType on View&#36;<br />
export sub Filebox(x1,y1,x2,y2, ID&#36;, ScrollbarType, View&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;local myscrollbar<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox x1,y1 to x2,y2, ID&#36;, ScrollbarType, "resizable", View&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox column ID&#36;, " ", 1, 20, 20, 20, "align-center"<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(scrollbarType=1 or scrollbarType=3) myscrollbar = peek("scrollbarwidth")<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox column ID&#36;, "Name", 2, 1000, 21, x2-x1-24-myscrollbar, "align-left"<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox color ID&#36;, "Selection-Active", 220,220,250<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;columnbox color ID&#36;, "Row-Divider", 255,255,255<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new_spinner(x2-12,y2-12,12,12, ID&#36;, View&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spinner_set(1,ID&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub<br />
<br />
// Easy interface to a Filebox, simply name a directory<br />
export sub FileboxDirectorySimple(ID&#36;, dir&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FileboxDirectory(ID&#36;,dir&#36;,false)<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub<br />
<br />
// return the name of the row position<br />
export sub FileboxName&#36;(ID&#36;, position)<br />
&nbsp;&nbsp;&nbsp;&nbsp;return columnbox get&#36; ID&#36;, 2, position<br />
end sub<br />
<br />
// return true, if the row position is a directory<br />
export sub FileboxIsDirectory(ID&#36;, position,dir&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;local t&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;t&#36; = columnbox get&#36; ID&#36;, 2, position<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "t&#36; "+t&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;//if(t&#36; =&nbsp;&nbsp;"__Path__="+path&#36;+Name&#36;"__Mime__=application/x-vnd.Be-directory") return true<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(system("test -d &#92;""+ dir&#36;+t&#36;+"&#92;"") = 0) system("addattr -t mime BEOS:TYPE application/x-vnd.Be-directory &#92;""+dir&#36;+t&#36;+"&#92;"") : return true<br />
&nbsp;&nbsp;&nbsp;&nbsp;return false<br />
end sub<br />
<br />
// Give a directory and the following options:<br />
// showDot: set this to true to show hidden (dot) files<br />
export sub FileboxDirectory(ID&#36;, dir&#36;, showDot)<br />
display_spinner(ID&#36;)<br />
spin(ID&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;local t&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;local i<br />
&nbsp;&nbsp;&nbsp;&nbsp;local n<br />
&nbsp;&nbsp;&nbsp;&nbsp;local arraysizeDir<br />
&nbsp;&nbsp;&nbsp;&nbsp;local arraysizeFiles<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;dim directories&#36;(1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;dim files&#36;(1)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;arraysizeDir = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;arraysizeFiles = 0<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox clear ID&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(showDot) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&#36; = system&#36;("ls --format=single-column --color=none -aF &#92;""+dir&#36;+"&#92;" |sort -f")<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&#36; = system&#36;("ls --format=single-column --color=none -F &#92;""+dir&#36;+"&#92;" |sort -f")<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;dim splitdir&#36;(1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;spin=1<br />
&nbsp;&nbsp;&nbsp;&nbsp;n = split(t&#36;, splitdir&#36;(), "&#92;n")<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=1 to n-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;if n=spin spin(ID&#36;):spin=spin+10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//print dir&#36;+splitdir&#36;(i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//print dir&#36;+splitdir&#36;(i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;(right&#36;(splitdir&#36;(i),1)="/") then<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //if(system("test -d &#92;""+ dir&#36;+splitdir&#36;(i)+"&#92;"") = 0) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// comment the if clause out if you want to have the direcotries "." and ".." listed<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(splitdir&#36;(i)&lt;&gt;"./" and splitdir&#36;(i)&lt;&gt;"../") then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arraysizeDir = arraysizeDir + 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dim directories&#36;(arraysizeDir)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;splitdir&#36;(i) = left&#36;(splitdir&#36;(i),len( splitdir&#36;(i))-1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;directories&#36;(arraysizeDir-1) = splitdir&#36;(i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// handle files<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arraysizeFiles = arraysizeFiles + 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dim files&#36;(arraysizeFiles)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if right&#36;(splitdir&#36;(i),1)="*" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files&#36;(arraysizeFiles-1) = left&#36;(splitdir&#36;(i), len(splitdir&#36;(i)) -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elseif right&#36;(splitdir&#36;(i),1)="@" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files&#36;(arraysizeFiles-1) = left&#36;(splitdir&#36;(i), len(splitdir&#36;(i)) -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files&#36;(arraysizeFiles-1) = splitdir&#36;(i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif <br />
&nbsp;&nbsp;&nbsp;&nbsp;next i<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=0 to arraysizeDir-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileboxAdd(ID&#36;, directories&#36;(i), true,dir&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spin(ID&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;next i<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=0 to arraysizeFiles-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileboxAdd(ID&#36;, files&#36;(i), false,dir&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spin(ID&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;next i<br />
&nbsp;&nbsp;&nbsp;&nbsp;hide_spinner(ID&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub<br />
<br />
sub FileboxAdd(ID&#36;, Name&#36;, IsFolder, path&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;local maxpos<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;maxpos = (columnbox count ID&#36;) + 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;a&#36;=""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(IsFolder) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;columnbox add ID&#36;, 1, maxpos, 18, "__SmIC__="+path&#36;+Name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;columnbox add ID&#36;, 1, maxpos, 18, "__SmIC__="+path&#36;+Name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;//else&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//columnbox add ID&#36;, 1, maxpos, 18, "__Mime__=application/octet-stream"<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox add ID&#36;, 2, maxpos, 20, Name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox select ID&#36;, 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox select ID&#36;, 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub</code></div></div><br />
<img src="http://yab.orgfree.com/img/Filebox-spinner.png" loading="lazy"  alt="[Image: Filebox-spinner.png]" class="mycode_img" /><br />
<br />
Note the spinner in the lower right. It only shows as the file listing is being filled.]]></description>
			<content:encoded><![CDATA[I added a slinner to a Filebox.<br />
<br />
FileboxDemo.yab ( minor changes)<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
<br />
import spinner<br />
import Filebox_spin<br />
<br />
<br />
<br />
dir&#36; = "/boot/home/"<br />
<br />
window open 100,100 to 500,500, "Demo",dir&#36;<br />
Window set "Demo","flags","Not-Zoomable Not-Resizable"<br />
Filebox(10,20,350,385,"Filebox", 1, "Demo")<br />
button 10,0,32,20, "DirUp", "..", "Demo"<br />
FileboxDirectory("Filebox", dir&#36;, true)<br />
<br />
<br />
dim msg&#36;(1)<br />
inloop = true<br />
while(inloop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = split(message&#36;, msg&#36;(), "|")<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=1 to n<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print msg&#36;(i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Quit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(msg&#36;(i) = "Demo:_QuitRequested") inloop = false<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Button pressed and we are not in the root directory<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(msg&#36;(i) = "DirUp" and dir&#36;"/") then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t = len(dir&#36;)-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(mid&#36;(dir&#36;,t,1)"/") <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t = t - 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wend<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir&#36; = left&#36;(dir&#36;,t)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WINDOW SET "Demo", "Title", dir&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileboxDirectory("Filebox", dir&#36;, false)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// An item is invoked<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(instr(msg&#36;(i),"Filebox:_Invoke:")) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position = val(right&#36;(msg&#36;(i),len(msg&#36;(i))-16))<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// if the item is a directory, then update the filebox else print the filename<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(FileboxIsDirectory("Filebox", position,dir&#36;)) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dir&#36; = dir&#36; + FileboxName&#36;("Filebox", position) + "/"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WINDOW SET "Demo", "Title", dir&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileboxDirectory("Filebox", dir&#36;, true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print dir&#36;+FileboxName&#36;("Filebox", position)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;next i<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 0.01<br />
wend<br />
<br />
window close "Demo"</code></div></div><br />
<br />
Filebox_spin.yab (modified Filebox.yab library file)<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>// Filebox is a library to have an easy access to a list of files.<br />
// This is easier than poking around with columnboxes yourself.<br />
<br />
// Open a new filebox from (x1,y1) to (x2,y2)<br />
// with the id ID&#36;, the type of scrollbar ScrollbarType on View&#36;<br />
export sub Filebox(x1,y1,x2,y2, ID&#36;, ScrollbarType, View&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;local myscrollbar<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox x1,y1 to x2,y2, ID&#36;, ScrollbarType, "resizable", View&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox column ID&#36;, " ", 1, 20, 20, 20, "align-center"<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(scrollbarType=1 or scrollbarType=3) myscrollbar = peek("scrollbarwidth")<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox column ID&#36;, "Name", 2, 1000, 21, x2-x1-24-myscrollbar, "align-left"<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox color ID&#36;, "Selection-Active", 220,220,250<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;columnbox color ID&#36;, "Row-Divider", 255,255,255<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new_spinner(x2-12,y2-12,12,12, ID&#36;, View&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spinner_set(1,ID&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub<br />
<br />
// Easy interface to a Filebox, simply name a directory<br />
export sub FileboxDirectorySimple(ID&#36;, dir&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;FileboxDirectory(ID&#36;,dir&#36;,false)<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub<br />
<br />
// return the name of the row position<br />
export sub FileboxName&#36;(ID&#36;, position)<br />
&nbsp;&nbsp;&nbsp;&nbsp;return columnbox get&#36; ID&#36;, 2, position<br />
end sub<br />
<br />
// return true, if the row position is a directory<br />
export sub FileboxIsDirectory(ID&#36;, position,dir&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;local t&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;t&#36; = columnbox get&#36; ID&#36;, 2, position<br />
&nbsp;&nbsp;&nbsp;&nbsp;print "t&#36; "+t&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;//if(t&#36; =&nbsp;&nbsp;"__Path__="+path&#36;+Name&#36;"__Mime__=application/x-vnd.Be-directory") return true<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(system("test -d &#92;""+ dir&#36;+t&#36;+"&#92;"") = 0) system("addattr -t mime BEOS:TYPE application/x-vnd.Be-directory &#92;""+dir&#36;+t&#36;+"&#92;"") : return true<br />
&nbsp;&nbsp;&nbsp;&nbsp;return false<br />
end sub<br />
<br />
// Give a directory and the following options:<br />
// showDot: set this to true to show hidden (dot) files<br />
export sub FileboxDirectory(ID&#36;, dir&#36;, showDot)<br />
display_spinner(ID&#36;)<br />
spin(ID&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;local t&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;local i<br />
&nbsp;&nbsp;&nbsp;&nbsp;local n<br />
&nbsp;&nbsp;&nbsp;&nbsp;local arraysizeDir<br />
&nbsp;&nbsp;&nbsp;&nbsp;local arraysizeFiles<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;dim directories&#36;(1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;dim files&#36;(1)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;arraysizeDir = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;arraysizeFiles = 0<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox clear ID&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(showDot) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&#36; = system&#36;("ls --format=single-column --color=none -aF &#92;""+dir&#36;+"&#92;" |sort -f")<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&#36; = system&#36;("ls --format=single-column --color=none -F &#92;""+dir&#36;+"&#92;" |sort -f")<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;dim splitdir&#36;(1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;spin=1<br />
&nbsp;&nbsp;&nbsp;&nbsp;n = split(t&#36;, splitdir&#36;(), "&#92;n")<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=1 to n-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;if n=spin spin(ID&#36;):spin=spin+10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//print dir&#36;+splitdir&#36;(i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//print dir&#36;+splitdir&#36;(i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;(right&#36;(splitdir&#36;(i),1)="/") then<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //if(system("test -d &#92;""+ dir&#36;+splitdir&#36;(i)+"&#92;"") = 0) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// comment the if clause out if you want to have the direcotries "." and ".." listed<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(splitdir&#36;(i)&lt;&gt;"./" and splitdir&#36;(i)&lt;&gt;"../") then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arraysizeDir = arraysizeDir + 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dim directories&#36;(arraysizeDir)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;splitdir&#36;(i) = left&#36;(splitdir&#36;(i),len( splitdir&#36;(i))-1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;directories&#36;(arraysizeDir-1) = splitdir&#36;(i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// handle files<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arraysizeFiles = arraysizeFiles + 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dim files&#36;(arraysizeFiles)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if right&#36;(splitdir&#36;(i),1)="*" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files&#36;(arraysizeFiles-1) = left&#36;(splitdir&#36;(i), len(splitdir&#36;(i)) -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;elseif right&#36;(splitdir&#36;(i),1)="@" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files&#36;(arraysizeFiles-1) = left&#36;(splitdir&#36;(i), len(splitdir&#36;(i)) -1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files&#36;(arraysizeFiles-1) = splitdir&#36;(i)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif <br />
&nbsp;&nbsp;&nbsp;&nbsp;next i<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=0 to arraysizeDir-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileboxAdd(ID&#36;, directories&#36;(i), true,dir&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spin(ID&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;next i<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=0 to arraysizeFiles-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FileboxAdd(ID&#36;, files&#36;(i), false,dir&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spin(ID&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;next i<br />
&nbsp;&nbsp;&nbsp;&nbsp;hide_spinner(ID&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub<br />
<br />
sub FileboxAdd(ID&#36;, Name&#36;, IsFolder, path&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;local maxpos<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;maxpos = (columnbox count ID&#36;) + 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;a&#36;=""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(IsFolder) then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;columnbox add ID&#36;, 1, maxpos, 18, "__SmIC__="+path&#36;+Name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;columnbox add ID&#36;, 1, maxpos, 18, "__SmIC__="+path&#36;+Name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;//else&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//columnbox add ID&#36;, 1, maxpos, 18, "__Mime__=application/octet-stream"<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox add ID&#36;, 2, maxpos, 20, Name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox select ID&#36;, 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;columnbox select ID&#36;, 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub</code></div></div><br />
<img src="http://yab.orgfree.com/img/Filebox-spinner.png" loading="lazy"  alt="[Image: Filebox-spinner.png]" class="mycode_img" /><br />
<br />
Note the spinner in the lower right. It only shows as the file listing is being filled.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[A barberpole spinner]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=69</link>
			<pubDate>Thu, 05 May 2016 19:58:36 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=1">bbjimmy</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=69</guid>
			<description><![CDATA[There are times when a process will take a liong time, but a status bar is not usable for feedback as there is no feedback from the process. A barberpole slinner will give the user some idea that the process is still running.<br />
The following is a library and example program<br />
<br />
<br />
example program<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
<br />
<br />
import spinner<br />
// set DEBUG = 1 to print out all messages on the console<br />
DEBUG = 0<br />
<br />
OpenWindow()<br />
<br />
<br />
// Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;nCommands = token(message&#36;, msg&#36;(), "|")<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;for everyCommand = 1 to nCommands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG and msg&#36;(everyCommand)&lt;&gt;"") print msg&#36;(everyCommand)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(msg&#36;(everyCommand))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leavingLoop = true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "start"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display_spinner("horizontal")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display_spinner("virtictal")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;countdown=1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "stop"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hide_spinner("horizontal")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hide_spinner("virtictal")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;countdown = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;next everyCommand<br />
&nbsp;&nbsp;&nbsp;&nbsp;if countdown &gt;0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;countdown=countdown+1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if countdown=400 countdown=0<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if countdown then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spin("horizontal")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spin("virtictal")<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
<br />
wend<br />
<br />
<br />
CloseWindow()<br />
<br />
end<br />
sub OpenWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window open 100,100 to 600,500, "MainWindow", "Main Window"<br />
&nbsp;&nbsp;&nbsp;&nbsp;button 80,30 to 150,60, "start", "start", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;button 180,30 to 250,60, "stop", "stop", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;new_spinner(100,100,100,0,"horizontal", "MainWindow")<br />
&nbsp;&nbsp;&nbsp;&nbsp;new_spinner(10,10,50,1,"virtictal", "MainWindow")<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub<br />
<br />
<br />
// Close down the main window<br />
sub CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window close "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub</code></div></div><br />
new_spinner( x,y,length,virtical,name&#36;)<br />
<br />
x and y are the top left co-ordinates of the spinner.<br />
<br />
length is the number of pixels right or down from the x,y origin<br />
<br />
if virtical is  true, the spinner is virtical otherwise it is horizontal<br />
<br />
name&#36; is the name of the new slinner.<br />
<br />
display_spinner(name&#36;)  and hide_spinner(name&#36;) show/hide the spinner.<br />
<br />
spin(name&#36;) rotates the barber poel one step.  This should be in your main  program loop. one cannot spin a hidden spinner ( the view for the spinner is removed on hide, and added on show) <br />
<br />
<br />
the library ( save as spinner.yab and place in the library search path)<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>export sub new_spinner(hz,vt,htln,orentationn, name&#36;, view&#36;)<br />
static mumber<br />
number = number+1<br />
dim spinner(number,4)<br />
dim spinnername&#36;(number,2)<br />
<br />
spinner(number,1)=hz<br />
spinner(number,2)=vt<br />
spinner(number,3)=htln<br />
if spinner(number,3)=0 spinner(number,3)=1<br />
spinner(number,4)=orentationn<br />
spinnername&#36;(number,1)=name&#36;<br />
spinnername&#36;(number,2)=view&#36;<br />
end sub<br />
<br />
<br />
<br />
export sub display_spinner(name&#36;)<br />
<br />
local x,i.number,view&#36;, length<br />
x=arraysize(spinnername&#36;(),1)<br />
for i=1 to x<br />
if (spinnername&#36;(i,1)=name&#36;) number = i<br />
next<br />
<br />
view&#36;=spinnername&#36;(number,2)<br />
length=spinner(number,3)<br />
<br />
if spinner(number,4) = 0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;view spinner(number,1),spinner(number,2) to spinner(number,2)+length,spinner(number,1)+15, name&#36;+"_view", view&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set 0,"HighSolidFill"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor",180,180,180, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw rect 0,0 to length,15, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor",225,225,235, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 0,15 to length,15, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line length,0 to length,15 , name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor",150,150,150, name&#36;+"_view"&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 0,0 to 0,15 , name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 1,0 to length-1,0 , name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;CANVAS 2,2 to length-2,13,&nbsp;&nbsp;name&#36;, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor", 0,80,225, name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "lowcolor", 245,245,245, name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
else<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;view spinner(number,1),spinner(number,2) to spinner(number,2)+15,spinner(number,1)+length, name&#36;+"_view", view&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set 0,"HighSolidFill"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor",180,180,180, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw rect 0,0 to 15,length, name&#36;+"_view"&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor",225,225,235, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 0,length to 15,length, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 15,0 to 15,length, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor",150,150,150, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 0,0 to 14,0 , name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 0,0 to 0,length , name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;CANVAS 2,2 to 13, length-2, name&#36;, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor", 0,80,225, name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "lowcolor", 245,245,245, name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
endif<br />
<br />
<br />
<br />
<br />
end sub<br />
<br />
export sub hide_spinner(name&#36;)<br />
view remove name&#36;+"_view"<br />
end sub<br />
<br />
<br />
<br />
export sub spin(name&#36;)<br />
local i,length,x<br />
x=arraysize(spinnername&#36;(),1)<br />
for i=1 to x<br />
if (spinnername&#36;(i,1)=name&#36;) number = i<br />
next<br />
length=spinner(number,3)<br />
<br />
<br />
p = spinner(number,0)<br />
switch p<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 0&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36;= "030060120240225195135015"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "060120240225195135015030"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "120240225195135015030060"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "240225195135015030060120"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 4<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "225195135015030060120240"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "195135015030060120240225"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 6<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "135015030060120240225195"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 7<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "015030060120240225195135"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
end switch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
draw set 0, pattern&#36;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
if spinner(number,4) = 0 then // spin to the right or up<br />
 &nbsp;&nbsp;&nbsp;&nbsp;draw rect 0,0 to length-4, 13, name&#36;<br />
 &nbsp;&nbsp;&nbsp;&nbsp;p=p-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;if p&lt;0 p=7<br />
 &nbsp;&nbsp;&nbsp;&nbsp;spinner(number,0)=p&nbsp;&nbsp;&nbsp;&nbsp;<br />
else<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw rect 0,0 to 13 ,length, name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;p=p+1<br />
&nbsp;&nbsp;&nbsp;&nbsp;if p=8 p=0<br />
&nbsp;&nbsp;&nbsp;&nbsp;spinner(number,0)=p&nbsp;&nbsp;&nbsp;&nbsp;<br />
endif&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
<br />
end sub</code></div></div>]]></description>
			<content:encoded><![CDATA[There are times when a process will take a liong time, but a status bar is not usable for feedback as there is no feedback from the process. A barberpole slinner will give the user some idea that the process is still running.<br />
The following is a library and example program<br />
<br />
<br />
example program<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
<br />
<br />
import spinner<br />
// set DEBUG = 1 to print out all messages on the console<br />
DEBUG = 0<br />
<br />
OpenWindow()<br />
<br />
<br />
// Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;nCommands = token(message&#36;, msg&#36;(), "|")<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;for everyCommand = 1 to nCommands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG and msg&#36;(everyCommand)&lt;&gt;"") print msg&#36;(everyCommand)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(msg&#36;(everyCommand))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:_QuitRequested"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leavingLoop = true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "start"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display_spinner("horizontal")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display_spinner("virtictal")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;countdown=1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "stop"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hide_spinner("horizontal")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hide_spinner("virtictal")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;countdown = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;next everyCommand<br />
&nbsp;&nbsp;&nbsp;&nbsp;if countdown &gt;0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;countdown=countdown+1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if countdown=400 countdown=0<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if countdown then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spin("horizontal")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;spin("virtictal")<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
<br />
wend<br />
<br />
<br />
CloseWindow()<br />
<br />
end<br />
sub OpenWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window open 100,100 to 600,500, "MainWindow", "Main Window"<br />
&nbsp;&nbsp;&nbsp;&nbsp;button 80,30 to 150,60, "start", "start", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;button 180,30 to 250,60, "stop", "stop", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;new_spinner(100,100,100,0,"horizontal", "MainWindow")<br />
&nbsp;&nbsp;&nbsp;&nbsp;new_spinner(10,10,50,1,"virtictal", "MainWindow")<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub<br />
<br />
<br />
// Close down the main window<br />
sub CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;window close "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;return<br />
end sub</code></div></div><br />
new_spinner( x,y,length,virtical,name&#36;)<br />
<br />
x and y are the top left co-ordinates of the spinner.<br />
<br />
length is the number of pixels right or down from the x,y origin<br />
<br />
if virtical is  true, the spinner is virtical otherwise it is horizontal<br />
<br />
name&#36; is the name of the new slinner.<br />
<br />
display_spinner(name&#36;)  and hide_spinner(name&#36;) show/hide the spinner.<br />
<br />
spin(name&#36;) rotates the barber poel one step.  This should be in your main  program loop. one cannot spin a hidden spinner ( the view for the spinner is removed on hide, and added on show) <br />
<br />
<br />
the library ( save as spinner.yab and place in the library search path)<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>export sub new_spinner(hz,vt,htln,orentationn, name&#36;, view&#36;)<br />
static mumber<br />
number = number+1<br />
dim spinner(number,4)<br />
dim spinnername&#36;(number,2)<br />
<br />
spinner(number,1)=hz<br />
spinner(number,2)=vt<br />
spinner(number,3)=htln<br />
if spinner(number,3)=0 spinner(number,3)=1<br />
spinner(number,4)=orentationn<br />
spinnername&#36;(number,1)=name&#36;<br />
spinnername&#36;(number,2)=view&#36;<br />
end sub<br />
<br />
<br />
<br />
export sub display_spinner(name&#36;)<br />
<br />
local x,i.number,view&#36;, length<br />
x=arraysize(spinnername&#36;(),1)<br />
for i=1 to x<br />
if (spinnername&#36;(i,1)=name&#36;) number = i<br />
next<br />
<br />
view&#36;=spinnername&#36;(number,2)<br />
length=spinner(number,3)<br />
<br />
if spinner(number,4) = 0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;view spinner(number,1),spinner(number,2) to spinner(number,2)+length,spinner(number,1)+15, name&#36;+"_view", view&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set 0,"HighSolidFill"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor",180,180,180, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw rect 0,0 to length,15, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor",225,225,235, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 0,15 to length,15, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line length,0 to length,15 , name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor",150,150,150, name&#36;+"_view"&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 0,0 to 0,15 , name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 1,0 to length-1,0 , name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;CANVAS 2,2 to length-2,13,&nbsp;&nbsp;name&#36;, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor", 0,80,225, name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "lowcolor", 245,245,245, name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
else<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;view spinner(number,1),spinner(number,2) to spinner(number,2)+15,spinner(number,1)+length, name&#36;+"_view", view&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set 0,"HighSolidFill"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor",180,180,180, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw rect 0,0 to 15,length, name&#36;+"_view"&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor",225,225,235, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 0,length to 15,length, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 15,0 to 15,length, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor",150,150,150, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 0,0 to 14,0 , name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw line 0,0 to 0,length , name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;CANVAS 2,2 to 13, length-2, name&#36;, name&#36;+"_view"<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor", 0,80,225, name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "lowcolor", 245,245,245, name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
endif<br />
<br />
<br />
<br />
<br />
end sub<br />
<br />
export sub hide_spinner(name&#36;)<br />
view remove name&#36;+"_view"<br />
end sub<br />
<br />
<br />
<br />
export sub spin(name&#36;)<br />
local i,length,x<br />
x=arraysize(spinnername&#36;(),1)<br />
for i=1 to x<br />
if (spinnername&#36;(i,1)=name&#36;) number = i<br />
next<br />
length=spinner(number,3)<br />
<br />
<br />
p = spinner(number,0)<br />
switch p<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 0&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36;= "030060120240225195135015"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "060120240225195135015030"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "120240225195135015030060"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "240225195135015030060120"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 4<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "225195135015030060120240"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "195135015030060120240225"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 6<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "135015030060120240225195"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;case 7<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pattern&#36; = "015030060120240225195135"<br />
&nbsp;&nbsp;&nbsp;&nbsp;break<br />
end switch<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
draw set 0, pattern&#36;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
if spinner(number,4) = 0 then // spin to the right or up<br />
 &nbsp;&nbsp;&nbsp;&nbsp;draw rect 0,0 to length-4, 13, name&#36;<br />
 &nbsp;&nbsp;&nbsp;&nbsp;p=p-1<br />
&nbsp;&nbsp;&nbsp;&nbsp;if p&lt;0 p=7<br />
 &nbsp;&nbsp;&nbsp;&nbsp;spinner(number,0)=p&nbsp;&nbsp;&nbsp;&nbsp;<br />
else<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw rect 0,0 to 13 ,length, name&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;p=p+1<br />
&nbsp;&nbsp;&nbsp;&nbsp;if p=8 p=0<br />
&nbsp;&nbsp;&nbsp;&nbsp;spinner(number,0)=p&nbsp;&nbsp;&nbsp;&nbsp;<br />
endif&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
<br />
end sub</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[adding the application signature]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=66</link>
			<pubDate>Sat, 30 Apr 2016 02:29:57 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=1">bbjimmy</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=66</guid>
			<description><![CDATA[yab-IDE 2.2.6 adds some convenience to building your application. No-longer is "application/x-vnd.yab-app" the default application signature.<br />
<br />
if the yab filename is "MyApp.yab" then the application signature will default to "application/x-vnd.MyApp"<br />
<br />
This default can be over-ridden by placing a comment at the beginning of your yab file. <br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
# MIMETYPE "application/x-vnd.MyCoolApp"</code></div></div>This will change the default for your program to "application/x-vnd.MyCoolApp" regardless of the filename. The comment must be the first or second line of your file.]]></description>
			<content:encoded><![CDATA[yab-IDE 2.2.6 adds some convenience to building your application. No-longer is "application/x-vnd.yab-app" the default application signature.<br />
<br />
if the yab filename is "MyApp.yab" then the application signature will default to "application/x-vnd.MyApp"<br />
<br />
This default can be over-ridden by placing a comment at the beginning of your yab file. <br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
# MIMETYPE "application/x-vnd.MyCoolApp"</code></div></div>This will change the default for your program to "application/x-vnd.MyCoolApp" regardless of the filename. The comment must be the first or second line of your file.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to cut and paste snippets from this forum]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=62</link>
			<pubDate>Sun, 10 Apr 2016 22:25:58 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=2">clasqm</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=62</guid>
			<description><![CDATA[You read the code examples here and you think "that's great let me try it". So you cut the code to the clipboard, paste it into TryThis.yab, and ...<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>---Error in TryThis.yab, line 29: syntax error at "0xff"</code></div></div><br />
OK, if you haven't given up on yab yet, here's the issue: some browsers don't send out very "clean" unicode/ascii to the clipboard, and WebPositive is one of them. "0xff" is geek-talk for the number 255 and Extended ASCII 255 should be the letter "ÿ" but in this case it is embedded as an invisible little bit of binary that messes up our code.<br />
<br />
The solution is very simple: USE A DIFFERENT BROWSER. Cutting the same code from Qupzilla provides clean text with no hidden surprises.]]></description>
			<content:encoded><![CDATA[You read the code examples here and you think "that's great let me try it". So you cut the code to the clipboard, paste it into TryThis.yab, and ...<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>---Error in TryThis.yab, line 29: syntax error at "0xff"</code></div></div><br />
OK, if you haven't given up on yab yet, here's the issue: some browsers don't send out very "clean" unicode/ascii to the clipboard, and WebPositive is one of them. "0xff" is geek-talk for the number 255 and Extended ASCII 255 should be the letter "ÿ" but in this case it is embedded as an invisible little bit of binary that messes up our code.<br />
<br />
The solution is very simple: USE A DIFFERENT BROWSER. Cutting the same code from Qupzilla provides clean text with no hidden surprises.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[select mode and radio mode popup menus]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=61</link>
			<pubDate>Sun, 10 Apr 2016 18:36:37 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=1">bbjimmy</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=61</guid>
			<description><![CDATA[I have made a library file for better handeling of popup menus for my yoshi project. This library will allow one to make a popup menu that marks multiple selections or only one to use the popup as a radio selectuion.<br />
<br />
test program:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>import popup<br />
window open 100,100 to 310,250, "test", "test"<br />
<br />
popup=new_popup("test_name", "test", 1)//radio selection<br />
add_popup_selection&#36;(popup,1,"First selection")<br />
add_popup_selection&#36;(popup,2,"Second selection")<br />
add_popup_selection&#36;(popup,3,"Some other Selection")<br />
add_popup_selection&#36;(popup,4,"Third selection")<br />
add_popup_selection&#36;(popup,5,"Fourth selection")<br />
a&#36;=popup_select&#36;(popup,"Fourth selection")<br />
<br />
<br />
button 10,20 to 200,40, "popupbutton", "Fourth selection&nbsp;&nbsp;▾", "test"<br />
<br />
popup1=new_popup("test_name1", "test", 3)//selection mode<br />
add_popup_selection&#36;(popup1,1,"First selection")<br />
add_popup_selection&#36;(popup1,2,"Second selection")<br />
add_popup_selection&#36;(popup1,3,"Some other Selection")<br />
add_popup_selection&#36;(popup1,4,"Third selection")<br />
add_popup_selection&#36;(popup1,5,"Fourth selection")<br />
a&#36;=popup_select&#36;(popup1,"Fourth selection")<br />
<br />
button 10,60 to 200,80, "newbutton", "Please make selections ▾", "test"<br />
<br />
inloop = true<br />
while(inloop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;msg&#36;=message&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if msg&#36;&lt;&gt;"" print msg&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if instr(msg&#36;,"Quit") inloop=false<br />
&nbsp;&nbsp;&nbsp;&nbsp;if instr(msg&#36;,"popupbutton") showpopup()<br />
&nbsp;&nbsp;&nbsp;&nbsp;if instr(msg&#36;,"newbutton") shownewpopup()<br />
wend&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
print getselected&#36;(popup)<br />
<br />
<br />
end<br />
sub showpopup()<br />
selection&#36;=popupdisplay&#36;(10,20,popup)<br />
if selection&#36;&lt;&gt;"" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;selection&#36;=trim&#36;(selection&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;a&#36;=popup_select&#36;(popup,selection&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;if a&#36;="ok" OPTION SET "popupbutton", "Label", selection&#36;+" ▾"<br />
endif<br />
<br />
<br />
end sub<br />
<br />
sub shownewpopup()<br />
selection&#36;=popupdisplay&#36;(10,20,popup1)<br />
<br />
if selection&#36;&lt;&gt;"" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;selection&#36;=trim&#36;(selection&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;if left&#36;(selection&#36;,3)="√" then // remove the mark to see the real selection<br />
&nbsp;&nbsp;&nbsp;&nbsp;selection&#36; = right&#36;(selection&#36;,len(selection&#36;)-4)<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;a&#36;=popup_select&#36;(popup1,selection&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
endif<br />
<br />
<br />
end sub</code></div></div><br />
The library file:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>////////////////////////////////////////////////////////<br />
export sub new_popup(name&#36;, view&#36;, radio)<br />
static size<br />
size=size+1<br />
dim popup&#36;(size,12,1) // name, view, selections ( up to 10)<br />
dim&nbsp;&nbsp;popup(size,2) //radio flag, 1=radio, 0=not radio<br />
popup&#36;(size,1,0)=name&#36;<br />
popup&#36;(size,2,0)=view&#36;<br />
popup(size,1)=radio<br />
return size<br />
end sub<br />
////////////////////////////////////////////////////////<br />
<br />
export sub add_popup_selection&#36;(popup,number,selection&#36;)<br />
popup&#36;(popup,number+2,0)=selection&#36;<br />
return "ok"<br />
end sub<br />
<br />
////////////////////////////////////////////////////////<br />
<br />
export sub popup_select&#36;(x,selection&#36;)<br />
local i<br />
for i=3 to 12<br />
&nbsp;&nbsp;&nbsp;&nbsp;if popup&#36;(x,i,0)=selection&#36; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;popup(x,1)=1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popup(x,2)=i<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "ok"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if popup&#36;(x,i,1)="√ " then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popup&#36;(x,i,1)=""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popup&#36;(x,i,1)="√ "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "ok"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
next<br />
<br />
<br />
<br />
return "error"<br />
end sub<br />
<br />
////////////////////////////////////////////////////////<br />
<br />
export sub popupdisplay&#36;(x,y,popup)<br />
local i, MenuItems&#36;<br />
MenuItems&#36;=""<br />
if popup(popup,1)=1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=3 to 10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if popup&#36;(popup,i,0)&lt;&gt;"" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if popup(popup,2)=i&nbsp;&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItems&#36;=MenuItems&#36;+"√ "+popup&#36;(popup,i,0)+"|"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItems&#36;=MenuItems&#36;+"&nbsp;&nbsp;"+popup&#36;(popup,i,0)+"|"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;next<br />
endif&nbsp;&nbsp;&nbsp;&nbsp;<br />
if popup(popup,1)=0 then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=3 to 10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if popup&#36;(popup,i,0)&lt;&gt;"" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItems&#36;=MenuItems&#36;+popup&#36;(popup,i,0)+"|"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;next<br />
endif&nbsp;&nbsp;&nbsp;&nbsp;<br />
if popup(popup,1)=3 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=3 to 10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if popup&#36;(popup,i,0)&lt;&gt;"" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItems&#36;=MenuItems&#36;+popup&#36;(popup,i,1)+popup&#36;(popup,i,0)+"|"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;next<br />
endif<br />
<br />
MenuItems&#36;=left&#36;(MenuItems&#36;,len(MenuItems&#36;)-1)<br />
Selected&#36; = POPUPMENU x,y, MenuItems&#36;, popup&#36;(popup,2,0)<br />
return Selected&#36;<br />
end sub<br />
////////////////////////////////////////////////////////<br />
<br />
export sub getselected&#36;(x)<br />
return popup&#36;(x,popup(x,2),0)<br />
end sub</code></div></div><br />
name the library file popup.yab and place it in ~/config/settings/yab to use the code.]]></description>
			<content:encoded><![CDATA[I have made a library file for better handeling of popup menus for my yoshi project. This library will allow one to make a popup menu that marks multiple selections or only one to use the popup as a radio selectuion.<br />
<br />
test program:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>import popup<br />
window open 100,100 to 310,250, "test", "test"<br />
<br />
popup=new_popup("test_name", "test", 1)//radio selection<br />
add_popup_selection&#36;(popup,1,"First selection")<br />
add_popup_selection&#36;(popup,2,"Second selection")<br />
add_popup_selection&#36;(popup,3,"Some other Selection")<br />
add_popup_selection&#36;(popup,4,"Third selection")<br />
add_popup_selection&#36;(popup,5,"Fourth selection")<br />
a&#36;=popup_select&#36;(popup,"Fourth selection")<br />
<br />
<br />
button 10,20 to 200,40, "popupbutton", "Fourth selection&nbsp;&nbsp;▾", "test"<br />
<br />
popup1=new_popup("test_name1", "test", 3)//selection mode<br />
add_popup_selection&#36;(popup1,1,"First selection")<br />
add_popup_selection&#36;(popup1,2,"Second selection")<br />
add_popup_selection&#36;(popup1,3,"Some other Selection")<br />
add_popup_selection&#36;(popup1,4,"Third selection")<br />
add_popup_selection&#36;(popup1,5,"Fourth selection")<br />
a&#36;=popup_select&#36;(popup1,"Fourth selection")<br />
<br />
button 10,60 to 200,80, "newbutton", "Please make selections ▾", "test"<br />
<br />
inloop = true<br />
while(inloop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;msg&#36;=message&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if msg&#36;&lt;&gt;"" print msg&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if instr(msg&#36;,"Quit") inloop=false<br />
&nbsp;&nbsp;&nbsp;&nbsp;if instr(msg&#36;,"popupbutton") showpopup()<br />
&nbsp;&nbsp;&nbsp;&nbsp;if instr(msg&#36;,"newbutton") shownewpopup()<br />
wend&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
print getselected&#36;(popup)<br />
<br />
<br />
end<br />
sub showpopup()<br />
selection&#36;=popupdisplay&#36;(10,20,popup)<br />
if selection&#36;&lt;&gt;"" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;selection&#36;=trim&#36;(selection&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;a&#36;=popup_select&#36;(popup,selection&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;if a&#36;="ok" OPTION SET "popupbutton", "Label", selection&#36;+" ▾"<br />
endif<br />
<br />
<br />
end sub<br />
<br />
sub shownewpopup()<br />
selection&#36;=popupdisplay&#36;(10,20,popup1)<br />
<br />
if selection&#36;&lt;&gt;"" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;selection&#36;=trim&#36;(selection&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;if left&#36;(selection&#36;,3)="√" then // remove the mark to see the real selection<br />
&nbsp;&nbsp;&nbsp;&nbsp;selection&#36; = right&#36;(selection&#36;,len(selection&#36;)-4)<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;a&#36;=popup_select&#36;(popup1,selection&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
endif<br />
<br />
<br />
end sub</code></div></div><br />
The library file:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>////////////////////////////////////////////////////////<br />
export sub new_popup(name&#36;, view&#36;, radio)<br />
static size<br />
size=size+1<br />
dim popup&#36;(size,12,1) // name, view, selections ( up to 10)<br />
dim&nbsp;&nbsp;popup(size,2) //radio flag, 1=radio, 0=not radio<br />
popup&#36;(size,1,0)=name&#36;<br />
popup&#36;(size,2,0)=view&#36;<br />
popup(size,1)=radio<br />
return size<br />
end sub<br />
////////////////////////////////////////////////////////<br />
<br />
export sub add_popup_selection&#36;(popup,number,selection&#36;)<br />
popup&#36;(popup,number+2,0)=selection&#36;<br />
return "ok"<br />
end sub<br />
<br />
////////////////////////////////////////////////////////<br />
<br />
export sub popup_select&#36;(x,selection&#36;)<br />
local i<br />
for i=3 to 12<br />
&nbsp;&nbsp;&nbsp;&nbsp;if popup&#36;(x,i,0)=selection&#36; then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;popup(x,1)=1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popup(x,2)=i<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "ok"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if popup&#36;(x,i,1)="√ " then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popup&#36;(x,i,1)=""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;popup&#36;(x,i,1)="√ "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return "ok"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
next<br />
<br />
<br />
<br />
return "error"<br />
end sub<br />
<br />
////////////////////////////////////////////////////////<br />
<br />
export sub popupdisplay&#36;(x,y,popup)<br />
local i, MenuItems&#36;<br />
MenuItems&#36;=""<br />
if popup(popup,1)=1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=3 to 10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if popup&#36;(popup,i,0)&lt;&gt;"" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if popup(popup,2)=i&nbsp;&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItems&#36;=MenuItems&#36;+"√ "+popup&#36;(popup,i,0)+"|"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItems&#36;=MenuItems&#36;+"&nbsp;&nbsp;"+popup&#36;(popup,i,0)+"|"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;next<br />
endif&nbsp;&nbsp;&nbsp;&nbsp;<br />
if popup(popup,1)=0 then<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=3 to 10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if popup&#36;(popup,i,0)&lt;&gt;"" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItems&#36;=MenuItems&#36;+popup&#36;(popup,i,0)+"|"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;next<br />
endif&nbsp;&nbsp;&nbsp;&nbsp;<br />
if popup(popup,1)=3 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;for i=3 to 10<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if popup&#36;(popup,i,0)&lt;&gt;"" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuItems&#36;=MenuItems&#36;+popup&#36;(popup,i,1)+popup&#36;(popup,i,0)+"|"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;next<br />
endif<br />
<br />
MenuItems&#36;=left&#36;(MenuItems&#36;,len(MenuItems&#36;)-1)<br />
Selected&#36; = POPUPMENU x,y, MenuItems&#36;, popup&#36;(popup,2,0)<br />
return Selected&#36;<br />
end sub<br />
////////////////////////////////////////////////////////<br />
<br />
export sub getselected&#36;(x)<br />
return popup&#36;(x,popup(x,2),0)<br />
end sub</code></div></div><br />
name the library file popup.yab and place it in ~/config/settings/yab to use the code.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Tip: Newline stripper]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=56</link>
			<pubDate>Fri, 18 Mar 2016 11:53:58 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=2">clasqm</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=56</guid>
			<description><![CDATA[The system&#36; command is a useful one: it lets you use any Haiku command that you can issue in terminal and returns the output into a string variable. Haiku is quite robust about these variables: once I accidentally requested a megabyte of data to be fed into a&#36; and yab didn't even blink.<br />
<br />
But have you noticed that when you issue a command in terminal, it gives you the result and then opens up a new prompt for you? That is because almost every  bash command is terminated by a <span style="font-style: italic;" class="mycode_i">newline</span> character. This is an invisible code that tells the system "I am finished, you can start a new command prompt now"<br />
<br />
So if you issue the command <br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>tempdir&#36; = system&#36;("finddir B_COMMON_TEMP_DIRECTORY")</code></div></div><br />
You may think that the result is <br />
<span style="font-style: italic;" class="mycode_i">/boot/system/cache/tmp</span><br />
<br />
But it is not. It is <br />
<br />
<span style="font-style: italic;" class="mycode_i">/boot/system/cache/tmp&lt;newline&gt;</span><br />
<br />
Sometimes this will not matter. But sometimes it does. Suppose you now want to specify your temporary file. you use basic string concatenation, like this<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>tempfile&#36; = tempdir&#36; + "/my_temp_file"</code></div></div><br />
the result you want is <br />
<br />
<span style="font-style: italic;" class="mycode_i">/boot/system/cache/tmp/my_temp_file</span><br />
<br />
but what you get is <br />
<br />
<span style="font-style: italic;" class="mycode_i">/boot/system/cache/tmp<br />
/my_temp_file</span><br />
<br />
How is your program supposed to make sense of that?<br />
<br />
Luckily, getting rid of that pesky newline is very easy. There are probably other ways, but I use this:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>tempdir&#36; = system&#36;("finddir B_COMMON_TEMP_DIRECTORY") <br />
tempdir&#36; = left&#36;(tempdir&#36;, len(tempdir&#36;)-1) //strip off trailing newline</code></div></div><br />
We take the result of the system&#36; command,  then take the part to the left of the newline character and feed it back into the variable.<br />
<br />
You could combine these lines into one long command, but code readability would be bad.<br />
<br />
But wait! What if the system&#36; command you are using is one of those rare ones that do not end their result with a newline? No problem.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>tempdir&#36; = system&#36;("finddir B_COMMON_TEMP_DIRECTORY") <br />
if instr(tempdir&#36;, "&#92;n", len(tempdir&#36;)) &lt;&gt; 0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;tempdir&#36; = left&#36;(tempdir&#36;, len(tempdir&#36;)-1) //strip off trailing newline<br />
endif</code></div></div>]]></description>
			<content:encoded><![CDATA[The system&#36; command is a useful one: it lets you use any Haiku command that you can issue in terminal and returns the output into a string variable. Haiku is quite robust about these variables: once I accidentally requested a megabyte of data to be fed into a&#36; and yab didn't even blink.<br />
<br />
But have you noticed that when you issue a command in terminal, it gives you the result and then opens up a new prompt for you? That is because almost every  bash command is terminated by a <span style="font-style: italic;" class="mycode_i">newline</span> character. This is an invisible code that tells the system "I am finished, you can start a new command prompt now"<br />
<br />
So if you issue the command <br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>tempdir&#36; = system&#36;("finddir B_COMMON_TEMP_DIRECTORY")</code></div></div><br />
You may think that the result is <br />
<span style="font-style: italic;" class="mycode_i">/boot/system/cache/tmp</span><br />
<br />
But it is not. It is <br />
<br />
<span style="font-style: italic;" class="mycode_i">/boot/system/cache/tmp&lt;newline&gt;</span><br />
<br />
Sometimes this will not matter. But sometimes it does. Suppose you now want to specify your temporary file. you use basic string concatenation, like this<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>tempfile&#36; = tempdir&#36; + "/my_temp_file"</code></div></div><br />
the result you want is <br />
<br />
<span style="font-style: italic;" class="mycode_i">/boot/system/cache/tmp/my_temp_file</span><br />
<br />
but what you get is <br />
<br />
<span style="font-style: italic;" class="mycode_i">/boot/system/cache/tmp<br />
/my_temp_file</span><br />
<br />
How is your program supposed to make sense of that?<br />
<br />
Luckily, getting rid of that pesky newline is very easy. There are probably other ways, but I use this:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>tempdir&#36; = system&#36;("finddir B_COMMON_TEMP_DIRECTORY") <br />
tempdir&#36; = left&#36;(tempdir&#36;, len(tempdir&#36;)-1) //strip off trailing newline</code></div></div><br />
We take the result of the system&#36; command,  then take the part to the left of the newline character and feed it back into the variable.<br />
<br />
You could combine these lines into one long command, but code readability would be bad.<br />
<br />
But wait! What if the system&#36; command you are using is one of those rare ones that do not end their result with a newline? No problem.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>tempdir&#36; = system&#36;("finddir B_COMMON_TEMP_DIRECTORY") <br />
if instr(tempdir&#36;, "&#92;n", len(tempdir&#36;)) &lt;&gt; 0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;tempdir&#36; = left&#36;(tempdir&#36;, len(tempdir&#36;)-1) //strip off trailing newline<br />
endif</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[example program - FuzzyTime]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=47</link>
			<pubDate>Tue, 29 Dec 2015 21:42:15 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=2">clasqm</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=47</guid>
			<description><![CDATA[This little desktop applet will appear on my repo soon with source included. I post it here just to give people an example of yab in action. It uses a 3rd-party python script called fuzzy_time.py, which you can get from SourceForge, and wraps a minimalist GUI around it.<br />
<br />
<img src="http://clasquin-johnson.co.za/michel/haiku/_Media/fuzzytime_152.png" loading="lazy"  alt="[Image: fuzzytime_152.png]" class="mycode_img" /><br />
<br />
It took me about two to three hours to write, and I'm sure that shows in the quality of the code <img src="https://yab.orgfree.com/forum/images/smilies/tongue.gif" alt="Tongue" title="Tongue" class="smilie smilie_5" /> There are too manyglobal variables, the capitalization of variables is inconsistent ... works, though.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!/bin/env yab<br />
################################<br />
############# Prologue #############<br />
################################<br />
<br />
//Yabadabbadoo notification<br />
########DO NOT RENAME THIS FILE!########<br />
//Yabadabbadoo needs it to function.<br />
 <br />
//ProgramName&#36; = "FuzzyTime"<br />
//AuthorName&#36; = "Michel Clasquin-Johnson &lt;clasqm@gmail.com&gt;"<br />
//ProgramVersion&#36; = "V0.1"<br />
//ProgramBriefDescription&#36; = "Displays the date and time in &#92;"fuzzy&#92;" format."<br />
//ProgramLicense&#36; = "Public Domain"<br />
//ProgramAcknowledgements&#36; ="With thanks to Chris Tsai for fuzzy_time.py"<br />
 <br />
//*************************<br />
//*****Global Variables****<br />
//*************************<br />
 <br />
## Technically, yab does not require you to declare global variables,<br />
##It just is a really, really good idea to do it anyway.<br />
// set DEBUG = 1 to print out all messages on the console<br />
DEBUG = 0<br />
//change this to DEBUG = 0 when you are ready to bind the program for distribution<br />
 <br />
//see if a settings file exist. If so, read positions<br />
open #1,"/boot/home/config/settings/FuzzyTime.settings", "a": close #1 //create the file if it does not exist<br />
open "/boot/home/config/settings/FuzzyTime.settings" for reading as #1<br />
line input #1 across<br />
line input #1 updown<br />
close #1<br />
if across = 0 or updown = 0 then //ie if the settings file was empty<br />
&nbsp;&nbsp;&nbsp;&nbsp;across = 100<br />
&nbsp;&nbsp;&nbsp;&nbsp;updown = 100<br />
endif<br />
xwidth = 150<br />
yheight = 75<br />
acrossend = across + xwidth<br />
updownend = updown + yheight<br />
moving=0<br />
DefaultInterval=60<br />
<br />
&nbsp;&nbsp;<br />
##########################<br />
######Preliminary Commands#####<br />
##########################<br />
<br />
## Commands to run before the Main Loop come here.<br />
## e.g. setting up a window with a menu.<br />
<br />
IntervalStart=GetTiming() <br />
OpenWindow()<br />
 <br />
#######End of Prologue#######<br />
<br />
<br />
//Yabadabbadoo notification<br />
########DO NOT RENAME THIS FILE!########<br />
//Yabadabbadoo needs it to function.<br />
<br />
//Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;nCommands = token(message&#36;, msg&#36;(), "|")<br />
&nbsp;&nbsp;&nbsp;&nbsp;for everyCommand = 1 to nCommands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG and msg&#36;(everyCommand)&lt;&gt;"") print msg&#36;(everyCommand)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(msg&#36;(everyCommand))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "_QuitRequested":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:_QuitRequested":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ask2Leave()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:Help:About":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alert ProgramName&#36; + " " + ProgramVersion&#36; + "&#92;n" + "by " + AuthorName&#36; +"&#92;n&#92;n" + ProgramBriefDescription&#36; + "&#92;n" + ProgramLicense&#36; + "&#92;n" + ProgramAcknowledgements&#36;, "OK", "none"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
&nbsp;&nbsp;&nbsp;&nbsp;next everyCommand<br />
&nbsp;&nbsp;&nbsp;&nbsp;CheckMouse()<br />
&nbsp;&nbsp;&nbsp;&nbsp;if GetTiming() - IntervalStart &gt;DefaultInterval then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintTime()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntervalStart = GetTiming()<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
wend<br />
<br />
sub Ask2Leave()<br />
&nbsp;&nbsp;&nbsp;&nbsp;local getout<br />
&nbsp;&nbsp;&nbsp;&nbsp;getout= Alert "Do you want to Quit FuzzyTime?","Quit","Cancel","","Warning"<br />
&nbsp;&nbsp;&nbsp;&nbsp;switch getout<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;across=Window Get "MainWindow", "Position-X"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updown=Window Get "MainWindow", "Position-Y"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;open "/boot/home/config/settings/FuzzyTime.settings" for writing as #1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print #1 across<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print #1 updown<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close #1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
end sub<br />
<br />
sub CheckMouse()<br />
local mouse&#36;, num, w&#36;(5)<br />
&nbsp;&nbsp;&nbsp;&nbsp;mouse&#36; = MOUSE MESSAGE&#36; ("MainWindow")<br />
&nbsp;&nbsp;&nbsp;&nbsp;num=token(mouse&#36;, w&#36;(), ":")<br />
&nbsp;&nbsp;&nbsp;&nbsp;if w&#36;(5)&lt;&gt;"0" Ask2Leave()<br />
&nbsp;&nbsp;&nbsp;&nbsp;if w&#36;(3)&lt;&gt;"0" MoveWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;wait 0.1 // avoid flickering<br />
end sub<br />
<br />
sub CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Close down the main window<br />
&nbsp;&nbsp;&nbsp;&nbsp;window close "MainWindow"<br />
end sub<br />
<br />
sub GetTiming()<br />
&nbsp;&nbsp;&nbsp;&nbsp;local num, w&#36;(4)<br />
&nbsp;&nbsp;&nbsp;&nbsp;num=token(time&#36;,w&#36;(),"-")<br />
&nbsp;&nbsp;&nbsp;&nbsp;return val(w&#36;(4))<br />
end sub<br />
<br />
sub MoveWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;if moving= 0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "look", "bordered"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moving = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;if moving = 1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "look", "floating"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moving = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif <br />
end sub<br />
<br />
sub OpenWindow()<br />
window open across,updown to acrossend, updownend, "MainWindow", "FuzzyTime"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "look", "bordered"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "Flags", "Accept-First-Click"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "Flags", "not-resizable"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "Flags", "not-zoomable"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Window set "MainWindow", "Workspace", "All"<br />
&nbsp;&nbsp;&nbsp;&nbsp;redc=255: greenc=250: bluec=170<br />
&nbsp;&nbsp;&nbsp;&nbsp;for f = yheight/2 to 0 step -1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor", redc, greenc, bluec, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw line 0, f to xwidth,f, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greenc=greenc-1: bluec = bluec -4<br />
&nbsp;&nbsp;&nbsp;&nbsp;next f<br />
&nbsp;&nbsp;&nbsp;&nbsp;redc=255: greenc=250: bluec=170<br />
&nbsp;&nbsp;&nbsp;&nbsp;for f = yheight/2 to yheight<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor", redc, greenc, bluec, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw line 0, f to xwidth,f, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greenc=greenc-1: bluec = bluec -4<br />
&nbsp;&nbsp;&nbsp;&nbsp;next f<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor", 0,0,0, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Tooltip "MainWindow", "Left-click to move,&#92;nor right-click to Quit."<br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit 5, 5 to xwidth -5, yheight -5, "TimeBox", 0, "MainWindow" <br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit set "TimeBox", "wordwrap", true<br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit set "TimeBox", "editable", false<br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit color "TimeBox", "bgcolor", 255,250,170<br />
&nbsp;&nbsp;&nbsp;&nbsp;Tooltip "TimeBox", "Left-click BORDER to move,&#92;nor right-click BORDER to Quit."<br />
&nbsp;&nbsp;&nbsp;&nbsp;PrintTime()<br />
end sub<br />
<br />
sub PrintTime()<br />
&nbsp;&nbsp;&nbsp;&nbsp;local the_time&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;the_time&#36; = system&#36;("fuzzy_time.py") <br />
&nbsp;&nbsp;&nbsp;&nbsp;the_time&#36; = left&#36;(the_time&#36;,len(the_time&#36;)-1) //strip off trailing newline<br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit clear "TimeBox"<br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit add "TimeBox", the_time&#36;<br />
end sub<br />
<br />
########################################<br />
###DATA statements, if any, come here###<br />
########################################</code></div></div><hr class="mycode_hr" />
Ouch! that case statement "case "MainWindow:Help:About":" should not be in there.]]></description>
			<content:encoded><![CDATA[This little desktop applet will appear on my repo soon with source included. I post it here just to give people an example of yab in action. It uses a 3rd-party python script called fuzzy_time.py, which you can get from SourceForge, and wraps a minimalist GUI around it.<br />
<br />
<img src="http://clasquin-johnson.co.za/michel/haiku/_Media/fuzzytime_152.png" loading="lazy"  alt="[Image: fuzzytime_152.png]" class="mycode_img" /><br />
<br />
It took me about two to three hours to write, and I'm sure that shows in the quality of the code <img src="https://yab.orgfree.com/forum/images/smilies/tongue.gif" alt="Tongue" title="Tongue" class="smilie smilie_5" /> There are too manyglobal variables, the capitalization of variables is inconsistent ... works, though.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!/bin/env yab<br />
################################<br />
############# Prologue #############<br />
################################<br />
<br />
//Yabadabbadoo notification<br />
########DO NOT RENAME THIS FILE!########<br />
//Yabadabbadoo needs it to function.<br />
 <br />
//ProgramName&#36; = "FuzzyTime"<br />
//AuthorName&#36; = "Michel Clasquin-Johnson &lt;clasqm@gmail.com&gt;"<br />
//ProgramVersion&#36; = "V0.1"<br />
//ProgramBriefDescription&#36; = "Displays the date and time in &#92;"fuzzy&#92;" format."<br />
//ProgramLicense&#36; = "Public Domain"<br />
//ProgramAcknowledgements&#36; ="With thanks to Chris Tsai for fuzzy_time.py"<br />
 <br />
//*************************<br />
//*****Global Variables****<br />
//*************************<br />
 <br />
## Technically, yab does not require you to declare global variables,<br />
##It just is a really, really good idea to do it anyway.<br />
// set DEBUG = 1 to print out all messages on the console<br />
DEBUG = 0<br />
//change this to DEBUG = 0 when you are ready to bind the program for distribution<br />
 <br />
//see if a settings file exist. If so, read positions<br />
open #1,"/boot/home/config/settings/FuzzyTime.settings", "a": close #1 //create the file if it does not exist<br />
open "/boot/home/config/settings/FuzzyTime.settings" for reading as #1<br />
line input #1 across<br />
line input #1 updown<br />
close #1<br />
if across = 0 or updown = 0 then //ie if the settings file was empty<br />
&nbsp;&nbsp;&nbsp;&nbsp;across = 100<br />
&nbsp;&nbsp;&nbsp;&nbsp;updown = 100<br />
endif<br />
xwidth = 150<br />
yheight = 75<br />
acrossend = across + xwidth<br />
updownend = updown + yheight<br />
moving=0<br />
DefaultInterval=60<br />
<br />
&nbsp;&nbsp;<br />
##########################<br />
######Preliminary Commands#####<br />
##########################<br />
<br />
## Commands to run before the Main Loop come here.<br />
## e.g. setting up a window with a menu.<br />
<br />
IntervalStart=GetTiming() <br />
OpenWindow()<br />
 <br />
#######End of Prologue#######<br />
<br />
<br />
//Yabadabbadoo notification<br />
########DO NOT RENAME THIS FILE!########<br />
//Yabadabbadoo needs it to function.<br />
<br />
//Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;nCommands = token(message&#36;, msg&#36;(), "|")<br />
&nbsp;&nbsp;&nbsp;&nbsp;for everyCommand = 1 to nCommands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG and msg&#36;(everyCommand)&lt;&gt;"") print msg&#36;(everyCommand)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(msg&#36;(everyCommand))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "_QuitRequested":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:_QuitRequested":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ask2Leave()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:Help:About":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alert ProgramName&#36; + " " + ProgramVersion&#36; + "&#92;n" + "by " + AuthorName&#36; +"&#92;n&#92;n" + ProgramBriefDescription&#36; + "&#92;n" + ProgramLicense&#36; + "&#92;n" + ProgramAcknowledgements&#36;, "OK", "none"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
&nbsp;&nbsp;&nbsp;&nbsp;next everyCommand<br />
&nbsp;&nbsp;&nbsp;&nbsp;CheckMouse()<br />
&nbsp;&nbsp;&nbsp;&nbsp;if GetTiming() - IntervalStart &gt;DefaultInterval then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintTime()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntervalStart = GetTiming()<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
wend<br />
<br />
sub Ask2Leave()<br />
&nbsp;&nbsp;&nbsp;&nbsp;local getout<br />
&nbsp;&nbsp;&nbsp;&nbsp;getout= Alert "Do you want to Quit FuzzyTime?","Quit","Cancel","","Warning"<br />
&nbsp;&nbsp;&nbsp;&nbsp;switch getout<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;across=Window Get "MainWindow", "Position-X"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;updown=Window Get "MainWindow", "Position-Y"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;open "/boot/home/config/settings/FuzzyTime.settings" for writing as #1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print #1 across<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print #1 updown<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close #1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
end sub<br />
<br />
sub CheckMouse()<br />
local mouse&#36;, num, w&#36;(5)<br />
&nbsp;&nbsp;&nbsp;&nbsp;mouse&#36; = MOUSE MESSAGE&#36; ("MainWindow")<br />
&nbsp;&nbsp;&nbsp;&nbsp;num=token(mouse&#36;, w&#36;(), ":")<br />
&nbsp;&nbsp;&nbsp;&nbsp;if w&#36;(5)&lt;&gt;"0" Ask2Leave()<br />
&nbsp;&nbsp;&nbsp;&nbsp;if w&#36;(3)&lt;&gt;"0" MoveWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;wait 0.1 // avoid flickering<br />
end sub<br />
<br />
sub CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Close down the main window<br />
&nbsp;&nbsp;&nbsp;&nbsp;window close "MainWindow"<br />
end sub<br />
<br />
sub GetTiming()<br />
&nbsp;&nbsp;&nbsp;&nbsp;local num, w&#36;(4)<br />
&nbsp;&nbsp;&nbsp;&nbsp;num=token(time&#36;,w&#36;(),"-")<br />
&nbsp;&nbsp;&nbsp;&nbsp;return val(w&#36;(4))<br />
end sub<br />
<br />
sub MoveWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;if moving= 0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "look", "bordered"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moving = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;if moving = 1 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "look", "floating"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moving = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif <br />
end sub<br />
<br />
sub OpenWindow()<br />
window open across,updown to acrossend, updownend, "MainWindow", "FuzzyTime"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "look", "bordered"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "Flags", "Accept-First-Click"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "Flags", "not-resizable"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "Flags", "not-zoomable"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Window set "MainWindow", "Workspace", "All"<br />
&nbsp;&nbsp;&nbsp;&nbsp;redc=255: greenc=250: bluec=170<br />
&nbsp;&nbsp;&nbsp;&nbsp;for f = yheight/2 to 0 step -1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor", redc, greenc, bluec, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw line 0, f to xwidth,f, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greenc=greenc-1: bluec = bluec -4<br />
&nbsp;&nbsp;&nbsp;&nbsp;next f<br />
&nbsp;&nbsp;&nbsp;&nbsp;redc=255: greenc=250: bluec=170<br />
&nbsp;&nbsp;&nbsp;&nbsp;for f = yheight/2 to yheight<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor", redc, greenc, bluec, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;draw line 0, f to xwidth,f, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;greenc=greenc-1: bluec = bluec -4<br />
&nbsp;&nbsp;&nbsp;&nbsp;next f<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw set "highcolor", 0,0,0, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Tooltip "MainWindow", "Left-click to move,&#92;nor right-click to Quit."<br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit 5, 5 to xwidth -5, yheight -5, "TimeBox", 0, "MainWindow" <br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit set "TimeBox", "wordwrap", true<br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit set "TimeBox", "editable", false<br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit color "TimeBox", "bgcolor", 255,250,170<br />
&nbsp;&nbsp;&nbsp;&nbsp;Tooltip "TimeBox", "Left-click BORDER to move,&#92;nor right-click BORDER to Quit."<br />
&nbsp;&nbsp;&nbsp;&nbsp;PrintTime()<br />
end sub<br />
<br />
sub PrintTime()<br />
&nbsp;&nbsp;&nbsp;&nbsp;local the_time&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;the_time&#36; = system&#36;("fuzzy_time.py") <br />
&nbsp;&nbsp;&nbsp;&nbsp;the_time&#36; = left&#36;(the_time&#36;,len(the_time&#36;)-1) //strip off trailing newline<br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit clear "TimeBox"<br />
&nbsp;&nbsp;&nbsp;&nbsp;textedit add "TimeBox", the_time&#36;<br />
end sub<br />
<br />
########################################<br />
###DATA statements, if any, come here###<br />
########################################</code></div></div><hr class="mycode_hr" />
Ouch! that case statement "case "MainWindow:Help:About":" should not be in there.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Example program - TinyTim]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=34</link>
			<pubDate>Mon, 24 Aug 2015 19:01:07 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=2">clasqm</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=34</guid>
			<description><![CDATA[It turns out that you can access tinyurl.com with a single line of bash script. So of course I had to write a 150-line front-end for it.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
############# Prologue #############<br />
<br />
##Fill in these fields with your own particulars.<br />
##The variables will be used in the About Box<br />
 <br />
ProgramName&#36; = "TinyTim"<br />
AuthorName&#36; = "Michel Clasquin-Johnson &lt;clasqm@gmail.com&gt;"<br />
ProgramVersion&#36; = "V0.1"<br />
ProgramBriefDescription&#36; = "TinyTim allows you to send a long URL to tinyurl.com and copy the resulting short URL to the clipboard."<br />
ProgramLicense&#36; = "Public Domain"<br />
 <br />
//*****Global Variables****<br />
 <br />
## Technically, yab does not require you to declare global variables,<br />
##It just is a really, really good idea to do it anyway.<br />
// set DEBUG = 1 to print out all messages on the console<br />
DEBUG = 0<br />
//change this to DEBUG = 0 when you are ready to bind the program for distribution<br />
 <br />
LongURL&#36;=""<br />
ShortURL&#36;="Shortened URL will appear here after conversion"<br />
 <br />
######Preliminary Commands#####<br />
<br />
## Commands to run before the Main Loop come here.<br />
## e.g. setting up a window with a menu.<br />
 <br />
OpenWindow()<br />
 <br />
#######End of Prologue#######<br />
<br />
//Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;nCommands = token(message&#36;, msg&#36;(), "|")<br />
&nbsp;&nbsp;&nbsp;&nbsp;for everyCommand = 1 to nCommands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG and msg&#36;(everyCommand)&lt;&gt;"") print msg&#36;(everyCommand)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(msg&#36;(everyCommand))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "_QuitRequested":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:_QuitRequested":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leavingLoop = true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "aboutButton"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alert ProgramName&#36; + " " + ProgramVersion&#36; + "&#92;n" + "by " + AuthorName&#36; +"&#92;n&#92;n" + ProgramBriefDescription&#36; + "&#92;n&#92;n" + ProgramLicense&#36;, "OK", "none"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "tinyurlButton":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Launchsurl&#36;()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "copyButton":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copy2Clipboard()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
&nbsp;&nbsp;&nbsp;&nbsp;next everyCommand<br />
wend<br />
<br />
CloseWindow()<br />
<br />
end<br />
<br />
sub CheckLongURL()<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;LongURL&#36; = "" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alert "Please enter a long URL first", "OK", "warning"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;end if<br />
&nbsp;&nbsp;&nbsp;&nbsp;If (left&#36;(LongURL&#36;, 4)&lt;&gt;"www.") and (left&#36;(LongURL&#36;, 5) &lt;&gt; "http:") then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert "Is this a valid URL? Please start your URL with www or http. URLs are case sensitive and with no tabs, spaces or trailing lines, please", "OK", "warning"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;if instr(LongURL&#36;, "&#92;n") &lt;&gt; 0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert "There is an open line or more than one line in your long URL (possibly at the end, did you press ENTER?) Please remove it.", "OK", "warning"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 1<br />
end sub<br />
<br />
sub CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Close down the main window<br />
&nbsp;&nbsp;&nbsp;&nbsp;window close "MainWindow"<br />
end sub<br />
<br />
sub Copy2Clipboard()<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ShortURL&#36; = "" return<br />
&nbsp;&nbsp;&nbsp;&nbsp;clipboard copy ShortURL&#36;<br />
end sub<br />
<br />
sub DisplayShortURL()<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw flush "ShortURLView"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Draw text 0,20, ShortURL&#36;, "ShortURLView"<br />
end sub<br />
<br />
sub ExamineClipboard()<br />
&nbsp;&nbsp;&nbsp;&nbsp;//this should only happen at program launch<br />
&nbsp;&nbsp;&nbsp;&nbsp;//if you wish to add an "insert from clipboard" function later<br />
&nbsp;&nbsp;&nbsp;&nbsp;//it will require a TEXTEDIT CLEAR. But rightclick works so why bother?<br />
&nbsp;&nbsp;&nbsp;&nbsp;local clipcontent&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;clipcontent&#36; = clipboard paste&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (left&#36;(clipcontent&#36;, 4) = "www.") or (left&#36;(clipcontent&#36;, 5) = "http:") then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;textedit add "URLField", clipcontent&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LongURL&#36; = clipcontent&#36; // not strictly necessary, but better to play safe&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
end sub<br />
<br />
sub Launchsurl&#36;()<br />
&nbsp;&nbsp;&nbsp;&nbsp;local dothis&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;LongURL&#36; = textedit get&#36; "URLField"<br />
&nbsp;&nbsp;&nbsp;&nbsp;if CheckLongURL()= 0 return<br />
&nbsp;&nbsp;&nbsp;&nbsp;UIOnOff(0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;dothis&#36; = "curl 'http://tinyurl.com/api-create.php?url=" + LongURL&#36; +"'"<br />
&nbsp;&nbsp;&nbsp;&nbsp;//print dothis&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ShortURL&#36; = system&#36;(dothis&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;DisplayShortURL()<br />
&nbsp;&nbsp;&nbsp;&nbsp;UIOnOff(1)<br />
end sub<br />
<br />
sub OpenWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Setup the main window here<br />
&nbsp;&nbsp;&nbsp;&nbsp;window open 100,100 to 500,280, "MainWindow", ProgramName&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "look", "floating"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "feel", "modal-app"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "flags","not-zoomable"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "flags","not-resizable"<br />
&nbsp;&nbsp;&nbsp;&nbsp;text 10,25 to 49,40, "URLlabel", "URL:", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;text 10,68 to 52,88, "Submitlabel", "Submit", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;text 10,105 to 59,125, "Resultslabel", "Result:", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw rect&nbsp;&nbsp;70,10 to 390,50, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Textedit 71,11 to 389,49, "URLField", 0,"MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Button 70, 60 to 390, 90, "tinyurlButton", "Submit this URL to tinyurl.com", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;View 70, 100 to 390, 130, "ShortURLView", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Button 70, 140 to 280, 170, "copyButton", "Copy to clipboard", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;option set "copyButton", "enabled", 0 //don't need this until we have a short URL<br />
&nbsp;&nbsp;&nbsp;&nbsp;Button 290, 140 to 390, 170, "aboutButton", "About", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DisplayShortURL()<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ExamineClipboard()<br />
end sub<br />
<br />
sub UIOnOff(state)<br />
&nbsp;&nbsp;&nbsp;&nbsp;//state must be 1 or 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;option set "tinyurlButton", "enabled", state <br />
&nbsp;&nbsp;&nbsp;&nbsp;option set "copyButton", "enabled", state <br />
&nbsp;&nbsp;&nbsp;&nbsp;option set "aboutButton", "enabled", state <br />
end sub</code></div></div><br />
It comes out looking like this:<br />
 <img src="http://clasquin-johnson.co.za/michel/haiku/_Media/tinytim_ss_med.png" loading="lazy"  alt="[Image: tinytim_ss_med.png]" class="mycode_img" /><br />
<br />
If there's already a URL in your clipboard when you launch the program, it will be detected and pasted in for you.]]></description>
			<content:encoded><![CDATA[It turns out that you can access tinyurl.com with a single line of bash script. So of course I had to write a 150-line front-end for it.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#!yab<br />
############# Prologue #############<br />
<br />
##Fill in these fields with your own particulars.<br />
##The variables will be used in the About Box<br />
 <br />
ProgramName&#36; = "TinyTim"<br />
AuthorName&#36; = "Michel Clasquin-Johnson &lt;clasqm@gmail.com&gt;"<br />
ProgramVersion&#36; = "V0.1"<br />
ProgramBriefDescription&#36; = "TinyTim allows you to send a long URL to tinyurl.com and copy the resulting short URL to the clipboard."<br />
ProgramLicense&#36; = "Public Domain"<br />
 <br />
//*****Global Variables****<br />
 <br />
## Technically, yab does not require you to declare global variables,<br />
##It just is a really, really good idea to do it anyway.<br />
// set DEBUG = 1 to print out all messages on the console<br />
DEBUG = 0<br />
//change this to DEBUG = 0 when you are ready to bind the program for distribution<br />
 <br />
LongURL&#36;=""<br />
ShortURL&#36;="Shortened URL will appear here after conversion"<br />
 <br />
######Preliminary Commands#####<br />
<br />
## Commands to run before the Main Loop come here.<br />
## e.g. setting up a window with a menu.<br />
 <br />
OpenWindow()<br />
 <br />
#######End of Prologue#######<br />
<br />
//Main Message Loop<br />
dim msg&#36;(1)<br />
while(not leavingLoop)<br />
&nbsp;&nbsp;&nbsp;&nbsp;nCommands = token(message&#36;, msg&#36;(), "|")<br />
&nbsp;&nbsp;&nbsp;&nbsp;for everyCommand = 1 to nCommands<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(DEBUG and msg&#36;(everyCommand)&lt;&gt;"") print msg&#36;(everyCommand)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(msg&#36;(everyCommand))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "_QuitRequested":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MainWindow:_QuitRequested":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leavingLoop = true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "aboutButton"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alert ProgramName&#36; + " " + ProgramVersion&#36; + "&#92;n" + "by " + AuthorName&#36; +"&#92;n&#92;n" + ProgramBriefDescription&#36; + "&#92;n&#92;n" + ProgramLicense&#36;, "OK", "none"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "tinyurlButton":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Launchsurl&#36;()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "copyButton":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copy2Clipboard()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end switch<br />
&nbsp;&nbsp;&nbsp;&nbsp;next everyCommand<br />
wend<br />
<br />
CloseWindow()<br />
<br />
end<br />
<br />
sub CheckLongURL()<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&nbsp;LongURL&#36; = "" then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Alert "Please enter a long URL first", "OK", "warning"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;end if<br />
&nbsp;&nbsp;&nbsp;&nbsp;If (left&#36;(LongURL&#36;, 4)&lt;&gt;"www.") and (left&#36;(LongURL&#36;, 5) &lt;&gt; "http:") then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert "Is this a valid URL? Please start your URL with www or http. URLs are case sensitive and with no tabs, spaces or trailing lines, please", "OK", "warning"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;if instr(LongURL&#36;, "&#92;n") &lt;&gt; 0 then<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert "There is an open line or more than one line in your long URL (possibly at the end, did you press ENTER?) Please remove it.", "OK", "warning"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
&nbsp;&nbsp;&nbsp;&nbsp;return 1<br />
end sub<br />
<br />
sub CloseWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Close down the main window<br />
&nbsp;&nbsp;&nbsp;&nbsp;window close "MainWindow"<br />
end sub<br />
<br />
sub Copy2Clipboard()<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ShortURL&#36; = "" return<br />
&nbsp;&nbsp;&nbsp;&nbsp;clipboard copy ShortURL&#36;<br />
end sub<br />
<br />
sub DisplayShortURL()<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw flush "ShortURLView"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Draw text 0,20, ShortURL&#36;, "ShortURLView"<br />
end sub<br />
<br />
sub ExamineClipboard()<br />
&nbsp;&nbsp;&nbsp;&nbsp;//this should only happen at program launch<br />
&nbsp;&nbsp;&nbsp;&nbsp;//if you wish to add an "insert from clipboard" function later<br />
&nbsp;&nbsp;&nbsp;&nbsp;//it will require a TEXTEDIT CLEAR. But rightclick works so why bother?<br />
&nbsp;&nbsp;&nbsp;&nbsp;local clipcontent&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;clipcontent&#36; = clipboard paste&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (left&#36;(clipcontent&#36;, 4) = "www.") or (left&#36;(clipcontent&#36;, 5) = "http:") then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;textedit add "URLField", clipcontent&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LongURL&#36; = clipcontent&#36; // not strictly necessary, but better to play safe&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;endif<br />
end sub<br />
<br />
sub Launchsurl&#36;()<br />
&nbsp;&nbsp;&nbsp;&nbsp;local dothis&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;LongURL&#36; = textedit get&#36; "URLField"<br />
&nbsp;&nbsp;&nbsp;&nbsp;if CheckLongURL()= 0 return<br />
&nbsp;&nbsp;&nbsp;&nbsp;UIOnOff(0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;dothis&#36; = "curl 'http://tinyurl.com/api-create.php?url=" + LongURL&#36; +"'"<br />
&nbsp;&nbsp;&nbsp;&nbsp;//print dothis&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ShortURL&#36; = system&#36;(dothis&#36;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;DisplayShortURL()<br />
&nbsp;&nbsp;&nbsp;&nbsp;UIOnOff(1)<br />
end sub<br />
<br />
sub OpenWindow()<br />
&nbsp;&nbsp;&nbsp;&nbsp;//Setup the main window here<br />
&nbsp;&nbsp;&nbsp;&nbsp;window open 100,100 to 500,280, "MainWindow", ProgramName&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "look", "floating"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "feel", "modal-app"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "flags","not-zoomable"<br />
&nbsp;&nbsp;&nbsp;&nbsp;window set "MainWindow", "flags","not-resizable"<br />
&nbsp;&nbsp;&nbsp;&nbsp;text 10,25 to 49,40, "URLlabel", "URL:", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;text 10,68 to 52,88, "Submitlabel", "Submit", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;text 10,105 to 59,125, "Resultslabel", "Result:", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;draw rect&nbsp;&nbsp;70,10 to 390,50, "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Textedit 71,11 to 389,49, "URLField", 0,"MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Button 70, 60 to 390, 90, "tinyurlButton", "Submit this URL to tinyurl.com", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;View 70, 100 to 390, 130, "ShortURLView", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;Button 70, 140 to 280, 170, "copyButton", "Copy to clipboard", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;option set "copyButton", "enabled", 0 //don't need this until we have a short URL<br />
&nbsp;&nbsp;&nbsp;&nbsp;Button 290, 140 to 390, 170, "aboutButton", "About", "MainWindow"<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;DisplayShortURL()<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;ExamineClipboard()<br />
end sub<br />
<br />
sub UIOnOff(state)<br />
&nbsp;&nbsp;&nbsp;&nbsp;//state must be 1 or 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;option set "tinyurlButton", "enabled", state <br />
&nbsp;&nbsp;&nbsp;&nbsp;option set "copyButton", "enabled", state <br />
&nbsp;&nbsp;&nbsp;&nbsp;option set "aboutButton", "enabled", state <br />
end sub</code></div></div><br />
It comes out looking like this:<br />
 <img src="http://clasquin-johnson.co.za/michel/haiku/_Media/tinytim_ss_med.png" loading="lazy"  alt="[Image: tinytim_ss_med.png]" class="mycode_img" /><br />
<br />
If there's already a URL in your clipboard when you launch the program, it will be detected and pasted in for you.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[BeInput]]></title>
			<link>https://yab.orgfree.com/forum/showthread.php?tid=30</link>
			<pubDate>Wed, 05 Aug 2015 22:30:22 +0300</pubDate>
			<dc:creator><![CDATA[<a href="https://yab.orgfree.com/forum/member.php?action=profile&uid=2">clasqm</a>]]></dc:creator>
			<guid isPermaLink="false">https://yab.orgfree.com/forum/showthread.php?tid=30</guid>
			<description><![CDATA[Found this among a bunch of old downloads<br />
<br />
# BeInput 1.0 <br />
# Tanausu Gomez Garcia (_-Caleb-_)<br />
# tanausugomez@gmail.com<br />
<br />
BeInput is like a terminal's read command but in graphic mode. <br />
Util for Script Writers.<br />
<br />
Yab for haiku is still unstable.<br />
Sometimes the program crash on startup.<br />
<br />
Usage: 	BeInput User Label (Max 33 char. (yet))<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># BeInput 1.0 (C) <br />
# Tanausu Gomez Garcia (_-Caleb-_)<br />
# tanausugomez@gmail.com<br />
<br />
# Comando Peek para usar argumentos<br />
while (peek("argument"))<br />
<br />
perso&#36;=peek&#36;("argument")<br />
perso1&#36;=peek&#36;("argument")<br />
perso2&#36;=peek&#36;("argument")<br />
perso3&#36;=peek&#36;("argument")<br />
perso4&#36;=peek&#36;("argument")<br />
perso5&#36;=peek&#36;("argument")<br />
perso6&#36;=peek&#36;("argument")<br />
perso7&#36;=peek&#36;("argument")<br />
perso8&#36;=peek&#36;("argument")<br />
perso9&#36;=peek&#36;("argument")<br />
perso10&#36;=peek&#36;("argument")<br />
<br />
wend<br />
<br />
# La ventana del programa"<br />
window open 300,300 to 580,380, "View", "BeInput"<br />
view 0,10 to 550,450, "View1", "View"<br />
draw text 20,10, perso&#36; +" " + perso1&#36; +" " + perso2&#36; +" " + perso3&#36; +" " + perso4&#36; +" " + perso5&#36; +" " + perso6&#36; +" " + perso7&#36; +" " + perso8&#36; +" " + perso9&#36; +" " + perso10&#36;, "View1"<br />
button 80,40 to 200,60, "oki", "Ok", "View1"<br />
textcontrol 10,15 to 270,180, "Datos", "", "","View1"<br />
<br />
inloop = true<br />
while(inloop)<br />
msg&#36;=message&#36;<br />
switch msg&#36;<br />
<br />
 case "View:_QuitRequested|"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window close "View"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp; break<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; case "oki|"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Datos&#36;=textcontrol get&#36; "Datos"<br />
&nbsp;&nbsp;&nbsp;&nbsp;output&#36;=system&#36;("echo "+Datos&#36;+"")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print output&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window close "View"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp; break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
end switch<br />
wend<br />
end</code></div></div>]]></description>
			<content:encoded><![CDATA[Found this among a bunch of old downloads<br />
<br />
# BeInput 1.0 <br />
# Tanausu Gomez Garcia (_-Caleb-_)<br />
# tanausugomez@gmail.com<br />
<br />
BeInput is like a terminal's read command but in graphic mode. <br />
Util for Script Writers.<br />
<br />
Yab for haiku is still unstable.<br />
Sometimes the program crash on startup.<br />
<br />
Usage: 	BeInput User Label (Max 33 char. (yet))<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code># BeInput 1.0 (C) <br />
# Tanausu Gomez Garcia (_-Caleb-_)<br />
# tanausugomez@gmail.com<br />
<br />
# Comando Peek para usar argumentos<br />
while (peek("argument"))<br />
<br />
perso&#36;=peek&#36;("argument")<br />
perso1&#36;=peek&#36;("argument")<br />
perso2&#36;=peek&#36;("argument")<br />
perso3&#36;=peek&#36;("argument")<br />
perso4&#36;=peek&#36;("argument")<br />
perso5&#36;=peek&#36;("argument")<br />
perso6&#36;=peek&#36;("argument")<br />
perso7&#36;=peek&#36;("argument")<br />
perso8&#36;=peek&#36;("argument")<br />
perso9&#36;=peek&#36;("argument")<br />
perso10&#36;=peek&#36;("argument")<br />
<br />
wend<br />
<br />
# La ventana del programa"<br />
window open 300,300 to 580,380, "View", "BeInput"<br />
view 0,10 to 550,450, "View1", "View"<br />
draw text 20,10, perso&#36; +" " + perso1&#36; +" " + perso2&#36; +" " + perso3&#36; +" " + perso4&#36; +" " + perso5&#36; +" " + perso6&#36; +" " + perso7&#36; +" " + perso8&#36; +" " + perso9&#36; +" " + perso10&#36;, "View1"<br />
button 80,40 to 200,60, "oki", "Ok", "View1"<br />
textcontrol 10,15 to 270,180, "Datos", "", "","View1"<br />
<br />
inloop = true<br />
while(inloop)<br />
msg&#36;=message&#36;<br />
switch msg&#36;<br />
<br />
 case "View:_QuitRequested|"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window close "View"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp; break<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; case "oki|"<br />
&nbsp;&nbsp;&nbsp;&nbsp;Datos&#36;=textcontrol get&#36; "Datos"<br />
&nbsp;&nbsp;&nbsp;&nbsp;output&#36;=system&#36;("echo "+Datos&#36;+"")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print output&#36;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window close "View"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;&nbsp; break<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
end switch<br />
wend<br />
end</code></div></div>]]></content:encoded>
		</item>
	</channel>
</rss>