<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.nars2000.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Robert+Wallick</id>
	<title>NARS2000 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.nars2000.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Robert+Wallick"/>
	<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Special:Contributions/Robert_Wallick"/>
	<updated>2026-07-01T06:02:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Building_An_Executable&amp;diff=2910</id>
		<title>Building An Executable</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Building_An_Executable&amp;diff=2910"/>
		<updated>2016-12-19T19:27:07Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: Clarified download, install and use of Tortoise SVN at SourceForge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:left; border:1px solid #aaaaaa; background-color:#f9f9f9;width: 200px;font-family: Verdana, sans-serif;&amp;quot;&lt;br /&gt;
|- padding:5px;padding-top:0.5em;font-size: 95%;&lt;br /&gt;
|&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #ccc; background: #fff; border-right:3px solid #ccc; border-bottom:3px solid #ccc; text-align: center; padding:3px; float:right; font-size: smaller; line-height: 1.3; margin-right: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%&amp;quot;&amp;gt;{{CURRENTDAYNAME}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: x-large; width: 100%;&amp;quot;&amp;gt;{{CURRENTDAY}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 100%;&amp;quot;&amp;gt; {{CURRENTMONTHNAME}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 100%;&amp;quot;&amp;gt;{{CURRENTYEAR}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #aaa; color: #000;&amp;quot;&amp;gt;&#039;&#039;&#039;{{CURRENTTIME}}&#039;&#039;&#039; UTC&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;NARS2000 Building The Executable&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
==Update Notice==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=blue&amp;gt;Although it is not the &amp;quot;ONLY compiler - IDE (integrated developer&#039;s environment) choice&amp;quot;, the below uses &#039;&#039;&#039;Visual Studio 2013&#039;&#039;&#039; as its designated C/C++ Compiler and IDE(Integrated Developer&#039;s Environment, GUI/Graphical User Interface for programming).  All source code compiles correctly and multiple APL workspaces have been tested for correct APL/NARS functionality.  This page is current, up-to-date re NARS working with VS2013&#039;s compiler and standards.  The conversion to VS2013 resulted in a more up-to-date (5 years[2008 to 2013] more current software technology) program for the GUI Builder and Compiler interface, including newer C/C++ programming standards.  This has represented a major cyclical software upgrade and results in greater APL user functionality via improved C coding.  Recent releases of NARS2000.exe (32 and 64-bit versions) are fully functional.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-size:70%&amp;quot;&amp;gt;v---- &#039;&#039;&#039;Useful Developer links:&#039;&#039;&#039; ----v&amp;lt;br&amp;gt;[http://svnbook.red-bean.com Version Control with Subversioning - Conceptual Gen Bkgnd.]&amp;lt;br&amp;gt;[http://sourceforge.net/p/forge/documentation/svn/ Source Forge Versioning Documentation] &amp;lt;br&amp;gt;[http://sourceforge.net/p/nars2000/code/HEAD/tree/trunk/ Source Forge NARS2000 Source Code]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Why Build Your Own==&lt;br /&gt;
&lt;br /&gt;
First of all, you do not have to build your own.  NARS has already created a great existing Nested Arrays Research System APL interpreter.  NARS2000.exe is freely available at [http://www.nars2000.org/download/Download.html NARS Downloads].  Downloads includes Beta releases for APLers so inclined.&lt;br /&gt;
&lt;br /&gt;
On the other hand, why not expand your programming/software and computer skill horizons?  Many people think and believe &#039;&#039;&#039;Kenneth Iverson&#039;s&#039;&#039;&#039; work remains that of a true genius, a bright light among some very bright intellectual lights, both from a theoretical as well as a software implementation perspective.  Here&#039;s your opportunity to attempt to improve upon some very substantive, preexisting software development work - to further it, to make it even better, and perhaps best of all - &#039;&#039;&#039;it&#039;s free&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Personalize some already pretty amazing software for yourself, or share it with others and get &#039;&#039;&#039;their feedback&#039;&#039;&#039; for even greater insight and subsequent improvement.  NARS version of APL already has over a quarter million lines of source code, subroutines, macros, functions, etc. - 50 years of sometimes intense and continuing evolution, so you are &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; creating something from undeveloped scratch, but inheriting and working from already highly evolved, rigidly disciplined concepts and rigorously debugged software over time.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;APL/2&#039;&#039;&#039; has been used in physics, science, genetic engineering-DNA studies, advanced mathematics, robotics, engineering, artificial intelligence, image processing, bio-medicine, VLSI, financial, statistical and social science applications.  NASA and Astronomers have used APL.&lt;br /&gt;
&lt;br /&gt;
Now APL/2 is 100% customizable.  Perhaps you will be the first to customize APL to safely drive a vehicle, help save a life, make new discoveries or make some process(es) more efficient.&lt;br /&gt;
&lt;br /&gt;
It&#039;s &#039;&#039;&#039;free&#039;&#039;&#039;. It&#039;s &amp;lt;u&amp;gt;&#039;&#039;&#039;evolved&#039;&#039;&#039;&amp;lt;/u&amp;gt;.  Once you start examining NARS/APL/APL2 source code you&#039;ll find it is comprehensive, elegant, process-symbol-efficient, focused toward the end-user, evolved over some fifty years of use, structurally enigmatic, tirelessly debugged &amp;lt;u&amp;gt;and&amp;lt;/u&amp;gt; rich with coding techniques - a great learning tool, even if absolutely nothing else - and NARS believes it is far, far better than just a learning tool.  You&#039;ll learn about Bison Parsing, how it helps define compilers and interpreters.  Further, NARS is a tremendous opportunity to learn more about the human-machine interface; how machine hardware operates and - better understand how software and hardware interact together.&lt;br /&gt;
&lt;br /&gt;
One of the stellar, intellectually expansive aspects of APL/2 is - how fully the language embraces the &amp;lt;u&amp;gt;breadth of hardware functionality&amp;lt;/u&amp;gt;.  This includes instructions running core processor chip(s) and peripheral devices.  This is not your grandparents&#039; punch-card software program run on a room-sized computer, although that was marvelous at its time, but it may have taken him/her several days to get results back for in an introductory chemistry or math lab course.  Today &#039;&#039;&#039;[http://phys.org/news/2015-03-quantum-unexpected-ways.html data structures influence speed of quantum search in unexpected ways]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Platforms==&lt;br /&gt;
&lt;br /&gt;
The current version of NARS2000 may be run and built on a variety of Windows platforms, including most or all post-Windows-98 OS versions.  Furthermore, a long-term goal is to enable NARS to be built on Linux, Mac OS, etc. as per user requests and Developer interests.  If you do not have a Windows machine, the following may be helpful to you:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/187359/5-ways-to-run-windows-software-on-a-mac/ Five ways to run Windows software on a Mac.]&#039;&#039;&#039; From HowToGeek.com, methods include 1)Virtual Machines, 2)Boot Camp, 3)Wine, 4)CrossOver Mac (not free) and 5)Remote Desktop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/133515/4-ways-to-run-windows-software-on-linux/ Four ways to run Windows software on Linux.]&#039;&#039;&#039; Again from HowToGeek.com, methods include 1)Use Wine, 2)Run Windows in a Virtual Machine, 3)Try Crossover (not free) and 4)Remote Desktop.  A fifth way per [http://www.pcworld.com/article/2900497/how-to-run-windows-software-in-linux-everything-you-need-to-know.html PC World] is dual booting both Linux and Windows on your machine.  This essentially involves partitioning hard drives with a portion reserved for Linux and a portion reserved for Windows.  With costs of external hard drives continuing to decline, buying an external or network hard drive may free up hard drive storage space requirements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/173353/how-to-run-windows-software-on-a-chromebook/ How to Run Windows Software on a Chromebook {notebook or tablet PC}.]&#039;&#039;&#039; Again from HowToGeek.com, methods include 1)Access a Windows Desktop Remotely, 2)Use Developer Mode and Install Wine (not available for all Chromebooks), 3)Use Developer Mode and Install a Virtual Machine (may require an Intel Chromebook).&lt;br /&gt;
&lt;br /&gt;
Furthermore, if you work using a tablet or other computing device which supports remote desktop software such as &#039;&#039;&#039;[http://teamviewer.com Team Viewer]&#039;&#039;&#039; and you have a home or work computer running Windows - then you can remotely use NARS over your network and internet using that computer as a host and your local device as a client. Network and internet speeds are sufficiently fast and TeamViewer, for instance, is very good at making your remote desktop seem and respond as if virtually right in front of you.&lt;br /&gt;
&lt;br /&gt;
For the present, the following sections detail descriptions for building the executable with bias towards Windows.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
&lt;br /&gt;
To build the executable &amp;lt;u&amp;gt;in summary&amp;lt;/u&amp;gt; you&#039;ll need the following:&lt;br /&gt;
&lt;br /&gt;
# C Compiler and Linker&lt;br /&gt;
## Make program&lt;br /&gt;
## Resource Compiler&lt;br /&gt;
## Windows SDK&lt;br /&gt;
# Parser Generator&lt;br /&gt;
# Zip Utility&lt;br /&gt;
# PHP (Hypertext Preprocessor)&lt;br /&gt;
# NARS2000 Source Code&lt;br /&gt;
# NARS2000 External Libraries&lt;br /&gt;
# Optionally, Multi-precision Library Source&lt;br /&gt;
# STDINT.H header file&lt;br /&gt;
# Version Control program&lt;br /&gt;
# Doctor Dump SDK&lt;br /&gt;
# Optionally, a File Differencing/Merge program&lt;br /&gt;
&amp;lt;br /&amp;gt;All of the tools you&#039;ll need are &#039;&#039;&#039;freely available&#039;&#039;&#039;.  Some of them happen to be Microsoft-specific. Bill Gates while at Harvard actually worked a bit on/with APL, obviously he discovered the importance of working with arrays and symbolic notation. At the same time there is no reason more generic tools (such as [http://www.delorie.com/djgpp/ DJGPP], [http://www.cygwin.com/ Cygwin] or [http://www.mingw.org/ MinGW]) can&#039;t be used, a task NARS is hoping someone will volunteer to investigate.  In particular, the &#039;&#039;&#039;tools currently used&#039;&#039;&#039; to create the APL Executable, &amp;lt;u&amp;gt;in detail&amp;lt;/u&amp;gt;, are as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
# &amp;lt;u&amp;gt;&#039;&#039;&#039;C&#039;&#039;&#039;&amp;lt;/u&amp;gt; (needed for this NARS2000 project is &#039;&#039;&#039;Visual C++ 2013&#039;&#039;&#039; = C++ &amp;lt;u&amp;gt;GUI development environment and compiler for the C language&amp;lt;/u&amp;gt;, which much of APL&#039;s interpreter is written in). Compiler and Linker:  &#039;&#039;&#039;[https://app.vssps.visualstudio.com/profile/review?download=true&amp;amp;family=VisualStudioExpressDesktop&amp;amp;release=VisualStudio2013Upd4&amp;amp;type=web&amp;amp;slcid=0x409 Microsoft Visual Studio 2013 Express for Desktop Windows]&#039;&#039;&#039; (download requires a FREE Microsoft/Visual Studio account) OS requires Windows XP or later &amp;amp;mdash; includes Link, Make, a Resource Compiler, and an SDK (among others).  Download/Installation Notes: The &#039;&#039;&#039;downloaded file&#039;&#039;&#039; may be double-clicked in Windows Explorer. VS 2013 does NOT Install to a mapped or network drive(but to something like C:\Program Files\...).  It must be Installed on a local PC drive (e.g. C:\...) and &#039;&#039;&#039;unmapped directory&#039;&#039;&#039; (but you can map to it later) - Microsoft apparently requires installation to a local machine drive letter such as &amp;quot;C:\...&amp;quot;. &amp;amp;nbsp; VS2013 Desktop is free &#039;&#039;&#039;and&#039;&#039;&#039; it includes a GUI or graphical user interface (icon-based IDE or integrated developer&#039;s environment), which is geometrically easier to use than a command-line interface.  Windows 8.1 SDK (does NOT require Windows 8.1, but does update for some 8.1 capabilities, especially useful for using Visual Studio 2013; &#039;&#039;&#039;[https://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx?f=255&amp;amp;MSPPError=-2147217396 download is available at Microsoft]&#039;&#039;&#039;.  &amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-size:60%&amp;quot;&amp;gt;&#039;&#039;&#039;Windows SDK&#039;&#039;&#039; (the following MAY NOT BE NECESSARY, SDK=Software Developers Kit, sometimes needed for &#039;&#039;&#039;64-bit installations&#039;&#039;&#039;, usually choose download file GRMSDKX_EN_DVD.iso even for Intel machines) &#039;&#039;&#039;[http://www.microsoft.com/en-us/download/details.aspx?id=18950 download here]&#039;&#039;&#039;, with &#039;&#039;&#039;installation instructions [https://github.com/enGits/engrid/wiki/Configure-Microsoft-Visual-Studio-2008-Express-to-also-build-for-Windows-x64 here]&#039;&#039;&#039;.&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Parser Generator&#039;&#039;&#039;:  &#039;&#039;&#039;[https://cygwin.com/install.html Bison]&#039;&#039;&#039;, a Cygwin package, Save and run either &#039;&#039;&#039;setup-x86.exe&#039;&#039;&#039; (32-bit systems) or &#039;&#039;&#039;setup-x86_64.exe&#039;&#039;&#039; (64-bit systems) as appropriate to your system, &#039;&#039;&#039;Choose A Download Source&#039;&#039;&#039;:  Install from Internet, &#039;&#039;&#039;Select Root Install Directory&#039;&#039;&#039;, &#039;&#039;&#039;Select Local Package Directory&#039;&#039;&#039;, &#039;&#039;&#039;Select Your Internet Connection&#039;&#039;&#039;, &#039;&#039;&#039;Choose A Download Site&#039;&#039;&#039;, &#039;&#039;&#039;Select Packages&#039;&#039;&#039;:  Leave alone &#039;&#039;&#039;All (Default)&#039;&#039;&#039; - first time through, just click [Next], &#039;&#039;&#039;Devel&#039;&#039;&#039;, and &#039;&#039;&#039;bison&#039;&#039;&#039;, other dependent packages may be installed along with &#039;&#039;&#039;bison&#039;&#039;&#039;, if not then &#039;&#039;&#039;after first&#039;&#039;&#039; Cygwin installation finishes, double-click the downloaded Cygwin file in Windows Explorer, downloaded filename should be something like &#039;&#039;&#039;setup-x86_64.exe&#039;&#039;&#039; and the &#039;&#039;&#039;second time through&#039;&#039;&#039; do specifically download and install &#039;&#039;&#039;Dev&#039;&#039;&#039;, &#039;&#039;&#039;Bison&#039;&#039;&#039; - informally note the &#039;&#039;&#039;tree structure&#039;&#039;&#039; during the Bison download/install since &#039;&#039;&#039;creating parse trees&#039;&#039;&#039; is &#039;&#039;&#039;very much&#039;&#039;&#039; a &#039;&#039;Bison program specialty&#039;&#039;, a strength.  Compilers and even APL itself relies heavily on correct statement type recognition and parsing.  To make sure you successfully downloaded and installed &#039;&#039;&#039;bison.exe&#039;&#039;&#039;, the file should be &#039;&#039;&#039;found&#039;&#039;&#039; or reside in the C:\Cygwin\bin or C:\cygwin64\bin folder.  Make note of the folder location since you will need it when setting the PARGEN environment variable shortly, below.&lt;br /&gt;
# &#039;&#039;&#039;Zip Utility&#039;&#039;&#039;:  &#039;&#039;&#039;[http://www.7-zip.org/ 7-Zip]&#039;&#039;&#039; (Latest version, 32- or 64-bit, as appropriate to your system; needed to Extract/Unzip the files and folders you are downloading for this project.)  If you already have a Zip utility program on your PC, Tablet or Server such as WinZip, you can normally skip the 7-Zip download/install.&lt;br /&gt;
# &#039;&#039;&#039;PHP&#039;&#039;&#039; (Hypertext Preprocessor):  &#039;&#039;&#039;[http://www.php.net/downloads.php Downloads]&#039;&#039;&#039; (&amp;lt;u&amp;gt;Windows downloads&amp;lt;/u&amp;gt; for Windows systems.) (Windows binaries/VC9 x86 Thread Safe/Latest version/Zip or Installer, your choice) (Items to Install: Entire &#039;&#039;&#039;Script Executable&#039;&#039;&#039;, and entire &#039;&#039;&#039;Extras&#039;&#039;&#039;). Place the unzipped file&#039;s contents into something like &amp;quot;C:\PHP&amp;quot;. The executable file &amp;quot;php.exe&amp;quot; needs to be &amp;quot;on your directory or environmental path&amp;quot; when later compiling or building the APL executable.&lt;br /&gt;
# &#039;&#039;&#039;NARS2000 Source Code&#039;&#039;&#039;:  Click on &#039;&#039;&#039;[http://sourceforge.net/projects/nars2000/ Browse Code] button&#039;&#039;&#039; at &#039;&#039;&#039;NARS&#039;&#039;&#039; SourceForge.net &#039;&#039;&#039;code repository&#039;&#039;&#039;. &lt;br /&gt;
## You also likely need a Version Control program for SourceForge code &#039;checkouts&#039;, e.g. see &#039;&#039;&#039;Tortoise SVN&#039;&#039;&#039; below and &#039;&#039;&#039;[http://tortoisesvn.net/ here, visit Tortoise SVN&#039;s download page]&#039;&#039;&#039;, then download and install Tortoise SVN&#039;s 64-bit or 32-bit version depending on your operating system to subsequently be able to auto-check-out NARS source code. &amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-size:70%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;u&amp;gt;&#039;&#039;&#039;Prior&#039;&#039;&#039;&amp;lt;/u&amp;gt; non-current NARS Source Code versions available at [http://code.google.com/p/nars2000/source/checkout Code Google].&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;NARS2000 External Libraries&#039;&#039;&#039;:  [http://www.nars2000.org/download/binaries/misc.zip Miscellaneous Library] (misc.zip, which contains 4 .php files and 1 .ttf file - all directly unzipped into C:\NARS2000) and the following NARS libraries:&lt;br /&gt;
## [http://www.nars2000.org/download/binaries/mplibs.zip &#039;&#039;&#039;MPIR/MPFR/ECM Libraries&#039;&#039;&#039;] - These libraries(mplibs.zip) should be directly extracted or unzipped into the C:\NARS2000 folder such that three(3) distinct sub-directories are &#039;&#039;&#039;directly&#039;&#039;&#039; created: \ecm, \mpfr and \mpir, e.g. C:\NARS2000\ecm.&lt;br /&gt;
## [http://www.nars2000.org/download/binaries/gsldir.zip &#039;&#039;&#039;gsl Library&#039;&#039;&#039;] - This library(gsldir.zip) should be directly un-zipped into the C:\NARS2000 folder such that it becomes &#039;&#039;&#039;C:\NARS2000\gsl&#039;&#039;&#039;.  Folder structure &amp;quot;C:\NARS2000\gsldir\gsl&amp;quot; would be invalid.&lt;br /&gt;
## [http://www.nars2000.org/download/binaries/qdebug.zip &#039;&#039;&#039;qdebug Library&#039;&#039;&#039;] - This library(qdebug.zip) should also be directly un-zipped into the C:\NARS2000 folder such that it becomes &#039;&#039;&#039;C:\NARS2000\qdebug&#039;&#039;&#039;.  Make sure it is NOT double-enclosed when unzipped, for example the following would be an invalid folder setup structure: C:\NARS2000\qdebug\qdebug.&lt;br /&gt;
# &#039;&#039;&#039;Multi-precision Library Source Code:  [http://www.nars2000.org/download/binaries/mpfns-src.zip MPIR/MPFR/ECM Source]&#039;&#039;&#039;.  This zipped download is large (roughly 0.5GB) and is needed primarily to reproduce files in the MPIR/MPFR/ECM Library download so as to satisfy requirements of the GNU General Public License (GPL) v3.  For more details on using the files in the download, look in the zipped file for &amp;lt;b&amp;gt;&amp;lt;code&amp;gt;readme.txt&amp;lt;/code&amp;gt;&amp;lt;/b&amp;gt;.  If you are content to use the already-compiled existing binary libraries in [http://www.nars2000.org/download/binaries/mplibs.zip MPIR/MPFR/ECM Libraries], you may not immediately need the MPIR/MPFR/ECM Source Code; on the other hand - 128-bit CPU chips are in manufacturing production pipelines, quadruple-precision 128-bit floating-point format has been standardized by the IEEE and ultra-precise calculations are already needed in such fields as quantum physics, ref. [http://phys.org/news/2014-06-physicists-quantum-ultra-precise.html Physicists take quantum leap toward ultra-precise measurement], 6/2/2014.  One of APL&#039;s strengths is its handling of mathematically precise calculations and the &#039;&#039;&#039;large size&#039;&#039;&#039; of the multi-precision source code library reinforces that.&lt;br /&gt;
# [http://msinttypes.googlecode.com/svn/trunk/stdint.h STDINT.H] header file installed in the MS Visual Studio 2013 include directory (V:\VC\include -- see below)&lt;br /&gt;
# &#039;&#039;&#039;SubVersion Control program&#039;&#039;&#039;:  [http://tortoisesvn.net/downloads Tortoise SVN] (Current version, 32- or 64-bit depending upon your OS)&lt;br /&gt;
# &#039;&#039;&#039;Doctor Dump SDK&#039;&#039;&#039;:  [https://drdump.com/public/DoctorDumpSDK/DoctorDumpSDK.zip Doctor Dump SDK] - e.g. DoctorDumpSDK.zip.&lt;br /&gt;
# &#039;&#039;&#039;File Differencing/Merge program&#039;&#039;&#039;:  [http://winmerge.org/ WinMerge] (&#039;&#039;&#039;Latest stable version&#039;&#039;&#039;, usually downloads to something like WinMerge-k.m.n-Setup.exe where k, m and n are version/sub-version numbers.)&lt;br /&gt;
&lt;br /&gt;
==Install Tools==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Preface&#039;&#039;&#039;, Convention: &#039;&#039;&#039;x86&#039;&#039;&#039; generally refers to &#039;&#039;&#039;32-bit&#039;&#039;&#039; software installations while 64 (or blank) represents 64-bit software installations on a Windows OS machine.  NARS works on &#039;&#039;&#039;both&#039;&#039;&#039; 32-bit and 64-bit systems, but you should decide &#039;&#039;&#039;in advance&#039;&#039;&#039; which type of install you want 64 vs. 32-bit - ditto for all tool installs.  Installation examples:&lt;br /&gt;
# C:\Program Files (x86)\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Represents 32-bit software program installation, normal folder location.&lt;br /&gt;
# C:\Program Files\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Represents 64-bit software program installation, normal folder location.&lt;br /&gt;
Also, &#039;&#039;&#039;both&#039;&#039;&#039; folder locations just above frequently and even always exist on most machines, but for consistency and integration purposes the software should be 32 &#039;&#039;&#039;&amp;lt;u&amp;gt;or&amp;lt;/u&amp;gt;&#039;&#039;&#039; 64-bit.  Most people choose 64-bit installs if their Windows OS supports the 64-bit architecture, with 32-bit available for backward software compatibility in conjunction with less current systems.  If you don&#039;t know which architecture your system uses, go to the Control Panel, System Information.  Downloads usually get placed into a Downloads folder.  Several of the unzipped NARS tools get placed directly into the C:\NARS2000 folder, see individual tools for exact locations.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To install the Microsoft &#039;&#039;&#039;Visual Studio 2013 Express C compiler&#039;&#039;&#039;, see Downloads(&amp;lt;u&amp;gt;detail&amp;lt;/u&amp;gt;, #1 above).  Visual C++ 2013 usually installs into something like, &amp;quot;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VCExpress.exe&amp;quot; (64-bit loc) and you may want to place a &#039;&#039;&#039;Shortcut&#039;&#039;&#039; to &#039;&#039;&#039;VCExpress.exe&#039;&#039;&#039; on your Desktop by right-clicking on that VCExpress.exe file in Windows Explorer and Send To - Desktop (create shortcut). (Windows 8 Users: You can also &#039;&#039;&#039;Pin VCExpress.exe To your Taskbar&#039;&#039;&#039; for quick, easy access.)  (Prior/obs. Microsoft setup routine name: run the vcsetup.exe program.)  Afterwards including after drive plus folder remapping - the files &#039;&#039;&#039;msobj80.dll&#039;&#039;&#039;, &#039;&#039;&#039;mspdb80.dll&#039;&#039;&#039;, &#039;&#039;&#039;mspdbcore.dll&#039;&#039;&#039;, and &#039;&#039;&#039;mspdbsrv.exe&#039;&#039;&#039; all need to be copied from &#039;&#039;&#039;V:\Common7\IDE&#039;&#039;&#039; to &#039;&#039;&#039;V:\VC\bin&#039;&#039;&#039;, where the &#039;&#039;&#039;V&#039;&#039;&#039; drive is a substitute/mapping for &#039;&#039;&#039;C:\Program Files\Microsoft Visual Studio 9.0&#039;&#039;&#039;.  See the discussion below on [[#Set_Up_Makefile_Environment_Variables|Set Up Makefile Environment Variables]].&lt;br /&gt;
&lt;br /&gt;
To install the Parser Generator (Bison), see the instructions above.  When the Cygwin setup program asks you to choose a &#039;&#039;&#039;Default Text File Type&#039;&#039;&#039;, choose &#039;&#039;&#039;DOS/text&#039;&#039;&#039; so any committed files are the same as in the version control repository.&lt;br /&gt;
&lt;br /&gt;
To install Doctor Dump SDK, unzip it in a directory at or above %NARSROOT%, this usually means unzipping into folder C:\DoctorDumpSDK.  See also discussion below on [[#Set_Up_Makefile_Environment_Variables|Set Up Makefile Environment Variables]].&lt;br /&gt;
&lt;br /&gt;
Install the rest of the tools as per their instructions above, in the Downloads section.&lt;br /&gt;
&lt;br /&gt;
==Install The Source Code==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;First create a NARS2000 &#039;&#039;&#039;root folder&#039;&#039;&#039; somewhere on one of your hard drives, perhaps calling it &#039;&#039;&#039;NARS2000&#039;&#039;&#039;, as in &#039;&#039;&#039;C:\NARS2000&#039;&#039;&#039; (most common) or perhaps at some lower level.  The source code and external libraries are typically installed at or into this level, e.g. qdebug.zip into C:\NARS2000 as C:\NARS2000\qdebug.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Under the root folder make three folders:  &#039;&#039;&#039;trunk&#039;&#039;&#039;, &#039;&#039;&#039;msieve&#039;&#039;&#039;, and &#039;&#039;&#039;branches&#039;&#039;&#039;.  The first folder (&#039;&#039;&#039;trunk&#039;&#039;&#039;) will hold the main body of NARS/APL built exe interpreter &#039;&#039;&#039;source&#039;&#039;&#039; code.  The second (&#039;&#039;&#039;msieve&#039;&#039;&#039;) will be utilized for code used to &#039;&#039;&#039;factor numbers&#039;&#039;&#039;, and the third (&#039;&#039;&#039;branches&#039;&#039;&#039;) will contain individual developer branches of the main code not as yet ready for release, but made public for other developers to see.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Using a Version Control program such as &#039;&#039;&#039;TortoiseSVN&#039;&#039;&#039;, download-checkout the source code (see [[#Check_Out_The_Source_Code|Check Out The Source Code]]),&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Download the &#039;&#039;&#039;misc.zip&#039;&#039;&#039;, &#039;&#039;&#039;qdebug.zip&#039;&#039;&#039;, &#039;&#039;&#039;gsldir.zip&#039;&#039;&#039;, and &#039;&#039;&#039;mplibs.zip&#039;&#039;&#039; files into the root folder and unzip them (directly into that root folder, e.g. C:\NARS2000) using e.g. &#039;&#039;&#039;7z.exe&#039;&#039;&#039; (unzip/extract program used) as in &#039;&#039;&#039;7z x misc.zip&#039;&#039;&#039;, &#039;&#039;&#039;7z x qdebug.zip&#039;&#039;&#039;, &#039;&#039;&#039;7z x gsldir.zip&#039;&#039;&#039;, and &#039;&#039;&#039;7z x mplibs.zip&#039;&#039;&#039; - or double-click on those downloaded zip file names using Windows File Explorer and Extract All (again typically directly into NARS root folder previously set up).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Check Out The Source Code==&lt;br /&gt;
&lt;br /&gt;
An easy way to initialize your copy of the source code for the first time, although it may initially appear cumbersome to an SVN newcomer, is to use a version control program such as TortoiseSVN, mentioned above.  One very helpful feature of TortoiseSVN is that it integrates well with Windows File Explorer.  After downloading and installing TortoiseSVN and then rebooting your PC, there are two directories you will need to Install/initialize-checkout/TortoiseSVN-on.&lt;br /&gt;
# &#039;&#039;&#039;First&#039;&#039;&#039; bring up Windows Explorer, right-click on the &#039;&#039;&#039;trunk&#039;&#039;&#039; folder you manually created, and choose &#039;&#039;&#039;SVN Checkout&#039;&#039;&#039;.&lt;br /&gt;
## If you do not see &amp;quot;SVN Checkout&amp;quot; when you right-click on the &#039;&#039;&#039;trunk&#039;&#039;&#039; folder, download &#039;&#039;&#039;Tortoise SVN&#039;&#039;&#039; per the &#039;&#039;&#039;Tortoise SVN link above&#039;&#039;&#039;([[#Downloads|Downloads-NARS2000 Source Code-Tortoise SVN]].  The online NARS SourceForge URL of source code repository: is &#039;&#039;&#039;svn://svn.code.sf.net/p/nars2000/code/trunk&#039;&#039;&#039; and your local Checkout directory: is &#039;&#039;&#039;C:\NARS2000\trunk&#039;&#039;&#039; (or wherever your trunk folder is) - quite likely you will have to edit the TortoiseSVN repository field or program local folder field because default text inserted by TortoiseSVN usually does not match folder location(s) identically.  Depth should show Fully recursive, the default.&lt;br /&gt;
## To begin source code downloading/checkout into your locally created &#039;&#039;&#039;trunk&#039;&#039;&#039; folder click the &#039;&#039;&#039;OK&#039;&#039;&#039; button. Code downloading/checkout should then begin. With a high-speed Internet connection, time required to TortoiseSVN download/checkout NARS code is on the order of roughly two minutes.  When successfully complete, you should get a return message at the end of the downloads list, like &#039;&#039;&#039;Completed at revision nnnn&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Second&#039;&#039;&#039; (and this is a similar repeat step but using folder &#039;&#039;&#039;msieve&#039;&#039;&#039; instead of trunk), bring up Windows Explorer, right-click on the &#039;&#039;&#039;msieve&#039;&#039;&#039; folder you likewise manually created - and choose &#039;&#039;&#039;SVN Checkout...&#039;&#039;&#039;.  This time online NARS &#039;&#039;&#039;URL of repository:&#039;&#039;&#039; is &#039;&#039;&#039;svn://svn.code.sf.net/p/nars2000/code/msieve&#039;&#039;&#039; (this address is slightly different than step 1) and your local &#039;&#039;&#039;Checkout directory:&#039;&#039;&#039; is &#039;&#039;&#039;C:\NARS2000\msieve&#039;&#039;&#039; (or wherever your &#039;&#039;&#039;msieve&#039;&#039;&#039; folder is).  Again, depth should be fully recursive and click the &#039;&#039;&#039;OK&#039;&#039;&#039; button to begin.  This step two normally completes in under five seconds, downloading far fewer files than the trunk download.  Normally, the &amp;lt;u&amp;gt;same&amp;lt;/u&amp;gt; msieve &amp;lt;u&amp;gt;revision&amp;lt;/u&amp;gt; number should appear after finishing this download as per trunk download in step 1.&lt;br /&gt;
&lt;br /&gt;
The above &#039;&#039;&#039;two&#039;&#039;&#039; steps/distinct-folders need be initialized this first checkout time through - in order to establish the special hidden SVN directories for subversion &amp;quot;synching&amp;quot; between your local source code and NARS online code repository. As a brief check that your &#039;&#039;&#039;local&#039;&#039;&#039; NARS source code files match NARS, there should be green check marks on folders trunk and msieve on your PC, placed there by TortoiseSVN. [http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-wcstatus.html  TortoiseSVN Status Information.]&lt;br /&gt;
&lt;br /&gt;
You will still or now need to download and unzip &#039;&#039;&#039;qdebug.zip&#039;&#039;&#039;, &#039;&#039;&#039;misc.zip&#039;&#039;&#039;, &#039;&#039;&#039;gsldir.zip&#039;&#039;&#039;, and &#039;&#039;&#039;mplibs.zip&#039;&#039;&#039; as described above.&lt;br /&gt;
&lt;br /&gt;
Subsequently, you may quickly and easily update your local copy of NARS source code by right-clicking on the &#039;&#039;&#039;trunk&#039;&#039;&#039; and/or &#039;&#039;&#039;msieve&#039;&#039;&#039; folders and choose &#039;&#039;&#039;SVN Update&#039;&#039;&#039;.  One useful feature of sub-versioning programs such as TortoiseSVN is that only &#039;&#039;&#039;changed files&#039;&#039;&#039; from the online latest official version will need to be subsequently downloaded as changes are made in futuro, re subsequent NARS revisions.&lt;br /&gt;
&lt;br /&gt;
Since you may be unfamiliar with the download process your first time through, it make take slightly longer; however, the second or third time you &amp;lt;u&amp;gt;Check Out The Source Code&amp;lt;/u&amp;gt;, over time, the entire &amp;quot;update to most current NARS source code revision&amp;quot; process will probably take under 3 to 5 minutes total, depending however on your (high-speed) Internet service provider&#039;s(ISP) download speed.&lt;br /&gt;
&lt;br /&gt;
==Folders==&lt;br /&gt;
&lt;br /&gt;
After unzipping the above files, the structure under the &#039;&#039;&#039;NARS2000 root folder&#039;&#039;&#039; should look very much like the following(&#039;&#039;&#039;leftmost column&#039;&#039;&#039;), where lower level sub-directories and individual sub-folder file names have been omitted:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;| style=&amp;quot;width: 40%; border:1px dotted blue;&amp;quot; &lt;br /&gt;
!&amp;lt;u&amp;gt;&#039;&#039;&#039;NARS2000&#039;&#039;&#039; SubFolder:&amp;lt;/u&amp;gt;&lt;br /&gt;
! &amp;lt;u&amp;gt;Downloaded Zip &#039;&#039;&#039;Source&#039;&#039;&#039; File or Checkout Process:&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| branches\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | Created manually(1)&lt;br /&gt;
|-&lt;br /&gt;
| ecm\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;mplibs&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| gsl\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;gsldir&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| mpfr\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;mplibs&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| mpir\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;mplibs&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| msieve\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;msieve&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| qdebug\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;qdebug&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| trunk\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\binaries\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\Extensions\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\htdocs\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\images\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\MediaWiki\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\ReleaseNotes\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\WineHQ\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
(1) Subfolder &#039;&#039;&#039;\branches&#039;&#039;&#039; should be &#039;&#039;&#039;created manually&#039;&#039;&#039; (e.g. Windows Explorer, right-click, New, Folder).  It is used to hold subprojects you may develop.  For example if your name is Bill Gates, you might have the following subfolders, each representing a NARS subproject:&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\NARS_Spreadsheets&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\NARS_WordProcPlusAPLEdits&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\EZMenus&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\Graphics&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Choose How To Build==&lt;br /&gt;
&lt;br /&gt;
The following sections describe two alternate ways to build the executable.  One is the GUI interface of VC++ Express, the other is a command line interface using a &#039;&#039;&#039;makefile&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Set Up VC++ Express==&lt;br /&gt;
&lt;br /&gt;
If you are using Visual Studio 2013/VC++ Express, the project file is in the &#039;&#039;&#039;trunk&#039;&#039;&#039; folder and is called &#039;&#039;&#039;NARS2000.vcproj&#039;&#039;&#039;.  You may load it manually every time you invoke VC++ Express, or you may load it automatically by placing the path to the project file on the command line in the VC++ Express shortcut as in &#039;&#039;&#039;&amp;quot;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VCExpress.exe&amp;quot; C:\NARS2000\trunk\NARS2000.vcproj&#039;&#039;&#039; or wherever you defined your NARS2000 root folder.&lt;br /&gt;
&lt;br /&gt;
The vast majority of the project settings are found in the above file with some exceptions.&lt;br /&gt;
&lt;br /&gt;
==Set Up Makefile and Environment Variables==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=25%&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Windows 8&#039;&#039;&#039;: Setting up Environment and Path Variable(s):&lt;br /&gt;
Under Settings, Control Panel, System and Security, System, Advanced System Settings, Advanced (Tab) &#039;&#039;&#039;or&#039;&#039;&#039; in Control Panel &amp;lt;u&amp;gt;Search&amp;lt;/u&amp;gt; for &#039;&#039;&#039;Environment Variables&#039;&#039;&#039;,&lt;br /&gt;
* Click &#039;&#039;&#039;Environment Variables&#039;&#039;&#039; button - There is both a &#039;&#039;&#039;Temp Variable&#039;&#039;&#039; and &#039;&#039;&#039;Path Variable&#039;&#039;&#039;.&lt;br /&gt;
:: There are 2 sections, User Account Variables and System Variables.  You normally want to add new &#039;&#039;&#039;System Variables&#039;&#039;&#039;.&lt;br /&gt;
::: Click &#039;&#039;&#039;[New]&#039;&#039;&#039; button for a &amp;lt;u&amp;gt;New&amp;lt;/u&amp;gt; System Variable:&lt;br /&gt;
:::: Variable name &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;PARGEN&#039;&#039;&#039;&lt;br /&gt;
:::: Variable value &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;C:\cygwin64\bin\bison&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;&amp;lt; typical for a 64 bit install(for bison.exe in subfolder bin), for 32 bits installs see below for variable &#039;&#039;&#039;set&#039;&#039;&#039; values.&lt;br /&gt;
* Normally add a &#039;&#039;&#039;New&#039;&#039;&#039; variable (var Name plus Value) for each of the &#039;&#039;&#039;eight Set&#039;&#039;&#039; vars commands listed below, 8 environment variable names - such as NARSROOT, CS_DIR, ZIPPRG, PARGEN, etc.&lt;br /&gt;
* If you need to add another Path to an existing variable, each new or added path is separated with a semi-colon.&lt;br /&gt;
* After updating any Environment/Path variable(s) you apparently need to reboot since the above variable changes only affect changes in the Registry until PC is rebooted.&lt;br /&gt;
* The instructions below should also or alternatively work.&lt;br /&gt;
&amp;lt;hr width=25%&amp;gt;&lt;br /&gt;
If you are building from the &#039;&#039;&#039;makefile&#039;&#039;&#039; or working with the GUI C++ Compiler, you&#039;ll need to set &#039;&#039;&#039;eight environment variables&#039;&#039;&#039; in your &#039;&#039;&#039;autoexec.bat&#039;&#039;&#039; file (&#039;&#039;&#039;or&#039;&#039;&#039; see just above for setting Environment Variables via &#039;&#039;&#039;Windows Control Panel&#039;&#039;&#039;). Note that &#039;&#039;Environment variable #n&#039;s&#039;&#039; just below are shown only for helpful reference purposes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REM Path of the root of the NARS2000 project *ending with a backslash*&lt;br /&gt;
Set NARSROOT=C:\NARS2000^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #1&lt;br /&gt;
&lt;br /&gt;
REM Path to Doctor Dump SDK root&lt;br /&gt;
Set CS_DIR=C:\DoctorDumpSDK^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Environment variable #2&lt;br /&gt;
&lt;br /&gt;
REM Path and name of zip program (7-Zip)&lt;br /&gt;
Set ZIPPRG=&amp;quot;C:\Program Files\7-Zip\7z&amp;quot; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #3&lt;br /&gt;
&lt;br /&gt;
REM Path and name of parser generator (bison) &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Environment variable #4 (next line)&lt;br /&gt;
Set PARGEN=C:\Cygwin\bin\bison &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; OR for a 64-bit install &amp;gt;&amp;gt; &amp;amp;nbsp; Set PARGEN=C:\cygwin64\bin\bison&lt;br /&gt;
&lt;br /&gt;
REM Path and name of makedep program&lt;br /&gt;
Set MAKEDEP=%NARSROOT%makedep.php &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #5&lt;br /&gt;
&lt;br /&gt;
REM Path and name of the &amp;lt;makepro.php&amp;gt; program&lt;br /&gt;
Set MAKEPRO=%NARSROOT%makepro.php &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Environment variable #6&lt;br /&gt;
&lt;br /&gt;
REM Folder of SDK (&amp;quot;C:\Program Files\Microsoft SDKs\Windows\v7.0A&amp;quot;)&lt;br /&gt;
Set SDK=U:^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #7&lt;br /&gt;
&lt;br /&gt;
REM MSVC compiler (&amp;quot;C:\Program Files\Microsoft Visual Studio 9.0&amp;quot;)&lt;br /&gt;
Set MSVC=V:\VC^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;75%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Mapping Virtual Drive Letters:&#039;&#039;&#039;&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You will be using Windows &#039;&#039;&#039;subst&#039;&#039;&#039; command to map drive letters as references to drives &#039;&#039;&#039;U:&#039;&#039;&#039; and &#039;&#039;&#039;V:&#039;&#039;&#039; that several of the above &#039;&#039;&#039;environment variables&#039;&#039;&#039; refer to.  Microsoft explanation of &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&#039;&#039;&#039;[https://technet.microsoft.com/en-us/library/bb491006.aspx subst command here]&#039;&#039;&#039;.&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Modify your C:\AutoExec.bat file to include something approximating the following highlighted text(version#/32/64 bit installs each vary), &#039;&#039;&#039;include&#039;&#039;&#039; the enclosing quote chars just below:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;subst U: &amp;quot;C:\Program Files\Microsoft SDKs\Windows\v7.0A&amp;quot;&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;(or whatever your current version is)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;subst V: &amp;quot;C:\Program Files\Microsoft Visual Studio 9.0&amp;quot;&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (ditto re version  9.0=Visual Studio 2008)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If you do &amp;lt;u&amp;gt;not have&amp;lt;/u&amp;gt; an &#039;&#039;&#039;AutoExec.bat&#039;&#039;&#039; file (many &#039;&#039;&#039;Windows 7 and 8&#039;&#039;&#039; users may not):&lt;br /&gt;
: Create a &amp;lt;u&amp;gt;new text document&amp;lt;/u&amp;gt; using Windows File Explorer, rename it as AutoExec.bat and move(or copy) it to the &#039;&#039;&#039;C:\&#039;&#039;&#039; drive folder &#039;&#039;&#039;with the above two subst&#039;&#039;&#039; commands in it.&lt;br /&gt;
: Windows 7 and 8 users: File AutoExec.bat no longer automatically gets run at system-user boot-up so &#039;&#039;&#039;place a Shortcut to AutoExec.bat&#039;&#039;&#039; in the Program files &#039;&#039;&#039;Startup&#039;&#039;&#039; folder location(navigate Windows File Explorer to &#039;&#039;&#039;one&#039;&#039;&#039; of the below locations, right-click, &#039;&#039;&#039;New&#039;&#039;&#039;, &#039;&#039;&#039;Shortcut&#039;&#039;&#039;, &#039;&#039;&#039;AutoExec.bat&#039;&#039;&#039;).  The Windows 7/8 Startup Folder usually is located as follows:&lt;br /&gt;
:: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (general/all users Startup folder) &#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
:: C:\Users\&#039;&#039;&#039;UserName&#039;&#039;&#039;\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (single user Startup folder, &#039;&#039;&#039;UserName varies&#039;&#039;&#039;)&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039;: A successfully mapped &#039;&#039;&#039;V&#039;&#039;&#039; drive should contain a sub-sub-subfolder which then contains the &#039;&#039;&#039;amd64\nmake.exe&#039;&#039;&#039; (64-bit systems) file or &#039;&#039;&#039;bin\nmake.exe&#039;&#039;&#039; (32-bit systems), e.g. &#039;&#039;&#039;typical&#039;&#039;&#039; 64-bit configuration/location:&amp;lt;br&amp;gt;&#039;&#039;&#039;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\nmake.exe&#039;&#039;&#039;.&lt;br /&gt;
:The V drive map would &#039;&#039;&#039;only&#039;&#039;&#039; include linking through subfolder &#039;&#039;&#039;\Visual Studio 9.0&#039;&#039;&#039;.  After creating the linked drives, just &#039;&#039;&#039;check&#039;&#039;&#039; to make sure your mapped &#039;&#039;&#039;V&#039;&#039;&#039; drive has the &#039;&#039;&#039;nmake.exe&#039;&#039;&#039; contained one or several subfolder levels below it. The NARS2000.exe automated Compile/Build uses &#039;&#039;&#039;nmake.exe&#039;&#039;&#039; during exe construction.  64-bit installs require the &#039;&#039;&#039;amd64\nmake.exe&#039;&#039;&#039; file - paradoxically even if your machine&#039;s chipset is Intel, a minor Microsoft variation.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Typical mapped configurations just below, but again each install/version# may vary:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;U&#039;&#039;&#039; = &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;C:\Program Files\Microsoft SDKs\Windows\v7.0A&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; (or v6.0A or whatever your downloaded/current version is)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;V&#039;&#039;&#039; = &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;C:\Program Files\Microsoft Visual Studio 9.0&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (or &#039;&#039;&#039;C:\Program Files (x86)\Microsoft Studio 9.0&#039;&#039;&#039; for 64-bit installs, again look for nmake.exe in a subfolder)&amp;lt;br&amp;gt;&lt;br /&gt;
As a &#039;&#039;&#039;check&#039;&#039;&#039; to make sure the &#039;&#039;&#039;subst&#039;&#039;&#039; commands worked, there should now be &#039;&#039;&#039;2 new drive letters visible in Windows Explorer, in the leftmost window for virtual drives/mapped folders - U and V&#039;&#039;&#039;.  &#039;&#039;To avoid having to reboot&#039;&#039; at present, just &#039;&#039;&#039;open&#039;&#039;&#039;(not edit but run) &#039;&#039;&#039;AutoExec.bat AFTER&#039;&#039;&#039; making sure it is 100% correctly configured.  Having a correctly configured AutoExec.bat file will ensure not having to manually link drives U and V each time the NARS2000.exe is built-rebuilt.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;40%&amp;quot;&amp;gt;&lt;br /&gt;
If you install NARS project tools in other folders, make appropriate changes to the above mappings.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lastly don&#039;t forget:&#039;&#039;&#039; To append three folders: &#039;&#039;&#039;C:\cygwin64\bin&#039;&#039;&#039; , &#039;&#039;&#039;V:\Common7\IDE&#039;&#039;&#039; and &#039;&#039;&#039;C:\PHP&#039;&#039;&#039; to your &#039;&#039;&#039;Path&#039;&#039;&#039; variable &#039;&#039;&#039;PATH=%PATH%;C:\cygwin64\bin;V:\Common7\IDE;C:\PHP&#039;&#039;&#039; or see &#039;&#039;&#039;Control Panel&#039;&#039;&#039; search for &#039;&#039;&#039;Path&#039;&#039;&#039;, then &#039;&#039;&#039;Edit&#039;&#039;&#039; System Environment Variables for your account, system variable named &#039;&#039;&#039;Path&#039;&#039;&#039;; append to that &#039;&#039;&#039;Path&#039;&#039;&#039; variable &amp;amp;nbsp; &#039;&#039;&#039;;C:\cygwin64\bin;V:\Common7\IDE;C:\PHP&#039;&#039;&#039; &amp;amp;nbsp; - (three additional paths, semicolon separated) so Visual C&#039;s &#039;&#039;&#039;Make&#039;&#039;&#039; plus &#039;&#039;&#039;Compiler&#039;&#039;&#039; can find DLLs, exe&#039;s and Tools you have so diligently downloaded, then installed.&lt;br /&gt;
&lt;br /&gt;
==Pre First Compile and Localization Notes==&lt;br /&gt;
&lt;br /&gt;
Make/Compile local Environment Variable &#039;&#039;&#039;%NARSROOT%&#039;&#039;&#039; is presently set using file &#039;&#039;&#039;C:\NARS2000\trunk\wcustomize.bat&#039;&#039;&#039;.  This bat file is called by other major trigger-compile bat files such as mk32.bat, mk64.bat, w32.bat and w64.bat - which oversee-initiate compilation.  The %NARSROOT% environment variable is important in indicating &amp;lt;u&amp;gt;where&amp;lt;/u&amp;gt; Make/Compilation will occur.  &amp;lt;u&amp;gt;Before&amp;lt;/u&amp;gt; first locally compiling NARS2000, you likely need to manually edit (using Notepad or a local text file editor) file &amp;lt;u&amp;gt;&#039;&#039;&#039;trunk\wcustomize.bat&#039;&#039;&#039;&amp;lt;/u&amp;gt; and make sure the following are initially correct per your &#039;local PC NARS installation&#039; i.e. within wcustomize.bat:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Set NARSROOT=C:\NARS2000^\&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (Note: &#039;&#039;&#039;No %&#039;&#039;&#039; symbols are needed in &amp;lt;u&amp;gt;set/specification&amp;lt;/u&amp;gt; rows in wcustomize.bat, e.g. replace &#039;R:\NARS2000&#039; to &#039;C:\NARS2000&#039; as shown at left)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Set CS_DIR=C:\DoctorDumpSDK^\&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; (again R:\ was changed to C:\)&amp;lt;br&amp;gt;&lt;br /&gt;
The additional hat(^) symbol in the above bat commands is needed for directory/folder recombination purposes, essentially sub-directory parse-point identification and or recombination point, where NARS may use subdirectories/parsing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prior&#039;&#039;&#039; to using &#039;&#039;&#039;Visual Studio&#039;&#039;&#039; and its &#039;&#039;&#039;IDE&#039;&#039;&#039;(integrated developer&#039;s environment) for NARS Building/Compilation purposes a first time, and to help ensure the proper installation of NARS source code - it is very helpful/necessary to open a CMD.EXE window using &amp;lt;big&amp;gt;&#039;&#039;&#039;Windows Start&#039;&#039;&#039;, &#039;&#039;&#039;CMD.EXE&#039;&#039;&#039;&amp;lt;/big&amp;gt;.  This will open up a small CMD window.  While &amp;lt;big&amp;gt;inside the opened CMD.EXE window&amp;lt;/big&amp;gt;, navigate to your local C:\NARS2000\trunk folder, using &amp;lt;big&amp;gt;&#039;&#039;&#039;cd C:\NARS2000\trunk&#039;&#039;&#039;&amp;lt;/big&amp;gt; where cd represents change directory.  Now run &amp;lt;big&amp;gt;&#039;&#039;&#039;mk32.bat&#039;&#039;&#039;&amp;lt;/big&amp;gt; by typing it in, to compile NARS2000&#039;s 32-bit executable.  If mk32.bat is successful and if your installation is 100% correct, two identical files in separate folders will be created(built and compiled) using bat commands from inside that CMD window/session:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\RET\ND32\NARS2000.exe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\binaries\ND32\NARS2000.exe&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If that 32-bit NARS make/build was successful, then from the same CMD.EXE window, type &amp;lt;big&amp;gt;&#039;&#039;&#039;mk64.bat&#039;&#039;&#039;&amp;lt;/big&amp;gt;. This should likewise compile locally the &#039;&#039;&#039;64-bit&#039;&#039;&#039; NARS Executable, with again two resulting &#039;&#039;&#039;exe output files:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\RET\ND64\NARS2000.exe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\binaries\ND64\NARS2000.exe&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Successfully completing mk32.bat and mk64.bat along with presence of their respective &#039;&#039;&#039;NARS2000.exe&#039;&#039;&#039; output files generally confirm successful installation of NARS source code, as well as correct installation for several associated tandem utility tools re compiling NARS2000.exe on your server, PC, notebook or tablet computer.&lt;br /&gt;
&lt;br /&gt;
==Building The Executable==&lt;br /&gt;
&lt;br /&gt;
Congratulations, if you&#039;ve successfully arrived at this section, your resume now includes such useful terms as software installation wizard and relentless software engineering candidate.  You are part of an elite group - the few, the proud, NARS geek marines; also known as tomorrow&#039;s APL-symbol-set event-horizon squad.  You&#039;ve managed to easily or otherwise cross several potentially deep programming ravines in the process.&lt;br /&gt;
&lt;br /&gt;
At this point you should be ready to build the executable, again - this time however from inside Visual Studio&#039;s IDE(integrated developer&#039;s environment).  There are two general ways to build NARS executable.  Method one: Involves the time-honored command-line batch file compile mode using files mk32.bat or mk64.bat - as you should have previously discovered in the section &#039;&#039;&#039;[[#Pre_First_Compile_and_Localization_Notes|Pre First Compile and Localization Notes]]&#039;&#039;&#039; while using Windows CMD.EXE.&lt;br /&gt;
&lt;br /&gt;
Method two: Involves again first opening a (Windows Start button) &#039;&#039;&#039;CMD.EXE&#039;&#039;&#039; window and running &#039;&#039;&#039;w32.bat start&#039;&#039;&#039; (all one command) or &#039;&#039;&#039;w64.bat start&#039;&#039;&#039;.  Immediately or shortly, you should see Visual Studio 2013&#039;s program visualize, load and run - with either the 32-bit or 64-bit NARS2000 project/program loaded.  After Visual Studio 2013 finishes loading - simply click Build.  Full use of Visual Studio 2013&#039;s IDE (integrated developer&#039;s environment) should now be available for you to experiment with, develop code on, debug and customize APL as you may choose.  Your first time through with running &#039;&#039;&#039;w32.bat start&#039;&#039;&#039; and &#039;&#039;&#039;w64.bat start&#039;&#039;&#039;:&lt;br /&gt;
* There is usually a Visual Studio &#039;&#039;&#039;One Way Migration&#039;&#039;&#039; message which displays.  This is normal, TBE(to be expected), and yes you DO at that point want to migrate the NARS2000 project to Visual Studio 2013.  There are usually roughly 20 migration warnings which also show up in an Internet Browser page re the Migration Report - again, all normally to be expected.  However, there should be &#039;&#039;&#039;&amp;lt;u&amp;gt;zero errors&amp;lt;/u&amp;gt;&#039;&#039;&#039; in the migration report.&lt;br /&gt;
* If all went satisfactorily well with the Migration, you should be able to select/choose/Click &#039;&#039;&#039;Build Solution&#039;&#039;&#039; under Build in VS2013&#039;s IDE to fully compile NARS2000 executable.  After Build, there should likewise be zero errors.&lt;br /&gt;
&lt;br /&gt;
Special note regarding &#039;&#039;&#039;w32.bat start&#039;&#039;&#039; and &#039;&#039;&#039;w64.bat start&#039;&#039;&#039; while in Visual Studio&#039;s IDE for the NARS2000 project:&lt;br /&gt;
When &amp;lt;u&amp;gt;switching&amp;lt;/u&amp;gt; between 32 and 64-bit versions, i.e. w32.bat start &#039;&#039;&#039;versus&#039;&#039;&#039; w64.bat start: There is a &#039;&#039;&#039;Property&#039;&#039;&#039; adjustment required when using Visual Studio&#039;s IDE.  After Visual Studio opens up and in the Solution Explorer window (usually on the upper right hand side of your screen) click on &amp;quot;Solution &#039;nars2000&#039; (1 project).&amp;quot;  This should then show a Properties Window just below it.  Look for a line which reads: &#039;&#039;&#039;Active config&#039;&#039;&#039;.  If you ran w32.bat start then Active config should have a value of &#039;&#039;&#039;Debug32|Win32&#039;&#039;&#039;.  If you ran w64.bat start then Active config should have a value of &#039;&#039;&#039;Debug64|Win32&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== NARS Systems Developer Suggested Knowledge Prequisites ==&lt;br /&gt;
&lt;br /&gt;
For a strongly recommended set of knowledge prerequisites - in order to effectively understand, maintain or improve NARS functionality - please see &#039;&#039;&#039;[[NARS System Developer Suggested Knowledge Prerequisites|NARS System Developer Suggested Knowledge Prerequisites]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Developer Experiments with NARS Source Code==&lt;br /&gt;
&lt;br /&gt;
This section is for Developers who have successfully downloaded NARS source code and want to Experiment with it, or further develop NARS APL Interpreter&#039;s source code.&lt;br /&gt;
&lt;br /&gt;
For development and debugging purposes: You as APL Interpreter developer normally want to want to &amp;lt;u&amp;gt;first&amp;lt;/u&amp;gt; write new source code/model using the &amp;lt;u&amp;gt;32-bit version&amp;lt;/u&amp;gt; of NARS2000 (w32.bat start).  This is because the 32-bit version is easier to debug than the 64-bit version; error messages can be less complex.  Migrating &#039;&#039;&#039;correct source code&#039;&#039;&#039; forward from the 32-bit version to the 64-bit version is also easier than a reverse migration.&lt;br /&gt;
&lt;br /&gt;
You will also at some point still need to be synched-with or later synch-back-to NARS online source code - i.e. after experimenting/changing local PC source code.  This is equivalent to a ChemLab 101 at home/home-office and cleaning up all experiments at the end of the chemistry class, except as it applies to software developers, NARS software developers, and or those inclined to experiment safely.&lt;br /&gt;
&lt;br /&gt;
Here is where Tortoise SVN provides excellent and time-tested source-code clean-up tools for your local PC, including &#039;&#039;&#039;Resolve, Revert, Clean up, and Undo changes&#039;&#039;&#039;.  Pull up these TortoiseSVN utilities by navigating Windows File Explorer to directory C:\NARS2000.  If you successfully previously downloaded and Installed TortoiseSVN and NARS2000 source code, as outlined earlier/above, you may right click on say the \trunk subfolder in C:\NARS2000.  A mouse right-click on \trunk should show an option labeled TortoiseSVN.  Further choosing/selecting TortoiseSVN should then reveal multiple clean up options - Resolve, Revert, Clean up and Undo changes.&amp;lt;br&amp;gt;&#039;&#039;&#039;TortoiseSVN Documentation on:&#039;&#039;&#039;&amp;lt;br&amp;gt;[http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-cleanup.html Clean up.]&amp;lt;br&amp;gt;[http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-revert.html Undo Changes.]&amp;lt;br&amp;gt;[http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-conflicts.html Resolving Conflicts.]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At least one method to safely synch-back-to NARS is to:&lt;br /&gt;
# Select &#039;&#039;&#039;TortoiseSVN&#039;&#039;&#039; after right-clicking on the trunk folder&lt;br /&gt;
# Select &#039;&#039;&#039;Revert&#039;&#039;&#039;, click &#039;&#039;&#039;OK&#039;&#039;&#039;, let it run.&lt;br /&gt;
# Select &#039;&#039;&#039;Clean up&#039;&#039;&#039;, check &#039;&#039;&#039;Refresh shell overlays&#039;&#039;&#039;, click &#039;&#039;&#039;OK&#039;&#039;&#039;, let it run.&lt;br /&gt;
Per TortoiseSVN there should again be green check marks appearing on your trunk folder as well as your msieve folder.&lt;br /&gt;
&lt;br /&gt;
For revision tracking and long-term software program maintenance purposes: &#039;&#039;&#039;Keep track of which files (file names) you personally modify, including a brief purpose&#039;&#039;&#039; for that edit.  You will need to this information later for Release Notes purposes (see folder C:\NARS2000\trunk\ReleaseNotes for best-practice-examples of developer note-taking) and if you later synch to a new online NARS version, you may have to carry-forward your edit changes into a newly downloaded set of NARS source code files which may or may not reflect your prior local computer edit changes.&lt;br /&gt;
&lt;br /&gt;
==Periodic NARS Updates==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Incremental Update&amp;lt;/u&amp;gt; - Method 1:&amp;lt;br&amp;gt;&lt;br /&gt;
Periodically, NARS APL interpreter developers should ensure changes done by other developers get incorporated into their local machine&#039;s source code working copy. This is the process of integrating/downloading changes from NARS SourceForge server &#039;&#039;&#039;&amp;lt;u&amp;gt;to&amp;lt;/u&amp;gt;&#039;&#039;&#039; your local copy. Updating may be performed on single files, a set of selected files, or recursively on entire directory hierarchies. To update, select the files and/or &#039;&#039;&#039;directories&#039;&#039;&#039; you want (usually \trunk and or \msieve), right click and select &#039;&#039;&#039;TortoiseSVN → Update&#039;&#039;&#039; in the explorer context menu for that trunk or msieve folder. A window will pop up displaying the progress of the update as it runs. Changes done by other developers will be merged into your local files, &#039;&#039;&#039;keeping&#039;&#039;&#039; any changes you may have done to the same files - if you did not want to keep your local changes but do want to keep the downloaded changes, select TortoiseSVN and Revert &#039;&#039;&#039;prior&#039;&#039;&#039; to running TortoiseSVN Update. NARS repository at SourceForge is &#039;&#039;&#039;not&#039;&#039;&#039; affected by an update to your local copy. [http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-update.html Update Your Working Copy With Changes From Others]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Total Source Code Replacement&amp;lt;/u&amp;gt; - Method 2:&amp;lt;br&amp;gt;&lt;br /&gt;
For example from version r1325 to say version r1364 (note a significant revision/datetime gap between 1325 and 1364, hypothetically), whatever NARS latest revision number is.  Total code replacement may be preferred over incremental updating when major structural changes or significant source code changes are newly in situ.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Total Replacement Process: Visually scan NARS source code page at http://sourceforge.net/p/nars2000/code/HEAD/tree/trunk/ and review the top 25 to 40 file entries or so, while mentally keeping track of the &#039;&#039;&#039;highest revision number found&#039;&#039;&#039;(e.g. r1379). If after your last/earlier TortoiseSVN Update, your local version number is lower than the latest revision number visually found online, then perform the following to update to the most recent NARS revision:&lt;br /&gt;
# Rename your existing NARS folder to something approximating C:\NARS2000_old_rev&lt;br /&gt;
# Create an entirely new C:\NARS2000 folder&lt;br /&gt;
# &#039;&#039;&#039;Copy all folders and files at the &amp;lt;u&amp;gt;top level&amp;lt;/u&amp;gt;&#039;&#039;&#039; from C:\NARS2000_old_rev folder into C:\NARS2000 &#039;&#039;&#039;EXCEPT \trunk and \msieve subfolders (and their contents)&#039;&#039;&#039;.  The \trunk and \msieve folders will shortly be downloaded from SourceForge.&lt;br /&gt;
# Create &#039;&#039;&#039;new empty folders called \trunk and \msieve&#039;&#039;&#039; in the new C:\NARS2000 folder.&lt;br /&gt;
# Revisit the section above called &#039;&#039;&#039;[[#Check_Out_The_Source_Code|Check Out The Source Code]]&#039;&#039;&#039; to again checkout/download to the absolute latest NARS version number, for both \trunk and \msieve folders.&lt;br /&gt;
# Also revisit &#039;&#039;&#039;[[#Pre_First_Compile_and_Localization_Notes|Pre First Compile and Localization Notes]]&#039;&#039;&#039; and text edit file \trunk\wcustomize.bat to localize the new version.&lt;br /&gt;
# Folder C:\NARS2000_old_rev may be &#039;&#039;&#039;Recycled&#039;&#039;&#039; after you are done copying non-trunk and non-msieve files/folders from it into your new C:\NARS2000 folder.  If disk space is not restrictive and for 100% safety purposes, keep your prior folder available until after successfully &#039;&#039;&#039;Building/Compiling&#039;&#039;&#039; the newly downloaded 32-bit and 64-bit versions, and making sure you did not have any local personal changes now potentially being recycled.&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Symbol_Zilde&amp;diff=2853</id>
		<title>Symbol Zilde</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Symbol_Zilde&amp;diff=2853"/>
		<updated>2016-03-12T01:13:26Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: expanded meaning, frame of ref. example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;h2&amp;gt; {zilde} &amp;amp;mdash; Represents an &#039;&#039;&#039;empty numeric vector&#039;&#039;&#039; or &#039;&#039;zero plus tilde&#039;&#039; (hence zilde) &amp;amp;mdash; Keystroke Alt + Shift + }  &amp;amp;mdash; Character ⎕UCS &#039;⍬&#039; = 9068&amp;lt;/h2&amp;gt;&lt;br /&gt;
==Usage==&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⌊/⍬&amp;lt;br /&amp;gt;&lt;br /&gt;
∞&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⌈/⍬&amp;lt;br /&amp;gt;&lt;br /&gt;
¯∞&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Symbolically zero or &#039;&#039;&#039;&amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt;&#039;&#039;&#039; represents &#039;&#039;&#039;number&#039;&#039;&#039; while tilde or &#039;&#039;&#039;&amp;lt;apll&amp;gt;{tilde}&amp;lt;/apll&amp;gt;&#039;&#039;&#039; represents &#039;&#039;&#039;not.&#039;&#039;&#039;  Together the overstrike zilde symbol or &#039;&#039;&#039;&amp;lt;apll&amp;gt;⍬&amp;lt;/apll&amp;gt;&#039;&#039;&#039; means &#039;&#039;not a number&#039;&#039;, i.e. empty numeric vector.  APL frequently uses overstrike characters in &#039;&#039;&#039;dual-combined meaning,&#039;&#039;&#039; thus &#039;&#039;&#039;&amp;lt;apll&amp;gt;{quotequad}&amp;lt;/apll&amp;gt;&#039;&#039;&#039; which is &#039;&#039;&#039;&amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;&#039;&#039;&#039; or prompt and the single quote symbol yielding &#039;&#039;prompt for string&#039;&#039; or &amp;lt;u&amp;gt;character input&amp;lt;/u&amp;gt; &#039;&#039;&#039;versus&#039;&#039;&#039; &#039;&#039;&#039;&amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;&#039;&#039;&#039; or prompt for &amp;lt;u&amp;gt;numeric input&amp;lt;/u&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
==Example==&lt;br /&gt;
The above examples for infinity and negative infinity correctly run in NARS2000. In &#039;&#039;&#039;theory ONLY - {zilde}&#039;&#039;&#039; would be hypothetically equivalent to &amp;lt;apll&amp;gt;⍳0&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;0⍴N&amp;lt;/apll&amp;gt; (where N is any number) since zilde or {zilde} represents an empty numeric vector.&lt;br /&gt;
==See Also==&lt;br /&gt;
[[Infinity|Infinity &amp;lt;apll&amp;gt;∞&amp;lt;/apll&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Language Toolbar}}&lt;br /&gt;
[[Category:Mouse Group 12]]&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Symbol_Zilde&amp;diff=2852</id>
		<title>Symbol Zilde</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Symbol_Zilde&amp;diff=2852"/>
		<updated>2016-03-11T21:10:36Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: Initial definition&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;h2&amp;gt; {zilde} &amp;amp;mdash; Represents an &#039;&#039;&#039;empty numeric vector&#039;&#039;&#039; or &#039;&#039;zero plus tilde&#039;&#039; (hence zilde) &amp;amp;mdash; Keystroke Alt + Shift + }  &amp;amp;mdash; Character ⎕UCS &#039;⍬&#039; = 9068&amp;lt;/h2&amp;gt;&lt;br /&gt;
==Usage==&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⌊/⍬&amp;lt;br /&amp;gt;&lt;br /&gt;
∞&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⌈/⍬&amp;lt;br /&amp;gt;&lt;br /&gt;
¯∞&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
==Example==&lt;br /&gt;
The above examples for infinity and negative infinity correctly run in NARS2000. In &#039;&#039;&#039;theory ONLY - {zilde}&#039;&#039;&#039; would be hypothetically equivalent to &amp;lt;apll&amp;gt;⍳0&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;0⍴N&amp;lt;/apll&amp;gt; (where N is any number) since zilde or {zilde} represents an empty numeric vector.&lt;br /&gt;
==See Also==&lt;br /&gt;
[[Infinity|Infinity &amp;lt;apll&amp;gt;∞&amp;lt;/apll&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Language Toolbar}}&lt;br /&gt;
[[Category:Mouse Group 12]]&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=APL_Font&amp;diff=2848</id>
		<title>APL Font</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=APL_Font&amp;diff=2848"/>
		<updated>2016-02-20T16:16:38Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Default Keyboard Layout */  added tilde Alt-t&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Default Font==&lt;br /&gt;
&lt;br /&gt;
The default APL font for NARS2000 (its APL Interpreter session, function editing, screen display and printing purposes) and this wiki is &#039;&#039;&#039;SImPL medium&#039;&#039;&#039;(Unicode based), &#039;&#039;&#039;SImPL&#039;&#039;&#039;, or &#039;&#039;&#039;APL385 Unicode&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If the APL characters in the articles don&#039;t display correctly, you may obtain a copy of the &#039;&#039;&#039;SImPL medium&#039;&#039;&#039; font by downloading the current [http://www.nars2000.org/download/Download.html NARS2000 binary], or the &#039;&#039;&#039;SImPL&#039;&#039;&#039; font from [http://archive.vector.org.uk/resource/simpl02.zip here], or the &#039;&#039;&#039;APL385 Unicode&#039;&#039;&#039; font from [http://archive.vector.org.uk/resource/apl385.ttf here].  Normally font and file &#039;&#039;&#039;SimPL-Medium.ttf&#039;&#039;&#039; may  be found in your downloaded NARS2000 program folder, e.g. &#039;&#039;&#039;C:\Program Files (x86)\NARS2000 (32-bit program)&#039;&#039;&#039; and or &#039;&#039;&#039;C:\Program Files\NARS2000 (64-bit version)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If they still don&#039;t display correctly, [http://www.getfirefox.com/ download] FireFox.&lt;br /&gt;
&lt;br /&gt;
==Default Keyboard Layout==&lt;br /&gt;
&lt;br /&gt;
NARS2000 default APL keyboard layout, based on the SImPL medium font, is found &#039;&#039;&#039;[http://www.sudleyplace.com/APL/Keyboard.ahtml here]&#039;&#039;&#039;, on SudleyPlace.com.  Printing the keyboard layout and keeping it in front of you while using NARS2000 - provides a handy reference. Just as typists eventually memorize the QWERTY (oe AZERTY, etc.) keyboard layout, most APL&#039;ers quickly memorize APL keyboard layouts.  A &amp;lt;u&amp;gt;printed keyboard reference&amp;lt;/u&amp;gt; is good to &amp;lt;u&amp;gt;keep&amp;lt;/u&amp;gt; however, if only for some of the lesser used APL symbols.  Several frequently used APL symbols are &amp;lt;u&amp;gt;very easily keyboard-memorized&amp;lt;/u&amp;gt;: &#039;&#039;&#039;∊ (epsilon = Alt-e), ⍴ (rho = Alt-r), ∼ (tilde = Alt-t) and ⍳ (iota = Alt-i)&#039;&#039;&#039; since the beginning letter of the symbol is same-placed as its qwerty letter equivalent in the alphabet.  Also, all of the APL symbols may be found (and copied to the current session or function being edited) from the Language Bar at the top of the APL session window.  Cross ref. wiki page [[Keyboard|Keyboard and Language bar]].&lt;br /&gt;
&lt;br /&gt;
==Font Issues==&lt;br /&gt;
Even if you have an APL font installed, that may not be the end of the story. Each font designer decides what glyphs to display and for which characters. Also, some implementations of supposedly Unicode fonts don&#039;t always display the same glyphs in the same places or in the same way. The &#039;&#039;&#039;SimPL Medium&#039;&#039;&#039; font, which comes with NARS2000, will display some characters with different glyphs than are displayed by the font &#039;&#039;&#039;APL385 Unicode&#039;&#039;&#039;.  For example, these are the underlined letters A to Z, which are valid identifiers in APL: &amp;lt;u&amp;gt;A&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;B&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;C&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;D&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;E&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;F&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;G&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;H&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;I&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;J&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;K&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;L&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;M&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;N&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;O&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;P&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;Q&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;R&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;S&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;T&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;U&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;V&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;W&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;X&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;Y&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;Z&amp;lt;/u&amp;gt;. Now, to display these characters in &#039;&#039;APL385 Unicode&#039;&#039;, the characters use code positions 9398 through 9423, or 0x24B6 through 0x24CF, which show up as &amp;amp;#9398; &amp;amp;#9399; &amp;amp;#9400; &amp;amp;#9401; &amp;amp;#9402; &amp;amp;#9403; &amp;amp;#9404; &amp;amp;#9405; &amp;amp;#9406; &amp;amp;#9407; &amp;amp;#9408; &amp;amp;#9409; &amp;amp;#9410; &amp;amp;#9411; &amp;amp;#9412; &amp;amp;#9413; &amp;amp;#9414; &amp;amp;#9415; &amp;amp;#9416; &amp;amp;#9417; &amp;amp;#9418; &amp;amp;#9419; &amp;amp;#9420; &amp;amp;#9421; &amp;amp;#9422; &amp;amp;#9423;, which, while not the same, is very close.  When copying underlined APL characters to the clipboard, you may convert them to lowercase by first setting the user preference &amp;quot;Underbar alphabet converted to lowercase&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The standard &#039;&#039;&#039;Arial&#039;&#039;&#039; font doesn&#039;t even have a built-in set of underlined characters, nor does SimPL. (Yet note some glyphs, as shown below, that are used by NARS2000, are not present in APL385.)&lt;br /&gt;
&lt;br /&gt;
Also, the settings for Unicode for APL symbols, which are listed as being 0x2300 - 0x23F3, do not necessarily appear - or appear the same - in all APL fonts.&lt;br /&gt;
&lt;br /&gt;
==Extra APL Glyphs==&lt;br /&gt;
&lt;br /&gt;
While any Unicode APL font will display all of the standard APL glyphs, NARS2000 uses (or has plans to use) some extra glyphs not found in all Unicode APL fonts such as&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Name&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Symbol&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Unicode&amp;lt;br /&amp;gt;Code Point&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Keystroke&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
||Section&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&amp;lt;apll&amp;gt;§&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&amp;amp;ensp;167 or U+00A7 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&#039;&#039;&#039;Alt-S&#039;&#039;&#039;&lt;br /&gt;
| [[Multisets#Missing_Function|Multiset Symmetric Difference]]&lt;br /&gt;
|-&lt;br /&gt;
||Pi&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;π&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;amp;ensp;960 or U+03C0  &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-p&#039;&#039;&#039;&lt;br /&gt;
|| [[Primes|Prime Decomposition and Number-theoretic]]&lt;br /&gt;
|-&lt;br /&gt;
||Root&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;√&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8730 or U+221A&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-R&#039;&#039;&#039;&lt;br /&gt;
|| [[Root|Square Root and Nth Root]]&lt;br /&gt;
|-&lt;br /&gt;
||Infinity&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;∞&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8734 or U+221E  &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-f&#039;&#039;&#039;&lt;br /&gt;
|| [[Infinity]]&lt;br /&gt;
|-&lt;br /&gt;
|| Mismatch&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;≢&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8802 or U+2262 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-@&#039;&#039;&#039;&lt;br /&gt;
|| [[Mismatch]]&lt;br /&gt;
|-&lt;br /&gt;
||Left-shoe-underbar&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⊆&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8838 or U+2286 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-Z&#039;&#039;&#039;&lt;br /&gt;
|| [[Sets|Subset of]]&lt;br /&gt;
|-&lt;br /&gt;
|| Right-shoe-underbar&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⊇&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8839 or U+2287 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-X&#039;&#039;&#039;&lt;br /&gt;
|| [[Sets|Superset of]]&lt;br /&gt;
|-&lt;br /&gt;
||Circle-middle-dot&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⊙&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8857 or U+2299 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-?&#039;&#039;&#039;&lt;br /&gt;
|| [[Null|Null operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Quad-colon&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍠&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9056 or U+2360 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-_&#039;&#039;&#039;&lt;br /&gt;
|| [[Variant|Variant operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-downtack&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍡&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9057 or U+2361 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-N&#039;&#039;&#039;&lt;br /&gt;
|| [[Convolution|Convolution operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-del&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍢&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9058 or U+2362 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-G&#039;&#039;&#039;&lt;br /&gt;
|| [[Dual|Dual operator&amp;lt;b&amp;gt;]]&amp;amp;dagger;&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-star&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍣&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9059 or U+2363 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-P&#039;&#039;&#039;&lt;br /&gt;
|| [[Power|Power operator]]&amp;lt;b&amp;gt;&amp;amp;dagger;&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-jot&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍤&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9060 or U+2364 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-J&#039;&#039;&#039;&lt;br /&gt;
|| [[Rank|Rank operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-circle&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍥&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9061 or U+2365 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-O&#039;&#039;&#039;&lt;br /&gt;
|| [[Composition|Composition operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Down-shoe-stile&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍦&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9062 or U+2366 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-m&#039;&#039;&#039;&lt;br /&gt;
|| [[Multisets|Multiset operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-tilde&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍨&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9064 or U+2368 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-T&#039;&#039;&#039;&lt;br /&gt;
|| [[Commute|Commute operator]]&lt;br /&gt;
|-&lt;br /&gt;
|| Del-tilde&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍫&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9067 or U+236B&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-k&#039;&#039;&#039;&lt;br /&gt;
|| [[Commutator|Commutator operator]]&amp;lt;b&amp;gt;&amp;amp;dagger;&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Zilde&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍬&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9068 or U+236C&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-}&#039;&#039;&#039;&lt;br /&gt;
|| Empty simple numeric vector&lt;br /&gt;
|-&lt;br /&gt;
|| Stile-tilde&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍭&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9069 or U+236D&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-M&#039;&#039;&#039;&lt;br /&gt;
|| [[Partition|Partition operator]]&amp;lt;b&amp;gt;&amp;amp;dagger;&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;amp;dagger;&amp;lt;/b&amp;gt; = Not currently implemented.&lt;br /&gt;
&lt;br /&gt;
All of the above glyphs may be found in &#039;&#039;&#039;SImPL medium&#039;&#039;&#039;, all but the Infinity symbol in &#039;&#039;&#039;SImPL&#039;&#039;&#039;, and all but the Null operator in &#039;&#039;&#039;APL385 Unicode&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=APL_Font&amp;diff=2846</id>
		<title>APL Font</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=APL_Font&amp;diff=2846"/>
		<updated>2016-02-17T23:53:01Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: added cross ref to keyboard wiki page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Default Font==&lt;br /&gt;
&lt;br /&gt;
The default APL font for NARS (its APL Interpreter session, function editing, screen display and printing purposes) and this wiki is &#039;&#039;&#039;SImPL medium&#039;&#039;&#039;(Unicode based), &#039;&#039;&#039;SImPL&#039;&#039;&#039;, or &#039;&#039;&#039;APL385 Unicode&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If the APL characters in the articles don&#039;t display correctly, you may obtain a copy of the &#039;&#039;&#039;SImPL medium&#039;&#039;&#039; font by downloading the current [http://www.nars2000.org/download/Download.html NARS2000 binary], or the &#039;&#039;&#039;SImPL&#039;&#039;&#039; font from [http://archive.vector.org.uk/resource/simpl02.zip here], or the &#039;&#039;&#039;APL385 Unicode&#039;&#039;&#039; font from [http://archive.vector.org.uk/resource/apl385.ttf here].  Normally font and file &#039;&#039;&#039;SimPL-Medium.ttf&#039;&#039;&#039; may  be found in your downloaded NARS2000 program folder, e.g. &#039;&#039;&#039;C:\Program Files (x86)\NARS2000 (32-bit program)&#039;&#039;&#039; and or &#039;&#039;&#039;C:\Program Files\NARS2000 (64-bit version)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If they still don&#039;t display correctly, [http://www.getfirefox.com/ download] FireFox.&lt;br /&gt;
&lt;br /&gt;
==Default Keyboard Layout==&lt;br /&gt;
&lt;br /&gt;
NARS default APL keyboard layout, based on the SImPL medium font, is found here &#039;&#039;&#039;[http://www.sudleyplace.com/APL/Keyboard.ahtml here]&#039;&#039;&#039;, on SudleyPlace.com.  Printing the keyboard layout and keeping it in front of you while using NARS - provides a handy reference. Just as typists eventually memorize the QWERTY keyboard layout, most APL&#039;ers quickly memorize APL keyboard layouts.  A &amp;lt;u&amp;gt;printed keyboard reference&amp;lt;/u&amp;gt; is good to &amp;lt;u&amp;gt;keep&amp;lt;/u&amp;gt; however, if only for some of the lesser used APL symbols.  Several frequently used APL symbols are &amp;lt;u&amp;gt;very easily keyboard-memorized&amp;lt;/u&amp;gt;: &#039;&#039;&#039;∊ (epsilon = Alt-e), ⍴ (rho = Alt-r) and ⍳ (iota = Alt-i)&#039;&#039;&#039; since the beginning letter of the symbol is same-placed as its qwerty letter equivalent in the alphabet.  Cross ref. wiki page [[Keyboard|keyboard]].&lt;br /&gt;
&lt;br /&gt;
==Font Issues==&lt;br /&gt;
Even if you have an APL font installed, that may not be the end of the story. Each font designer decides what glyphs to display and for which characters. Also, some implementations of supposedly Unicode fonts don&#039;t always display the same glyphs in the same places or in the same way. The &#039;&#039;&#039;SimPL Medium&#039;&#039;&#039; font, which comes with NARS2000, will display some characters with different glyphs than are displayed by the font &#039;&#039;&#039;APL385 Unicode&#039;&#039;&#039;.  For example, these are the underlined letters A to Z, which are valid identifiers in APL: &amp;lt;u&amp;gt;A&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;B&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;C&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;D&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;E&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;F&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;G&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;H&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;I&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;J&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;K&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;L&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;M&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;N&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;O&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;P&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;Q&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;R&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;S&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;T&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;U&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;V&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;W&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;X&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;Y&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;Z&amp;lt;/u&amp;gt;. Now, to display these characters in &#039;&#039;APL385 Unicode&#039;&#039;, the characters use code positions 9398 through 9423, or 0x24B6 through 0x24CF, which show up as &amp;amp;#9398; &amp;amp;#9399; &amp;amp;#9400; &amp;amp;#9401; &amp;amp;#9402; &amp;amp;#9403; &amp;amp;#9404; &amp;amp;#9405; &amp;amp;#9406; &amp;amp;#9407; &amp;amp;#9408; &amp;amp;#9409; &amp;amp;#9410; &amp;amp;#9411; &amp;amp;#9412; &amp;amp;#9413; &amp;amp;#9414; &amp;amp;#9415; &amp;amp;#9416; &amp;amp;#9417; &amp;amp;#9418; &amp;amp;#9419; &amp;amp;#9420; &amp;amp;#9421; &amp;amp;#9422; &amp;amp;#9423;, which, while not the same, is very close.  When copying underlined APL characters to the clipboard, you may convert them to lowercase by first setting the user preference &amp;quot;Underbar alphabet converted to lowercase&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The standard &#039;&#039;&#039;Arial&#039;&#039;&#039; font doesn&#039;t even have a built-in set of underlined characters, nor does SimPL. (Yet note some glyphs, as shown below, that are used by NARS2000, are not present in APL385.)&lt;br /&gt;
&lt;br /&gt;
Also, the settings for Unicode for APL symbols, which are listed as being 0x2300 - 0x23F3, do not necessarily appear - or appear the same - in all APL fonts.&lt;br /&gt;
&lt;br /&gt;
==Extra APL Glyphs==&lt;br /&gt;
&lt;br /&gt;
While any Unicode APL font will display all of the standard APL glyphs, NARS2000 uses (or has plans to use) some extra glyphs not found in all Unicode APL fonts such as&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Name&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Symbol&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Unicode&amp;lt;br /&amp;gt;Code Point&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Keystroke&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
||Section&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&amp;lt;apll&amp;gt;§&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&amp;amp;ensp;167 or U+00A7 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&#039;&#039;&#039;Alt-S&#039;&#039;&#039;&lt;br /&gt;
| [[Multisets#Missing_Function|Multiset Symmetric Difference]]&lt;br /&gt;
|-&lt;br /&gt;
||Pi&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;π&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;amp;ensp;960 or U+03C0  &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-p&#039;&#039;&#039;&lt;br /&gt;
|| [[Primes|Prime Decomposition and Number-theoretic]]&lt;br /&gt;
|-&lt;br /&gt;
||Root&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;√&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8730 or U+221A&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-R&#039;&#039;&#039;&lt;br /&gt;
|| [[Root|Square Root and Nth Root]]&lt;br /&gt;
|-&lt;br /&gt;
||Infinity&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;∞&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8734 or U+221E  &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-f&#039;&#039;&#039;&lt;br /&gt;
|| [[Infinity]]&lt;br /&gt;
|-&lt;br /&gt;
|| Mismatch&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;≢&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8802 or U+2262 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-@&#039;&#039;&#039;&lt;br /&gt;
|| [[Mismatch]]&lt;br /&gt;
|-&lt;br /&gt;
||Left-shoe-underbar&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⊆&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8838 or U+2286 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-Z&#039;&#039;&#039;&lt;br /&gt;
|| [[Sets|Subset of]]&lt;br /&gt;
|-&lt;br /&gt;
|| Right-shoe-underbar&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⊇&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8839 or U+2287 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-X&#039;&#039;&#039;&lt;br /&gt;
|| [[Sets|Superset of]]&lt;br /&gt;
|-&lt;br /&gt;
||Circle-middle-dot&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⊙&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8857 or U+2299 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-?&#039;&#039;&#039;&lt;br /&gt;
|| [[Null|Null operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Quad-colon&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍠&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9056 or U+2360 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-_&#039;&#039;&#039;&lt;br /&gt;
|| [[Variant|Variant operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-downtack&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍡&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9057 or U+2361 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-N&#039;&#039;&#039;&lt;br /&gt;
|| [[Convolution|Convolution operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-del&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍢&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9058 or U+2362 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-G&#039;&#039;&#039;&lt;br /&gt;
|| [[Dual|Dual operator&amp;lt;b&amp;gt;]]&amp;amp;dagger;&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-star&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍣&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9059 or U+2363 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-P&#039;&#039;&#039;&lt;br /&gt;
|| [[Power|Power operator]]&amp;lt;b&amp;gt;&amp;amp;dagger;&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-jot&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍤&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9060 or U+2364 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-J&#039;&#039;&#039;&lt;br /&gt;
|| [[Rank|Rank operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-circle&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍥&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9061 or U+2365 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-O&#039;&#039;&#039;&lt;br /&gt;
|| [[Composition|Composition operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Down-shoe-stile&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍦&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9062 or U+2366 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-m&#039;&#039;&#039;&lt;br /&gt;
|| [[Multisets|Multiset operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-tilde&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍨&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9064 or U+2368 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-T&#039;&#039;&#039;&lt;br /&gt;
|| [[Commute|Commute operator]]&lt;br /&gt;
|-&lt;br /&gt;
|| Del-tilde&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍫&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9067 or U+236B&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-k&#039;&#039;&#039;&lt;br /&gt;
|| [[Commutator|Commutator operator]]&amp;lt;b&amp;gt;&amp;amp;dagger;&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Zilde&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍬&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9068 or U+236C&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-}&#039;&#039;&#039;&lt;br /&gt;
|| Empty simple numeric vector&lt;br /&gt;
|-&lt;br /&gt;
|| Stile-tilde&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍭&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9069 or U+236D&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-M&#039;&#039;&#039;&lt;br /&gt;
|| [[Partition|Partition operator]]&amp;lt;b&amp;gt;&amp;amp;dagger;&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;amp;dagger;&amp;lt;/b&amp;gt; = Not currently implemented.&lt;br /&gt;
&lt;br /&gt;
All of the above glyphs may be found in &#039;&#039;&#039;SImPL medium&#039;&#039;&#039;, all but the Infinity symbol in &#039;&#039;&#039;SImPL&#039;&#039;&#039;, and all but the Null operator in &#039;&#039;&#039;APL385 Unicode&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Keyboard&amp;diff=2845</id>
		<title>Keyboard</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Keyboard&amp;diff=2845"/>
		<updated>2016-02-17T23:49:35Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: added link to APL Font wiki page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are the keyboard positions used by NARS2000. Hover over a link to see the name of the symbol, click on the link to go to the page defining the symbol. Also see [http://www.sudleyplace.com/APL/Keyboard.ahtml keyboard] and &#039;&#039;&#039;[[APL_Font|APL Font default keyboard]]&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;!-- Note to future editors; an APL symbol is called &amp;quot;Symbol Name&amp;quot; when it&#039;s&lt;br /&gt;
 under development on this Wiki; once it becomes a reasonable article, with &lt;br /&gt;
 the keyboard map image, character value and keyboard keys, then the article &lt;br /&gt;
 is upgraded by renaming to the symbol name alone, and its links in &lt;br /&gt;
 [[Keyboard]], [[Character names]] and [[Language Toolbar]] articles as well &lt;br /&gt;
 as Template:Keyboard and  Template:Language_Toolbar are updated as well. --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 200%;&amp;quot; width=&amp;quot;80%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||ALT+Shift&lt;br /&gt;
||[[Symbol Comma Bar|⍪]]&lt;br /&gt;
||[[Symbol Match|≡]]&lt;br /&gt;
||[[Symbol Not Match|≢]]&lt;br /&gt;
||[[Symbol Grade Down|⍒]]&lt;br /&gt;
||[[Symbol Grade Up|⍋]]&lt;br /&gt;
||[[Symbol Rotate|⌽]]&lt;br /&gt;
||[[Symbol Circle Slope|⍉]]&lt;br /&gt;
||[[Symbol Circle Bar|⊖]]&lt;br /&gt;
||[[Symbol Log|⍟]]&lt;br /&gt;
||[[Symbol Nor|⍱]]&lt;br /&gt;
||[[Symbol Nand|⍲]]&lt;br /&gt;
||[[Symbol Factorial|!]]&lt;br /&gt;
||[[Symbol Domino|⌹]]&lt;br /&gt;
|-&lt;br /&gt;
||ALT&lt;br /&gt;
||[[Diamond|⋄]]&lt;br /&gt;
||[[Symbol Dieresis|¨]]&lt;br /&gt;
||[[Symbol Overbar|¯]]&lt;br /&gt;
||[[Symbol Less Than|&amp;lt;]]&lt;br /&gt;
||[[Symbol Less Than or Equal|≤]]&lt;br /&gt;
||[[Symbol Equal|=]]&lt;br /&gt;
||[[Symbol Greater Than or Equal|≥]]&lt;br /&gt;
||[[Symbol Greater Than|&amp;gt;]]&lt;br /&gt;
||[[Symbol Not Equal|≠]]&lt;br /&gt;
||[[Symbol Down Caret|∨]]&lt;br /&gt;
||[[Symbol And|∧]]&lt;br /&gt;
||[[Symbol Times|×]]&lt;br /&gt;
||[[Symbol Divide|÷]]&lt;br /&gt;
|-&lt;br /&gt;
||Shift&lt;br /&gt;
||[[Symbol Not|~]]&lt;br /&gt;
||[[Symbol Factorial|!]]&lt;br /&gt;
||@&lt;br /&gt;
||#&lt;br /&gt;
||$&lt;br /&gt;
||%&lt;br /&gt;
||^&lt;br /&gt;
||&amp;amp;&lt;br /&gt;
||*&lt;br /&gt;
||[[Symbol Parenthesis|(]]&lt;br /&gt;
||[[Symbol Parenthesis|)]]&lt;br /&gt;
||[[Symbol Underbar|_]]&lt;br /&gt;
||[[Symbol Plus|+]]&lt;br /&gt;
|-&lt;br /&gt;
||Key&lt;br /&gt;
||`&lt;br /&gt;
||1&lt;br /&gt;
||2&lt;br /&gt;
||3&lt;br /&gt;
||4&lt;br /&gt;
||5&lt;br /&gt;
||6&lt;br /&gt;
||7&lt;br /&gt;
||8&lt;br /&gt;
||9&lt;br /&gt;
||0&lt;br /&gt;
||[[Symbol Minus|-]]&lt;br /&gt;
||[[Symbol Equal|=]]&lt;br /&gt;
|| (backspace)&lt;br /&gt;
|-&lt;br /&gt;
|colspan=15|&lt;br /&gt;
|-&lt;br /&gt;
||ALT+Shift&lt;br /&gt;
|colspan=3|&lt;br /&gt;
||[[Symbol Find|⍷]]&lt;br /&gt;
||[[Symbol Root|√]]&lt;br /&gt;
||[[Symbol Commute|⍨]]&lt;br /&gt;
|colspan=2|&lt;br /&gt;
||[[Symbol Iota Underbar|⍸]]&lt;br /&gt;
||[[⍥]]&lt;br /&gt;
||[[⍣]]&lt;br /&gt;
||[[Symbol Quote Quad|⍞]]&lt;br /&gt;
||[[Symbol Zilde|⍬]]&lt;br /&gt;
||[[Symbol Lev|⊣]]&lt;br /&gt;
|-&lt;br /&gt;
||ALT&lt;br /&gt;
||&lt;br /&gt;
||[[Symbol Query|?]]&lt;br /&gt;
||[[Special Symbols|⍵]]&lt;br /&gt;
||[[Symbol Epsilon|∊]]&lt;br /&gt;
||[[Symbol Rho|⍴]]&lt;br /&gt;
||[[Symbol Not|∼]]&lt;br /&gt;
||[[Symbol Take|↑]]&lt;br /&gt;
||[[Symbol Drop|↓]]&lt;br /&gt;
||[[Symbol Iota|⍳]]&lt;br /&gt;
||[[Symbol Jot|○]]&lt;br /&gt;
||[[Symbol Pi|π]]&lt;br /&gt;
||[[Symbol Assign|←]]&lt;br /&gt;
||[[Symbol Goto|→]]&lt;br /&gt;
||[[Symbol Dex|⊢]]&lt;br /&gt;
|-&lt;br /&gt;
||SHIFT&lt;br /&gt;
||&lt;br /&gt;
||Q&lt;br /&gt;
||W&lt;br /&gt;
||E&lt;br /&gt;
||R&lt;br /&gt;
||T&lt;br /&gt;
||Y&lt;br /&gt;
||U&lt;br /&gt;
||I&lt;br /&gt;
||O&lt;br /&gt;
||P&lt;br /&gt;
||{&lt;br /&gt;
||}&lt;br /&gt;
||[[Symbol Mod|&amp;amp;#124;]]&lt;br /&gt;
|-&lt;br /&gt;
||Key&lt;br /&gt;
||(Tab)&lt;br /&gt;
||q&lt;br /&gt;
||w&lt;br /&gt;
||e&lt;br /&gt;
||r&lt;br /&gt;
||t&lt;br /&gt;
||y&lt;br /&gt;
||u&lt;br /&gt;
||i&lt;br /&gt;
||o&lt;br /&gt;
||p&lt;br /&gt;
||[[Symbol Brace|&amp;amp;#91;]]&lt;br /&gt;
||[[Symbol Brace|&amp;amp;#93;]]&lt;br /&gt;
||[[Symbol Slope|\]]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=15|&lt;br /&gt;
|-&lt;br /&gt;
||ALT+Shift&lt;br /&gt;
|Colspan=2|&lt;br /&gt;
||[[Symbol Section|§]]&lt;br /&gt;
|colspan=2|&lt;br /&gt;
||[[Symbol Dieresis Del|⍢]]&lt;br /&gt;
||[[Special Symbols|⍙]]&lt;br /&gt;
||[[Symbol Dieresis Jot|⍤]]&lt;br /&gt;
||&lt;br /&gt;
||[[Symbol Squad|⌷]]&lt;br /&gt;
|-&lt;br /&gt;
||ALT&lt;br /&gt;
||&lt;br /&gt;
||[[Special Symbols|⍺]]&lt;br /&gt;
||[[Symbol Ceiling|⌈]]&lt;br /&gt;
||[[Symbol Floor|⌊]]&lt;br /&gt;
||[[Symbol Infinity|∞]]&lt;br /&gt;
||[[Del|∇]]&lt;br /&gt;
||[[Special Symbols|∆]]&lt;br /&gt;
||[[Symbol Jot|∘]]&lt;br /&gt;
||[[Symbol Quote|&#039;]]&lt;br /&gt;
||[[Symbol Quad|⎕]]&lt;br /&gt;
||[[Symbol Execute|⍎]]&lt;br /&gt;
||[[Symbol Format|⍕]]&lt;br /&gt;
|-&lt;br /&gt;
||Shift&lt;br /&gt;
||&lt;br /&gt;
||A&lt;br /&gt;
||S&lt;br /&gt;
||D&lt;br /&gt;
||F&lt;br /&gt;
||G&lt;br /&gt;
||H&lt;br /&gt;
||J&lt;br /&gt;
||K&lt;br /&gt;
||L&lt;br /&gt;
||[[Symbol Colon|:]]&lt;br /&gt;
||&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||Key&lt;br /&gt;
||(Caps&amp;lt;br/&amp;gt;Lock)&lt;br /&gt;
||a&lt;br /&gt;
||s&lt;br /&gt;
||d&lt;br /&gt;
||f&lt;br /&gt;
||g&lt;br /&gt;
||h&lt;br /&gt;
||j&lt;br /&gt;
||k&lt;br /&gt;
||l&lt;br /&gt;
||[[Symbol Semicolon|;]]&lt;br /&gt;
||[[Symbol Quote|&#039;]]&lt;br /&gt;
|colspan=2|(enter)&lt;br /&gt;
|-&lt;br /&gt;
|colspan=15|&lt;br /&gt;
|-&lt;br /&gt;
||ALT+Shift&lt;br /&gt;
||&lt;br /&gt;
||[[Symbol Left Shoe Underbar|⊆]]&lt;br /&gt;
||[[Symbol Right Shoe Underbar|⊇]]&lt;br /&gt;
|colspan=3|&lt;br /&gt;
||[[Symbol Dieresis Down Tack|⍡]]&lt;br /&gt;
||[[Symbol Stile Tilde|⍭]]&lt;br /&gt;
|colspan=2|&lt;br /&gt;
||[[Symbol Circle Middle Dot|⊙]]&lt;br /&gt;
|-&lt;br /&gt;
||ALT&lt;br /&gt;
||&lt;br /&gt;
||[[Symbol Left Shoe|⊂]]&lt;br /&gt;
||[[Symbol Right Shoe|⊃]]&lt;br /&gt;
||[[Symbol Up Shoe|∩]]&lt;br /&gt;
||[[Symbol Down Shoe|∪]]&lt;br /&gt;
||[[Symbol Base Value|⊥]]&lt;br /&gt;
||[[Symbol Represent|⊤]]&lt;br /&gt;
||[[Symbol Multiset|⍦]]&lt;br /&gt;
||[[Lamp|⍝]]&lt;br /&gt;
||[[Symbol Slope Bar|⍀]]&lt;br /&gt;
||[[Symbol Slash Bar|⌿]]&lt;br /&gt;
|-&lt;br /&gt;
||Shift&lt;br /&gt;
||&lt;br /&gt;
||Z&lt;br /&gt;
||X&lt;br /&gt;
||C&lt;br /&gt;
||V&lt;br /&gt;
||B&lt;br /&gt;
||N&lt;br /&gt;
||M&lt;br /&gt;
||[[Symbol Less Than|&amp;lt;]]&lt;br /&gt;
||[[Symbol Greater Than|&amp;gt;]]&lt;br /&gt;
||[[Symbol Query|?]]&lt;br /&gt;
|-&lt;br /&gt;
||Key&lt;br /&gt;
|(Shift)&lt;br /&gt;
||z&lt;br /&gt;
||x&lt;br /&gt;
||c&lt;br /&gt;
||v&lt;br /&gt;
||b&lt;br /&gt;
||n&lt;br /&gt;
||m&lt;br /&gt;
||[[Symbol Comma|,]]&lt;br /&gt;
||[[Symbol Dot|.]]&lt;br /&gt;
||[[Symbol Slash|/]]&lt;br /&gt;
||(Shift)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Article footer}}&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=APL_Font&amp;diff=2844</id>
		<title>APL Font</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=APL_Font&amp;diff=2844"/>
		<updated>2016-02-17T23:43:52Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: Added default keyboard layout link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Default Font==&lt;br /&gt;
&lt;br /&gt;
The default APL font for NARS (its APL Interpreter session, function editing, screen display and printing purposes) and this wiki is &#039;&#039;&#039;SImPL medium&#039;&#039;&#039;(Unicode based), &#039;&#039;&#039;SImPL&#039;&#039;&#039;, or &#039;&#039;&#039;APL385 Unicode&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If the APL characters in the articles don&#039;t display correctly, you may obtain a copy of the &#039;&#039;&#039;SImPL medium&#039;&#039;&#039; font by downloading the current [http://www.nars2000.org/download/Download.html NARS2000 binary], or the &#039;&#039;&#039;SImPL&#039;&#039;&#039; font from [http://archive.vector.org.uk/resource/simpl02.zip here], or the &#039;&#039;&#039;APL385 Unicode&#039;&#039;&#039; font from [http://archive.vector.org.uk/resource/apl385.ttf here].  Normally font and file &#039;&#039;&#039;SimPL-Medium.ttf&#039;&#039;&#039; may  be found in your downloaded NARS2000 program folder, e.g. &#039;&#039;&#039;C:\Program Files (x86)\NARS2000 (32-bit program)&#039;&#039;&#039; and or &#039;&#039;&#039;C:\Program Files\NARS2000 (64-bit version)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
If they still don&#039;t display correctly, [http://www.getfirefox.com/ download] FireFox.&lt;br /&gt;
&lt;br /&gt;
==Default Keyboard Layout==&lt;br /&gt;
&lt;br /&gt;
NARS default APL keyboard layout, based on the SImPL medium font, is found here &#039;&#039;&#039;[http://www.sudleyplace.com/APL/Keyboard.ahtml here]&#039;&#039;&#039;, on SudleyPlace.com.  Printing the keyboard layout and keeping it in front of you while using NARS - provides a handy reference. Just as typists eventually memorize the QWERTY keyboard layout, most APL&#039;ers quickly memorize APL keyboard layouts.  A &amp;lt;u&amp;gt;printed keyboard reference&amp;lt;/u&amp;gt; is good to &amp;lt;u&amp;gt;keep&amp;lt;/u&amp;gt; however, if only for some of the lesser used APL symbols.  Several frequently used APL symbols are &amp;lt;u&amp;gt;very easily keyboard-memorized&amp;lt;/u&amp;gt;: &#039;&#039;&#039;∊ (epsilon = Alt-e), ⍴ (rho = Alt-r) and ⍳ (iota = Alt-i)&#039;&#039;&#039; since the beginning letter of the symbol is same-placed as its qwerty letter equivalent in the alphabet.&lt;br /&gt;
&lt;br /&gt;
==Font Issues==&lt;br /&gt;
Even if you have an APL font installed, that may not be the end of the story. Each font designer decides what glyphs to display and for which characters. Also, some implementations of supposedly Unicode fonts don&#039;t always display the same glyphs in the same places or in the same way. The &#039;&#039;&#039;SimPL Medium&#039;&#039;&#039; font, which comes with NARS2000, will display some characters with different glyphs than are displayed by the font &#039;&#039;&#039;APL385 Unicode&#039;&#039;&#039;.  For example, these are the underlined letters A to Z, which are valid identifiers in APL: &amp;lt;u&amp;gt;A&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;B&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;C&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;D&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;E&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;F&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;G&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;H&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;I&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;J&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;K&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;L&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;M&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;N&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;O&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;P&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;Q&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;R&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;S&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;T&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;U&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;V&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;W&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;X&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;Y&amp;lt;/u&amp;gt; &amp;lt;u&amp;gt;Z&amp;lt;/u&amp;gt;. Now, to display these characters in &#039;&#039;APL385 Unicode&#039;&#039;, the characters use code positions 9398 through 9423, or 0x24B6 through 0x24CF, which show up as &amp;amp;#9398; &amp;amp;#9399; &amp;amp;#9400; &amp;amp;#9401; &amp;amp;#9402; &amp;amp;#9403; &amp;amp;#9404; &amp;amp;#9405; &amp;amp;#9406; &amp;amp;#9407; &amp;amp;#9408; &amp;amp;#9409; &amp;amp;#9410; &amp;amp;#9411; &amp;amp;#9412; &amp;amp;#9413; &amp;amp;#9414; &amp;amp;#9415; &amp;amp;#9416; &amp;amp;#9417; &amp;amp;#9418; &amp;amp;#9419; &amp;amp;#9420; &amp;amp;#9421; &amp;amp;#9422; &amp;amp;#9423;, which, while not the same, is very close.  When copying underlined APL characters to the clipboard, you may convert them to lowercase by first setting the user preference &amp;quot;Underbar alphabet converted to lowercase&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The standard &#039;&#039;&#039;Arial&#039;&#039;&#039; font doesn&#039;t even have a built-in set of underlined characters, nor does SimPL. (Yet note some glyphs, as shown below, that are used by NARS2000, are not present in APL385.)&lt;br /&gt;
&lt;br /&gt;
Also, the settings for Unicode for APL symbols, which are listed as being 0x2300 - 0x23F3, do not necessarily appear - or appear the same - in all APL fonts.&lt;br /&gt;
&lt;br /&gt;
==Extra APL Glyphs==&lt;br /&gt;
&lt;br /&gt;
While any Unicode APL font will display all of the standard APL glyphs, NARS2000 uses (or has plans to use) some extra glyphs not found in all Unicode APL fonts such as&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Name&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Symbol&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Unicode&amp;lt;br /&amp;gt;Code Point&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Keystroke&lt;br /&gt;
! style=&amp;quot;border-bottom: solid black 1px;&amp;quot; |Description&lt;br /&gt;
|-&lt;br /&gt;
||Section&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&amp;lt;apll&amp;gt;§&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&amp;amp;ensp;167 or U+00A7 &lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&#039;&#039;&#039;Alt-S&#039;&#039;&#039;&lt;br /&gt;
| [[Multisets#Missing_Function|Multiset Symmetric Difference]]&lt;br /&gt;
|-&lt;br /&gt;
||Pi&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;π&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;amp;ensp;960 or U+03C0  &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-p&#039;&#039;&#039;&lt;br /&gt;
|| [[Primes|Prime Decomposition and Number-theoretic]]&lt;br /&gt;
|-&lt;br /&gt;
||Root&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;√&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8730 or U+221A&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-R&#039;&#039;&#039;&lt;br /&gt;
|| [[Root|Square Root and Nth Root]]&lt;br /&gt;
|-&lt;br /&gt;
||Infinity&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;∞&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8734 or U+221E  &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-f&#039;&#039;&#039;&lt;br /&gt;
|| [[Infinity]]&lt;br /&gt;
|-&lt;br /&gt;
|| Mismatch&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;≢&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8802 or U+2262 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-@&#039;&#039;&#039;&lt;br /&gt;
|| [[Mismatch]]&lt;br /&gt;
|-&lt;br /&gt;
||Left-shoe-underbar&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⊆&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8838 or U+2286 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-Z&#039;&#039;&#039;&lt;br /&gt;
|| [[Sets|Subset of]]&lt;br /&gt;
|-&lt;br /&gt;
|| Right-shoe-underbar&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⊇&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8839 or U+2287 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-X&#039;&#039;&#039;&lt;br /&gt;
|| [[Sets|Superset of]]&lt;br /&gt;
|-&lt;br /&gt;
||Circle-middle-dot&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⊙&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|8857 or U+2299 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-?&#039;&#039;&#039;&lt;br /&gt;
|| [[Null|Null operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Quad-colon&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍠&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9056 or U+2360 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-_&#039;&#039;&#039;&lt;br /&gt;
|| [[Variant|Variant operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-downtack&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍡&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9057 or U+2361 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-N&#039;&#039;&#039;&lt;br /&gt;
|| [[Convolution|Convolution operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-del&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍢&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9058 or U+2362 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-G&#039;&#039;&#039;&lt;br /&gt;
|| [[Dual|Dual operator&amp;lt;b&amp;gt;]]&amp;amp;dagger;&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-star&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍣&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9059 or U+2363 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-P&#039;&#039;&#039;&lt;br /&gt;
|| [[Power|Power operator]]&amp;lt;b&amp;gt;&amp;amp;dagger;&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-jot&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍤&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9060 or U+2364 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-J&#039;&#039;&#039;&lt;br /&gt;
|| [[Rank|Rank operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-circle&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍥&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9061 or U+2365 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-O&#039;&#039;&#039;&lt;br /&gt;
|| [[Composition|Composition operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Down-shoe-stile&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍦&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9062 or U+2366 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-m&#039;&#039;&#039;&lt;br /&gt;
|| [[Multisets|Multiset operator]]&lt;br /&gt;
|-&lt;br /&gt;
||Dieresis-tilde&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍨&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9064 or U+2368 &lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-T&#039;&#039;&#039;&lt;br /&gt;
|| [[Commute|Commute operator]]&lt;br /&gt;
|-&lt;br /&gt;
|| Del-tilde&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍫&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9067 or U+236B&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-k&#039;&#039;&#039;&lt;br /&gt;
|| [[Commutator|Commutator operator]]&amp;lt;b&amp;gt;&amp;amp;dagger;&amp;lt;/b&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| Zilde&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍬&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9068 or U+236C&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-}&#039;&#039;&#039;&lt;br /&gt;
|| Empty simple numeric vector&lt;br /&gt;
|-&lt;br /&gt;
|| Stile-tilde&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&amp;lt;apll&amp;gt;⍭&amp;lt;/apll&amp;gt;&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|9069 or U+236D&lt;br /&gt;
| align=&amp;quot;center&amp;quot;|&#039;&#039;&#039;Alt-M&#039;&#039;&#039;&lt;br /&gt;
|| [[Partition|Partition operator]]&amp;lt;b&amp;gt;&amp;amp;dagger;&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;amp;dagger;&amp;lt;/b&amp;gt; = Not currently implemented.&lt;br /&gt;
&lt;br /&gt;
All of the above glyphs may be found in &#039;&#039;&#039;SImPL medium&#039;&#039;&#039;, all but the Infinity symbol in &#039;&#039;&#039;SImPL&#039;&#039;&#039;, and all but the Null operator in &#039;&#039;&#039;APL385 Unicode&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Symbol_Take&amp;diff=2843</id>
		<title>Symbol Take</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Symbol_Take&amp;diff=2843"/>
		<updated>2016-02-13T22:25:39Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: Added examples, expanded&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;h1&amp;gt; {take} &amp;amp;mdash; Take symbol &amp;amp;mdash; Keystroke(usually) ALT+y ; Character (⎕UCS) 8593&amp;lt;/h1&amp;gt;&lt;br /&gt;
==Usage==&lt;br /&gt;
&#039;&#039;&#039;Dyadic function A↑B&#039;&#039;&#039; - where &#039;&#039;&#039;A&#039;&#039;&#039; is the number of elements to take and &#039;&#039;&#039;B&#039;&#039;&#039; is the vector or array to operate on.&lt;br /&gt;
Take first(A is positive) n or last(A is negative) n elements of an array.&lt;br /&gt;
&#039;&#039;&#039;Take&#039;&#039;&#039; and &#039;&#039;&#039;Rho&#039;&#039;&#039; share a similar property - the left argument specifies the &#039;&#039;&#039;size&#039;&#039;&#039; of the resultant array.&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      5↑1    ⍝Take the first 5 elements, given scalar integer 1&lt;br /&gt;
1 0 0 0 0    ⍝Result creates a vector of 5 elements, since only a single scalar was present, 4 additional zeroes are appended to the vector.&lt;br /&gt;
&lt;br /&gt;
      ¯4↑45 78 33 99 10 11 12 13  ⍝Take the last 4 elements, given a vector of 8 integers&lt;br /&gt;
10 11 12 13   ⍝APL/NARS Interpreter returns the last 4 elements, a vector.&lt;br /&gt;
&lt;br /&gt;
      ¯5↑&#039;abcdefghijklmnop&#039;  &lt;br /&gt;
lmnop     ⍝Result is the last 5 elements from the alphabet sub-string(take&#039;s right argument), result is similarly a string.&lt;br /&gt;
&lt;br /&gt;
      A←3 4⍴⍳12   ⍝Store a 3-row by 4-column matrix of the set of integers from 1 through 12 in variable A&lt;br /&gt;
      A   ⍝Display the contents of variable A, which has 3 rows and 4 columns of consecutive integers:&lt;br /&gt;
1  2  3  4&lt;br /&gt;
5  6  7  8&lt;br /&gt;
9 10 11 12&lt;br /&gt;
      2 3↑A    ⍝Take just the FIRST 2 rows and 3 columns of variable A, display the requested results:&lt;br /&gt;
1 2 3&lt;br /&gt;
5 6 7&lt;br /&gt;
&lt;br /&gt;
      ¯2 3↑A   ⍝Take the LAST 2 rows and FIRST 3 columns of variable A, display the results:&lt;br /&gt;
5  6  7&lt;br /&gt;
9 10 11&lt;br /&gt;
&lt;br /&gt;
      4 5↑A    ⍝Take 4 rows and 5 columns of variable A, ZEROES are APPENDED when left arguments exceed array sizes of a NUMERIC matrix.&lt;br /&gt;
1  2  3  4 0&lt;br /&gt;
5  6  7  8 0&lt;br /&gt;
9 10 11 12 0&lt;br /&gt;
0  0  0  0 0&lt;br /&gt;
&lt;br /&gt;
      ¯4 ¯5↑A  ⍝Take negative 4 rows and negative 5 cols of variable A. Result: ZEROES are PREFIXED onto numeric matrix A:&lt;br /&gt;
0 0  0  0  0&lt;br /&gt;
0 1  2  3  4&lt;br /&gt;
0 5  6  7  8&lt;br /&gt;
0 9 10 11 12&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Rho]]:  &#039;&#039;&#039;⍴&#039;&#039;&#039; especially &#039;&#039;&#039;Dyadic rho&#039;&#039;&#039; and it&#039;s leftmost argument&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Language Toolbar}}&lt;br /&gt;
[[Category:Mouse Group 6|T]]&lt;br /&gt;
[[Category:Symbols|T]]&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Symbol_Iota&amp;diff=2842</id>
		<title>Symbol Iota</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Symbol_Iota&amp;diff=2842"/>
		<updated>2016-02-08T19:47:12Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: added ⎕IO quad IO&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;h1&amp;gt; {iota} &amp;amp;mdash; iota or index; Keystroke ALT+i ; Character (⎕UCS) 9075&amp;lt;/h1&amp;gt;&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Monadic use:&lt;br /&gt;
* [[Index Generator]]:  &amp;lt;apll&amp;gt;⍳R&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dyadic use:&lt;br /&gt;
* [[Index Of]]:  &amp;lt;apll&amp;gt;L⍳R&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⍳20     ⍝ Monadic example, generate the set of integers 1 through 20&lt;br /&gt;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20&lt;br /&gt;
&lt;br /&gt;
      &#039;ABCDEFG&#039; ⍳ &#039;BG&#039;    ⍝ Dyadic example, find/lookup the letters B and G in the string &#039;ABCDEFG&#039; (pos 1 = A, pos 2 = B, ... pos 7 = G)&lt;br /&gt;
2 7                                 ⍝ Results found at positions 2 and 7 of string &#039;ABCDEFG&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Index Generator]]:  &amp;lt;apll&amp;gt;⍳R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* [[Index Of]]:  &amp;lt;apll&amp;gt;L⍳R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* [[System_Variable_IO]]  &amp;lt;apll&amp;gt;⎕IO&amp;lt;/apll&amp;gt; or quad IO, Index Origin&lt;br /&gt;
* [[Array Lookup]]:  &amp;lt;apll&amp;gt;L⍸R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* [[Indexing]]:  &amp;lt;apll&amp;gt;R[L]&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;R[L]←A&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;R[L]&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;←A&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;L⌷R&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;L⍉R&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;apll&amp;gt;L⊃R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* [[Indices]]:  &amp;lt;apll&amp;gt;⍸R&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Language Toolbar}}&lt;br /&gt;
[[Category:Mouse Group 7|I]]&lt;br /&gt;
[[Category:Symbols|I]]&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=System_Variable_IO&amp;diff=2841</id>
		<title>System Variable IO</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=System_Variable_IO&amp;diff=2841"/>
		<updated>2016-02-08T19:45:42Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: example of changing quad IO&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;&amp;lt;apl&amp;gt;{quad}IO&amp;lt;/apl&amp;gt; - Index Origin&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{BoxStart|&amp;lt;apll&amp;gt;Z←⎕IO&amp;lt;/apll&amp;gt;&lt;br /&gt;
| returns the current value of the Index Origin. }}&lt;br /&gt;
{{BoxEnd|&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is an integer vector containing the current value of ⎕IO. This is the lowest value of an array subscript, and is either 1 or 0.}}&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&lt;br /&gt;
|| &amp;lt;apll&amp;gt;⎕IO←0&amp;lt;/apll&amp;gt; ||  set the lowest subscript of an array to 0.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&amp;lt;apll&amp;gt;⎕IO←1&amp;lt;/apll&amp;gt; || sets the lowest subscript for arrays to 1&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
⎕IO determines the lowest subscript for arrays. The default is 1, but can be changed to 0. If an attempt is made to set ⎕IO to a value higher than 1, it is set to 1. If an attempt is made to set ⎕IO to a value loweer than 0, it is set to 0. Setting ⎕IO to anything other than a number causes a DOMAIN ERROR. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    ⎕IO    ⍝ default ⎕IO (quad IO) is 1 in a clear workspace&lt;br /&gt;
1&lt;br /&gt;
      ⍳5    ⍝ iota 5&lt;br /&gt;
1 2 3 4 5 &lt;br /&gt;
&lt;br /&gt;
      ⎕IO←0     ⍝ Set index origin ⎕IO to 0 (zero)&lt;br /&gt;
&lt;br /&gt;
      ⍳5   ⍝ iota 5 again but compare the results just below to just above&lt;br /&gt;
0 1 2 3 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{System Variables}}&lt;br /&gt;
{{Article footer}}&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Symbol_Iota&amp;diff=2840</id>
		<title>Symbol Iota</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Symbol_Iota&amp;diff=2840"/>
		<updated>2016-02-08T18:28:45Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;h1&amp;gt; {iota} &amp;amp;mdash; iota or index; Keystroke ALT+i ; Character (⎕UCS) 9075&amp;lt;/h1&amp;gt;&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Monadic use:&lt;br /&gt;
* [[Index Generator]]:  &amp;lt;apll&amp;gt;⍳R&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dyadic use:&lt;br /&gt;
* [[Index Of]]:  &amp;lt;apll&amp;gt;L⍳R&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⍳20     ⍝ Monadic example, generate the set of integers 1 through 20&lt;br /&gt;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20&lt;br /&gt;
&lt;br /&gt;
      &#039;ABCDEFG&#039; ⍳ &#039;BG&#039;    ⍝ Dyadic example, find/lookup the letters B and G in the string &#039;ABCDEFG&#039; (pos 1 = A, pos 2 = B, ... pos 7 = G)&lt;br /&gt;
2 7                                 ⍝ Results found at positions 2 and 7 of string &#039;ABCDEFG&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Index Generator]]:  &amp;lt;apll&amp;gt;⍳R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* [[Index Of]]:  &amp;lt;apll&amp;gt;L⍳R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* [[Array Lookup]]:  &amp;lt;apll&amp;gt;L⍸R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* [[Indexing]]:  &amp;lt;apll&amp;gt;R[L]&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;R[L]←A&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;R[L]&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;←A&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;L⌷R&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;L⍉R&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;apll&amp;gt;L⊃R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* [[Indices]]:  &amp;lt;apll&amp;gt;⍸R&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Language Toolbar}}&lt;br /&gt;
[[Category:Mouse Group 7|I]]&lt;br /&gt;
[[Category:Symbols|I]]&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Symbol_Iota&amp;diff=2839</id>
		<title>Symbol Iota</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Symbol_Iota&amp;diff=2839"/>
		<updated>2016-02-08T18:27:11Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: expanded&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;h1&amp;gt; {iota} &amp;amp;mdash; iota or index; Keystroke ALT+i ; Character (⎕UCS) 9075&amp;lt;/h1&amp;gt;&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
Monadic use:&lt;br /&gt;
* [[Index Generator]]:  &amp;lt;apll&amp;gt;⍳R&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dyadic use:&lt;br /&gt;
* [[Index Of]]:  &amp;lt;apll&amp;gt;L⍳R&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⍳20     ⍝ Monadic example, generate the set of integers 1 through 20&lt;br /&gt;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20&lt;br /&gt;
&lt;br /&gt;
      &#039;ABCDEFG&#039; ⍳ &#039;BG&#039;    ⍝ Dyadic example, find/lookup the letters B and G in the string &#039;ABCDEFG&#039; (pos 1 = A, pos 2 = B, ... pos 7 = G)&lt;br /&gt;
2 7                                 ⍝ Results found at positions 2 and 7 of string &#039;ABCDEFG&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[Index Generator]]:  &amp;lt;apll&amp;gt;⍳R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* [[Index Of]]:  &amp;lt;apll&amp;gt;L⍳R&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Array Lookup]]:  &amp;lt;apll&amp;gt;L⍸R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* [[Find]]:  &amp;lt;apll&amp;gt;L⍷R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* [[Indexing]]:  &amp;lt;apll&amp;gt;R[L]&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;R[L]←A&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;R[L]&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;←A&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;L⌷R&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;apll&amp;gt;L⍉R&amp;lt;/apll&amp;gt;, &amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;apll&amp;gt;L⊃R&amp;lt;/apll&amp;gt;&lt;br /&gt;
* [[Indices]]:  &amp;lt;apll&amp;gt;⍸R&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Language Toolbar}}&lt;br /&gt;
[[Category:Mouse Group 7|I]]&lt;br /&gt;
[[Category:Symbols|I]]&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Operators&amp;diff=2838</id>
		<title>Operators</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Operators&amp;diff=2838"/>
		<updated>2016-02-08T17:25:10Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In NARS2000, operators are symbols used to perform an action based on the arguments to the left, the right, or the left and right of the operator. Operators can be niladic, monadic, dyadic or a combination of these.&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Click&#039;&#039;&#039; on an &#039;&#039;&#039;APL symbol&#039;&#039;&#039; just below to view its use:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Article footer}}&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[Category:Definitions]]&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Introduction_to_APL&amp;diff=2837</id>
		<title>Introduction to APL</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Introduction_to_APL&amp;diff=2837"/>
		<updated>2016-02-08T17:22:45Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: Filled in operators, primitives, etc. links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the wonderful world of APL. Whether you&#039;ve never done programming before or you&#039;re a journeyman programmer, APL is going to be something new to you. APL works like no other programming language. First, if you&#039;ve done any programming, you &amp;quot;know&amp;quot; that when you have an assignment or something like a piece of code is executed, it&#039;s &amp;quot;always&amp;quot; done right to left and mathematical formulas are always evaluated right to left according to precedence, so that exponentiation is done first, then multiplication and division, then addition and subtraction.  Well, APL is going to blow you away because &#039;&#039;everything you know is wrong&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
First, APL is &amp;quot;backwards&amp;quot; to what you know. APL operates from &#039;&#039;right to left&#039;&#039;. All other programming languages operate from left to right. When it comes to computing mathematical formulas, APL has no precedence; unless you put something in parenthesis, all mathematical computations are done strictly right to left to produce the result.&lt;br /&gt;
&lt;br /&gt;
Also, APL uses a specialized set of symbols, and before we had graphical systems, it even had its own specialized keyboard. Many of the actions you have to write a program in other languages can be done in one character in APL. While your typical programming language would show 3 times 4 as &#039;&#039;&#039;3*4&#039;&#039;&#039;, APL has a multiply symbol, so it is written as &#039;&#039;&#039;3{times}4&#039;&#039;&#039;, and to create one half or &#039;&#039;&#039;1/2&#039;&#039;&#039; in most languages, in APL you would enter &#039;&#039;&#039;1{divide}2&#039;&#039;&#039; .&lt;br /&gt;
&lt;br /&gt;
So, for example, if you have the following mathematical expression&lt;br /&gt;
: 4*5-10 (in normal programming languages), or in APL: 4 {times} 5 - 10&lt;br /&gt;
Your typical programming language would compute it as 4{times}5 which is (20), then 20 - 10, resulting in 10.  APL will compute it as 5-10 (-5) * 4, or -20. You can adjust this by placing arguments within parenthesis. If your expression was written as&lt;br /&gt;
: (4 {times} 5) - 10&lt;br /&gt;
It would produce the same answer no matter what programming language you use.&lt;br /&gt;
&lt;br /&gt;
Where APL shines is its ability to handle arrays as easily as most programs handle single values.  For example, the &#039;&#039;&#039;plus reduce&#039;&#039;&#039; operator is used to sum a list of numbers, so in a typical programming language like C or C++ you&#039;d have&lt;br /&gt;
: K == 5 + 6 + 8 + 9 + 12 +14&lt;br /&gt;
In APL, you&#039;d do the same thing with&lt;br /&gt;
: K {:=} +/5 6 8 9 12 14&lt;br /&gt;
Now, that by itself isn&#039;t very exciting. But what if you had an array X of 1000 numbers. In C you&#039;d have to do something like&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;k == 0;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;for (i=1;i++;i&amp;lt;1001) {&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;k += X[i];&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;}&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You&#039;d do the same thing in APL with&lt;br /&gt;
: k {:=} +/ X&lt;br /&gt;
APL will take all of the entries in the array X and sum them, in one instruction. You don&#039;t even have to know how many entries are in the array X; APL will handle it for you.&lt;br /&gt;
&lt;br /&gt;
To be able to program in APL you&#039;ll have to learn what all of the operators do. Links to pages describing APL/APL2 symbols and what they do, just below:&lt;br /&gt;
* [[Operators]]&lt;br /&gt;
* [[Language_Features]]&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Symbol_Epsilon&amp;diff=2836</id>
		<title>Symbol Epsilon</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Symbol_Epsilon&amp;diff=2836"/>
		<updated>2016-02-08T17:17:12Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: added examples, expanded&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;h1&amp;gt; {epsilon} &amp;amp;mdash; &#039;&#039;&#039;is an Element of&#039;&#039;&#039; &amp;amp;mdash; Keystroke is usually Alt-e; Character(⎕UCS) 8714&amp;lt;/h1&amp;gt;&lt;br /&gt;
==Usage==&lt;br /&gt;
==Examples==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      5 ∊ 1 2 3 4 5    ⍝ determine if 5 is an element of the set of numbers from 1 through 5, result just below 1 = Yes or true, so 5 IS an element of 1 through 5.&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
      1 2 3 4 5 ∊ 5    ⍝ determine if the set of numbers from 1 through 5 contains the integer 5. Results 0=False, 1=True&lt;br /&gt;
0 0 0 0 1 &lt;br /&gt;
&lt;br /&gt;
      (⍳5) ∊ 5      ⍝ determine if the set of numbers from 1 through 5 (iota 5) contains the integer 5.&lt;br /&gt;
0 0 0 0 1 &lt;br /&gt;
&lt;br /&gt;
      &#039;this is text&#039; ∊ &#039;t&#039;      ⍝ determine if a text phrase contains the letter &#039;t&#039;, 1=True, 0=False&lt;br /&gt;
1 0 0 0 0 0 0 0 1 0 0 1 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==See Also==&lt;br /&gt;
&lt;br /&gt;
{{Language Toolbar}}&lt;br /&gt;
[[Category:Mouse Group 7|E]]&lt;br /&gt;
[[Category:Symbols|E]]&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=NARS_System_Developer_Suggested_Knowledge_Prerequisites&amp;diff=2835</id>
		<title>NARS System Developer Suggested Knowledge Prerequisites</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=NARS_System_Developer_Suggested_Knowledge_Prerequisites&amp;diff=2835"/>
		<updated>2015-12-11T23:56:26Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Strongly Recommended C/C++ Programming Knowledge Prerequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;NARS Systems Developer Suggested Knowledge Prerequisites:&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
All existing computer systems generally require &amp;lt;u&amp;gt;some basic level or prerequisite of programming knowledge&amp;lt;/u&amp;gt; in order to better understand their systems, interoperability, platform dependencies, how those systems work, maintain systems and most importantly - improve functionality.  If you are an APL programmer yet want to further learn more about how NARS APL Interpreter works, by all means, jump right in and start looking at NARS &#039;&#039;&#039;C Programming Language&#039;&#039;&#039; source code; strong C/C++ language familiarity is not necessary if you merely want to do APL programming in NARS highly evolved APL.  Again and however, if you want to take a giant next step toward &#039;improving &amp;lt;u&amp;gt;NARS system functionality&amp;lt;/u&amp;gt;&#039; and better understanding how NARS APL Nested Arrays (in C) Interpreter works - then continue reading on.&lt;br /&gt;
&lt;br /&gt;
== Strongly Recommended C/C++ Programming Knowledge Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
NARS APL Interpreter is technically written in the C programming language, although its source code also and in many important ways resembles the C++ programming language.  Therefore a strong working knowledge of C/C++ is highly recommended and suggested, particularly if you are seriously interested in NARS &amp;lt;u&amp;gt;source code&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Further, NARS makes intensive use of &amp;lt;b&amp;gt;&amp;lt;u&amp;gt;Pointers.&amp;lt;/u&amp;gt;&amp;lt;/b&amp;gt;  Without a highly detailed, comprehensive and broad-based knowledge of working with Pointers in C/C++ you will find it extraordinarily difficult to comprehend much of NARS C Source Code - even to the point where you might give up or abandon an otherwise fascinating APL and &#039;&#039;&#039;nested arrays system&#039;&#039;&#039; exploration, written using a high-level programming language.&lt;br /&gt;
&lt;br /&gt;
As a first step and to test your knowledge of Pointers, try taking the following C/C++ Pointers tests at &#039;&#039;&#039;[http://www.sanfoundry.com/ SanFoundry]:&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;[http://www.sanfoundry.com/c-plus-plus-aptitude-question-answer-pointers/ SanFoundry Aptitude Questions and Answers on Pointers].&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;[http://www.sanfoundry.com/c-plus-plus-language-interview-questions-pointers-into-arrays/ C++ Programming Questions and Answers – Pointers into Arrays].&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;[http://www.sanfoundry.com/c-programming-questions-and-answers-pointer-to-function-1/ Pointers to Functions].&#039;&#039;&#039;&lt;br /&gt;
If you can score 95% or higher on the above combined tests, your knowledge of Pointers in C/C++ is probably sufficient to better understand and work with pointers in NARS source code.  Additionally, it is not just good enough to memorize the answers at the above exercises/links.  Take any and all time necessary to fully explore and deeply comprehend how and why the given exercise &amp;lt;b&amp;gt;answers&amp;lt;/b&amp;gt; apply, including all syntax involved and what each item of syntax attempts to perform/create/solve.  Expert, successful programming - is all about getting the details right, as well as correctly implementing overall desired functionalities.&lt;br /&gt;
&lt;br /&gt;
Obviously, a B.S./B.A. degree in Computer Science would be very helpful to better understand NARS source code - although equivalent and or more experience time actually programming in C/C++ and or other computer languages is/are very helpful.&lt;br /&gt;
&lt;br /&gt;
The above requirements are &#039;&#039;&#039;not&#039;&#039;&#039; designed to block or deter any serious or determined programmer from working with or augmenting NARS C Source Code.  It is something, however, to seriously consider.&lt;br /&gt;
&lt;br /&gt;
NARS in its entirely represents a highly evolved, &#039;&#039;&#039;very&#039;&#039;&#039; machine-efficient and &amp;lt;u&amp;gt;expert&amp;lt;/u&amp;gt; APL programming system, originally conceived of and developed [primarily even solely] by Bob Smith.  If you are serious about improving APL/NARS - then a serious, thorough working knowledge of C/C++ is a minimum prerequisite, to effectively work with NARS&#039; &#039;&#039;&#039;professional,&#039;&#039;&#039; virtuoso level, &#039;&#039;&#039;standards-compliant&#039;&#039;&#039; source code and APL/nested arrays system.&lt;br /&gt;
&lt;br /&gt;
In short, beginners are welcome, experts-highly-in-demand.  This by the way is also true of programming workplaces, and the programming world generally.&lt;br /&gt;
&lt;br /&gt;
Happy computing!&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Go or return to - &#039;&#039;&#039;[[Building_An_Executable|Building NARS Executable]].&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=NARS_System_Developer_Suggested_Knowledge_Prerequisites&amp;diff=2834</id>
		<title>NARS System Developer Suggested Knowledge Prerequisites</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=NARS_System_Developer_Suggested_Knowledge_Prerequisites&amp;diff=2834"/>
		<updated>2015-12-11T23:46:26Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: added text, links to suggested prerequisite level-of-accomplishment tests&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;NARS Systems Developer Suggested Knowledge Prerequisites:&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
All existing computer systems generally require &amp;lt;u&amp;gt;some basic level or prerequisite of programming knowledge&amp;lt;/u&amp;gt; in order to better understand their systems, interoperability, platform dependencies, how those systems work, maintain systems and most importantly - improve functionality.  If you are an APL programmer yet want to further learn more about how NARS APL Interpreter works, by all means, jump right in and start looking at NARS &#039;&#039;&#039;C Programming Language&#039;&#039;&#039; source code; strong C/C++ language familiarity is not necessary if you merely want to do APL programming in NARS highly evolved APL.  Again and however, if you want to take a giant next step toward &#039;improving &amp;lt;u&amp;gt;NARS system functionality&amp;lt;/u&amp;gt;&#039; and better understanding how NARS APL Nested Arrays (in C) Interpreter works - then continue reading on.&lt;br /&gt;
&lt;br /&gt;
== Strongly Recommended C/C++ Programming Knowledge Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
NARS APL Interpreter is technically written in the C programming language, although its source code also and in many important ways resembles the C++ programming language.  Therefore a strong working knowledge of C/C++ is highly recommended and suggested, particularly if you are seriously interested in NARS &amp;lt;u&amp;gt;source code&amp;lt;/u&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Further, NARS makes intensive use of &amp;lt;b&amp;gt;&amp;lt;u&amp;gt;Pointers.&amp;lt;/u&amp;gt;&amp;lt;/b&amp;gt;  Without a highly detailed, comprehensive and broad-based knowledge of working with Pointers in C/C++ you will find it extraordinarily difficult to comprehend much of NARS C Source Code - even to the point where you might give up or abandon an otherwise fascinating APL and &#039;&#039;&#039;nested arrays system&#039;&#039;&#039; exploration, written using a high-level programming language.&lt;br /&gt;
&lt;br /&gt;
As a first step and to test your knowledge of Pointers, try taking the following C/C++ Pointers tests at &#039;&#039;&#039;[http://www.sanfoundry.com/ SanFoundry]:&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;[http://www.sanfoundry.com/c-plus-plus-aptitude-question-answer-pointers/ SanFoundry Aptitude Questions and Answers on Pointers].&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;[http://www.sanfoundry.com/c-plus-plus-language-interview-questions-pointers-into-arrays/ C++ Programming Questions and Answers – Pointers into Arrays].&#039;&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;[http://www.sanfoundry.com/c-programming-questions-and-answers-pointer-to-function-1/ Pointers to Functions].&#039;&#039;&#039;&lt;br /&gt;
If you can score 95% or higher on the above combined tests, your knowledge of Pointers in C/C++ is probably sufficient to better understand and work with pointers in NARS source code.  Additionally, it is not just good enough to memorize the answers at the above exercises/links.  Take any and all time necessary to fully explore and deeply comprehend how and why the given exercise &amp;lt;b&amp;gt;answers&amp;lt;/b&amp;gt; apply, including all syntax involved and what each item of syntax attempts to perform/create/solve.  Expert, successful programming - is all about getting the details right, as well as correctly implementing overall desired functionalities.&lt;br /&gt;
&lt;br /&gt;
Obviously, a B.S./B.A. degree in Computer Science would be very helpful to better understand NARS source code - although equivalent and or more experience time actually programming in C/C++ and or other computer languages is/are very helpful.&lt;br /&gt;
&lt;br /&gt;
The above requirements are &#039;&#039;&#039;not&#039;&#039;&#039; designed to block or deter any serious or determined programmer from working with or augmenting NARS C Source Code.  It is something, however, to seriously consider.&lt;br /&gt;
&lt;br /&gt;
NARS in its entirely represents a highly evolved, &#039;&#039;&#039;very&#039;&#039;&#039; machine-efficient and &amp;lt;u&amp;gt;expert&amp;lt;/u&amp;gt; APL programming system, originally conceived of and developed [primarily even solely] by Bob Smith.  If you are serious about improving APL/NARS - then a serious, thorough working knowledge of C/C++ is a minimum prerequisite, to effectively work with NARS&#039; &#039;&#039;&#039;professional,&#039;&#039;&#039; virtuoso level, &#039;&#039;&#039;standards-compliant&#039;&#039;&#039; source code and APL/nested arrays system.&lt;br /&gt;
&lt;br /&gt;
In short, beginners are welcome, experts-highly-in-demand.  This by the way is also true of programming workplaces, and the programming world generally.&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=NARS_System_Developer_Suggested_Knowledge_Prerequisites&amp;diff=2833</id>
		<title>NARS System Developer Suggested Knowledge Prerequisites</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=NARS_System_Developer_Suggested_Knowledge_Prerequisites&amp;diff=2833"/>
		<updated>2015-12-11T22:34:29Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: created page NARS System Developer Suggested Knowledge Prerequisites&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;NARS Systems Developer Suggested Knowledge Prerequisites:&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
&lt;br /&gt;
All existing computer systems generally require some basic level of programming knowledge in order to better understand their system(s), how they work, maintain those systems and improve their functionality.  If you are an APL programmer and want to learn more about how the NARS APL Interpreter works, by all means, jump right in and start looking at NARS &#039;&#039;&#039;C Programming Language&#039;&#039;&#039; source code.  This is not necessary if you just want to perform programming in NARS highly evolved APL but -- if you want to take the next step toward &#039;improving NARS functionality&#039; and better understanding how NARS Interpreter works - then read more on this web page.&lt;br /&gt;
&lt;br /&gt;
== Strong Recommended Knowledge Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
NARS APL Interpreter is technically written in the C programming language, although its code also and in many important ways resembles the C++ programming language.  Therefore a strong working knowledge of C/C++ is highly suggested if you are seriously interested in NARS source code.&lt;br /&gt;
&lt;br /&gt;
Further, NARS makes intensive use of pointers.  Without a very detailed comprehensive and broad-based knowledge of working with Pointers in C/C++ you will find it extraordinarily difficult to comprehend much of NARS C Source Code - even to the point where you might give up or abandon an otherwise fascinating APL and nested arrays system, written using a high-level programming language.&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Building_An_Executable&amp;diff=2832</id>
		<title>Building An Executable</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Building_An_Executable&amp;diff=2832"/>
		<updated>2015-12-11T22:33:43Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: added NARS Systems Developer Knowledge Prerequisites section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:left; border:1px solid #aaaaaa; background-color:#f9f9f9;width: 200px;font-family: Verdana, sans-serif;&amp;quot;&lt;br /&gt;
|- padding:5px;padding-top:0.5em;font-size: 95%;&lt;br /&gt;
|&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #ccc; background: #fff; border-right:3px solid #ccc; border-bottom:3px solid #ccc; text-align: center; padding:3px; float:right; font-size: smaller; line-height: 1.3; margin-right: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%&amp;quot;&amp;gt;{{CURRENTDAYNAME}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: x-large; width: 100%;&amp;quot;&amp;gt;{{CURRENTDAY}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 100%;&amp;quot;&amp;gt; {{CURRENTMONTHNAME}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 100%;&amp;quot;&amp;gt;{{CURRENTYEAR}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #aaa; color: #000;&amp;quot;&amp;gt;&#039;&#039;&#039;{{CURRENTTIME}}&#039;&#039;&#039; UTC&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;NARS2000 Building The Executable&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
==Update Notice==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=blue&amp;gt;Although it is not an &#039;only compiler - IDE choice,&#039; the below uses &#039;&#039;&#039;Visual Studio 2013&#039;&#039;&#039; as its designated C/C++ Compiler and IDE(Integrated Developer&#039;s Environment, GUI/Graphical User Interface for programming).  All source code compiles correctly and multiple APL workspaces have been tested for correct APL/NARS functionality.  This page is current, up-to-date re NARS working with VS2013&#039;s compiler and standards.  The conversion to VS2013 resulted in a more up-to-date (5 years[2008 to 2013] more current software technology) program for the GUI Builder and Compiler interface, including newer C/C++ programming standards.  This has represented a major cyclical software upgrade and results in greater APL user functionality via improved C coding.  Recent releases of NARS2000.exe (32 and 64-bit versions) are fully functional.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-size:70%&amp;quot;&amp;gt;v---- &#039;&#039;&#039;Useful Developer links:&#039;&#039;&#039; ----v&amp;lt;br&amp;gt;[http://svnbook.red-bean.com Version Control with Subversioning - Conceptual Gen Bkgnd.]&amp;lt;br&amp;gt;[http://sourceforge.net/p/forge/documentation/svn/ Source Forge Versioning Documentation] &amp;lt;br&amp;gt;[http://sourceforge.net/p/nars2000/code/HEAD/tree/trunk/ Source Forge NARS2000 Source Code]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Why Build Your Own==&lt;br /&gt;
&lt;br /&gt;
First of all, you do not have to build your own.  NARS has already created a great existing Nested Arrays Research System APL interpreter.  NARS2000.exe is freely available at [http://www.nars2000.org/download/Download.html NARS Downloads].  Downloads includes Beta releases for APLers so inclined.&lt;br /&gt;
&lt;br /&gt;
On the other hand, why not expand your programming/software and computer skill horizons?  Many people think and believe &#039;&#039;&#039;Kenneth Iverson&#039;s&#039;&#039;&#039; work remains that of a true genius, a bright light among some very bright intellectual lights, both from a theoretical as well as a software implementation perspective.  Here&#039;s your opportunity to attempt to improve upon some very substantive, preexisting software development work - to further it, to make it even better, and perhaps best of all - &#039;&#039;&#039;it&#039;s free&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Personalize some already pretty amazing software for yourself, or share it with others and get &#039;&#039;&#039;their feedback&#039;&#039;&#039; for even greater insight and subsequent improvement.  NARS version of APL already has over a quarter million lines of source code, subroutines, macros, functions, etc. - 50 years of sometimes intense and continuing evolution, so you are &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; creating something from undeveloped scratch, but inheriting and working from already highly evolved, rigidly disciplined concepts and rigorously debugged software over time.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;APL/2&#039;&#039;&#039; has been used in physics, science, genetic engineering-DNA studies, advanced mathematics, robotics, engineering, artificial intelligence, image processing, bio-medicine, VLSI, financial, statistical and social science applications.  NASA and Astronomers have used APL.&lt;br /&gt;
&lt;br /&gt;
Now APL/2 is 100% customizable.  Perhaps you will be the first to customize APL to safely drive a vehicle, help save a life, make new discoveries or make some process(es) more efficient.&lt;br /&gt;
&lt;br /&gt;
It&#039;s &#039;&#039;&#039;free&#039;&#039;&#039;. It&#039;s &amp;lt;u&amp;gt;&#039;&#039;&#039;evolved&#039;&#039;&#039;&amp;lt;/u&amp;gt;.  Once you start examining NARS/APL/APL2 source code you&#039;ll find it is comprehensive, elegant, process-symbol-efficient, focused toward the end-user, evolved over some fifty years of use, structurally enigmatic, tirelessly debugged &amp;lt;u&amp;gt;and&amp;lt;/u&amp;gt; rich with coding techniques - a great learning tool, even if absolutely nothing else - and NARS believes it is far, far better than just a learning tool.  You&#039;ll learn about Bison Parsing, how it helps define compilers and interpreters.  Further, NARS is a tremendous opportunity to learn more about the human-machine interface; how machine hardware operates and - better understand how software and hardware interact together.&lt;br /&gt;
&lt;br /&gt;
One of the stellar, intellectually expansive aspects of APL/2 is - how fully the language embraces the &amp;lt;u&amp;gt;breadth of hardware functionality&amp;lt;/u&amp;gt;.  This includes instructions running core processor chip(s) and peripheral devices.  This is not your grandparents&#039; punch-card software program run on a room-sized computer, although that was marvelous at its time, but it may have taken him/her several days to get results back for in an introductory chemistry or math lab course.  Today &#039;&#039;&#039;[http://phys.org/news/2015-03-quantum-unexpected-ways.html data structures influence speed of quantum search in unexpected ways]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Platforms==&lt;br /&gt;
&lt;br /&gt;
The current version of NARS2000 may be run and built on a variety of Windows platforms, including most or all post-Windows-98 OS versions.  Furthermore, a long-term goal is to enable NARS to be built on Linux, Mac OS, etc. as per user requests and Developer interests.  If you do not have a Windows machine, the following may be helpful to you:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/187359/5-ways-to-run-windows-software-on-a-mac/ Five ways to run Windows software on a Mac.]&#039;&#039;&#039; From HowToGeek.com, methods include 1)Virtual Machines, 2)Boot Camp, 3)Wine, 4)CrossOver Mac (not free) and 5)Remote Desktop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/133515/4-ways-to-run-windows-software-on-linux/ Four ways to run Windows software on Linux.]&#039;&#039;&#039; Again from HowToGeek.com, methods include 1)Use Wine, 2)Run Windows in a Virtual Machine, 3)Try Crossover (not free) and 4)Remote Desktop.  A fifth way per [http://www.pcworld.com/article/2900497/how-to-run-windows-software-in-linux-everything-you-need-to-know.html PC World] is dual booting both Linux and Windows on your machine.  This essentially involves partitioning hard drives with a portion reserved for Linux and a portion reserved for Windows.  With costs of external hard drives continuing to decline, buying an external or network hard drive may free up hard drive storage space requirements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/173353/how-to-run-windows-software-on-a-chromebook/ How to Run Windows Software on a Chromebook {notebook or tablet PC}.]&#039;&#039;&#039; Again from HowToGeek.com, methods include 1)Access a Windows Desktop Remotely, 2)Use Developer Mode and Install Wine (not available for all Chromebooks), 3)Use Developer Mode and Install a Virtual Machine (may require an Intel Chromebook).&lt;br /&gt;
&lt;br /&gt;
Furthermore, if you work using a tablet or other computing device which supports remote desktop software such as &#039;&#039;&#039;[http://teamviewer.com Team Viewer]&#039;&#039;&#039; and you have a home or work computer running Windows - then you can remotely use NARS over your network and internet using that computer as a host and your local device as a client. Network and internet speeds are sufficiently fast and TeamViewer, for instance, is very good at making your remote desktop seem and respond as if virtually right in front of you.&lt;br /&gt;
&lt;br /&gt;
For the present, the following sections detail descriptions for building the executable with bias towards Windows.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
&lt;br /&gt;
To build the executable &amp;lt;u&amp;gt;in summary&amp;lt;/u&amp;gt; you&#039;ll need the following:&lt;br /&gt;
&lt;br /&gt;
# C Compiler and Linker&lt;br /&gt;
## Make program&lt;br /&gt;
## Resource Compiler&lt;br /&gt;
## Windows SDK&lt;br /&gt;
# Parser Generator&lt;br /&gt;
# Zip Utility&lt;br /&gt;
# PHP (Hypertext Preprocessor)&lt;br /&gt;
# NARS2000 Source Code&lt;br /&gt;
# NARS2000 External Libraries&lt;br /&gt;
# Optionally, Multi-precision Library Source&lt;br /&gt;
# STDINT.H header file&lt;br /&gt;
# Version Control program&lt;br /&gt;
# Doctor Dump SDK&lt;br /&gt;
# Optionally, a File Differencing/Merge program&lt;br /&gt;
&amp;lt;br /&amp;gt;All of the tools you&#039;ll need are &#039;&#039;&#039;freely available&#039;&#039;&#039;.  Some of them happen to be Microsoft-specific. Bill Gates while at Harvard actually worked a bit on/with APL, obviously he discovered the importance of working with arrays and symbolic notation. At the same time there is no reason more generic tools (such as [http://www.delorie.com/djgpp/ DJGPP], [http://www.cygwin.com/ Cygwin] or [http://www.mingw.org/ MinGW]) can&#039;t be used, a task NARS is hoping someone will volunteer to investigate.  In particular, the &#039;&#039;&#039;tools currently used&#039;&#039;&#039; to create the APL Executable, &amp;lt;u&amp;gt;in detail&amp;lt;/u&amp;gt;, are as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
# &amp;lt;u&amp;gt;&#039;&#039;&#039;C&#039;&#039;&#039;&amp;lt;/u&amp;gt; (needed for this NARS2000 project is &#039;&#039;&#039;Visual C++ 2013&#039;&#039;&#039; = C++ &amp;lt;u&amp;gt;GUI development environment and compiler for the C language&amp;lt;/u&amp;gt;, which much of APL&#039;s interpreter is written in). Compiler and Linker:  &#039;&#039;&#039;[https://app.vssps.visualstudio.com/profile/review?download=true&amp;amp;family=VisualStudioExpressDesktop&amp;amp;release=VisualStudio2013Upd4&amp;amp;type=web&amp;amp;slcid=0x409 Microsoft Visual Studio 2013 Express for Desktop Windows]&#039;&#039;&#039; (download requires a FREE Microsoft/Visual Studio account) OS requires Windows XP or later &amp;amp;mdash; includes Link, Make, a Resource Compiler, and an SDK (among others).  Download/Installation Notes: The &#039;&#039;&#039;downloaded file&#039;&#039;&#039; may be double-clicked in Windows Explorer. VS 2013 does NOT Install to a mapped or network drive(but to something like C:\Program Files\...).  It must be Installed on a local PC drive (e.g. C:\...) and &#039;&#039;&#039;unmapped directory&#039;&#039;&#039; (but you can map to it later) - Microsoft apparently requires installation to a local machine drive letter such as &amp;quot;C:\...&amp;quot;. &amp;amp;nbsp; VS2013 Desktop is free &#039;&#039;&#039;and&#039;&#039;&#039; it includes a GUI or graphical user interface (icon-based IDE or integrated developer&#039;s environment), which is geometrically easier to use than a command-line interface.  Windows 8.1 SDK (does NOT require Windows 8.1, but does update for some 8.1 capabilities, especially useful for using Visual Studio 2013; &#039;&#039;&#039;[https://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx?f=255&amp;amp;MSPPError=-2147217396 download is available at Microsoft]&#039;&#039;&#039;.  &amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-size:60%&amp;quot;&amp;gt;&#039;&#039;&#039;Windows SDK&#039;&#039;&#039; (the following MAY NOT BE NECESSARY, SDK=Software Developers Kit, sometimes needed for &#039;&#039;&#039;64-bit installations&#039;&#039;&#039;, usually choose download file GRMSDKX_EN_DVD.iso even for Intel machines) &#039;&#039;&#039;[http://www.microsoft.com/en-us/download/details.aspx?id=18950 download here]&#039;&#039;&#039;, with &#039;&#039;&#039;installation instructions [https://github.com/enGits/engrid/wiki/Configure-Microsoft-Visual-Studio-2008-Express-to-also-build-for-Windows-x64 here]&#039;&#039;&#039;.&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Parser Generator&#039;&#039;&#039;:  &#039;&#039;&#039;[https://cygwin.com/install.html Bison]&#039;&#039;&#039;, a Cygwin package, Save and run either &#039;&#039;&#039;setup-x86.exe&#039;&#039;&#039; (32-bit systems) or &#039;&#039;&#039;setup-x86_64.exe&#039;&#039;&#039; (64-bit systems) as appropriate to your system, &#039;&#039;&#039;Choose A Download Source&#039;&#039;&#039;:  Install from Internet, &#039;&#039;&#039;Select Root Install Directory&#039;&#039;&#039;, &#039;&#039;&#039;Select Local Package Directory&#039;&#039;&#039;, &#039;&#039;&#039;Select Your Internet Connection&#039;&#039;&#039;, &#039;&#039;&#039;Choose A Download Site&#039;&#039;&#039;, &#039;&#039;&#039;Select Packages&#039;&#039;&#039;:  Leave alone &#039;&#039;&#039;All (Default)&#039;&#039;&#039; - first time through, just click [Next], &#039;&#039;&#039;Devel&#039;&#039;&#039;, and &#039;&#039;&#039;bison&#039;&#039;&#039;, other dependent packages may be installed along with &#039;&#039;&#039;bison&#039;&#039;&#039;, if not then &#039;&#039;&#039;after first&#039;&#039;&#039; Cygwin installation finishes, double-click the downloaded Cygwin file in Windows Explorer, downloaded filename should be something like &#039;&#039;&#039;setup-x86_64.exe&#039;&#039;&#039; and the &#039;&#039;&#039;second time through&#039;&#039;&#039; do specifically download and install &#039;&#039;&#039;Dev&#039;&#039;&#039;, &#039;&#039;&#039;Bison&#039;&#039;&#039; - informally note the &#039;&#039;&#039;tree structure&#039;&#039;&#039; during the Bison download/install since &#039;&#039;&#039;creating parse trees&#039;&#039;&#039; is &#039;&#039;&#039;very much&#039;&#039;&#039; a &#039;&#039;Bison program specialty&#039;&#039;, a strength.  Compilers and even APL itself relies heavily on correct statement type recognition and parsing.  To make sure you successfully downloaded and installed &#039;&#039;&#039;bison.exe&#039;&#039;&#039;, the file should be &#039;&#039;&#039;found&#039;&#039;&#039; or reside in the C:\Cygwin\bin or C:\cygwin64\bin folder.  Make note of the folder location since you will need it when setting the PARGEN environment variable shortly, below.&lt;br /&gt;
# &#039;&#039;&#039;Zip Utility&#039;&#039;&#039;:  &#039;&#039;&#039;[http://www.7-zip.org/ 7-Zip]&#039;&#039;&#039; (Latest version, 32- or 64-bit, as appropriate to your system; needed to Extract/Unzip the files and folders you are downloading for this project.)  If you already have a Zip utility program on your PC, Tablet or Server such as WinZip, you can normally skip the 7-Zip download/install.&lt;br /&gt;
# &#039;&#039;&#039;PHP&#039;&#039;&#039; (Hypertext Preprocessor):  &#039;&#039;&#039;[http://www.php.net/downloads.php Downloads]&#039;&#039;&#039; (&amp;lt;u&amp;gt;Windows downloads&amp;lt;/u&amp;gt; for Windows systems.) (Windows binaries/VC9 x86 Thread Safe/Latest version/Zip or Installer, your choice) (Items to Install: Entire &#039;&#039;&#039;Script Executable&#039;&#039;&#039;, and entire &#039;&#039;&#039;Extras&#039;&#039;&#039;). Place the unzipped file&#039;s contents into something like &amp;quot;C:\PHP&amp;quot;. The executable file &amp;quot;php.exe&amp;quot; needs to be &amp;quot;on your directory or environmental path&amp;quot; when later compiling or building the APL executable.&lt;br /&gt;
# &#039;&#039;&#039;NARS2000 Source Code&#039;&#039;&#039;:  Click on &#039;&#039;&#039;[http://sourceforge.net/projects/nars2000/ Browse Code] button&#039;&#039;&#039; at &#039;&#039;&#039;NARS&#039;&#039;&#039; SourceForge.net &#039;&#039;&#039;code repository&#039;&#039;&#039;. You may also use a Version Control program, e.g. see Tortoise SVN below and [http://tortoisesvn.net/ here, see their download page]. &amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-size:70%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;u&amp;gt;&#039;&#039;&#039;Prior&#039;&#039;&#039;&amp;lt;/u&amp;gt; non-current NARS Source Code versions available at [http://code.google.com/p/nars2000/source/checkout Code Google].&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;NARS2000 External Libraries&#039;&#039;&#039;:  [http://www.nars2000.org/download/binaries/misc.zip Miscellaneous Library] (misc.zip, which contains 4 .php files and 1 .ttf file - all directly unzipped into C:\NARS2000) and the following NARS libraries:&lt;br /&gt;
## [http://www.nars2000.org/download/binaries/mplibs.zip &#039;&#039;&#039;MPIR/MPFR/ECM Libraries&#039;&#039;&#039;] - These libraries(mplibs.zip) should be directly extracted or unzipped into the C:\NARS2000 folder such that three(3) distinct sub-directories are &#039;&#039;&#039;directly&#039;&#039;&#039; created: \ecm, \mpfr and \mpir, e.g. C:\NARS2000\ecm.&lt;br /&gt;
## [http://www.nars2000.org/download/binaries/gsldir.zip &#039;&#039;&#039;gsl Library&#039;&#039;&#039;] - This library(gsldir.zip) should be directly un-zipped into the C:\NARS2000 folder such that it becomes &#039;&#039;&#039;C:\NARS2000\gsl&#039;&#039;&#039;.  Folder structure &amp;quot;C:\NARS2000\gsldir\gsl&amp;quot; would be invalid.&lt;br /&gt;
## [http://www.nars2000.org/download/binaries/qdebug.zip &#039;&#039;&#039;qdebug Library&#039;&#039;&#039;] - This library(qdebug.zip) should also be directly un-zipped into the C:\NARS2000 folder such that it becomes &#039;&#039;&#039;C:\NARS2000\qdebug&#039;&#039;&#039;.  Make sure it is NOT double-enclosed when unzipped, for example the following would be an invalid folder setup structure: C:\NARS2000\qdebug\qdebug.&lt;br /&gt;
# &#039;&#039;&#039;Multi-precision Library Source Code:  [http://www.nars2000.org/download/binaries/mpfns-src.zip MPIR/MPFR/ECM Source]&#039;&#039;&#039;.  This zipped download is large (roughly 0.5GB) and is needed primarily to reproduce files in the MPIR/MPFR/ECM Library download so as to satisfy requirements of the GNU General Public License (GPL) v3.  For more details on using the files in the download, look in the zipped file for &amp;lt;b&amp;gt;&amp;lt;code&amp;gt;readme.txt&amp;lt;/code&amp;gt;&amp;lt;/b&amp;gt;.  If you are content to use the already-compiled existing binary libraries in [http://www.nars2000.org/download/binaries/mplibs.zip MPIR/MPFR/ECM Libraries], you may not immediately need the MPIR/MPFR/ECM Source Code; on the other hand - 128-bit CPU chips are in manufacturing production pipelines, quadruple-precision 128-bit floating-point format has been standardized by the IEEE and ultra-precise calculations are already needed in such fields as quantum physics, ref. [http://phys.org/news/2014-06-physicists-quantum-ultra-precise.html Physicists take quantum leap toward ultra-precise measurement], 6/2/2014.  One of APL&#039;s strengths is its handling of mathematically precise calculations and the &#039;&#039;&#039;large size&#039;&#039;&#039; of the multi-precision source code library reinforces that.&lt;br /&gt;
# [http://msinttypes.googlecode.com/svn/trunk/stdint.h STDINT.H] header file installed in the MS Visual Studio 2013 include directory (V:\VC\include -- see below)&lt;br /&gt;
# &#039;&#039;&#039;SubVersion Control program&#039;&#039;&#039;:  [http://tortoisesvn.net/downloads Tortoise SVN] (Current version, 32- or 64-bit depending upon your OS)&lt;br /&gt;
# &#039;&#039;&#039;Doctor Dump SDK&#039;&#039;&#039;:  [https://drdump.com/public/DoctorDumpSDK/DoctorDumpSDK.zip Doctor Dump SDK] - e.g. DoctorDumpSDK.zip.&lt;br /&gt;
# &#039;&#039;&#039;File Differencing/Merge program&#039;&#039;&#039;:  [http://winmerge.org/ WinMerge] (&#039;&#039;&#039;Latest stable version&#039;&#039;&#039;, usually downloads to something like WinMerge-k.m.n-Setup.exe where k, m and n are version/sub-version numbers.)&lt;br /&gt;
&lt;br /&gt;
==Install Tools==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Preface&#039;&#039;&#039;, Convention: &#039;&#039;&#039;x86&#039;&#039;&#039; generally refers to &#039;&#039;&#039;32-bit&#039;&#039;&#039; software installations while 64 (or blank) represents 64-bit software installations on a Windows OS machine.  NARS works on &#039;&#039;&#039;both&#039;&#039;&#039; 32-bit and 64-bit systems, but you should decide &#039;&#039;&#039;in advance&#039;&#039;&#039; which type of install you want 64 vs. 32-bit - ditto for all tool installs.  Installation examples:&lt;br /&gt;
# C:\Program Files (x86)\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Represents 32-bit software program installation, normal folder location.&lt;br /&gt;
# C:\Program Files\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Represents 64-bit software program installation, normal folder location.&lt;br /&gt;
Also, &#039;&#039;&#039;both&#039;&#039;&#039; folder locations just above frequently and even always exist on most machines, but for consistency and integration purposes the software should be 32 &#039;&#039;&#039;&amp;lt;u&amp;gt;or&amp;lt;/u&amp;gt;&#039;&#039;&#039; 64-bit.  Most people choose 64-bit installs if their Windows OS supports the 64-bit architecture, with 32-bit available for backward software compatibility in conjunction with less current systems.  If you don&#039;t know which architecture your system uses, go to the Control Panel, System Information.  Downloads usually get placed into a Downloads folder.  Several of the unzipped NARS tools get placed directly into the C:\NARS2000 folder, see individual tools for exact locations.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To install the Microsoft &#039;&#039;&#039;Visual Studio 2013 Express C compiler&#039;&#039;&#039;, see Downloads(&amp;lt;u&amp;gt;detail&amp;lt;/u&amp;gt;, #1 above).  Visual C++ 2013 usually installs into something like, &amp;quot;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VCExpress.exe&amp;quot; (64-bit loc) and you may want to place a &#039;&#039;&#039;Shortcut&#039;&#039;&#039; to &#039;&#039;&#039;VCExpress.exe&#039;&#039;&#039; on your Desktop by right-clicking on that VCExpress.exe file in Windows Explorer and Send To - Desktop (create shortcut). (Windows 8 Users: You can also &#039;&#039;&#039;Pin VCExpress.exe To your Taskbar&#039;&#039;&#039; for quick, easy access.)  (Prior/obs. Microsoft setup routine name: run the vcsetup.exe program.)  Afterwards including after drive plus folder remapping - the files &#039;&#039;&#039;msobj80.dll&#039;&#039;&#039;, &#039;&#039;&#039;mspdb80.dll&#039;&#039;&#039;, &#039;&#039;&#039;mspdbcore.dll&#039;&#039;&#039;, and &#039;&#039;&#039;mspdbsrv.exe&#039;&#039;&#039; all need to be copied from &#039;&#039;&#039;V:\Common7\IDE&#039;&#039;&#039; to &#039;&#039;&#039;V:\VC\bin&#039;&#039;&#039;, where the &#039;&#039;&#039;V&#039;&#039;&#039; drive is a substitute/mapping for &#039;&#039;&#039;C:\Program Files\Microsoft Visual Studio 9.0&#039;&#039;&#039;.  See the discussion below on [[#Set_Up_Makefile_Environment_Variables|Set Up Makefile Environment Variables]].&lt;br /&gt;
&lt;br /&gt;
To install the Parser Generator (Bison), see the instructions above.  When the Cygwin setup program asks you to choose a &#039;&#039;&#039;Default Text File Type&#039;&#039;&#039;, choose &#039;&#039;&#039;DOS/text&#039;&#039;&#039; so any committed files are the same as in the version control repository.&lt;br /&gt;
&lt;br /&gt;
To install Doctor Dump SDK, unzip it in a directory at or above %NARSROOT%, this usually means unzipping into folder C:\DoctorDumpSDK.  See also discussion below on [[#Set_Up_Makefile_Environment_Variables|Set Up Makefile Environment Variables]].&lt;br /&gt;
&lt;br /&gt;
Install the rest of the tools as per their instructions above, in the Downloads section.&lt;br /&gt;
&lt;br /&gt;
==Install The Source Code==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;First create a NARS2000 &#039;&#039;&#039;root folder&#039;&#039;&#039; somewhere on one of your hard drives, perhaps calling it &#039;&#039;&#039;NARS2000&#039;&#039;&#039;, as in &#039;&#039;&#039;C:\NARS2000&#039;&#039;&#039; (most common) or perhaps at some lower level.  The source code and external libraries are typically installed at or into this level, e.g. qdebug.zip into C:\NARS2000 as C:\NARS2000\qdebug.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Under the root folder make three folders:  &#039;&#039;&#039;trunk&#039;&#039;&#039;, &#039;&#039;&#039;msieve&#039;&#039;&#039;, and &#039;&#039;&#039;branches&#039;&#039;&#039;.  The first folder (&#039;&#039;&#039;trunk&#039;&#039;&#039;) will hold the main body of NARS/APL built exe interpreter &#039;&#039;&#039;source&#039;&#039;&#039; code.  The second (&#039;&#039;&#039;msieve&#039;&#039;&#039;) will be utilized for code used to &#039;&#039;&#039;factor numbers&#039;&#039;&#039;, and the third (&#039;&#039;&#039;branches&#039;&#039;&#039;) will contain individual developer branches of the main code not as yet ready for release, but made public for other developers to see.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Using a Version Control program such as &#039;&#039;&#039;TortoiseSVN&#039;&#039;&#039;, download-checkout the source code (see [[#Check_Out_The_Source_Code|Check Out The Source Code]]),&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Download the &#039;&#039;&#039;misc.zip&#039;&#039;&#039;, &#039;&#039;&#039;qdebug.zip&#039;&#039;&#039;, &#039;&#039;&#039;gsldir.zip&#039;&#039;&#039;, and &#039;&#039;&#039;mplibs.zip&#039;&#039;&#039; files into the root folder and unzip them (directly into that root folder, e.g. C:\NARS2000) using e.g. &#039;&#039;&#039;7z.exe&#039;&#039;&#039; (unzip/extract program used) as in &#039;&#039;&#039;7z x misc.zip&#039;&#039;&#039;, &#039;&#039;&#039;7z x qdebug.zip&#039;&#039;&#039;, &#039;&#039;&#039;7z x gsldir.zip&#039;&#039;&#039;, and &#039;&#039;&#039;7z x mplibs.zip&#039;&#039;&#039; - or double-click on those downloaded zip file names using Windows File Explorer and Extract All (again typically directly into NARS root folder previously set up).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Check Out The Source Code==&lt;br /&gt;
&lt;br /&gt;
An easy way to initialize your copy of the source code for the first time, although it may initially appear cumbersome to an SVN newcomer, is to use a version control program such as TortoiseSVN, mentioned above.  One very helpful feature of TortoiseSVN is that it integrates well with Windows File Explorer.  After downloading and installing TortoiseSVN and then rebooting your PC, there are two directories you will need to Install/initialize-checkout/TortoiseSVN-on.&lt;br /&gt;
# &#039;&#039;&#039;First&#039;&#039;&#039; bring up Windows Explorer, right-click on the &#039;&#039;&#039;trunk&#039;&#039;&#039; folder you manually created, and choose &#039;&#039;&#039;SVN Checkout&#039;&#039;&#039;.  The online NARS URL of repository: is &#039;&#039;&#039;svn://svn.code.sf.net/p/nars2000/code/trunk&#039;&#039;&#039; and your local Checkout directory: is &#039;&#039;&#039;C:\NARS2000\trunk&#039;&#039;&#039; (or wherever your trunk folder is) - quite likely you will have to edit the TortoiseSVN repository field or program local folder field because default text inserted by TortoiseSVN usually does not match folder location(s) identically.  Depth should show Fully recursive, the default.  To begin source code downloading/checkout into your locally created &#039;&#039;&#039;trunk&#039;&#039;&#039; folder click the &#039;&#039;&#039;OK&#039;&#039;&#039; button. Code downloading/checkout should then begin. With a high-speed Internet connection, time required to TortoiseSVN download/checkout NARS code is on the order of roughly two minutes.  When successfully complete, you should get a return message at the end of the downloads list, like &#039;&#039;&#039;Completed at revision nnnn&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Second&#039;&#039;&#039; (and this is a similar repeat step but using folder &#039;&#039;&#039;msieve&#039;&#039;&#039; instead of trunk), bring up Windows Explorer, right-click on the &#039;&#039;&#039;msieve&#039;&#039;&#039; folder you likewise manually created - and choose &#039;&#039;&#039;SVN Checkout...&#039;&#039;&#039;.  This time online NARS &#039;&#039;&#039;URL of repository:&#039;&#039;&#039; is &#039;&#039;&#039;svn://svn.code.sf.net/p/nars2000/code/msieve&#039;&#039;&#039; (this address is slightly different than step 1) and your local &#039;&#039;&#039;Checkout directory:&#039;&#039;&#039; is &#039;&#039;&#039;C:\NARS2000\msieve&#039;&#039;&#039; (or wherever your &#039;&#039;&#039;msieve&#039;&#039;&#039; folder is).  Again, depth should be fully recursive and click the &#039;&#039;&#039;OK&#039;&#039;&#039; button to begin.  This step two normally completes in under five seconds, downloading far fewer files than the trunk download.  Normally, the &amp;lt;u&amp;gt;same&amp;lt;/u&amp;gt; msieve &amp;lt;u&amp;gt;revision&amp;lt;/u&amp;gt; number should appear after finishing this download as per trunk download in step 1.&lt;br /&gt;
&lt;br /&gt;
The above &#039;&#039;&#039;two&#039;&#039;&#039; steps/distinct-folders need be initialized this first checkout time through - in order to establish the special hidden SVN directories for subversion &amp;quot;synching&amp;quot; between your local source code and NARS online code repository. As a brief check that your &#039;&#039;&#039;local&#039;&#039;&#039; NARS source code files match NARS, there should be green check marks on folders trunk and msieve on your PC, placed there by TortoiseSVN. [http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-wcstatus.html  TortoiseSVN Status Information.]&lt;br /&gt;
&lt;br /&gt;
You will still or now need to download and unzip &#039;&#039;&#039;qdebug.zip&#039;&#039;&#039;, &#039;&#039;&#039;misc.zip&#039;&#039;&#039;, &#039;&#039;&#039;gsldir.zip&#039;&#039;&#039;, and &#039;&#039;&#039;mplibs.zip&#039;&#039;&#039; as described above.&lt;br /&gt;
&lt;br /&gt;
Subsequently, you may quickly and easily update your local copy of NARS source code by right-clicking on the &#039;&#039;&#039;trunk&#039;&#039;&#039; and/or &#039;&#039;&#039;msieve&#039;&#039;&#039; folders and choose &#039;&#039;&#039;SVN Update&#039;&#039;&#039;.  One useful feature of sub-versioning programs such as TortoiseSVN is that only &#039;&#039;&#039;changed files&#039;&#039;&#039; from the online latest official version will need to be subsequently downloaded as changes are made in futuro, re subsequent NARS revisions.&lt;br /&gt;
&lt;br /&gt;
Since you may be unfamiliar with the download process your first time through, it make take slightly longer; however, the second or third time you &amp;lt;u&amp;gt;Check Out The Source Code&amp;lt;/u&amp;gt;, over time, the entire &amp;quot;update to most current NARS source code revision&amp;quot; process will probably take under 3 to 5 minutes total, depending however on your (high-speed) Internet service provider&#039;s(ISP) download speed.&lt;br /&gt;
&lt;br /&gt;
==Folders==&lt;br /&gt;
&lt;br /&gt;
After unzipping the above files, the structure under the &#039;&#039;&#039;NARS2000 root folder&#039;&#039;&#039; should look very much like the following(&#039;&#039;&#039;leftmost column&#039;&#039;&#039;), where lower level sub-directories and individual sub-folder file names have been omitted:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;| style=&amp;quot;width: 40%; border:1px dotted blue;&amp;quot; &lt;br /&gt;
!&amp;lt;u&amp;gt;&#039;&#039;&#039;NARS2000&#039;&#039;&#039; SubFolder:&amp;lt;/u&amp;gt;&lt;br /&gt;
! &amp;lt;u&amp;gt;Downloaded Zip &#039;&#039;&#039;Source&#039;&#039;&#039; File or Checkout Process:&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| branches\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | Created manually(1)&lt;br /&gt;
|-&lt;br /&gt;
| ecm\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;mplibs&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| gsl\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;gsldir&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| mpfr\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;mplibs&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| mpir\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;mplibs&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| msieve\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;msieve&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| qdebug\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;qdebug&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| trunk\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\binaries\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\Extensions\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\htdocs\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\images\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\MediaWiki\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\ReleaseNotes\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\WineHQ\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
(1) Subfolder &#039;&#039;&#039;\branches&#039;&#039;&#039; should be &#039;&#039;&#039;created manually&#039;&#039;&#039; (e.g. Windows Explorer, right-click, New, Folder).  It is used to hold subprojects you may develop.  For example if your name is Bill Gates, you might have the following subfolders, each representing a NARS subproject:&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\NARS_Spreadsheets&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\NARS_WordProcPlusAPLEdits&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\EZMenus&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\Graphics&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Choose How To Build==&lt;br /&gt;
&lt;br /&gt;
The following sections describe two alternate ways to build the executable.  One is the GUI interface of VC++ Express, the other is a command line interface using a &#039;&#039;&#039;makefile&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Set Up VC++ Express==&lt;br /&gt;
&lt;br /&gt;
If you are using Visual Studio 2013/VC++ Express, the project file is in the &#039;&#039;&#039;trunk&#039;&#039;&#039; folder and is called &#039;&#039;&#039;NARS2000.vcproj&#039;&#039;&#039;.  You may load it manually every time you invoke VC++ Express, or you may load it automatically by placing the path to the project file on the command line in the VC++ Express shortcut as in &#039;&#039;&#039;&amp;quot;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VCExpress.exe&amp;quot; C:\NARS2000\trunk\NARS2000.vcproj&#039;&#039;&#039; or wherever you defined your NARS2000 root folder.&lt;br /&gt;
&lt;br /&gt;
The vast majority of the project settings are found in the above file with some exceptions.&lt;br /&gt;
&lt;br /&gt;
==Set Up Makefile and Environment Variables==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=25%&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Windows 8&#039;&#039;&#039;: Setting up Environment and Path Variable(s):&lt;br /&gt;
Under Settings, Control Panel, System and Security, System, Advanced System Settings, Advanced (Tab) &#039;&#039;&#039;or&#039;&#039;&#039; in Control Panel &amp;lt;u&amp;gt;Search&amp;lt;/u&amp;gt; for &#039;&#039;&#039;Environment Variables&#039;&#039;&#039;,&lt;br /&gt;
* Click &#039;&#039;&#039;Environment Variables&#039;&#039;&#039; button - There is both a &#039;&#039;&#039;Temp Variable&#039;&#039;&#039; and &#039;&#039;&#039;Path Variable&#039;&#039;&#039;.&lt;br /&gt;
:: There are 2 sections, User Account Variables and System Variables.  You normally want to add new &#039;&#039;&#039;System Variables&#039;&#039;&#039;.&lt;br /&gt;
::: Click &#039;&#039;&#039;[New]&#039;&#039;&#039; button for a &amp;lt;u&amp;gt;New&amp;lt;/u&amp;gt; System Variable:&lt;br /&gt;
:::: Variable name &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;PARGEN&#039;&#039;&#039;&lt;br /&gt;
:::: Variable value &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;C:\cygwin64\bin\bison&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;&amp;lt; typical for a 64 bit install(for bison.exe in subfolder bin), for 32 bits installs see below for variable &#039;&#039;&#039;set&#039;&#039;&#039; values.&lt;br /&gt;
* Normally add a &#039;&#039;&#039;New&#039;&#039;&#039; variable (var Name plus Value) for each of the &#039;&#039;&#039;eight Set&#039;&#039;&#039; vars commands listed below, 8 environment variable names - such as NARSROOT, CS_DIR, ZIPPRG, PARGEN, etc.&lt;br /&gt;
* If you need to add another Path to an existing variable, each new or added path is separated with a semi-colon.&lt;br /&gt;
* After updating any Environment/Path variable(s) you apparently need to reboot since the above variable changes only affect changes in the Registry until PC is rebooted.&lt;br /&gt;
* The instructions below should also or alternatively work.&lt;br /&gt;
&amp;lt;hr width=25%&amp;gt;&lt;br /&gt;
If you are building from the &#039;&#039;&#039;makefile&#039;&#039;&#039; or working with the GUI C++ Compiler, you&#039;ll need to set &#039;&#039;&#039;eight environment variables&#039;&#039;&#039; in your &#039;&#039;&#039;autoexec.bat&#039;&#039;&#039; file (&#039;&#039;&#039;or&#039;&#039;&#039; see just above for setting Environment Variables via &#039;&#039;&#039;Windows Control Panel&#039;&#039;&#039;). Note that &#039;&#039;Environment variable #n&#039;s&#039;&#039; just below are shown only for helpful reference purposes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REM Path of the root of the NARS2000 project *ending with a backslash*&lt;br /&gt;
Set NARSROOT=C:\NARS2000^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #1&lt;br /&gt;
&lt;br /&gt;
REM Path to Doctor Dump SDK root&lt;br /&gt;
Set CS_DIR=C:\DoctorDumpSDK^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Environment variable #2&lt;br /&gt;
&lt;br /&gt;
REM Path and name of zip program (7-Zip)&lt;br /&gt;
Set ZIPPRG=&amp;quot;C:\Program Files\7-Zip\7z&amp;quot; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #3&lt;br /&gt;
&lt;br /&gt;
REM Path and name of parser generator (bison) &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Environment variable #4 (next line)&lt;br /&gt;
Set PARGEN=C:\Cygwin\bin\bison &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; OR for a 64-bit install &amp;gt;&amp;gt; &amp;amp;nbsp; Set PARGEN=C:\cygwin64\bin\bison&lt;br /&gt;
&lt;br /&gt;
REM Path and name of makedep program&lt;br /&gt;
Set MAKEDEP=%NARSROOT%makedep.php &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #5&lt;br /&gt;
&lt;br /&gt;
REM Path and name of the &amp;lt;makepro.php&amp;gt; program&lt;br /&gt;
Set MAKEPRO=%NARSROOT%makepro.php &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Environment variable #6&lt;br /&gt;
&lt;br /&gt;
REM Folder of SDK (&amp;quot;C:\Program Files\Microsoft SDKs\Windows\v7.0A&amp;quot;)&lt;br /&gt;
Set SDK=U:^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #7&lt;br /&gt;
&lt;br /&gt;
REM MSVC compiler (&amp;quot;C:\Program Files\Microsoft Visual Studio 9.0&amp;quot;)&lt;br /&gt;
Set MSVC=V:\VC^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;75%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Mapping Virtual Drive Letters:&#039;&#039;&#039;&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You will be using Windows &#039;&#039;&#039;subst&#039;&#039;&#039; command to map drive letters as references to drives &#039;&#039;&#039;U:&#039;&#039;&#039; and &#039;&#039;&#039;V:&#039;&#039;&#039; that several of the above &#039;&#039;&#039;environment variables&#039;&#039;&#039; refer to.  Microsoft explanation of &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&#039;&#039;&#039;[https://technet.microsoft.com/en-us/library/bb491006.aspx subst command here]&#039;&#039;&#039;.&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Modify your C:\AutoExec.bat file to include something approximating the following highlighted text(version#/32/64 bit installs each vary), &#039;&#039;&#039;include&#039;&#039;&#039; the enclosing quote chars just below:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;subst U: &amp;quot;C:\Program Files\Microsoft SDKs\Windows\v7.0A&amp;quot;&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;(or whatever your current version is)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;subst V: &amp;quot;C:\Program Files\Microsoft Visual Studio 9.0&amp;quot;&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (ditto re version  9.0=Visual Studio 2008)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If you do &amp;lt;u&amp;gt;not have&amp;lt;/u&amp;gt; an &#039;&#039;&#039;AutoExec.bat&#039;&#039;&#039; file (many &#039;&#039;&#039;Windows 7 and 8&#039;&#039;&#039; users may not):&lt;br /&gt;
: Create a &amp;lt;u&amp;gt;new text document&amp;lt;/u&amp;gt; using Windows File Explorer, rename it as AutoExec.bat and move(or copy) it to the &#039;&#039;&#039;C:\&#039;&#039;&#039; drive folder &#039;&#039;&#039;with the above two subst&#039;&#039;&#039; commands in it.&lt;br /&gt;
: Windows 7 and 8 users: File AutoExec.bat no longer automatically gets run at system-user boot-up so &#039;&#039;&#039;place a Shortcut to AutoExec.bat&#039;&#039;&#039; in the Program files &#039;&#039;&#039;Startup&#039;&#039;&#039; folder location(navigate Windows File Explorer to &#039;&#039;&#039;one&#039;&#039;&#039; of the below locations, right-click, &#039;&#039;&#039;New&#039;&#039;&#039;, &#039;&#039;&#039;Shortcut&#039;&#039;&#039;, &#039;&#039;&#039;AutoExec.bat&#039;&#039;&#039;).  The Windows 7/8 Startup Folder usually is located as follows:&lt;br /&gt;
:: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (general/all users Startup folder) &#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
:: C:\Users\&#039;&#039;&#039;UserName&#039;&#039;&#039;\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (single user Startup folder, &#039;&#039;&#039;UserName varies&#039;&#039;&#039;)&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039;: A successfully mapped &#039;&#039;&#039;V&#039;&#039;&#039; drive should contain a sub-sub-subfolder which then contains the &#039;&#039;&#039;amd64\nmake.exe&#039;&#039;&#039; (64-bit systems) file or &#039;&#039;&#039;bin\nmake.exe&#039;&#039;&#039; (32-bit systems), e.g. &#039;&#039;&#039;typical&#039;&#039;&#039; 64-bit configuration/location:&amp;lt;br&amp;gt;&#039;&#039;&#039;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\nmake.exe&#039;&#039;&#039;.&lt;br /&gt;
:The V drive map would &#039;&#039;&#039;only&#039;&#039;&#039; include linking through subfolder &#039;&#039;&#039;\Visual Studio 9.0&#039;&#039;&#039;.  After creating the linked drives, just &#039;&#039;&#039;check&#039;&#039;&#039; to make sure your mapped &#039;&#039;&#039;V&#039;&#039;&#039; drive has the &#039;&#039;&#039;nmake.exe&#039;&#039;&#039; contained one or several subfolder levels below it. The NARS2000.exe automated Compile/Build uses &#039;&#039;&#039;nmake.exe&#039;&#039;&#039; during exe construction.  64-bit installs require the &#039;&#039;&#039;amd64\nmake.exe&#039;&#039;&#039; file - paradoxically even if your machine&#039;s chipset is Intel, a minor Microsoft variation.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Typical mapped configurations just below, but again each install/version# may vary:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;U&#039;&#039;&#039; = &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;C:\Program Files\Microsoft SDKs\Windows\v7.0A&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; (or v6.0A or whatever your downloaded/current version is)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;V&#039;&#039;&#039; = &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;C:\Program Files\Microsoft Visual Studio 9.0&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (or &#039;&#039;&#039;C:\Program Files (x86)\Microsoft Studio 9.0&#039;&#039;&#039; for 64-bit installs, again look for nmake.exe in a subfolder)&amp;lt;br&amp;gt;&lt;br /&gt;
As a &#039;&#039;&#039;check&#039;&#039;&#039; to make sure the &#039;&#039;&#039;subst&#039;&#039;&#039; commands worked, there should now be &#039;&#039;&#039;2 new drive letters visible in Windows Explorer, in the leftmost window for virtual drives/mapped folders - U and V&#039;&#039;&#039;.  &#039;&#039;To avoid having to reboot&#039;&#039; at present, just &#039;&#039;&#039;open&#039;&#039;&#039;(not edit but run) &#039;&#039;&#039;AutoExec.bat AFTER&#039;&#039;&#039; making sure it is 100% correctly configured.  Having a correctly configured AutoExec.bat file will ensure not having to manually link drives U and V each time the NARS2000.exe is built-rebuilt.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;40%&amp;quot;&amp;gt;&lt;br /&gt;
If you install NARS project tools in other folders, make appropriate changes to the above mappings.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lastly don&#039;t forget:&#039;&#039;&#039; To append three folders: &#039;&#039;&#039;C:\cygwin64\bin&#039;&#039;&#039; , &#039;&#039;&#039;V:\Common7\IDE&#039;&#039;&#039; and &#039;&#039;&#039;C:\PHP&#039;&#039;&#039; to your &#039;&#039;&#039;Path&#039;&#039;&#039; variable &#039;&#039;&#039;PATH=%PATH%;C:\cygwin64\bin;V:\Common7\IDE;C:\PHP&#039;&#039;&#039; or see &#039;&#039;&#039;Control Panel&#039;&#039;&#039; search for &#039;&#039;&#039;Path&#039;&#039;&#039;, then &#039;&#039;&#039;Edit&#039;&#039;&#039; System Environment Variables for your account, system variable named &#039;&#039;&#039;Path&#039;&#039;&#039;; append to that &#039;&#039;&#039;Path&#039;&#039;&#039; variable &amp;amp;nbsp; &#039;&#039;&#039;;C:\cygwin64\bin;V:\Common7\IDE;C:\PHP&#039;&#039;&#039; &amp;amp;nbsp; - (three additional paths, semicolon separated) so Visual C&#039;s &#039;&#039;&#039;Make&#039;&#039;&#039; plus &#039;&#039;&#039;Compiler&#039;&#039;&#039; can find DLLs, exe&#039;s and Tools you have so diligently downloaded, then installed.&lt;br /&gt;
&lt;br /&gt;
==Pre First Compile and Localization Notes==&lt;br /&gt;
&lt;br /&gt;
Make/Compile local Environment Variable &#039;&#039;&#039;%NARSROOT%&#039;&#039;&#039; is presently set using file &#039;&#039;&#039;C:\NARS2000\trunk\wcustomize.bat&#039;&#039;&#039;.  This bat file is called by other major trigger-compile bat files such as mk32.bat, mk64.bat, w32.bat and w64.bat - which oversee-initiate compilation.  The %NARSROOT% environment variable is important in indicating &amp;lt;u&amp;gt;where&amp;lt;/u&amp;gt; Make/Compilation will occur.  &amp;lt;u&amp;gt;Before&amp;lt;/u&amp;gt; first locally compiling NARS2000, you likely need to manually edit (using Notepad or a local text file editor) file &amp;lt;u&amp;gt;&#039;&#039;&#039;trunk\wcustomize.bat&#039;&#039;&#039;&amp;lt;/u&amp;gt; and make sure the following are initially correct per your &#039;local PC NARS installation&#039; i.e. within wcustomize.bat:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Set NARSROOT=C:\NARS2000^\&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (Note: &#039;&#039;&#039;No %&#039;&#039;&#039; symbols are needed in &amp;lt;u&amp;gt;set/specification&amp;lt;/u&amp;gt; rows in wcustomize.bat, e.g. replace &#039;R:\NARS2000&#039; to &#039;C:\NARS2000&#039; as shown at left)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Set CS_DIR=C:\DoctorDumpSDK^\&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; (again R:\ was changed to C:\)&amp;lt;br&amp;gt;&lt;br /&gt;
The additional hat(^) symbol in the above bat commands is needed for directory/folder recombination purposes, essentially sub-directory parse-point identification and or recombination point, where NARS may use subdirectories/parsing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prior&#039;&#039;&#039; to using &#039;&#039;&#039;Visual Studio&#039;&#039;&#039; and its &#039;&#039;&#039;IDE&#039;&#039;&#039;(integrated developer&#039;s environment) for NARS Building/Compilation purposes a first time, and to help ensure the proper installation of NARS source code - it is very helpful/necessary to open a CMD.EXE window using &amp;lt;big&amp;gt;&#039;&#039;&#039;Windows Start&#039;&#039;&#039;, &#039;&#039;&#039;CMD.EXE&#039;&#039;&#039;&amp;lt;/big&amp;gt;.  This will open up a small CMD window.  While &amp;lt;big&amp;gt;inside the opened CMD.EXE window&amp;lt;/big&amp;gt;, navigate to your local C:\NARS2000\trunk folder, using &amp;lt;big&amp;gt;&#039;&#039;&#039;cd C:\NARS2000\trunk&#039;&#039;&#039;&amp;lt;/big&amp;gt; where cd represents change directory.  Now run &amp;lt;big&amp;gt;&#039;&#039;&#039;mk32.bat&#039;&#039;&#039;&amp;lt;/big&amp;gt; by typing it in, to compile NARS2000&#039;s 32-bit executable.  If mk32.bat is successful and if your installation is 100% correct, two identical files in separate folders will be created(built and compiled) using bat commands from inside that CMD window/session:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\RET\ND32\NARS2000.exe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\binaries\ND32\NARS2000.exe&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If that 32-bit NARS make/build was successful, then from the same CMD.EXE window, type &amp;lt;big&amp;gt;&#039;&#039;&#039;mk64.bat&#039;&#039;&#039;&amp;lt;/big&amp;gt;. This should likewise compile locally the &#039;&#039;&#039;64-bit&#039;&#039;&#039; NARS Executable, with again two resulting &#039;&#039;&#039;exe output files:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\RET\ND64\NARS2000.exe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\binaries\ND64\NARS2000.exe&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Successfully completing mk32.bat and mk64.bat along with presence of their respective &#039;&#039;&#039;NARS2000.exe&#039;&#039;&#039; output files generally confirm successful installation of NARS source code, as well as correct installation for several associated tandem utility tools re compiling NARS2000.exe on your server, PC, notebook or tablet computer.&lt;br /&gt;
&lt;br /&gt;
==Building The Executable==&lt;br /&gt;
&lt;br /&gt;
Congratulations, if you&#039;ve successfully arrived at this section, your resume now includes such useful terms as software installation wizard and relentless software engineering candidate.  You are part of an elite group - the few, the proud, NARS geek marines; also known as tomorrow&#039;s APL-symbol-set event-horizon squad.  You&#039;ve managed to easily or otherwise cross several potentially deep programming ravines in the process.&lt;br /&gt;
&lt;br /&gt;
At this point you should be ready to build the executable, again - this time however from inside Visual Studio&#039;s IDE(integrated developer&#039;s environment).  There are two general ways to build NARS executable.  Method one: Involves the time-honored command-line batch file compile mode using files mk32.bat or mk64.bat - as you should have previously discovered in the section &#039;&#039;&#039;[[#Pre_First_Compile_and_Localization_Notes|Pre First Compile and Localization Notes]]&#039;&#039;&#039; while using Windows CMD.EXE.&lt;br /&gt;
&lt;br /&gt;
Method two: Involves again first opening a (Windows Start button) &#039;&#039;&#039;CMD.EXE&#039;&#039;&#039; window and running &#039;&#039;&#039;w32.bat start&#039;&#039;&#039; (all one command) or &#039;&#039;&#039;w64.bat start&#039;&#039;&#039;.  Immediately or shortly, you should see Visual Studio 2013&#039;s program visualize, load and run - with either the 32-bit or 64-bit NARS2000 project/program loaded.  After Visual Studio 2013 finishes loading - simply click Build.  Full use of Visual Studio 2013&#039;s IDE (integrated developer&#039;s environment) should now be available for you to experiment with, develop code on, debug and customize APL as you may choose.  Your first time through with running &#039;&#039;&#039;w32.bat start&#039;&#039;&#039; and &#039;&#039;&#039;w64.bat start&#039;&#039;&#039;:&lt;br /&gt;
* There is usually a Visual Studio &#039;&#039;&#039;One Way Migration&#039;&#039;&#039; message which displays.  This is normal, TBE(to be expected), and yes you DO at that point want to migrate the NARS2000 project to Visual Studio 2013.  There are usually roughly 20 migration warnings which also show up in an Internet Browser page re the Migration Report - again, all normally to be expected.  However, there should be &#039;&#039;&#039;&amp;lt;u&amp;gt;zero errors&amp;lt;/u&amp;gt;&#039;&#039;&#039; in the migration report.&lt;br /&gt;
* If all went satisfactorily well with the Migration, you should be able to select/choose/Click &#039;&#039;&#039;Build Solution&#039;&#039;&#039; under Build in VS2013&#039;s IDE to fully compile NARS2000 executable.  After Build, there should likewise be zero errors.&lt;br /&gt;
&lt;br /&gt;
Special note regarding &#039;&#039;&#039;w32.bat start&#039;&#039;&#039; and &#039;&#039;&#039;w64.bat start&#039;&#039;&#039; while in Visual Studio&#039;s IDE for the NARS2000 project:&lt;br /&gt;
When &amp;lt;u&amp;gt;switching&amp;lt;/u&amp;gt; between 32 and 64-bit versions, i.e. w32.bat start &#039;&#039;&#039;versus&#039;&#039;&#039; w64.bat start: There is a &#039;&#039;&#039;Property&#039;&#039;&#039; adjustment required when using Visual Studio&#039;s IDE.  After Visual Studio opens up and in the Solution Explorer window (usually on the upper right hand side of your screen) click on &amp;quot;Solution &#039;nars2000&#039; (1 project).&amp;quot;  This should then show a Properties Window just below it.  Look for a line which reads: &#039;&#039;&#039;Active config&#039;&#039;&#039;.  If you ran w32.bat start then Active config should have a value of &#039;&#039;&#039;Debug32|Win32&#039;&#039;&#039;.  If you ran w64.bat start then Active config should have a value of &#039;&#039;&#039;Debug64|Win32&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== NARS Systems Developer Suggested Knowledge Prequisites ==&lt;br /&gt;
&lt;br /&gt;
For a strongly recommended set of knowledge prerequisites - in order to effectively understand, maintain or improve NARS functionality - please see &#039;&#039;&#039;[[NARS System Developer Suggested Knowledge Prerequisites|NARS System Developer Suggested Knowledge Prerequisites]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Developer Experiments with NARS Source Code==&lt;br /&gt;
&lt;br /&gt;
This section is for Developers who have successfully downloaded NARS source code and want to Experiment with it, or further develop NARS APL Interpreter&#039;s source code.&lt;br /&gt;
&lt;br /&gt;
For development and debugging purposes: You as APL Interpreter developer normally want to want to &amp;lt;u&amp;gt;first&amp;lt;/u&amp;gt; write new source code/model using the &amp;lt;u&amp;gt;32-bit version&amp;lt;/u&amp;gt; of NARS2000 (w32.bat start).  This is because the 32-bit version is easier to debug than the 64-bit version; error messages can be less complex.  Migrating &#039;&#039;&#039;correct source code&#039;&#039;&#039; forward from the 32-bit version to the 64-bit version is also easier than a reverse migration.&lt;br /&gt;
&lt;br /&gt;
You will also at some point still need to be synched-with or later synch-back-to NARS online source code - i.e. after experimenting/changing local PC source code.  This is equivalent to a ChemLab 101 at home/home-office and cleaning up all experiments at the end of the chemistry class, except as it applies to software developers, NARS software developers, and or those inclined to experiment safely.&lt;br /&gt;
&lt;br /&gt;
Here is where Tortoise SVN provides excellent and time-tested source-code clean-up tools for your local PC, including &#039;&#039;&#039;Resolve, Revert, Clean up, and Undo changes&#039;&#039;&#039;.  Pull up these TortoiseSVN utilities by navigating Windows File Explorer to directory C:\NARS2000.  If you successfully previously downloaded and Installed TortoiseSVN and NARS2000 source code, as outlined earlier/above, you may right click on say the \trunk subfolder in C:\NARS2000.  A mouse right-click on \trunk should show an option labeled TortoiseSVN.  Further choosing/selecting TortoiseSVN should then reveal multiple clean up options - Resolve, Revert, Clean up and Undo changes.&amp;lt;br&amp;gt;&#039;&#039;&#039;TortoiseSVN Documentation on:&#039;&#039;&#039;&amp;lt;br&amp;gt;[http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-cleanup.html Clean up.]&amp;lt;br&amp;gt;[http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-revert.html Undo Changes.]&amp;lt;br&amp;gt;[http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-conflicts.html Resolving Conflicts.]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At least one method to safely synch-back-to NARS is to:&lt;br /&gt;
# Select &#039;&#039;&#039;TortoiseSVN&#039;&#039;&#039; after right-clicking on the trunk folder&lt;br /&gt;
# Select &#039;&#039;&#039;Revert&#039;&#039;&#039;, click &#039;&#039;&#039;OK&#039;&#039;&#039;, let it run.&lt;br /&gt;
# Select &#039;&#039;&#039;Clean up&#039;&#039;&#039;, check &#039;&#039;&#039;Refresh shell overlays&#039;&#039;&#039;, click &#039;&#039;&#039;OK&#039;&#039;&#039;, let it run.&lt;br /&gt;
Per TortoiseSVN there should again be green check marks appearing on your trunk folder as well as your msieve folder.&lt;br /&gt;
&lt;br /&gt;
For revision tracking and long-term software program maintenance purposes: &#039;&#039;&#039;Keep track of which files (file names) you personally modify, including a brief purpose&#039;&#039;&#039; for that edit.  You will need to this information later for Release Notes purposes (see folder C:\NARS2000\trunk\ReleaseNotes for best-practice-examples of developer note-taking) and if you later synch to a new online NARS version, you may have to carry-forward your edit changes into a newly downloaded set of NARS source code files which may or may not reflect your prior local computer edit changes.&lt;br /&gt;
&lt;br /&gt;
==Periodic NARS Updates==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Incremental Update&amp;lt;/u&amp;gt; - Method 1:&amp;lt;br&amp;gt;&lt;br /&gt;
Periodically, NARS APL interpreter developers should ensure changes done by other developers get incorporated into their local machine&#039;s source code working copy. This is the process of integrating/downloading changes from NARS SourceForge server &#039;&#039;&#039;&amp;lt;u&amp;gt;to&amp;lt;/u&amp;gt;&#039;&#039;&#039; your local copy. Updating may be performed on single files, a set of selected files, or recursively on entire directory hierarchies. To update, select the files and/or &#039;&#039;&#039;directories&#039;&#039;&#039; you want (usually \trunk and or \msieve), right click and select &#039;&#039;&#039;TortoiseSVN → Update&#039;&#039;&#039; in the explorer context menu for that trunk or msieve folder. A window will pop up displaying the progress of the update as it runs. Changes done by other developers will be merged into your local files, &#039;&#039;&#039;keeping&#039;&#039;&#039; any changes you may have done to the same files - if you did not want to keep your local changes but do want to keep the downloaded changes, select TortoiseSVN and Revert &#039;&#039;&#039;prior&#039;&#039;&#039; to running TortoiseSVN Update. NARS repository at SourceForge is &#039;&#039;&#039;not&#039;&#039;&#039; affected by an update to your local copy. [http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-update.html Update Your Working Copy With Changes From Others]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Total Source Code Replacement&amp;lt;/u&amp;gt; - Method 2:&amp;lt;br&amp;gt;&lt;br /&gt;
For example from version r1325 to say version r1364 (note a significant revision/datetime gap between 1325 and 1364, hypothetically), whatever NARS latest revision number is.  Total code replacement may be preferred over incremental updating when major structural changes or significant source code changes are newly in situ.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Total Replacement Process: Visually scan NARS source code page at http://sourceforge.net/p/nars2000/code/HEAD/tree/trunk/ and review the top 25 to 40 file entries or so, while mentally keeping track of the &#039;&#039;&#039;highest revision number found&#039;&#039;&#039;(e.g. r1379). If after your last/earlier TortoiseSVN Update, your local version number is lower than the latest revision number visually found online, then perform the following to update to the most recent NARS revision:&lt;br /&gt;
# Rename your existing NARS folder to something approximating C:\NARS2000_old_rev&lt;br /&gt;
# Create an entirely new C:\NARS2000 folder&lt;br /&gt;
# &#039;&#039;&#039;Copy all folders and files at the &amp;lt;u&amp;gt;top level&amp;lt;/u&amp;gt;&#039;&#039;&#039; from C:\NARS2000_old_rev folder into C:\NARS2000 &#039;&#039;&#039;EXCEPT \trunk and \msieve subfolders (and their contents)&#039;&#039;&#039;.  The \trunk and \msieve folders will shortly be downloaded from SourceForge.&lt;br /&gt;
# Create &#039;&#039;&#039;new empty folders called \trunk and \msieve&#039;&#039;&#039; in the new C:\NARS2000 folder.&lt;br /&gt;
# Revisit the section above called &#039;&#039;&#039;[[#Check_Out_The_Source_Code|Check Out The Source Code]]&#039;&#039;&#039; to again checkout/download to the absolute latest NARS version number, for both \trunk and \msieve folders.&lt;br /&gt;
# Also revisit &#039;&#039;&#039;[[#Pre_First_Compile_and_Localization_Notes|Pre First Compile and Localization Notes]]&#039;&#039;&#039; and text edit file \trunk\wcustomize.bat to localize the new version.&lt;br /&gt;
# Folder C:\NARS2000_old_rev may be &#039;&#039;&#039;Recycled&#039;&#039;&#039; after you are done copying non-trunk and non-msieve files/folders from it into your new C:\NARS2000 folder.  If disk space is not restrictive and for 100% safety purposes, keep your prior folder available until after successfully &#039;&#039;&#039;Building/Compiling&#039;&#039;&#039; the newly downloaded 32-bit and 64-bit versions, and making sure you did not have any local personal changes now potentially being recycled.&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Project_Ideas&amp;diff=2806</id>
		<title>Project Ideas</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Project_Ideas&amp;diff=2806"/>
		<updated>2015-09-26T19:53:28Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: ins xref to Developer&amp;#039;s Notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In case you are looking for how to get your feet wet, here are some ideas (in no particular order) to consider implementing:&lt;br /&gt;
&lt;br /&gt;
* [[Partition Operator]]&lt;br /&gt;
* [[Power Operator]]&lt;br /&gt;
* [[Dual Operator]]&lt;br /&gt;
* [[Other System Functions]]&lt;br /&gt;
* [[File Systems]]&lt;br /&gt;
* [[Trace/Stop Controls]]&lt;br /&gt;
* [[Complex Numbers]]&lt;br /&gt;
* [[Hypercomplex Numbers]]&lt;br /&gt;
* [[Unicode Support]]&lt;br /&gt;
* [[Extensible Datatypes]]&lt;br /&gt;
* [[Line Continuation Marker]]&lt;br /&gt;
* [[Shared Variables]]&lt;br /&gt;
* [[Associative indexing]]&lt;br /&gt;
&lt;br /&gt;
See also &#039;&#039;&#039;[[Developer&#039;s_Notes]]&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Developer%27s_Notes&amp;diff=2805</id>
		<title>Developer&#039;s Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Developer%27s_Notes&amp;diff=2805"/>
		<updated>2015-09-26T19:49:52Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: wording&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The topics in &#039;&#039;&#039;&amp;lt;u&amp;gt;red&amp;lt;/u&amp;gt;&#039;&#039;&#039; (in no particular order) cover some of the areas that &#039;&#039;&#039;need documentation&#039;&#039;&#039; and or source-code implementation, i.e. no NARS wiki page yet exists for the topic(s).  See also &#039;&#039;&#039;[[Project_Ideas|NARS Project Ideas]]&#039;&#039;&#039;.  Feel free to add to the list as you may find appropriate.  The topics in &#039;&#039;&#039;&amp;lt;u&amp;gt;blue/purple&amp;lt;/u&amp;gt;&#039;&#039;&#039; are Developer Notes which have been initiated or at least partially and sometimes fully &#039;&#039;&#039;documented&#039;&#039;&#039;.  The word &amp;quot;developer&amp;quot; as used on this wiki page generally refers primarily to APL &amp;lt;u&amp;gt;Interpreter&amp;lt;/u&amp;gt; developers, particularly C programmers or persons interested in learning/programming in &#039;&#039;&#039;C&#039;&#039;&#039;; however, &#039;&#039;&#039;APL Developers and Programmers are preeminently&#039;&#039;&#039; also invited to submit topics on this wiki page for consideration, review, implementation, etc.  See also [http://nars2000.forumatic.com/ NARS Discussion Forum].&amp;lt;br&amp;gt;&lt;br /&gt;
[Listed below: Task/wiki page - status(if available). Description/explanation]&lt;br /&gt;
&lt;br /&gt;
* [[Symbol and Hash Tables]] - wiki page created. Requires further development&lt;br /&gt;
* [[Intellisense - Tries Auto-Completion|Intellisense - Trie Auto-Completion]] - keyboard, autocompletion for APL variable names, function names, labels - contextually relevant suggestions, e.g. Tab-key selected&lt;br /&gt;
* [[Datatypes and Storage]]&lt;br /&gt;
* [[State Indicator]]&lt;br /&gt;
* [[Function Storage]]&lt;br /&gt;
* [[Parser]]&lt;br /&gt;
* [[Display and Formatting]]&lt;br /&gt;
* [[Saved Workspace Structure]]&lt;br /&gt;
* [[Building An Executable]] - completed.  Building a NARS2000.exe file on your local machine using the latest source code version available at SourceForge.net&lt;br /&gt;
* [[Another Approach To Building]] - outdated/potentially obsolete, requires update and or integration.&lt;br /&gt;
* [[Creating New System Functions]] - in process.  Creating new &amp;quot;quad&amp;quot; &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; system functions for NARS2000.exe&lt;br /&gt;
* [[Debugging]]&lt;br /&gt;
* [[Committing Changes]]&lt;br /&gt;
* [[Reference Counts]]&lt;br /&gt;
* [[Tokens]]&lt;br /&gt;
* [[Macros]]&lt;br /&gt;
* [[Magic Functions]]&lt;br /&gt;
* [[VirtualAlloc vs. GlobalAlloc]]&lt;br /&gt;
* [[RESDEBUG Cover Functions]]&lt;br /&gt;
* [[Per Tab Data]]&lt;br /&gt;
* [[Unicode/Wide Chars]]&lt;br /&gt;
* [[Undo Buffer]]&lt;br /&gt;
* [[Translation on Copy/Paste]]&lt;br /&gt;
* [[Source File Formats]]&lt;br /&gt;
* [[Programming Practices]]&lt;br /&gt;
* [[Threads and Thread Local Storage]]&lt;br /&gt;
* [[Window Hierarchy]]&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Developer%27s_Notes&amp;diff=2804</id>
		<title>Developer&#039;s Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Developer%27s_Notes&amp;diff=2804"/>
		<updated>2015-09-26T19:41:03Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: wording&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The topics in &#039;&#039;&#039;&amp;lt;u&amp;gt;red&amp;lt;/u&amp;gt;&#039;&#039;&#039; (in no particular order) cover some of the areas that &#039;&#039;&#039;need documentation&#039;&#039;&#039; and or source-code implementation, i.e. no NARS wiki page yet exists for the topic(s).  Feel free to add to the list as you may find appropriate.  The topics in &#039;&#039;&#039;&amp;lt;u&amp;gt;blue/purple&amp;lt;/u&amp;gt;&#039;&#039;&#039; are Developer Notes which have been &#039;&#039;&#039;documented&#039;&#039;&#039;.  The word &amp;quot;developer&amp;quot; as used on this wiki page generally refers primarily to APL &amp;lt;u&amp;gt;Interpreter&amp;lt;/u&amp;gt; developers; however, &#039;&#039;&#039;APL Developers and Programmers are preeminently&#039;&#039;&#039; also invited to submit topics on this wiki page for consideration, review, implementation, etc.  See also [http://nars2000.forumatic.com/ NARS Discussion Forum].&amp;lt;br&amp;gt;&lt;br /&gt;
[Listed below: Task/wiki page - status(if available). Description/explanation]&lt;br /&gt;
&lt;br /&gt;
* [[Symbol and Hash Tables]] - wiki page created. Requires further development&lt;br /&gt;
* [[Intellisense - Tries Auto-Completion|Intellisense - Trie Auto-Completion]] - keyboard, autocompletion for APL variable names, function names, labels - contextually relevant suggestions, e.g. Tab-key selected&lt;br /&gt;
* [[Datatypes and Storage]]&lt;br /&gt;
* [[State Indicator]]&lt;br /&gt;
* [[Function Storage]]&lt;br /&gt;
* [[Parser]]&lt;br /&gt;
* [[Display and Formatting]]&lt;br /&gt;
* [[Saved Workspace Structure]]&lt;br /&gt;
* [[Building An Executable]] - completed.  Building a NARS2000.exe file on your local machine using the latest source code version available at SourceForge.net&lt;br /&gt;
* [[Another Approach To Building]] - outdated/potentially obsolete, requires update and or integration.&lt;br /&gt;
* [[Creating New System Functions]] - in process.  Creating new &amp;quot;quad&amp;quot; &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; system functions for NARS2000.exe&lt;br /&gt;
* [[Debugging]]&lt;br /&gt;
* [[Committing Changes]]&lt;br /&gt;
* [[Reference Counts]]&lt;br /&gt;
* [[Tokens]]&lt;br /&gt;
* [[Macros]]&lt;br /&gt;
* [[Magic Functions]]&lt;br /&gt;
* [[VirtualAlloc vs. GlobalAlloc]]&lt;br /&gt;
* [[RESDEBUG Cover Functions]]&lt;br /&gt;
* [[Per Tab Data]]&lt;br /&gt;
* [[Unicode/Wide Chars]]&lt;br /&gt;
* [[Undo Buffer]]&lt;br /&gt;
* [[Translation on Copy/Paste]]&lt;br /&gt;
* [[Source File Formats]]&lt;br /&gt;
* [[Programming Practices]]&lt;br /&gt;
* [[Threads and Thread Local Storage]]&lt;br /&gt;
* [[Window Hierarchy]]&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Intellisense_-_Tries_Auto-Completion&amp;diff=2803</id>
		<title>Intellisense - Tries Auto-Completion</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Intellisense_-_Tries_Auto-Completion&amp;diff=2803"/>
		<updated>2015-09-26T17:52:07Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: added quad NL, edit changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;Intellisense - Trie Structure - Auto-Completion&amp;lt;/big&amp;gt; for &#039;&#039;&#039;APL variable names, function names and labels&#039;&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
System Programming Task in C: &amp;lt;u&amp;gt;Introduce into NARS: Auto-Completion&amp;lt;/u&amp;gt; of variable names, function names, and labels (with the TAB key, for instance).&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Such a feature might best be an on/off option, such as setting up a keyboard layout, except with the ability to turn it on/off from &#039;&#039;&#039;within&#039;&#039;&#039; NARS.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# It should probably be tied in to NARS System Functions ⎕NC and ⎕NL, APL&#039;s name classifications and names list functions respectively, ref. &#039;&#039;&#039;[http://wiki.nars2000.org/index.php/System_Function_NC NARS Quad NC]&#039;&#039;&#039; and &#039;&#039;&#039;[http://wiki.nars2000.org/index.php/System_Function_NL NARS Quad NL]&#039;&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# It is also called &#039;&#039;&#039;Intellisense&#039;&#039;&#039; within Microsoft&#039;s Visual Studio 20xx and programmatically referred to as a &#039;&#039;&#039;Trie&#039;&#039;&#039; structure in Computer Science: a Trie, also called digital tree and sometimes radix tree or prefix tree (as they can be searched by prefixes), is an ordered tree data structure that is used to store a dynamic set or associative array where the keys are usually strings, ref. [https://en.wikipedia.org/wiki/Trie Wikipedia entry].  Google&#039;s search feature (and Internet Explorer&#039;s search box and web pages address textbox) uses the concept, as does the Android OS - particularly for text messaging where word suggestions become invoked for the current [partial] word being typed in and or contextually/definitionally relevant &#039;&#039;&#039;&amp;lt;u&amp;gt;suggestions&amp;lt;/u&amp;gt;&#039;&#039;&#039;.  Here is a link to implementing an algorithm, re [http://rmandvikar.blogspot.com/2008/10/trie-examples.html Google Trie example].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Interesting do-it-yourself Intellisense project or DIY Intellisense, ref. &#039;&#039;&#039;[http://www.codeproject.com/Articles/5839/DIY-Intellisense Intellisense DIY Code Project]&#039;&#039;&#039;. Another C Implementation: &#039;&#039;&#039;[http://simplestcodings.blogspot.com/2012/11/trie-implementation-in-c.html Trie implementation in C]&#039;&#039;&#039;. Still another C Implementation / C Code for Radix Tree or Trie: &#039;&#039;&#039;[http://programminggeeks.com/c-code-for-radix-tree-or-trie/ C code for Radix Tree (or Trie)]&#039;&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Actually programming the interface into NARS is not impossible. It would be less easy than implementing a new system quad function into NARS, which can frequently be no easy task in and of itself, but again not impossible.  The above hyperlinks were valid as of 9/26/2015.&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Intellisense_-_Tries_Auto-Completion&amp;diff=2802</id>
		<title>Intellisense - Tries Auto-Completion</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Intellisense_-_Tries_Auto-Completion&amp;diff=2802"/>
		<updated>2015-09-26T14:46:24Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: Trie Structure: Created page for task&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;Intellisense - Trie Structure - Auto-Completion&amp;lt;/big&amp;gt; for &#039;&#039;&#039;APL variable names, function names and labels&#039;&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
System Programming Task in C: &amp;lt;u&amp;gt;Introduce into NARS: Auto-Completion&amp;lt;/u&amp;gt; of variable names, function names, and labels (with the TAB key, for instance).&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Such a feature might best be an on/off option, such as setting up a keyboard layout, except with the ability to turn it on/off from within NARS.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# It should probably be tied in to NARS System Function ⎕NC, APL&#039;s name classifications function, ref. &#039;&#039;&#039;[http://wiki.nars2000.org/index.php/System_Function_NC NARS Quad NC]&#039;&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# It is also called &#039;&#039;&#039;Intellisense&#039;&#039;&#039; within Visual Studio 20xx and programmatically referred to as a &#039;&#039;&#039;Trie&#039;&#039;&#039; structure in Computer Science: a Trie, also called digital tree and sometimes radix tree or prefix tree (as they can be searched by prefixes), is an ordered tree data structure that is used to store a dynamic set or associative array where the keys are usually strings, ref. [https://en.wikipedia.org/wiki/Trie Wikipedia entry].  Google&#039;s search feature uses the concept, as does the Android OS.  Here is a link to implementing an algorithm, re [http://rmandvikar.blogspot.com/2008/10/trie-examples.html Google Trie example].&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
# Interesting do it yourself Intellisense project or DIY Intellisense, ref. &#039;&#039;&#039;[http://www.codeproject.com/Articles/5839/DIY-Intellisense Intellisense DIY Code Project]&#039;&#039;&#039;. Another C Implementation: &#039;&#039;&#039;[http://simplestcodings.blogspot.com/2012/11/trie-implementation-in-c.html Trie implementation in C]&#039;&#039;&#039;. Still another C Implementation / C Code for Radix Tree or Trie: &#039;&#039;&#039;[http://programminggeeks.com/c-code-for-radix-tree-or-trie/ C code for Radix Tree (or Trie)]&#039;&#039;&#039;.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Actually programming the interface into NARS is not impossible. It would be less easy than implementing a new system quad function into NARS, which can frequently be no easy task in and of itself, but again not impossible.  The above hyperlinks were valid as of 9/26/2015.&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Developer%27s_Notes&amp;diff=2801</id>
		<title>Developer&#039;s Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Developer%27s_Notes&amp;diff=2801"/>
		<updated>2015-09-26T14:25:22Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: Trie structure - autocompletion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The topics in &#039;&#039;&#039;&amp;lt;u&amp;gt;red&amp;lt;/u&amp;gt;&#039;&#039;&#039; (in no particular order) cover some of the areas that &#039;&#039;&#039;need documentation&#039;&#039;&#039; and or source-code implementation, i.e. no NARS wiki page yet exists for the topic(s).  Feel free to add to the list as you may find appropriate.  The topics in &#039;&#039;&#039;&amp;lt;u&amp;gt;blue/purple&amp;lt;/u&amp;gt;&#039;&#039;&#039; are Developer Notes which have been &#039;&#039;&#039;documented&#039;&#039;&#039;.  The word &amp;quot;developer&amp;quot; as used on this wiki page generally refers primarily to APL &amp;lt;u&amp;gt;Interpreter&amp;lt;/u&amp;gt; developers; however, &#039;&#039;&#039;APL Developers and Programmers are preeminently&#039;&#039;&#039; also invited to submit topics on this wiki page for consideration, review, implementation, etc.  See also [http://nars2000.forumatic.com/ NARS Discussion Forum].&amp;lt;br&amp;gt;&lt;br /&gt;
[Listed below: Task/wiki page - status(if available). Description/explanation]&lt;br /&gt;
&lt;br /&gt;
* [[Symbol and Hash Tables]] - wiki page created. Requires further development&lt;br /&gt;
* [[Intellisense - Tries Auto-Completion]] - keyboard, autocompletion for APL variable names, function names, labels&lt;br /&gt;
* [[Datatypes and Storage]]&lt;br /&gt;
* [[State Indicator]]&lt;br /&gt;
* [[Function Storage]]&lt;br /&gt;
* [[Parser]]&lt;br /&gt;
* [[Display and Formatting]]&lt;br /&gt;
* [[Saved Workspace Structure]]&lt;br /&gt;
* [[Building An Executable]] - completed.  Building a NARS2000.exe file on your local machine using the latest source code version available at SourceForge.net&lt;br /&gt;
* [[Another Approach To Building]] - outdated/potentially obsolete, requires update and or integration.&lt;br /&gt;
* [[Creating New System Functions]] - in process.  Creating new &amp;quot;quad&amp;quot; &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; system functions for NARS2000.exe&lt;br /&gt;
* [[Debugging]]&lt;br /&gt;
* [[Committing Changes]]&lt;br /&gt;
* [[Reference Counts]]&lt;br /&gt;
* [[Tokens]]&lt;br /&gt;
* [[Macros]]&lt;br /&gt;
* [[Magic Functions]]&lt;br /&gt;
* [[VirtualAlloc vs. GlobalAlloc]]&lt;br /&gt;
* [[RESDEBUG Cover Functions]]&lt;br /&gt;
* [[Per Tab Data]]&lt;br /&gt;
* [[Unicode/Wide Chars]]&lt;br /&gt;
* [[Undo Buffer]]&lt;br /&gt;
* [[Translation on Copy/Paste]]&lt;br /&gt;
* [[Source File Formats]]&lt;br /&gt;
* [[Programming Practices]]&lt;br /&gt;
* [[Threads and Thread Local Storage]]&lt;br /&gt;
* [[Window Hierarchy]]&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Symbol_Goto&amp;diff=2799</id>
		<title>Symbol Goto</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Symbol_Goto&amp;diff=2799"/>
		<updated>2015-09-13T14:44:29Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: Added see also&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;h1&amp;gt; {goto} &amp;amp;mdash; Branch to a line in a function &amp;amp;mdash; Keystroke ALT+] &amp;amp;mdash; Character 8594 or 0x2192&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:APLKB-Goto.png]]&lt;br /&gt;
==Alternate Names==&lt;br /&gt;
This symbol is also known as &amp;lt;big&amp;gt;right arrow&amp;lt;/big&amp;gt; or APL text symbol &#039;&#039;&#039;&amp;amp;#123;rightarrow}&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
The goto symbol may be used as a conditional branch (branch based on a comparison) or an unconditional branch, or it may be used to exit a function. It is most often used in a function to transfer control, but can be used from the session manager to transfer to a line in a suspended function. &lt;br /&gt;
&lt;br /&gt;
===Conditional branch===&lt;br /&gt;
The value to the right of the arrow is a boolean expression or non-negative number surrounded by parentheses, followed by a slash symbol and the line number to transfer to if the expression is true for a boolean expression or nonzero for a numeric value. A DOMAIN ERROR occurs if the numeric value is negative. In the following line 5 of a function:&lt;br /&gt;
:&#039;&#039;&#039;&amp;lt;tt&amp;gt; [5] {rightarrow}(A{lessthan}1)/22&amp;lt;/tt&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Will branch to line 22 of the function if the value of A is less than 1. Execution would continue on line 6 if A was 1 or more.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;As per the example from above, there are syntactically &amp;lt;u&amp;gt;three parts to a conditional branch&amp;lt;/u&amp;gt;:&lt;br /&gt;
# Leftmost, the branch symbol itself, &#039;&#039;&#039;{rightarrow}&#039;&#039;&#039;&lt;br /&gt;
# Boolean test to perform, usually within parentheses, &#039;&#039;&#039;(A{lessthan}1)&#039;&#039;&#039;&lt;br /&gt;
# Statement number or label to go to if the test within parentheses is true(1), &#039;&#039;&#039;/22&#039;&#039;&#039; - note use of the reduction or slash symbol.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The test inside the parentheses may be &#039;&#039;&#039;&amp;lt;u&amp;gt;simple&amp;lt;/u&amp;gt;&#039;&#039;&#039;, as per the above example.  The branch&#039;s boolean test may also be &#039;&#039;&#039;&amp;lt;u&amp;gt;compound&amp;lt;/u&amp;gt;&#039;&#039;&#039;, ref. the following:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;tt&amp;gt; &#039;&#039;&#039;{rightarrow}((A{lessthan}1){downcaret}(A{morethan}10))/OR_Case&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
In this example if &#039;&#039;&#039;A&#039;&#039;&#039; is less than 1 OR &#039;&#039;&#039;A&#039;&#039;&#039; is greater than 10, the user function will branch to line label &#039;&#039;&#039;OR_Case:&#039;&#039;&#039; in the function. This occurs because if &amp;lt;u&amp;gt;either&amp;lt;/u&amp;gt; test is true, the compound test evaluates to true - union of 2 tests(boolean 1 in either test results in a branch).&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Another compound or dual boolean test, this time a boolean AND:&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;tt&amp;gt; &#039;&#039;&#039;{rightarrow}((A{lessthan}1){upcaret}(A{morethan}-10))/AND_NegativeCase&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
Branching will occur only if BOTH tests evaluate to true.  The user function will go to line label AND_NegativeCase: in the function only if (-10&amp;lt;A&amp;lt;1) or if &#039;&#039;&#039;A{epsilon}(-9 -8 -7 -6 -5 -4 -3 -2 -1 0}&#039;&#039;&#039; - intersection of 2 tests(boolean 1 if BOTH tests evaluate to true results in a branch).&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In setting up boolean &#039;&#039;&#039;go to&#039;&#039;&#039; tests also bear in mind use of APL&#039;s &#039;&#039;&#039;{tilde}&#039;&#039;&#039; or &#039;&#039;&#039;not&#039;&#039;&#039; symbol, thus:&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;&amp;lt;tt&amp;gt; [5] {rightarrow}({tilde}A{lessthan}1)/22&amp;lt;/tt&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Thus APL would go to line number 22 only if A is greater than or equal to 1.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unconditional branch===&lt;br /&gt;
The goto symbol is followed on the right either by the line number or a label. Execution continues in the function at that line (unless the line specified is 0, in which case the function exits.)&lt;br /&gt;
&lt;br /&gt;
===Exit Function===&lt;br /&gt;
The goto symbol may be used to exit a function and return to the calling function (or return to the session manager if the function was called by the user typing its name) by using 0 as the line number to goto. This is the same as &amp;lt;tt&amp;gt;:return&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
===Exit Function===&lt;br /&gt;
In the following example, [[function]] one calls function two, which exits part way through the function, returning to function 1.&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
:{delta}one&amp;lt;br/&amp;gt;&lt;br /&gt;
[0] one&amp;lt;br/&amp;gt;&lt;br /&gt;
[1] &#039;This is one&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[2] two&amp;lt;br/&amp;gt;&lt;br /&gt;
[3] &#039;return to one from two&#039;&lt;br /&gt;
:{delta}&lt;br /&gt;
&lt;br /&gt;
:{delta}two&lt;br /&gt;
[0] two&amp;lt;br/&amp;gt;&lt;br /&gt;
[1] &#039;This is two&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[2] {goto}0&amp;lt;br/&amp;gt;&lt;br /&gt;
[3] &#039;Two Continues&#039;&lt;br /&gt;
:{delta}&lt;br /&gt;
&lt;br /&gt;
:one&lt;br /&gt;
This is one&amp;lt;br/&amp;gt;&lt;br /&gt;
This is two&amp;lt;br/&amp;gt;&lt;br /&gt;
return to one from two&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;Another Example see: &#039;&#039;&#039;[[Control_Structures#Cases_Branching_Example_1|Control Structures - Branching Example]]&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;See also: &#039;&#039;&#039;[[Symbol_Tilde|Symbol Tilde or Not]] and [[Symbol_Slash|Symbol Slash or Reduce]]&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{Article footer}}&lt;br /&gt;
{{Symbol footer|1|G}}&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Symbol_Goto&amp;diff=2798</id>
		<title>Symbol Goto</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Symbol_Goto&amp;diff=2798"/>
		<updated>2015-09-13T14:35:43Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Conditional branch */  expanded conditional branch, added compound boolean test examples, tilde&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;h1&amp;gt; {goto} &amp;amp;mdash; Branch to a line in a function &amp;amp;mdash; Keystroke ALT+] &amp;amp;mdash; Character 8594 or 0x2192&amp;lt;/h1&amp;gt;&lt;br /&gt;
[[File:APLKB-Goto.png]]&lt;br /&gt;
==Alternate Names==&lt;br /&gt;
This symbol is also known as &amp;lt;big&amp;gt;right arrow&amp;lt;/big&amp;gt; or APL text symbol &#039;&#039;&#039;&amp;amp;#123;rightarrow}&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
The goto symbol may be used as a conditional branch (branch based on a comparison) or an unconditional branch, or it may be used to exit a function. It is most often used in a function to transfer control, but can be used from the session manager to transfer to a line in a suspended function. &lt;br /&gt;
&lt;br /&gt;
===Conditional branch===&lt;br /&gt;
The value to the right of the arrow is a boolean expression or non-negative number surrounded by parentheses, followed by a slash symbol and the line number to transfer to if the expression is true for a boolean expression or nonzero for a numeric value. A DOMAIN ERROR occurs if the numeric value is negative. In the following line 5 of a function:&lt;br /&gt;
:&#039;&#039;&#039;&amp;lt;tt&amp;gt; [5] {rightarrow}(A{lessthan}1)/22&amp;lt;/tt&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Will branch to line 22 of the function if the value of A is less than 1. Execution would continue on line 6 if A was 1 or more.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;As per the example from above, there are syntactically &amp;lt;u&amp;gt;three parts to a conditional branch&amp;lt;/u&amp;gt;:&lt;br /&gt;
# Leftmost, the branch symbol itself, &#039;&#039;&#039;{rightarrow}&#039;&#039;&#039;&lt;br /&gt;
# Boolean test to perform, usually within parentheses, &#039;&#039;&#039;(A{lessthan}1)&#039;&#039;&#039;&lt;br /&gt;
# Statement number or label to go to if the test within parentheses is true(1), &#039;&#039;&#039;/22&#039;&#039;&#039; - note use of the reduction or slash symbol.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;The test inside the parentheses may be &#039;&#039;&#039;&amp;lt;u&amp;gt;simple&amp;lt;/u&amp;gt;&#039;&#039;&#039;, as per the above example.  The branch&#039;s boolean test may also be &#039;&#039;&#039;&amp;lt;u&amp;gt;compound&amp;lt;/u&amp;gt;&#039;&#039;&#039;, ref. the following:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;tt&amp;gt; &#039;&#039;&#039;{rightarrow}((A{lessthan}1){downcaret}(A{morethan}10))/OR_Case&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
In this example if &#039;&#039;&#039;A&#039;&#039;&#039; is less than 1 OR &#039;&#039;&#039;A&#039;&#039;&#039; is greater than 10, the user function will branch to line label &#039;&#039;&#039;OR_Case:&#039;&#039;&#039; in the function. This occurs because if &amp;lt;u&amp;gt;either&amp;lt;/u&amp;gt; test is true, the compound test evaluates to true - union of 2 tests(boolean 1 in either test results in a branch).&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Another compound or dual boolean test, this time a boolean AND:&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;tt&amp;gt; &#039;&#039;&#039;{rightarrow}((A{lessthan}1){upcaret}(A{morethan}-10))/AND_NegativeCase&#039;&#039;&#039;&amp;lt;/tt&amp;gt;&lt;br /&gt;
Branching will occur only if BOTH tests evaluate to true.  The user function will go to line label AND_NegativeCase: in the function only if (-10&amp;lt;A&amp;lt;1) or if &#039;&#039;&#039;A{epsilon}(-9 -8 -7 -6 -5 -4 -3 -2 -1 0}&#039;&#039;&#039; - intersection of 2 tests(boolean 1 if BOTH tests evaluate to true results in a branch).&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In setting up boolean &#039;&#039;&#039;go to&#039;&#039;&#039; tests also bear in mind use of APL&#039;s &#039;&#039;&#039;{tilde}&#039;&#039;&#039; or &#039;&#039;&#039;not&#039;&#039;&#039; symbol, thus:&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;&amp;lt;tt&amp;gt; [5] {rightarrow}({tilde}A{lessthan}1)/22&amp;lt;/tt&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
Thus APL would go to line number 22 only if A is greater than or equal to 1.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Unconditional branch===&lt;br /&gt;
The goto symbol is followed on the right either by the line number or a label. Execution continues in the function at that line (unless the line specified is 0, in which case the function exits.)&lt;br /&gt;
&lt;br /&gt;
===Exit Function===&lt;br /&gt;
The goto symbol may be used to exit a function and return to the calling function (or return to the session manager if the function was called by the user typing its name) by using 0 as the line number to goto. This is the same as &amp;lt;tt&amp;gt;:return&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
===Exit Function===&lt;br /&gt;
In the following example, [[function]] one calls function two, which exits part way through the function, returning to function 1.&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
:{delta}one&amp;lt;br/&amp;gt;&lt;br /&gt;
[0] one&amp;lt;br/&amp;gt;&lt;br /&gt;
[1] &#039;This is one&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[2] two&amp;lt;br/&amp;gt;&lt;br /&gt;
[3] &#039;return to one from two&#039;&lt;br /&gt;
:{delta}&lt;br /&gt;
&lt;br /&gt;
:{delta}two&lt;br /&gt;
[0] two&amp;lt;br/&amp;gt;&lt;br /&gt;
[1] &#039;This is two&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[2] {goto}0&amp;lt;br/&amp;gt;&lt;br /&gt;
[3] &#039;Two Continues&#039;&lt;br /&gt;
:{delta}&lt;br /&gt;
&lt;br /&gt;
:one&lt;br /&gt;
This is one&amp;lt;br/&amp;gt;&lt;br /&gt;
This is two&amp;lt;br/&amp;gt;&lt;br /&gt;
return to one from two&lt;br /&gt;
&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Another Example see: [[Control_Structures#Cases_Branching_Example_1|Control Structures - Branching Example]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Article footer}}&lt;br /&gt;
{{Symbol footer|1|G}}&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Platforms&amp;diff=2793</id>
		<title>Platforms</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Platforms&amp;diff=2793"/>
		<updated>2015-09-02T09:43:36Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: added TeamViewer / remote desktop software&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Although NARS2000 is primarily established as a Windows-based program for both 32- and or 64-bit systems, it can be usable on a variety of platforms.&lt;br /&gt;
&lt;br /&gt;
The current version of NARS2000 may be run on a variety of Windows platforms, including most or all post-Windows-98 OS versions.  Furthermore, a long-term goal is to enable NARS to be built on Linux, Mac OS, etc. as per user requests and Developer interests.  If you do not have a Windows machine, the following may be helpful to you:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/187359/5-ways-to-run-windows-software-on-a-mac/ Five ways to run Windows software on a Mac.]&#039;&#039;&#039; From HowToGeek.com, methods include 1)Virtual Machines, 2)Boot Camp, 3)Wine, 4)CrossOver Mac (not free) and 5)Remote Desktop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/133515/4-ways-to-run-windows-software-on-linux/ Four ways to run Windows software on Linux.]&#039;&#039;&#039; Again from HowToGeek.com, methods include 1)Use Wine, 2)Run Windows in a Virtual Machine, 3)Try Crossover (not free) and 4)Remote Desktop.  A fifth way per [http://www.pcworld.com/article/2900497/how-to-run-windows-software-in-linux-everything-you-need-to-know.html PC World] is dual booting both Linux and Windows on your machine.  This essentially involves partitioning hard drives with a portion reserved for Linux and a portion reserved for Windows.  With costs of external hard drives continuing to decline, buying an external or network hard drive may free up hard drive storage space requirements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/173353/how-to-run-windows-software-on-a-chromebook/ How to Run Windows Software on a Chromebook {notebook or tablet PC}.]&#039;&#039;&#039; Again from HowToGeek.com, methods include 1)Access a Windows Desktop Remotely, 2)Use Developer Mode and Install Wine (not available for all Chromebooks), 3)Use Developer Mode and Install a Virtual Machine (may require an Intel Chromebook).&lt;br /&gt;
&lt;br /&gt;
Furthermore, if you work using a tablet or other computing device which supports remote desktop software such as &#039;&#039;&#039;[http://teamviewer.com Team Viewer]&#039;&#039;&#039; and you have a home or work computer running Windows - then you can remotely use NARS over your network and internet using that computer as a host and your local device as a client. Network and internet speeds are sufficiently fast and TeamViewer, for instance, is very good at making your remote desktop seem and respond as if virtually right in front of you.&lt;br /&gt;
&lt;br /&gt;
==Wine = &amp;quot;Wine Is Not an Emulator&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
However that doesn&#039;t mean it can&#039;t run on other operating systems such as Linux or Mac OS thanks to a translation layer program such as [http://www.winehq.org Wine].  From the WineHQ website&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;&amp;quot;Wine is a translation layer (a program loader) capable of running Windows applications on Linux and other POSIX compatible operating systems. Windows programs running in Wine act as native programs would, running without the performance or memory usage penalties of an emulator, with a similar look and feel to other applications on your desktop.&amp;quot;&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Indeed, NARS2000 has been tested running under Wine on Linux-based systems without a hitch.&lt;br /&gt;
&lt;br /&gt;
==Mac OS==&lt;br /&gt;
&lt;br /&gt;
NARS2000 has yet to be tested on Mac OS.  Although that OS isn&#039;t as yet officially supported by the Wine developers, there are [http://wiki.winehq.org/MacOSX instructions] for installing Wine and running programs under it.&lt;br /&gt;
&lt;br /&gt;
==How To Run NARS2000 Under Wine==&lt;br /&gt;
&lt;br /&gt;
To run NARS2000 on your non-Windows operating system, go to the [http://www.winehq.org/download/ download] section of the Wine website and download a binary version of Wine appropriate to your system, [http://winehq.org/site/docs/wineusr-guide/getting-wine install] it, [http://www.nars2000.org/download download] the latest version of NARS2000, unzip it, and run it as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;wine NARS2000.exe&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Building_An_Executable&amp;diff=2792</id>
		<title>Building An Executable</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Building_An_Executable&amp;diff=2792"/>
		<updated>2015-09-02T09:41:16Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Platforms */  added TeamViewer / remote desktop software&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:left; border:1px solid #aaaaaa; background-color:#f9f9f9;width: 200px;font-family: Verdana, sans-serif;&amp;quot;&lt;br /&gt;
|- padding:5px;padding-top:0.5em;font-size: 95%;&lt;br /&gt;
|&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #ccc; background: #fff; border-right:3px solid #ccc; border-bottom:3px solid #ccc; text-align: center; padding:3px; float:right; font-size: smaller; line-height: 1.3; margin-right: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%&amp;quot;&amp;gt;{{CURRENTDAYNAME}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: x-large; width: 100%;&amp;quot;&amp;gt;{{CURRENTDAY}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 100%;&amp;quot;&amp;gt; {{CURRENTMONTHNAME}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 100%;&amp;quot;&amp;gt;{{CURRENTYEAR}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #aaa; color: #000;&amp;quot;&amp;gt;&#039;&#039;&#039;{{CURRENTTIME}}&#039;&#039;&#039; UTC&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;NARS2000 Building The Executable&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
==Update Notice==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=blue&amp;gt;NARS Conversion from Visual Studio 2008 to Visual Studio 2013 is complete!  All source code compiles correctly and multiple APL workspaces have been tested for correct APL/NARS functionality.  This page is current, up-to-date re NARS working with VS2013&#039;s compiler and standards.  The conversion to VS2013 results in a more up-to-date (5 years more current software technology) program for the GUI Builder and Compiler interface, including newer C/C++ programming standards.  This has represented a major cyclical software upgrade and results in greater APL user functionality via improved C coding.  The recent Beta releases of NARS2000.exe (32 and 64-bit versions) are fully functional.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-size:70%&amp;quot;&amp;gt;v---- &#039;&#039;&#039;Useful Developer links:&#039;&#039;&#039; ----v&amp;lt;br&amp;gt;[http://svnbook.red-bean.com Version Control with Subversioning - Conceptual Gen Bkgnd.]&amp;lt;br&amp;gt;[http://sourceforge.net/p/forge/documentation/svn/ Source Forge Versioning Documentation] &amp;lt;br&amp;gt;[http://sourceforge.net/p/nars2000/code/HEAD/tree/trunk/ Source Forge NARS2000 Source Code]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Why Build Your Own==&lt;br /&gt;
&lt;br /&gt;
First of all, you do not have to build your own.  NARS has already created a great existing Nested Arrays Research System APL interpreter.  NARS2000.exe is freely available at [http://www.nars2000.org/download/Download.html NARS Downloads].  Downloads includes Beta releases for APLers so inclined.&lt;br /&gt;
&lt;br /&gt;
On the other hand, why not expand your programming/software and computer skill horizons?  Many people think and believe &#039;&#039;&#039;Kenneth Iverson&#039;s&#039;&#039;&#039; work remains that of a true genius, a bright light among some very bright intellectual lights, both from a theoretical as well as a software implementation perspective.  Here&#039;s your opportunity to attempt to improve upon some very substantive, preexisting software development work - to further it, to make it even better, and perhaps best of all - &#039;&#039;&#039;it&#039;s free&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Personalize some already pretty amazing software for yourself, or share it with others and get &#039;&#039;&#039;their feedback&#039;&#039;&#039; for even greater insight and subsequent improvement.  NARS version of APL already has over a quarter million lines of source code, subroutines, macros, functions, etc. - 50 years of sometimes intense and continuing evolution, so you are &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; creating something from undeveloped scratch, but inheriting and working from already highly evolved, rigidly disciplined concepts and rigorously debugged software over time.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;APL/2&#039;&#039;&#039; has been used in physics, science, genetic engineering-DNA studies, advanced mathematics, robotics, engineering, artificial intelligence, image processing, bio-medicine, VLSI, financial, statistical and social science applications.  NASA and Astronomers have used APL.&lt;br /&gt;
&lt;br /&gt;
Now APL/2 is 100% customizable.  Perhaps you will be the first to customize APL to safely drive a vehicle, help save a life, make new discoveries or make some process(es) more efficient.&lt;br /&gt;
&lt;br /&gt;
It&#039;s &#039;&#039;&#039;free&#039;&#039;&#039;. It&#039;s &amp;lt;u&amp;gt;&#039;&#039;&#039;evolved&#039;&#039;&#039;&amp;lt;/u&amp;gt;.  Once you start examining NARS/APL/APL2 source code you&#039;ll find it is comprehensive, elegant, process-symbol-efficient, focused toward the end-user, evolved over some fifty years of use, structurally enigmatic, tirelessly debugged &amp;lt;u&amp;gt;and&amp;lt;/u&amp;gt; rich with coding techniques - a great learning tool, even if absolutely nothing else - and NARS believes it is far, far better than just a learning tool.  You&#039;ll learn about Bison Parsing, how it helps define compilers and interpreters.  Further, NARS is a tremendous opportunity to learn more about the human-machine interface; how machine hardware operates and - better understand how software and hardware interact together.&lt;br /&gt;
&lt;br /&gt;
One of the stellar, intellectually expansive aspects of APL/2 is - how fully the language embraces the &amp;lt;u&amp;gt;breadth of hardware functionality&amp;lt;/u&amp;gt;.  This includes instructions running core processor chip(s) and peripheral devices.  This is not your grandparents&#039; punch-card software program run on a room-sized computer, although that was marvelous at its time, but it may have taken him/her several days to get results back for in an introductory chemistry or math lab course.  Today &#039;&#039;&#039;[http://phys.org/news/2015-03-quantum-unexpected-ways.html data structures influence speed of quantum search in unexpected ways]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Platforms==&lt;br /&gt;
&lt;br /&gt;
The current version of NARS2000 may be run and built on a variety of Windows platforms, including most or all post-Windows-98 OS versions.  Furthermore, a long-term goal is to enable NARS to be built on Linux, Mac OS, etc. as per user requests and Developer interests.  If you do not have a Windows machine, the following may be helpful to you:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/187359/5-ways-to-run-windows-software-on-a-mac/ Five ways to run Windows software on a Mac.]&#039;&#039;&#039; From HowToGeek.com, methods include 1)Virtual Machines, 2)Boot Camp, 3)Wine, 4)CrossOver Mac (not free) and 5)Remote Desktop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/133515/4-ways-to-run-windows-software-on-linux/ Four ways to run Windows software on Linux.]&#039;&#039;&#039; Again from HowToGeek.com, methods include 1)Use Wine, 2)Run Windows in a Virtual Machine, 3)Try Crossover (not free) and 4)Remote Desktop.  A fifth way per [http://www.pcworld.com/article/2900497/how-to-run-windows-software-in-linux-everything-you-need-to-know.html PC World] is dual booting both Linux and Windows on your machine.  This essentially involves partitioning hard drives with a portion reserved for Linux and a portion reserved for Windows.  With costs of external hard drives continuing to decline, buying an external or network hard drive may free up hard drive storage space requirements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/173353/how-to-run-windows-software-on-a-chromebook/ How to Run Windows Software on a Chromebook {notebook or tablet PC}.]&#039;&#039;&#039; Again from HowToGeek.com, methods include 1)Access a Windows Desktop Remotely, 2)Use Developer Mode and Install Wine (not available for all Chromebooks), 3)Use Developer Mode and Install a Virtual Machine (may require an Intel Chromebook).&lt;br /&gt;
&lt;br /&gt;
Furthermore, if you work using a tablet or other computing device which supports remote desktop software such as &#039;&#039;&#039;[http://teamviewer.com Team Viewer]&#039;&#039;&#039; and you have a home or work computer running Windows - then you can remotely use NARS over your network and internet using that computer as a host and your local device as a client. Network and internet speeds are sufficiently fast and TeamViewer, for instance, is very good at making your remote desktop seem and respond as if virtually right in front of you.&lt;br /&gt;
&lt;br /&gt;
For the present, the following sections detail descriptions for building the executable with bias towards Windows.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
&lt;br /&gt;
To build the executable &amp;lt;u&amp;gt;in summary&amp;lt;/u&amp;gt; you&#039;ll need the following:&lt;br /&gt;
&lt;br /&gt;
# C Compiler and Linker&lt;br /&gt;
## Make program&lt;br /&gt;
## Resource Compiler&lt;br /&gt;
## Windows SDK&lt;br /&gt;
# Parser Generator&lt;br /&gt;
# Zip Utility&lt;br /&gt;
# PHP (Hypertext Preprocessor)&lt;br /&gt;
# NARS2000 Source Code&lt;br /&gt;
# NARS2000 External Libraries&lt;br /&gt;
# Optionally, Multi-precision Library Source&lt;br /&gt;
# STDINT.H header file&lt;br /&gt;
# Version Control program&lt;br /&gt;
# Doctor Dump SDK&lt;br /&gt;
# Optionally, a File Differencing/Merge program&lt;br /&gt;
&amp;lt;br /&amp;gt;All of the tools you&#039;ll need are &#039;&#039;&#039;freely available&#039;&#039;&#039;.  Some of them happen to be Microsoft-specific. Bill Gates while at Harvard actually worked a bit on/with APL, obviously he discovered the importance of working with arrays and symbolic notation. At the same time there is no reason more generic tools (such as [http://www.delorie.com/djgpp/ DJGPP], [http://www.cygwin.com/ Cygwin] or [http://www.mingw.org/ MinGW]) can&#039;t be used, a task NARS is hoping someone will volunteer to investigate.  In particular, the &#039;&#039;&#039;tools currently used&#039;&#039;&#039; to create the APL Executable, &amp;lt;u&amp;gt;in detail&amp;lt;/u&amp;gt;, are as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
# &amp;lt;u&amp;gt;&#039;&#039;&#039;C&#039;&#039;&#039;&amp;lt;/u&amp;gt; (needed for this NARS2000 project is &#039;&#039;&#039;Visual C++ 2013&#039;&#039;&#039; = C++ &amp;lt;u&amp;gt;GUI development environment and compiler for the C language&amp;lt;/u&amp;gt;, which much of APL&#039;s interpreter is written in). Compiler and Linker:  &#039;&#039;&#039;[https://app.vssps.visualstudio.com/profile/review?download=true&amp;amp;family=VisualStudioExpressDesktop&amp;amp;release=VisualStudio2013Upd4&amp;amp;type=web&amp;amp;slcid=0x409 Microsoft Visual Studio 2013 Express for Desktop Windows]&#039;&#039;&#039; (download requires a FREE Microsoft/Visual Studio account) OS requires Windows XP or later &amp;amp;mdash; includes Link, Make, a Resource Compiler, and an SDK (among others).  Download/Installation Notes: The &#039;&#039;&#039;downloaded file&#039;&#039;&#039; may be double-clicked in Windows Explorer. VS 2013 does NOT Install to a mapped or network drive(but to something like C:\Program Files\...).  It must be Installed on a local PC drive (e.g. C:\...) and &#039;&#039;&#039;unmapped directory&#039;&#039;&#039; (but you can map to it later) - Microsoft apparently requires installation to a local machine drive letter such as &amp;quot;C:\...&amp;quot;. &amp;amp;nbsp; VS2013 Desktop is free &#039;&#039;&#039;and&#039;&#039;&#039; it includes a GUI or graphical user interface (icon-based IDE or integrated developer&#039;s environment), which is geometrically easier to use than a command-line interface.  Windows 8.1 SDK (does NOT require Windows 8.1, but does update for some 8.1 capabilities, especially useful for using Visual Studio 2013; &#039;&#039;&#039;[https://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx?f=255&amp;amp;MSPPError=-2147217396 download is available at Microsoft]&#039;&#039;&#039;.  &amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-size:60%&amp;quot;&amp;gt;&#039;&#039;&#039;Windows SDK&#039;&#039;&#039; (the following MAY NOT BE NECESSARY, SDK=Software Developers Kit, sometimes needed for &#039;&#039;&#039;64-bit installations&#039;&#039;&#039;, usually choose download file GRMSDKX_EN_DVD.iso even for Intel machines) &#039;&#039;&#039;[http://www.microsoft.com/en-us/download/details.aspx?id=18950 download here]&#039;&#039;&#039;, with &#039;&#039;&#039;installation instructions [https://github.com/enGits/engrid/wiki/Configure-Microsoft-Visual-Studio-2008-Express-to-also-build-for-Windows-x64 here]&#039;&#039;&#039;.&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Parser Generator&#039;&#039;&#039;:  &#039;&#039;&#039;[https://cygwin.com/install.html Bison]&#039;&#039;&#039;, a Cygwin package, Save and run either &#039;&#039;&#039;setup-x86.exe&#039;&#039;&#039; (32-bit systems) or &#039;&#039;&#039;setup-x86_64.exe&#039;&#039;&#039; (64-bit systems) as appropriate to your system, &#039;&#039;&#039;Choose A Download Source&#039;&#039;&#039;:  Install from Internet, &#039;&#039;&#039;Select Root Install Directory&#039;&#039;&#039;, &#039;&#039;&#039;Select Local Package Directory&#039;&#039;&#039;, &#039;&#039;&#039;Select Your Internet Connection&#039;&#039;&#039;, &#039;&#039;&#039;Choose A Download Site&#039;&#039;&#039;, &#039;&#039;&#039;Select Packages&#039;&#039;&#039;:  Leave alone &#039;&#039;&#039;All (Default)&#039;&#039;&#039; - first time through, just click [Next], &#039;&#039;&#039;Devel&#039;&#039;&#039;, and &#039;&#039;&#039;bison&#039;&#039;&#039;, other dependent packages may be installed along with &#039;&#039;&#039;bison&#039;&#039;&#039;, if not then &#039;&#039;&#039;after first&#039;&#039;&#039; Cygwin installation finishes, double-click the downloaded Cygwin file in Windows Explorer, downloaded filename should be something like &#039;&#039;&#039;setup-x86_64.exe&#039;&#039;&#039; and the &#039;&#039;&#039;second time through&#039;&#039;&#039; do specifically download and install &#039;&#039;&#039;Dev&#039;&#039;&#039;, &#039;&#039;&#039;Bison&#039;&#039;&#039; - informally note the &#039;&#039;&#039;tree structure&#039;&#039;&#039; during the Bison download/install since &#039;&#039;&#039;creating parse trees&#039;&#039;&#039; is &#039;&#039;&#039;very much&#039;&#039;&#039; a &#039;&#039;Bison program specialty&#039;&#039;, a strength.  Compilers and even APL itself relies heavily on correct statement type recognition and parsing.  To make sure you successfully downloaded and installed &#039;&#039;&#039;bison.exe&#039;&#039;&#039;, the file should be &#039;&#039;&#039;found&#039;&#039;&#039; or reside in the C:\Cygwin\bin or C:\cygwin64\bin folder.  Make note of the folder location since you will need it when setting the PARGEN environment variable shortly, below.&lt;br /&gt;
# &#039;&#039;&#039;Zip Utility&#039;&#039;&#039;:  &#039;&#039;&#039;[http://www.7-zip.org/ 7-Zip]&#039;&#039;&#039; (Latest version, 32- or 64-bit, as appropriate to your system; needed to Extract/Unzip the files and folders you are downloading for this project.)  If you already have a Zip utility program on your PC, Tablet or Server such as WinZip, you can normally skip the 7-Zip download/install.&lt;br /&gt;
# &#039;&#039;&#039;PHP&#039;&#039;&#039; (Hypertext Preprocessor):  &#039;&#039;&#039;[http://www.php.net/downloads.php Downloads]&#039;&#039;&#039; (&amp;lt;u&amp;gt;Windows downloads&amp;lt;/u&amp;gt; for Windows systems.) (Windows binaries/VC9 x86 Thread Safe/Latest version/Zip or Installer, your choice) (Items to Install: Entire &#039;&#039;&#039;Script Executable&#039;&#039;&#039;, and entire &#039;&#039;&#039;Extras&#039;&#039;&#039;). Place the unzipped file&#039;s contents into something like &amp;quot;C:\PHP&amp;quot;. The executable file &amp;quot;php.exe&amp;quot; needs to be &amp;quot;on your directory or environmental path&amp;quot; when later compiling or building the APL executable.&lt;br /&gt;
# &#039;&#039;&#039;NARS2000 Source Code&#039;&#039;&#039;:  Click on &#039;&#039;&#039;[http://sourceforge.net/projects/nars2000/ Browse Code] button&#039;&#039;&#039; at &#039;&#039;&#039;NARS&#039;&#039;&#039; SourceForge.net &#039;&#039;&#039;code repository&#039;&#039;&#039;. You may also use a Version Control program, e.g. see Tortoise SVN below and [http://tortoisesvn.net/ here, see their download page]. &amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-size:70%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;u&amp;gt;&#039;&#039;&#039;Prior&#039;&#039;&#039;&amp;lt;/u&amp;gt; non-current NARS Source Code versions available at [http://code.google.com/p/nars2000/source/checkout Code Google].&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;NARS2000 External Libraries&#039;&#039;&#039;:  [http://www.nars2000.org/download/binaries/misc.zip Miscellaneous Library] (misc.zip, which contains 4 .php files and 1 .ttf file - all directly unzipped into C:\NARS2000) and the following NARS libraries:&lt;br /&gt;
## [http://www.nars2000.org/download/binaries/mplibs.zip &#039;&#039;&#039;MPIR/MPFR/ECM Libraries&#039;&#039;&#039;] - These libraries(mplibs.zip) should be directly extracted or unzipped into the C:\NARS2000 folder such that three(3) distinct sub-directories are &#039;&#039;&#039;directly&#039;&#039;&#039; created: \ecm, \mpfr and \mpir, e.g. C:\NARS2000\ecm.&lt;br /&gt;
## [http://www.nars2000.org/download/binaries/gsldir.zip &#039;&#039;&#039;gsl Library&#039;&#039;&#039;] - This library(gsldir.zip) should be directly un-zipped into the C:\NARS2000 folder such that it becomes &#039;&#039;&#039;C:\NARS2000\gsl&#039;&#039;&#039;.  Folder structure &amp;quot;C:\NARS2000\gsldir\gsl&amp;quot; would be invalid.&lt;br /&gt;
## [http://www.nars2000.org/download/binaries/qdebug.zip &#039;&#039;&#039;qdebug Library&#039;&#039;&#039;] - This library(qdebug.zip) should also be directly un-zipped into the C:\NARS2000 folder such that it becomes &#039;&#039;&#039;C:\NARS2000\qdebug&#039;&#039;&#039;.  Make sure it is NOT double-enclosed when unzipped, for example the following would be an invalid folder setup structure: C:\NARS2000\qdebug\qdebug.&lt;br /&gt;
# &#039;&#039;&#039;Multi-precision Library Source Code:  [http://www.nars2000.org/download/binaries/mpfns-src.zip MPIR/MPFR/ECM Source]&#039;&#039;&#039;.  This zipped download is large (roughly 0.5GB) and is needed primarily to reproduce files in the MPIR/MPFR/ECM Library download so as to satisfy requirements of the GNU General Public License (GPL) v3.  For more details on using the files in the download, look in the zipped file for &amp;lt;b&amp;gt;&amp;lt;code&amp;gt;readme.txt&amp;lt;/code&amp;gt;&amp;lt;/b&amp;gt;.  If you are content to use the already-compiled existing binary libraries in [http://www.nars2000.org/download/binaries/mplibs.zip MPIR/MPFR/ECM Libraries], you may not immediately need the MPIR/MPFR/ECM Source Code; on the other hand - 128-bit CPU chips are in manufacturing production pipelines, quadruple-precision 128-bit floating-point format has been standardized by the IEEE and ultra-precise calculations are already needed in such fields as quantum physics, ref. [http://phys.org/news/2014-06-physicists-quantum-ultra-precise.html Physicists take quantum leap toward ultra-precise measurement], 6/2/2014.  One of APL&#039;s strengths is its handling of mathematically precise calculations and the &#039;&#039;&#039;large size&#039;&#039;&#039; of the multi-precision source code library reinforces that.&lt;br /&gt;
# [http://msinttypes.googlecode.com/svn/trunk/stdint.h STDINT.H] header file installed in the MS Visual Studio 2013 include directory (V:\VC\include -- see below)&lt;br /&gt;
# &#039;&#039;&#039;SubVersion Control program&#039;&#039;&#039;:  [http://tortoisesvn.net/downloads Tortoise SVN] (Current version, 32- or 64-bit depending upon your OS)&lt;br /&gt;
# &#039;&#039;&#039;Doctor Dump SDK&#039;&#039;&#039;:  [https://drdump.com/public/DoctorDumpSDK/DoctorDumpSDK.zip Doctor Dump SDK] - e.g. DoctorDumpSDK.zip.&lt;br /&gt;
# &#039;&#039;&#039;File Differencing/Merge program&#039;&#039;&#039;:  [http://winmerge.org/ WinMerge] (&#039;&#039;&#039;Latest stable version&#039;&#039;&#039;, usually downloads to something like WinMerge-k.m.n-Setup.exe where k, m and n are version/sub-version numbers.)&lt;br /&gt;
&lt;br /&gt;
==Install Tools==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Preface&#039;&#039;&#039;, Convention: &#039;&#039;&#039;x86&#039;&#039;&#039; generally refers to &#039;&#039;&#039;32-bit&#039;&#039;&#039; software installations while 64 (or blank) represents 64-bit software installations on a Windows OS machine.  NARS works on &#039;&#039;&#039;both&#039;&#039;&#039; 32-bit and 64-bit systems, but you should decide &#039;&#039;&#039;in advance&#039;&#039;&#039; which type of install you want 64 vs. 32-bit - ditto for all tool installs.  Installation examples:&lt;br /&gt;
# C:\Program Files (x86)\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Represents 32-bit software program installation, normal folder location.&lt;br /&gt;
# C:\Program Files\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Represents 64-bit software program installation, normal folder location.&lt;br /&gt;
Also, &#039;&#039;&#039;both&#039;&#039;&#039; folder locations just above frequently and even always exist on most machines, but for consistency and integration purposes the software should be 32 &#039;&#039;&#039;&amp;lt;u&amp;gt;or&amp;lt;/u&amp;gt;&#039;&#039;&#039; 64-bit.  Most people choose 64-bit installs if their Windows OS supports the 64-bit architecture, with 32-bit available for backward software compatibility in conjunction with less current systems.  If you don&#039;t know which architecture your system uses, go to the Control Panel, System Information.  Downloads usually get placed into a Downloads folder.  Several of the unzipped NARS tools get placed directly into the C:\NARS2000 folder, see individual tools for exact locations.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To install the Microsoft &#039;&#039;&#039;Visual Studio 2013 Express C compiler&#039;&#039;&#039;, see Downloads(&amp;lt;u&amp;gt;detail&amp;lt;/u&amp;gt;, #1 above).  Visual C++ 2013 usually installs into something like, &amp;quot;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VCExpress.exe&amp;quot; (64-bit loc) and you may want to place a &#039;&#039;&#039;Shortcut&#039;&#039;&#039; to &#039;&#039;&#039;VCExpress.exe&#039;&#039;&#039; on your Desktop by right-clicking on that VCExpress.exe file in Windows Explorer and Send To - Desktop (create shortcut). (Windows 8 Users: You can also &#039;&#039;&#039;Pin VCExpress.exe To your Taskbar&#039;&#039;&#039; for quick, easy access.)  (Prior/obs. Microsoft setup routine name: run the vcsetup.exe program.)  Afterwards including after drive plus folder remapping - the files &#039;&#039;&#039;msobj80.dll&#039;&#039;&#039;, &#039;&#039;&#039;mspdb80.dll&#039;&#039;&#039;, &#039;&#039;&#039;mspdbcore.dll&#039;&#039;&#039;, and &#039;&#039;&#039;mspdbsrv.exe&#039;&#039;&#039; all need to be copied from &#039;&#039;&#039;V:\Common7\IDE&#039;&#039;&#039; to &#039;&#039;&#039;V:\VC\bin&#039;&#039;&#039;, where the &#039;&#039;&#039;V&#039;&#039;&#039; drive is a substitute/mapping for &#039;&#039;&#039;C:\Program Files\Microsoft Visual Studio 9.0&#039;&#039;&#039;.  See the discussion below on [[#Set_Up_Makefile_Environment_Variables|Set Up Makefile Environment Variables]].&lt;br /&gt;
&lt;br /&gt;
To install the Parser Generator (Bison), see the instructions above.  When the Cygwin setup program asks you to choose a &#039;&#039;&#039;Default Text File Type&#039;&#039;&#039;, choose &#039;&#039;&#039;DOS/text&#039;&#039;&#039; so any committed files are the same as in the version control repository.&lt;br /&gt;
&lt;br /&gt;
To install Doctor Dump SDK, unzip it in a directory at or above %NARSROOT%, this usually means unzipping into folder C:\DoctorDumpSDK.  See also discussion below on [[#Set_Up_Makefile_Environment_Variables|Set Up Makefile Environment Variables]].&lt;br /&gt;
&lt;br /&gt;
Install the rest of the tools as per their instructions above, in the Downloads section.&lt;br /&gt;
&lt;br /&gt;
==Install The Source Code==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;First create a NARS2000 &#039;&#039;&#039;root folder&#039;&#039;&#039; somewhere on one of your hard drives, perhaps calling it &#039;&#039;&#039;NARS2000&#039;&#039;&#039;, as in &#039;&#039;&#039;C:\NARS2000&#039;&#039;&#039; (most common) or perhaps at some lower level.  The source code and external libraries are typically installed at or into this level, e.g. qdebug.zip into C:\NARS2000 as C:\NARS2000\qdebug.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Under the root folder make three folders:  &#039;&#039;&#039;trunk&#039;&#039;&#039;, &#039;&#039;&#039;msieve&#039;&#039;&#039;, and &#039;&#039;&#039;branches&#039;&#039;&#039;.  The first folder (&#039;&#039;&#039;trunk&#039;&#039;&#039;) will hold the main body of NARS/APL built exe interpreter &#039;&#039;&#039;source&#039;&#039;&#039; code.  The second (&#039;&#039;&#039;msieve&#039;&#039;&#039;) will be utilized for code used to &#039;&#039;&#039;factor numbers&#039;&#039;&#039;, and the third (&#039;&#039;&#039;branches&#039;&#039;&#039;) will contain individual developer branches of the main code not as yet ready for release, but made public for other developers to see.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Using a Version Control program such as &#039;&#039;&#039;TortoiseSVN&#039;&#039;&#039;, download-checkout the source code (see [[#Check_Out_The_Source_Code|Check Out The Source Code]]),&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Download the &#039;&#039;&#039;misc.zip&#039;&#039;&#039;, &#039;&#039;&#039;qdebug.zip&#039;&#039;&#039;, &#039;&#039;&#039;gsldir.zip&#039;&#039;&#039;, and &#039;&#039;&#039;mplibs.zip&#039;&#039;&#039; files into the root folder and unzip them (directly into that root folder, e.g. C:\NARS2000) using e.g. &#039;&#039;&#039;7z.exe&#039;&#039;&#039; (unzip/extract program used) as in &#039;&#039;&#039;7z x misc.zip&#039;&#039;&#039;, &#039;&#039;&#039;7z x qdebug.zip&#039;&#039;&#039;, &#039;&#039;&#039;7z x gsldir.zip&#039;&#039;&#039;, and &#039;&#039;&#039;7z x mplibs.zip&#039;&#039;&#039; - or double-click on those downloaded zip file names using Windows File Explorer and Extract All (again typically directly into NARS root folder previously set up).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Check Out The Source Code==&lt;br /&gt;
&lt;br /&gt;
An easy way to initialize your copy of the source code for the first time, although it may initially appear cumbersome to an SVN newcomer, is to use a version control program such as TortoiseSVN, mentioned above.  One very helpful feature of TortoiseSVN is that it integrates well with Windows File Explorer.  After downloading and installing TortoiseSVN and then rebooting your PC, there are two directories you will need to Install/initialize-checkout/TortoiseSVN-on.&lt;br /&gt;
# &#039;&#039;&#039;First&#039;&#039;&#039; bring up Windows Explorer, right-click on the &#039;&#039;&#039;trunk&#039;&#039;&#039; folder you manually created, and choose &#039;&#039;&#039;SVN Checkout&#039;&#039;&#039;.  The online NARS URL of repository: is &#039;&#039;&#039;svn://svn.code.sf.net/p/nars2000/code/trunk&#039;&#039;&#039; and your local Checkout directory: is &#039;&#039;&#039;C:\NARS2000\trunk&#039;&#039;&#039; (or wherever your trunk folder is) - quite likely you will have to edit the TortoiseSVN repository field or program local folder field because default text inserted by TortoiseSVN usually does not match folder location(s) identically.  Depth should show Fully recursive, the default.  To begin source code downloading/checkout into your locally created &#039;&#039;&#039;trunk&#039;&#039;&#039; folder click the &#039;&#039;&#039;OK&#039;&#039;&#039; button. Code downloading/checkout should then begin. With a high-speed Internet connection, time required to TortoiseSVN download/checkout NARS code is on the order of roughly two minutes.  When successfully complete, you should get a return message at the end of the downloads list, like &#039;&#039;&#039;Completed at revision nnnn&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Second&#039;&#039;&#039; (and this is a similar repeat step but using folder &#039;&#039;&#039;msieve&#039;&#039;&#039; instead of trunk), bring up Windows Explorer, right-click on the &#039;&#039;&#039;msieve&#039;&#039;&#039; folder you likewise manually created - and choose &#039;&#039;&#039;SVN Checkout...&#039;&#039;&#039;.  This time online NARS &#039;&#039;&#039;URL of repository:&#039;&#039;&#039; is &#039;&#039;&#039;svn://svn.code.sf.net/p/nars2000/code/msieve&#039;&#039;&#039; (this address is slightly different than step 1) and your local &#039;&#039;&#039;Checkout directory:&#039;&#039;&#039; is &#039;&#039;&#039;C:\NARS2000\msieve&#039;&#039;&#039; (or wherever your &#039;&#039;&#039;msieve&#039;&#039;&#039; folder is).  Again, depth should be fully recursive and click the &#039;&#039;&#039;OK&#039;&#039;&#039; button to begin.  This step two normally completes in under five seconds, downloading far fewer files than the trunk download.  Normally, the &amp;lt;u&amp;gt;same&amp;lt;/u&amp;gt; msieve &amp;lt;u&amp;gt;revision&amp;lt;/u&amp;gt; number should appear after finishing this download as per trunk download in step 1.&lt;br /&gt;
&lt;br /&gt;
The above &#039;&#039;&#039;two&#039;&#039;&#039; steps/distinct-folders need be initialized this first checkout time through - in order to establish the special hidden SVN directories for subversion &amp;quot;synching&amp;quot; between your local source code and NARS online code repository. As a brief check that your &#039;&#039;&#039;local&#039;&#039;&#039; NARS source code files match NARS, there should be green check marks on folders trunk and msieve on your PC, placed there by TortoiseSVN. [http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-wcstatus.html  TortoiseSVN Status Information.]&lt;br /&gt;
&lt;br /&gt;
You will still or now need to download and unzip &#039;&#039;&#039;qdebug.zip&#039;&#039;&#039;, &#039;&#039;&#039;misc.zip&#039;&#039;&#039;, &#039;&#039;&#039;gsldir.zip&#039;&#039;&#039;, and &#039;&#039;&#039;mplibs.zip&#039;&#039;&#039; as described above.&lt;br /&gt;
&lt;br /&gt;
Subsequently, you may quickly and easily update your local copy of NARS source code by right-clicking on the &#039;&#039;&#039;trunk&#039;&#039;&#039; and/or &#039;&#039;&#039;msieve&#039;&#039;&#039; folders and choose &#039;&#039;&#039;SVN Update&#039;&#039;&#039;.  One useful feature of sub-versioning programs such as TortoiseSVN is that only &#039;&#039;&#039;changed files&#039;&#039;&#039; from the online latest official version will need to be subsequently downloaded as changes are made in futuro, re subsequent NARS revisions.&lt;br /&gt;
&lt;br /&gt;
Since you may be unfamiliar with the download process your first time through, it make take slightly longer; however, the second or third time you &amp;lt;u&amp;gt;Check Out The Source Code&amp;lt;/u&amp;gt;, over time, the entire &amp;quot;update to most current NARS source code revision&amp;quot; process will probably take under 3 to 5 minutes total, depending however on your (high-speed) Internet service provider&#039;s(ISP) download speed.&lt;br /&gt;
&lt;br /&gt;
==Folders==&lt;br /&gt;
&lt;br /&gt;
After unzipping the above files, the structure under the &#039;&#039;&#039;NARS2000 root folder&#039;&#039;&#039; should look very much like the following(&#039;&#039;&#039;leftmost column&#039;&#039;&#039;), where lower level sub-directories and individual sub-folder file names have been omitted:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;| style=&amp;quot;width: 40%; border:1px dotted blue;&amp;quot; &lt;br /&gt;
!&amp;lt;u&amp;gt;&#039;&#039;&#039;NARS2000&#039;&#039;&#039; SubFolder:&amp;lt;/u&amp;gt;&lt;br /&gt;
! &amp;lt;u&amp;gt;Downloaded Zip &#039;&#039;&#039;Source&#039;&#039;&#039; File or Checkout Process:&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| branches\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | Created manually(1)&lt;br /&gt;
|-&lt;br /&gt;
| ecm\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;mplibs&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| gsl\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;gsldir&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| mpfr\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;mplibs&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| mpir\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;mplibs&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| msieve\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;msieve&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| qdebug\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;qdebug&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| trunk\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\binaries\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\Extensions\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\htdocs\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\images\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\MediaWiki\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\ReleaseNotes\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\WineHQ\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
(1) Subfolder &#039;&#039;&#039;\branches&#039;&#039;&#039; should be &#039;&#039;&#039;created manually&#039;&#039;&#039; (e.g. Windows Explorer, right-click, New, Folder).  It is used to hold subprojects you may develop.  For example if your name is Bill Gates, you might have the following subfolders, each representing a NARS subproject:&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\NARS_Spreadsheets&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\NARS_WordProcPlusAPLEdits&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\EZMenus&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\Graphics&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Choose How To Build==&lt;br /&gt;
&lt;br /&gt;
The following sections describe two alternate ways to build the executable.  One is the GUI interface of VC++ Express, the other is a command line interface using a &#039;&#039;&#039;makefile&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Set Up VC++ Express==&lt;br /&gt;
&lt;br /&gt;
If you are using VC++ Express, the project file is in the &#039;&#039;&#039;trunk&#039;&#039;&#039; folder and is called &#039;&#039;&#039;NARS2000.vcproj&#039;&#039;&#039;.  You may load it manually every time you invoke VC++ Express, or you may load it automatically by placing the path to the project file on the command line in the VC++ Express shortcut as in &#039;&#039;&#039;&amp;quot;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VCExpress.exe&amp;quot; C:\NARS2000\trunk\NARS2000.vcproj&#039;&#039;&#039; or wherever you defined your NARS2000 root folder.&lt;br /&gt;
&lt;br /&gt;
The vast majority of the project settings are found in the above file with some exceptions.&lt;br /&gt;
&lt;br /&gt;
==Set Up Makefile and Environment Variables==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=25%&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Windows 8&#039;&#039;&#039;: Setting up Environment and Path Variable(s):&lt;br /&gt;
Under Settings, Control Panel, System and Security, System, Advanced System Settings, Advanced (Tab) &#039;&#039;&#039;or&#039;&#039;&#039; in Control Panel &amp;lt;u&amp;gt;Search&amp;lt;/u&amp;gt; for &#039;&#039;&#039;Environment Variables&#039;&#039;&#039;,&lt;br /&gt;
* Click &#039;&#039;&#039;Environment Variables&#039;&#039;&#039; button - There is both a &#039;&#039;&#039;Temp Variable&#039;&#039;&#039; and &#039;&#039;&#039;Path Variable&#039;&#039;&#039;.&lt;br /&gt;
:: There are 2 sections, User Account Variables and System Variables.  You normally want to add new &#039;&#039;&#039;System Variables&#039;&#039;&#039;.&lt;br /&gt;
::: Click &#039;&#039;&#039;[New]&#039;&#039;&#039; button for a &amp;lt;u&amp;gt;New&amp;lt;/u&amp;gt; System Variable:&lt;br /&gt;
:::: Variable name &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;PARGEN&#039;&#039;&#039;&lt;br /&gt;
:::: Variable value &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;C:\cygwin64\bin\bison&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;&amp;lt; typical for a 64 bit install(for bison.exe in subfolder bin), for 32 bits installs see below for variable &#039;&#039;&#039;set&#039;&#039;&#039; values.&lt;br /&gt;
* Normally add a &#039;&#039;&#039;New&#039;&#039;&#039; variable (var Name plus Value) for each of the &#039;&#039;&#039;eight Set&#039;&#039;&#039; vars commands listed below, 8 environment variable names - such as NARSROOT, CS_DIR, ZIPPRG, PARGEN, etc.&lt;br /&gt;
* If you need to add another Path to an existing variable, each new or added path is separated with a semi-colon.&lt;br /&gt;
* After updating any Environment/Path variable(s) you apparently need to reboot since the above variable changes only affect changes in the Registry until PC is rebooted.&lt;br /&gt;
* The instructions below should also or alternatively work.&lt;br /&gt;
&amp;lt;hr width=25%&amp;gt;&lt;br /&gt;
If you are building from the &#039;&#039;&#039;makefile&#039;&#039;&#039; or working with the GUI C++ Compiler, you&#039;ll need to set &#039;&#039;&#039;eight environment variables&#039;&#039;&#039; in your &#039;&#039;&#039;autoexec.bat&#039;&#039;&#039; file (&#039;&#039;&#039;or&#039;&#039;&#039; see just above for setting Environment Variables via &#039;&#039;&#039;Windows Control Panel&#039;&#039;&#039;). Note that &#039;&#039;Environment variable #n&#039;s&#039;&#039; just below are shown only for helpful reference purposes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REM Path of the root of the NARS2000 project *ending with a backslash*&lt;br /&gt;
Set NARSROOT=C:\NARS2000^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #1&lt;br /&gt;
&lt;br /&gt;
REM Path to Doctor Dump SDK root&lt;br /&gt;
Set CS_DIR=C:\DoctorDumpSDK^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Environment variable #2&lt;br /&gt;
&lt;br /&gt;
REM Path and name of zip program (7-Zip)&lt;br /&gt;
Set ZIPPRG=&amp;quot;C:\Program Files\7-Zip\7z&amp;quot; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #3&lt;br /&gt;
&lt;br /&gt;
REM Path and name of parser generator (bison) &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Environment variable #4 (next line)&lt;br /&gt;
Set PARGEN=C:\Cygwin\bin\bison &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; OR for a 64-bit install &amp;gt;&amp;gt; &amp;amp;nbsp; Set PARGEN=C:\cygwin64\bin\bison&lt;br /&gt;
&lt;br /&gt;
REM Path and name of makedep program&lt;br /&gt;
Set MAKEDEP=%NARSROOT%makedep.php &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #5&lt;br /&gt;
&lt;br /&gt;
REM Path and name of the &amp;lt;makepro.php&amp;gt; program&lt;br /&gt;
Set MAKEPRO=%NARSROOT%makepro.php &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Environment variable #6&lt;br /&gt;
&lt;br /&gt;
REM Folder of SDK (&amp;quot;C:\Program Files\Microsoft SDKs\Windows\v7.0A&amp;quot;)&lt;br /&gt;
Set SDK=U:^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #7&lt;br /&gt;
&lt;br /&gt;
REM MSVC compiler (&amp;quot;C:\Program Files\Microsoft Visual Studio 9.0&amp;quot;)&lt;br /&gt;
Set MSVC=V:\VC^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;75%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Mapping Virtual Drive Letters:&#039;&#039;&#039;&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You will be using Windows &#039;&#039;&#039;subst&#039;&#039;&#039; command to map drive letters as references to drives &#039;&#039;&#039;U:&#039;&#039;&#039; and &#039;&#039;&#039;V:&#039;&#039;&#039; that several of the above &#039;&#039;&#039;environment variables&#039;&#039;&#039; refer to.  Microsoft explanation of &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&#039;&#039;&#039;[https://technet.microsoft.com/en-us/library/bb491006.aspx subst command here]&#039;&#039;&#039;.&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Modify your C:\AutoExec.bat file to include something approximating the following highlighted text(version#/32/64 bit installs each vary), &#039;&#039;&#039;include&#039;&#039;&#039; the enclosing quote chars just below:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;subst U: &amp;quot;C:\Program Files\Microsoft SDKs\Windows\v7.0A&amp;quot;&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;(or whatever your current version is)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;subst V: &amp;quot;C:\Program Files\Microsoft Visual Studio 9.0&amp;quot;&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (ditto re version  9.0=Visual Studio 2008)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If you do &amp;lt;u&amp;gt;not have&amp;lt;/u&amp;gt; an &#039;&#039;&#039;AutoExec.bat&#039;&#039;&#039; file (many &#039;&#039;&#039;Windows 7 and 8&#039;&#039;&#039; users may not):&lt;br /&gt;
: Create a &amp;lt;u&amp;gt;new text document&amp;lt;/u&amp;gt; using Windows File Explorer, rename it as AutoExec.bat and move(or copy) it to the &#039;&#039;&#039;C:\&#039;&#039;&#039; drive folder &#039;&#039;&#039;with the above two subst&#039;&#039;&#039; commands in it.&lt;br /&gt;
: Windows 7 and 8 users: File AutoExec.bat no longer automatically gets run at system-user boot-up so &#039;&#039;&#039;place a Shortcut to AutoExec.bat&#039;&#039;&#039; in the Program files &#039;&#039;&#039;Startup&#039;&#039;&#039; folder location(navigate Windows File Explorer to &#039;&#039;&#039;one&#039;&#039;&#039; of the below locations, right-click, &#039;&#039;&#039;New&#039;&#039;&#039;, &#039;&#039;&#039;Shortcut&#039;&#039;&#039;, &#039;&#039;&#039;AutoExec.bat&#039;&#039;&#039;).  The Windows 7/8 Startup Folder usually is located as follows:&lt;br /&gt;
:: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (general/all users Startup folder) &#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
:: C:\Users\&#039;&#039;&#039;UserName&#039;&#039;&#039;\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (single user Startup folder, &#039;&#039;&#039;UserName varies&#039;&#039;&#039;)&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039;: A successfully mapped &#039;&#039;&#039;V&#039;&#039;&#039; drive should contain a sub-sub-subfolder which then contains the &#039;&#039;&#039;amd64\nmake.exe&#039;&#039;&#039; (64-bit systems) file or &#039;&#039;&#039;bin\nmake.exe&#039;&#039;&#039; (32-bit systems), e.g. &#039;&#039;&#039;typical&#039;&#039;&#039; 64-bit configuration/location:&amp;lt;br&amp;gt;&#039;&#039;&#039;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\nmake.exe&#039;&#039;&#039;.&lt;br /&gt;
:The V drive map would &#039;&#039;&#039;only&#039;&#039;&#039; include linking through subfolder &#039;&#039;&#039;\Visual Studio 9.0&#039;&#039;&#039;.  After creating the linked drives, just &#039;&#039;&#039;check&#039;&#039;&#039; to make sure your mapped &#039;&#039;&#039;V&#039;&#039;&#039; drive has the &#039;&#039;&#039;nmake.exe&#039;&#039;&#039; contained one or several subfolder levels below it. The NARS2000.exe automated Compile/Build uses &#039;&#039;&#039;nmake.exe&#039;&#039;&#039; during exe construction.  64-bit installs require the &#039;&#039;&#039;amd64\nmake.exe&#039;&#039;&#039; file - paradoxically even if your machine&#039;s chipset is Intel, a minor Microsoft variation.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Typical mapped configurations just below, but again each install/version# may vary:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;U&#039;&#039;&#039; = &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;C:\Program Files\Microsoft SDKs\Windows\v7.0A&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; (or v6.0A or whatever your downloaded/current version is)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;V&#039;&#039;&#039; = &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;C:\Program Files\Microsoft Visual Studio 9.0&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (or &#039;&#039;&#039;C:\Program Files (x86)\Microsoft Studio 9.0&#039;&#039;&#039; for 64-bit installs, again look for nmake.exe in a subfolder)&amp;lt;br&amp;gt;&lt;br /&gt;
As a &#039;&#039;&#039;check&#039;&#039;&#039; to make sure the &#039;&#039;&#039;subst&#039;&#039;&#039; commands worked, there should now be &#039;&#039;&#039;2 new drive letters visible in Windows Explorer, in the leftmost window for virtual drives/mapped folders - U and V&#039;&#039;&#039;.  &#039;&#039;To avoid having to reboot&#039;&#039; at present, just &#039;&#039;&#039;open&#039;&#039;&#039;(not edit but run) &#039;&#039;&#039;AutoExec.bat AFTER&#039;&#039;&#039; making sure it is 100% correctly configured.  Having a correctly configured AutoExec.bat file will ensure not having to manually link drives U and V each time the NARS2000.exe is built-rebuilt.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;40%&amp;quot;&amp;gt;&lt;br /&gt;
If you install NARS project tools in other folders, make appropriate changes to the above mappings.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lastly don&#039;t forget:&#039;&#039;&#039; To append three folders: &#039;&#039;&#039;C:\cygwin64\bin&#039;&#039;&#039; , &#039;&#039;&#039;V:\Common7\IDE&#039;&#039;&#039; and &#039;&#039;&#039;C:\PHP&#039;&#039;&#039; to your &#039;&#039;&#039;Path&#039;&#039;&#039; variable &#039;&#039;&#039;PATH=%PATH%;C:\cygwin64\bin;V:\Common7\IDE;C:\PHP&#039;&#039;&#039; or see &#039;&#039;&#039;Control Panel&#039;&#039;&#039; search for &#039;&#039;&#039;Path&#039;&#039;&#039;, then &#039;&#039;&#039;Edit&#039;&#039;&#039; System Environment Variables for your account, system variable named &#039;&#039;&#039;Path&#039;&#039;&#039;; append to that &#039;&#039;&#039;Path&#039;&#039;&#039; variable &amp;amp;nbsp; &#039;&#039;&#039;;C:\cygwin64\bin;V:\Common7\IDE;C:\PHP&#039;&#039;&#039; &amp;amp;nbsp; - (three additional paths, semicolon separated) so Visual C&#039;s &#039;&#039;&#039;Make&#039;&#039;&#039; plus &#039;&#039;&#039;Compiler&#039;&#039;&#039; can find DLLs, exe&#039;s and Tools you have so diligently downloaded, then installed.&lt;br /&gt;
&lt;br /&gt;
==Pre First Compile and Localization Notes==&lt;br /&gt;
&lt;br /&gt;
Make/Compile local Environment Variable &#039;&#039;&#039;%NARSROOT%&#039;&#039;&#039; is presently set using file &#039;&#039;&#039;C:\NARS2000\trunk\wcustomize.bat&#039;&#039;&#039;.  This bat file is called by other major trigger-compile bat files such as mk32.bat, mk64.bat, w32.bat and w64.bat - which oversee-initiate compilation.  The %NARSROOT% environment variable is important in indicating &amp;lt;u&amp;gt;where&amp;lt;/u&amp;gt; Make/Compilation will occur.  &amp;lt;u&amp;gt;Before&amp;lt;/u&amp;gt; first locally compiling NARS2000, you likely need to manually edit (using Notepad or a local text file editor) file &amp;lt;u&amp;gt;&#039;&#039;&#039;trunk\wcustomize.bat&#039;&#039;&#039;&amp;lt;/u&amp;gt; and make sure the following are initially correct per your &#039;local PC NARS installation&#039; i.e. within wcustomize.bat:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Set NARSROOT=C:\NARS2000^\&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (Note: &#039;&#039;&#039;No %&#039;&#039;&#039; symbols are needed in &amp;lt;u&amp;gt;set/specification&amp;lt;/u&amp;gt; rows in wcustomize.bat, e.g. replace &#039;R:\NARS2000&#039; to &#039;C:\NARS2000&#039; as shown at left)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Set CS_DIR=C:\DoctorDumpSDK^\&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; (again R:\ was changed to C:\)&amp;lt;br&amp;gt;&lt;br /&gt;
The additional hat(^) symbol in the above bat commands is needed for directory/folder recombination purposes, essentially sub-directory parse-point identification and or recombination point, where NARS may use subdirectories/parsing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prior&#039;&#039;&#039; to using &#039;&#039;&#039;Visual Studio&#039;&#039;&#039; and its &#039;&#039;&#039;IDE&#039;&#039;&#039;(integrated developer&#039;s environment) for NARS Building/Compilation purposes a first time, and to help ensure the proper installation of NARS source code - it is very helpful/necessary to open a CMD.EXE window using &amp;lt;big&amp;gt;&#039;&#039;&#039;Windows Start&#039;&#039;&#039;, &#039;&#039;&#039;CMD.EXE&#039;&#039;&#039;&amp;lt;/big&amp;gt;.  This will open up a small CMD window.  While &amp;lt;big&amp;gt;inside the opened CMD.EXE window&amp;lt;/big&amp;gt;, navigate to your local C:\NARS2000\trunk folder, using &amp;lt;big&amp;gt;&#039;&#039;&#039;cd C:\NARS2000\trunk&#039;&#039;&#039;&amp;lt;/big&amp;gt; where cd represents change directory.  Now run &amp;lt;big&amp;gt;&#039;&#039;&#039;mk32.bat&#039;&#039;&#039;&amp;lt;/big&amp;gt; by typing it in, to compile NARS2000&#039;s 32-bit executable.  If mk32.bat is successful and if your installation is 100% correct, two identical files in separate folders will be created(built and compiled) using bat commands from inside that CMD window/session:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\RET\ND32\NARS2000.exe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\binaries\ND32\NARS2000.exe&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If that 32-bit NARS make/build was successful, then from the same CMD.EXE window, type &amp;lt;big&amp;gt;&#039;&#039;&#039;mk64.bat&#039;&#039;&#039;&amp;lt;/big&amp;gt;. This should likewise compile locally the &#039;&#039;&#039;64-bit&#039;&#039;&#039; NARS Executable, with again two resulting &#039;&#039;&#039;exe output files:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\RET\ND64\NARS2000.exe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\binaries\ND64\NARS2000.exe&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Successfully completing mk32.bat and mk64.bat along with presence of their respective &#039;&#039;&#039;NARS2000.exe&#039;&#039;&#039; output files generally confirm successful installation of NARS source code, as well as correct installation for several associated tandem utility tools re compiling NARS2000.exe on your server, PC, notebook or tablet computer.&lt;br /&gt;
&lt;br /&gt;
==Building The Executable==&lt;br /&gt;
&lt;br /&gt;
Congratulations, if you&#039;ve successfully arrived at this section, your resume now includes such useful terms as software installation wizard and relentless software engineering candidate.  You are part of an elite group - the few, the proud, NARS geek marines; also known as tomorrow&#039;s APL-symbol-set event-horizon squad.  You&#039;ve managed to easily or otherwise cross several potentially deep programming ravines in the process.&lt;br /&gt;
&lt;br /&gt;
At this point you should be ready to build the executable, again - this time however from inside Visual Studio&#039;s IDE(integrated developer&#039;s environment).  There are two general ways to build NARS executable.  Method one: Involves the time-honored command-line batch file compile mode using files mk32.bat or mk64.bat - as you should have previously discovered in the section &#039;&#039;&#039;[[#Pre_First_Compile_and_Localization_Notes|Pre First Compile and Localization Notes]]&#039;&#039;&#039; while using Windows CMD.EXE.&lt;br /&gt;
&lt;br /&gt;
Method two: Involves again first opening a (Windows Start button) &#039;&#039;&#039;CMD.EXE&#039;&#039;&#039; window and running &#039;&#039;&#039;w32.bat start&#039;&#039;&#039; (all one command) or &#039;&#039;&#039;w64.bat start&#039;&#039;&#039;.  Immediately or shortly, you should see Visual Studio 2013&#039;s program visualize, load and run - with either the 32-bit or 64-bit NARS2000 project/program loaded.  After Visual Studio 2013 finishes loading - simply click Build.  Full use of Visual Studio 2013&#039;s IDE (integrated developer&#039;s environment) should now be available for you to experiment with, develop code on, debug and customize APL as you may choose.  Your first time through with running &#039;&#039;&#039;w32.bat start&#039;&#039;&#039; and &#039;&#039;&#039;w64.bat start&#039;&#039;&#039;:&lt;br /&gt;
* There is usually a Visual Studio &#039;&#039;&#039;One Way Migration&#039;&#039;&#039; message which displays.  This is normal, TBE(to be expected), and yes you DO at that point want to migrate the NARS2000 project to Visual Studio 2013.  There are usually roughly 20 migration warnings which also show up in an Internet Browser page re the Migration Report - again, all normally to be expected.  However, there should be &#039;&#039;&#039;&amp;lt;u&amp;gt;zero errors&amp;lt;/u&amp;gt;&#039;&#039;&#039; in the migration report.&lt;br /&gt;
* If all went satisfactorily well with the Migration, you should be able to select/choose/Click &#039;&#039;&#039;Build Solution&#039;&#039;&#039; under Build in VS2013&#039;s IDE to fully compile NARS2000 executable.  After Build, there should likewise be zero errors.&lt;br /&gt;
&lt;br /&gt;
Special note regarding &#039;&#039;&#039;w32.bat start&#039;&#039;&#039; and &#039;&#039;&#039;w64.bat start&#039;&#039;&#039; while in Visual Studio&#039;s IDE for the NARS2000 project:&lt;br /&gt;
When &amp;lt;u&amp;gt;switching&amp;lt;/u&amp;gt; between 32 and 64-bit versions, i.e. w32.bat start &#039;&#039;&#039;versus&#039;&#039;&#039; w64.bat start: There is a &#039;&#039;&#039;Property&#039;&#039;&#039; adjustment required when using Visual Studio&#039;s IDE.  After Visual Studio opens up and in the Solution Explorer window (usually on the upper right hand side of your screen) click on &amp;quot;Solution &#039;nars2000&#039; (1 project).&amp;quot;  This should then show a Properties Window just below it.  Look for a line which reads: &#039;&#039;&#039;Active config&#039;&#039;&#039;.  If you ran w32.bat start then Active config should have a value of &#039;&#039;&#039;Debug32|Win32&#039;&#039;&#039;.  If you ran w64.bat start then Active config should have a value of &#039;&#039;&#039;Debug64|Win32&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Developer Experiments with NARS Source Code==&lt;br /&gt;
&lt;br /&gt;
This section is for Developers who have successfully downloaded NARS source code and want to Experiment with it, or further develop NARS APL Interpreter&#039;s source code.&lt;br /&gt;
&lt;br /&gt;
For development and debugging purposes: You as APL Interpreter developer normally want to want to &amp;lt;u&amp;gt;first&amp;lt;/u&amp;gt; write new source code/model using the &amp;lt;u&amp;gt;32-bit version&amp;lt;/u&amp;gt; of NARS2000 (w32.bat start).  This is because the 32-bit version is easier to debug than the 64-bit version; error messages can be less complex.  Migrating &#039;&#039;&#039;correct source code&#039;&#039;&#039; forward from the 32-bit version to the 64-bit version is also easier than a reverse migration.&lt;br /&gt;
&lt;br /&gt;
You will also at some point still need to be synched-with or later synch-back-to NARS online source code - i.e. after experimenting/changing local PC source code.  This is equivalent to a ChemLab 101 at home/home-office and cleaning up all experiments at the end of the chemistry class, except as it applies to software developers, NARS software developers, and or those inclined to experiment safely.&lt;br /&gt;
&lt;br /&gt;
Here is where Tortoise SVN provides excellent and time-tested source-code clean-up tools for your local PC, including &#039;&#039;&#039;Resolve, Revert, Clean up, and Undo changes&#039;&#039;&#039;.  Pull up these TortoiseSVN utilities by navigating Windows File Explorer to directory C:\NARS2000.  If you successfully previously downloaded and Installed TortoiseSVN and NARS2000 source code, as outlined earlier/above, you may right click on say the \trunk subfolder in C:\NARS2000.  A mouse right-click on \trunk should show an option labeled TortoiseSVN.  Further choosing/selecting TortoiseSVN should then reveal multiple clean up options - Resolve, Revert, Clean up and Undo changes.&amp;lt;br&amp;gt;&#039;&#039;&#039;TortoiseSVN Documentation on:&#039;&#039;&#039;&amp;lt;br&amp;gt;[http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-cleanup.html Clean up.]&amp;lt;br&amp;gt;[http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-revert.html Undo Changes.]&amp;lt;br&amp;gt;[http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-conflicts.html Resolving Conflicts.]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At least one method to safely synch-back-to NARS is to:&lt;br /&gt;
# Select &#039;&#039;&#039;TortoiseSVN&#039;&#039;&#039; after right-clicking on the trunk folder&lt;br /&gt;
# Select &#039;&#039;&#039;Revert&#039;&#039;&#039;, click &#039;&#039;&#039;OK&#039;&#039;&#039;, let it run.&lt;br /&gt;
# Select &#039;&#039;&#039;Clean up&#039;&#039;&#039;, check &#039;&#039;&#039;Refresh shell overlays&#039;&#039;&#039;, click &#039;&#039;&#039;OK&#039;&#039;&#039;, let it run.&lt;br /&gt;
Per TortoiseSVN there should again be green check marks appearing on your trunk folder as well as your msieve folder.&lt;br /&gt;
&lt;br /&gt;
For revision tracking and long-term software program maintenance purposes: &#039;&#039;&#039;Keep track of which files (file names) you personally modify, including a brief purpose&#039;&#039;&#039; for that edit.  You will need to this information later for Release Notes purposes (see folder C:\NARS2000\trunk\ReleaseNotes for best-practice-examples of developer note-taking) and if you later synch to a new online NARS version, you may have to carry-forward your edit changes into a newly downloaded set of NARS source code files which may or may not reflect your prior local computer edit changes.&lt;br /&gt;
&lt;br /&gt;
==Periodic NARS Updates==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Incremental Update&amp;lt;/u&amp;gt; - Method 1:&amp;lt;br&amp;gt;&lt;br /&gt;
Periodically, NARS APL interpreter developers should ensure changes done by other developers get incorporated into their local machine&#039;s source code working copy. This is the process of integrating/downloading changes from NARS SourceForge server &#039;&#039;&#039;&amp;lt;u&amp;gt;to&amp;lt;/u&amp;gt;&#039;&#039;&#039; your local copy. Updating may be performed on single files, a set of selected files, or recursively on entire directory hierarchies. To update, select the files and/or &#039;&#039;&#039;directories&#039;&#039;&#039; you want (usually \trunk and or \msieve), right click and select &#039;&#039;&#039;TortoiseSVN → Update&#039;&#039;&#039; in the explorer context menu for that trunk or msieve folder. A window will pop up displaying the progress of the update as it runs. Changes done by other developers will be merged into your local files, &#039;&#039;&#039;keeping&#039;&#039;&#039; any changes you may have done to the same files - if you did not want to keep your local changes but do want to keep the downloaded changes, select TortoiseSVN and Revert &#039;&#039;&#039;prior&#039;&#039;&#039; to running TortoiseSVN Update. NARS repository at SourceForge is &#039;&#039;&#039;not&#039;&#039;&#039; affected by an update to your local copy. [http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-update.html Update Your Working Copy With Changes From Others]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Total Source Code Replacement&amp;lt;/u&amp;gt; - Method 2:&amp;lt;br&amp;gt;&lt;br /&gt;
For example from version r1325 to say version r1364 (note a significant revision/datetime gap between 1325 and 1364, hypothetically), whatever NARS latest revision number is.  Total code replacement may be preferred over incremental updating when major structural changes or significant source code changes are newly in situ.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Total Replacement Process: Visually scan NARS source code page at http://sourceforge.net/p/nars2000/code/HEAD/tree/trunk/ and review the top 25 to 40 file entries or so, while mentally keeping track of the &#039;&#039;&#039;highest revision number found&#039;&#039;&#039;(e.g. r1379). If after your last/earlier TortoiseSVN Update, your local version number is lower than the latest revision number visually found online, then perform the following to update to the most recent NARS revision:&lt;br /&gt;
# Rename your existing NARS folder to something approximating C:\NARS2000_old_rev&lt;br /&gt;
# Create an entirely new C:\NARS2000 folder&lt;br /&gt;
# &#039;&#039;&#039;Copy all folders and files at the &amp;lt;u&amp;gt;top level&amp;lt;/u&amp;gt;&#039;&#039;&#039; from C:\NARS2000_old_rev folder into C:\NARS2000 &#039;&#039;&#039;EXCEPT \trunk and \msieve subfolders (and their contents)&#039;&#039;&#039;.  The \trunk and \msieve folders will shortly be downloaded from SourceForge.&lt;br /&gt;
# Create &#039;&#039;&#039;new empty folders called \trunk and \msieve&#039;&#039;&#039; in the new C:\NARS2000 folder.&lt;br /&gt;
# Revisit the section above called &#039;&#039;&#039;[[#Check_Out_The_Source_Code|Check Out The Source Code]]&#039;&#039;&#039; to again checkout/download to the absolute latest NARS version number, for both \trunk and \msieve folders.&lt;br /&gt;
# Also revisit &#039;&#039;&#039;[[#Pre_First_Compile_and_Localization_Notes|Pre First Compile and Localization Notes]]&#039;&#039;&#039; and text edit file \trunk\wcustomize.bat to localize the new version.&lt;br /&gt;
# Folder C:\NARS2000_old_rev may be &#039;&#039;&#039;Recycled&#039;&#039;&#039; after you are done copying non-trunk and non-msieve files/folders from it into your new C:\NARS2000 folder.  If disk space is not restrictive and for 100% safety purposes, keep your prior folder available until after successfully &#039;&#039;&#039;Building/Compiling&#039;&#039;&#039; the newly downloaded 32-bit and 64-bit versions, and making sure you did not have any local personal changes now potentially being recycled.&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=C_Source_Code_Conventions_and_Abbreviations_Dictionary&amp;diff=2791</id>
		<title>C Source Code Conventions and Abbreviations Dictionary</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=C_Source_Code_Conventions_and_Abbreviations_Dictionary&amp;diff=2791"/>
		<updated>2015-08-24T23:25:52Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Abbreviations Dictionary */  added ODS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;NARS C &amp;lt;u&amp;gt;Source Code&amp;lt;/u&amp;gt; Conventions and Abbreviations Dictionary:&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Conventions==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 50%&amp;quot;&lt;br /&gt;
! Convention&lt;br /&gt;
! Syntax&lt;br /&gt;
! Description/Where Used&lt;br /&gt;
! Sample Use&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PrimFn&#039;&#039;&#039;&lt;br /&gt;
| Prefix &lt;br /&gt;
| name prefix to all Primary APL functions&lt;br /&gt;
| &#039;&#039;&#039;PrimFn&#039;&#039;&#039;Rho_EM_YY&lt;br /&gt;
| Quickly identify such names&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SysFn&#039;&#039;&#039;&lt;br /&gt;
| Prefix&lt;br /&gt;
| name prefix to all Quad type System Functions&lt;br /&gt;
| &#039;&#039;&#039;SysFn&#039;&#039;&#039;WA_EM_YY&lt;br /&gt;
| Quickly identify such names&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;_EM_YY&#039;&#039;&#039;&lt;br /&gt;
| Suffix&lt;br /&gt;
| name suffix to all Primary APL functions AND Quad System Functions, including monadic and dyadic calls&lt;br /&gt;
| SysFnTS&#039;&#039;&#039;_EM_YY&#039;&#039;&#039;&lt;br /&gt;
| Quickly identify such names, referencing&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Abbreviations Dictionary==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 70%&amp;quot;&lt;br /&gt;
! Abbrev&lt;br /&gt;
! Meaning&lt;br /&gt;
! Definition Location, Purpose, Cross Ref&#039;s&lt;br /&gt;
! Sample Source Code Usage&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;APA&#039;&#039;&#039;&lt;br /&gt;
| Arithmetic Progression Array&lt;br /&gt;
| C code suffix to variable type, sometimes variable names. for example, ⍳6 or iota-6 is an &#039;&#039;&#039;arithmetic progression array&#039;&#039;&#039; of integers. Definition for ARRAY_&#039;&#039;&#039;APA&#039;&#039;&#039; found in file &amp;lt;datatype.h&amp;gt;&lt;br /&gt;
| ARRAY_&#039;&#039;&#039;APA&#039;&#039;&#039; is a variable type. Ref. wiki &#039;&#039;&#039;[[APA|documentation page APA]]&#039;&#039;&#039;. For closely examining &#039;&#039;&#039;APA &#039;&#039;&#039; datatypes, see also &#039;&#039;&#039;[[System_Function_DR|System Function ⎕DR]]&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;lp&#039;&#039;&#039;&lt;br /&gt;
| long pointer&lt;br /&gt;
| Usually found as a prefix to variable names.  NARS makes frequent use of pointers to speed up processing times, to make NARS2000.exe more efficient.&lt;br /&gt;
| &#039;&#039;&#039;lp&#039;&#039;&#039;tkRhtArg (var name; long ptr to token var structure of a right hand argument for a function call)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;NELM&#039;&#039;&#039;&lt;br /&gt;
| Number of Elements&lt;br /&gt;
| Usually embedded within variable names.  Conceptually like &#039;&#039;&#039;[[Rho|Rho or &amp;lt;apll&amp;gt;{rho}&amp;lt;/apll&amp;gt;]]&#039;&#039;&#039; of a vector.&lt;br /&gt;
| APL&#039;&#039;&#039;NELM&#039;&#039;&#039; apl&#039;&#039;&#039;NELM&#039;&#039;&#039;Rht; // VarType VarName; Right arg NELM for variable type(APLNELM) and variable named aplNELMRht&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ODS&#039;&#039;&#039;&lt;br /&gt;
| OutputDebugString&lt;br /&gt;
| Variously used throughout program, especially see file &amp;lt;debug.c&amp;gt; for string printing to console, debugging. See function int oprintfW, usage example per &amp;lt;updates.c&amp;gt;, oprintfW (L&amp;quot;%3d:  SetEvent on %p (IDC_DNLPAUSE_BN -- hSuspend)\n&amp;quot;, guCnt++, dnlThrStr.hSuspend);  % means &amp;quot;Prt var here&amp;quot;; 3 = &amp;quot;use at least 3 spaces(max width) to show, pad as needed&amp;quot;; d = &amp;quot;Var is int&amp;quot;; hex-%x; float-%f; str-%s; ptrs-%p. L prefix=unicode str&lt;br /&gt;
| int oprintfW(LPWCHAR lpwszFmt, ...)  // Ptr to format string, variable list&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PerTab&#039;&#039;&#039;&lt;br /&gt;
| per tab, esp. per APL workspace tab&lt;br /&gt;
| Embedded in var names.  Detailed explanation of PerTab found in C source header file &amp;lt;pertab.h&amp;gt;.  &#039;&#039;&#039;NARS supports multiple simultaneously open and running workspaces.&#039;&#039;&#039;  Each workspace is displayed as a separate &#039;&#039;&#039;Tab&#039;&#039;&#039;, much like folder tabs.  All variables in all workspace are distinctly maintained, with each PerTab.&lt;br /&gt;
| LP&#039;&#039;&#039;PERTAB&#039;&#039;&#039;DATA lpMemPTD; where LP&#039;&#039;&#039;PERTAB&#039;&#039;&#039;DATA is the variable type and lpMemPTD is a pointer to PerTabData global memory&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PTD&#039;&#039;&#039;&lt;br /&gt;
| per tab of data&lt;br /&gt;
| Embedded in var names.  Each NARS workspace is kept separate and distinct in its own PTD.&lt;br /&gt;
| lpMem&#039;&#039;&#039;PTD&#039;&#039;&#039; structured var name, in this case a ptr to PerTabData global memory&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rank&#039;&#039;&#039;&lt;br /&gt;
| Rank&lt;br /&gt;
| Rank: Scalars=0, Vectors=1, Matrices=2..N.  Like {rho}{rho} of an APL variable or contained data structure, see shape of the shape &#039;&#039;&#039;[[Rho|RhoRho or {rho}{rho}]]&#039;&#039;&#039;.&lt;br /&gt;
| APL&#039;&#039;&#039;RANK&#039;&#039;&#039; apl&#039;&#039;&#039;Rank&#039;&#039;&#039;Lft // Left arg rank (variable type, variable name)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SIS&#039;&#039;&#039;&lt;br /&gt;
| State Indicator Stack&lt;br /&gt;
| Frequently embedded within variable and function names. Detailed explanation of SIS found in C source header file &amp;lt;sis.h&amp;gt;  See also APL&#039;s &#039;&#039;&#039;[[System_Command_SI|System Command )SI]]&#039;&#039;&#039;.&lt;br /&gt;
| lpMemPTD-&amp;gt;lp&#039;&#039;&#039;SIS&#039;&#039;&#039;Cur-&amp;gt;ResetFlag; (var name) AND Fill&#039;&#039;&#039;SIS&#039;&#039;&#039;Nxt (fcn name)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;tk&#039;&#039;&#039;&lt;br /&gt;
| token&lt;br /&gt;
| Frequently found embedded in structured variable names. Tokens are [http://www.c4learn.com/c-programming/c-tokens-keywords-identifiers/ basic building blocks of C Programming]; hence &#039;&#039;&#039;tk&#039;&#039;&#039; vars frequently represent important structured variables in NARS.&lt;br /&gt;
| LPTOKEN lp&#039;&#039;&#039;tk&#039;&#039;&#039;RhtArg&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;TKT_&#039;&#039;&#039;&lt;br /&gt;
| token type&lt;br /&gt;
| Prefix to typed variable names. Most tokens are simple in that they have type and data only.e,g, TKT_LEFTPAREN and &#039;(&#039;.  Some frequently used tokens are complex in that their data points to other data. Token types are also associated with a &amp;lt;u&amp;gt;Constant type &#039;&#039;&#039;value&#039;&#039;&#039;&amp;lt;/u&amp;gt;, e.g. &#039;&#039;&#039;TKT_&#039;&#039;&#039;VARARRAY = &#039;&#039;&#039;1A&#039;&#039;&#039;(Hex val, 26 dec val). Token types may also represent APL/System Functions - &#039;&#039;&#039;TKT_&#039;&#039;&#039;FCNNAMED (52 hex) = a named function. Full explanation see file &amp;lt;tokens.h&amp;gt;. See also typedef structures &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#TOKEN|TOKEN]]&#039;&#039;&#039;.&lt;br /&gt;
| &#039;&#039;&#039;TKT_&#039;&#039;&#039;VARARRAY - main workhorse token type.  Its tkData is an HGLOBAL (global memory handle) which contains an array which is either simple, nested, or mixed(combination of diff data types, e.g. string int float and or double).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UTF&#039;&#039;&#039;&lt;br /&gt;
| Unicode Transformation Format&lt;br /&gt;
| Variable names, constants, [http://unicode.org/faq/utf_bom.html especially UTF16]; algorithmic mapping for Unicode code numbers (except surrogate code points) to unique byte sequencing (esp. 16-bit = 2-byte sequences). ASCII uses 2^7 bits=128 codes; EBSDIC 2^8=256 codes. Unicode 2-byte uses 2^16=65,536 codes, as currently does NARS, see also System Functions &#039;&#039;&#039;[[System_Function_AV|&amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;AV]]&#039;&#039;&#039; and &#039;&#039;&#039;[[System_Function_UCS|&amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;UCS]]&#039;&#039;&#039;. Both the 32-bit and 64-bit NARS2000.exe&#039;s use 16-bit uncodes; the 32 and 64 bit NARS exe&#039;s refer to numeric data computer representations and calculation precisions. List of defined &#039;&#039;&#039;UTF&#039;&#039;&#039;16_ vars see file &amp;lt;Unicode.h&amp;gt;.&lt;br /&gt;
| &#039;&#039;&#039;UTF&#039;&#039;&#039;16_RHO&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=System_Variable_PP&amp;diff=2790</id>
		<title>System Variable PP</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=System_Variable_PP&amp;diff=2790"/>
		<updated>2015-08-22T01:54:00Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: expanded example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;{quad}PP - Print Precision&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{BoxStart|⎕PP&lt;br /&gt;
| Print Precision}}&lt;br /&gt;
{{BoxEnd|⎕PP←&#039;&amp;lt;i&amp;gt;VALUE&amp;lt;/i&amp;gt;&#039;}}&lt;br /&gt;
&lt;br /&gt;
System Variable &#039;&#039;&#039;⎕PP&#039;&#039;&#039; or &#039;&#039;&#039;Quad PP&#039;&#039;&#039; refers to Print Precision.&lt;br /&gt;
In NARS, the default Print Precision is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕PP&lt;br /&gt;
10&lt;br /&gt;
      1÷3&lt;br /&gt;
0.3333333333   ⍝ 10 significant digits after the decimal point are shown&lt;br /&gt;
      ⍕1÷3&lt;br /&gt;
0.3333333333   ⍝ 10 significant digits after the decimal point are shown, for formatted result&lt;br /&gt;
      ⍴⍕1÷3&lt;br /&gt;
12             ⍝ 10 significant digits after the decimal point, plus 0 and decimal point itself = 12 chars (shape)&lt;br /&gt;
&lt;br /&gt;
      X←1÷3&lt;br /&gt;
      X&lt;br /&gt;
0.3333333333&lt;br /&gt;
      ⎕PP←4    ⍝ print precision changed to 4 digits&lt;br /&gt;
      X&lt;br /&gt;
0.3333&lt;br /&gt;
      X←⍎⍕X    ⍝ X is now formatted(printed) and re-executed into a number (for demonstration purposes only, AVOID in practice!!!)&lt;br /&gt;
      X&lt;br /&gt;
0.3333&lt;br /&gt;
      ⎕PP←10   ⍝ print precision is restored to 10 digits&lt;br /&gt;
      X&lt;br /&gt;
0.3333         ⍝ but X now only has 4 significant digits in it, as a result of ⎕PP reduction, formatting and re-execution into a number.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Although 10 significant digits represent the print precision or displayed precision - actual computer stored formats are quite different.  Historically or customarily, ⎕PP is normally assigned a value of between 1 and 16, although with 64-bit systems, higher print precision values are available.  As an example, pollution is frequently cited in PPM&#039;s or parts per million or say 1 in 1,000,000 so 5-signficant digits in the data plus 7 digits within a million base might mean ⎕PP should be set as 5+7 = 12 significant digits, or greater for higher precision printed reports.  Note that &#039;&#039;&#039;print precision does NOT normally affect stored/digitized numbers, unless&#039;&#039;&#039; the numbers were first formatted/printed, then re-executed into digital floating point numbers as the above example shows.&lt;br /&gt;
&lt;br /&gt;
See also &#039;&#039;&#039;[[System_Function_DR|System Function ⎕DR]]&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
{{System Variables}}&lt;br /&gt;
{{Article footer}}&lt;br /&gt;
{{stub}}&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=System_Variable_PP&amp;diff=2789</id>
		<title>System Variable PP</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=System_Variable_PP&amp;diff=2789"/>
		<updated>2015-08-22T01:40:42Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: added example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;{quad}PP - Print Precision&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{BoxStart|⎕PP&lt;br /&gt;
| Print Precision}}&lt;br /&gt;
{{BoxEnd|⎕PP←&#039;&amp;lt;i&amp;gt;VALUE&amp;lt;/i&amp;gt;&#039;}}&lt;br /&gt;
&lt;br /&gt;
System Variable &#039;&#039;&#039;⎕PP&#039;&#039;&#039; or &#039;&#039;&#039;Quad PP&#039;&#039;&#039; refers to Print Precision.&lt;br /&gt;
In NARS, the default Print Precision is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕PP&lt;br /&gt;
10&lt;br /&gt;
      1÷3&lt;br /&gt;
0.3333333333   ⍝ 10 significant digits after the decimal point are shown&lt;br /&gt;
      ⍕1÷3&lt;br /&gt;
0.3333333333   ⍝ 10 significant digits after the decimal point are shown, for formatted result&lt;br /&gt;
      ⍴⍕1÷3&lt;br /&gt;
12             ⍝ 10 significant digits after the decimal point, plus 0 and decimal point itself = 12 chars (shape)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Although 10 significant digits represent the print precision or displayed precision - actual computer stored formats are quite different.  Historically or customarily, ⎕PP is normally assigned a value of between 1 and 16, although with 64-bit systems, higher print precision values are available.  As an example, pollution is frequently cited in PPM&#039;s or parts per million or say 1 in 1,000,000 so 5-signficant digits in the data plus 7 digits within a million base might mean ⎕PP should be set as 5+7 = 12 significant digits, or greater for higher precision printed reports.  Note that print precision does NOT normally affect stored/digitized numbers, unless the numbers were first formatted/printed, then re-executed into digital floating point numbers.&lt;br /&gt;
&lt;br /&gt;
See also &#039;&#039;&#039;[[System_Function_DR|System Function ⎕DR]]&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
{{System Variables}}&lt;br /&gt;
{{Article footer}}&lt;br /&gt;
{{stub}}&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=System_Variable_PP&amp;diff=2788</id>
		<title>System Variable PP</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=System_Variable_PP&amp;diff=2788"/>
		<updated>2015-08-22T01:32:52Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: wording, description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;{quad}PP - Print Precision&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{BoxStart|⎕PP&lt;br /&gt;
| Print Precision}}&lt;br /&gt;
{{BoxEnd|⎕PP←&#039;&amp;lt;i&amp;gt;VALUE&amp;lt;/i&amp;gt;&#039;}}&lt;br /&gt;
&lt;br /&gt;
System Variable &#039;&#039;&#039;⎕PP&#039;&#039;&#039; or &#039;&#039;&#039;Quad PP&#039;&#039;&#039; refers to Print Precision.&lt;br /&gt;
In NARS, the default Print Precision is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕PP&lt;br /&gt;
10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Although 10 significant digits represent the print precision or displayed precision - actual computer stored formats are quite different.  Historically or customarily, ⎕PP is normally assigned a value of between 1 and 16, although with 64-bit systems, higher print precision values are available.  As an example, pollution is frequently cited in PPM&#039;s or parts per million or say 1 in 1,000,000 so 5-signficant digits in the data plus 7 digits within a million base might mean ⎕PP should be set as 5+7 = 12 significant digits, or greater for higher precision printed reports.  Note that print precision does NOT normally affect stored/digitized numbers, unless the numbers were first formatted/printed, then re-executed into digital floating point numbers.&lt;br /&gt;
&lt;br /&gt;
See also &#039;&#039;&#039;[[System_Function_DR|System Function ⎕DR]]&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
{{System Variables}}&lt;br /&gt;
{{Article footer}}&lt;br /&gt;
{{stub}}&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=System_Function_DR&amp;diff=2787</id>
		<title>System Function DR</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=System_Function_DR&amp;diff=2787"/>
		<updated>2015-08-22T01:11:00Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Dyadic Function */ expansion, correction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This function is available in both &#039;&#039;monadic&#039;&#039; and &#039;&#039;dyadic&#039;&#039; forms.&lt;br /&gt;
==Monadic Function==&lt;br /&gt;
{{BoxStart|&amp;lt;apll&amp;gt;Z←⎕DR R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|returns the data representation of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
{{BoxLine |&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is an arbitrary array.}}&lt;br /&gt;
{{BoxEnd  |&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is a numeric scalar which represents the datatype of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The datatypes are encoded with a unique index in the low-order two digits, and (where appropriate) the bits per element in the higher-order digits:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;110&amp;lt;/apll&amp;gt;:  Boolean, one bit per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;1611&amp;lt;/apll&amp;gt;:  Character, 16 bits per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;6412&amp;lt;/apll&amp;gt;:  Integer, 64 bits per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;6413&amp;lt;/apll&amp;gt;:  Floating Point, 64 bits per element (double precision)&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;14&amp;lt;/apll&amp;gt;:  Rational, 16 bytes plus two 4- or 8-byte pointers plus size of limbs per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;15&amp;lt;/apll&amp;gt;:  Variable-precision Floating Point, 12 bytes plus one 4- or 8-byte pointer plus size of limbs per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;19&amp;lt;/apll&amp;gt;:  Arithmetic Progression Array, 64 bits each for the offset and multiplier&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;20&amp;lt;/apll&amp;gt;:  Heterogeneous, one 4- or 8-byte pointer per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;21&amp;lt;/apll&amp;gt;:  Nested, one 4- or 8-byte pointer per element&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR 1 0 1&amp;lt;br /&amp;gt;110&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR ⌈/⍬&amp;lt;br /&amp;gt;6413&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR 2 64⍴1&amp;lt;/apll&amp;gt; &amp;amp;mdash; Note this is really an APA, not Boolean&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;19&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR 2 64⍴1 1&amp;lt;/apll&amp;gt; &amp;amp;mdash; This one is Boolean because Reshape produces APAs for integer singleton right arguments only&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;110&amp;lt;br /&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dyadic Function==&lt;br /&gt;
{{BoxStart|&amp;lt;apll&amp;gt;Z←L ⎕DR R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|converts &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; to the datatype indicated by &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
{{BoxLine|&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is an arbitrary array.}}&lt;br /&gt;
{{BoxLine|&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; is an integer scalar or one-element vector datatype (see the table above), or a special value (see below).}}&lt;br /&gt;
{{BoxEnd|&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; where each of the values are converted to the datatype indicated by &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
Returned value &amp;lt;big&amp;gt;&#039;&#039;&#039;Z&#039;&#039;&#039;&amp;lt;/big&amp;gt; may alternatively be: numeric scalar, vector of numbers, or a character string - depending on what the value of left argument &amp;lt;big&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/big&amp;gt; was.&amp;lt;br /&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If the conversion is from a narrower datatype to a wider datatype, there must be exactly enough columns in the right argument to match a multiple of the size of the wider datatype.  For example, when converting from character (16-bit) to integer (64-bit), the last column of the right argument must be a multiple of 4 (= 64/16); otherwise, a &amp;lt;apll&amp;gt;LENGTH ERROR&amp;lt;/apll&amp;gt; is signalled.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6412 ⎕DR &#039;NARS2000&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; Eight 16-bit characters (=128 bits) converts to &amp;lt;u&amp;gt;two 64-bit integers&amp;lt;/u&amp;gt; (in both NARS2000 32-bit AND 64-bit exe&#039;s since &amp;lt;big&amp;gt;L=6412&amp;lt;/big&amp;gt;):&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
23362775258562638 13511005043687474&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If the conversion is from a wider datatype to a narrower datatype, the number of values in the result is a multiple of the ratio of the wider datatype to the narrower datatype.  For example, when converting from integer (64-bit) to character (16-bit), the last column in the result is the product of last column of the right argument and 4 (= 64/16).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example(&#039;&#039;&#039;inverse&#039;&#039;&#039; of the example just above),&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⍴⎕←1611 ⎕DR 23362775258562638 13511005043687474&amp;lt;br /&amp;gt;&lt;br /&gt;
NARS2000&amp;lt;br /&amp;gt;&lt;br /&gt;
8&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Keep in mind &#039;&#039;&#039;&amp;lt;u&amp;gt;how&amp;lt;/u&amp;gt; [[APA|Arithmetic Progression Arrays]]&#039;&#039;&#039; are &amp;lt;u&amp;gt;created and represented&amp;lt;/u&amp;gt;; they can fool both the casual programmer as well as an experienced coder.  For example, one might try the following to convert from Boolean to integer:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6412 ⎕DR 2 64⍴1 &amp;amp;nbsp; &amp;amp;nbsp; ⍝ APA created&amp;lt;br /&amp;gt;&lt;br /&gt;
1 0 2 64&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;However, this doesn&#039;t produce the expected result because this particular right argument is an &amp;lt;big&amp;gt;APA&amp;lt;/big&amp;gt;, and &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; a simple Boolean vector of 1&#039;s.  That is, under certain circumstances, the reshape primitive creates an APA.  In this case, the APA is an array with an offset of &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;, a multiplier of &amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt; and a shape of &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; rows and &amp;lt;apll&amp;gt;64&amp;lt;/apll&amp;gt; cols.  The usefulness of APA&#039;s in reducing data storage and processing times outweighs their sometimes added code complexity or additional insight, which may be required.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;On the other hand, this expression:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6412 ⎕DR 2 64⍴1 1 &amp;amp;nbsp; ⍝ contrast to prior example - Boolean vec created here, NOT an APA&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;¯1&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;¯1&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;produces the expected result because the right argument is &amp;quot;right upon moment of vector &#039;&#039;&#039;1 1&#039;&#039;&#039; creation&amp;quot; - Boolean.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Special Values===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;There are several special values you may use as a left argument to &amp;lt;apll&amp;gt;⎕DR&amp;lt;/apll&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;The value &#039;&#039;&#039;&amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt;&#039;&#039;&#039; displays the datatype of the right argument as a text &#039;&#039;&#039;string&#039;&#039;&#039; so you don&#039;t need to remember the datatype numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕DR &#039;a&#039;&lt;br /&gt;
1611&lt;br /&gt;
      ⍴⎕DR &#039;a&#039;   ⍝ the shape of a scalar is null&lt;br /&gt;
&lt;br /&gt;
      ⍴⍴⎕DR &#039;a&#039;&lt;br /&gt;
0                ⍝ the shape of the shape of a scalar is always zero; monadic ⎕DR &#039;a&#039; results in scalar number Z=1611&lt;br /&gt;
      0 ⎕DR &#039;a&#039;&lt;br /&gt;
Character (1611):  16 bits per element     ⍝ string result returned where left arg of ⎕DR was zero&lt;br /&gt;
      ⍴0 ⎕DR &#039;a&#039;&lt;br /&gt;
38              ⍝ the shape of the data returned is 38; dyadic 0 ⎕DR &#039;a&#039; results in a character array, a string of length 38&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      0 ⎕DR ⍳12&lt;br /&gt;
Arithmetic Progression Array (19):  64 bit offset + 64 bit multiplier -- PV1       ⍝ 64-bit signatures re integer numeric progression&lt;br /&gt;
      ⍴0 ⎕DR ⍳12&lt;br /&gt;
76              ⍝ again dyadic ⎕DR results in a string, this time of length 76&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Note in the above that iota-12 in System Function call &#039;&#039;&#039;0 ⎕DR ⍳12&#039;&#039;&#039; - runs similarly using both &#039;&#039;&#039;64-bit AND 32-bit NARS versions&#039;&#039;&#039;, hence the 64-bit offset and 64-bit multiplier.  This is because integer APAs are processed using 64-bit formats. Again, if ever there is any doubt or a need to precisely determine formats, use ⎕DR with its correct syntax, arguments.&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Many times in programming - for debugging, data scrutiny or other purposes - it is very important to know &amp;lt;u&amp;gt;exactly how the data is represented by the program&amp;lt;/u&amp;gt;. ⎕DR or Data Representation is a feature designed to allow close scrutiny of how data is stored in memory and operated on in NARS.&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Some arrays have properties that may be displayed by this function:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;PV0&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;This array is a Permutation Vector, origin-0&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;PV1&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array is a Permutation Vector, origin-1&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;All2s&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array consists of all &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt;s&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;FPC&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array is a VFP and all entries are represented in Precision &amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;FPC-Mixed&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array is a VFP whose entries are represented in two or more different precisions&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;The value &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; converts between hex-character and floating point computer formats.  This argument makes it very useful to view representations of floating point numbers - in order to better understand numeric precisions, program storage formats, debug multi-precision floating-point math routines(by NARS developers) or examine perceived floating point issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕PP←99&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR 1.1&amp;lt;br /&amp;gt;&lt;br /&gt;
3FF199999999999A &amp;amp;nbsp; &amp;amp;nbsp;⍝ note the hexadecimal char representation of 1.1 is shown at left&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⍴1 ⎕DR 1.1&amp;lt;br /&amp;gt;&lt;br /&gt;
16 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;⍝ length of floating pt num 1.1 hex repr = 16 hex-chars = both 64-bit and 32-bit NARS&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;3fd&#039;,13⍴&#039;5&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
0.3333333333333333&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR ¯∞ ∞&amp;lt;br /&amp;gt;&lt;br /&gt;
FFF0000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
7FF0000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;7fe&#039;,13⍴&#039;f&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest positive number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
1.7976931348623157E308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;001&#039;,13⍴&#039;0&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest positive number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
2.2250738585072014E¯308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;801&#039;,13⍴&#039;0&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest negative number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
¯2.2250738585072014E¯308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;ffe&#039;,13⍴&#039;f&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest negative number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
¯1.7976931348623157E308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;The value &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; converts between character and 64-bit integer.  This argument makes it easy to see the representation of integers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR ¯1&amp;lt;br /&amp;gt;&lt;br /&gt;
FFFFFFFFFFFFFFFF&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR &#039;7&#039;,15⍴&#039;f&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest positive integer&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
9223372036854775807&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR &#039;8&#039;,15⍴&#039;0&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest negative integer&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
¯9223372036854775808&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR 9223372036854775807 ¯9223372036854775808&amp;lt;br /&amp;gt;&lt;br /&gt;
7FFFFFFFFFFFFFFF&amp;lt;br /&amp;gt;&lt;br /&gt;
8000000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A Word of Caution===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This system function allows you to create special numbers we don&#039;t support in that no other primitive generates these numbers and the behavior of all other primitives on these numbers is undefined.  Examples of such special numbers include &#039;&#039;&#039;Quiet NaNs&#039;&#039;&#039;, &#039;&#039;&#039;Signaling NaNs&#039;&#039;&#039;, &#039;&#039;&#039;Negative Zero&#039;&#039;&#039;, and &#039;&#039;&#039;Denormals&#039;&#039;&#039;.  If the system doesn&#039;t behave as you expect when using these special numbers, don&#039;t be surprised.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕CT←0 ⋄ ⎕PP←99&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6413 ⎕DR ¯64↑1&amp;lt;br /&amp;gt;&lt;br /&gt;
¯0&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;QNaN←6413 ⎕DR ¯64↑13⍴1&amp;lt;/apll&amp;gt; &amp;amp;mdash; A Quiet NaN (Not a Number)&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR QNaN&amp;lt;br /&amp;gt;&lt;br /&gt;
FFF8000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;QNaN=QNaN&amp;lt;br /&amp;gt;&lt;br /&gt;
0&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;000fffffffffffff&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest positive denormal&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
2.225073858507201E¯308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;0000000000000001&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest positive denormal&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
5E¯324&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
See also &#039;&#039;&#039;[[System_Variable_CT|System Variable ⎕CT]]&#039;&#039;&#039; and &#039;&#039;&#039;[[System_Variable_PP|System Variable ⎕PP]]&#039;&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
{{SFDM|DR}}&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=C_Source_Code_Conventions_and_Abbreviations_Dictionary&amp;diff=2781</id>
		<title>C Source Code Conventions and Abbreviations Dictionary</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=C_Source_Code_Conventions_and_Abbreviations_Dictionary&amp;diff=2781"/>
		<updated>2015-08-21T17:17:10Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Abbreviations Dictionary */  added APA&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;NARS C &amp;lt;u&amp;gt;Source Code&amp;lt;/u&amp;gt; Conventions and Abbreviations Dictionary:&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Conventions==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 50%&amp;quot;&lt;br /&gt;
! Convention&lt;br /&gt;
! Syntax&lt;br /&gt;
! Description/Where Used&lt;br /&gt;
! Sample Use&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PrimFn&#039;&#039;&#039;&lt;br /&gt;
| Prefix &lt;br /&gt;
| name prefix to all Primary APL functions&lt;br /&gt;
| &#039;&#039;&#039;PrimFn&#039;&#039;&#039;Rho_EM_YY&lt;br /&gt;
| Quickly identify such names&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SysFn&#039;&#039;&#039;&lt;br /&gt;
| Prefix&lt;br /&gt;
| name prefix to all Quad type System Functions&lt;br /&gt;
| &#039;&#039;&#039;SysFn&#039;&#039;&#039;WA_EM_YY&lt;br /&gt;
| Quickly identify such names&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;_EM_YY&#039;&#039;&#039;&lt;br /&gt;
| Suffix&lt;br /&gt;
| name suffix to all Primary APL functions AND Quad System Functions, including monadic and dyadic calls&lt;br /&gt;
| SysFnTS&#039;&#039;&#039;_EM_YY&#039;&#039;&#039;&lt;br /&gt;
| Quickly identify such names, referencing&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Abbreviations Dictionary==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 70%&amp;quot;&lt;br /&gt;
! Abbrev&lt;br /&gt;
! Meaning&lt;br /&gt;
! Definition Location, Purpose, Cross Ref&#039;s&lt;br /&gt;
! Sample Source Code Usage&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;APA&#039;&#039;&#039;&lt;br /&gt;
| Arithmetic Progression Array&lt;br /&gt;
| C code suffix to variable type, sometimes variable names. for example, ⍳6 or iota-6 is an &#039;&#039;&#039;arithmetic progression array&#039;&#039;&#039; of integers. Definition for ARRAY_&#039;&#039;&#039;APA&#039;&#039;&#039; found in file &amp;lt;datatype.h&amp;gt;&lt;br /&gt;
| ARRAY_&#039;&#039;&#039;APA&#039;&#039;&#039; is a variable type. Ref. wiki &#039;&#039;&#039;[[APA|documentation page APA]]&#039;&#039;&#039;. For closely examining &#039;&#039;&#039;APA &#039;&#039;&#039; datatypes, see also &#039;&#039;&#039;[[System_Function_DR|System Function ⎕DR]]&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;lp&#039;&#039;&#039;&lt;br /&gt;
| long pointer&lt;br /&gt;
| Usually found as a prefix to variable names.  NARS makes frequent use of pointers to speed up processing times, to make NARS2000.exe more efficient.&lt;br /&gt;
| &#039;&#039;&#039;lp&#039;&#039;&#039;tkRhtArg (var name; long ptr to token var structure of a right hand argument for a function call)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;NELM&#039;&#039;&#039;&lt;br /&gt;
| Number of Elements&lt;br /&gt;
| Usually embedded within variable names.  Conceptually like &#039;&#039;&#039;[[Rho|Rho or &amp;lt;apll&amp;gt;{rho}&amp;lt;/apll&amp;gt;]]&#039;&#039;&#039; of a vector.&lt;br /&gt;
| APL&#039;&#039;&#039;NELM&#039;&#039;&#039; apl&#039;&#039;&#039;NELM&#039;&#039;&#039;Rht; // VarType VarName; Right arg NELM for variable type(APLNELM) and variable named aplNELMRht&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PerTab&#039;&#039;&#039;&lt;br /&gt;
| per tab, esp. per APL workspace tab&lt;br /&gt;
| Embedded in var names.  Detailed explanation of PerTab found in C source header file &amp;lt;pertab.h&amp;gt;.  &#039;&#039;&#039;NARS supports multiple simultaneously open and running workspaces.&#039;&#039;&#039;  Each workspace is displayed as a separate &#039;&#039;&#039;Tab&#039;&#039;&#039;, much like folder tabs.  All variables in all workspace are distinctly maintained, with each PerTab.&lt;br /&gt;
| LP&#039;&#039;&#039;PERTAB&#039;&#039;&#039;DATA lpMemPTD; where LP&#039;&#039;&#039;PERTAB&#039;&#039;&#039;DATA is the variable type and lpMemPTD is a pointer to PerTabData global memory&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PTD&#039;&#039;&#039;&lt;br /&gt;
| per tab of data&lt;br /&gt;
| Embedded in var names.  Each NARS workspace is kept separate and distinct in its own PTD.&lt;br /&gt;
| lpMem&#039;&#039;&#039;PTD&#039;&#039;&#039; structured var name, in this case a ptr to PerTabData global memory&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rank&#039;&#039;&#039;&lt;br /&gt;
| Rank&lt;br /&gt;
| Rank: Scalars=0, Vectors=1, Matrices=2..N.  Like {rho}{rho} of an APL variable or contained data structure, see shape of the shape &#039;&#039;&#039;[[Rho|RhoRho or {rho}{rho}]]&#039;&#039;&#039;.&lt;br /&gt;
| APL&#039;&#039;&#039;RANK&#039;&#039;&#039; apl&#039;&#039;&#039;Rank&#039;&#039;&#039;Lft // Left arg rank (variable type, variable name)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SIS&#039;&#039;&#039;&lt;br /&gt;
| State Indicator Stack&lt;br /&gt;
| Frequently embedded within variable and function names. Detailed explanation of SIS found in C source header file &amp;lt;sis.h&amp;gt;  See also APL&#039;s &#039;&#039;&#039;[[System_Command_SI|System Command )SI]]&#039;&#039;&#039;.&lt;br /&gt;
| lpMemPTD-&amp;gt;lp&#039;&#039;&#039;SIS&#039;&#039;&#039;Cur-&amp;gt;ResetFlag; (var name) AND Fill&#039;&#039;&#039;SIS&#039;&#039;&#039;Nxt (fcn name)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;tk&#039;&#039;&#039;&lt;br /&gt;
| token&lt;br /&gt;
| Frequently found embedded in structured variable names. Tokens are [http://www.c4learn.com/c-programming/c-tokens-keywords-identifiers/ basic building blocks of C Programming]; hence &#039;&#039;&#039;tk&#039;&#039;&#039; vars frequently represent important structured variables in NARS.&lt;br /&gt;
| LPTOKEN lp&#039;&#039;&#039;tk&#039;&#039;&#039;RhtArg&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;TKT_&#039;&#039;&#039;&lt;br /&gt;
| token type&lt;br /&gt;
| Prefix to typed variable names. Most tokens are simple in that they have type and data only.e,g, TKT_LEFTPAREN and &#039;(&#039;.  Some frequently used tokens are complex in that their data points to other data. Token types are also associated with a &amp;lt;u&amp;gt;Constant type &#039;&#039;&#039;value&#039;&#039;&#039;&amp;lt;/u&amp;gt;, e.g. &#039;&#039;&#039;TKT_&#039;&#039;&#039;VARARRAY = &#039;&#039;&#039;1A&#039;&#039;&#039;(Hex val, 26 dec val). Token types may also represent APL/System Functions - &#039;&#039;&#039;TKT_&#039;&#039;&#039;FCNNAMED (52 hex) = a named function. Full explanation see file &amp;lt;tokens.h&amp;gt;. See also typedef structures &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#TOKEN|TOKEN]]&#039;&#039;&#039;.&lt;br /&gt;
| &#039;&#039;&#039;TKT_&#039;&#039;&#039;VARARRAY - main workhorse token type.  Its tkData is an HGLOBAL (global memory handle) which contains an array which is either simple, nested, or mixed(combination of diff data types, e.g. string int float and or double).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UTF&#039;&#039;&#039;&lt;br /&gt;
| Unicode Transformation Format&lt;br /&gt;
| Variable names, constants, [http://unicode.org/faq/utf_bom.html especially UTF16]; algorithmic mapping for Unicode code numbers (except surrogate code points) to unique byte sequencing (esp. 16-bit = 2-byte sequences). ASCII uses 2^7 bits=128 codes; EBSDIC 2^8=256 codes. Unicode 2-byte uses 2^16=65,536 codes, as currently does NARS, see also System Functions &#039;&#039;&#039;[[System_Function_AV|&amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;AV]]&#039;&#039;&#039; and &#039;&#039;&#039;[[System_Function_UCS|&amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;UCS]]&#039;&#039;&#039;. Both the 32-bit and 64-bit NARS2000.exe&#039;s use 16-bit uncodes; the 32 and 64 bit NARS exe&#039;s refer to numeric data computer representations and calculation precisions. List of defined &#039;&#039;&#039;UTF&#039;&#039;&#039;16_ vars see file &amp;lt;Unicode.h&amp;gt;.&lt;br /&gt;
| &#039;&#039;&#039;UTF&#039;&#039;&#039;16_RHO&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=System_Function_DR&amp;diff=2780</id>
		<title>System Function DR</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=System_Function_DR&amp;diff=2780"/>
		<updated>2015-08-21T17:16:29Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Dyadic Function */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This function is available in both &#039;&#039;monadic&#039;&#039; and &#039;&#039;dyadic&#039;&#039; forms.&lt;br /&gt;
==Monadic Function==&lt;br /&gt;
{{BoxStart|&amp;lt;apll&amp;gt;Z←⎕DR R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|returns the data representation of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
{{BoxLine |&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is an arbitrary array.}}&lt;br /&gt;
{{BoxEnd  |&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is a numeric scalar which represents the datatype of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The datatypes are encoded with a unique index in the low-order two digits, and (where appropriate) the bits per element in the higher-order digits:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;110&amp;lt;/apll&amp;gt;:  Boolean, one bit per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;1611&amp;lt;/apll&amp;gt;:  Character, 16 bits per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;6412&amp;lt;/apll&amp;gt;:  Integer, 64 bits per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;6413&amp;lt;/apll&amp;gt;:  Floating Point, 64 bits per element (double precision)&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;14&amp;lt;/apll&amp;gt;:  Rational, 16 bytes plus two 4- or 8-byte pointers plus size of limbs per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;15&amp;lt;/apll&amp;gt;:  Variable-precision Floating Point, 12 bytes plus one 4- or 8-byte pointer plus size of limbs per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;19&amp;lt;/apll&amp;gt;:  Arithmetic Progression Array, 64 bits each for the offset and multiplier&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;20&amp;lt;/apll&amp;gt;:  Heterogeneous, one 4- or 8-byte pointer per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;21&amp;lt;/apll&amp;gt;:  Nested, one 4- or 8-byte pointer per element&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR 1 0 1&amp;lt;br /&amp;gt;110&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR ⌈/⍬&amp;lt;br /&amp;gt;6413&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR 2 64⍴1&amp;lt;/apll&amp;gt; &amp;amp;mdash; Note this is really an APA, not Boolean&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;19&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR 2 64⍴1 1&amp;lt;/apll&amp;gt; &amp;amp;mdash; This one is Boolean because Reshape produces APAs for integer singleton right arguments only&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;110&amp;lt;br /&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dyadic Function==&lt;br /&gt;
{{BoxStart|&amp;lt;apll&amp;gt;Z←L ⎕DR R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|converts &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; to the datatype indicated by &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
{{BoxLine|&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is an arbitrary array.}}&lt;br /&gt;
{{BoxLine|&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; is an integer scalar or one-element vector datatype (see the table above), or a special value (see below).}}&lt;br /&gt;
{{BoxEnd|&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; where each of the values are converted to the datatype indicated by &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
Returned value &amp;lt;big&amp;gt;&#039;&#039;&#039;Z&#039;&#039;&#039;&amp;lt;/big&amp;gt; may alternatively be: numeric scalar, vector of numbers, or a character string - depending on what the value of left argument &amp;lt;big&amp;gt;&#039;&#039;&#039;L&#039;&#039;&#039;&amp;lt;/big&amp;gt; was.&amp;lt;br /&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If the conversion is from a narrower datatype to a wider datatype, there must be exactly enough columns in the right argument to match a multiple of the size of the wider datatype.  For example, when converting from character (16-bit) to integer (64-bit), the last column of the right argument must be a multiple of 4 (= 64/16); otherwise, a &amp;lt;apll&amp;gt;LENGTH ERROR&amp;lt;/apll&amp;gt; is signalled.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6412 ⎕DR &#039;NARS2000&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; Eight 16-bit characters (=128 bits) converts to &amp;lt;u&amp;gt;two 64-bit integers&amp;lt;/u&amp;gt;:&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
23362775258562638 13511005043687474&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If the conversion is from a wider datatype to a narrower datatype, the number of values in the result is a multiple of the ratio of the wider datatype to the narrower datatype.  For example, when converting from integer (64-bit) to character (16-bit), the last column in the result is the product of last column of the right argument and 4 (= 64/16).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example(&#039;&#039;&#039;inverse&#039;&#039;&#039; of the example just above),&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⍴⎕←1611 ⎕DR 23362775258562638 13511005043687474&amp;lt;br /&amp;gt;&lt;br /&gt;
NARS2000&amp;lt;br /&amp;gt;&lt;br /&gt;
8&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Keep in mind &#039;&#039;&#039;&amp;lt;u&amp;gt;how&amp;lt;/u&amp;gt; [[APA|Arithmetic Progression Arrays]]&#039;&#039;&#039; are &amp;lt;u&amp;gt;created and represented&amp;lt;/u&amp;gt;; they can fool both the casual programmer as well as an experienced coder.  For example, one might try the following to convert from Boolean to integer:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6412 ⎕DR 2 64⍴1 &amp;amp;nbsp; &amp;amp;nbsp; ⍝ APA created&amp;lt;br /&amp;gt;&lt;br /&gt;
1 0 2 64&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;However, this doesn&#039;t produce the expected result because this particular right argument is an &amp;lt;big&amp;gt;APA&amp;lt;/big&amp;gt;, and &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; a simple Boolean vector of 1&#039;s.  That is, under certain circumstances, the reshape primitive creates an APA.  In this case, the APA is an array with an offset of &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;, a multiplier of &amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt; and a shape of &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; rows and &amp;lt;apll&amp;gt;64&amp;lt;/apll&amp;gt; cols.  The usefulness of APS&#039;s in reducing data storage and processing times outweighs their sometimes added code complexity or additional insight, which may be required.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;On the other hand, this expression:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6412 ⎕DR 2 64⍴1 1 &amp;amp;nbsp; ⍝ contrast to prior example - Boolean vec created here, NOT an APA&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;¯1&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;¯1&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;produces the expected result because the right argument is &amp;quot;right upon moment of vector &#039;&#039;&#039;1 1&#039;&#039;&#039; creation&amp;quot; - Boolean.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Special Values===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;There are several special values you may use as a left argument to &amp;lt;apll&amp;gt;⎕DR&amp;lt;/apll&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;The value &#039;&#039;&#039;&amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt;&#039;&#039;&#039; displays the datatype of the right argument as a text &#039;&#039;&#039;string&#039;&#039;&#039; so you don&#039;t need to remember the datatype numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕DR &#039;a&#039;&lt;br /&gt;
1611&lt;br /&gt;
      ⍴⎕DR &#039;a&#039;   ⍝ the shape of a scalar is null&lt;br /&gt;
&lt;br /&gt;
      ⍴⍴⎕DR &#039;a&#039;&lt;br /&gt;
0                ⍝ the shape of the shape of a scalar is always zero; monadic ⎕DR &#039;a&#039; results in scalar number Z=1611&lt;br /&gt;
      0 ⎕DR &#039;a&#039;&lt;br /&gt;
Character (1611):  16 bits per element     ⍝ string result returned where left arg of ⎕DR was zero&lt;br /&gt;
      ⍴0 ⎕DR &#039;a&#039;&lt;br /&gt;
38              ⍝ the shape of the data returned is 38; dyadic 0 ⎕DR &#039;a&#039; results in a character array, a string of length 38&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      0 ⎕DR ⍳12&lt;br /&gt;
Arithmetic Progression Array (19):  64 bit offset + 64 bit multiplier -- PV1       ⍝ 64-bit signatures re integer numeric progression&lt;br /&gt;
      ⍴0 ⎕DR ⍳12&lt;br /&gt;
76              ⍝ again dyadic ⎕DR results in a string, this time of length 76&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note in the above that iota-12 in System Function call &#039;&#039;&#039;0 ⎕DR ⍳12&#039;&#039;&#039; - was run using the &#039;&#039;&#039;64-bit NARS version&#039;&#039;&#039;, hence the 64-bit offset and 64-bit multiplier.  Had it been run in &#039;&#039;&#039;32-bit NARS&#039;&#039;&#039;, it would have returned 32-bit signatures.&lt;br /&gt;
&lt;br /&gt;
Many times in programming for debugging, data scrutiny or other purposes: It is very important to know &amp;lt;u&amp;gt;exactly how the data is represented by the program&amp;lt;/u&amp;gt;. ⎕DR or Data Representation is a feature designed to allow close scrutiny of how data is stored in memory and operated on in NARS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Some arrays have properties that may be displayed by this function:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;PV0&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;This array is a Permutation Vector, origin-0&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;PV1&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array is a Permutation Vector, origin-1&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;All2s&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array consists of all &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt;s&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;FPC&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array is a VFP and all entries are represented in Precision &amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;FPC-Mixed&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array is a VFP whose entries are represented in two or more different precisions&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;The value &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; converts between hex-character and floating point computer formats.  This argument makes it very useful to view representations of floating point numbers - in order to better understand numeric precisions, program storage formats, debug multi-precision floating-point math routines(by NARS developers) or examine perceived floating point issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕PP←99&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR 1.1&amp;lt;br /&amp;gt;&lt;br /&gt;
3FF199999999999A &amp;amp;nbsp; &amp;amp;nbsp;⍝ note the hexadecimal char representation of 1.1 is shown at left&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⍴1 ⎕DR 1.1&amp;lt;br /&amp;gt;&lt;br /&gt;
16 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;⍝ length of floating pt num 1.1 hex repr = 16 hex-chars = 64-bit-NARS&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;3fd&#039;,13⍴&#039;5&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
0.3333333333333333&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR ¯∞ ∞&amp;lt;br /&amp;gt;&lt;br /&gt;
FFF0000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
7FF0000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;7fe&#039;,13⍴&#039;f&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest positive number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
1.7976931348623157E308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;001&#039;,13⍴&#039;0&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest positive number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
2.2250738585072014E¯308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;801&#039;,13⍴&#039;0&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest negative number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
¯2.2250738585072014E¯308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;ffe&#039;,13⍴&#039;f&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest negative number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
¯1.7976931348623157E308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;The value &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; converts between character and 64-bit integer.  This argument makes it easy to see the representation of integers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR ¯1&amp;lt;br /&amp;gt;&lt;br /&gt;
FFFFFFFFFFFFFFFF&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR &#039;7&#039;,15⍴&#039;f&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest positive integer&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
9223372036854775807&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR &#039;8&#039;,15⍴&#039;0&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest negative integer&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
¯9223372036854775808&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR 9223372036854775807 ¯9223372036854775808&amp;lt;br /&amp;gt;&lt;br /&gt;
7FFFFFFFFFFFFFFF&amp;lt;br /&amp;gt;&lt;br /&gt;
8000000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A Word of Caution===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This system function allows you to create special numbers we don&#039;t support in that no other primitive generates these numbers and the behavior of all other primitives on these numbers is undefined.  Examples of such special numbers include &#039;&#039;&#039;Quiet NaNs&#039;&#039;&#039;, &#039;&#039;&#039;Signaling NaNs&#039;&#039;&#039;, &#039;&#039;&#039;Negative Zero&#039;&#039;&#039;, and &#039;&#039;&#039;Denormals&#039;&#039;&#039;.  If the system doesn&#039;t behave as you expect when using these special numbers, don&#039;t be surprised.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕CT←0 ⋄ ⎕PP←99&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6413 ⎕DR ¯64↑1&amp;lt;br /&amp;gt;&lt;br /&gt;
¯0&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;QNaN←6413 ⎕DR ¯64↑13⍴1&amp;lt;/apll&amp;gt; &amp;amp;mdash; A Quiet NaN (Not a Number)&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR QNaN&amp;lt;br /&amp;gt;&lt;br /&gt;
FFF8000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;QNaN=QNaN&amp;lt;br /&amp;gt;&lt;br /&gt;
0&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;000fffffffffffff&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest positive denormal&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
2.225073858507201E¯308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;0000000000000001&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest positive denormal&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
5E¯324&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{SFDM|DR}}&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=System_Function_DR&amp;diff=2779</id>
		<title>System Function DR</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=System_Function_DR&amp;diff=2779"/>
		<updated>2015-08-21T16:49:10Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Dyadic Function */  wording&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This function is available in both &#039;&#039;monadic&#039;&#039; and &#039;&#039;dyadic&#039;&#039; forms.&lt;br /&gt;
==Monadic Function==&lt;br /&gt;
{{BoxStart|&amp;lt;apll&amp;gt;Z←⎕DR R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|returns the data representation of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
{{BoxLine |&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is an arbitrary array.}}&lt;br /&gt;
{{BoxEnd  |&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is a numeric scalar which represents the datatype of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The datatypes are encoded with a unique index in the low-order two digits, and (where appropriate) the bits per element in the higher-order digits:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;110&amp;lt;/apll&amp;gt;:  Boolean, one bit per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;1611&amp;lt;/apll&amp;gt;:  Character, 16 bits per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;6412&amp;lt;/apll&amp;gt;:  Integer, 64 bits per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;6413&amp;lt;/apll&amp;gt;:  Floating Point, 64 bits per element (double precision)&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;14&amp;lt;/apll&amp;gt;:  Rational, 16 bytes plus two 4- or 8-byte pointers plus size of limbs per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;15&amp;lt;/apll&amp;gt;:  Variable-precision Floating Point, 12 bytes plus one 4- or 8-byte pointer plus size of limbs per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;19&amp;lt;/apll&amp;gt;:  Arithmetic Progression Array, 64 bits each for the offset and multiplier&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;20&amp;lt;/apll&amp;gt;:  Heterogeneous, one 4- or 8-byte pointer per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;21&amp;lt;/apll&amp;gt;:  Nested, one 4- or 8-byte pointer per element&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR 1 0 1&amp;lt;br /&amp;gt;110&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR ⌈/⍬&amp;lt;br /&amp;gt;6413&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR 2 64⍴1&amp;lt;/apll&amp;gt; &amp;amp;mdash; Note this is really an APA, not Boolean&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;19&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR 2 64⍴1 1&amp;lt;/apll&amp;gt; &amp;amp;mdash; This one is Boolean because Reshape produces APAs for integer singleton right arguments only&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;110&amp;lt;br /&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dyadic Function==&lt;br /&gt;
{{BoxStart|&amp;lt;apll&amp;gt;Z←L ⎕DR R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|converts &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; to the datatype indicated by &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
{{BoxLine|&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is an arbitrary array.}}&lt;br /&gt;
{{BoxLine|&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; is an integer scalar or one-element vector datatype (see the table above), or a special value (see below).}}&lt;br /&gt;
{{BoxEnd|&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; where each of the values are converted to the datatype indicated by &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
Returned value &#039;&#039;&#039;Z&#039;&#039;&#039; may alternatively be: numeric scalar, vector of numbers, or a character string - depending on what the value of the laft argument(L) was.&amp;lt;br /&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If the conversion is from a narrower datatype to a wider datatype, there must be exactly enough columns in the right argument to match a multiple of the size of the wider datatype.  For example, when converting from character (16-bit) to integer (64-bit), the last column of the right argument must be a multiple of 4 (= 64/16); otherwise, a &amp;lt;apll&amp;gt;LENGTH ERROR&amp;lt;/apll&amp;gt; is signalled.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6412 ⎕DR &#039;NARS2000&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; Eight 16-bit characters (=128 bits) converts to &amp;lt;u&amp;gt;two 64-bit integers&amp;lt;/u&amp;gt;:&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
23362775258562638 13511005043687474&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If the conversion is from a wider datatype to a narrower datatype, the number of values in the result is a multiple of the ratio of the wider datatype to the narrower datatype.  For example, when converting from integer (64-bit) to character (16-bit), the last column in the result is the product of last column of the right argument and 4 (= 64/16).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example(&#039;&#039;&#039;inverse&#039;&#039;&#039; of the example just above),&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⍴⎕←1611 ⎕DR 23362775258562638 13511005043687474&amp;lt;br /&amp;gt;&lt;br /&gt;
NARS2000&amp;lt;br /&amp;gt;&lt;br /&gt;
8&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Keep in mind how [[APA|Arithmetic Progression Arrays]] are created and represented as they can fool you.  For example, you might try the following to convert from Boolean to integer:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6412 ⎕DR 2 64⍴1&amp;lt;br /&amp;gt;&lt;br /&gt;
1 0 2 64&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;However, this doesn&#039;t produce the expected result because this particular right argument is an APA, not a Boolean vector.  That is, under certain circumstances, the reshape primitive creates an APA.  In this case, the APA is an array with an offset of &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;, a multiplier of &amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt; and a shape of &amp;lt;apll&amp;gt;2 64&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;On the other hand, this expression&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6412 ⎕DR 2 64⍴1 1&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;¯1&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;¯1&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;produces the expected result because the right argument is now Boolean.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Special Values===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;There are several special values you may use as a left argument to &amp;lt;apll&amp;gt;⎕DR&amp;lt;/apll&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;The value &#039;&#039;&#039;&amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt;&#039;&#039;&#039; displays the datatype of the right argument as a text &#039;&#039;&#039;string&#039;&#039;&#039; so you don&#039;t need to remember the datatype numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕DR &#039;a&#039;&lt;br /&gt;
1611&lt;br /&gt;
      ⍴⎕DR &#039;a&#039;   ⍝ the shape of a scalar is null&lt;br /&gt;
&lt;br /&gt;
      ⍴⍴⎕DR &#039;a&#039;&lt;br /&gt;
0                ⍝ the shape of the shape of a scalar is always zero; monadic ⎕DR &#039;a&#039; results in scalar number Z=1611&lt;br /&gt;
      0 ⎕DR &#039;a&#039;&lt;br /&gt;
Character (1611):  16 bits per element     ⍝ string result returned where left arg of ⎕DR was zero&lt;br /&gt;
      ⍴0 ⎕DR &#039;a&#039;&lt;br /&gt;
38              ⍝ the shape of the data returned is 38; dyadic 0 ⎕DR &#039;a&#039; results in a character array, a string of length 38&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      0 ⎕DR ⍳12&lt;br /&gt;
Arithmetic Progression Array (19):  64 bit offset + 64 bit multiplier -- PV1       ⍝ 64-bit signatures re integer numeric progression&lt;br /&gt;
      ⍴0 ⎕DR ⍳12&lt;br /&gt;
76              ⍝ again dyadic ⎕DR results in a string, this time of length 76&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note in the above that iota-12 in System Function call &#039;&#039;&#039;0 ⎕DR ⍳12&#039;&#039;&#039; - was run using the &#039;&#039;&#039;64-bit NARS version&#039;&#039;&#039;, hence the 64-bit offset and 64-bit multiplier.  Had it been run in &#039;&#039;&#039;32-bit NARS&#039;&#039;&#039;, it would have returned 32-bit signatures.&lt;br /&gt;
&lt;br /&gt;
Many times in programming for debugging, data scrutiny or other purposes: It is very important to know &amp;lt;u&amp;gt;exactly how the data is represented by the program&amp;lt;/u&amp;gt;. ⎕DR or Data Representation is a feature designed to allow close scrutiny of how data is stored in memory and operated on in NARS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Some arrays have properties that may be displayed by this function:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;PV0&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;This array is a Permutation Vector, origin-0&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;PV1&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array is a Permutation Vector, origin-1&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;All2s&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array consists of all &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt;s&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;FPC&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array is a VFP and all entries are represented in Precision &amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;FPC-Mixed&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array is a VFP whose entries are represented in two or more different precisions&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;The value &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; converts between hex-character and floating point computer formats.  This argument makes it very useful to view representations of floating point numbers - in order to better understand numeric precisions, program storage formats, debug multi-precision floating-point math routines(by NARS developers) or examine perceived floating point issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕PP←99&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR 1.1&amp;lt;br /&amp;gt;&lt;br /&gt;
3FF199999999999A &amp;amp;nbsp; &amp;amp;nbsp;⍝ note the hexadecimal char representation of 1.1 is shown at left&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⍴1 ⎕DR 1.1&amp;lt;br /&amp;gt;&lt;br /&gt;
16 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;⍝ length of floating pt num 1.1 hex repr = 16 hex-chars = 64-bit-NARS&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;3fd&#039;,13⍴&#039;5&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
0.3333333333333333&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR ¯∞ ∞&amp;lt;br /&amp;gt;&lt;br /&gt;
FFF0000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
7FF0000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;7fe&#039;,13⍴&#039;f&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest positive number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
1.7976931348623157E308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;001&#039;,13⍴&#039;0&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest positive number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
2.2250738585072014E¯308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;801&#039;,13⍴&#039;0&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest negative number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
¯2.2250738585072014E¯308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;ffe&#039;,13⍴&#039;f&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest negative number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
¯1.7976931348623157E308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;The value &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; converts between character and 64-bit integer.  This argument makes it easy to see the representation of integers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR ¯1&amp;lt;br /&amp;gt;&lt;br /&gt;
FFFFFFFFFFFFFFFF&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR &#039;7&#039;,15⍴&#039;f&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest positive integer&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
9223372036854775807&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR &#039;8&#039;,15⍴&#039;0&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest negative integer&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
¯9223372036854775808&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR 9223372036854775807 ¯9223372036854775808&amp;lt;br /&amp;gt;&lt;br /&gt;
7FFFFFFFFFFFFFFF&amp;lt;br /&amp;gt;&lt;br /&gt;
8000000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A Word of Caution===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This system function allows you to create special numbers we don&#039;t support in that no other primitive generates these numbers and the behavior of all other primitives on these numbers is undefined.  Examples of such special numbers include &#039;&#039;&#039;Quiet NaNs&#039;&#039;&#039;, &#039;&#039;&#039;Signaling NaNs&#039;&#039;&#039;, &#039;&#039;&#039;Negative Zero&#039;&#039;&#039;, and &#039;&#039;&#039;Denormals&#039;&#039;&#039;.  If the system doesn&#039;t behave as you expect when using these special numbers, don&#039;t be surprised.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕CT←0 ⋄ ⎕PP←99&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6413 ⎕DR ¯64↑1&amp;lt;br /&amp;gt;&lt;br /&gt;
¯0&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;QNaN←6413 ⎕DR ¯64↑13⍴1&amp;lt;/apll&amp;gt; &amp;amp;mdash; A Quiet NaN (Not a Number)&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR QNaN&amp;lt;br /&amp;gt;&lt;br /&gt;
FFF8000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;QNaN=QNaN&amp;lt;br /&amp;gt;&lt;br /&gt;
0&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;000fffffffffffff&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest positive denormal&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
2.225073858507201E¯308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;0000000000000001&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest positive denormal&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
5E¯324&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{SFDM|DR}}&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2778</id>
		<title>Quad EC C Source Code Analysis</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2778"/>
		<updated>2015-08-21T16:30:34Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Comparison Structure Configurations - Different Returned Outputs */  string/char_array example added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;h1&amp;gt;⎕EC - &amp;lt;u&amp;gt;C Source Code Analysis&amp;lt;/u&amp;gt;:&amp;lt;/h1&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
File &amp;lt;qf_ec.c&amp;gt; (supporting APL System Function [[System_Function_EC|System Function ⎕EC - Execute Controlled]]) located in NARS trunk folder is a model example for &#039;&#039;&#039;returning a nested vector to APL&#039;&#039;&#039; from a System Function call.  Remember per your technical knowledge of APL: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns a 3-element nested vector to APL.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Executive Summary - Conceptual C Programmers Preliminary Overview/Preview==&lt;br /&gt;
&lt;br /&gt;
Variable &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; upon completion of ⎕EC contains the entire &#039;&#039;&#039;3-element nested vector result&#039;&#039;&#039; of the call to &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;, specifically, from monadic function &#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039;.  &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; also contains a pointer to an object &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; that is created by other code in the same file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;That global memory handle &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; points (via &#039;&#039;&#039;lpMemRes&#039;&#039;&#039; = MyGlobalLock (hGlbRes)) to a VARARRAY_HEADER followed by the actual data (a three-element vector).  The header contains various fields such as Array Type (ARRAY_NESTED), the NELM (3), the Rank (1), the dimension (3), followed by the data.  As it is a nested array that gets returned, the 3-elements of the data are all pointers to a &#039;&#039;&#039;SYMENTRY&#039;&#039;&#039; (for immediate values -- BOOL, INT, FLT, and CHAR) or a global memory handle for all other items, e.g. Global Numeric, APA, HETERO (mixed array-datatype e.g. integer, char/unicode string, float double, etc.), any non-immediate array, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In a sense, the internal structure of arrays in NARS C code are nested just as APL arrays themselves are nested.  Nesting is ubiquitous in NARS/APL2, etc..  Think about C coding source layouts and program flow from the standpoint of &amp;quot;How would you design the internal structures for an APL interpreter?&amp;quot;  The C source code would, wherever possible, parallel the APL code which APL users view and understand.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;⎕EC is somewhat more complex than other APL system functions in that ⎕EC executes its right argument under &#039;&#039;&#039;controlled circumstances&#039;&#039;&#039; - this also holds true for the C code itself - complexity in the returned data structure, i.e. ⎕EC mirrors APL variable structuring.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Subordinate execution of ⎕EC&#039;s right argument returns an &amp;lt;LPPL_YYSTYPE&amp;gt; variable-type pointer(ptr) just as it&#039;s umbrella overarching function ⎕EC does.  Many APL prime functions such as rho, take, iota, etc. as coded in C - also return nested arguments while many APL System &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; Functions merely return scalars.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Variable name &amp;lt;&#039;&#039;&#039;lpYYRes2&#039;&#039;&#039;&amp;gt; in file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;&#039;s C source code indicates it is a secondary result (re the &#039;&#039;&#039;execution&#039;&#039;&#039; of ⎕EC&#039;s right argument).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Independent of how actual execution of the APL user&#039;s argument proceeded, after executing that right arg, the Exit Type is converted into an integer Return Code (as that&#039;s the form of the first output item - the first element in ⎕EC&#039;s output vector, in ⎕EC&#039;s result vector).  That first item is a simple numeric scalar, but since the result of ⎕EC is a three-element nested vector, &amp;lt;qf_ec.c&amp;gt;/&#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039; must convert the Return Code into a &#039;&#039;&#039;LPSYMENTRY&#039;&#039;&#039; via &amp;lt;&#039;&#039;&#039;MakeSymEntry_EM&#039;&#039;&#039;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In particular - (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; C &amp;lt;u&amp;gt;source code extract&amp;lt;/u&amp;gt; just below):&lt;br /&gt;
     // Save the return code in the FIRST ELEMENT of ⎕EC - C&#039;s index origin is zero hence ref. to lpMemRes[0]&lt;br /&gt;
     lpMemRes[0] = MakeSymEntry_EM (IMMTYPE_INT,     // Immediate type&lt;br /&gt;
                       &amp;amp;aplLongestRC,    // Ptr to immediate value&lt;br /&gt;
                        lptkFunc);       // Ptr to function token&lt;br /&gt;
&lt;br /&gt;
Technically, ⎕EC&#039;s second output element is the value of ⎕ET, usually a 2-element vector of zeroes, at present.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;What happens next depends upon whether or not the APL user&#039;s right argument execution succeeded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution succeeded: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns the &#039;&#039;&#039;value or string value&#039;&#039;&#039; of the executed result as the third element in its output vector.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution failed: &#039;&#039;&#039;⎕EC&#039;&#039;&#039; returns the &#039;&#039;&#039;error message&#039;&#039;&#039; associated with that failure, a unicode string - as &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;&#039;s third output element.&lt;br /&gt;
&lt;br /&gt;
==Comparison Structure Configurations - Different Returned Outputs==&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_t.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structure configuration for returned solitary &#039;&#039;&#039;scalar number&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARIMMED;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_FLOAT;    // Or use IMMTYPE_INT  for an integer&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkFloat    = aplFloatSec;      // DataType APLFLOAT aplFloatSec  Or use  DataType APLINT with tkData.tkInteger&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;2. &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structure configuration for returned 3-element &#039;&#039;&#039;nested vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();                                  // Setup line # 1 for lpYYRes&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;     // Setup line # 2 for lpYYRes&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);   // Setup line # 3 for lpYYRes&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;      // Setup line # 4 for lpYYRes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Differences: Note &#039;&#039;&#039;TKT_VARIMMED for ⎕T&#039;&#039;&#039; vs. &#039;&#039;&#039;TKT_VARARRAY for ⎕EC&#039;&#039;&#039;.  Also note ⎕EC&#039;s use of hGlbRes for nested returned data, re: lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
Nesting occurs in ⎕EC output through the use of &#039;&#039;&#039;TKT_VARARRAY&#039;&#039;&#039; as token flags token type and through use of nested memory pointer &#039;&#039;&#039;MakePtrTypeGlb (hGlbRes)&#039;&#039;&#039; in var lpYYRes via the token&#039;s global data. From a purely structural perspective, excluding 1)pre-setup work in ⎕EC, 2)comment lines and 3)post-op processing C code, only 4 lines of C code were needed (above) to &#039;&#039;&#039;setup&#039;&#039;&#039; (not calculate) return result variable lpYYRes for ⎕EC.&lt;br /&gt;
See also &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#tkToken Structures More Detailed Sample Uses Table|tkToken Sample Uses Table]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;3. &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ts.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;more&#039;&#039;&#039;&amp;lt;/u&amp;gt; substantive structure configuration for a returned plain-vanilla / homogeneous 7-element &#039;&#039;&#039;unmixed vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define lpMemData   ((LPAPLINT) lpMemRes)    // The following seven vector elements returned are all integers&lt;br /&gt;
    lpMemData[0] = SystemTime.wYear;&lt;br /&gt;
    lpMemData[1] = SystemTime.wMonth;&lt;br /&gt;
    lpMemData[2] = SystemTime.wDay;&lt;br /&gt;
    lpMemData[3] = SystemTime.wHour;&lt;br /&gt;
    lpMemData[4] = SystemTime.wMinute;&lt;br /&gt;
    lpMemData[5] = SystemTime.wSecond;&lt;br /&gt;
    lpMemData[6] = SystemTime.wMilliseconds;&lt;br /&gt;
#undef  lpMemData&lt;br /&gt;
&lt;br /&gt;
    // Memory ptr no longer needed, allow unlocking/freeing hGlbRes(technically freed upon returning from ⎕TS), reset lpMemRes pointer to null&lt;br /&gt;
    MyGlobalUnlock (hGlbRes); lpMemRes = NULL;&lt;br /&gt;
&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&lt;br /&gt;
    return lpYYRes;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above return information C coding for &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; is included because setup for ⎕TS&#039;s integers output vector is relatively straightforward, i.e. less complex than a &amp;lt;u&amp;gt;nested&amp;lt;/u&amp;gt; vector(&#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;) but not much more complex than a scalar (&#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;4. &#039;&#039;&#039;[[System_Function_DR|⎕DR]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_dr.c&#039;&#039;&#039;&amp;gt; code extract) detailed structure configuration for returned string (CHAR_ARRAY) &#039;&#039;&#039;char/string vector&#039;&#039;&#039; (extracted from function SysFnDR_Show_EM_YY):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Variable declarations (type varname), needed for C code extracted just below:&lt;br /&gt;
    APLUINT           ByteRes;          // # bytes in the result&lt;br /&gt;
    LPPL_YYSTYPE      lpYYRes;          // Ptr to the result&lt;br /&gt;
    APLNELM           aplNELMRes;       // Result NELM&lt;br /&gt;
    APLCHAR           wszTemp[512];     // Temporary APLCHARs Unicode string variable&lt;br /&gt;
    HGLOBAL           hGlbRes;          // Result    ...&lt;br /&gt;
    LPVOID            lpMemRes;         // Ptr to result global memory&lt;br /&gt;
&lt;br /&gt;
    // Get the result NELM&lt;br /&gt;
    aplNELMRes = lstrlenW (wszTemp);&lt;br /&gt;
&lt;br /&gt;
    // Calculate space needed for the result&lt;br /&gt;
    ByteRes = CalcArraySize (ARRAY_CHAR, aplNELMRes, 1);&lt;br /&gt;
&lt;br /&gt;
    // Check for overflow&lt;br /&gt;
    if (ByteRes NE (APLU3264) ByteRes)&lt;br /&gt;
        goto WSFULL_EXIT;&lt;br /&gt;
&lt;br /&gt;
    // Allocate space for the result&lt;br /&gt;
    hGlbRes = DbgGlobalAlloc (GHND, (APLU3264) ByteRes);&lt;br /&gt;
    if (hGlbRes EQ NULL)&lt;br /&gt;
        goto WSFULL_EXIT;&lt;br /&gt;
&lt;br /&gt;
    // Lock the memory to get a ptr to it&lt;br /&gt;
    lpMemRes = MyGlobalLock (hGlbRes);&lt;br /&gt;
&lt;br /&gt;
#define lpHeader        ((LPVARARRAY_HEADER) lpMemRes)&lt;br /&gt;
    // Fill in the header&lt;br /&gt;
    lpHeader-&amp;gt;Sig.nature = VARARRAY_HEADER_SIGNATURE;&lt;br /&gt;
    lpHeader-&amp;gt;ArrType    = ARRAY_CHAR;&lt;br /&gt;
////lpHeader-&amp;gt;PermNdx    = PERMNDX_NONE;    // Already zero from GHND&lt;br /&gt;
////lpHeader-&amp;gt;SysVar     = FALSE;           // Already zero from GHND&lt;br /&gt;
    lpHeader-&amp;gt;RefCnt     = 1;&lt;br /&gt;
    lpHeader-&amp;gt;NELM       = aplNELMRes;&lt;br /&gt;
    lpHeader-&amp;gt;Rank       = 1;&lt;br /&gt;
#undef  lpHeader&lt;br /&gt;
&lt;br /&gt;
    // Save the dimension in the result&lt;br /&gt;
    *VarArrayBaseToDim (lpMemRes) = aplNELMRes;&lt;br /&gt;
&lt;br /&gt;
    // Point to the data (APLAPA struct)&lt;br /&gt;
    lpMemRes = VarArrayDataFmBase (lpMemRes);&lt;br /&gt;
&lt;br /&gt;
    // Copy text to the result&lt;br /&gt;
    CopyMemory (lpMemRes, wszTemp, (APLU3264) BytesIn (ARRAY_CHAR, aplNELMRes));&lt;br /&gt;
&lt;br /&gt;
    // No longer need this ptr&lt;br /&gt;
    MyGlobalUnlock (hGlbRes); lpMemRes = NULL;&lt;br /&gt;
&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
////lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
////lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&lt;br /&gt;
    return lpYYRes;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=System_Function_DR&amp;diff=2777</id>
		<title>System Function DR</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=System_Function_DR&amp;diff=2777"/>
		<updated>2015-08-21T16:16:18Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Special Values */  expanded&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This function is available in both &#039;&#039;monadic&#039;&#039; and &#039;&#039;dyadic&#039;&#039; forms.&lt;br /&gt;
==Monadic Function==&lt;br /&gt;
{{BoxStart|&amp;lt;apll&amp;gt;Z←⎕DR R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|returns the data representation of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
{{BoxLine |&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is an arbitrary array.}}&lt;br /&gt;
{{BoxEnd  |&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is a numeric scalar which represents the datatype of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The datatypes are encoded with a unique index in the low-order two digits, and (where appropriate) the bits per element in the higher-order digits:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;110&amp;lt;/apll&amp;gt;:  Boolean, one bit per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;1611&amp;lt;/apll&amp;gt;:  Character, 16 bits per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;6412&amp;lt;/apll&amp;gt;:  Integer, 64 bits per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;6413&amp;lt;/apll&amp;gt;:  Floating Point, 64 bits per element (double precision)&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;14&amp;lt;/apll&amp;gt;:  Rational, 16 bytes plus two 4- or 8-byte pointers plus size of limbs per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;15&amp;lt;/apll&amp;gt;:  Variable-precision Floating Point, 12 bytes plus one 4- or 8-byte pointer plus size of limbs per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;19&amp;lt;/apll&amp;gt;:  Arithmetic Progression Array, 64 bits each for the offset and multiplier&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;20&amp;lt;/apll&amp;gt;:  Heterogeneous, one 4- or 8-byte pointer per element&lt;br /&gt;
*&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;21&amp;lt;/apll&amp;gt;:  Nested, one 4- or 8-byte pointer per element&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR 1 0 1&amp;lt;br /&amp;gt;110&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR ⌈/⍬&amp;lt;br /&amp;gt;6413&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR 2 64⍴1&amp;lt;/apll&amp;gt; &amp;amp;mdash; Note this is really an APA, not Boolean&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;19&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕DR 2 64⍴1 1&amp;lt;/apll&amp;gt; &amp;amp;mdash; This one is Boolean because Reshape produces APAs for integer singleton right arguments only&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;110&amp;lt;br /&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dyadic Function==&lt;br /&gt;
{{BoxStart|&amp;lt;apll&amp;gt;Z←L ⎕DR R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|converts &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; to the datatype indicated by &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
{{BoxLine|&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is an arbitrary array.}}&lt;br /&gt;
{{BoxLine|&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; is an integer scalar or one-element vector datatype (see the table above), or a special value (see below).}}&lt;br /&gt;
{{BoxEnd|&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; where each of the values are converted to the datatype indicated by &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If the conversion is from a narrower datatype to a wider datatype, there must be exactly enough columns in the right argument to match a multiple of the size of the wider datatype.  For example, when converting from character (16-bit) to integer (64-bit), the last column of the right argument must be a multiple of 4 (= 64/16); otherwise, a &amp;lt;apll&amp;gt;LENGTH ERROR&amp;lt;/apll&amp;gt; is signalled.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6412 ⎕DR &#039;NARS2000&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; Eight 16-bit characters (=128 bits) convert to two 64-bit integers&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
23362775258562638 13511005043687474&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If the conversion is from a wider datatype to a narrower datatype, the number of values in the result is a multiple of the ratio of the wider datatype to the narrower datatype.  For example, when converting from integer (64-bit) to character (16-bit), the last column in the result is the product of last column of the right argument and 4 (= 64/16).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⍴⎕←1611 ⎕DR 23362775258562638 13511005043687474&amp;lt;br /&amp;gt;&lt;br /&gt;
NARS2000&amp;lt;br /&amp;gt;&lt;br /&gt;
8&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Keep in mind how [[APA|Arithmetic Progression Arrays]] are created and represented as they can fool you.  For example, you might try the following to convert from Boolean to integer:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6412 ⎕DR 2 64⍴1&amp;lt;br /&amp;gt;&lt;br /&gt;
1 0 2 64&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;However, this doesn&#039;t produce the expected result because this particular right argument is an APA, not a Boolean vector.  That is, under certain circumstances, the reshape primitive creates an APA.  In this case, the APA is an array with an offset of &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;, a multiplier of &amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt; and a shape of &amp;lt;apll&amp;gt;2 64&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;On the other hand, this expression&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6412 ⎕DR 2 64⍴1 1&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;¯1&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;¯1&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;produces the expected result because the right argument is now Boolean.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Special Values===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;There are several special values you may use as a left argument to &amp;lt;apll&amp;gt;⎕DR&amp;lt;/apll&amp;gt;:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;The value &#039;&#039;&#039;&amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt;&#039;&#039;&#039; displays the datatype of the right argument as a text &#039;&#039;&#039;string&#039;&#039;&#039; so you don&#039;t need to remember the datatype numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕DR &#039;a&#039;&lt;br /&gt;
1611&lt;br /&gt;
      ⍴⎕DR &#039;a&#039;   ⍝ the shape of a scalar is null&lt;br /&gt;
&lt;br /&gt;
      ⍴⍴⎕DR &#039;a&#039;&lt;br /&gt;
0                ⍝ the shape of the shape of a scalar is always zero; monadic ⎕DR &#039;a&#039; results in scalar number Z=1611&lt;br /&gt;
      0 ⎕DR &#039;a&#039;&lt;br /&gt;
Character (1611):  16 bits per element     ⍝ string result returned where left arg of ⎕DR was zero&lt;br /&gt;
      ⍴0 ⎕DR &#039;a&#039;&lt;br /&gt;
38              ⍝ the shape of the data returned is 38; dyadic 0 ⎕DR &#039;a&#039; results in a character array, a string of length 38&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      0 ⎕DR ⍳12&lt;br /&gt;
Arithmetic Progression Array (19):  64 bit offset + 64 bit multiplier -- PV1       ⍝ 64-bit signatures re integer numeric progression&lt;br /&gt;
      ⍴0 ⎕DR ⍳12&lt;br /&gt;
76              ⍝ again dyadic ⎕DR results in a string, this time of length 76&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note in the above that iota-12 in System Function call &#039;&#039;&#039;0 ⎕DR ⍳12&#039;&#039;&#039; - was run using the &#039;&#039;&#039;64-bit NARS version&#039;&#039;&#039;, hence the 64-bit offset and 64-bit multiplier.  Had it been run in &#039;&#039;&#039;32-bit NARS&#039;&#039;&#039;, it would have returned 32-bit signatures.&lt;br /&gt;
&lt;br /&gt;
Many times in programming for debugging, data scrutiny or other purposes: It is very important to know &amp;lt;u&amp;gt;exactly how the data is represented by the program&amp;lt;/u&amp;gt;. ⎕DR or Data Representation is a feature designed to allow close scrutiny of how data is stored in memory and operated on in NARS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Some arrays have properties that may be displayed by this function:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;PV0&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;This array is a Permutation Vector, origin-0&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;PV1&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array is a Permutation Vector, origin-1&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;All2s&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array consists of all &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt;s&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;FPC&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array is a VFP and all entries are represented in Precision &amp;lt;i&amp;gt;nnn&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;FPC-Mixed&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;This array is a VFP whose entries are represented in two or more different precisions&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;The value &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; converts between hex-character and floating point computer formats.  This argument makes it very useful to view representations of floating point numbers - in order to better understand numeric precisions, program storage formats, debug multi-precision floating-point math routines(by NARS developers) or examine perceived floating point issues.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕PP←99&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR 1.1&amp;lt;br /&amp;gt;&lt;br /&gt;
3FF199999999999A &amp;amp;nbsp; &amp;amp;nbsp;⍝ note the hexadecimal char representation of 1.1 is shown at left&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⍴1 ⎕DR 1.1&amp;lt;br /&amp;gt;&lt;br /&gt;
16 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;⍝ length of floating pt num 1.1 hex repr = 16 hex-chars = 64-bit-NARS&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;3fd&#039;,13⍴&#039;5&#039;&amp;lt;br /&amp;gt;&lt;br /&gt;
0.3333333333333333&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR ¯∞ ∞&amp;lt;br /&amp;gt;&lt;br /&gt;
FFF0000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
7FF0000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;7fe&#039;,13⍴&#039;f&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest positive number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
1.7976931348623157E308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;001&#039;,13⍴&#039;0&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest positive number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
2.2250738585072014E¯308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;801&#039;,13⍴&#039;0&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest negative number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
¯2.2250738585072014E¯308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;ffe&#039;,13⍴&#039;f&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest negative number&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
¯1.7976931348623157E308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;The value &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt; converts between character and 64-bit integer.  This argument makes it easy to see the representation of integers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR ¯1&amp;lt;br /&amp;gt;&lt;br /&gt;
FFFFFFFFFFFFFFFF&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR &#039;7&#039;,15⍴&#039;f&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest positive integer&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
9223372036854775807&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR &#039;8&#039;,15⍴&#039;0&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest negative integer&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
¯9223372036854775808&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;2 ⎕DR 9223372036854775807 ¯9223372036854775808&amp;lt;br /&amp;gt;&lt;br /&gt;
7FFFFFFFFFFFFFFF&amp;lt;br /&amp;gt;&lt;br /&gt;
8000000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===A Word of Caution===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This system function allows you to create special numbers we don&#039;t support in that no other primitive generates these numbers and the behavior of all other primitives on these numbers is undefined.  Examples of such special numbers include &#039;&#039;&#039;Quiet NaNs&#039;&#039;&#039;, &#039;&#039;&#039;Signaling NaNs&#039;&#039;&#039;, &#039;&#039;&#039;Negative Zero&#039;&#039;&#039;, and &#039;&#039;&#039;Denormals&#039;&#039;&#039;.  If the system doesn&#039;t behave as you expect when using these special numbers, don&#039;t be surprised.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;⎕CT←0 ⋄ ⎕PP←99&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6413 ⎕DR ¯64↑1&amp;lt;br /&amp;gt;&lt;br /&gt;
¯0&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;QNaN←6413 ⎕DR ¯64↑13⍴1&amp;lt;/apll&amp;gt; &amp;amp;mdash; A Quiet NaN (Not a Number)&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR QNaN&amp;lt;br /&amp;gt;&lt;br /&gt;
FFF8000000000000&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;QNaN=QNaN&amp;lt;br /&amp;gt;&lt;br /&gt;
0&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;000fffffffffffff&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The largest positive denormal&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
2.225073858507201E¯308&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;1 ⎕DR &#039;0000000000000001&#039;&amp;lt;/apll&amp;gt; &amp;amp;mdash; The smallest positive denormal&amp;lt;apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
5E¯324&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{SFDM|DR}}&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2776</id>
		<title>Quad EC C Source Code Analysis</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2776"/>
		<updated>2015-08-20T21:58:45Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Comparison Structure Configurations - Different Returned Outputs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;h1&amp;gt;⎕EC - &amp;lt;u&amp;gt;C Source Code Analysis&amp;lt;/u&amp;gt;:&amp;lt;/h1&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
File &amp;lt;qf_ec.c&amp;gt; (supporting APL System Function [[System_Function_EC|System Function ⎕EC - Execute Controlled]]) located in NARS trunk folder is a model example for &#039;&#039;&#039;returning a nested vector to APL&#039;&#039;&#039; from a System Function call.  Remember per your technical knowledge of APL: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns a 3-element nested vector to APL.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Executive Summary - Conceptual C Programmers Preliminary Overview/Preview==&lt;br /&gt;
&lt;br /&gt;
Variable &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; upon completion of ⎕EC contains the entire &#039;&#039;&#039;3-element nested vector result&#039;&#039;&#039; of the call to &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;, specifically, from monadic function &#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039;.  &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; also contains a pointer to an object &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; that is created by other code in the same file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;That global memory handle &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; points (via &#039;&#039;&#039;lpMemRes&#039;&#039;&#039; = MyGlobalLock (hGlbRes)) to a VARARRAY_HEADER followed by the actual data (a three-element vector).  The header contains various fields such as Array Type (ARRAY_NESTED), the NELM (3), the Rank (1), the dimension (3), followed by the data.  As it is a nested array that gets returned, the 3-elements of the data are all pointers to a &#039;&#039;&#039;SYMENTRY&#039;&#039;&#039; (for immediate values -- BOOL, INT, FLT, and CHAR) or a global memory handle for all other items, e.g. Global Numeric, APA, HETERO (mixed array-datatype e.g. integer, char/unicode string, float double, etc.), any non-immediate array, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In a sense, the internal structure of arrays in NARS C code are nested just as APL arrays themselves are nested.  Nesting is ubiquitous in NARS/APL2, etc..  Think about C coding source layouts and program flow from the standpoint of &amp;quot;How would you design the internal structures for an APL interpreter?&amp;quot;  The C source code would, wherever possible, parallel the APL code which APL users view and understand.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;⎕EC is somewhat more complex than other APL system functions in that ⎕EC executes its right argument under &#039;&#039;&#039;controlled circumstances&#039;&#039;&#039; - this also holds true for the C code itself - complexity in the returned data structure, i.e. ⎕EC mirrors APL variable structuring.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Subordinate execution of ⎕EC&#039;s right argument returns an &amp;lt;LPPL_YYSTYPE&amp;gt; variable-type pointer(ptr) just as it&#039;s umbrella overarching function ⎕EC does.  Many APL prime functions such as rho, take, iota, etc. as coded in C - also return nested arguments while many APL System &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; Functions merely return scalars.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Variable name &amp;lt;&#039;&#039;&#039;lpYYRes2&#039;&#039;&#039;&amp;gt; in file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;&#039;s C source code indicates it is a secondary result (re the &#039;&#039;&#039;execution&#039;&#039;&#039; of ⎕EC&#039;s right argument).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Independent of how actual execution of the APL user&#039;s argument proceeded, after executing that right arg, the Exit Type is converted into an integer Return Code (as that&#039;s the form of the first output item - the first element in ⎕EC&#039;s output vector, in ⎕EC&#039;s result vector).  That first item is a simple numeric scalar, but since the result of ⎕EC is a three-element nested vector, &amp;lt;qf_ec.c&amp;gt;/&#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039; must convert the Return Code into a &#039;&#039;&#039;LPSYMENTRY&#039;&#039;&#039; via &amp;lt;&#039;&#039;&#039;MakeSymEntry_EM&#039;&#039;&#039;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In particular - (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; C &amp;lt;u&amp;gt;source code extract&amp;lt;/u&amp;gt; just below):&lt;br /&gt;
     // Save the return code in the FIRST ELEMENT of ⎕EC - C&#039;s index origin is zero hence ref. to lpMemRes[0]&lt;br /&gt;
     lpMemRes[0] = MakeSymEntry_EM (IMMTYPE_INT,     // Immediate type&lt;br /&gt;
                       &amp;amp;aplLongestRC,    // Ptr to immediate value&lt;br /&gt;
                        lptkFunc);       // Ptr to function token&lt;br /&gt;
&lt;br /&gt;
Technically, ⎕EC&#039;s second output element is the value of ⎕ET, usually a 2-element vector of zeroes, at present.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;What happens next depends upon whether or not the APL user&#039;s right argument execution succeeded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution succeeded: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns the &#039;&#039;&#039;value or string value&#039;&#039;&#039; of the executed result as the third element in its output vector.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution failed: &#039;&#039;&#039;⎕EC&#039;&#039;&#039; returns the &#039;&#039;&#039;error message&#039;&#039;&#039; associated with that failure, a unicode string - as &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;&#039;s third output element.&lt;br /&gt;
&lt;br /&gt;
==Comparison Structure Configurations - Different Returned Outputs==&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_t.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structure configuration for returned solitary &#039;&#039;&#039;scalar number&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARIMMED;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_FLOAT;    // Or use IMMTYPE_INT  for an integer&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkFloat    = aplFloatSec;      // DataType APLFLOAT aplFloatSec  Or use  DataType APLINT with tkData.tkInteger&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;2. &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structure configuration for returned 3-element &#039;&#039;&#039;nested vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();                                  // Setup line # 1 for lpYYRes&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;     // Setup line # 2 for lpYYRes&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);   // Setup line # 3 for lpYYRes&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;      // Setup line # 4 for lpYYRes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Differences: Note &#039;&#039;&#039;TKT_VARIMMED for ⎕T&#039;&#039;&#039; vs. &#039;&#039;&#039;TKT_VARARRAY for ⎕EC&#039;&#039;&#039;.  Also note ⎕EC&#039;s use of hGlbRes for nested returned data, re: lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
Nesting occurs in ⎕EC output through the use of &#039;&#039;&#039;TKT_VARARRAY&#039;&#039;&#039; as token flags token type and through use of nested memory pointer &#039;&#039;&#039;MakePtrTypeGlb (hGlbRes)&#039;&#039;&#039; in var lpYYRes via the token&#039;s global data. From a purely structural perspective, excluding 1)pre-setup work in ⎕EC, 2)comment lines and 3)post-op processing C code, only 4 lines of C code were needed (above) to &#039;&#039;&#039;setup&#039;&#039;&#039; (not calculate) return result variable lpYYRes for ⎕EC.&lt;br /&gt;
See also &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#tkToken Structures More Detailed Sample Uses Table|tkToken Sample Uses Table]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;3. &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ts.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;more&#039;&#039;&#039;&amp;lt;/u&amp;gt; substantive structure configuration for a returned plain-vanilla / homogeneous 7-element &#039;&#039;&#039;unmixed vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define lpMemData   ((LPAPLINT) lpMemRes)    // The following seven vector elements returned are all integers&lt;br /&gt;
    lpMemData[0] = SystemTime.wYear;&lt;br /&gt;
    lpMemData[1] = SystemTime.wMonth;&lt;br /&gt;
    lpMemData[2] = SystemTime.wDay;&lt;br /&gt;
    lpMemData[3] = SystemTime.wHour;&lt;br /&gt;
    lpMemData[4] = SystemTime.wMinute;&lt;br /&gt;
    lpMemData[5] = SystemTime.wSecond;&lt;br /&gt;
    lpMemData[6] = SystemTime.wMilliseconds;&lt;br /&gt;
#undef  lpMemData&lt;br /&gt;
&lt;br /&gt;
    // Memory ptr no longer needed, allow unlocking/freeing hGlbRes(technically freed upon returning from ⎕TS), reset lpMemRes pointer to null&lt;br /&gt;
    MyGlobalUnlock (hGlbRes); lpMemRes = NULL;&lt;br /&gt;
&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&lt;br /&gt;
    return lpYYRes;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above return information C coding for &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; is included because setup for ⎕TS&#039;s integers output vector is relatively straightforward, i.e. less complex than a &amp;lt;u&amp;gt;nested&amp;lt;/u&amp;gt; vector(&#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;) but not much more complex than a scalar (&#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039;).&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2775</id>
		<title>Quad EC C Source Code Analysis</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2775"/>
		<updated>2015-08-20T21:56:43Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Comparison Prelim Setups - Different Returned Outputs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;h1&amp;gt;⎕EC - &amp;lt;u&amp;gt;C Source Code Analysis&amp;lt;/u&amp;gt;:&amp;lt;/h1&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
File &amp;lt;qf_ec.c&amp;gt; (supporting APL System Function [[System_Function_EC|System Function ⎕EC - Execute Controlled]]) located in NARS trunk folder is a model example for &#039;&#039;&#039;returning a nested vector to APL&#039;&#039;&#039; from a System Function call.  Remember per your technical knowledge of APL: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns a 3-element nested vector to APL.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Executive Summary - Conceptual C Programmers Preliminary Overview/Preview==&lt;br /&gt;
&lt;br /&gt;
Variable &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; upon completion of ⎕EC contains the entire &#039;&#039;&#039;3-element nested vector result&#039;&#039;&#039; of the call to &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;, specifically, from monadic function &#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039;.  &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; also contains a pointer to an object &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; that is created by other code in the same file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;That global memory handle &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; points (via &#039;&#039;&#039;lpMemRes&#039;&#039;&#039; = MyGlobalLock (hGlbRes)) to a VARARRAY_HEADER followed by the actual data (a three-element vector).  The header contains various fields such as Array Type (ARRAY_NESTED), the NELM (3), the Rank (1), the dimension (3), followed by the data.  As it is a nested array that gets returned, the 3-elements of the data are all pointers to a &#039;&#039;&#039;SYMENTRY&#039;&#039;&#039; (for immediate values -- BOOL, INT, FLT, and CHAR) or a global memory handle for all other items, e.g. Global Numeric, APA, HETERO (mixed array-datatype e.g. integer, char/unicode string, float double, etc.), any non-immediate array, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In a sense, the internal structure of arrays in NARS C code are nested just as APL arrays themselves are nested.  Nesting is ubiquitous in NARS/APL2, etc..  Think about C coding source layouts and program flow from the standpoint of &amp;quot;How would you design the internal structures for an APL interpreter?&amp;quot;  The C source code would, wherever possible, parallel the APL code which APL users view and understand.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;⎕EC is somewhat more complex than other APL system functions in that ⎕EC executes its right argument under &#039;&#039;&#039;controlled circumstances&#039;&#039;&#039; - this also holds true for the C code itself - complexity in the returned data structure, i.e. ⎕EC mirrors APL variable structuring.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Subordinate execution of ⎕EC&#039;s right argument returns an &amp;lt;LPPL_YYSTYPE&amp;gt; variable-type pointer(ptr) just as it&#039;s umbrella overarching function ⎕EC does.  Many APL prime functions such as rho, take, iota, etc. as coded in C - also return nested arguments while many APL System &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; Functions merely return scalars.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Variable name &amp;lt;&#039;&#039;&#039;lpYYRes2&#039;&#039;&#039;&amp;gt; in file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;&#039;s C source code indicates it is a secondary result (re the &#039;&#039;&#039;execution&#039;&#039;&#039; of ⎕EC&#039;s right argument).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Independent of how actual execution of the APL user&#039;s argument proceeded, after executing that right arg, the Exit Type is converted into an integer Return Code (as that&#039;s the form of the first output item - the first element in ⎕EC&#039;s output vector, in ⎕EC&#039;s result vector).  That first item is a simple numeric scalar, but since the result of ⎕EC is a three-element nested vector, &amp;lt;qf_ec.c&amp;gt;/&#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039; must convert the Return Code into a &#039;&#039;&#039;LPSYMENTRY&#039;&#039;&#039; via &amp;lt;&#039;&#039;&#039;MakeSymEntry_EM&#039;&#039;&#039;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In particular - (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; C &amp;lt;u&amp;gt;source code extract&amp;lt;/u&amp;gt; just below):&lt;br /&gt;
     // Save the return code in the FIRST ELEMENT of ⎕EC - C&#039;s index origin is zero hence ref. to lpMemRes[0]&lt;br /&gt;
     lpMemRes[0] = MakeSymEntry_EM (IMMTYPE_INT,     // Immediate type&lt;br /&gt;
                       &amp;amp;aplLongestRC,    // Ptr to immediate value&lt;br /&gt;
                        lptkFunc);       // Ptr to function token&lt;br /&gt;
&lt;br /&gt;
Technically, ⎕EC&#039;s second output element is the value of ⎕ET, usually a 2-element vector of zeroes, at present.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;What happens next depends upon whether or not the APL user&#039;s right argument execution succeeded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution succeeded: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns the &#039;&#039;&#039;value or string value&#039;&#039;&#039; of the executed result as the third element in its output vector.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution failed: &#039;&#039;&#039;⎕EC&#039;&#039;&#039; returns the &#039;&#039;&#039;error message&#039;&#039;&#039; associated with that failure, a unicode string - as &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;&#039;s third output element.&lt;br /&gt;
&lt;br /&gt;
==Comparison Structure Configurations - Different Returned Outputs==&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_t.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structural setup for returned solitary &#039;&#039;&#039;scalar number&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARIMMED;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_FLOAT;    // Or use IMMTYPE_INT  for an integer&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkFloat    = aplFloatSec;      // DataType APLFLOAT aplFloatSec  Or use  DataType APLINT with tkData.tkInteger&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;2. &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structural setup for returned 3-element &#039;&#039;&#039;nested vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();                                  // Setup line # 1 for lpYYRes&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;     // Setup line # 2 for lpYYRes&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);   // Setup line # 3 for lpYYRes&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;      // Setup line # 4 for lpYYRes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Differences: Note &#039;&#039;&#039;TKT_VARIMMED for ⎕T&#039;&#039;&#039; vs. &#039;&#039;&#039;TKT_VARARRAY for ⎕EC&#039;&#039;&#039;.  Also note ⎕EC&#039;s use of hGlbRes for nested returned data, re: lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
Nesting occurs in ⎕EC output through the use of &#039;&#039;&#039;TKT_VARARRAY&#039;&#039;&#039; as token flags token type and through use of nested memory pointer &#039;&#039;&#039;MakePtrTypeGlb (hGlbRes)&#039;&#039;&#039; in var lpYYRes via the token&#039;s global data. From a purely structural perspective, excluding 1)pre-setup work in ⎕EC, 2)comment lines and 3)post-op processing C code, only 4 lines of C code were needed (above) to &#039;&#039;&#039;setup&#039;&#039;&#039; (not calculate) return result variable lpYYRes for ⎕EC.&lt;br /&gt;
See also &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#tkToken Structures More Detailed Sample Uses Table|tkToken Sample Uses Table]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;3. &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ts.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;more&#039;&#039;&#039;&amp;lt;/u&amp;gt; substantive structural setup for a returned plain-vanilla / homogeneous 7-element &#039;&#039;&#039;unmixed vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define lpMemData   ((LPAPLINT) lpMemRes)    // The following seven vector elements returned are all integers&lt;br /&gt;
    lpMemData[0] = SystemTime.wYear;&lt;br /&gt;
    lpMemData[1] = SystemTime.wMonth;&lt;br /&gt;
    lpMemData[2] = SystemTime.wDay;&lt;br /&gt;
    lpMemData[3] = SystemTime.wHour;&lt;br /&gt;
    lpMemData[4] = SystemTime.wMinute;&lt;br /&gt;
    lpMemData[5] = SystemTime.wSecond;&lt;br /&gt;
    lpMemData[6] = SystemTime.wMilliseconds;&lt;br /&gt;
#undef  lpMemData&lt;br /&gt;
&lt;br /&gt;
    // Memory ptr no longer needed, allow unlocking/freeing hGlbRes(technically freed upon returning from ⎕TS), reset lpMemRes pointer to null&lt;br /&gt;
    MyGlobalUnlock (hGlbRes); lpMemRes = NULL;&lt;br /&gt;
&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&lt;br /&gt;
    return lpYYRes;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above return information C coding for &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; is included because setup for ⎕TS&#039;s integers output vector is relatively straightforward, i.e. less complex than a &amp;lt;u&amp;gt;nested&amp;lt;/u&amp;gt; vector(&#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;) but not much more complex than a scalar (&#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039;).&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2774</id>
		<title>Quad EC C Source Code Analysis</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2774"/>
		<updated>2015-08-20T21:42:25Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Comparison Prelim Setups - Different Returned Outputs */  expanded&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;h1&amp;gt;⎕EC - &amp;lt;u&amp;gt;C Source Code Analysis&amp;lt;/u&amp;gt;:&amp;lt;/h1&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
File &amp;lt;qf_ec.c&amp;gt; (supporting APL System Function [[System_Function_EC|System Function ⎕EC - Execute Controlled]]) located in NARS trunk folder is a model example for &#039;&#039;&#039;returning a nested vector to APL&#039;&#039;&#039; from a System Function call.  Remember per your technical knowledge of APL: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns a 3-element nested vector to APL.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Executive Summary - Conceptual C Programmers Preliminary Overview/Preview==&lt;br /&gt;
&lt;br /&gt;
Variable &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; upon completion of ⎕EC contains the entire &#039;&#039;&#039;3-element nested vector result&#039;&#039;&#039; of the call to &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;, specifically, from monadic function &#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039;.  &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; also contains a pointer to an object &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; that is created by other code in the same file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;That global memory handle &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; points (via &#039;&#039;&#039;lpMemRes&#039;&#039;&#039; = MyGlobalLock (hGlbRes)) to a VARARRAY_HEADER followed by the actual data (a three-element vector).  The header contains various fields such as Array Type (ARRAY_NESTED), the NELM (3), the Rank (1), the dimension (3), followed by the data.  As it is a nested array that gets returned, the 3-elements of the data are all pointers to a &#039;&#039;&#039;SYMENTRY&#039;&#039;&#039; (for immediate values -- BOOL, INT, FLT, and CHAR) or a global memory handle for all other items, e.g. Global Numeric, APA, HETERO (mixed array-datatype e.g. integer, char/unicode string, float double, etc.), any non-immediate array, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In a sense, the internal structure of arrays in NARS C code are nested just as APL arrays themselves are nested.  Nesting is ubiquitous in NARS/APL2, etc..  Think about C coding source layouts and program flow from the standpoint of &amp;quot;How would you design the internal structures for an APL interpreter?&amp;quot;  The C source code would, wherever possible, parallel the APL code which APL users view and understand.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;⎕EC is somewhat more complex than other APL system functions in that ⎕EC executes its right argument under &#039;&#039;&#039;controlled circumstances&#039;&#039;&#039; - this also holds true for the C code itself - complexity in the returned data structure, i.e. ⎕EC mirrors APL variable structuring.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Subordinate execution of ⎕EC&#039;s right argument returns an &amp;lt;LPPL_YYSTYPE&amp;gt; variable-type pointer(ptr) just as it&#039;s umbrella overarching function ⎕EC does.  Many APL prime functions such as rho, take, iota, etc. as coded in C - also return nested arguments while many APL System &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; Functions merely return scalars.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Variable name &amp;lt;&#039;&#039;&#039;lpYYRes2&#039;&#039;&#039;&amp;gt; in file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;&#039;s C source code indicates it is a secondary result (re the &#039;&#039;&#039;execution&#039;&#039;&#039; of ⎕EC&#039;s right argument).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Independent of how actual execution of the APL user&#039;s argument proceeded, after executing that right arg, the Exit Type is converted into an integer Return Code (as that&#039;s the form of the first output item - the first element in ⎕EC&#039;s output vector, in ⎕EC&#039;s result vector).  That first item is a simple numeric scalar, but since the result of ⎕EC is a three-element nested vector, &amp;lt;qf_ec.c&amp;gt;/&#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039; must convert the Return Code into a &#039;&#039;&#039;LPSYMENTRY&#039;&#039;&#039; via &amp;lt;&#039;&#039;&#039;MakeSymEntry_EM&#039;&#039;&#039;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In particular - (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; C &amp;lt;u&amp;gt;source code extract&amp;lt;/u&amp;gt; just below):&lt;br /&gt;
     // Save the return code in the FIRST ELEMENT of ⎕EC - C&#039;s index origin is zero hence ref. to lpMemRes[0]&lt;br /&gt;
     lpMemRes[0] = MakeSymEntry_EM (IMMTYPE_INT,     // Immediate type&lt;br /&gt;
                       &amp;amp;aplLongestRC,    // Ptr to immediate value&lt;br /&gt;
                        lptkFunc);       // Ptr to function token&lt;br /&gt;
&lt;br /&gt;
Technically, ⎕EC&#039;s second output element is the value of ⎕ET, usually a 2-element vector of zeroes, at present.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;What happens next depends upon whether or not the APL user&#039;s right argument execution succeeded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution succeeded: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns the &#039;&#039;&#039;value or string value&#039;&#039;&#039; of the executed result as the third element in its output vector.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution failed: &#039;&#039;&#039;⎕EC&#039;&#039;&#039; returns the &#039;&#039;&#039;error message&#039;&#039;&#039; associated with that failure, a unicode string - as &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;&#039;s third output element.&lt;br /&gt;
&lt;br /&gt;
==Comparison Prelim Setups - Different Returned Outputs==&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_t.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structural setup for returned solitary &#039;&#039;&#039;scalar number&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARIMMED;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_FLOAT;    // Or use IMMTYPE_INT  for an integer&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkFloat    = aplFloatSec;      // DataType APLFLOAT aplFloatSec  Or use  DataType APLINT with tkData.tkInteger&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;2. &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structural setup for returned 3-element &#039;&#039;&#039;nested vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();                                  // Setup line # 1 for lpYYRes&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;     // Setup line # 2 for lpYYRes&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);   // Setup line # 3 for lpYYRes&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;      // Setup line # 4 for lpYYRes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Differences: Note &#039;&#039;&#039;TKT_VARIMMED for ⎕T&#039;&#039;&#039; vs. &#039;&#039;&#039;TKT_VARARRAY for ⎕EC&#039;&#039;&#039;.  Also note ⎕EC&#039;s use of hGlbRes for nested returned data, re: lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
Nesting occurs in ⎕EC output through the use of &#039;&#039;&#039;TKT_VARARRAY&#039;&#039;&#039; as token flags token type and through use of nested memory pointer &#039;&#039;&#039;MakePtrTypeGlb (hGlbRes)&#039;&#039;&#039; in var lpYYRes via the token&#039;s global data. From a purely structural perspective, excluding 1)pre-setup work in ⎕EC, 2)comment lines and 3)post-op processing C code, only 4 lines of C code were needed (above) to &#039;&#039;&#039;setup&#039;&#039;&#039; (not calculate) return result variable lpYYRes for ⎕EC.&lt;br /&gt;
See also &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#tkToken Structures More Detailed Sample Uses Table|tkToken Sample Uses Table]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;3. &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ts.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;more&#039;&#039;&#039;&amp;lt;/u&amp;gt; substantive structural setup for a returned plain-vanilla / homogeneous 7-element &#039;&#039;&#039;unmixed vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define lpMemData   ((LPAPLINT) lpMemRes)    // The following seven vector elements returned are all integers&lt;br /&gt;
    lpMemData[0] = SystemTime.wYear;&lt;br /&gt;
    lpMemData[1] = SystemTime.wMonth;&lt;br /&gt;
    lpMemData[2] = SystemTime.wDay;&lt;br /&gt;
    lpMemData[3] = SystemTime.wHour;&lt;br /&gt;
    lpMemData[4] = SystemTime.wMinute;&lt;br /&gt;
    lpMemData[5] = SystemTime.wSecond;&lt;br /&gt;
    lpMemData[6] = SystemTime.wMilliseconds;&lt;br /&gt;
#undef  lpMemData&lt;br /&gt;
&lt;br /&gt;
    // Memory ptr no longer needed, allow unlocking/freeing hGlbRes(technically freed upon returning from ⎕TS), reset lpMemRes pointer to null&lt;br /&gt;
    MyGlobalUnlock (hGlbRes); lpMemRes = NULL;&lt;br /&gt;
&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&lt;br /&gt;
    return lpYYRes;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above return information C coding for &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; is included because setup for ⎕TS&#039;s integers output vector is relatively straightforward, i.e. less complex than a &amp;lt;u&amp;gt;nested&amp;lt;/u&amp;gt; vector(&#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;) but not much more complex than a scalar (&#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039;).&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Frequently_Used_TypeDef_Structures_and_Variables&amp;diff=2773</id>
		<title>Frequently Used TypeDef Structures and Variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Frequently_Used_TypeDef_Structures_and_Variables&amp;diff=2773"/>
		<updated>2015-08-18T14:33:48Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* tkToken Commonly Used Structures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;NARS C &amp;lt;u&amp;gt;Source Code&amp;lt;/u&amp;gt; Frequently Used TypeDef Structures and Variables:&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
NARS has multiple frequently used TypeDefs, Structures, Type-Variables and Variables. Familiarity with these structures, including variables employed, is essential toward gaining increased understanding of how NARS C source code works, including insight into C program flow.&lt;br /&gt;
&lt;br /&gt;
==TypeDefs==&lt;br /&gt;
&lt;br /&gt;
===LPPL_YYSTYPE===&lt;br /&gt;
&lt;br /&gt;
Full definition for typedef &#039;&#039;&#039;LPPL_YYTYPE&#039;&#039;&#039;: found in file &amp;lt;&#039;&#039;&#039;pl_parse.h&#039;&#039;&#039;&amp;gt;. &#039;&#039;&#039;Partial&#039;&#039;&#039;, extracted, compiler-directives-excluded/simplified definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct tagPL_YYSTYPE        // YYSTYPE for ParseLine&lt;br /&gt;
{&lt;br /&gt;
    // N.B.:  The first item in this struct *MUST* be the TOKEN&lt;br /&gt;
    //   because when we pass it as an argument to an LPPRIMFNS&lt;br /&gt;
    //   we might need it to be an LPPL_YYSTYPE (for a function strand)&lt;br /&gt;
    //   or an LPTOKEN (single function).&lt;br /&gt;
    TOKEN   tkToken;                // 00:  Token info (28 bytes)&lt;br /&gt;
    UINT    TknCount;               // 1C:  Count of adjacent tokens including this one&lt;br /&gt;
    UINT    YYInuse:1,              // 20:  00000001:  This entry is in use&lt;br /&gt;
            YYIndirect:1,           //      00000002:  Arg is indirect&lt;br /&gt;
            YYPerm:1,               //      00000004:  Item is permanent, don&#039;t free&lt;br /&gt;
            YYStranding:1,          //      00000008:  Item is in the process of being stranded&lt;br /&gt;
            :28;                    //      FFFFFFF0:  Available bits&lt;br /&gt;
&lt;br /&gt;
    struct tagPL_YYSTYPE&lt;br /&gt;
           *lpYYFcnBase,            // 24:  Ptr to base function/operator&lt;br /&gt;
                                    //      Not valid outside the enclosing&lt;br /&gt;
                                    //        invocation of ParseLine&lt;br /&gt;
           *lpYYStrandBase,         // 28:  Ptr to this token&#039;s strand base&lt;br /&gt;
           *lpplYYArgCurry,         // 2C:  Ptr to left argument curry&lt;br /&gt;
           *lpplYYIdxCurry,         // 30:  Ptr to axis curry&lt;br /&gt;
           *lpplYYFcnCurry,         // 34:  ...         function ...&lt;br /&gt;
           *lpplYYOpRCurry;         // 38:  ...    right operand ...&lt;br /&gt;
    LPTOKEN lptkLftBrace,           // 3C:  Ptr to the AFO&#039;s left brace token&lt;br /&gt;
            lptkRhtBrace;           // 40:  ...              right ...&lt;br /&gt;
                                    // 44:  Length&lt;br /&gt;
} PL_YYSTYPE, *LPPL_YYSTYPE;        // Data type of yacc stack; most frequently used is LPPL_YYSTYPE, long pointer to the above structure.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* In the above code snippet note the &#039;&#039;&#039;nested struct&#039;&#039;&#039; formation.  &#039;&#039;&#039;Inner struct tagPL_YYSTYPE resides within code confines&#039;&#039;&#039; of outer struct &#039;&#039;same-name&#039;&#039; tagPL_YYSTYPE.  This formation parallels nicely with APL&#039;s workspace &#039;&#039;&#039;[[System_Command_SI|State Indicator )SI]]&#039;&#039;&#039; intrinsic Interpreter design feature which is used for APL-programmer debugging purposes.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* For ⎕ System Function and Primary APL Function calls, the above typedef is the normal or the expected - &#039;&#039;&#039;returned value-group&#039;&#039;&#039;, the returned value-set structure.  Further, since NARS by its very nature handles nested arrays, the above structure similarly manages nested data arrays well.  In case it is not obvious to anyone reading this web page or examining NARS source code - NARS represents a highly evolved, data-fluid, APL Interpreter with a full, rich symbol-set programming environment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LPPL_YYSTYPE&#039;&#039;&#039; is customarily used as a &#039;&#039;&#039;variable-type&#039;&#039;&#039;, as per the following:&amp;lt;br&amp;gt;&lt;br /&gt;
    LPPL_YYSTYPE lpYYRes = NULL,    // initialize, lpYYRes will be Ptr to result of a ⎕ quad System Function or Primary APL Function call&lt;br /&gt;
and &#039;&#039;&#039;macro YYAlloc&#039;&#039;&#039; (def. file &amp;lt;macros.h&amp;gt;) call instantiated, then with specific values inserted:&amp;lt;br&amp;gt;&lt;br /&gt;
    lpYYRes = YYAlloc ();           // Allocate free memory, fill LPPL_YYSTYPE memory structure with default setup/values, e.g. &amp;lt;qf_ec.c&amp;gt;&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=25%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TOKEN===&lt;br /&gt;
&lt;br /&gt;
Full definition for typedef &#039;&#039;&#039;TOKEN&#039;&#039;&#039;: found in file &amp;lt;&#039;&#039;&#039;tokens.h&#039;&#039;&#039;&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct tagTOKEN&lt;br /&gt;
{&lt;br /&gt;
    TKFLAGS          tkFlags;       // 00:  The flags part (numbers shown at left are beginning byte # in structure)&lt;br /&gt;
    SO_ENUM          tkSynObj;      // 04:  The Syntax Object for this token&lt;br /&gt;
    TOKEN_DATA       tkData;        // 08:  The data part (16 bytes=18 Hex - 08 Hex = 10 Hex)&lt;br /&gt;
    int              tkCharIndex;   // 18:  Index into the input line of this token&lt;br /&gt;
                                    // 1C:  Length (1C Hex = 16+12 decimal = byte #28)&lt;br /&gt;
} TOKEN, *LPTOKEN;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Primary sample usage&amp;lt;/u&amp;gt;: Above typedef TOKEN is the first type-var found in &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#LPPL_YYSTYPE|typedef LPPL_YYSTYPE]]&#039;&#039;&#039; above, ref. TOKEN use just below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    TOKEN tkToken; // (var name = tkToken, extensively used in System and APL Function calls)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Linked or indirect referencing through typed variable-name example&amp;lt;/u&amp;gt;: (to fill in a result token):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Sample token type choices: TKT_VARNAMED, TKT_VARIMMED, TKT_LSTIMMED, TKT_LSTARRAY, TKT_LSTMULT, TKT_VARARRAY(primary), TKT_STRAND and TKT_STRING.&lt;br /&gt;
    // Full list of token types found in file &amp;lt;tokens.h&amp;gt;. TKT_VARARRAY used just below:&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==tkToken Commonly Used Structures==&lt;br /&gt;
C Source Code Sample Short List of &#039;&#039;&#039;tkToken Structure Groupings&#039;&#039;&#039; Found in files &amp;lt;qf_*.c and pf_*.c&amp;gt; Functions with FileName plus Line # Cross References and &#039;&#039;&#039;Frequencies&#039;&#039;&#039; (per C:\NARS2000\trunk qf_*.c/pf_*.c files) as of Mon 8/17/15:&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! FileName&lt;br /&gt;
! Line #&lt;br /&gt;
! Structure/Value&lt;br /&gt;
! Overall Found Freq&lt;br /&gt;
! Overall Found % Tot&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 237|| tkToken|| 820|| 100.0%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 67|| tkToken.tkCharIndex|| 134|| 16.3%&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 182|| tkToken.tkData.tkBoolean|| 13|| 1.6%&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 162|| tkToken.tkData.tkChar|| 5|| 0.6%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 179|| tkToken.tkData.tkFloat|| 9|| 1.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 66|| tkToken.tkData.tkGlbData|| 135|| 16.5%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 98|| tkToken.tkData.tkInteger|| 25|| 3.0%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 309|| tkToken.tkData.tkLongest|| 18|| 2.2%&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 275|| tkToken.tkData.tkSym|| 3|| 0.4%&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 268|| tkToken.tkData.tkVoid|| 1|| 0.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 64|| tkToken.tkFlags.ImmType|| 145|| 17.7%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 65|| tkToken.tkFlags.NoDisplay|| 140|| 17.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 63|| tkToken.tkFlags.TknType|| 148|| 18.0%&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 774|| tkToken.tkSynObj|| 1|| 0.1%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
One analogy to NARS tkToken structure groupings can be found in Particle Physics where Quarks, Leptons, Gluons and Gravitons comprise a particle class known as &#039;&#039;&#039;[http://physics.about.com/od/atomsparticles/a/particles.htm Fermions]&#039;&#039;&#039;; &#039;&#039;particle&#039;&#039; &amp;lt;u&amp;gt;and&amp;lt;/u&amp;gt; &#039;&#039;C code&#039;&#039; subtypes or subclasses also exist.  NARS tkToken structure groupings, just as is true for Fermions, &amp;lt;u&amp;gt;allows for a wide range of C coded functionality groupings&amp;lt;/u&amp;gt;.   tkToken is a convenient way of grouping several pieces of related information together with flexibility for handling &#039;&#039;&#039;potentially broadly different&#039;&#039;&#039; datatypes, shapes and even functionality.  A nested matrix of mixed elements can be handled, as well accommodation for workspace state indicator stack value-sets - all within tkToken structures.&lt;br /&gt;
&lt;br /&gt;
==tkToken Structures More Detailed Sample Uses Table==&lt;br /&gt;
C Source Code &amp;lt;u&amp;gt;&#039;&#039;&#039;Sample Uses&#039;&#039;&#039;&amp;lt;/u&amp;gt; Unique (duplicates removed) List of &#039;&#039;&#039;tkToken Structure = Values&#039;&#039;&#039; Found in files &amp;lt;qf_*.c and pf_*.c&amp;gt; Functions with FileName plus Line # Cross References (per C:\NARS2000\trunk qf_*.c/pf_*.c files), sorted by source filename, as of Mon 8/17/15:&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! FileName&lt;br /&gt;
! Line #&lt;br /&gt;
! Ref. Variable Name -&amp;gt; Structure Group = Value&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 63|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_VARARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadA);&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 67|| lpYYRes-&amp;gt;tkToken.tkCharIndex = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| qf_at.c|| 406|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
|-&lt;br /&gt;
| qf_av.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadAV);&lt;br /&gt;
|-&lt;br /&gt;
| qf_d.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadD);&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 176|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_VARIMMED;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 177|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_FLOAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 179|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 96|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_INT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 110|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_BOOL;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 115|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_INT64;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 120|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_FLOAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 125|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_CHAR16;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 130|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_APA;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 135|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_HETERO;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 140|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_NESTED;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 145|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_RAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 150|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_VFP;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 307|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 309|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_em.c|| 70|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hGlbRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_fx.c|| 353|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = GetQuadIO () + SF_Fcns.uErrLine;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 493|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplIntegerRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 506|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 806|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = TRUE;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 275|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplFileOff;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 592|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = (aplLongestRht NE 0);&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 593|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = TieNum;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 1083|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hGlbRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 1091|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplLongestRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 3298|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplFileSize;&lt;br /&gt;
|-&lt;br /&gt;
| qf_t.c|| 75|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatSec;&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 160|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_CHAR;&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 162|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = wc;&lt;br /&gt;
|-&lt;br /&gt;
| qf_ucs.c|| 206|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_wa.c|| 70|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = msex.ullAvailPhys + msex.ullAvailPageFile;&lt;br /&gt;
|-&lt;br /&gt;
| pf_bar.c|| 323|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (*lphGlbRes);&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 255|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbLft);&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 259|| lpYYRes2 = PrimFnDydCircleSlope_EM_YY (&amp;amp;lpYYRes-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 416|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = lptkRhtArg-&amp;gt;tkData.tkSym-&amp;gt;stFlags.ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 418|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = lptkRhtArg-&amp;gt;tkData.tkSym-&amp;gt;stData.stLongest;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 425|| lpYYRes-&amp;gt;tkToken = *lptkRhtArg;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 178|| lpYYRes-&amp;gt;tkToken = tkZero;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 252|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_BOOL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 374|| lpYYRes-&amp;gt;tkToken = *CopyToken_EM (lptkRhtArg, FALSE);&lt;br /&gt;
|-&lt;br /&gt;
| pf_darrow.c|| 372|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplTypeRht);&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 220|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = 1;&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 481|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType =&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 526|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData =&lt;br /&gt;
|-&lt;br /&gt;
| pf_dshoe.c|| 161|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbZilde);&lt;br /&gt;
|-&lt;br /&gt;
| pf_dshoe.c|| 480|| hGlbGup = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 219|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = FALSE;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 224|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = 0;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 229|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = 0;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 234|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = L&#039; &#039;;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 248|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = lptkRhtArg-&amp;gt;tkFlags.ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 309|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hSymGlbRes;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtackjot.c|| 375|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = aplCharRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 2398|| hGlbGupLft = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 2429|| hGlbGupRht = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 3731|| bCmp = lpYYTmp-&amp;gt;tkToken.tkData.tkBoolean;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsund.c|| 279|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // Filled in below&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsund.c|| 288|| lpMemRes = &amp;amp;lpYYRes-&amp;gt;tkToken.tkData.tkBoolean;&lt;br /&gt;
|-&lt;br /&gt;
| pf_equalund.c|| 532|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = (APLBOOL) ((BIT0 &amp;amp; aplIntegerRes) NE bNotEqual);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 117|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplTypeNam);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 119|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestNam;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 120|| lpYYRes-&amp;gt;tkToken.tkCharIndex = lptkLstArg-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 127|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbNam);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 591|| *((LPAPLBOOL) lpMemRes) &amp;amp;#124;= lpYYItm-&amp;gt;tkToken.tkData.tkBoolean &amp;lt;&amp;lt; uBitIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 604|| *((LPAPLINT) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkInteger;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 610|| *((LPAPLFLOAT) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkFloat;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 616|| *((LPAPLCHAR) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkChar;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 639|| lpSymTmp = MyGlobalLock (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 645|| MyGlobalUnlock (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData); lpSymTmp = NULL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 648|| DbgGlobalFree (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData); lpYYItm-&amp;gt;tkToken.tkData.tkGlbData = NULL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 774|| lpYYRes-&amp;gt;tkToken.tkSynObj = soA;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 878|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeNam;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2016|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_LSTIMMED;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2019|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_LSTARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2514|| lpMemRes[0] = lpYYItm-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2546|| hGlbSubRht = lpYYSub-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2913|| lpYYRes2 = PrimFnDydRho_EM_YY (&amp;amp;lpYYRes1-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2924|| hGlbRes = lpYYRes2-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 3593|| hGlbSubLst2 = lpYYItm-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 4536|| lpYYRes2 = ExecFuncStr_EM_YY (&amp;amp;lpYYRes1-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 212|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 214|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongest;&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 316|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbRht);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 263|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1769|| lpYYRes2-&amp;gt;tkToken.tkFlags.TknType = TKT_VARARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1772|| lpYYRes2-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbLft);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1773|| lpYYRes2-&amp;gt;tkToken.tkCharIndex = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1776|| lpYYRes3 = PrimFnDydCircleSlope_EM_YY (&amp;amp;lpYYRes2-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1996|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 2396|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (hGlbRes, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3014|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeSubRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3016|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestSubRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3034|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (hGlbRht, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rtack.c|| 188|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbArg);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rtack.c|| 194|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplType);&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 228|| lpMemRht = &amp;amp;lpYYRht-&amp;gt;tkToken.tkData.tkInteger;&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 232|| hGlbRht = lpYYRht-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 278|| *lpMemRes++ = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_uarrow.c|| 232|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (lpSymGlb, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_utackjot.c|| 379|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay &amp;amp;#124;= (exitType EQ EXITTYPE_NODISPLAY);&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Variable Types==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Frequently_Used_TypeDef_Structures_and_Variables&amp;diff=2772</id>
		<title>Frequently Used TypeDef Structures and Variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Frequently_Used_TypeDef_Structures_and_Variables&amp;diff=2772"/>
		<updated>2015-08-18T14:19:31Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* tkToken Structures More Detailed Sample Uses Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;NARS C &amp;lt;u&amp;gt;Source Code&amp;lt;/u&amp;gt; Frequently Used TypeDef Structures and Variables:&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
NARS has multiple frequently used TypeDefs, Structures, Type-Variables and Variables. Familiarity with these structures, including variables employed, is essential toward gaining increased understanding of how NARS C source code works, including insight into C program flow.&lt;br /&gt;
&lt;br /&gt;
==TypeDefs==&lt;br /&gt;
&lt;br /&gt;
===LPPL_YYSTYPE===&lt;br /&gt;
&lt;br /&gt;
Full definition for typedef &#039;&#039;&#039;LPPL_YYTYPE&#039;&#039;&#039;: found in file &amp;lt;&#039;&#039;&#039;pl_parse.h&#039;&#039;&#039;&amp;gt;. &#039;&#039;&#039;Partial&#039;&#039;&#039;, extracted, compiler-directives-excluded/simplified definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct tagPL_YYSTYPE        // YYSTYPE for ParseLine&lt;br /&gt;
{&lt;br /&gt;
    // N.B.:  The first item in this struct *MUST* be the TOKEN&lt;br /&gt;
    //   because when we pass it as an argument to an LPPRIMFNS&lt;br /&gt;
    //   we might need it to be an LPPL_YYSTYPE (for a function strand)&lt;br /&gt;
    //   or an LPTOKEN (single function).&lt;br /&gt;
    TOKEN   tkToken;                // 00:  Token info (28 bytes)&lt;br /&gt;
    UINT    TknCount;               // 1C:  Count of adjacent tokens including this one&lt;br /&gt;
    UINT    YYInuse:1,              // 20:  00000001:  This entry is in use&lt;br /&gt;
            YYIndirect:1,           //      00000002:  Arg is indirect&lt;br /&gt;
            YYPerm:1,               //      00000004:  Item is permanent, don&#039;t free&lt;br /&gt;
            YYStranding:1,          //      00000008:  Item is in the process of being stranded&lt;br /&gt;
            :28;                    //      FFFFFFF0:  Available bits&lt;br /&gt;
&lt;br /&gt;
    struct tagPL_YYSTYPE&lt;br /&gt;
           *lpYYFcnBase,            // 24:  Ptr to base function/operator&lt;br /&gt;
                                    //      Not valid outside the enclosing&lt;br /&gt;
                                    //        invocation of ParseLine&lt;br /&gt;
           *lpYYStrandBase,         // 28:  Ptr to this token&#039;s strand base&lt;br /&gt;
           *lpplYYArgCurry,         // 2C:  Ptr to left argument curry&lt;br /&gt;
           *lpplYYIdxCurry,         // 30:  Ptr to axis curry&lt;br /&gt;
           *lpplYYFcnCurry,         // 34:  ...         function ...&lt;br /&gt;
           *lpplYYOpRCurry;         // 38:  ...    right operand ...&lt;br /&gt;
    LPTOKEN lptkLftBrace,           // 3C:  Ptr to the AFO&#039;s left brace token&lt;br /&gt;
            lptkRhtBrace;           // 40:  ...              right ...&lt;br /&gt;
                                    // 44:  Length&lt;br /&gt;
} PL_YYSTYPE, *LPPL_YYSTYPE;        // Data type of yacc stack; most frequently used is LPPL_YYSTYPE, long pointer to the above structure.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* In the above code snippet note the &#039;&#039;&#039;nested struct&#039;&#039;&#039; formation.  &#039;&#039;&#039;Inner struct tagPL_YYSTYPE resides within code confines&#039;&#039;&#039; of outer struct &#039;&#039;same-name&#039;&#039; tagPL_YYSTYPE.  This formation parallels nicely with APL&#039;s workspace &#039;&#039;&#039;[[System_Command_SI|State Indicator )SI]]&#039;&#039;&#039; intrinsic Interpreter design feature which is used for APL-programmer debugging purposes.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* For ⎕ System Function and Primary APL Function calls, the above typedef is the normal or the expected - &#039;&#039;&#039;returned value-group&#039;&#039;&#039;, the returned value-set structure.  Further, since NARS by its very nature handles nested arrays, the above structure similarly manages nested data arrays well.  In case it is not obvious to anyone reading this web page or examining NARS source code - NARS represents a highly evolved, data-fluid, APL Interpreter with a full, rich symbol-set programming environment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LPPL_YYSTYPE&#039;&#039;&#039; is customarily used as a &#039;&#039;&#039;variable-type&#039;&#039;&#039;, as per the following:&amp;lt;br&amp;gt;&lt;br /&gt;
    LPPL_YYSTYPE lpYYRes = NULL,    // initialize, lpYYRes will be Ptr to result of a ⎕ quad System Function or Primary APL Function call&lt;br /&gt;
and &#039;&#039;&#039;macro YYAlloc&#039;&#039;&#039; (def. file &amp;lt;macros.h&amp;gt;) call instantiated, then with specific values inserted:&amp;lt;br&amp;gt;&lt;br /&gt;
    lpYYRes = YYAlloc ();           // Allocate free memory, fill LPPL_YYSTYPE memory structure with default setup/values, e.g. &amp;lt;qf_ec.c&amp;gt;&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=25%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TOKEN===&lt;br /&gt;
&lt;br /&gt;
Full definition for typedef &#039;&#039;&#039;TOKEN&#039;&#039;&#039;: found in file &amp;lt;&#039;&#039;&#039;tokens.h&#039;&#039;&#039;&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct tagTOKEN&lt;br /&gt;
{&lt;br /&gt;
    TKFLAGS          tkFlags;       // 00:  The flags part (numbers shown at left are beginning byte # in structure)&lt;br /&gt;
    SO_ENUM          tkSynObj;      // 04:  The Syntax Object for this token&lt;br /&gt;
    TOKEN_DATA       tkData;        // 08:  The data part (16 bytes=18 Hex - 08 Hex = 10 Hex)&lt;br /&gt;
    int              tkCharIndex;   // 18:  Index into the input line of this token&lt;br /&gt;
                                    // 1C:  Length (1C Hex = 16+12 decimal = byte #28)&lt;br /&gt;
} TOKEN, *LPTOKEN;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Primary sample usage&amp;lt;/u&amp;gt;: Above typedef TOKEN is the first type-var found in &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#LPPL_YYSTYPE|typedef LPPL_YYSTYPE]]&#039;&#039;&#039; above, ref. TOKEN use just below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    TOKEN tkToken; // (var name = tkToken, extensively used in System and APL Function calls)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Linked or indirect referencing through typed variable-name example&amp;lt;/u&amp;gt;: (to fill in a result token):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Sample token type choices: TKT_VARNAMED, TKT_VARIMMED, TKT_LSTIMMED, TKT_LSTARRAY, TKT_LSTMULT, TKT_VARARRAY(primary), TKT_STRAND and TKT_STRING.&lt;br /&gt;
    // Full list of token types found in file &amp;lt;tokens.h&amp;gt;. TKT_VARARRAY used just below:&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==tkToken Commonly Used Structures==&lt;br /&gt;
C Source Code Sample Short List of &#039;&#039;&#039;tkToken Structure Groupings&#039;&#039;&#039; Found in files &amp;lt;qf_*.c and pf_*.c&amp;gt; Functions with FileName plus Line # Cross References and &#039;&#039;&#039;Frequencies&#039;&#039;&#039; (per C:\NARS2000\trunk qf_*.c/pf_*.c files) as of Mon 8/17/15:&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! FileName&lt;br /&gt;
! Line #&lt;br /&gt;
! Structure/Value&lt;br /&gt;
! Overall Found Freq&lt;br /&gt;
! Overall Found % Tot&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 237|| tkToken|| 820|| 100.0%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 67|| tkToken.tkCharIndex|| 134|| 16.3%&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 182|| tkToken.tkData.tkBoolean|| 13|| 1.6%&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 162|| tkToken.tkData.tkChar|| 5|| 0.6%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 179|| tkToken.tkData.tkFloat|| 9|| 1.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 66|| tkToken.tkData.tkGlbData|| 135|| 16.5%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 98|| tkToken.tkData.tkInteger|| 25|| 3.0%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 309|| tkToken.tkData.tkLongest|| 18|| 2.2%&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 275|| tkToken.tkData.tkSym|| 3|| 0.4%&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 268|| tkToken.tkData.tkVoid|| 1|| 0.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 64|| tkToken.tkFlags.ImmType|| 145|| 17.7%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 65|| tkToken.tkFlags.NoDisplay|| 140|| 17.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 63|| tkToken.tkFlags.TknType|| 148|| 18.0%&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 774|| tkToken.tkSynObj|| 1|| 0.1%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
One analogy to NARS tkToken structure groupings can be found in Particle Physics where Quarks, Leptons, Gluons and Gravitons comprise a particle class known as &#039;&#039;&#039;[http://physics.about.com/od/atomsparticles/a/particles.htm Fermions]&#039;&#039;&#039;.  NARS tkToken structure groupings, just as is true for Fermions, &amp;lt;u&amp;gt;allows for a wide range of C coded functionality groupings&amp;lt;/u&amp;gt;.   tkToken is a convenient way of grouping several pieces of related information together with flexibility for handling &#039;&#039;&#039;potentially broadly different&#039;&#039;&#039; datatypes, shapes and even functionality.  A nested matrix of mixed elements can be handled, as well accommodation for workspace state indicator stack value-sets - all within tkToken structures.&lt;br /&gt;
&lt;br /&gt;
==tkToken Structures More Detailed Sample Uses Table==&lt;br /&gt;
C Source Code &amp;lt;u&amp;gt;&#039;&#039;&#039;Sample Uses&#039;&#039;&#039;&amp;lt;/u&amp;gt; Unique (duplicates removed) List of &#039;&#039;&#039;tkToken Structure = Values&#039;&#039;&#039; Found in files &amp;lt;qf_*.c and pf_*.c&amp;gt; Functions with FileName plus Line # Cross References (per C:\NARS2000\trunk qf_*.c/pf_*.c files), sorted by source filename, as of Mon 8/17/15:&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! FileName&lt;br /&gt;
! Line #&lt;br /&gt;
! Ref. Variable Name -&amp;gt; Structure Group = Value&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 63|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_VARARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadA);&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 67|| lpYYRes-&amp;gt;tkToken.tkCharIndex = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| qf_at.c|| 406|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
|-&lt;br /&gt;
| qf_av.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadAV);&lt;br /&gt;
|-&lt;br /&gt;
| qf_d.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadD);&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 176|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_VARIMMED;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 177|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_FLOAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 179|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 96|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_INT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 110|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_BOOL;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 115|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_INT64;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 120|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_FLOAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 125|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_CHAR16;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 130|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_APA;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 135|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_HETERO;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 140|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_NESTED;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 145|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_RAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 150|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_VFP;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 307|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 309|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_em.c|| 70|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hGlbRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_fx.c|| 353|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = GetQuadIO () + SF_Fcns.uErrLine;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 493|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplIntegerRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 506|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 806|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = TRUE;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 275|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplFileOff;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 592|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = (aplLongestRht NE 0);&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 593|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = TieNum;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 1083|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hGlbRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 1091|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplLongestRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 3298|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplFileSize;&lt;br /&gt;
|-&lt;br /&gt;
| qf_t.c|| 75|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatSec;&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 160|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_CHAR;&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 162|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = wc;&lt;br /&gt;
|-&lt;br /&gt;
| qf_ucs.c|| 206|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_wa.c|| 70|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = msex.ullAvailPhys + msex.ullAvailPageFile;&lt;br /&gt;
|-&lt;br /&gt;
| pf_bar.c|| 323|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (*lphGlbRes);&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 255|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbLft);&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 259|| lpYYRes2 = PrimFnDydCircleSlope_EM_YY (&amp;amp;lpYYRes-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 416|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = lptkRhtArg-&amp;gt;tkData.tkSym-&amp;gt;stFlags.ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 418|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = lptkRhtArg-&amp;gt;tkData.tkSym-&amp;gt;stData.stLongest;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 425|| lpYYRes-&amp;gt;tkToken = *lptkRhtArg;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 178|| lpYYRes-&amp;gt;tkToken = tkZero;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 252|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_BOOL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 374|| lpYYRes-&amp;gt;tkToken = *CopyToken_EM (lptkRhtArg, FALSE);&lt;br /&gt;
|-&lt;br /&gt;
| pf_darrow.c|| 372|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplTypeRht);&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 220|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = 1;&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 481|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType =&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 526|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData =&lt;br /&gt;
|-&lt;br /&gt;
| pf_dshoe.c|| 161|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbZilde);&lt;br /&gt;
|-&lt;br /&gt;
| pf_dshoe.c|| 480|| hGlbGup = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 219|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = FALSE;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 224|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = 0;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 229|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = 0;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 234|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = L&#039; &#039;;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 248|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = lptkRhtArg-&amp;gt;tkFlags.ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 309|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hSymGlbRes;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtackjot.c|| 375|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = aplCharRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 2398|| hGlbGupLft = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 2429|| hGlbGupRht = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 3731|| bCmp = lpYYTmp-&amp;gt;tkToken.tkData.tkBoolean;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsund.c|| 279|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; // Filled in below&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsund.c|| 288|| lpMemRes = &amp;amp;lpYYRes-&amp;gt;tkToken.tkData.tkBoolean;&lt;br /&gt;
|-&lt;br /&gt;
| pf_equalund.c|| 532|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = (APLBOOL) ((BIT0 &amp;amp; aplIntegerRes) NE bNotEqual);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 117|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplTypeNam);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 119|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestNam;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 120|| lpYYRes-&amp;gt;tkToken.tkCharIndex = lptkLstArg-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 127|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbNam);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 591|| *((LPAPLBOOL) lpMemRes) &amp;amp;#124;= lpYYItm-&amp;gt;tkToken.tkData.tkBoolean &amp;lt;&amp;lt; uBitIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 604|| *((LPAPLINT) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkInteger;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 610|| *((LPAPLFLOAT) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkFloat;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 616|| *((LPAPLCHAR) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkChar;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 639|| lpSymTmp = MyGlobalLock (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 645|| MyGlobalUnlock (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData); lpSymTmp = NULL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 648|| DbgGlobalFree (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData); lpYYItm-&amp;gt;tkToken.tkData.tkGlbData = NULL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 774|| lpYYRes-&amp;gt;tkToken.tkSynObj = soA;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 878|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeNam;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2016|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_LSTIMMED;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2019|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_LSTARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2514|| lpMemRes[0] = lpYYItm-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2546|| hGlbSubRht = lpYYSub-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2913|| lpYYRes2 = PrimFnDydRho_EM_YY (&amp;amp;lpYYRes1-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2924|| hGlbRes = lpYYRes2-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 3593|| hGlbSubLst2 = lpYYItm-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 4536|| lpYYRes2 = ExecFuncStr_EM_YY (&amp;amp;lpYYRes1-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 212|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 214|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongest;&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 316|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbRht);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 263|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1769|| lpYYRes2-&amp;gt;tkToken.tkFlags.TknType = TKT_VARARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1772|| lpYYRes2-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbLft);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1773|| lpYYRes2-&amp;gt;tkToken.tkCharIndex = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1776|| lpYYRes3 = PrimFnDydCircleSlope_EM_YY (&amp;amp;lpYYRes2-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1996|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 2396|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (hGlbRes, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3014|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeSubRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3016|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestSubRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3034|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (hGlbRht, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rtack.c|| 188|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbArg);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rtack.c|| 194|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplType);&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 228|| lpMemRht = &amp;amp;lpYYRht-&amp;gt;tkToken.tkData.tkInteger;&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 232|| hGlbRht = lpYYRht-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 278|| *lpMemRes++ = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_uarrow.c|| 232|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (lpSymGlb, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_utackjot.c|| 379|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay &amp;amp;#124;= (exitType EQ EXITTYPE_NODISPLAY);&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Variable Types==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Frequently_Used_TypeDef_Structures_and_Variables&amp;diff=2771</id>
		<title>Frequently Used TypeDef Structures and Variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Frequently_Used_TypeDef_Structures_and_Variables&amp;diff=2771"/>
		<updated>2015-08-18T14:13:27Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* tkToken Structures More Detailed Sample Uses Table */  corrected vertical bar as amp pound 124 semicolon or &amp;amp;#124;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;NARS C &amp;lt;u&amp;gt;Source Code&amp;lt;/u&amp;gt; Frequently Used TypeDef Structures and Variables:&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
NARS has multiple frequently used TypeDefs, Structures, Type-Variables and Variables. Familiarity with these structures, including variables employed, is essential toward gaining increased understanding of how NARS C source code works, including insight into C program flow.&lt;br /&gt;
&lt;br /&gt;
==TypeDefs==&lt;br /&gt;
&lt;br /&gt;
===LPPL_YYSTYPE===&lt;br /&gt;
&lt;br /&gt;
Full definition for typedef &#039;&#039;&#039;LPPL_YYTYPE&#039;&#039;&#039;: found in file &amp;lt;&#039;&#039;&#039;pl_parse.h&#039;&#039;&#039;&amp;gt;. &#039;&#039;&#039;Partial&#039;&#039;&#039;, extracted, compiler-directives-excluded/simplified definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct tagPL_YYSTYPE        // YYSTYPE for ParseLine&lt;br /&gt;
{&lt;br /&gt;
    // N.B.:  The first item in this struct *MUST* be the TOKEN&lt;br /&gt;
    //   because when we pass it as an argument to an LPPRIMFNS&lt;br /&gt;
    //   we might need it to be an LPPL_YYSTYPE (for a function strand)&lt;br /&gt;
    //   or an LPTOKEN (single function).&lt;br /&gt;
    TOKEN   tkToken;                // 00:  Token info (28 bytes)&lt;br /&gt;
    UINT    TknCount;               // 1C:  Count of adjacent tokens including this one&lt;br /&gt;
    UINT    YYInuse:1,              // 20:  00000001:  This entry is in use&lt;br /&gt;
            YYIndirect:1,           //      00000002:  Arg is indirect&lt;br /&gt;
            YYPerm:1,               //      00000004:  Item is permanent, don&#039;t free&lt;br /&gt;
            YYStranding:1,          //      00000008:  Item is in the process of being stranded&lt;br /&gt;
            :28;                    //      FFFFFFF0:  Available bits&lt;br /&gt;
&lt;br /&gt;
    struct tagPL_YYSTYPE&lt;br /&gt;
           *lpYYFcnBase,            // 24:  Ptr to base function/operator&lt;br /&gt;
                                    //      Not valid outside the enclosing&lt;br /&gt;
                                    //        invocation of ParseLine&lt;br /&gt;
           *lpYYStrandBase,         // 28:  Ptr to this token&#039;s strand base&lt;br /&gt;
           *lpplYYArgCurry,         // 2C:  Ptr to left argument curry&lt;br /&gt;
           *lpplYYIdxCurry,         // 30:  Ptr to axis curry&lt;br /&gt;
           *lpplYYFcnCurry,         // 34:  ...         function ...&lt;br /&gt;
           *lpplYYOpRCurry;         // 38:  ...    right operand ...&lt;br /&gt;
    LPTOKEN lptkLftBrace,           // 3C:  Ptr to the AFO&#039;s left brace token&lt;br /&gt;
            lptkRhtBrace;           // 40:  ...              right ...&lt;br /&gt;
                                    // 44:  Length&lt;br /&gt;
} PL_YYSTYPE, *LPPL_YYSTYPE;        // Data type of yacc stack; most frequently used is LPPL_YYSTYPE, long pointer to the above structure.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* In the above code snippet note the &#039;&#039;&#039;nested struct&#039;&#039;&#039; formation.  &#039;&#039;&#039;Inner struct tagPL_YYSTYPE resides within code confines&#039;&#039;&#039; of outer struct &#039;&#039;same-name&#039;&#039; tagPL_YYSTYPE.  This formation parallels nicely with APL&#039;s workspace &#039;&#039;&#039;[[System_Command_SI|State Indicator )SI]]&#039;&#039;&#039; intrinsic Interpreter design feature which is used for APL-programmer debugging purposes.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* For ⎕ System Function and Primary APL Function calls, the above typedef is the normal or the expected - &#039;&#039;&#039;returned value-group&#039;&#039;&#039;, the returned value-set structure.  Further, since NARS by its very nature handles nested arrays, the above structure similarly manages nested data arrays well.  In case it is not obvious to anyone reading this web page or examining NARS source code - NARS represents a highly evolved, data-fluid, APL Interpreter with a full, rich symbol-set programming environment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LPPL_YYSTYPE&#039;&#039;&#039; is customarily used as a &#039;&#039;&#039;variable-type&#039;&#039;&#039;, as per the following:&amp;lt;br&amp;gt;&lt;br /&gt;
    LPPL_YYSTYPE lpYYRes = NULL,    // initialize, lpYYRes will be Ptr to result of a ⎕ quad System Function or Primary APL Function call&lt;br /&gt;
and &#039;&#039;&#039;macro YYAlloc&#039;&#039;&#039; (def. file &amp;lt;macros.h&amp;gt;) call instantiated, then with specific values inserted:&amp;lt;br&amp;gt;&lt;br /&gt;
    lpYYRes = YYAlloc ();           // Allocate free memory, fill LPPL_YYSTYPE memory structure with default setup/values, e.g. &amp;lt;qf_ec.c&amp;gt;&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=25%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TOKEN===&lt;br /&gt;
&lt;br /&gt;
Full definition for typedef &#039;&#039;&#039;TOKEN&#039;&#039;&#039;: found in file &amp;lt;&#039;&#039;&#039;tokens.h&#039;&#039;&#039;&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct tagTOKEN&lt;br /&gt;
{&lt;br /&gt;
    TKFLAGS          tkFlags;       // 00:  The flags part (numbers shown at left are beginning byte # in structure)&lt;br /&gt;
    SO_ENUM          tkSynObj;      // 04:  The Syntax Object for this token&lt;br /&gt;
    TOKEN_DATA       tkData;        // 08:  The data part (16 bytes=18 Hex - 08 Hex = 10 Hex)&lt;br /&gt;
    int              tkCharIndex;   // 18:  Index into the input line of this token&lt;br /&gt;
                                    // 1C:  Length (1C Hex = 16+12 decimal = byte #28)&lt;br /&gt;
} TOKEN, *LPTOKEN;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Primary sample usage&amp;lt;/u&amp;gt;: Above typedef TOKEN is the first type-var found in &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#LPPL_YYSTYPE|typedef LPPL_YYSTYPE]]&#039;&#039;&#039; above, ref. TOKEN use just below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    TOKEN tkToken; // (var name = tkToken, extensively used in System and APL Function calls)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Linked or indirect referencing through typed variable-name example&amp;lt;/u&amp;gt;: (to fill in a result token):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Sample token type choices: TKT_VARNAMED, TKT_VARIMMED, TKT_LSTIMMED, TKT_LSTARRAY, TKT_LSTMULT, TKT_VARARRAY(primary), TKT_STRAND and TKT_STRING.&lt;br /&gt;
    // Full list of token types found in file &amp;lt;tokens.h&amp;gt;. TKT_VARARRAY used just below:&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==tkToken Commonly Used Structures==&lt;br /&gt;
C Source Code Sample Short List of &#039;&#039;&#039;tkToken Structure Groupings&#039;&#039;&#039; Found in files &amp;lt;qf_*.c and pf_*.c&amp;gt; Functions with FileName plus Line # Cross References and &#039;&#039;&#039;Frequencies&#039;&#039;&#039; (per C:\NARS2000\trunk qf_*.c/pf_*.c files) as of Mon 8/17/15:&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! FileName&lt;br /&gt;
! Line #&lt;br /&gt;
! Structure/Value&lt;br /&gt;
! Overall Found Freq&lt;br /&gt;
! Overall Found % Tot&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 237|| tkToken|| 820|| 100.0%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 67|| tkToken.tkCharIndex|| 134|| 16.3%&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 182|| tkToken.tkData.tkBoolean|| 13|| 1.6%&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 162|| tkToken.tkData.tkChar|| 5|| 0.6%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 179|| tkToken.tkData.tkFloat|| 9|| 1.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 66|| tkToken.tkData.tkGlbData|| 135|| 16.5%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 98|| tkToken.tkData.tkInteger|| 25|| 3.0%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 309|| tkToken.tkData.tkLongest|| 18|| 2.2%&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 275|| tkToken.tkData.tkSym|| 3|| 0.4%&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 268|| tkToken.tkData.tkVoid|| 1|| 0.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 64|| tkToken.tkFlags.ImmType|| 145|| 17.7%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 65|| tkToken.tkFlags.NoDisplay|| 140|| 17.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 63|| tkToken.tkFlags.TknType|| 148|| 18.0%&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 774|| tkToken.tkSynObj|| 1|| 0.1%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
One analogy to NARS tkToken structure groupings can be found in Particle Physics where Quarks, Leptons, Gluons and Gravitons comprise a particle class known as &#039;&#039;&#039;[http://physics.about.com/od/atomsparticles/a/particles.htm Fermions]&#039;&#039;&#039;.  NARS tkToken structure groupings, just as is true for Fermions, &amp;lt;u&amp;gt;allows for a wide range of C coded functionality groupings&amp;lt;/u&amp;gt;.   tkToken is a convenient way of grouping several pieces of related information together with flexibility for handling &#039;&#039;&#039;potentially broadly different&#039;&#039;&#039; datatypes, shapes and even functionality.  A nested matrix of mixed elements can be handled, as well accommodation for workspace state indicator stack value-sets - all within tkToken structures.&lt;br /&gt;
&lt;br /&gt;
==tkToken Structures More Detailed Sample Uses Table==&lt;br /&gt;
C Source Code &amp;lt;u&amp;gt;&#039;&#039;&#039;Sample Uses&#039;&#039;&#039;&amp;lt;/u&amp;gt; Unique (duplicates removed) List of &#039;&#039;&#039;tkToken Structure = Values&#039;&#039;&#039; Found in files &amp;lt;qf_*.c and pf_*.c&amp;gt; Functions with FileName plus Line # Cross References (per C:\NARS2000\trunk qf_*.c/pf_*.c files), sorted by source filename, as of Mon 8/17/15:&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! FileName&lt;br /&gt;
! Line #&lt;br /&gt;
! Ref. Variable Name -&amp;gt; Structure Group = Value&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 63|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_VARARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadA);&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 67|| lpYYRes-&amp;gt;tkToken.tkCharIndex = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| qf_at.c|| 406|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
|-&lt;br /&gt;
| qf_av.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadAV);&lt;br /&gt;
|-&lt;br /&gt;
| qf_d.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadD);&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 176|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_VARIMMED;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 177|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_FLOAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 179|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 96|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_INT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 110|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_BOOL;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 115|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_INT64;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 120|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_FLOAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 125|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_CHAR16;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 130|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_APA;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 135|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_HETERO;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 140|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_NESTED;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 145|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_RAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 150|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_VFP;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 307|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 309|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_em.c|| 70|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hGlbRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_fx.c|| 353|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = GetQuadIO () + SF_Fcns.uErrLine;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 493|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplIntegerRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 506|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 806|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = TRUE;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 275|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplFileOff;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 592|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = (aplLongestRht NE 0);&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 593|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = TieNum;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 1083|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hGlbRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 1091|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplLongestRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 3298|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplFileSize;&lt;br /&gt;
|-&lt;br /&gt;
| qf_t.c|| 75|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatSec;&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 160|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_CHAR;&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 162|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = wc;&lt;br /&gt;
|-&lt;br /&gt;
| qf_ucs.c|| 206|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_wa.c|| 70|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = msex.ullAvailPhys + msex.ullAvailPageFile;&lt;br /&gt;
|-&lt;br /&gt;
| pf_bar.c|| 323|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (*lphGlbRes);&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 255|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbLft);&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 259|| lpYYRes2 = PrimFnDydCircleSlope_EM_YY (&amp;amp;lpYYRes-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 416|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = lptkRhtArg-&amp;gt;tkData.tkSym-&amp;gt;stFlags.ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 418|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = lptkRhtArg-&amp;gt;tkData.tkSym-&amp;gt;stData.stLongest;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 425|| lpYYRes-&amp;gt;tkToken = *lptkRhtArg;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 178|| lpYYRes-&amp;gt;tkToken = tkZero;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 252|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_BOOL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 374|| lpYYRes-&amp;gt;tkToken = *CopyToken_EM (lptkRhtArg, FALSE);&lt;br /&gt;
|-&lt;br /&gt;
| pf_darrow.c|| 372|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplTypeRht);&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 220|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = 1;&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 481|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType =&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 526|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData =&lt;br /&gt;
|-&lt;br /&gt;
| pf_dshoe.c|| 161|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbZilde);&lt;br /&gt;
|-&lt;br /&gt;
| pf_dshoe.c|| 480|| hGlbGup = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 219|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = FALSE;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 224|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = 0;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 229|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = 0;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 234|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = L&#039; &#039;;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 248|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = lptkRhtArg-&amp;gt;tkFlags.ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 309|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hSymGlbRes;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtackjot.c|| 375|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = aplCharRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 2398|| hGlbGupLft = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 2429|| hGlbGupRht = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 3731|| bCmp = lpYYTmp-&amp;gt;tkToken.tkData.tkBoolean;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsund.c|| 279|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean =&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsund.c|| 288|| lpMemRes = &amp;amp;lpYYRes-&amp;gt;tkToken.tkData.tkBoolean;&lt;br /&gt;
|-&lt;br /&gt;
| pf_equalund.c|| 532|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = (APLBOOL) ((BIT0 &amp;amp; aplIntegerRes) NE bNotEqual);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 117|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplTypeNam);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 119|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestNam;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 120|| lpYYRes-&amp;gt;tkToken.tkCharIndex = lptkLstArg-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 127|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbNam);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 591|| *((LPAPLBOOL) lpMemRes) &amp;amp;#124;= lpYYItm-&amp;gt;tkToken.tkData.tkBoolean &amp;lt;&amp;lt; uBitIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 604|| *((LPAPLINT) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkInteger;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 610|| *((LPAPLFLOAT) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkFloat;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 616|| *((LPAPLCHAR) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkChar;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 639|| lpSymTmp = MyGlobalLock (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 645|| MyGlobalUnlock (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData); lpSymTmp = NULL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 648|| DbgGlobalFree (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData); lpYYItm-&amp;gt;tkToken.tkData.tkGlbData = NULL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 774|| lpYYRes-&amp;gt;tkToken.tkSynObj = soA;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 878|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeNam;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2016|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_LSTIMMED;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2019|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_LSTARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2514|| lpMemRes[0] = lpYYItm-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2546|| hGlbSubRht = lpYYSub-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2913|| lpYYRes2 = PrimFnDydRho_EM_YY (&amp;amp;lpYYRes1-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2924|| hGlbRes = lpYYRes2-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 3593|| hGlbSubLst2 = lpYYItm-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 4536|| lpYYRes2 = ExecFuncStr_EM_YY (&amp;amp;lpYYRes1-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 212|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 214|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongest;&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 316|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbRht);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 263|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1769|| lpYYRes2-&amp;gt;tkToken.tkFlags.TknType = TKT_VARARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1772|| lpYYRes2-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbLft);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1773|| lpYYRes2-&amp;gt;tkToken.tkCharIndex = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1776|| lpYYRes3 = PrimFnDydCircleSlope_EM_YY (&amp;amp;lpYYRes2-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1996|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 2396|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (hGlbRes, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3014|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeSubRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3016|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestSubRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3034|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (hGlbRht, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rtack.c|| 188|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbArg);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rtack.c|| 194|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplType);&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 228|| lpMemRht = &amp;amp;lpYYRht-&amp;gt;tkToken.tkData.tkInteger;&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 232|| hGlbRht = lpYYRht-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 278|| *lpMemRes++ = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_uarrow.c|| 232|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (lpSymGlb, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_utackjot.c|| 379|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay &amp;amp;#124;= (exitType EQ EXITTYPE_NODISPLAY);&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Variable Types==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Frequently_Used_TypeDef_Structures_and_Variables&amp;diff=2770</id>
		<title>Frequently Used TypeDef Structures and Variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Frequently_Used_TypeDef_Structures_and_Variables&amp;diff=2770"/>
		<updated>2015-08-18T13:55:55Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* tkToken Structures More Detailed Sample Uses Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;NARS C &amp;lt;u&amp;gt;Source Code&amp;lt;/u&amp;gt; Frequently Used TypeDef Structures and Variables:&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
NARS has multiple frequently used TypeDefs, Structures, Type-Variables and Variables. Familiarity with these structures, including variables employed, is essential toward gaining increased understanding of how NARS C source code works, including insight into C program flow.&lt;br /&gt;
&lt;br /&gt;
==TypeDefs==&lt;br /&gt;
&lt;br /&gt;
===LPPL_YYSTYPE===&lt;br /&gt;
&lt;br /&gt;
Full definition for typedef &#039;&#039;&#039;LPPL_YYTYPE&#039;&#039;&#039;: found in file &amp;lt;&#039;&#039;&#039;pl_parse.h&#039;&#039;&#039;&amp;gt;. &#039;&#039;&#039;Partial&#039;&#039;&#039;, extracted, compiler-directives-excluded/simplified definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct tagPL_YYSTYPE        // YYSTYPE for ParseLine&lt;br /&gt;
{&lt;br /&gt;
    // N.B.:  The first item in this struct *MUST* be the TOKEN&lt;br /&gt;
    //   because when we pass it as an argument to an LPPRIMFNS&lt;br /&gt;
    //   we might need it to be an LPPL_YYSTYPE (for a function strand)&lt;br /&gt;
    //   or an LPTOKEN (single function).&lt;br /&gt;
    TOKEN   tkToken;                // 00:  Token info (28 bytes)&lt;br /&gt;
    UINT    TknCount;               // 1C:  Count of adjacent tokens including this one&lt;br /&gt;
    UINT    YYInuse:1,              // 20:  00000001:  This entry is in use&lt;br /&gt;
            YYIndirect:1,           //      00000002:  Arg is indirect&lt;br /&gt;
            YYPerm:1,               //      00000004:  Item is permanent, don&#039;t free&lt;br /&gt;
            YYStranding:1,          //      00000008:  Item is in the process of being stranded&lt;br /&gt;
            :28;                    //      FFFFFFF0:  Available bits&lt;br /&gt;
&lt;br /&gt;
    struct tagPL_YYSTYPE&lt;br /&gt;
           *lpYYFcnBase,            // 24:  Ptr to base function/operator&lt;br /&gt;
                                    //      Not valid outside the enclosing&lt;br /&gt;
                                    //        invocation of ParseLine&lt;br /&gt;
           *lpYYStrandBase,         // 28:  Ptr to this token&#039;s strand base&lt;br /&gt;
           *lpplYYArgCurry,         // 2C:  Ptr to left argument curry&lt;br /&gt;
           *lpplYYIdxCurry,         // 30:  Ptr to axis curry&lt;br /&gt;
           *lpplYYFcnCurry,         // 34:  ...         function ...&lt;br /&gt;
           *lpplYYOpRCurry;         // 38:  ...    right operand ...&lt;br /&gt;
    LPTOKEN lptkLftBrace,           // 3C:  Ptr to the AFO&#039;s left brace token&lt;br /&gt;
            lptkRhtBrace;           // 40:  ...              right ...&lt;br /&gt;
                                    // 44:  Length&lt;br /&gt;
} PL_YYSTYPE, *LPPL_YYSTYPE;        // Data type of yacc stack; most frequently used is LPPL_YYSTYPE, long pointer to the above structure.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* In the above code snippet note the &#039;&#039;&#039;nested struct&#039;&#039;&#039; formation.  &#039;&#039;&#039;Inner struct tagPL_YYSTYPE resides within code confines&#039;&#039;&#039; of outer struct &#039;&#039;same-name&#039;&#039; tagPL_YYSTYPE.  This formation parallels nicely with APL&#039;s workspace &#039;&#039;&#039;[[System_Command_SI|State Indicator )SI]]&#039;&#039;&#039; intrinsic Interpreter design feature which is used for APL-programmer debugging purposes.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* For ⎕ System Function and Primary APL Function calls, the above typedef is the normal or the expected - &#039;&#039;&#039;returned value-group&#039;&#039;&#039;, the returned value-set structure.  Further, since NARS by its very nature handles nested arrays, the above structure similarly manages nested data arrays well.  In case it is not obvious to anyone reading this web page or examining NARS source code - NARS represents a highly evolved, data-fluid, APL Interpreter with a full, rich symbol-set programming environment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LPPL_YYSTYPE&#039;&#039;&#039; is customarily used as a &#039;&#039;&#039;variable-type&#039;&#039;&#039;, as per the following:&amp;lt;br&amp;gt;&lt;br /&gt;
    LPPL_YYSTYPE lpYYRes = NULL,    // initialize, lpYYRes will be Ptr to result of a ⎕ quad System Function or Primary APL Function call&lt;br /&gt;
and &#039;&#039;&#039;macro YYAlloc&#039;&#039;&#039; (def. file &amp;lt;macros.h&amp;gt;) call instantiated, then with specific values inserted:&amp;lt;br&amp;gt;&lt;br /&gt;
    lpYYRes = YYAlloc ();           // Allocate free memory, fill LPPL_YYSTYPE memory structure with default setup/values, e.g. &amp;lt;qf_ec.c&amp;gt;&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=25%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TOKEN===&lt;br /&gt;
&lt;br /&gt;
Full definition for typedef &#039;&#039;&#039;TOKEN&#039;&#039;&#039;: found in file &amp;lt;&#039;&#039;&#039;tokens.h&#039;&#039;&#039;&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct tagTOKEN&lt;br /&gt;
{&lt;br /&gt;
    TKFLAGS          tkFlags;       // 00:  The flags part (numbers shown at left are beginning byte # in structure)&lt;br /&gt;
    SO_ENUM          tkSynObj;      // 04:  The Syntax Object for this token&lt;br /&gt;
    TOKEN_DATA       tkData;        // 08:  The data part (16 bytes=18 Hex - 08 Hex = 10 Hex)&lt;br /&gt;
    int              tkCharIndex;   // 18:  Index into the input line of this token&lt;br /&gt;
                                    // 1C:  Length (1C Hex = 16+12 decimal = byte #28)&lt;br /&gt;
} TOKEN, *LPTOKEN;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Primary sample usage&amp;lt;/u&amp;gt;: Above typedef TOKEN is the first type-var found in &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#LPPL_YYSTYPE|typedef LPPL_YYSTYPE]]&#039;&#039;&#039; above, ref. TOKEN use just below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    TOKEN tkToken; // (var name = tkToken, extensively used in System and APL Function calls)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Linked or indirect referencing through typed variable-name example&amp;lt;/u&amp;gt;: (to fill in a result token):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Sample token type choices: TKT_VARNAMED, TKT_VARIMMED, TKT_LSTIMMED, TKT_LSTARRAY, TKT_LSTMULT, TKT_VARARRAY(primary), TKT_STRAND and TKT_STRING.&lt;br /&gt;
    // Full list of token types found in file &amp;lt;tokens.h&amp;gt;. TKT_VARARRAY used just below:&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==tkToken Commonly Used Structures==&lt;br /&gt;
C Source Code Sample Short List of &#039;&#039;&#039;tkToken Structure Groupings&#039;&#039;&#039; Found in files &amp;lt;qf_*.c and pf_*.c&amp;gt; Functions with FileName plus Line # Cross References and &#039;&#039;&#039;Frequencies&#039;&#039;&#039; (per C:\NARS2000\trunk qf_*.c/pf_*.c files) as of Mon 8/17/15:&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! FileName&lt;br /&gt;
! Line #&lt;br /&gt;
! Structure/Value&lt;br /&gt;
! Overall Found Freq&lt;br /&gt;
! Overall Found % Tot&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 237|| tkToken|| 820|| 100.0%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 67|| tkToken.tkCharIndex|| 134|| 16.3%&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 182|| tkToken.tkData.tkBoolean|| 13|| 1.6%&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 162|| tkToken.tkData.tkChar|| 5|| 0.6%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 179|| tkToken.tkData.tkFloat|| 9|| 1.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 66|| tkToken.tkData.tkGlbData|| 135|| 16.5%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 98|| tkToken.tkData.tkInteger|| 25|| 3.0%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 309|| tkToken.tkData.tkLongest|| 18|| 2.2%&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 275|| tkToken.tkData.tkSym|| 3|| 0.4%&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 268|| tkToken.tkData.tkVoid|| 1|| 0.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 64|| tkToken.tkFlags.ImmType|| 145|| 17.7%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 65|| tkToken.tkFlags.NoDisplay|| 140|| 17.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 63|| tkToken.tkFlags.TknType|| 148|| 18.0%&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 774|| tkToken.tkSynObj|| 1|| 0.1%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
One analogy to NARS tkToken structure groupings can be found in Particle Physics where Quarks, Leptons, Gluons and Gravitons comprise a particle class known as &#039;&#039;&#039;[http://physics.about.com/od/atomsparticles/a/particles.htm Fermions]&#039;&#039;&#039;.  NARS tkToken structure groupings, just as is true for Fermions, &amp;lt;u&amp;gt;allows for a wide range of C coded functionality groupings&amp;lt;/u&amp;gt;.   tkToken is a convenient way of grouping several pieces of related information together with flexibility for handling &#039;&#039;&#039;potentially broadly different&#039;&#039;&#039; datatypes, shapes and even functionality.  A nested matrix of mixed elements can be handled, as well accommodation for workspace state indicator stack value-sets - all within tkToken structures.&lt;br /&gt;
&lt;br /&gt;
==tkToken Structures More Detailed Sample Uses Table==&lt;br /&gt;
C Source Code &amp;lt;u&amp;gt;&#039;&#039;&#039;Sample Uses&#039;&#039;&#039;&amp;lt;/u&amp;gt; Unique (duplicates removed) List of &#039;&#039;&#039;tkToken Structure = Values&#039;&#039;&#039; Found in files &amp;lt;qf_*.c and pf_*.c&amp;gt; Functions with FileName plus Line # Cross References (per C:\NARS2000\trunk qf_*.c/pf_*.c files), sorted by source filename, as of Mon 8/17/15:&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! FileName&lt;br /&gt;
! Line #&lt;br /&gt;
! Ref. Variable Name -&amp;gt; Structure Group = Value&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 63|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_VARARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadA);&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 67|| lpYYRes-&amp;gt;tkToken.tkCharIndex = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| qf_at.c|| 406|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
|-&lt;br /&gt;
| qf_av.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadAV);&lt;br /&gt;
|-&lt;br /&gt;
| qf_d.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadD);&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 176|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_VARIMMED;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 177|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_FLOAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 179|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 96|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_INT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 110|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_BOOL;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 115|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_INT64;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 120|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_FLOAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 125|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_CHAR16;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 130|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_APA;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 135|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_HETERO;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 140|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_NESTED;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 145|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_RAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 150|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_VFP;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 307|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 309|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_em.c|| 70|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hGlbRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_fx.c|| 353|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = GetQuadIO () + SF_Fcns.uErrLine;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 493|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplIntegerRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 506|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 806|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = TRUE;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 275|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplFileOff;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 592|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = (aplLongestRht NE 0);&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 593|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = TieNum;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 1083|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hGlbRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 1091|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplLongestRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 3298|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplFileSize;&lt;br /&gt;
|-&lt;br /&gt;
| qf_t.c|| 75|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatSec;&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 160|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_CHAR;&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 162|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = wc;&lt;br /&gt;
|-&lt;br /&gt;
| qf_ucs.c|| 206|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_wa.c|| 70|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = msex.ullAvailPhys + msex.ullAvailPageFile;&lt;br /&gt;
|-&lt;br /&gt;
| pf_bar.c|| 323|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (*lphGlbRes);&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 255|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbLft);&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 259|| lpYYRes2 = PrimFnDydCircleSlope_EM_YY (&amp;amp;lpYYRes-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 416|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = lptkRhtArg-&amp;gt;tkData.tkSym-&amp;gt;stFlags.ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 418|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = lptkRhtArg-&amp;gt;tkData.tkSym-&amp;gt;stData.stLongest;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 425|| lpYYRes-&amp;gt;tkToken = *lptkRhtArg;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 178|| lpYYRes-&amp;gt;tkToken = tkZero;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 252|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_BOOL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 374|| lpYYRes-&amp;gt;tkToken = *CopyToken_EM (lptkRhtArg, FALSE);&lt;br /&gt;
|-&lt;br /&gt;
| pf_darrow.c|| 372|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplTypeRht);&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 220|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = 1;&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 481|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType =&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 526|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData =&lt;br /&gt;
|-&lt;br /&gt;
| pf_dshoe.c|| 161|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbZilde);&lt;br /&gt;
|-&lt;br /&gt;
| pf_dshoe.c|| 480|| hGlbGup = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 219|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = FALSE;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 224|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = 0;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 229|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = 0;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 234|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = L&#039; &#039;;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 248|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = lptkRhtArg-&amp;gt;tkFlags.ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 309|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hSymGlbRes;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtackjot.c|| 375|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = aplCharRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 2398|| hGlbGupLft = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 2429|| hGlbGupRht = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 3731|| bCmp = lpYYTmp-&amp;gt;tkToken.tkData.tkBoolean;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsund.c|| 279|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean =&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsund.c|| 288|| lpMemRes = &amp;amp;lpYYRes-&amp;gt;tkToken.tkData.tkBoolean;&lt;br /&gt;
|-&lt;br /&gt;
| pf_equalund.c|| 532|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = (APLBOOL) ((BIT0 &amp;amp; aplIntegerRes) NE bNotEqual);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 117|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplTypeNam);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 119|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestNam;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 120|| lpYYRes-&amp;gt;tkToken.tkCharIndex = lptkLstArg-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 127|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbNam);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 591|| *((LPAPLBOOL) lpMemRes) |= lpYYItm-&amp;gt;tkToken.tkData.tkBoolean &amp;lt;&amp;lt; uBitIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 604|| *((LPAPLINT) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkInteger;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 610|| *((LPAPLFLOAT) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkFloat;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 616|| *((LPAPLCHAR) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkChar;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 639|| lpSymTmp = MyGlobalLock (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 645|| MyGlobalUnlock (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData); lpSymTmp = NULL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 648|| DbgGlobalFree (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData); lpYYItm-&amp;gt;tkToken.tkData.tkGlbData = NULL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 774|| lpYYRes-&amp;gt;tkToken.tkSynObj = soA;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 878|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeNam;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2016|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_LSTIMMED;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2019|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_LSTARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2514|| lpMemRes[0] = lpYYItm-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2546|| hGlbSubRht = lpYYSub-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2913|| lpYYRes2 = PrimFnDydRho_EM_YY (&amp;amp;lpYYRes1-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2924|| hGlbRes = lpYYRes2-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 3593|| hGlbSubLst2 = lpYYItm-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 4536|| lpYYRes2 = ExecFuncStr_EM_YY (&amp;amp;lpYYRes1-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 212|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 214|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongest;&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 316|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbRht);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 263|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1769|| lpYYRes2-&amp;gt;tkToken.tkFlags.TknType = TKT_VARARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1772|| lpYYRes2-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbLft);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1773|| lpYYRes2-&amp;gt;tkToken.tkCharIndex = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1776|| lpYYRes3 = PrimFnDydCircleSlope_EM_YY (&amp;amp;lpYYRes2-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1996|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 2396|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (hGlbRes, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3014|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeSubRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3016|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestSubRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3034|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (hGlbRht, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rtack.c|| 188|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbArg);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rtack.c|| 194|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplType);&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 228|| lpMemRht = &amp;amp;lpYYRht-&amp;gt;tkToken.tkData.tkInteger;&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 232|| hGlbRht = lpYYRht-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 278|| *lpMemRes++ = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_uarrow.c|| 232|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (lpSymGlb, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_utackjot.c|| 379|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay |= (exitType EQ EXITTYPE_NODISPLAY);&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Variable Types==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Frequently_Used_TypeDef_Structures_and_Variables&amp;diff=2769</id>
		<title>Frequently Used TypeDef Structures and Variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Frequently_Used_TypeDef_Structures_and_Variables&amp;diff=2769"/>
		<updated>2015-08-18T13:41:21Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* tkToken Commonly Used Structures */  analogy added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;NARS C &amp;lt;u&amp;gt;Source Code&amp;lt;/u&amp;gt; Frequently Used TypeDef Structures and Variables:&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
NARS has multiple frequently used TypeDefs, Structures, Type-Variables and Variables. Familiarity with these structures, including variables employed, is essential toward gaining increased understanding of how NARS C source code works, including insight into C program flow.&lt;br /&gt;
&lt;br /&gt;
==TypeDefs==&lt;br /&gt;
&lt;br /&gt;
===LPPL_YYSTYPE===&lt;br /&gt;
&lt;br /&gt;
Full definition for typedef &#039;&#039;&#039;LPPL_YYTYPE&#039;&#039;&#039;: found in file &amp;lt;&#039;&#039;&#039;pl_parse.h&#039;&#039;&#039;&amp;gt;. &#039;&#039;&#039;Partial&#039;&#039;&#039;, extracted, compiler-directives-excluded/simplified definition:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct tagPL_YYSTYPE        // YYSTYPE for ParseLine&lt;br /&gt;
{&lt;br /&gt;
    // N.B.:  The first item in this struct *MUST* be the TOKEN&lt;br /&gt;
    //   because when we pass it as an argument to an LPPRIMFNS&lt;br /&gt;
    //   we might need it to be an LPPL_YYSTYPE (for a function strand)&lt;br /&gt;
    //   or an LPTOKEN (single function).&lt;br /&gt;
    TOKEN   tkToken;                // 00:  Token info (28 bytes)&lt;br /&gt;
    UINT    TknCount;               // 1C:  Count of adjacent tokens including this one&lt;br /&gt;
    UINT    YYInuse:1,              // 20:  00000001:  This entry is in use&lt;br /&gt;
            YYIndirect:1,           //      00000002:  Arg is indirect&lt;br /&gt;
            YYPerm:1,               //      00000004:  Item is permanent, don&#039;t free&lt;br /&gt;
            YYStranding:1,          //      00000008:  Item is in the process of being stranded&lt;br /&gt;
            :28;                    //      FFFFFFF0:  Available bits&lt;br /&gt;
&lt;br /&gt;
    struct tagPL_YYSTYPE&lt;br /&gt;
           *lpYYFcnBase,            // 24:  Ptr to base function/operator&lt;br /&gt;
                                    //      Not valid outside the enclosing&lt;br /&gt;
                                    //        invocation of ParseLine&lt;br /&gt;
           *lpYYStrandBase,         // 28:  Ptr to this token&#039;s strand base&lt;br /&gt;
           *lpplYYArgCurry,         // 2C:  Ptr to left argument curry&lt;br /&gt;
           *lpplYYIdxCurry,         // 30:  Ptr to axis curry&lt;br /&gt;
           *lpplYYFcnCurry,         // 34:  ...         function ...&lt;br /&gt;
           *lpplYYOpRCurry;         // 38:  ...    right operand ...&lt;br /&gt;
    LPTOKEN lptkLftBrace,           // 3C:  Ptr to the AFO&#039;s left brace token&lt;br /&gt;
            lptkRhtBrace;           // 40:  ...              right ...&lt;br /&gt;
                                    // 44:  Length&lt;br /&gt;
} PL_YYSTYPE, *LPPL_YYSTYPE;        // Data type of yacc stack; most frequently used is LPPL_YYSTYPE, long pointer to the above structure.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* In the above code snippet note the &#039;&#039;&#039;nested struct&#039;&#039;&#039; formation.  &#039;&#039;&#039;Inner struct tagPL_YYSTYPE resides within code confines&#039;&#039;&#039; of outer struct &#039;&#039;same-name&#039;&#039; tagPL_YYSTYPE.  This formation parallels nicely with APL&#039;s workspace &#039;&#039;&#039;[[System_Command_SI|State Indicator )SI]]&#039;&#039;&#039; intrinsic Interpreter design feature which is used for APL-programmer debugging purposes.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* For ⎕ System Function and Primary APL Function calls, the above typedef is the normal or the expected - &#039;&#039;&#039;returned value-group&#039;&#039;&#039;, the returned value-set structure.  Further, since NARS by its very nature handles nested arrays, the above structure similarly manages nested data arrays well.  In case it is not obvious to anyone reading this web page or examining NARS source code - NARS represents a highly evolved, data-fluid, APL Interpreter with a full, rich symbol-set programming environment.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LPPL_YYSTYPE&#039;&#039;&#039; is customarily used as a &#039;&#039;&#039;variable-type&#039;&#039;&#039;, as per the following:&amp;lt;br&amp;gt;&lt;br /&gt;
    LPPL_YYSTYPE lpYYRes = NULL,    // initialize, lpYYRes will be Ptr to result of a ⎕ quad System Function or Primary APL Function call&lt;br /&gt;
and &#039;&#039;&#039;macro YYAlloc&#039;&#039;&#039; (def. file &amp;lt;macros.h&amp;gt;) call instantiated, then with specific values inserted:&amp;lt;br&amp;gt;&lt;br /&gt;
    lpYYRes = YYAlloc ();           // Allocate free memory, fill LPPL_YYSTYPE memory structure with default setup/values, e.g. &amp;lt;qf_ec.c&amp;gt;&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=25%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TOKEN===&lt;br /&gt;
&lt;br /&gt;
Full definition for typedef &#039;&#039;&#039;TOKEN&#039;&#039;&#039;: found in file &amp;lt;&#039;&#039;&#039;tokens.h&#039;&#039;&#039;&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef struct tagTOKEN&lt;br /&gt;
{&lt;br /&gt;
    TKFLAGS          tkFlags;       // 00:  The flags part (numbers shown at left are beginning byte # in structure)&lt;br /&gt;
    SO_ENUM          tkSynObj;      // 04:  The Syntax Object for this token&lt;br /&gt;
    TOKEN_DATA       tkData;        // 08:  The data part (16 bytes=18 Hex - 08 Hex = 10 Hex)&lt;br /&gt;
    int              tkCharIndex;   // 18:  Index into the input line of this token&lt;br /&gt;
                                    // 1C:  Length (1C Hex = 16+12 decimal = byte #28)&lt;br /&gt;
} TOKEN, *LPTOKEN;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Primary sample usage&amp;lt;/u&amp;gt;: Above typedef TOKEN is the first type-var found in &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#LPPL_YYSTYPE|typedef LPPL_YYSTYPE]]&#039;&#039;&#039; above, ref. TOKEN use just below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    TOKEN tkToken; // (var name = tkToken, extensively used in System and APL Function calls)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;Linked or indirect referencing through typed variable-name example&amp;lt;/u&amp;gt;: (to fill in a result token):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Sample token type choices: TKT_VARNAMED, TKT_VARIMMED, TKT_LSTIMMED, TKT_LSTARRAY, TKT_LSTMULT, TKT_VARARRAY(primary), TKT_STRAND and TKT_STRING.&lt;br /&gt;
    // Full list of token types found in file &amp;lt;tokens.h&amp;gt;. TKT_VARARRAY used just below:&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==tkToken Commonly Used Structures==&lt;br /&gt;
C Source Code Sample Short List of &#039;&#039;&#039;tkToken Structure Groupings&#039;&#039;&#039; Found in files &amp;lt;qf_*.c and pf_*.c&amp;gt; Functions with FileName plus Line # Cross References and &#039;&#039;&#039;Frequencies&#039;&#039;&#039; (per C:\NARS2000\trunk qf_*.c/pf_*.c files) as of Mon 8/17/15:&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! FileName&lt;br /&gt;
! Line #&lt;br /&gt;
! Structure/Value&lt;br /&gt;
! Overall Found Freq&lt;br /&gt;
! Overall Found % Tot&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 237|| tkToken|| 820|| 100.0%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 67|| tkToken.tkCharIndex|| 134|| 16.3%&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 182|| tkToken.tkData.tkBoolean|| 13|| 1.6%&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 162|| tkToken.tkData.tkChar|| 5|| 0.6%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 179|| tkToken.tkData.tkFloat|| 9|| 1.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 66|| tkToken.tkData.tkGlbData|| 135|| 16.5%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 98|| tkToken.tkData.tkInteger|| 25|| 3.0%&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 309|| tkToken.tkData.tkLongest|| 18|| 2.2%&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 275|| tkToken.tkData.tkSym|| 3|| 0.4%&lt;br /&gt;
|-&lt;br /&gt;
| qf_ec.c|| 268|| tkToken.tkData.tkVoid|| 1|| 0.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 64|| tkToken.tkFlags.ImmType|| 145|| 17.7%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 65|| tkToken.tkFlags.NoDisplay|| 140|| 17.1%&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 63|| tkToken.tkFlags.TknType|| 148|| 18.0%&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 774|| tkToken.tkSynObj|| 1|| 0.1%&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
One analogy to NARS tkToken structure groupings can be found in Particle Physics where Quarks, Leptons, Gluons and Gravitons comprise a particle class known as &#039;&#039;&#039;[http://physics.about.com/od/atomsparticles/a/particles.htm Fermions]&#039;&#039;&#039;.  NARS tkToken structure groupings, just as is true for Fermions, &amp;lt;u&amp;gt;allows for a wide range of C coded functionality groupings&amp;lt;/u&amp;gt;.   tkToken is a convenient way of grouping several pieces of related information together with flexibility for handling &#039;&#039;&#039;potentially broadly different&#039;&#039;&#039; datatypes, shapes and even functionality.  A nested matrix of mixed elements can be handled, as well accommodation for workspace state indicator stack value-sets - all within tkToken structures.&lt;br /&gt;
&lt;br /&gt;
==tkToken Structures More Detailed Sample Uses Table==&lt;br /&gt;
C Source Code &amp;lt;u&amp;gt;&#039;&#039;&#039;Sample Uses&#039;&#039;&#039;&amp;lt;/u&amp;gt; Unique (duplicates removed) List of &#039;&#039;&#039;tkToken Structure = Values&#039;&#039;&#039; Found in files &amp;lt;qf_*.c and pf_*.c&amp;gt; Functions with FileName plus Line # Cross References (per C:\NARS2000\trunk qf_*.c/pf_*.c files), sorted by source filename, as of Mon 8/17/15:&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! FileName&lt;br /&gt;
! Line #&lt;br /&gt;
! Structure = Value&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 63|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_VARARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadA);&lt;br /&gt;
|-&lt;br /&gt;
| qf_a.c|| 67|| lpYYRes-&amp;gt;tkToken.tkCharIndex = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| qf_at.c|| 406|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
|-&lt;br /&gt;
| qf_av.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadAV);&lt;br /&gt;
|-&lt;br /&gt;
| qf_d.c|| 66|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbQuadD);&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 176|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_VARIMMED;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 177|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_FLOAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dl.c|| 179|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 96|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_INT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 110|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_BOOL;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 115|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_INT64;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 120|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_FLOAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 125|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_CHAR16;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 130|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_APA;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 135|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_HETERO;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 140|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_NESTED;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 145|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_RAT;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 150|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = DR_VFP;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 307|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_dr.c|| 309|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_em.c|| 70|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hGlbRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_fx.c|| 353|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = GetQuadIO () + SF_Fcns.uErrLine;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 493|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplIntegerRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 506|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatRes;&lt;br /&gt;
|-&lt;br /&gt;
| qf_mf.c|| 806|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = TRUE;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 275|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplFileOff;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 592|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = (aplLongestRht NE 0);&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 593|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = TieNum;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 1083|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hGlbRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 1091|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplLongestRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_nfns.c|| 3298|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = aplFileSize;&lt;br /&gt;
|-&lt;br /&gt;
| qf_t.c|| 75|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = aplFloatSec;&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 160|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_CHAR;&lt;br /&gt;
|-&lt;br /&gt;
| qf_tc.c|| 162|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = wc;&lt;br /&gt;
|-&lt;br /&gt;
| qf_ucs.c|| 206|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestRht;&lt;br /&gt;
|-&lt;br /&gt;
| qf_wa.c|| 70|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = msex.ullAvailPhys + msex.ullAvailPageFile;&lt;br /&gt;
|-&lt;br /&gt;
| pf_bar.c|| 323|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (*lphGlbRes);&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 255|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbLft);&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 259|| lpYYRes2 = PrimFnDydCircleSlope_EM_YY (&amp;amp;lpYYRes-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 416|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = lptkRhtArg-&amp;gt;tkData.tkSym-&amp;gt;stFlags.ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 418|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = lptkRhtArg-&amp;gt;tkData.tkSym-&amp;gt;stData.stLongest;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| 425|| lpYYRes-&amp;gt;tkToken = *lptkRhtArg;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 178|| lpYYRes-&amp;gt;tkToken = tkZero;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 252|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = IMMTYPE_BOOL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| 374|| lpYYRes-&amp;gt;tkToken = *CopyToken_EM (lptkRhtArg, FALSE);&lt;br /&gt;
|-&lt;br /&gt;
| pf_darrow.c|| 372|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplTypeRht);&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 220|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = 1;&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 481|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType =&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| 526|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData =&lt;br /&gt;
|-&lt;br /&gt;
| pf_dshoe.c|| 161|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbZilde);&lt;br /&gt;
|-&lt;br /&gt;
| pf_dshoe.c|| 480|| hGlbGup = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 219|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = FALSE;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 224|| lpYYRes-&amp;gt;tkToken.tkData.tkInteger = 0;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 229|| lpYYRes-&amp;gt;tkToken.tkData.tkFloat = 0;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 234|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = L&#039; &#039;;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 248|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = lptkRhtArg-&amp;gt;tkFlags.ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| 309|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = hSymGlbRes;&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtackjot.c|| 375|| lpYYRes-&amp;gt;tkToken.tkData.tkChar = aplCharRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 2398|| hGlbGupLft = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 2429|| hGlbGupRht = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| 3731|| bCmp = lpYYTmp-&amp;gt;tkToken.tkData.tkBoolean;&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsund.c|| 279|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean =&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsund.c|| 288|| lpMemRes = &amp;amp;lpYYRes-&amp;gt;tkToken.tkData.tkBoolean;&lt;br /&gt;
|-&lt;br /&gt;
| pf_equalund.c|| 532|| lpYYRes-&amp;gt;tkToken.tkData.tkBoolean = (APLBOOL) ((BIT0 &amp;amp; aplIntegerRes) NE bNotEqual);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 117|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplTypeNam);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 119|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestNam;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 120|| lpYYRes-&amp;gt;tkToken.tkCharIndex = lptkLstArg-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 127|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbNam);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 591|| *((LPAPLBOOL) lpMemRes) |= lpYYItm-&amp;gt;tkToken.tkData.tkBoolean &amp;lt;&amp;lt; uBitIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 604|| *((LPAPLINT) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkInteger;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 610|| *((LPAPLFLOAT) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkFloat;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 616|| *((LPAPLCHAR) lpMemRes)++ = lpYYItm-&amp;gt;tkToken.tkData.tkChar;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 639|| lpSymTmp = MyGlobalLock (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData);&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 645|| MyGlobalUnlock (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData); lpSymTmp = NULL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 648|| DbgGlobalFree (lpYYItm-&amp;gt;tkToken.tkData.tkGlbData); lpYYItm-&amp;gt;tkToken.tkData.tkGlbData = NULL;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 774|| lpYYRes-&amp;gt;tkToken.tkSynObj = soA;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 878|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeNam;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2016|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_LSTIMMED;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2019|| lpYYRes-&amp;gt;tkToken.tkFlags.TknType = TKT_LSTARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2514|| lpMemRes[0] = lpYYItm-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2546|| hGlbSubRht = lpYYSub-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2913|| lpYYRes2 = PrimFnDydRho_EM_YY (&amp;amp;lpYYRes1-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 2924|| hGlbRes = lpYYRes2-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 3593|| hGlbSubLst2 = lpYYItm-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| 4536|| lpYYRes2 = ExecFuncStr_EM_YY (&amp;amp;lpYYRes1-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 212|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = ImmType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 214|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongest;&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| 316|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbRht);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 263|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immType;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1769|| lpYYRes2-&amp;gt;tkToken.tkFlags.TknType = TKT_VARARRAY;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1772|| lpYYRes2-&amp;gt;tkToken.tkData.tkGlbData = MakePtrTypeGlb (hGlbLft);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1773|| lpYYRes2-&amp;gt;tkToken.tkCharIndex = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1776|| lpYYRes3 = PrimFnDydCircleSlope_EM_YY (&amp;amp;lpYYRes2-&amp;gt;tkToken,&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 1996|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 2396|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (hGlbRes, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3014|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = immTypeSubRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3016|| lpYYRes-&amp;gt;tkToken.tkData.tkLongest = aplLongestSubRht;&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| 3034|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (hGlbRht, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rtack.c|| 188|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbDirAsGlb (hGlbArg);&lt;br /&gt;
|-&lt;br /&gt;
| pf_rtack.c|| 194|| lpYYRes-&amp;gt;tkToken.tkFlags.ImmType = TranslateArrayTypeToImmType (aplType);&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 228|| lpMemRht = &amp;amp;lpYYRht-&amp;gt;tkToken.tkData.tkInteger;&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 232|| hGlbRht = lpYYRht-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| 278|| *lpMemRes++ = lpYYRes-&amp;gt;tkToken.tkData.tkGlbData;&lt;br /&gt;
|-&lt;br /&gt;
| pf_uarrow.c|| 232|| lpYYRes-&amp;gt;tkToken.tkData.tkGlbData = CopySymGlbNumDir_PTB (lpSymGlb, aplTypeRht, lptkFunc);&lt;br /&gt;
|-&lt;br /&gt;
| pf_utackjot.c|| 379|| lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay |= (exitType EQ EXITTYPE_NODISPLAY);&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Variable Types==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Variables==&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2768</id>
		<title>Quad EC C Source Code Analysis</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2768"/>
		<updated>2015-08-18T00:35:33Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Comparison Prelim Setups - Different Returned Outputs */  wording&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;h1&amp;gt;⎕EC - &amp;lt;u&amp;gt;C Source Code Analysis&amp;lt;/u&amp;gt;:&amp;lt;/h1&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
File &amp;lt;qf_ec.c&amp;gt; (supporting APL System Function [[System_Function_EC|System Function ⎕EC - Execute Controlled]]) located in NARS trunk folder is a model example for &#039;&#039;&#039;returning a nested vector to APL&#039;&#039;&#039; from a System Function call.  Remember per your technical knowledge of APL: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns a 3-element nested vector to APL.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Executive Summary - Conceptual C Programmers Preliminary Overview/Preview==&lt;br /&gt;
&lt;br /&gt;
Variable &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; upon completion of ⎕EC contains the entire &#039;&#039;&#039;3-element nested vector result&#039;&#039;&#039; of the call to &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;, specifically, from monadic function &#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039;.  &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; also contains a pointer to an object &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; that is created by other code in the same file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;That global memory handle &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; points (via &#039;&#039;&#039;lpMemRes&#039;&#039;&#039; = MyGlobalLock (hGlbRes)) to a VARARRAY_HEADER followed by the actual data (a three-element vector).  The header contains various fields such as Array Type (ARRAY_NESTED), the NELM (3), the Rank (1), the dimension (3), followed by the data.  As it is a nested array that gets returned, the 3-elements of the data are all pointers to a &#039;&#039;&#039;SYMENTRY&#039;&#039;&#039; (for immediate values -- BOOL, INT, FLT, and CHAR) or a global memory handle for all other items, e.g. Global Numeric, APA, HETERO (mixed array-datatype e.g. integer, char/unicode string, float double, etc.), any non-immediate array, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In a sense, the internal structure of arrays in NARS C code are nested just as APL arrays themselves are nested.  Nesting is ubiquitous in NARS/APL2, etc..  Think about C coding source layouts and program flow from the standpoint of &amp;quot;How would you design the internal structures for an APL interpreter?&amp;quot;  The C source code would, wherever possible, parallel the APL code which APL users view and understand.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;⎕EC is somewhat more complex than other APL system functions in that ⎕EC executes its right argument under &#039;&#039;&#039;controlled circumstances&#039;&#039;&#039; - this also holds true for the C code itself - complexity in the returned data structure, i.e. ⎕EC mirrors APL variable structuring.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Subordinate execution of ⎕EC&#039;s right argument returns an &amp;lt;LPPL_YYSTYPE&amp;gt; variable-type pointer(ptr) just as it&#039;s umbrella overarching function ⎕EC does.  Many APL prime functions such as rho, take, iota, etc. as coded in C - also return nested arguments while many APL System &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; Functions merely return scalars.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Variable name &amp;lt;&#039;&#039;&#039;lpYYRes2&#039;&#039;&#039;&amp;gt; in file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;&#039;s C source code indicates it is a secondary result (re the &#039;&#039;&#039;execution&#039;&#039;&#039; of ⎕EC&#039;s right argument).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Independent of how actual execution of the APL user&#039;s argument proceeded, after executing that right arg, the Exit Type is converted into an integer Return Code (as that&#039;s the form of the first output item - the first element in ⎕EC&#039;s output vector, in ⎕EC&#039;s result vector).  That first item is a simple numeric scalar, but since the result of ⎕EC is a three-element nested vector, &amp;lt;qf_ec.c&amp;gt;/&#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039; must convert the Return Code into a &#039;&#039;&#039;LPSYMENTRY&#039;&#039;&#039; via &amp;lt;&#039;&#039;&#039;MakeSymEntry_EM&#039;&#039;&#039;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In particular - (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; C &amp;lt;u&amp;gt;source code extract&amp;lt;/u&amp;gt; just below):&lt;br /&gt;
     // Save the return code in the FIRST ELEMENT of ⎕EC - C&#039;s index origin is zero hence ref. to lpMemRes[0]&lt;br /&gt;
     lpMemRes[0] = MakeSymEntry_EM (IMMTYPE_INT,     // Immediate type&lt;br /&gt;
                       &amp;amp;aplLongestRC,    // Ptr to immediate value&lt;br /&gt;
                        lptkFunc);       // Ptr to function token&lt;br /&gt;
&lt;br /&gt;
Technically, ⎕EC&#039;s second output element is the value of ⎕ET, usually a 2-element vector of zeroes, at present.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;What happens next depends upon whether or not the APL user&#039;s right argument execution succeeded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution succeeded: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns the &#039;&#039;&#039;value or string value&#039;&#039;&#039; of the executed result as the third element in its output vector.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution failed: &#039;&#039;&#039;⎕EC&#039;&#039;&#039; returns the &#039;&#039;&#039;error message&#039;&#039;&#039; associated with that failure, a unicode string - as &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;&#039;s third output element.&lt;br /&gt;
&lt;br /&gt;
==Comparison Prelim Setups - Different Returned Outputs==&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_t.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structural setup for returned solitary &#039;&#039;&#039;scalar number&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARIMMED;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_FLOAT;&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkFloat    = aplFloatSec;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;2. &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structural setup for returned 3-element &#039;&#039;&#039;nested vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();                                  // Setup line # 1 for lpYYRes&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;     // Setup line # 2 for lpYYRes&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);   // Setup line # 3 for lpYYRes&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;      // Setup line # 4 for lpYYRes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Differences: Note &#039;&#039;&#039;TKT_VARIMMED for ⎕T&#039;&#039;&#039; vs. &#039;&#039;&#039;TKT_VARARRAY for ⎕EC&#039;&#039;&#039;.  Also note ⎕EC&#039;s use of hGlbRes for nested returned data, re: lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
Nesting occurs in ⎕EC output through the use of &#039;&#039;&#039;TKT_VARARRAY&#039;&#039;&#039; as token flags token type and through use of nested memory pointer &#039;&#039;&#039;MakePtrTypeGlb (hGlbRes)&#039;&#039;&#039; in var lpYYRes via the token&#039;s global data. From a purely structural perspective, excluding 1)pre-setup work in ⎕EC, 2)comment lines and 3)post-op processing C code, only 4 lines of C code were needed (above) to &#039;&#039;&#039;setup&#039;&#039;&#039; (not calculate) return result variable lpYYRes for ⎕EC.&lt;br /&gt;
See also &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#tkToken Structures More Detailed Sample Uses Table|tkToken Sample Uses Table]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;3. &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ts.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;more&#039;&#039;&#039;&amp;lt;/u&amp;gt; substantive structural setup for a returned plain-vanilla / homogeneous 7-element &#039;&#039;&#039;unmixed vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define lpMemData   ((LPAPLINT) lpMemRes)    // The following seven vector elements returned are all integers&lt;br /&gt;
    lpMemData[0] = SystemTime.wYear;&lt;br /&gt;
    lpMemData[1] = SystemTime.wMonth;&lt;br /&gt;
    lpMemData[2] = SystemTime.wDay;&lt;br /&gt;
    lpMemData[3] = SystemTime.wHour;&lt;br /&gt;
    lpMemData[4] = SystemTime.wMinute;&lt;br /&gt;
    lpMemData[5] = SystemTime.wSecond;&lt;br /&gt;
    lpMemData[6] = SystemTime.wMilliseconds;&lt;br /&gt;
#undef  lpMemData&lt;br /&gt;
&lt;br /&gt;
    // Memory ptr no longer needed, allow unlocking/freeing hGlbRes(technically freed upon returning from ⎕TS), reset lpMemRes pointer to null&lt;br /&gt;
    MyGlobalUnlock (hGlbRes); lpMemRes = NULL;&lt;br /&gt;
&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&lt;br /&gt;
    return lpYYRes;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above return information C coding for &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; is included because setup for ⎕TS&#039;s integers output vector is relatively straightforward, i.e. less complex than a &amp;lt;u&amp;gt;nested&amp;lt;/u&amp;gt; vector(&#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;) but not much more complex than a scalar (&#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039;).&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2767</id>
		<title>Quad EC C Source Code Analysis</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2767"/>
		<updated>2015-08-18T00:30:53Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Comparison Prelim Setups - Different Returned Outputs */  wording&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;h1&amp;gt;⎕EC - &amp;lt;u&amp;gt;C Source Code Analysis&amp;lt;/u&amp;gt;:&amp;lt;/h1&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
File &amp;lt;qf_ec.c&amp;gt; (supporting APL System Function [[System_Function_EC|System Function ⎕EC - Execute Controlled]]) located in NARS trunk folder is a model example for &#039;&#039;&#039;returning a nested vector to APL&#039;&#039;&#039; from a System Function call.  Remember per your technical knowledge of APL: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns a 3-element nested vector to APL.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Executive Summary - Conceptual C Programmers Preliminary Overview/Preview==&lt;br /&gt;
&lt;br /&gt;
Variable &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; upon completion of ⎕EC contains the entire &#039;&#039;&#039;3-element nested vector result&#039;&#039;&#039; of the call to &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;, specifically, from monadic function &#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039;.  &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; also contains a pointer to an object &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; that is created by other code in the same file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;That global memory handle &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; points (via &#039;&#039;&#039;lpMemRes&#039;&#039;&#039; = MyGlobalLock (hGlbRes)) to a VARARRAY_HEADER followed by the actual data (a three-element vector).  The header contains various fields such as Array Type (ARRAY_NESTED), the NELM (3), the Rank (1), the dimension (3), followed by the data.  As it is a nested array that gets returned, the 3-elements of the data are all pointers to a &#039;&#039;&#039;SYMENTRY&#039;&#039;&#039; (for immediate values -- BOOL, INT, FLT, and CHAR) or a global memory handle for all other items, e.g. Global Numeric, APA, HETERO (mixed array-datatype e.g. integer, char/unicode string, float double, etc.), any non-immediate array, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In a sense, the internal structure of arrays in NARS C code are nested just as APL arrays themselves are nested.  Nesting is ubiquitous in NARS/APL2, etc..  Think about C coding source layouts and program flow from the standpoint of &amp;quot;How would you design the internal structures for an APL interpreter?&amp;quot;  The C source code would, wherever possible, parallel the APL code which APL users view and understand.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;⎕EC is somewhat more complex than other APL system functions in that ⎕EC executes its right argument under &#039;&#039;&#039;controlled circumstances&#039;&#039;&#039; - this also holds true for the C code itself - complexity in the returned data structure, i.e. ⎕EC mirrors APL variable structuring.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Subordinate execution of ⎕EC&#039;s right argument returns an &amp;lt;LPPL_YYSTYPE&amp;gt; variable-type pointer(ptr) just as it&#039;s umbrella overarching function ⎕EC does.  Many APL prime functions such as rho, take, iota, etc. as coded in C - also return nested arguments while many APL System &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; Functions merely return scalars.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Variable name &amp;lt;&#039;&#039;&#039;lpYYRes2&#039;&#039;&#039;&amp;gt; in file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;&#039;s C source code indicates it is a secondary result (re the &#039;&#039;&#039;execution&#039;&#039;&#039; of ⎕EC&#039;s right argument).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Independent of how actual execution of the APL user&#039;s argument proceeded, after executing that right arg, the Exit Type is converted into an integer Return Code (as that&#039;s the form of the first output item - the first element in ⎕EC&#039;s output vector, in ⎕EC&#039;s result vector).  That first item is a simple numeric scalar, but since the result of ⎕EC is a three-element nested vector, &amp;lt;qf_ec.c&amp;gt;/&#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039; must convert the Return Code into a &#039;&#039;&#039;LPSYMENTRY&#039;&#039;&#039; via &amp;lt;&#039;&#039;&#039;MakeSymEntry_EM&#039;&#039;&#039;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In particular - (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; C &amp;lt;u&amp;gt;source code extract&amp;lt;/u&amp;gt; just below):&lt;br /&gt;
     // Save the return code in the FIRST ELEMENT of ⎕EC - C&#039;s index origin is zero hence ref. to lpMemRes[0]&lt;br /&gt;
     lpMemRes[0] = MakeSymEntry_EM (IMMTYPE_INT,     // Immediate type&lt;br /&gt;
                       &amp;amp;aplLongestRC,    // Ptr to immediate value&lt;br /&gt;
                        lptkFunc);       // Ptr to function token&lt;br /&gt;
&lt;br /&gt;
Technically, ⎕EC&#039;s second output element is the value of ⎕ET, usually a 2-element vector of zeroes, at present.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;What happens next depends upon whether or not the APL user&#039;s right argument execution succeeded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution succeeded: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns the &#039;&#039;&#039;value or string value&#039;&#039;&#039; of the executed result as the third element in its output vector.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution failed: &#039;&#039;&#039;⎕EC&#039;&#039;&#039; returns the &#039;&#039;&#039;error message&#039;&#039;&#039; associated with that failure, a unicode string - as &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;&#039;s third output element.&lt;br /&gt;
&lt;br /&gt;
==Comparison Prelim Setups - Different Returned Outputs==&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_t.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structural setup for returned solitary &#039;&#039;&#039;scalar number&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARIMMED;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_FLOAT;&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkFloat    = aplFloatSec;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;2. &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structural setup for returned 3-element &#039;&#039;&#039;nested vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();                                  // Setup line # 1 for lpYYRes&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;     // Setup line # 2 for lpYYRes&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);   // Setup line # 3 for lpYYRes&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;      // Setup line # 4 for lpYYRes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Differences: Note &#039;&#039;&#039;TKT_VARIMMED for ⎕T&#039;&#039;&#039; vs. &#039;&#039;&#039;TKT_VARARRAY for ⎕EC&#039;&#039;&#039;.  Also note ⎕EC&#039;s use of hGlbRes for nested returned data, re: lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
Nesting occurs in ⎕EC output through the use of &#039;&#039;&#039;TKT_VARARRAY&#039;&#039;&#039; as token flags token type and through use of nested memory pointer &#039;&#039;&#039;MakePtrTypeGlb (hGlbRes)&#039;&#039;&#039; in var lpYYRes via the token&#039;s global data. Excluding pre-setup work in ⎕EC, comment lines and post-op processing C code, only 4 lines of C code were needed (above) to setup return result variable lpYYRes for ⎕EC.&lt;br /&gt;
See also &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#tkToken Structures More Detailed Sample Uses Table|tkToken Sample Uses Table]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;3. &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ts.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;more&#039;&#039;&#039;&amp;lt;/u&amp;gt; substantive structural setup for a returned plain-vanilla / homogeneous 7-element &#039;&#039;&#039;unmixed vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define lpMemData   ((LPAPLINT) lpMemRes)    // The following seven vector elements returned are all integers&lt;br /&gt;
    lpMemData[0] = SystemTime.wYear;&lt;br /&gt;
    lpMemData[1] = SystemTime.wMonth;&lt;br /&gt;
    lpMemData[2] = SystemTime.wDay;&lt;br /&gt;
    lpMemData[3] = SystemTime.wHour;&lt;br /&gt;
    lpMemData[4] = SystemTime.wMinute;&lt;br /&gt;
    lpMemData[5] = SystemTime.wSecond;&lt;br /&gt;
    lpMemData[6] = SystemTime.wMilliseconds;&lt;br /&gt;
#undef  lpMemData&lt;br /&gt;
&lt;br /&gt;
    // Memory ptr no longer needed, allow unlocking/freeing hGlbRes(technically freed upon returning from ⎕TS), reset lpMemRes pointer to null&lt;br /&gt;
    MyGlobalUnlock (hGlbRes); lpMemRes = NULL;&lt;br /&gt;
&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&lt;br /&gt;
    return lpYYRes;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above return information C coding for &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; is included because setup for ⎕TS&#039;s integers output vector is relatively straightforward, i.e. less complex than a &amp;lt;u&amp;gt;nested&amp;lt;/u&amp;gt; vector(&#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;) but not much more complex than a scalar (&#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039;).&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2766</id>
		<title>Quad EC C Source Code Analysis</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Quad_EC_C_Source_Code_Analysis&amp;diff=2766"/>
		<updated>2015-08-18T00:22:52Z</updated>

		<summary type="html">&lt;p&gt;Robert Wallick: /* Comparison Prelim Setups - Different Returned Outputs */  added cross ref link, wording&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;h1&amp;gt;⎕EC - &amp;lt;u&amp;gt;C Source Code Analysis&amp;lt;/u&amp;gt;:&amp;lt;/h1&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
File &amp;lt;qf_ec.c&amp;gt; (supporting APL System Function [[System_Function_EC|System Function ⎕EC - Execute Controlled]]) located in NARS trunk folder is a model example for &#039;&#039;&#039;returning a nested vector to APL&#039;&#039;&#039; from a System Function call.  Remember per your technical knowledge of APL: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns a 3-element nested vector to APL.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Executive Summary - Conceptual C Programmers Preliminary Overview/Preview==&lt;br /&gt;
&lt;br /&gt;
Variable &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; upon completion of ⎕EC contains the entire &#039;&#039;&#039;3-element nested vector result&#039;&#039;&#039; of the call to &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;, specifically, from monadic function &#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039;.  &#039;&#039;&#039;lpYYRes&#039;&#039;&#039; also contains a pointer to an object &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; that is created by other code in the same file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;That global memory handle &amp;lt;&#039;&#039;&#039;hGlbRes&#039;&#039;&#039;&amp;gt; points (via &#039;&#039;&#039;lpMemRes&#039;&#039;&#039; = MyGlobalLock (hGlbRes)) to a VARARRAY_HEADER followed by the actual data (a three-element vector).  The header contains various fields such as Array Type (ARRAY_NESTED), the NELM (3), the Rank (1), the dimension (3), followed by the data.  As it is a nested array that gets returned, the 3-elements of the data are all pointers to a &#039;&#039;&#039;SYMENTRY&#039;&#039;&#039; (for immediate values -- BOOL, INT, FLT, and CHAR) or a global memory handle for all other items, e.g. Global Numeric, APA, HETERO (mixed array-datatype e.g. integer, char/unicode string, float double, etc.), any non-immediate array, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In a sense, the internal structure of arrays in NARS C code are nested just as APL arrays themselves are nested.  Nesting is ubiquitous in NARS/APL2, etc..  Think about C coding source layouts and program flow from the standpoint of &amp;quot;How would you design the internal structures for an APL interpreter?&amp;quot;  The C source code would, wherever possible, parallel the APL code which APL users view and understand.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;⎕EC is somewhat more complex than other APL system functions in that ⎕EC executes its right argument under &#039;&#039;&#039;controlled circumstances&#039;&#039;&#039; - this also holds true for the C code itself - complexity in the returned data structure, i.e. ⎕EC mirrors APL variable structuring.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Subordinate execution of ⎕EC&#039;s right argument returns an &amp;lt;LPPL_YYSTYPE&amp;gt; variable-type pointer(ptr) just as it&#039;s umbrella overarching function ⎕EC does.  Many APL prime functions such as rho, take, iota, etc. as coded in C - also return nested arguments while many APL System &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; Functions merely return scalars.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Variable name &amp;lt;&#039;&#039;&#039;lpYYRes2&#039;&#039;&#039;&amp;gt; in file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt;&#039;s C source code indicates it is a secondary result (re the &#039;&#039;&#039;execution&#039;&#039;&#039; of ⎕EC&#039;s right argument).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Independent of how actual execution of the APL user&#039;s argument proceeded, after executing that right arg, the Exit Type is converted into an integer Return Code (as that&#039;s the form of the first output item - the first element in ⎕EC&#039;s output vector, in ⎕EC&#039;s result vector).  That first item is a simple numeric scalar, but since the result of ⎕EC is a three-element nested vector, &amp;lt;qf_ec.c&amp;gt;/&#039;&#039;&#039;SysFnMonEC_EM_YY&#039;&#039;&#039; must convert the Return Code into a &#039;&#039;&#039;LPSYMENTRY&#039;&#039;&#039; via &amp;lt;&#039;&#039;&#039;MakeSymEntry_EM&#039;&#039;&#039;&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;In particular - (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; C &amp;lt;u&amp;gt;source code extract&amp;lt;/u&amp;gt; just below):&lt;br /&gt;
     // Save the return code in the FIRST ELEMENT of ⎕EC - C&#039;s index origin is zero hence ref. to lpMemRes[0]&lt;br /&gt;
     lpMemRes[0] = MakeSymEntry_EM (IMMTYPE_INT,     // Immediate type&lt;br /&gt;
                       &amp;amp;aplLongestRC,    // Ptr to immediate value&lt;br /&gt;
                        lptkFunc);       // Ptr to function token&lt;br /&gt;
&lt;br /&gt;
Technically, ⎕EC&#039;s second output element is the value of ⎕ET, usually a 2-element vector of zeroes, at present.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;What happens next depends upon whether or not the APL user&#039;s right argument execution succeeded:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution succeeded: &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; returns the &#039;&#039;&#039;value or string value&#039;&#039;&#039; of the executed result as the third element in its output vector.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;If execution failed: &#039;&#039;&#039;⎕EC&#039;&#039;&#039; returns the &#039;&#039;&#039;error message&#039;&#039;&#039; associated with that failure, a unicode string - as &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;&#039;s third output element.&lt;br /&gt;
&lt;br /&gt;
==Comparison Prelim Setups - Different Returned Outputs==&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_t.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structural setup for returned solitary &#039;&#039;&#039;scalar number&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARIMMED;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_FLOAT;&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkFloat    = aplFloatSec;&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;2. &#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ec.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;initial&#039;&#039;&#039;&amp;lt;/u&amp;gt; structural setup for returned 3-element &#039;&#039;&#039;nested vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    // lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Differences: Note &#039;&#039;&#039;TKT_VARIMMED for ⎕T&#039;&#039;&#039; vs. &#039;&#039;&#039;TKT_VARARRAY for ⎕EC&#039;&#039;&#039;.  Also note ⎕EC&#039;s use of hGlbRes for nested returned data, re: lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
Nesting occurs in ⎕EC output through the use of &#039;&#039;&#039;TKT_VARARRAY&#039;&#039;&#039; as token flags token type and through use of nested memory pointer &#039;&#039;&#039;MakePtrTypeGlb (hGlbRes)&#039;&#039;&#039; in var lpYYRes via the token&#039;s global data.&lt;br /&gt;
See also &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#tkToken Structures More Detailed Sample Uses Table|tkToken Sample Uses Table]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;3. &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; (file &amp;lt;&#039;&#039;&#039;qf_ts.c&#039;&#039;&#039;&amp;gt; code extract) &amp;lt;u&amp;gt;&#039;&#039;&#039;more&#039;&#039;&#039;&amp;lt;/u&amp;gt; substantive structural setup for a returned plain-vanilla / homogeneous 7-element &#039;&#039;&#039;unmixed vector&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define lpMemData   ((LPAPLINT) lpMemRes)    // The following seven vector elements returned are all integers&lt;br /&gt;
    lpMemData[0] = SystemTime.wYear;&lt;br /&gt;
    lpMemData[1] = SystemTime.wMonth;&lt;br /&gt;
    lpMemData[2] = SystemTime.wDay;&lt;br /&gt;
    lpMemData[3] = SystemTime.wHour;&lt;br /&gt;
    lpMemData[4] = SystemTime.wMinute;&lt;br /&gt;
    lpMemData[5] = SystemTime.wSecond;&lt;br /&gt;
    lpMemData[6] = SystemTime.wMilliseconds;&lt;br /&gt;
#undef  lpMemData&lt;br /&gt;
&lt;br /&gt;
    // Memory ptr no longer needed, allow unlocking/freeing hGlbRes(technically freed upon returning from ⎕TS), reset lpMemRes pointer to null&lt;br /&gt;
    MyGlobalUnlock (hGlbRes); lpMemRes = NULL;&lt;br /&gt;
&lt;br /&gt;
    // Allocate a new YYRes&lt;br /&gt;
    lpYYRes = YYAlloc ();&lt;br /&gt;
&lt;br /&gt;
    // Fill in the result token&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkFlags.TknType   = TKT_VARARRAY;&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.ImmType   = IMMTYPE_ERROR; // Already zero from YYAlloc&lt;br /&gt;
    //  lpYYRes-&amp;gt;tkToken.tkFlags.NoDisplay = FALSE;         // Already zero from YYAlloc&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkData.tkGlbData  = MakePtrTypeGlb (hGlbRes);&lt;br /&gt;
    lpYYRes-&amp;gt;tkToken.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;&lt;br /&gt;
&lt;br /&gt;
    return lpYYRes;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above return information C coding for &#039;&#039;&#039;[[System_Function_TS|⎕TS]]&#039;&#039;&#039; is included because setup for ⎕TS&#039;s integers output vector is relatively straightforward, i.e. less complex than a &amp;lt;u&amp;gt;nested&amp;lt;/u&amp;gt; vector(&#039;&#039;&#039;[[System_Function_EC|⎕EC]]&#039;&#039;&#039;) but not much more complex than a scalar (&#039;&#039;&#039;[[System_Function_T|⎕T]]&#039;&#039;&#039;).&lt;/div&gt;</summary>
		<author><name>Robert Wallick</name></author>
	</entry>
</feed>