<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://bitchin100.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ronw</id>
	<title>Bitchin100 DocGarden - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://bitchin100.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ronw"/>
	<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Special:Contributions/Ronw"/>
	<updated>2026-04-29T19:01:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=BASIC_Efficiency_Tips&amp;diff=1732</id>
		<title>BASIC Efficiency Tips</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=BASIC_Efficiency_Tips&amp;diff=1732"/>
		<updated>2009-06-28T19:56:56Z</updated>

		<summary type="html">&lt;p&gt;Ronw: Regarding &amp;quot;Initialize all variables before you start the main body&amp;quot;, added the nuance regarding how to arrange the order in which variables are defined influences speed of interpretation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(From a Letter in Portable 100, Richard Horowitz):&lt;br /&gt;
&lt;br /&gt;
# All variables should be typed at the beginning of the program. Use DEFINT, DEFSNG, etc. Even string variables should be typed because the &amp;quot;$&amp;quot; used with each such variable takes a byte of storage.&lt;br /&gt;
# Use integers wherever possible, especially in counting loops. The time savings is dramatic. Integers are 2 1/2 times faster than the default of double precision.&lt;br /&gt;
# Eliminate the variable argument on the NEXT portion of For-Next loops. Here is a real kicker. Besides the savings of one byte of storage for each such occurrence, integers are 60 percent slower, reals are 50 percent slower, and double precision is 80 percent slower when you specify the variable than when you simply specify NEXT.&lt;br /&gt;
# Eliminate final quote marks on all literals that appear at the end of lines. A byte is saved for each.&lt;br /&gt;
# Use as many multiple statements per line as you can since for each line number eliminated, you have a net savings of four bytes (the five needed for each separate line less the one byte used for each &amp;quot;:&amp;quot;).&lt;br /&gt;
# Eliminate spaces. Your archival copy should have them for intelligibility, but your running copy will save one byte for each space that is removed.&lt;br /&gt;
# Put all initialization code at the end of your program and do a GOTO to a GOSUB. Little used routines at the end make for a dramatic improvement in speed since BASIC must search from the beginning for each line referenced.&lt;br /&gt;
# Put all time critical code at the beginning of the program for the same reason.&lt;br /&gt;
# Initialize all variables before you start the main body of the code. This creates a stable, linear table of variables that are accessed more rapidly.  Moreover, optimize the order in which you define the variables so that the most frequently referenced variable is the first to be defined, the second most frequently referenced variable is the second to be defined, and so on.  Thus when the BASIC interpreter encounters a previously defined variable, the time it consumes to find said variable among the linear table of variables will be comensurate with the importance (i.e., frequency of reference) of the variable and consequently BASIC program interpretation time is optimally short.&lt;br /&gt;
# Do not use the supposed short-cut of raising a number to the 0.5 power to save time over the SQR routine. Inaccuracies in the 11th and 12th decimal might tend to screw up any further calculations in which you might use the result.&lt;br /&gt;
# Assign literals used more than once in a program to a variable. Do this in your initialization code. Almost one byte per characters is saved for each such duplication eliminated.&lt;br /&gt;
# Use SPACE$(X) to assign X number of spaces rather than STRING$(X,32).&lt;br /&gt;
# Another surprise: use REM instead of &amp;quot;&#039;&amp;quot;. This saves two bytes per occurrence. Of course you should remove all REM statements of both types from your running copy.&lt;/div&gt;</summary>
		<author><name>Ronw</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=BASIC_Efficiency_Tips&amp;diff=1731</id>
		<title>BASIC Efficiency Tips</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=BASIC_Efficiency_Tips&amp;diff=1731"/>
		<updated>2009-06-28T19:41:32Z</updated>

		<summary type="html">&lt;p&gt;Ronw: Corrected &amp;quot;net savings&amp;quot; regarding consolidation by use of multiple statements per line versus the quantity of eliminated lines.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(From a Letter in Portable 100, Richard Horowitz):&lt;br /&gt;
