<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://labviewwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eaolson</id>
	<title>LabVIEW Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://labviewwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eaolson"/>
	<link rel="alternate" type="text/html" href="https://labviewwiki.org/wiki/Special:Contributions/Eaolson"/>
	<updated>2026-05-08T20:29:38Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Error_Case_Structure&amp;diff=2234</id>
		<title>Error Case Structure</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Error_Case_Structure&amp;diff=2234"/>
		<updated>2007-09-25T20:32:36Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: minor tweaking of the language, apostrophe, And-&amp;gt;An&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An &#039;&#039;&#039;Error Case Structure&#039;&#039;&#039; is term that describes a [[Case Structure]] that has an [[Error cluster]] wired to its selector terminal. Its two available cases are &amp;quot;No Error&#039;&#039; (showing a green frame) and &#039;&#039;Error&#039;&#039; (showing a red frame).&lt;br /&gt;
&lt;br /&gt;
[[Image:Error Case Structure.png|thumb|300px|center]]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Error cluster]]&lt;br /&gt;
* [[Error handling]]&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [http://zone.ni.com/reference/en-XX/help/371361B-01/lvconcepts/case_and_sequence_structures/ Case and Sequence Structures] (LabVIEW 8.2 Help Documentation)&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Insane_Objects&amp;diff=2050</id>
		<title>Insane Objects</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Insane_Objects&amp;diff=2050"/>
		<updated>2007-09-21T18:27:56Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: Remove meta information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firstly, there is no need to necessarily report generically to [[NI]] that LabVIEW has insane objects, as they &#039;&#039;&#039;do&#039;&#039;&#039; know about insane objects. Secondly they are NOT merely bugs: insane objects can be generated as part of the LabVIEW verification process. If you get such a message, it is good to check the known bugs of LabVIEW at ni.com and if the particular insanity in your dialog is not listed, only then should you report the insanity to NI technical support.&lt;br /&gt;
&lt;br /&gt;
The insane object message is what LabVIEW puts in a dialog when one of the objects on the diagram does not meet its &amp;quot;checksum&amp;quot;. In other words, this object isn&#039;t in a state LabVIEW expects it to be in. Most of the time these errors are not fatal -- LabVIEW simply puts the object in the state it does expect. But it raises questions about how the object got into that bad state and what might have been done with that object between the last time LabVIEW checked and it was good and the time it became insane.&lt;br /&gt;
&lt;br /&gt;
The insane object messages are something NI works on with each version of LabVIEW. But as it is a generic error message that can apply to anything from a simple cosmetic to the front panel itself, you&#039;ll still see them in any version of LabVIEW that has a bug -- a fact of life unfortunately for the foreseeable future. &lt;br /&gt;
&lt;br /&gt;
The cryptic nature of the message can be deciphered as follows:&lt;br /&gt;
Insane object at FPHP+4C in &amp;quot;name.vi&amp;quot;: {dsitem} 0x400: Panel (FPSC)&lt;br /&gt;
* FPHP -- this will be either FP or BD for &amp;quot;front panel heap&amp;quot; or &amp;quot;block diagram heap&amp;quot;&lt;br /&gt;
* 4C -- this is a hexadecimal number indicating which object.&lt;br /&gt;
* name.vi -- which VI had the insanity&lt;br /&gt;
* {dsitem} 0x400 -- really only meaningful if you know how LabVIEW internals work; I&#039;ll skip it here&lt;br /&gt;
* Panel (FPSC) -- the type of object that has problems. The four letter codes are usually descriptive (COSM for a cosmetic or simple drawn part, SGNL for a signal aka wire). A common one that you won&#039;t guess is DDOD, which stands for Data Display Object (the last D is because it has to be 4 chars). A DDO is either a control or an indicator.&lt;br /&gt;
&lt;br /&gt;
Most of the time, deleting the offending object and recreating it from scratch is sufficient to fix your VI and allow you to continue working.&lt;br /&gt;
&lt;br /&gt;
== Using Heap Peek ==&lt;br /&gt;
&lt;br /&gt;
The number &amp;quot;4C&amp;quot; is described above as the number that tells you which object. Not exactly helpful to an end user. There is a way to find and delete an insane object. When you get an insane error, you will get a code that shows the object that is insane - write down that code and then:&lt;br /&gt;
&lt;br /&gt;
* Close LabVIEW&lt;br /&gt;
* Put the key &amp;quot;LVdebugKeys=True&amp;quot; in your [[LabVIEW configuration file]]&lt;br /&gt;
* Open your VI&lt;br /&gt;
* Press CTRL+SHIFT+D+H. On Mac, use the command key instead of CTRL.  This will open a window known to LV R&amp;amp;D as &amp;quot;heap peek&amp;quot; since it gives internal views into the front panel heap and the block diagram heap.&lt;br /&gt;
* The window is divided into 4 sections: top-left, top-right, middle, and base. The functionality of the various parts is obscure and mystical, so we&#039;re just going to focus on the bits that help with finding and deleting insane objects.&lt;br /&gt;
* Check the error message given about the insane object. It includes either the letters BDHP or FPHP. Scroll through the top-left list box until you find those 4 letters and the name of your VI. Left click to select that item. This will change what is displayed in the top-right section of the window.&lt;br /&gt;
* In the top-right section, find the line that begins with the number identifying the object. These are sorted numerically. Left click to select the object when you find it. &lt;br /&gt;
* In the middle region, there is a box with an F inside it. This is a button (heap peek doesn&#039;t use a lot of advanced drawing, so it doesn&#039;t really look like a button, but it is). Click on the F button to find the offending object.&lt;br /&gt;
* LabVIEW will switch to the block diagram or front panel and select some object. Whatever object it is, delete it. &lt;br /&gt;
&lt;br /&gt;
Note: Care must be taken with heap peek. It has the possibility to change states of objects and doing that without knowing EXACTLY (and I think only a few people in the LabVIEW developer team really do) what you are doing can completely mess up your VI or maybe even more.&lt;br /&gt;
&lt;br /&gt;
I do not think that heap peek has any ability to change the objects. It is display information only. There are VIs in LV that are not real VIs (for example, a pseudo VI that is created to represent a Call By Reference to another application instance on another machine), and attempting to do Find to jump to their components can cause problems because those VIs never expect to actually draw themselves. But other than that state change, I do not know of any edits. They may exist. The previous author is quite correct in saying that few developers really know the capacities of heap peek. It&#039;s a debugging tool, and it gets hacked up to display whatever anyone needs to display.&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Insane_Objects&amp;diff=2049</id>
		<title>Insane Objects</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Insane_Objects&amp;diff=2049"/>
		<updated>2007-09-21T18:21:02Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: /* Using Heap Peek */ On my 7.1.1 install, it&amp;#039;s Ctrl+Shift+D+H&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firstly, there is no need to necessarily report generically to [[NI]] that LabVIEW has insane objects, as they &#039;&#039;&#039;do&#039;&#039;&#039; know about insane objects. Secondly they are NOT merely bugs: insane objects can be generated as part of the LabVIEW verification process. If you get such a message, it is good to check the known bugs of LabVIEW at ni.com and if the particular insanity in your dialog is not listed, only then should you report the insanity to NI technical support.&lt;br /&gt;
&lt;br /&gt;
The insane object message is what LabVIEW puts in a dialog when one of the objects on the diagram does not meet its &amp;quot;checksum&amp;quot;. In other words, this object isn&#039;t in a state LabVIEW expects it to be in. Most of the time these errors are not fatal -- LabVIEW simply puts the object in the state it does expect. But it raises questions about how the object got into that bad state and what might have been done with that object between the last time LabVIEW checked and it was good and the time it became insane.&lt;br /&gt;
&lt;br /&gt;
The insane object messages are something NI works on with each version of LabVIEW. But as it is a generic error message that can apply to anything from a simple cosmetic to the front panel itself, you&#039;ll still see them in any version of LabVIEW that has a bug -- a fact of life unfortunately for the foreseeable future. &lt;br /&gt;
&lt;br /&gt;
The cryptic nature of the message can be deciphered as follows:&lt;br /&gt;
Insane object at FPHP+4C in &amp;quot;name.vi&amp;quot;: {dsitem} 0x400: Panel (FPSC)&lt;br /&gt;
* FPHP -- this will be either FP or BD for &amp;quot;front panel heap&amp;quot; or &amp;quot;block diagram heap&amp;quot;&lt;br /&gt;
* 4C -- this is a hexadecimal number indicating which object.&lt;br /&gt;
* name.vi -- which VI had the insanity&lt;br /&gt;
* {dsitem} 0x400 -- really only meaningful if you know how LabVIEW internals work; I&#039;ll skip it here&lt;br /&gt;
* Panel (FPSC) -- the type of object that has problems. The four letter codes are usually descriptive (COSM for a cosmetic or simple drawn part, SGNL for a signal aka wire). A common one that you won&#039;t guess is DDOD, which stands for Data Display Object (the last D is because it has to be 4 chars). A DDO is either a control or an indicator.&lt;br /&gt;
&lt;br /&gt;
Most of the time, deleting the offending object and recreating it from scratch is sufficient to fix your VI and allow you to continue working.&lt;br /&gt;
&lt;br /&gt;
== Using Heap Peek ==&lt;br /&gt;
&lt;br /&gt;
The number &amp;quot;4C&amp;quot; is described above as the number that tells you which object. Not exactly helpful to an end user. There is a way to find and delete an insane object. When you get an insane error, you will get a code that shows the object that is insane - write down that code and then:&lt;br /&gt;
&lt;br /&gt;
* Close LabVIEW&lt;br /&gt;
* Put the key &amp;quot;LVdebugKeys=True&amp;quot; in your [[LabVIEW configuration file]]&lt;br /&gt;
* Open your VI&lt;br /&gt;
* Press CTRL+SHIFT+D+H. On Mac, use the command key instead of CTRL.  This will open a window known to LV R&amp;amp;D as &amp;quot;heap peek&amp;quot; since it gives internal views into the front panel heap and the block diagram heap.&lt;br /&gt;
* The window is divided into 4 sections: top-left, top-right, middle, and base. The functionality of the various parts is obscure and mystical, so we&#039;re just going to focus on the bits that help with finding and deleting insane objects.&lt;br /&gt;
* Check the error message given about the insane object. It includes either the letters BDHP or FPHP. Scroll through the top-left list box until you find those 4 letters and the name of your VI. Left click to select that item. This will change what is displayed in the top-right section of the window.&lt;br /&gt;
* In the top-right section, find the line that begins with the number identifying the object. These are sorted numerically. Left click to select the object when you find it. &lt;br /&gt;
* In the middle region, there is a box with an F inside it. This is a button (heap peek doesn&#039;t use a lot of advanced drawing, so it doesn&#039;t really look like a button, but it is). Click on the F button to find the offending object.&lt;br /&gt;
* LabVIEW will switch to the block diagram or front panel and select some object. Whatever object it is, delete it. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Another author of the WIKI wrote this:&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Care must be taken with heap peek. It has the possibility to change states of objects and doing that without knowing EXACTLY (and I think only a few people in the LabVIEW developer team really do) what you are doing can completely mess up your VI or maybe even more.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I do not think that heap peek has any ability to change the objects. It is display information only. There are VIs in LV that are not real VIs (for example, a pseudo VI that is created to represent a Call By Reference to another application instance on another machine), and attempting to do Find to jump to their components can cause problems because those VIs never expect to actually draw themselves. But other than that state change, I do not know of any edits. They may exist. The previous author is quite correct in saying that few developers really know the capacities of heap peek. It&#039;s a debugging tool, and it gets hacked up to display whatever anyone needs to display.&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=CAR_Number&amp;diff=2032</id>
		<title>CAR Number</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=CAR_Number&amp;diff=2032"/>
		<updated>2007-09-15T17:28:24Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: just making the title clear&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;Corrective Action Report Number&#039;&#039;&#039;, or CAR Number, is used by [[National Instruments]] for tracking LabVIEW bugs.  When you report a bug to NI (see [[LabVIEW Bug Reporting]]) you will generally be given a CAR number, so that you can track progress on your bug.  Recently, NI has started listing the CAR numbers of bug fixes in the readme file included in LabVIEW releases.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[LabVIEW Bug Reporting]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Flattened_pixmap&amp;diff=1980</id>
		<title>Flattened pixmap</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Flattened_pixmap&amp;diff=1980"/>
		<updated>2007-09-06T22:13:20Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: adding 32 bit back in, see discussion page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;flattened pixmap&#039;&#039;&#039; is a structure used to load and save images to and from disk. &lt;br /&gt;
&lt;br /&gt;
==Elements==&lt;br /&gt;
A flattened pixmap is a cluster consisting of 6 elements:&lt;br /&gt;
# &#039;&#039;&#039;image type&#039;&#039;&#039; is reserved for a future use. It should be 0. It is a U16.&lt;br /&gt;
# &#039;&#039;&#039;image depth&#039;&#039;&#039; describes the bit depth of the colors in the image. It&#039;s value affects how the &#039;&#039;&#039;image&#039;&#039;&#039; and &#039;&#039;&#039;colors&#039;&#039;&#039; elements are interpreted. Valid values are: 1, 4, 8, 24, and 32. It is a U8.&lt;br /&gt;
# &#039;&#039;&#039;image&#039;&#039;&#039; is an one-dimensional array of U8s describing the color of each pixel. The meaning of this array changes depending on the value of &#039;&#039;&#039;image depth&#039;&#039;&#039;:&lt;br /&gt;
#* For 1-, 4-, and 8-bit images m x n pixels in size, &#039;&#039;&#039;image&#039;&#039;&#039; is m*n elements long. Each pixel value contains an index into the &#039;&#039;&#039;colors&#039;&#039;&#039; array, which contains the actual color for the pixel.&lt;br /&gt;
#* For 24-bit images m x n pixels in size, &#039;&#039;&#039;image&#039;&#039;&#039; is 3*m*n elements long. The elements are the red, green, and blue components for each pixel, in order. &lt;br /&gt;
#* For 32-bit images m x n pixels in size, &#039;&#039;&#039;image&#039;&#039;&#039; is 4*m*n elements long. This structure is the same as for 24-bit images, but includes a transparency element. &lt;br /&gt;
# &#039;&#039;&#039;Mask&#039;&#039;&#039; is a one-dimensional array of U8s that bitwise sets the transparency of a pixel. A bit-value of 0 makes the pixel transparent. The mask array handles each row of the image in order, padding with zeros to the end of an even-numbered byte if necessary.&lt;br /&gt;
# &#039;&#039;&#039;colors&#039;&#039;&#039; is a one-dimensional array of U32s listing the [[color]] palette for an indexed (1-, 4-, or 8-bit) image. The array will be up to 2, 16 or 256 elements long for 1-, 4-, and 8-bit images, respectively. For 24- or 32-bit images the array will be empty.&lt;br /&gt;
# &#039;&#039;&#039;Rectangle&#039;&#039;&#039; is a cluster describing the size of the image. It contains four elements as I16s: &#039;&#039;&#039;left&#039;&#039;&#039;, &#039;&#039;&#039;top&#039;&#039;&#039;, &#039;&#039;&#039;right&#039;&#039;&#039;, and &#039;&#039;&#039;bottom&#039;&#039;&#039;. Usually, &#039;&#039;&#039;left&#039;&#039;&#039; and &#039;&#039;&#039;top&#039;&#039;&#039; are zero, so &#039;&#039;&#039;right&#039;&#039;&#039; and &#039;&#039;&#039;bottom&#039;&#039;&#039; are the width and height of the image, respectively.&lt;br /&gt;
&lt;br /&gt;
==Image files==&lt;br /&gt;
The Read BMP File, Read JPG File, and Read PNG File VIs read an existing image file from disk and return a flattened pixmap. Similarly, Write BMP File, Write JPG File, and Write PNG File accept a flattened pixmap and save it as the appropriate image file.&lt;br /&gt;
&lt;br /&gt;
==Conversion==&lt;br /&gt;
The Unflatten Pixmap VI can be used to convert a flattened pixmap to a two-dimensional array of colors (24- and 32-bit images) or an array of indexes into a &#039;&#039;&#039;colors&#039;&#039;&#039; palette.&lt;br /&gt;
&lt;br /&gt;
A flattened pixmap is converted to the LabVIEW [[picture]] data type by using the Draw Flattened Pixmap VI.&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Flattened_pixmap&amp;diff=1978</id>
		<title>Flattened pixmap</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Flattened_pixmap&amp;diff=1978"/>
		<updated>2007-09-06T00:40:39Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: /* Elements */ pads to the end of an even number of bytes, not the end of the current byte&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;flattened pixmap&#039;&#039;&#039; is a structure used to load and save images to and from disk. &lt;br /&gt;
&lt;br /&gt;
==Elements==&lt;br /&gt;
A flattened pixmap is a cluster consisting of 6 elements:&lt;br /&gt;
# &#039;&#039;&#039;image type&#039;&#039;&#039; is reserved for a future use. It should be 0. It is a U16.&lt;br /&gt;
# &#039;&#039;&#039;image depth&#039;&#039;&#039; describes the bit depth of the colors in the image. It&#039;s value affects how the &#039;&#039;&#039;image&#039;&#039;&#039; and &#039;&#039;&#039;colors&#039;&#039;&#039; elements are interpreted. Valid values are: 1, 4, 8, 24, and 32. It is a U8.&lt;br /&gt;
# &#039;&#039;&#039;image&#039;&#039;&#039; is an one-dimensional array of U8s describing the color of each pixel. The meaning of this array changes depending on the value of &#039;&#039;&#039;image depth&#039;&#039;&#039;:&lt;br /&gt;
#* For 1-, 4-, and 8-bit images m x n pixels in size, &#039;&#039;&#039;image&#039;&#039;&#039; is m*n elements long. Each pixel value contains an index into the &#039;&#039;&#039;colors&#039;&#039;&#039; array, which contains the actual color for the pixel.&lt;br /&gt;
#* For 24-bit images m x n pixels in size, &#039;&#039;&#039;image&#039;&#039;&#039; is 3*m*n elements long. The elements are the red, green, and blue components for each pixel, in order. &lt;br /&gt;
#* For 32-bit images m x n pixels in size, &#039;&#039;&#039;image&#039;&#039;&#039; is 4*m*n elements long. This structure is the same as for 24-bit images, but includes a transparency element. &lt;br /&gt;
# &#039;&#039;&#039;Mask&#039;&#039;&#039; is a one-dimensional array of U8s that bitwise sets the transparency of a pixel. A bit-value of 0 makes the pixel transparent. The mask array handles each row of the image in order, padding with zeros to the end of an even-numbered byte if necessary.&lt;br /&gt;
# &#039;&#039;&#039;colors&#039;&#039;&#039; is a one-dimensional array of U32s listing the [[color]] palette for an indexed (1-, 4-, or 8-bit) image. The array will be up to 2, 16 or 256 elements long for 1-, 4-, and 8-bit images, respectively. For 24- or 32-bit images the array will be empty.&lt;br /&gt;
# &#039;&#039;&#039;Rectangle&#039;&#039;&#039; is a cluster describing the size of the image. It contains four elements as I16s: &#039;&#039;&#039;left&#039;&#039;&#039;, &#039;&#039;&#039;top&#039;&#039;&#039;, &#039;&#039;&#039;right&#039;&#039;&#039;, and &#039;&#039;&#039;bottom&#039;&#039;&#039;. Usually, &#039;&#039;&#039;left&#039;&#039;&#039; and &#039;&#039;&#039;top&#039;&#039;&#039; are zero, so &#039;&#039;&#039;right&#039;&#039;&#039; and &#039;&#039;&#039;bottom&#039;&#039;&#039; are the width and height of the image, respectively.&lt;br /&gt;
&lt;br /&gt;
==Image files==&lt;br /&gt;
The Read BMP File, Read JPG File, and Read PNG File VIs read an existing image file from disk and return a flattened pixmap. Similarly, Write BMP File, Write JPG File, and Write PNG File accept a flattened pixmap and save it as the appropriate image file.&lt;br /&gt;
&lt;br /&gt;
==Conversion==&lt;br /&gt;
The Unflatten Pixmap VI can be used to convert a flattened pixmap to a two-dimensional array of colors (24- and 32-bit images) or an array of indexes into a &#039;&#039;&#039;colors&#039;&#039;&#039; palette.&lt;br /&gt;
&lt;br /&gt;
A flattened pixmap is converted to the LabVIEW [[picture]] data type by using the Draw Flattened Pixmap VI.&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Color&amp;diff=1976</id>
		<title>Color</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Color&amp;diff=1976"/>
		<updated>2007-09-02T22:24:20Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: just a quick note on how colors are stored&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Colors&#039;&#039;&#039; are represented in LabVIEW by an unsigned 32-bit integer. The integer is of the hexadecimal form 0x00RRGGBB, where RR, GG, and BB represent the red, green, and blue components of the color, respectively.&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Flattened_pixmap&amp;diff=1975</id>
		<title>Flattened pixmap</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Flattened_pixmap&amp;diff=1975"/>
		<updated>2007-09-02T22:20:30Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: this is a start&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;flattened pixmap&#039;&#039;&#039; is a structure used to load and save images to and from disk. &lt;br /&gt;
&lt;br /&gt;
==Elements==&lt;br /&gt;
A flattened pixmap is a cluster consisting of 6 elements:&lt;br /&gt;
# &#039;&#039;&#039;image type&#039;&#039;&#039; is reserved for a future use. It should be 0. It is a U16.&lt;br /&gt;
# &#039;&#039;&#039;image depth&#039;&#039;&#039; describes the bit depth of the colors in the image. It&#039;s value affects how the &#039;&#039;&#039;image&#039;&#039;&#039; and &#039;&#039;&#039;colors&#039;&#039;&#039; elements are interpreted. Valid values are: 1, 4, 8, 24, and 32. It is a U8.&lt;br /&gt;
# &#039;&#039;&#039;image&#039;&#039;&#039; is an one-dimensional array of U8s describing the color of each pixel. The meaning of this array changes depending on the value of &#039;&#039;&#039;image depth&#039;&#039;&#039;:&lt;br /&gt;
#* For 1-, 4-, and 8-bit images m x n pixels in size, &#039;&#039;&#039;image&#039;&#039;&#039; is m*n elements long. Each pixel value contains an index into the &#039;&#039;&#039;colors&#039;&#039;&#039; array, which contains the actual color for the pixel.&lt;br /&gt;
#* For 24-bit images m x n pixels in size, &#039;&#039;&#039;image&#039;&#039;&#039; is 3*m*n elements long. The elements are the red, green, and blue components for each pixel, in order. &lt;br /&gt;
#* For 32-bit images m x n pixels in size, &#039;&#039;&#039;image&#039;&#039;&#039; is 4*m*n elements long. This structure is the same as for 24-bit images, but includes a transparency element. &lt;br /&gt;
# &#039;&#039;&#039;colors&#039;&#039;&#039; is a one-dimensional array of U32s listing the [[color]] palette for an indexed (1-, 4-, or 8-bit) image. The array will be up to 2, 16 or 256 elements long for 1-, 4-, and 8-bit images, respectively. For 24- or 32-bit images the array will be empty.&lt;br /&gt;
# &#039;&#039;&#039;Rectangle&#039;&#039;&#039; is a cluster describing the size of the image. It contains four elements as I16s: &#039;&#039;&#039;left&#039;&#039;&#039;, &#039;&#039;&#039;top&#039;&#039;&#039;, &#039;&#039;&#039;right&#039;&#039;&#039;, and &#039;&#039;&#039;bottom&#039;&#039;&#039;. Usually, &#039;&#039;&#039;left&#039;&#039;&#039; and &#039;&#039;&#039;top&#039;&#039;&#039; are zero, so &#039;&#039;&#039;right&#039;&#039;&#039; and &#039;&#039;&#039;bottom&#039;&#039;&#039; are the width and height of the image, respectively.&lt;br /&gt;
&lt;br /&gt;
==Image files==&lt;br /&gt;
The Read BMP File, Read JPG File, and Read PNG File VIs read an existing image file from disk and return a flattened pixmap. Similarly, Write BMP File, Write JPG File, and Write PNG File accept a flattened pixmap and save it as the appropriate image file.&lt;br /&gt;
&lt;br /&gt;
==Conversion==&lt;br /&gt;
The Unflatten Pixmap VI can be used to convert a flattened pixmap to a two-dimensional array of colors (24- and 32-bit images) or an array of indexes into a &#039;&#039;&#039;colors&#039;&#039;&#039; palette.&lt;br /&gt;
&lt;br /&gt;
A flattened pixmap is converted to the LabVIEW [[picture]] data type by using the Draw Flattened Pixmap VI.&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Flattened_pixmap&amp;diff=1974</id>
		<title>Flattened pixmap</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Flattened_pixmap&amp;diff=1974"/>
		<updated>2007-09-02T19:54:49Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: started this article, but I have to go! I&amp;#039;ll finish it later.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;flattened pixmap&#039;&#039;&#039; is a structure used to load and same images to and from disk. &lt;br /&gt;
&lt;br /&gt;
==Elements==&lt;br /&gt;
A flattened pixmap is a cluster consisting of 6 elements:&lt;br /&gt;
# &#039;&#039;&#039;image type&#039;&#039;&#039; is reserved for a future use. It should be 0. It is a U16.&lt;br /&gt;
# &#039;&#039;&#039;image depth&#039;&#039;&#039; describes the bit depth of the colors in the image. It&#039;s value affects how the &#039;&#039;&#039;image&#039;&#039;&#039; and &#039;&#039;&#039;colors&#039;&#039;&#039; elements are interpreted. Valid values are: 1, 4, 8, 24, and 32. It is a U8.&lt;br /&gt;
# &#039;&#039;&#039;image&#039;&#039;&#039; is an one-dimensional array of U8s describing the color of each pixel. The meaning of this array changes depending on the value of &#039;&#039;&#039;image depth&#039;&#039;&#039;:&lt;br /&gt;
#* For 1-, 4-, and 8-bit images m x n pixels in size, &#039;&#039;&#039;image&#039;&#039;&#039; is m*n elements long. Each pixel value contains an index into the &#039;&#039;&#039;colors&#039;&#039;&#039; array, which contains the actual color for the pixel.&lt;br /&gt;
#* For 24-bit images m x n pixels in size, &#039;&#039;&#039;image&#039;&#039;&#039; is 3*m*n elements long.&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Insane_object&amp;diff=1888</id>
		<title>Insane object</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Insane_object&amp;diff=1888"/>
		<updated>2007-07-11T18:57:49Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: not sure if the article should be at the singular or plural version of the word&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Insane Objects]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Property_Node&amp;diff=1520</id>
		<title>Property Node</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Property_Node&amp;diff=1520"/>
		<updated>2007-05-12T22:57:54Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: Property Node moved to Property node: change cap per MOS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Property node]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Property_node&amp;diff=1519</id>
		<title>Property node</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Property_node&amp;diff=1519"/>
		<updated>2007-05-12T22:57:54Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: Property Node moved to Property node: change cap per MOS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a stub. Feel free to edit.&lt;br /&gt;
&lt;br /&gt;
[[Category:Stubs]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Category:Stubs&amp;diff=1518</id>
		<title>Category:Stubs</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Category:Stubs&amp;diff=1518"/>
		<updated>2007-05-12T22:57:28Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a category for stubs. Feel free to expand any one of these articles.&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Producer/Consumer&amp;diff=1517</id>
		<title>Producer/Consumer</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Producer/Consumer&amp;diff=1517"/>
		<updated>2007-05-12T22:56:53Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: add stub cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a stub article for the producer/consumer architecture.&lt;br /&gt;
&lt;br /&gt;
[[Category:Design Patterns]]&lt;br /&gt;
[[Category:Stubs]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Queued_State_Machine&amp;diff=1516</id>
		<title>Queued State Machine</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Queued_State_Machine&amp;diff=1516"/>
		<updated>2007-05-12T22:56:38Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: add stub cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a stub article for Queued State Machine.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[State Machine]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Design Patterns]]&lt;br /&gt;
[[Category:Stubs]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Functional_Global&amp;diff=1515</id>
		<title>Functional Global</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Functional_Global&amp;diff=1515"/>
		<updated>2007-05-12T22:56:18Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: fix double redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Functional global variable]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Property_node&amp;diff=1514</id>
		<title>Property node</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Property_node&amp;diff=1514"/>
		<updated>2007-05-12T22:55:57Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: add stub cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a stub. Feel free to edit.&lt;br /&gt;
&lt;br /&gt;
[[Category:Stubs]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=NIWeek&amp;diff=1512</id>
		<title>NIWeek</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=NIWeek&amp;diff=1512"/>
		<updated>2007-05-12T22:55:12Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: add stub cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a stub page which requires expansion. Please help by adding content.&lt;br /&gt;
&lt;br /&gt;
[[Category:Stubs]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Globals&amp;diff=1511</id>
		<title>Globals</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Globals&amp;diff=1511"/>
		<updated>2007-05-12T22:54:47Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: fix double redirect&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Global variable]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Recursion&amp;diff=1510</id>
		<title>Recursion</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Recursion&amp;diff=1510"/>
		<updated>2007-05-12T22:54:16Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: add stub cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a stub. Feel free to edit.&lt;br /&gt;
&lt;br /&gt;
[[Category:Stubs]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=LabVIEW_Wiki:Manual_of_Style&amp;diff=1509</id>
		<title>LabVIEW Wiki:Manual of Style</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=LabVIEW_Wiki:Manual_of_Style&amp;diff=1509"/>
		<updated>2007-05-12T22:50:19Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: cap per MOS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| align=&amp;quot;right&amp;quot; border=&amp;quot;0&amp;quot;&lt;br /&gt;
|__TOC__&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Our Manual of style is a collection of rules of thumb and guidelines for giving LabVIEW Wiki a consistent look and feel. Most of these rules have exceptions, but to put together a good reference work collaboratively, it&#039;s best to follow the rules unless they&#039;re quite inappropriate for a particular situation.&lt;br /&gt;
&lt;br /&gt;
These are not rigid laws: they are principles that many editors have found to work well in most circumstances, but which should be applied with flexibility. In this vein, editors should strive to have their articles follow these guidelines. If all this stuff makes your head swim, and you don&#039;t want to bother with it, by all means plunge forward and just start sharing your knowledge. Other LabVIEW Wiki editors will come forward (they always do) and bring your contributions in line with the style guide.&lt;br /&gt;
&lt;br /&gt;
If you have a question about the specifics of the Manual, or want to see it changed/amended/clarified, use the discussion topic for the section in question. Otherwise, you can always post a comment in the [http://forums.lavag.org/LabVIEW-Wiki-Support-f91.html LabVIEW Wiki Support Forum].&lt;br /&gt;
&lt;br /&gt;
== Page naming conventions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If an article has been named inappropriately, it can be renamed by moving the article to a more appropriate title. See [[Help:Moving a page]] for more on renaming pages.&lt;br /&gt;
|}&lt;br /&gt;
=== Lowercase second and subsequent words in titles ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Convention:&#039;&#039; Do not capitalize second and subsequent words unless the title is a proper noun (such as a name) or is otherwise almost always capitalized (for example: John Wayne and Art Nouveau, but not Computer And Video Games). The first letter of an internal wikilink need not be capitalized and will direct the reader to the same page (for example, computer and video games or Computer and video games can be used interchangeably as needed).&lt;br /&gt;
&lt;br /&gt;
=== Prefer singular nouns ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Convention:&#039;&#039; In general only create page titles that are in the singular, unless that noun is always in a plural form in English (such as scissors or trousers).&lt;br /&gt;
&lt;br /&gt;
=== Avoid &amp;quot;the&amp;quot; and &amp;quot;a&amp;quot; or &amp;quot;an&amp;quot; at the beginning of the page name ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Convention:&#039;&#039; If the definite or indefinite article would be capitalized in running text, then include it at the beginning of the page name. This would be the case for the title of a work such as a novel. Otherwise, do not include it at the beginning of the page name.&lt;br /&gt;
&lt;br /&gt;
== Categories ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Every&#039;&#039;&#039; page in the article namespace should belong to at least one category. Categories should be major topics that are likely to be useful to someone reading the article. See [[Help:Categories]] for technical information on how to add a page to a category.&lt;br /&gt;
*Each LabVIEW Wiki article can appear in more than one category, and each category can appear in more than one parent category.&lt;br /&gt;
*If you don&#039;t know where to put an article, don&#039;t worry about it. Use the &amp;lt;nowiki&amp;gt;[[Category:Uncategorized]]&amp;lt;/nowiki&amp;gt; to bring attention to the article. Editors who love to categorize articles will find a good home for your article.&lt;br /&gt;
&lt;br /&gt;
== Add a &amp;quot;See also&amp;quot; section ==&lt;br /&gt;
If you know of other LabVIEW Wiki articles that are related to the current article, add links to them in a special section at the bottom called &amp;quot;See also&amp;quot;. This section should be placed at the bottom of the article before any &amp;quot;External Links&amp;quot; section. Only LabVIEW Wiki articles should be placed here. See below for external links.&lt;br /&gt;
&lt;br /&gt;
== Add an &amp;quot;External links&amp;quot; section ==&lt;br /&gt;
If you know of any external (non LabVIEW Wiki) web pages that may provide more information on the article topic, add links to them in a special section at the bottom called &amp;quot;External Links&amp;quot;. This section should be placed after the &amp;quot;See Also&amp;quot; section. A typical example would be linking to the LabVIEW help documentation on ni.com.&lt;br /&gt;
&lt;br /&gt;
== Images ==&lt;br /&gt;
It is difficult to suggest image positioning recommendations however if in doubt, centering is preferred.&lt;br /&gt;
*Images should always be framed.&lt;br /&gt;
*If an image is larger than 600px wide then it should be thumbnailed at 600px.&lt;br /&gt;
*Use captions to explain the relevance of the image to the article.&lt;br /&gt;
*Avoid using image or figure numbers in your caption as this makes editing difficult. Inserting images will result in a large editing task for the remaining image references.&lt;br /&gt;
*When uploading an image, add a description during the upload process. This can be longer and more detailed than the caption. This is useful when the reader clicks on the image source looking for more information.&lt;br /&gt;
&lt;br /&gt;
== Other specific conventions ==&lt;br /&gt;
&lt;br /&gt;
The following words, when used in the title or body of the page must be capitalized and written as shown below.&lt;br /&gt;
*LabVIEW - Do not use labview, LV, etc.&lt;br /&gt;
&lt;br /&gt;
[[Category:LabVIEW Wiki style guidelines]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Boolean_data_type&amp;diff=1489</id>
		<title>Boolean data type</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Boolean_data_type&amp;diff=1489"/>
		<updated>2007-05-11T20:11:08Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: article start&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;boolean&#039;&#039;&#039; is a primitive data type that can have one of two values: TRUE or FALSE. Various operations from the Boolean palette can be performed on these, such as AND, OR, and NOT. Most comparison functions return boolean data. &lt;br /&gt;
&lt;br /&gt;
In addition to [[label]] and [[caption]] text, boolean controls and indicators can display &amp;quot;boolean text&amp;quot; that can depend on the state of the control. This allows a control or indicator to show a textual representation of its state (e.g. ON/OFF).&lt;br /&gt;
&lt;br /&gt;
On the [[block diagram]], boolean data is represented by green wires.&lt;br /&gt;
&lt;br /&gt;
==Mechanical action==&lt;br /&gt;
Boolean controls have mechanical actions, which control how activation with the mouse affects the value of the control. Mechanical action allows a control to mimic certain physical actuators (e.g. a light switch, emergency stop button). The six types of mechanic actions are:&lt;br /&gt;
* Switch when pressed. The value of the control change each time it is clicked. This is similar to a light switch.&lt;br /&gt;
* Switch when released. The value of the control only changes once the mouse button is released within the boundary of the control.&lt;br /&gt;
* Switch until released. The value of the control changes only so long as the mouse button is held down. When the mouse button is released, the control returns to its default value. &lt;br /&gt;
* Latch when pressed. The value of the control is updated when the mouse button is depressed. Once the VI reads the value of the control, it returns to its default value. &lt;br /&gt;
* Latch when released. The value of the control is updated when the mouse button is released within the boundary of the control. Once the VI reads the value of the control, it returns to its default value. &lt;br /&gt;
*Latch until released. The value of the control is updated while the mouse button is held down, or until the VI reads the value, whichever comes first.&lt;br /&gt;
&lt;br /&gt;
The three &amp;quot;latch&amp;quot; behaviors can not be used if the control has a local variable on the block diagram.&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Reentrant_VI&amp;diff=1409</id>
		<title>Reentrant VI</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Reentrant_VI&amp;diff=1409"/>
		<updated>2007-05-10T16:49:36Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: add an introductory graf actually explaining reentrancy, add header&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;reentrant VI&#039;&#039;&#039; is a [[VI]] that has a separate data space allocated for which each instance of the VI. Multiple instances of reentrant VIs can execute in parallel without interfering with each other. Non-reentrant VIs have a data space that is shared between multiple calls to the VI.&lt;br /&gt;
&lt;br /&gt;
==Implementation==&lt;br /&gt;
&lt;br /&gt;
First, consider three VIs, foo.vi, bar.vi, and sub.vi. Both foo.vi and bar.vi call sub.vi.&lt;br /&gt;
&lt;br /&gt;
If sub.vi is normal (not reentrant), then if foo.vi tries to call sub.vi but sub.vi is busy servicing a call from bar.vi, then foo.vi has to wait. This can be both a very GOOD thing and a very BAD thing depending on circumstances. It&#039;s very GOOD when sub.vi controls access to something like a serial port, where you only want one part of your program accessing it at a time. It&#039;s very BAD when sub.vi controls something like ALL the serial ports, because you may want foo.vi to be able to use one serial port while bar.vi is busy using a different serial port. Another very bad circumstance is where foo.vi is in a critical loop and bar.vi is not, yet because of the contention for sub.vi, bar.vi can end up blocking foo.vi.&lt;br /&gt;
&lt;br /&gt;
If sub.vi is reentrant, then both foo.vi and bar.vi can call sub.vi at the same time. In order for this to work, each call to sub.vi needs to have its own &amp;quot;data space&amp;quot; which is all the internal storage sub.vi uses in order to execute its code.&lt;br /&gt;
&lt;br /&gt;
Now at this point I need to point out a distinction between LabVIEW and most other languages. LabVIEW doesn&#039;t want to allocate a data space on the fly, because for LabVIEW that would slow down performance. LabVIEW allocates all the VI data spaces it needs when VIs are being loaded. Except when you use VI Server to call VIs dynamically, all the loading happens before any VIs execute. Therefore, for each place that sub.vi appears on foo.vi&#039;s block diagram, a copy of sub.vi&#039;s data space gets embedded in foo.vi&#039;s data space, assuming sub.vi is reentrant. If sub.vi isn&#039;t reentrant, it just has its one data space allocated that each call will use in turn.&lt;br /&gt;
&lt;br /&gt;
In most (all?) other languages, reentrant functions allocate their data spaces on the fly, so there&#039;s no storage that goes with each place that a particular function is called.&lt;br /&gt;
&lt;br /&gt;
How does LabVIEW&#039;s unusual implementation affect us in practical terms? There are really two ways:&lt;br /&gt;
&lt;br /&gt;
1. If you use uninitialized shift registers to store information, then you can get two different behaviors depending on the reentrancy of your VI. For a non-reentrant VI, you get a data sharing function that lets you move large quantities of information between parallel loops without making copies of it. For a reentrant VI, you get a reusable storage function that can keep independent copies each place you use it.&lt;br /&gt;
&lt;br /&gt;
2. The second implication is that you can&#039;t do recursion (functions that call themselves) easily in LabVIEW. In most languages, if a function is reentrant then it&#039;s OK for it to call itself. In LabVIEW, that would require that the data storage for sub.vi would include a copy of the data storage for sub.vi which would ... to infinity. You can do recursion in LabVIEW if you use VI Server to have a VI call itself dynamically, but as I said, allocating data spaces on the fly is inherently slow. In LabVIEW, it&#039;s best to convert recursive algorithms to their iterative equivalents, which I hear is mathematically proven to always be possible. In the iterative version, you&#039;ll end up changing the sizes of arrays at each iteration, which is also one of the slower operations in LabVIEW, but is not nearly as slow as dynamic VI calls.&lt;br /&gt;
&lt;br /&gt;
To expand on this, reentrant means that more than one execution is allowed to take place at the same time. In other languages, it is more a situation than a setting. You never mark a C function as allowing or disallowing reentrancy, it is either safe to do so or a source of bugs. In LV it is a setting, and many times its setting doesn&#039;t affect the correctness of a VI, but in some cases, it can be a source of bugs. It depends on what the VI does.&lt;br /&gt;
&lt;br /&gt;
The setting in LV determines two major attributes about how a VI executes.&lt;br /&gt;
&lt;br /&gt;
First is access. With reentrancy turned off, only one call to the subVI can be active at a time. When the current call finishes, the next one can begin. The subVI calls queue up while the VI is busy. For functions that execute quickly, this is normally fine and reentrancy doesn&#039;t affect much.&lt;br /&gt;
&lt;br /&gt;
If you have a function that uses TCP to talk to another computer and waits for responses, these waits also affect the other subVI calls that are queued up. So if you have an operation that can occur in parallel and doesn&#039;t consume the CPU, you can make the VI reentrant and the multiple subVI calls don&#039;t enter a queue, and multiple VIs can talk TCP and wait for responses at once. This allows the wait time of one subVI to be used as work time in another and increases overall performance.&lt;br /&gt;
&lt;br /&gt;
On the otherhand, given a VI that reads a global modifies it and writes it back, a reentrant subVI means that more than one subVI call at a time can be modifying the global -- a race condition which will cause incorrect answers. Lots of real-world devices also get confused when more than one subVI tries to control them at a time. So when trying to protect a global resource, the one of the tools, and frequently the easiest to use is to simply make sure that the access goes through a non-reentrant VI.&lt;br /&gt;
&lt;br /&gt;
The second attribute is data side-effects. If a VI has unconnected controls or uninitialized shift registers on its diagram, then it remembers some amount of information from call to call. A good example of this is a PID or a filter. Data from previous calls affect the result of the next call. For these sorts of VIs, if they are reentrant, then each call gets its own place to store the previous call&#039;s state information. If made non-reentrant, there will be only one storage location for all calls to share, so the data will get all jumbled, likely causing an incorrect answer.&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Producer/Consumer&amp;diff=1393</id>
		<title>Producer/Consumer</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Producer/Consumer&amp;diff=1393"/>
		<updated>2007-05-09T17:57:53Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: create stub&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a stub article for the producer/consumer architecture.&lt;br /&gt;
&lt;br /&gt;
[[Category:Design Patterns]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Daemon&amp;diff=1391</id>
		<title>Daemon</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Daemon&amp;diff=1391"/>
		<updated>2007-05-09T17:55:14Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: add cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;daemon&#039;&#039;&#039; is a process that runs in the background, not usually visible to a user. In LabVIEW, daemons are usually implemented as one of two types: self-launched or launched.&lt;br /&gt;
&lt;br /&gt;
==Self-launching daemon==&lt;br /&gt;
A &#039;&#039;self-launching daemon&#039;&#039; is a VI that executes, closes its own [[front panel]], and continues to run in the background. A VI normally ceases to execute when its front panel is closed. To avoid this, a daemon VI first opens a [[VI reference]] to itself. The VI can then use the Front Panel:Open method to set the state of the VI to &amp;quot;hidden.&amp;quot; In LabVIEW versions earlier than 8.0, the Front Panel:Open method is not available, but the Front Panel Window:Open property can be used.&lt;br /&gt;
&lt;br /&gt;
==Launched daemon==&lt;br /&gt;
A &#039;&#039;launched daemon&#039;&#039; is a daemon VI that is opened by an intermediate, &amp;quot;launcher&amp;quot; VI. This allows a high-level VI to launch a background process and continue executing. In this case, the launcher VI opens a reference to the daemon VI and starts it using the Run VI method, with &amp;quot;Wait Until Done&amp;quot; set to False and &amp;quot;Auto Dispose Ref&amp;quot; set to True. The launcher VI must not close the VI reference to the daemon VI. Once the daemon VI has launched, the launcher VI can close itself.&lt;br /&gt;
&lt;br /&gt;
==External Links==&lt;br /&gt;
* [http://zone.ni.com/devzone/cda/tut/p/id/5237 LabVIEW Application Design Patterns]&lt;br /&gt;
&lt;br /&gt;
[[Category:Design Patterns]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Daemon&amp;diff=1385</id>
		<title>Daemon</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Daemon&amp;diff=1385"/>
		<updated>2007-05-09T16:58:43Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: starting this article, could use example code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;daemon&#039;&#039;&#039; is a process that runs in the background, not usually visible to a user. In LabVIEW, daemons are usually implemented as one of two types: self-launched or launched.&lt;br /&gt;
&lt;br /&gt;
==Self-launching daemon==&lt;br /&gt;
A &#039;&#039;self-launching daemon&#039;&#039; is a VI that executes, closes its own [[front panel]], and continues to run in the background. A VI normally ceases to execute when its front panel is closed. To avoid this, a daemon VI first opens a [[VI reference]] to itself. The VI can then use the Front Panel:Open method to set the state of the VI to &amp;quot;hidden.&amp;quot; In LabVIEW versions earlier than 8.0, the Front Panel:Open method is not available, but the Front Panel Window:Open property can be used.&lt;br /&gt;
&lt;br /&gt;
==Launched daemon==&lt;br /&gt;
A &#039;&#039;launched daemon&#039;&#039; is a daemon VI that is opened by an intermediate, &amp;quot;launcher&amp;quot; VI. This allows a high-level VI to launch a background process and continue executing. In this case, the launcher VI opens a reference to the daemon VI and starts it using the Run VI method, with &amp;quot;Wait Until Done&amp;quot; set to False and &amp;quot;Auto Dispose Ref&amp;quot; set to True. The launcher VI must not close the VI reference to the daemon VI. Once the daemon VI has launched, the launcher VI can close itself.&lt;br /&gt;
&lt;br /&gt;
==Reference==&lt;br /&gt;
* [http://zone.ni.com/devzone/cda/tut/p/id/5237 LabVIEW Application Design Patterns]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=GOOP_-_Graphical_Object_Oriented_Programming&amp;diff=1384</id>
		<title>GOOP - Graphical Object Oriented Programming</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=GOOP_-_Graphical_Object_Oriented_Programming&amp;diff=1384"/>
		<updated>2007-05-09T15:38:00Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: /* See Also */ add dqGOOP, alphabetize&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== GOOP - Graphical Object Oriented Programming ==&lt;br /&gt;
&lt;br /&gt;
GOOP stands for Graphical Object Oriented Programming. It is a category of frameworks for non-native object-oriented programming in LabVIEW that support by reference objects with VI methods for operating on data.  Some versions of GOOP support inheritance and dynamic dispatch.  GOOP really hit mainstream with the release of the [http://zone.ni.com/devzone/cda/tut/p/id/3391#3 GOOP Toolkit] from [http://www.endevo.se/ Endevo] and [[National Instruments]]. OpenG even has its own version of GOOP, called [[OpenGOOP]].&lt;br /&gt;
&lt;br /&gt;
GOOP is great because it allows you to build components that encapsulate their data, functionality, and behavior. Why ecapsulate?...&lt;br /&gt;
&lt;br /&gt;
=== Benefits of Encapsulation ===&lt;br /&gt;
&lt;br /&gt;
* Maintainable&lt;br /&gt;
* Scalable&lt;br /&gt;
* Useable (and therefore Reusable)&lt;br /&gt;
* Testable&lt;br /&gt;
* Enable Multiple Developer Collaboration &lt;br /&gt;
&lt;br /&gt;
=== See Also ===&lt;br /&gt;
{{Portal|GOOP}}&lt;br /&gt;
* [[dqGOOP]]&lt;br /&gt;
* [[GOOP_History_by_Mattias_Ericsson]]&lt;br /&gt;
* [[OpenGOOP]]&lt;br /&gt;
[[Category:GOOP]]&lt;br /&gt;
&lt;br /&gt;
=== External Links ===&lt;br /&gt;
&lt;br /&gt;
* [http://zone.ni.com/devzone/conceptd.nsf/appnotebynumber/1A7B60096CE0CDA986256A9A0074E4EC?OpenDocument&amp;amp;node=dz52000_us App Note 143] – Graphical Object Oriented Programming (Jorgen Jehander)&lt;br /&gt;
* [http://zone.ni.com/devzone/devzoneweb.nsf/Opendoc?openagent&amp;amp;958B0EEC7BE032B986256863000A6B64 Graphical Object-Oriented Programming with LabVIEW] – NI Week 1999 Presentation by Jörgen Jehander and Stepan Riha&lt;br /&gt;
* [http://zone.ni.com/devzone/conceptd.nsf/2d17d611efb58b22862567a9006ffe76/5d7db42c91f392fc86256aae00463d78?OpenDocument#3Download Download GOOP Toolkits] from NI&lt;br /&gt;
* [http://sine.ni.com/apps/we/niepd_web_display.display_epd4?p_guid=B45EACE3EB6B56A4E034080020E74861&amp;amp;p_node=DZ52067&amp;amp;p_source=external Object-Oriented Techniques in LabVIEW] – Pure G examples from LV 4.1&lt;br /&gt;
* [http://www.endevo.se/ Endevo] - the company that supports/develops the GOOP Toolkit&lt;br /&gt;
* GOOP/G++ - Robert Burke&#039;s Web Page&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=Acronyms&amp;diff=1382</id>
		<title>Acronyms</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=Acronyms&amp;diff=1382"/>
		<updated>2007-05-09T14:39:44Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: Acronyms moved to List of acronyms: This article is a list of acronyms and their definitions, not really an article *about* acronyms.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[List of acronyms]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=List_of_acronyms&amp;diff=1381</id>
		<title>List of acronyms</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=List_of_acronyms&amp;diff=1381"/>
		<updated>2007-05-09T14:39:44Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: Acronyms moved to List of acronyms: This article is a list of acronyms and their definitions, not really an article *about* acronyms.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Acronyms and abbreviations :&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
A/D - Analog/Digital&amp;lt;br /&amp;gt;&lt;br /&gt;
ADatP - Automated Data Processing&amp;lt;br /&amp;gt;&lt;br /&gt;
AKA - Also Known As&amp;lt;br /&amp;gt;&lt;br /&gt;
ANSI - American National Standards Institute&amp;lt;br /&amp;gt;&lt;br /&gt;
API - Application Programming Interfaces&amp;lt;br /&amp;gt;&lt;br /&gt;
ASCII - American Standard Code for Information Interchange&amp;lt;br /&amp;gt;&lt;br /&gt;
BTW - By The Way&amp;lt;br /&amp;gt;&lt;br /&gt;
DA - Dumb ######&amp;lt;br /&amp;gt;&lt;br /&gt;
DAQ / DAQmx - Data acquisition&amp;lt;br /&amp;gt;&lt;br /&gt;
DB - Database&amp;lt;br /&amp;gt;&lt;br /&gt;
DILLIGAF - Do I Look Like I Give A Fuck?&amp;lt;br /&amp;gt;&lt;br /&gt;
DIY - Do It Yourself&amp;lt;br /&amp;gt;&lt;br /&gt;
DMA - Direct Memory Access&amp;lt;br /&amp;gt;&lt;br /&gt;
FIFO - First In, First Out&amp;lt;br /&amp;gt;&lt;br /&gt;
FKA - Formerly Known As&amp;lt;br /&amp;gt;&lt;br /&gt;
FYI - For Your Information&amp;lt;br /&amp;gt;&lt;br /&gt;
GL - Graphics Language&amp;lt;br /&amp;gt;&lt;br /&gt;
GNU - GNU&#039;s Not Unix&amp;lt;br /&amp;gt;&lt;br /&gt;
GOOP - Graphical Object-Oriented Programming&amp;lt;br /&amp;gt;&lt;br /&gt;
GPL - GNU General Public License&amp;lt;br /&amp;gt;&lt;br /&gt;
GPS - Global Positioning System&amp;lt;br /&amp;gt;&lt;br /&gt;
HF - High Frequency&amp;lt;br /&amp;gt;&lt;br /&gt;
HH - Homework Hustlers&amp;lt;br /&amp;gt;&lt;br /&gt;
HTML - HyperText Markup Language&amp;lt;br /&amp;gt;&lt;br /&gt;
IMHO = In My Humble Opinion&amp;lt;br /&amp;gt;&lt;br /&gt;
IMNSHO - In My Not So Humble Opinion&amp;lt;br /&amp;gt;&lt;br /&gt;
IMO - In My Opinion&amp;lt;br /&amp;gt;&lt;br /&gt;
IP - Internet Protocol&amp;lt;br /&amp;gt;&lt;br /&gt;
IR - Infrared&amp;lt;br /&amp;gt;&lt;br /&gt;
IT - Information Technology&amp;lt;br /&amp;gt;&lt;br /&gt;
JDK - Java Development Kit&amp;lt;br /&amp;gt;&lt;br /&gt;
JK - Just Kidding&amp;lt;br /&amp;gt;&lt;br /&gt;
JVM - Java Virtual Machine&amp;lt;br /&amp;gt;&lt;br /&gt;
LED - Light-Emitting Diode&amp;lt;br /&amp;gt;&lt;br /&gt;
LF - Low Frequency&amp;lt;br /&amp;gt;&lt;br /&gt;
LIFO - Last In, First Out&amp;lt;br /&amp;gt;&lt;br /&gt;
LOL - Laughing Out Loud&amp;lt;br /&amp;gt;&lt;br /&gt;
MAX - Measurement &amp;amp; Automation Explorer&amp;lt;br /&amp;gt;&lt;br /&gt;
MXI - Measurement eXtensions for Instrumentation&amp;lt;br /&amp;gt;&lt;br /&gt;
MYOB - Mind Your Own Business&amp;lt;br /&amp;gt;&lt;br /&gt;
NaN - Not A Number&amp;lt;br /&amp;gt;&lt;br /&gt;
N00b - Newbie&amp;lt;br /&amp;gt;&lt;br /&gt;
ODBC - Open DataBase Connectivity&amp;lt;br /&amp;gt;&lt;br /&gt;
OEM - Original Equipment Manufacturer&amp;lt;br /&amp;gt;&lt;br /&gt;
OMG - &amp;quot;Oh, My God!&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
OO - Object Oriented&amp;lt;br /&amp;gt;&lt;br /&gt;
P2P - Peer-to-peer&amp;lt;br /&amp;gt;&lt;br /&gt;
PCI - Peripheral Component Interconnect&amp;lt;br /&amp;gt;&lt;br /&gt;
PS - post scriptum (Latin, &amp;quot;written after&amp;quot;)&amp;lt;br /&amp;gt;&lt;br /&gt;
PS - Power Supply&amp;lt;br /&amp;gt;&lt;br /&gt;
PXI - PCI eXtensions for Instrumentation&amp;lt;br /&amp;gt;&lt;br /&gt;
RT - Real Time&amp;lt;br /&amp;gt;&lt;br /&gt;
RTFM - Read the Fucking/Fine Manual&amp;lt;br /&amp;gt;&lt;br /&gt;
RTSI - Real-Time System Integration&amp;lt;br /&amp;gt;&lt;br /&gt;
TCP - Transmission Control Protocol&amp;lt;br /&amp;gt;&lt;br /&gt;
TMI - Too Much Information&amp;lt;br /&amp;gt;&lt;br /&gt;
VBA - Visual Basic for Applications&amp;lt;br /&amp;gt;&lt;br /&gt;
VI - Virtual Instrument&amp;lt;br /&amp;gt;&lt;br /&gt;
VIT - Virtual Instrument Template&amp;lt;br /&amp;gt;&lt;br /&gt;
VOIP - Voice Over Internet Protocol&amp;lt;br /&amp;gt;&lt;br /&gt;
W3C - World Wide Web Consortium&amp;lt;br /&amp;gt;&lt;br /&gt;
WTF - What The Fuck?&amp;lt;br /&amp;gt;&lt;br /&gt;
XML - eXtensible Markup Language&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
	<entry>
		<id>https://labviewwiki.org/w/index.php?title=LAVA&amp;diff=1236</id>
		<title>LAVA</title>
		<link rel="alternate" type="text/html" href="https://labviewwiki.org/w/index.php?title=LAVA&amp;diff=1236"/>
		<updated>2007-05-08T17:57:24Z</updated>

		<summary type="html">&lt;p&gt;Eaolson: a brief (and probably incomplete) description of LAVA&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LAVA (&#039;&#039;&#039;L&#039;&#039;&#039;abVIEW &#039;&#039;&#039;A&#039;&#039;&#039;dvanced &#039;&#039;&#039;V&#039;&#039;&#039;irtual &#039;&#039;&#039;A&#039;&#039;&#039;rchitects), at lavag.org, is a website dedicated to advanced development in LabVIEW. It primarily consists of forums where developers discuss problems, solutions, and aspects of LabVIEW programming. It also has a Code Repository, where users can submit [[VI]]s for others to use. Recently, it has begun hosting the LabVIEW-related blogs of several LAVA users.&lt;br /&gt;
&lt;br /&gt;
LAVA currently hosts this LabVIEW Wiki.&lt;br /&gt;
&lt;br /&gt;
[[Category:Uncategorized]]&lt;/div&gt;</summary>
		<author><name>Eaolson</name></author>
	</entry>
</feed>