&lt;br /&gt;
# All variables should be typed at the beginning of the program. Use DEFINT, DEFSNG, etc. Even string variables should be typed because the &amp;quot;$&amp;quot; used with each such variable takes a byte of storage.&lt;br /&gt;
# Use integers wherever possible, especially in counting loops. The time savings is dramatic. Integers are 2 1/2 times faster than the default of double precision.&lt;br /&gt;
# Eliminate the variable argument on the NEXT portion of For-Next loops. Here is a real kicker. Besides the savings of one byte of storage for each such occurrence, integers are 60 percent slower, reals are 50 percent slower, and double precision is 80 percent slower when you specify the variable than when you simply specify NEXT.&lt;br /&gt;
# Eliminate final quote marks on all literals that appear at the end of lines. A byte is saved for each.&lt;br /&gt;
# Use as many multiple statements per line as you can since for each line number eliminated, you have a net savings of four bytes (the five needed for each separate line less the one byte used for each &amp;quot;:&amp;quot;).&lt;br /&gt;
# Eliminate spaces. Your archival copy should have them for intelligibility, but your running copy will save one byte for each space that is removed.&lt;br /&gt;
# Put all initialization code at the end of your program and do a GOTO to a GOSUB. Little used routines at the end make for a dramatic improvement in speed since BASIC must search from the beginning for each line referenced.&lt;br /&gt;
# Put all time critical code at the beginning of the program for the same reason.&lt;br /&gt;
# Initialize all variables before you start the main body of the code. This creates a stable, linear table of variables that are accessed more rapidly.&lt;br /&gt;
# Do not use the supposed short-cut of raising a number to the 0.5 power to save time over the SQR routine. Inaccuracies in the 11th and 12th decimal might tend to screw up any further calculations in which you might use the result.&lt;br /&gt;
# Assign literals used more than once in a program to a variable. Do this in your initialization code. Almost one byte per characters is saved for each such duplication eliminated.&lt;br /&gt;
# Use SPACE$(X) to assign X number of spaces rather than STRING$(X,32).&lt;br /&gt;
# Another surprise: use REM instead of &amp;quot;&#039;&amp;quot;. This saves two bytes per occurrence. Of course you should remove all REM statements of both types from your running copy.&lt;/div&gt;</summary>
		<author><name>Ronw</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=TEENY.EXE_MANUAL&amp;diff=1258</id>
		<title>TEENY.EXE MANUAL</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=TEENY.EXE_MANUAL&amp;diff=1258"/>
		<updated>2009-03-27T05:50:58Z</updated>

		<summary type="html">&lt;p&gt;Ronw: /* Bonus */  trivial grammatical correction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This manual has five sections.  They are in the order that is naturally&lt;br /&gt;
occurring for TEENY.EXE usage.  The first section answers questions of&lt;br /&gt;
where, how, and why with respect to TEENY.EXE invocation.&lt;br /&gt;
 &lt;br /&gt;
The next two sections bear on your interaction with TEENY.EXE while it&lt;br /&gt;
controls your PC, and how your interactions relate to your current and&lt;br /&gt;
future circumstances.&lt;br /&gt;
 &lt;br /&gt;
The last two sections are meaningful after TEENY.EXE control of your PC&lt;br /&gt;
has ended.  Be sure to read the &amp;quot;Bonus&amp;quot; section, lest your PC screen&lt;br /&gt;
display fool you into believing that TEENY.EXE still controls your PC.&lt;br /&gt;
Both of these last sections cover DeskLink invocations: by TEENY.EXE,&lt;br /&gt;
and manually by you.&lt;br /&gt;
 &lt;br /&gt;
== TEENY.EXE Placement and Syntax ==&lt;br /&gt;
 &lt;br /&gt;
TEENY.EXE is an executable file for a PC.  The ideal locale for this&lt;br /&gt;
file is C:\ROOT in a fixed disk drive, and A:\ROOT in a floppy&lt;br /&gt;
diskette.  Place it there now!&lt;br /&gt;
 &lt;br /&gt;
The command name is TEENY.  The command TEENY /? explains everything,&lt;br /&gt;
and the syntax it reveals is especially important.  Do the TEENY /?&lt;br /&gt;
command now!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
C:\ROOT&amp;gt; TEENY /?&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
Purpose: Boot the Tandy laptop Model 100, 102, or 200 with TEENY for later use.&lt;br /&gt;
         The boot speed applies now, the working speed of TEENY applies later.&lt;br /&gt;
Syntax:  TEENY [/p] [/BS] [/S] [/IDSR] [/DOS] [pace]&lt;br /&gt;
         /p is COM port number.  Range: 1 to 4.  Default: 1.&lt;br /&gt;
         /BS is boot speed at 9600 Baud, rather than 19200 Baud.&lt;br /&gt;
         /S sets TEENY to 9600 Baud working speed, rather than 19200 Baud.&lt;br /&gt;
         /IDSR makes TEENY insensitive to DSR control line (i.e., DSR unused).&lt;br /&gt;
         /DOS declares Op Sys as DOS in order to have no pace (i.e., override).&lt;br /&gt;
         pace is useful only if the Op Sys is Windows, rather than DOS. Where&lt;br /&gt;
              you don&#039;t specify pace, the Op Sys is surveyed: for Windows a&lt;br /&gt;
              medium pace is set, DOS has no pace. The value set by the survey&lt;br /&gt;
              is reliable in most cases. Low pace values work well, high values&lt;br /&gt;
              work fast but can fail.  Range: 10 to 99.  Set by survey: 40.&lt;br /&gt;
Examples:&lt;br /&gt;
Port 1 Boot at 19200. TEENY set to 19200, DSR is used. If Windows, pace by 40.&lt;br /&gt;
         TEENY&lt;br /&gt;
Port 1 Boot at  9600. TEENY set to  9600, DSR is used. If Windows, pace by 40.&lt;br /&gt;
         TEENY /BS /S&lt;br /&gt;
Port 2 Boot at  9600. TEENY set to 19200, DSR unused. If Windows, pace by 40.&lt;br /&gt;
         TEENY /2 /BS /IDSR&lt;br /&gt;
Port 3 Boot at 19200. TEENY set to 19200, DSR is used. Windows, pace is 25.&lt;br /&gt;
         TEENY /3 25&lt;br /&gt;
Port 4 Boot at  9600. TEENY set to  9600, DSR is used. DOS declared, no pace.&lt;br /&gt;
         TEENY /4 /BS /S /DOS&lt;br /&gt;
C:\ROOT&amp;gt;&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
TEENY boots the laptop.  The end result is creation of an incarnation&lt;br /&gt;
of laptop command file TEENY.CO within the laptop.&lt;br /&gt;
 &lt;br /&gt;
The switches /1, /2, /3, and /4 steer the boot to any of four COM ports&lt;br /&gt;
of the PC: COM1, COM2, COM3, or COM4.  If you don&#039;t explicitly supply&lt;br /&gt;
one of these switches, the default is boot to the COM1 port.&lt;br /&gt;
 &lt;br /&gt;
There&#039;s a /BS switch for boot at 9600 Baud.  This is needed for a PC&lt;br /&gt;
where its COM port(s) can not operate any higher than 9600 Baud.  If&lt;br /&gt;
you don&#039;t explicitly supply this switch, the default is boot at 19200&lt;br /&gt;
Baud.  Note: do not confuse this /BS switch with the /S switch.&lt;br /&gt;
 &lt;br /&gt;
There&#039;s a /S switch for creation of an incarnation of TEENY.CO that&lt;br /&gt;
works at 9600 Baud.  If you don&#039;t explicitly supply this switch, the&lt;br /&gt;
default is creation of TEENY.CO that works at 19200 Baud.  Where the&lt;br /&gt;
Tandy Portable Disk Drive 2 is the slave device, it only operates at&lt;br /&gt;
19200 Baud -- do not supply the /S switch.  Where the Brother Disk&lt;br /&gt;
Drive FB100 is the slave device, it only operates at 9600 Baud --&lt;br /&gt;
supply the /S switch.  For the other Disk Drives (note #1), you have a&lt;br /&gt;
choice: 19200 Baud, or 9600 Baud.  Where the cable to the slave device&lt;br /&gt;
runs through an area of high electrical noise, select 9600 Baud so you&lt;br /&gt;
have some immunity to noise.  If you plan to use Disk Drive emulation&lt;br /&gt;
by &amp;quot;some PC&amp;quot; (note #2) and its COM port(s) can not operate any higher&lt;br /&gt;
than 9600 Baud, then select 9600 Baud. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt; &lt;br /&gt;
Note #1 Prior to the use of TEENY.CO with the Tandy Portable Disk Drive&lt;br /&gt;
or the Purple Computing Disk Drive, you must establish its &lt;br /&gt;
operational speed so that it matches the working speed of&lt;br /&gt;
TEENY.CO.  See the &amp;quot;Slave Disk Devices&amp;quot; section of the &amp;quot;TEENY&lt;br /&gt;
MANUAL&amp;quot; for detail.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt; &lt;br /&gt;
Note #2 The PC used for TEENY.EXE is not, necessarily, the &amp;quot;same PC&amp;quot;&lt;br /&gt;
which you might subsequently use for Disk Drive emulation.  See&lt;br /&gt;
&amp;quot;About DeskLink&amp;quot; for Disk Drive emulation and 9600 Baud detail.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
There&#039;s a /IDSR switch for creation of an incarnation of TEENY.CO that&lt;br /&gt;
is insensitive to the DSR control line (i.e., DSR unused).  If you&lt;br /&gt;
don&#039;t explicitly supply this switch, the default is creation of&lt;br /&gt;
TEENY.CO that is sensitive to the DSR control line.  Where the cable to&lt;br /&gt;
the slave device is an inferior arrangement that has no connection to&lt;br /&gt;
DSR at the laptop side (e.g., a PalmOS device with a deficient serial&lt;br /&gt;
HotSync cable), you consequently must make TEENY.CO insensitive to the&lt;br /&gt;
DSR control line -- supply the /IDSR switch.&lt;br /&gt;
 &lt;br /&gt;
There&#039;s a /DOS switch that in all cases is not needed but in certain&lt;br /&gt;
cases may be desirable to use.  If you don&#039;t explicitly supply this&lt;br /&gt;
switch, the boot operation might proceed in a slow-paced fashion that&#039;s&lt;br /&gt;
appropriate for a Windows Op Sys despite that fact that the Op Sys&lt;br /&gt;
which currently controls the PC is a DOS Op Sys.  For example, some&lt;br /&gt;
dual-boot arrangements are cases that allow a PC to be controlled by&lt;br /&gt;
either a Windows Op Sys or a DOS Op Sys.  Also there are cases where&lt;br /&gt;
removal of a Windows Op Sys from a PC is incomplete in the sense that&lt;br /&gt;
the PC environment still retains traces of the former Windows Op Sys&lt;br /&gt;
while the current Op Sys is a DOS Op Sys.  In such cases you may, by&lt;br /&gt;
supplying the /DOS switch, declare the Op Sys as DOS in order to have&lt;br /&gt;
no pace (i.e., fastest possible boot operation) which overrides pacing&lt;br /&gt;
that would occur for a Windows Op Sys.&lt;br /&gt;
 &lt;br /&gt;
There&#039;s a &amp;quot;pace&amp;quot; argument you might need to supply to avoid failure of&lt;br /&gt;
the boot.  If you don&#039;t explicitly supply this argument, the operating&lt;br /&gt;
system is surveyed: for Windows the boot is conducted at a medium pace&lt;br /&gt;
of 40, for DOS the boot is conducted as quickly as possible without any&lt;br /&gt;
pace.  If you do supply this argument, there is no survey (i.e.,&lt;br /&gt;
Windows is assumed) and the boot is conducted at the pace you specify:&lt;br /&gt;
from 10 to 99 characters per second.&lt;br /&gt;
 &lt;br /&gt;
Initially you don&#039;t know whether to supply a pace argument or not.  The&lt;br /&gt;
practical approach is to not supply it and see what happens.  If the&lt;br /&gt;
boot completes, you&#039;re done.  During the boot, the PC screen shows a&lt;br /&gt;
reducing down-count to indicate progress toward completion.  Also, a&lt;br /&gt;
[Wait] shows during any period of suspension and it disappears whenever&lt;br /&gt;
boot progress continues.  Should the boot fail, the [Wait] persists and&lt;br /&gt;
the down-count hangs (i.e., stops), but no harm occurs.  The PC screen&lt;br /&gt;
also shows the pace value and explains how to escape from the hung-up&lt;br /&gt;
condition at both the PC and at the laptop.  If it fails, just use the&lt;br /&gt;
TEENY command again with a lower value for the pace.&lt;br /&gt;
 &lt;br /&gt;
What lower value of pace should be tried?  Nobody can know that.  It&#039;s&lt;br /&gt;
a matter of how Windows &amp;quot;mediates&amp;quot; the COM ports of your PC, and that&lt;br /&gt;
depends upon a lot of things -- things that change.  But it has nothing&lt;br /&gt;
to do with the hardware in your PC.  Clock speed of the CPU doesn&#039;t&lt;br /&gt;
matter.  Type of UART at the COM port doesn&#039;t matter.  And restarting&lt;br /&gt;
Windows in so-called &amp;quot;DOS mode&amp;quot; doesn&#039;t help because Windows still&lt;br /&gt;
mediates the COM ports in that mode.  Just guess at a lower value of&lt;br /&gt;
pace and try it!&lt;br /&gt;
&lt;br /&gt;
== Primary Objective ==&lt;br /&gt;
 &lt;br /&gt;
TEENY.EXE has one primary objective -- creation of an incarnation of&lt;br /&gt;
command file TEENY.CO within the Tandy laptop.  Once file TEENY.CO is&lt;br /&gt;
created, you might not ever need to use TEENY.EXE again!  Note that&lt;br /&gt;
TEENY.CO has three traits that it &amp;quot;inherits&amp;quot; from TEENY.EXE.&lt;br /&gt;
 &lt;br /&gt;
* working speed -- either 9600 Baud or 19200 Baud, based on whether you did or did not supply the /S switch when you invoked TEENY.EXE.&lt;br /&gt;
* DSR sensitivity -- either insensitive (i.e., DSR unused/ignored) or sensitive (i.e., DSR used and expected), based on whether you did or did not supply the /IDSR switch when you invoked TEENY.EXE.&lt;br /&gt;
* laptop Model type -- either type 10x or type 200, based on the Model of Tandy laptop that TEENY.EXE detected via the COM port of the PC.&lt;br /&gt;
 &lt;br /&gt;
TEENY.EXE interacts with you; read and follow the directions that&lt;br /&gt;
appear on the PC screen.  TEENY.EXE directs you step by step.  In some&lt;br /&gt;
steps you are directed with terminology that&#039;s peculiar to a Tandy&lt;br /&gt;
laptop.  For example, &amp;quot;At laptop, type an End address and press Enter&amp;quot;&lt;br /&gt;
does not precisely tell you what to type, but &amp;quot;End address&amp;quot; is peculiar&lt;br /&gt;
to a Tandy laptop in regard to .CO type files.  Perhaps you have no&lt;br /&gt;
idea about what is an appropriate End address for file TEENY.CO -- the&lt;br /&gt;
PC screen gives you some limiting guidance such as &amp;quot;Do not use an End&lt;br /&gt;
address higher than 62959&amp;quot; which corresponds to &amp;quot;stuff&amp;quot; TEENY.EXE has&lt;br /&gt;
extracted from your Tandy laptop.  In other steps you are directed in&lt;br /&gt;
precise ways.  For example, &amp;quot;At laptop, type ?HIMEM:CALL9643 and press&lt;br /&gt;
Enter&amp;quot; does tell you precisely what to do.&lt;br /&gt;
&lt;br /&gt;
== Option ==&lt;br /&gt;
 &lt;br /&gt;
After it creates an incarnation of file TEENY.CO, TEENY.EXE then leaves&lt;br /&gt;
you an option.  Said another way, the primary objective has been&lt;br /&gt;
achieved but you have a decision to make now that might matter to you&lt;br /&gt;
in the future.  The decision is not critical, there is no right or&lt;br /&gt;
wrong choice -- just choose!  Do you want to:&lt;br /&gt;
 &lt;br /&gt;
* conserve memory in the Tandy laptop.  The Tandy laptop now is consuming memory that holds BASIC statements, should you purge the statements to recover the memory they consume?  NEW recovers the memory.&lt;br /&gt;
* be able to re-create TEENY.CO without using TEENY.EXE, a PC, and a null-modem cable.  Such stand-alone ability now is held within the Tandy laptop, should you retain it for future use?  SAVE&amp;quot;TEENY retains it in the form of a BASIC program file named TEENY.BA.&lt;br /&gt;
 &lt;br /&gt;
File TEENY.CO, like any conventional .CO file, is immutable.  TEENY.EXE&lt;br /&gt;
has cast an incarnation of file TEENY.CO in concrete -- so to speak.&lt;br /&gt;
It inherits laptop Model type, working speed, and DSR sensitivity as&lt;br /&gt;
traits.  It has an End address that you specified.  These fit your&lt;br /&gt;
circumstance now, but the future may present you with a different&lt;br /&gt;
circumstance that requires another incarnation of file TEENY.CO that is&lt;br /&gt;
different.  Consider the future -- TEENY.EXE leaves you an option for&lt;br /&gt;
how to handle a future circumstance: use TEENY.EXE again, or use&lt;br /&gt;
TEENY.BA.  Using TEENY.EXE, you can select a different working speed&lt;br /&gt;
and/or DSR sensitivity and/or specify a different End address.  Using&lt;br /&gt;
TEENY.BA, you can only specify a different End address.&lt;br /&gt;
 &lt;br /&gt;
== Bonus ==&lt;br /&gt;
 &lt;br /&gt;
Make no mistake about it, TEENY.EXE finishes!  It knows when it is&lt;br /&gt;
done, and it ends.  When TEENY.EXE ends, it no longer has control of&lt;br /&gt;
your PC.  It has done its work -- end of story, finito, that&#039;s all&lt;br /&gt;
folks.&lt;br /&gt;
 &lt;br /&gt;
TEENY.EXE has a bonus that is related to DeskLink and it gives you that&lt;br /&gt;
bonus if it can.  If it is technically possible, TEENY.EXE gives you&lt;br /&gt;
the bonus when it finishes.  You may get the bonus, you may not get it.&lt;br /&gt;
If you do get the bonus then your PC screen shows two listings of&lt;br /&gt;
&amp;quot;laptop-type&amp;quot; file names, and directly below these two file name&lt;br /&gt;
listings &amp;quot;To exit Desk-Link, press F10.&amp;quot; is seen.&lt;br /&gt;
 &lt;br /&gt;
The bonus is that TEENY.EXE invokes DeskLink on your behalf just after&lt;br /&gt;
TEENY.EXE lists, on the PC screen, laptop-type file names that it finds&lt;br /&gt;
within:&lt;br /&gt;
 &lt;br /&gt;
* the memory of the Tandy laptop.  File names TEENY.CO and TEENY.BA are not in this (first) listing.&lt;br /&gt;
* a particular drive and directory of the PC.  The particular drive and directory (e.g., C:\ROOT) are indicated above this (second) listing.&lt;br /&gt;
&lt;br /&gt;
If you plan to immediately use TEENY.CO at the Tandy laptop to transfer&lt;br /&gt;
laptop files to or from the PC, then this bonus has value to you.  With&lt;br /&gt;
manual invocation of DeskLink, a &amp;quot;brag screen&amp;quot; is all that appears at&lt;br /&gt;
the PC -- it does not list any file names whatsoever.  The bonus is&lt;br /&gt;
that TEENY.EXE provides two listings of file names and then it invokes&lt;br /&gt;
DeskLink in a way that leaves the screen intact.&lt;br /&gt;
 &lt;br /&gt;
It is DeskLink that has control of your PC.  So don&#039;t expect to see any&lt;br /&gt;
change in the file name listings at the PC screen while you are using&lt;br /&gt;
TEENY.CO to transfer files.  TEENY.EXE gave you a bonus, not magic&lt;br /&gt;
intervention in a session of DeskLink.&lt;br /&gt;
&lt;br /&gt;
== About DeskLink ==&lt;br /&gt;
 &lt;br /&gt;
DeskLink (also known as BOOSTER-LINK) is freeware placed in the public&lt;br /&gt;
domain by Club 100.  Sessions of DeskLink provide Disk Drive emulation.&lt;br /&gt;
DeskLink is useful to Personal Computer (PC) owners who also own a&lt;br /&gt;
Tandy laptop or NEC notebook, and have a suitable null-modem cable.&lt;br /&gt;
The &amp;quot;Null-modem Cable&amp;quot; section of the &amp;quot;TEENY MANUAL&amp;quot; details what is&lt;br /&gt;
suitable for DeskLink.  DeskLink freeware is distributed as the PC&lt;br /&gt;
command file DESKLINK.COM.&lt;br /&gt;
 &lt;br /&gt;
Although your usage of TEENY.EXE might invoke a session of DeskLink,&lt;br /&gt;
you must manually invoke it for other sessions.  So placement of&lt;br /&gt;
DESKLINK.COM and its command line syntax for manual invocation are&lt;br /&gt;
necessarily detailed here.  Certain desirable aspects of DeskLink that&lt;br /&gt;
pertain to its operation as a slave to TEENY.CO, and generally do not&lt;br /&gt;
pertain to other masters, are explained in the &amp;quot;Slave Device Nuance&amp;quot;&lt;br /&gt;
section of &amp;quot;TEENY.CO MANUAL&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
DESKLINK.COM is a command file for a PC.  The ideal locale for this&lt;br /&gt;
file is C:\ROOT in a fixed disk drive, and A:\ROOT in a floppy&lt;br /&gt;
diskette.  Place it there now!&lt;br /&gt;
 &lt;br /&gt;
The command name is DESKLINK.  The command DESKLINK /? explains&lt;br /&gt;
everything, and the syntax for its switches has much in common with&lt;br /&gt;
the syntax of TEENY.EXE.  Do the DESKLINK /? command now!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
C:\ROOT&amp;gt; DESKLINK /?&lt;br /&gt;
 &lt;br /&gt;
                           DESK-LINK (version 1.05)&lt;br /&gt;
                      (c) 1987, Traveling Software, Inc.&lt;br /&gt;
 &lt;br /&gt;
Usage:    DESKLINK dir&lt;br /&gt;
Function: PC disk emulation of a TANDY Disk Drive via &amp;quot;COM1:&amp;quot; at 19200 baud.&lt;br /&gt;
Notation: dir - root directory name (\ROOT used if omitted).&lt;br /&gt;
Switches: /2 - to communicate through &amp;quot;COM2:&amp;quot;.&lt;br /&gt;
          /S - to communicate at 9600 baud.&lt;br /&gt;
 &lt;br /&gt;
C:\ROOT&amp;gt;&lt;br /&gt;
-------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
DeskLink makes a COM port of a PC respond, to stimulation, in the slave&lt;br /&gt;
fashion that a Disk Drive (e.g., Tandy Portable Disk Drive) exhibits.&lt;br /&gt;
Although the disk media of a PC differs considerably from the media of&lt;br /&gt;
a Disk Drive, stimulations and responses are alike.  Thus, DeskLink is&lt;br /&gt;
an emulator of a Disk Drive.  Thus, the stimulations by a master such&lt;br /&gt;
as TEENY.CO evoke operations which involve &amp;quot;laptop type&amp;quot; files and some&lt;br /&gt;
file repository within a PC.&lt;br /&gt;
 &lt;br /&gt;
There&#039;s a &amp;quot;dir&amp;quot; argument so you can specify what directory in the PC&lt;br /&gt;
current drive you want to use as the repository of &amp;quot;laptop type&amp;quot; files.&lt;br /&gt;
If you don&#039;t explicitly supply this argument, the default directory&lt;br /&gt;
\ROOT of the current drive is the repository.&lt;br /&gt;
 &lt;br /&gt;
There&#039;s a /2 switch which steers operation to the COM2 port of the PC.&lt;br /&gt;
If you don&#039;t explicitly supply this switch, the default is the COM1&lt;br /&gt;
port.&lt;br /&gt;
 &lt;br /&gt;
There&#039;s a /S switch for 9600 Baud operation.  This is needed for a PC&lt;br /&gt;
where its COM port(s) can not operate any higher than 9600 Baud.  Where&lt;br /&gt;
the null-modem cable runs through an area of high electrical noise,&lt;br /&gt;
supply the /S switch for immunity to noise.  If you don&#039;t explicitly&lt;br /&gt;
supply this switch, the default is 19200 Baud operation.&lt;/div&gt;</summary>
		<author><name>Ronw</name></author>
	</entry>
	<entry>
		<id>https://bitchin100.com/wiki/index.php?title=Extraordinary_String_Animals&amp;diff=1113</id>
		<title>Extraordinary String Animals</title>
		<link rel="alternate" type="text/html" href="https://bitchin100.com/wiki/index.php?title=Extraordinary_String_Animals&amp;diff=1113"/>
		<updated>2009-03-02T15:28:05Z</updated>

		<summary type="html">&lt;p&gt;Ronw: Spelling and grammer corrections only.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ron Wiesen, in response to a question from Wilson Van Alst:&lt;br /&gt;
&lt;br /&gt;
To your first question: the situation of $trings (i.e., where they sit) in&lt;br /&gt;
the $tring-space can set the stage for a compelled &#039;garbage collection&#039; that&lt;br /&gt;
takes place, as a neccessary prelude, to a subsequent $tring operation.  In&lt;br /&gt;
other words, the $tring-space holds existing $trings which are not adjoined&lt;br /&gt;
(unused gaps of space are between $trings) and then the BASIC interpreter&lt;br /&gt;
encounters some $tring operation.  The total volume of unused $tring-space&lt;br /&gt;
is sufficient to support the $tring operation.  But that total is fragmented&lt;br /&gt;
due to the way existing $trings are situated in the $tring-space.  This&lt;br /&gt;
compels the BASIC interpreter to suspend interpretation, conduct &#039;garbage&lt;br /&gt;
collection&#039; in order to consolidate the unused volume into one contiguous&lt;br /&gt;
span, and then continue with interpretation -- performing the $tring&lt;br /&gt;
operation.&lt;br /&gt;
&lt;br /&gt;
To your second question: you&#039;ve overlooked the &amp;quot;extraordinary&amp;quot; $tring&lt;br /&gt;
animals.  These creatures begin their life born as ordinary $tring animals&lt;br /&gt;
(typically 0-length nuls).  They then mutate into &amp;quot;extraordinary&amp;quot; $tring&lt;br /&gt;
animals of some finite (often substantial) length.  What makes these&lt;br /&gt;
creatures &amp;quot;extraordinary&amp;quot; $tring animals is that their related $tring&lt;br /&gt;
content is ROM-based (not RAM-based in the the $tring-space).  Below is an&lt;br /&gt;
example of how an &amp;quot;extraordinary&amp;quot; $tring animal is brought into existance.&lt;br /&gt;
&lt;br /&gt;
 E%=32676:E$=&amp;quot;&amp;quot;:&lt;br /&gt;
 POKE0+VARPTR(E$),25:POKE1+VARPTR(E$),E%MOD256:POKE2+VARPTR(E$),E%\256&lt;br /&gt;
&lt;br /&gt;
E$ was born as an ordinary $tring animal with a LENgth of 0 (nul).  In the&lt;br /&gt;
ROM-space, address 32676 is the locale of a 25-cell that holds a bunch of&lt;br /&gt;
values that are ASCII character codes.&lt;br /&gt;
&lt;br /&gt;
Note that the $tring variable called E$, like any other type of variable,&lt;br /&gt;
lives in the variable-space within RAM.  In the case of a $tring variable,&lt;br /&gt;
the variable-space holds two attributes: LENgth, and Address_of_content.&lt;br /&gt;
The function VARPTR, as applied to a $tring variable, returns the locale of&lt;br /&gt;
the LENght attribute.  So 0+VARPTR(E$) is the locale for LENgth of the&lt;br /&gt;
$tring variable called E$.  In the variable-space for a $tring variable, the&lt;br /&gt;
LENgth attribute is immediately followed by the Address_of_content&lt;br /&gt;
attribute.  So 1+VARPTR(E$) and 2+VARPTR(E$), respectively, are the Least&lt;br /&gt;
significant and the Most significant halves of the locale for&lt;br /&gt;
Address_of_content of the $tring variable called E$.  Via three POKEs, the&lt;br /&gt;
creature called E$ mutates into an &amp;quot;extraordinary&amp;quot; $tring animal.&lt;br /&gt;
&lt;br /&gt;
Sure, go ahead.  Do a PRINT E$ statement in order to discover what the&lt;br /&gt;
ROM-based content looks like (you can&#039;t resist the temptation).&lt;br /&gt;
&lt;br /&gt;
What makes the &amp;quot;extraordinary&amp;quot; $tring animals so extraordinary in contrast&lt;br /&gt;
to ordinary $tring animals?  Although both of these creatures live in the&lt;br /&gt;
variable-space, as do creatures of all variable types, they obtain their&lt;br /&gt;
runs of character codes from radically different media.  The ordinary $tring&lt;br /&gt;
animal &amp;quot;feeds&amp;quot; from RAM media: within a BASIC statement in the case of&lt;br /&gt;
&amp;quot;literal&amp;quot; food, or within the $tring-space in the case of changeable food.&lt;br /&gt;
The &amp;quot;extraordinary&amp;quot; $tring animal &amp;quot;feeds&amp;quot; from ROM media where all food is&lt;br /&gt;
&amp;quot;literal&amp;quot; in the sense that it&#039;s cast in stone (i.e., silicon).&lt;br /&gt;
&lt;br /&gt;
To your third question: you&#039;ve overlooked whether or not the BASIC&lt;br /&gt;
interpreter recognizes the difference between an ordinary $tring animal and&lt;br /&gt;
an &amp;quot;extraordinary&amp;quot; $tring animal.  Offhand, I don&#039;t have a concrete answer.&lt;br /&gt;
Whenever I have occasion to create &amp;quot;extraordinary&amp;quot; $tring animals, most of&lt;br /&gt;
the time they are of very substantial LENgth yet there is no operational&lt;br /&gt;
program activity that would amount to exposure to &amp;quot;garbage collection&amp;quot;&lt;br /&gt;
events.  However, I dimly recall investigating the question a long time ago.&lt;br /&gt;
As I recall, I was delighted and surprised to discover that the BASIC&lt;br /&gt;
interpreter does recognize the difference between ordinary $tring animals&lt;br /&gt;
and &amp;quot;extraordinary&amp;quot; $tring animals such that the potential for, and management of, &amp;quot;garbage collection&amp;quot; events is not impacted by the existence of&lt;br /&gt;
&amp;quot;extraordinary&amp;quot; $tring animals.  At least that&#039;s what I recall.  My&lt;br /&gt;
recollection likely is accurate given how the BASIC interpreter already&lt;br /&gt;
recognizes those ordinary $tring animals that have &amp;quot;literal&amp;quot; food in a BASIC&lt;br /&gt;
statement -- to the BASIC interpreter, those creatures perhaps &amp;quot;look the&lt;br /&gt;
same as&amp;quot; any existing &amp;quot;extraordinary&amp;quot; $tring animals with respect to&lt;br /&gt;
&amp;quot;garbage collection&amp;quot; considerations.&lt;br /&gt;
&lt;br /&gt;
[[Category:Model T Developer Reference]]&lt;/div&gt;</summary>
		<author><name>Ronw</name></author>
	</entry>
</feed>