<?xml version="1.0"?>
<Experiment xmlns:dt="urn:schemas-microsoft-com:datatypes"><General><Version><Major>2</Major><Minor>0</Minor><Internal>10</Internal><Build>252</Build><_VersionPersist dt:dt="int">200</_VersionPersist></Version></General><ExperimentObject><Guid dt:dt="string">{717E7FA3-5D5C-42F7-865E-3B680F8F86D0}</Guid><Root dt:dt="string">SessionProc</Root><Name dt:dt="string"></Name><Author dt:dt="string">PST</Author><Abstract dt:dt="string">This experiment illustrates serial port communications.  Two E-Prime
machines are connected via the serial port using a null modem 
cable/adaptor.  At run-time, the user is asked to designate whether
each machine is acting as sender or receiver (the receiving machine
should be launched first).

The sending machine sends a line of text terminated by {ENTER}. 
Upon receipt of a line of text, the receiving machine echos the 
string to the display accompanied by a line number.

Both processes terminate upon the entering of "end" from the 
sending machine.</Abstract><Notes dt:dt="string"></Notes><ClockGuid dt:dt="string">{10343DBD-55BE-45C7-AA62-A5239F6918AB}</ClockGuid><ClockIndex dt:dt="int">0</ClockIndex><ClockScale dt:dt="r8">1</ClockScale><VersionMajor dt:dt="int">1</VersionMajor><VersionMinor dt:dt="int">0</VersionMinor><VersionInternal dt:dt="int">0</VersionInternal><VersionBuild dt:dt="int">2</VersionBuild><VersionAutoIncrement dt:dt="boolean">1</VersionAutoIncrement><CreationDateUtc dt:dt="dateTime">2019-06-03T17:19:49.000</CreationDateUtc><Features dt:dt="int">536870912</Features><Devices><Device><Name dt:dt="string">Display</Name><Class dt:dt="string">Display</Class><DeviceObject><_VersionPersist dt:dt="int">1</_VersionPersist><OpenDevice dt:dt="int">-1</OpenDevice><RTAdjustment dt:dt="int">0</RTAdjustment><Width dt:dt="int">640</Width><Height dt:dt="int">480</Height><BitsPerPixel dt:dt="int">16</BitsPerPixel><DefaultColor dt:dt="string">white</DefaultColor><DisplayIndex dt:dt="int">1</DisplayIndex><RefreshRateRequested dt:dt="int">0</RefreshRateRequested><MinAcceptableRefreshRate dt:dt="int">39</MinAcceptableRefreshRate><MaxAcceptableRefreshRate dt:dt="int">201</MaxAcceptableRefreshRate><DefaultSettingsUsed dt:dt="string">No</DefaultSettingsUsed><BadRefreshErrorUsed dt:dt="string">Yes</BadRefreshErrorUsed><FlippingEnabled dt:dt="boolean">0</FlippingEnabled><RefreshAlignment dt:dt="string">0%</RefreshAlignment></DeviceObject></Device><Device><Name dt:dt="string">Keyboard</Name><Class dt:dt="string">Keyboard</Class><DeviceObject><_VersionPersist dt:dt="int">1</_VersionPersist><OpenDevice dt:dt="int">-1</OpenDevice><CollectionMode dt:dt="int">1</CollectionMode><EmulateDeviceName dt:dt="string"></EmulateDeviceName><SystemAbortWatchSequence dt:dt="string"></SystemAbortWatchSequence><UserBreakStateSequence dt:dt="string"></UserBreakStateSequence><ConditionalExitSequence dt:dt="string"></ConditionalExitSequence><RTAdjustment dt:dt="int">0</RTAdjustment><CapsLock dt:dt="boolean">0</CapsLock><NumLock dt:dt="boolean">0</NumLock></DeviceObject></Device><Device><Name dt:dt="string">Mouse</Name><Class dt:dt="string">Mouse</Class><DeviceObject><_VersionPersist dt:dt="int">1</_VersionPersist><OpenDevice dt:dt="int">-1</OpenDevice><CollectionMode dt:dt="int">1</CollectionMode><EmulateDeviceName dt:dt="string"></EmulateDeviceName><SystemAbortWatchSequence dt:dt="string"></SystemAbortWatchSequence><UserBreakStateSequence dt:dt="string"></UserBreakStateSequence><ConditionalExitSequence dt:dt="string"></ConditionalExitSequence><RTAdjustment dt:dt="int">0</RTAdjustment><OpenMode dt:dt="int">0</OpenMode><ShowCursor dt:dt="boolean">0</ShowCursor></DeviceObject></Device><Device><Name dt:dt="string">Sound</Name><Class dt:dt="string">Sound</Class><DeviceObject><_VersionPersist dt:dt="int">1</_VersionPersist><OpenDevice dt:dt="int">0</OpenDevice><RTAdjustment dt:dt="int">0</RTAdjustment><API dt:dt="string">DirectSound</API></DeviceObject></Device><Device><Name dt:dt="string">Serial</Name><Class dt:dt="string">Serial</Class><DeviceObject><_VersionPersist dt:dt="int">1</_VersionPersist><OpenDevice dt:dt="int">-1</OpenDevice><CollectionMode dt:dt="int">1</CollectionMode><RTAdjustment dt:dt="int">0</RTAdjustment><Port dt:dt="int">1</Port><BaudRate dt:dt="int">9600</BaudRate><DataBits dt:dt="int">8</DataBits><Parity dt:dt="int">0</Parity><StopBits dt:dt="int">0</StopBits></DeviceObject></Device></Devices><Packages/><DataFile><WarnBeforeOverwrite dt:dt="int">-1</WarnBeforeOverwrite><WarnIfConvertFailed dt:dt="int">-1</WarnIfConvertFailed><RemoveERecoveryFile dt:dt="int">0</RemoveERecoveryFile><ReceiveFeedbackDuringDataFileConversion dt:dt="int">-1</ReceiveFeedbackDuringDataFileConversion><DataFileName dt:dt="string"></DataFileName><LogLevels><LogLevel dt:dt="string">Block</LogLevel><LogLevel dt:dt="string">Trial</LogLevel><LogLevel dt:dt="string">SubTrial</LogLevel><LogLevel dt:dt="string">LogLevel5</LogLevel><LogLevel dt:dt="string">LogLevel6</LogLevel><LogLevel dt:dt="string">LogLevel7</LogLevel><LogLevel dt:dt="string">LogLevel8</LogLevel><LogLevel dt:dt="string">LogLevel9</LogLevel><LogLevel dt:dt="string">LogLevel10</LogLevel></LogLevels></DataFile><StartupInfo><DisplaySummary dt:dt="boolean">0</DisplaySummary><UseDefaults dt:dt="boolean">1</UseDefaults><LoadStartupInfo dt:dt="boolean">1</LoadStartupInfo><StartupInfoItems><StartupInfoItem><Name dt:dt="string">Subject</Name><Prompt dt:dt="string">Please enter the Subject Number (1-32767, 0=No Data Logging):</Prompt><DataType dt:dt="int">0</DataType><Enabled dt:dt="int">-1</Enabled><PromptEnabled dt:dt="int">-1</PromptEnabled><Default dt:dt="string">1</Default><Min dt:dt="int">0</Min><Max dt:dt="int">32767</Max></StartupInfoItem><StartupInfoItem><Name dt:dt="string">Session</Name><Prompt dt:dt="string">Please enter the Session Number (0-32767):</Prompt><DataType dt:dt="int">0</DataType><Enabled dt:dt="int">-1</Enabled><PromptEnabled dt:dt="int">-1</PromptEnabled><Default dt:dt="string">1</Default><Min dt:dt="int">0</Min><Max dt:dt="int">32767</Max></StartupInfoItem><StartupInfoItem><Name dt:dt="string">Group</Name><Prompt dt:dt="string">Please enter Subject's Group (0-32767):</Prompt><DataType dt:dt="int">0</DataType><Enabled dt:dt="int">0</Enabled><PromptEnabled dt:dt="int">0</PromptEnabled><Default dt:dt="string">1</Default><Min dt:dt="int">0</Min><Max dt:dt="int">32767</Max></StartupInfoItem><StartupInfoItem><Name dt:dt="string">Name</Name><Prompt dt:dt="string">Please enter Subject's Name:</Prompt><DataType dt:dt="int">1</DataType><Enabled dt:dt="int">0</Enabled><PromptEnabled dt:dt="int">0</PromptEnabled><Default dt:dt="string"></Default><MaxLength dt:dt="int">255</MaxLength></StartupInfoItem><StartupInfoItem><Name dt:dt="string">Age</Name><Prompt dt:dt="string">Please enter Subject's Age (0-150):</Prompt><DataType dt:dt="int">0</DataType><Enabled dt:dt="int">0</Enabled><PromptEnabled dt:dt="int">0</PromptEnabled><Default dt:dt="string">0</Default><Min dt:dt="int">0</Min><Max dt:dt="int">150</Max></StartupInfoItem><StartupInfoItem><Name dt:dt="string">Sex</Name><Prompt dt:dt="string">Please enter Subject's Sex:</Prompt><DataType dt:dt="int">2</DataType><Enabled dt:dt="int">0</Enabled><PromptEnabled dt:dt="int">0</PromptEnabled><Default dt:dt="string">male</Default><Choices><Choice dt:dt="string">male</Choice><Choice dt:dt="string">female</Choice></Choices></StartupInfoItem><StartupInfoItem><Name dt:dt="string">Handedness</Name><Prompt dt:dt="string">Enter Subject's Handedness:</Prompt><DataType dt:dt="int">2</DataType><Enabled dt:dt="int">0</Enabled><PromptEnabled dt:dt="int">0</PromptEnabled><Default dt:dt="string">left</Default><Choices><Choice dt:dt="string">left</Choice><Choice dt:dt="string">right</Choice></Choices></StartupInfoItem><StartupInfoItem><Name dt:dt="string">ResearcherID</Name><Prompt dt:dt="string">Please enter Researcher's ID:</Prompt><DataType dt:dt="int">0</DataType><Enabled dt:dt="int">0</Enabled><PromptEnabled dt:dt="int">0</PromptEnabled><Default dt:dt="string">1</Default><Min dt:dt="int">0</Min><Max dt:dt="int">32767</Max></StartupInfoItem></StartupInfoItems></StartupInfo></ExperimentObject><StudioItems><StudioItem><Name dt:dt="string">BlockList</Name><TypeName dt:dt="string">List</TypeName><Tag dt:dt="string"></Tag><Notes dt:dt="string"></Notes><ObjectData><Guid dt:dt="string">{F1373518-BE91-40A0-AB4D-B426AA272019}</Guid><Version><Major>2</Major><Minor>0</Minor><Internal>10</Internal><Build>258</Build><_VersionPersist dt:dt="int">5</_VersionPersist></Version><LoggingItems/><ItemList><Item dt:dt="string">SenderTrialProc</Item><Item dt:dt="string">ReceiverTrialProc</Item></ItemList><DeviceList/><Order dt:dt="int">3</Order><OrderBy dt:dt="int">3</OrderBy><NoRepeatAfterReset dt:dt="int">0</NoRepeatAfterReset><ResetEveryRun dt:dt="boolean">1</ResetEveryRun><HideLevelsWithZeroWeight dt:dt="boolean">0</HideLevelsWithZeroWeight><CycleDef dt:dt="int">1</CycleDef><CycleValueSamples dt:dt="int">1</CycleValueSamples><CycleValueCondition dt:dt="string"></CycleValueCondition><ExitDef dt:dt="int">1</ExitDef><ExitValueCycles dt:dt="int">1</ExitValueCycles><ExitValueSamples dt:dt="int">1</ExitValueSamples><ExitValueSeconds dt:dt="int">0</ExitValueSeconds><ExitValueCondition dt:dt="string"></ExitValueCondition><LoadMethod dt:dt="int">0</LoadMethod><Filename dt:dt="string"></Filename><Attributes><Attribute><Name dt:dt="string">Weight</Name><System dt:dt="int">1</System><DefaultValue dt:dt="string"></DefaultValue><Width dt:dt="int">75</Width><Visible dt:dt="boolean">1</Visible><OrderIndex dt:dt="int">0</OrderIndex></Attribute><Attribute><Name dt:dt="string">Nested</Name><System dt:dt="int">1</System><DefaultValue dt:dt="string"></DefaultValue><Width dt:dt="int">75</Width><Visible dt:dt="boolean">1</Visible><OrderIndex dt:dt="int">1</OrderIndex></Attribute><Attribute><Name dt:dt="string">Procedure</Name><System dt:dt="int">1</System><DefaultValue dt:dt="string"></DefaultValue><Width dt:dt="int">121</Width><Visible dt:dt="boolean">1</Visible><OrderIndex dt:dt="int">2</OrderIndex></Attribute></Attributes><Levels><Level dt:dt="string">1		SenderTrialProc</Level><Level dt:dt="string">1		ReceiverTrialProc</Level></Levels></ObjectData></StudioItem><StudioItem><Name dt:dt="string">SessionProc</Name><TypeName dt:dt="string">Procedure</TypeName><Tag dt:dt="string"></Tag><Notes dt:dt="string"></Notes><ObjectData><Guid dt:dt="string">{3E2CFC43-FF90-48BE-A3BF-E21A3574C17B}</Guid><Version><Major>2</Major><Minor>0</Minor><Internal>10</Internal><Build>254</Build><_VersionPersist dt:dt="int">201</_VersionPersist></Version><LoggingItems/><ItemList><Item dt:dt="string">Intro</Item><Item dt:dt="string">SendOrReceive</Item><Item dt:dt="string">BlockList</Item></ItemList><DeviceList/><LogData dt:dt="boolean">1</LogData><FlushDataLog dt:dt="boolean">0</FlushDataLog><GenerateLabels dt:dt="boolean">1</GenerateLabels><ProcessPendingInputMasks dt:dt="int">2</ProcessPendingInputMasks><GeneratePreRun dt:dt="int">2</GeneratePreRun><GeneratePostRun dt:dt="int">2</GeneratePostRun><FlowItems><FlowItem><Name dt:dt="string">Intro</Name><TypeName dt:dt="string">TextDisplay</TypeName></FlowItem><FlowItem><Name dt:dt="string">SendOrReceive</Name><TypeName dt:dt="string">InLine</TypeName></FlowItem><FlowItem><Name dt:dt="string">BlockList</Name><TypeName dt:dt="string">List</TypeName></FlowItem></FlowItems></ObjectData></StudioItem><StudioItem><Name dt:dt="string">SenderTrialProc</Name><TypeName dt:dt="string">Procedure</TypeName><Tag dt:dt="string"></Tag><Notes dt:dt="string"></Notes><ObjectData><Guid dt:dt="string">{F9DE06C8-4BF0-4894-8F96-B1F4A61FAC4B}</Guid><Version><Major>2</Major><Minor>0</Minor><Internal>10</Internal><Build>254</Build><_VersionPersist dt:dt="int">201</_VersionPersist></Version><LoggingItems/><ItemList><Item dt:dt="string">Label1</Item><Item dt:dt="string">Sender</Item><Item dt:dt="string">SendText</Item></ItemList><DeviceList/><LogData dt:dt="boolean">1</LogData><FlushDataLog dt:dt="boolean">0</FlushDataLog><GenerateLabels dt:dt="boolean">1</GenerateLabels><ProcessPendingInputMasks dt:dt="int">2</ProcessPendingInputMasks><GeneratePreRun dt:dt="int">2</GeneratePreRun><GeneratePostRun dt:dt="int">2</GeneratePostRun><FlowItems><FlowItem><Name dt:dt="string">Label1</Name><TypeName dt:dt="string">Label</TypeName></FlowItem><FlowItem><Name dt:dt="string">Sender</Name><TypeName dt:dt="string">TextDisplay</TypeName></FlowItem><FlowItem><Name dt:dt="string">SendText</Name><TypeName dt:dt="string">InLine</TypeName></FlowItem></FlowItems></ObjectData></StudioItem><StudioItem><Name dt:dt="string">ReceiverTrialProc</Name><TypeName dt:dt="string">Procedure</TypeName><Tag dt:dt="string"></Tag><Notes dt:dt="string"></Notes><ObjectData><Guid dt:dt="string">{7252AA76-AAA0-409E-83A8-A6121604A4FD}</Guid><Version><Major>2</Major><Minor>0</Minor><Internal>10</Internal><Build>254</Build><_VersionPersist dt:dt="int">201</_VersionPersist></Version><LoggingItems/><ItemList><Item dt:dt="string">ReceiveText</Item></ItemList><DeviceList/><LogData dt:dt="boolean">1</LogData><FlushDataLog dt:dt="boolean">0</FlushDataLog><GenerateLabels dt:dt="boolean">1</GenerateLabels><ProcessPendingInputMasks dt:dt="int">2</ProcessPendingInputMasks><GeneratePreRun dt:dt="int">2</GeneratePreRun><GeneratePostRun dt:dt="int">2</GeneratePostRun><FlowItems><FlowItem><Name dt:dt="string">ReceiveText</Name><TypeName dt:dt="string">InLine</TypeName></FlowItem></FlowItems></ObjectData></StudioItem><StudioItem><Name dt:dt="string">SendOrReceive</Name><TypeName dt:dt="string">InLine</TypeName><Tag dt:dt="string"></Tag><Notes dt:dt="string"></Notes><ObjectData><Guid dt:dt="string">{40331395-04BA-4385-BB02-F2C59D8C5FBC}</Guid><Version><Major>2</Major><Minor>0</Minor><Internal>10</Internal><Build>262</Build><_VersionPersist dt:dt="int">1</_VersionPersist></Version><LoggingItems/><DeviceList/><Code dt:dt="string">' Pick a line of the BlockList based on the response.
' This determines the Procedure to be run (Sender or Receiver)
Set BlockList.Deletion = PickOne( Intro.RESP )
BlockList.Reset
</Code></ObjectData></StudioItem><StudioItem><Name dt:dt="string">SendText</Name><TypeName dt:dt="string">InLine</TypeName><Tag dt:dt="string"></Tag><Notes dt:dt="string"></Notes><ObjectData><Guid dt:dt="string">{FC62C8CC-5D44-4336-AE3D-B4D6935A9CE1}</Guid><Version><Major>2</Major><Minor>0</Minor><Internal>10</Internal><Build>262</Build><_VersionPersist dt:dt="int">1</_VersionPersist></Version><LoggingItems/><DeviceList/><Code dt:dt="string">Dim strLine As String
strLine = ""


strLine = Sender.RESP
If Len(strLine) = 0 Then
	GoTo Label1
Else
	'Format input string to remove spaces.
	Serial.WriteString strLine
End If


' If we are not ending then allow another line.
' must strip off {ENTER} from the end
If (Left$(strLine, Len(strLine)-Len("{ENTER}")) &lt;&gt; "end") Then GoTo Label1


' Allow time for receiver to close.
Sleep 500
</Code></ObjectData></StudioItem><StudioItem><Name dt:dt="string">ReceiveText</Name><TypeName dt:dt="string">InLine</TypeName><Tag dt:dt="string"></Tag><Notes dt:dt="string"></Notes><ObjectData><Guid dt:dt="string">{78C9C5A4-549E-49EA-B513-425FD3E23144}</Guid><Version><Major>2</Major><Minor>0</Minor><Internal>10</Internal><Build>262</Build><_VersionPersist dt:dt="int">1</_VersionPersist></Version><LoggingItems/><DeviceList/><Code dt:dt="string">Dim i As Long
Dim h As Long
Dim n As Long
Dim strIn As String
Dim strLine As String
Dim dc As Canvas
Dim bFullLine As Boolean
Dim bEndTrial As Boolean

strLine = ""
bFullLine = False
bEndTrial = False
i = 1
h = 15	' text height
Set dc = Display.Canvas
dc.Clear
dc.Text 0, 0, "Receiving..."

Do
	Do

		' Wait for data
		Do
		Loop While Serial.InputCount = 0

		' Data is now available.
		n = Serial.ReadString( strIn )

		' concatenate the line
		strLine = strLine &amp; strIn

		' See if we have a full line yet
		If Right$( strLine, Len("{ENTER}") ) = "{ENTER}" Then

			' Strip off {ENTER}
			strLine = Left$( strLine, Len(strLine)-Len("{ENTER}"))
			
			'Replace {SPACE} with " "
			strLine = ReplaceString (strLine, "{SPACE}", " ")

			'Remove {SHIFT}
			strLine = ReplaceString (strLine, "{SHIFT}", "")

			' Display the line
			dc.Text 0, i*h, CStr(i) &amp; ":" &amp; strLine

			' Set flag to terminate app when "end" is entered
			If strLine = "end" Then bEndTrial = True
			strLine = ""

			bFullLine = True
			i = i + 1
			'Clear screen after 30 lines (30th line displayed for 1 second)
			If (i &gt; 30) Then
				Sleep 1000
				dc.Clear
				dc.Text 0, 0, "Receiving..."
				i = 1
			End If
		End If
	Loop Until bFullLine
	bFullLine = False

Loop While bEndTrial = False

'Allow time before closing
Sleep 500</Code></ObjectData></StudioItem><StudioItem><Name dt:dt="string">Intro</Name><TypeName dt:dt="string">TextDisplay</TypeName><Tag dt:dt="string"></Tag><Notes dt:dt="string"></Notes><ObjectData><Guid dt:dt="string">{30BA690B-9915-47E1-BF09-F09D01C1E15D}</Guid><Version><Major>2</Major><Minor>0</Minor><Internal>10</Internal><Build>263</Build><_VersionPersist dt:dt="int">100</_VersionPersist></Version><LoggingItems><LoggingItem><Name dt:dt="string">OnsetDelay</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">OnsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">DurationError</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">PreRelease</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">Duration</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">StartTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">OffsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">FinishTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">TimingMode</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">CustomOnsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">CustomOffsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">ActionDelay</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">ActionTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">TargetOffsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">TargetOnsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">PendingInputMasks</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">OffsetDelay</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">RTTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">ACC</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">RT</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">RESP</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">CRESP</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">Tag</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">OnsetToOnsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem></LoggingItems><DeviceList><Device dt:dt="string">Keyboard</Device></DeviceList><InputMasks><InputMask><DeviceName dt:dt="string">Keyboard</DeviceName><DeviceClass dt:dt="string">Keyboard</DeviceClass><AllowableInput dt:dt="string">12</AllowableInput><CorrectInput dt:dt="string"></CorrectInput><TimeLimit dt:dt="string"></TimeLimit><MaxCount dt:dt="string">1</MaxCount><InputAction dt:dt="int">1</InputAction><SyncOwnerDuration dt:dt="boolean">1</SyncOwnerDuration><Enabled dt:dt="boolean">1</Enabled><FlushInputBuffer dt:dt="string">Yes</FlushInputBuffer><TerminationInput dt:dt="string"></TerminationInput><UserTag dt:dt="string"></UserTag><EchoClients/><ResponseMode dt:dt="string">All</ResponseMode><ProcessBackspace dt:dt="string">Yes</ProcessBackspace></InputMask></InputMasks><Tasks/><Duration dt:dt="string">-1</Duration><JumpLabel dt:dt="string"></JumpLabel><TimingMode dt:dt="int">0</TimingMode><PreRelease dt:dt="string">0</PreRelease><OnsetSync dt:dt="int">1</OnsetSync><OffsetSync dt:dt="int">0</OffsetSync><ForeColor dt:dt="string">black</ForeColor><BackColor dt:dt="string">white</BackColor><BackStyle dt:dt="string">opaque</BackStyle><BorderColor dt:dt="string">black</BorderColor><BorderWidth dt:dt="string">0</BorderWidth><X dt:dt="string">center</X><Y dt:dt="string">center</Y><Width dt:dt="string">100%</Width><Height dt:dt="string">100%</Height><XAlign dt:dt="string">center</XAlign><YAlign dt:dt="string">center</YAlign><AlignHorizontal dt:dt="string">center</AlignHorizontal><AlignVertical dt:dt="string">center</AlignVertical><ClearAfter dt:dt="string">No</ClearAfter><FontName dt:dt="string">Courier New</FontName><FontSize dt:dt="string">18</FontSize><FontBold dt:dt="string">Yes</FontBold><FontItalic dt:dt="string">No</FontItalic><FontUnderline dt:dt="string">No</FontUnderline><FontStrikeout dt:dt="string">No</FontStrikeout><Text dt:dt="string">This demonstrates implementing basic serial communications in E-Prime.

You should connect two machines via the serial port and you MUST use a NULL MODEM cable/adaptor for this example.

Which do you want this application to be sender or receiver?

Type 1=sender or 2=receiver.</Text><WordWrap dt:dt="int">-1</WordWrap><GeneratePreRun dt:dt="int">0</GeneratePreRun><GeneratePostRun dt:dt="int">0</GeneratePostRun><ResetLoggingProperties dt:dt="boolean">0</ResetLoggingProperties></ObjectData></StudioItem><StudioItem><Name dt:dt="string">Sender</Name><TypeName dt:dt="string">TextDisplay</TypeName><Tag dt:dt="string"></Tag><Notes dt:dt="string"></Notes><ObjectData><Guid dt:dt="string">{42324614-1F09-4F4B-A9C0-6915753967BB}</Guid><Version><Major>2</Major><Minor>0</Minor><Internal>10</Internal><Build>263</Build><_VersionPersist dt:dt="int">100</_VersionPersist></Version><LoggingItems><LoggingItem><Name dt:dt="string">OnsetDelay</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">OnsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">DurationError</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">PreRelease</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">Duration</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">StartTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">OffsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">FinishTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">TimingMode</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">CustomOnsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">CustomOffsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">ActionDelay</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">ActionTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">TargetOffsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">TargetOnsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">PendingInputMasks</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">OffsetDelay</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">RTTime</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">ACC</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">RT</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">RESP</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">CRESP</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">Tag</Name><Log dt:dt="boolean">0</Log></LoggingItem><LoggingItem><Name dt:dt="string">OnsetToOnsetTime</Name><Log dt:dt="boolean">0</Log></LoggingItem></LoggingItems><DeviceList><Device dt:dt="string">Display</Device><Device dt:dt="string">Keyboard</Device></DeviceList><InputMasks><InputMask><DeviceName dt:dt="string">Keyboard</DeviceName><DeviceClass dt:dt="string">Keyboard</DeviceClass><AllowableInput dt:dt="string">{ANY}</AllowableInput><CorrectInput dt:dt="string"></CorrectInput><TimeLimit dt:dt="string"></TimeLimit><MaxCount dt:dt="string">1000</MaxCount><InputAction dt:dt="int">1</InputAction><SyncOwnerDuration dt:dt="boolean">1</SyncOwnerDuration><Enabled dt:dt="boolean">1</Enabled><FlushInputBuffer dt:dt="string">Yes</FlushInputBuffer><TerminationInput dt:dt="string">{ENTER}</TerminationInput><UserTag dt:dt="string"></UserTag><EchoClients><EchoClient><EchoDevice dt:dt="string">Display</EchoDevice><EchoDeviceName dt:dt="string">Display</EchoDeviceName><X dt:dt="string">0</X><Y dt:dt="string">50%</Y><Width dt:dt="string">100%</Width><Height dt:dt="string">50%</Height><ForeColor dt:dt="string">white</ForeColor><BackColor dt:dt="string">black</BackColor><BackStyle dt:dt="string">opaque</BackStyle><BorderColor dt:dt="string">black</BorderColor><BorderWidth dt:dt="string">1</BorderWidth><FontName dt:dt="string">Courier New</FontName><FontSize dt:dt="string">10</FontSize><FontBold dt:dt="string">No</FontBold><FontItalic dt:dt="string">No</FontItalic><FontUnderline dt:dt="string">No</FontUnderline><FontStrikeout dt:dt="string">No</FontStrikeout><WordWrap dt:dt="boolean">1</WordWrap><ShowPositionMarker dt:dt="string">Yes</ShowPositionMarker><ClearAfter dt:dt="string">Yes</ClearAfter></EchoClient></EchoClients><ResponseMode dt:dt="string">All</ResponseMode><ProcessBackspace dt:dt="string">Yes</ProcessBackspace></InputMask></InputMasks><Tasks/><Duration dt:dt="string">-1</Duration><JumpLabel dt:dt="string"></JumpLabel><TimingMode dt:dt="int">0</TimingMode><PreRelease dt:dt="string">0</PreRelease><OnsetSync dt:dt="int">1</OnsetSync><OffsetSync dt:dt="int">0</OffsetSync><ForeColor dt:dt="string">black</ForeColor><BackColor dt:dt="string">white</BackColor><BackStyle dt:dt="string">opaque</BackStyle><BorderColor dt:dt="string">black</BorderColor><BorderWidth dt:dt="string">0</BorderWidth><X dt:dt="string">center</X><Y dt:dt="string">center</Y><Width dt:dt="string">100%</Width><Height dt:dt="string">100%</Height><XAlign dt:dt="string">center</XAlign><YAlign dt:dt="string">center</YAlign><AlignHorizontal dt:dt="string">left</AlignHorizontal><AlignVertical dt:dt="string">top</AlignVertical><ClearAfter dt:dt="string">No</ClearAfter><FontName dt:dt="string">Courier New</FontName><FontSize dt:dt="string">18</FontSize><FontBold dt:dt="string">Yes</FontBold><FontItalic dt:dt="string">No</FontItalic><FontUnderline dt:dt="string">No</FontUnderline><FontStrikeout dt:dt="string">No</FontStrikeout><Text dt:dt="string">Please type and ENTER a line of text to send.   

Type 'end' to instruct both apps to close.


</Text><WordWrap dt:dt="int">-1</WordWrap><GeneratePreRun dt:dt="int">0</GeneratePreRun><GeneratePostRun dt:dt="int">0</GeneratePostRun><ResetLoggingProperties dt:dt="boolean">0</ResetLoggingProperties></ObjectData></StudioItem><StudioItem><Name dt:dt="string">Label1</Name><TypeName dt:dt="string">Label</TypeName><Tag dt:dt="string"></Tag><Notes dt:dt="string"></Notes><ObjectData><Guid dt:dt="string">{21F2A12B-BACC-4CE7-8426-89A48722EA26}</Guid><Version><Major>2</Major><Minor>0</Minor><Internal>10</Internal><Build>263</Build><_VersionPersist dt:dt="int">1</_VersionPersist></Version><LoggingItems/><DeviceList/></ObjectData></StudioItem></StudioItems><UserScript dt:dt="string">Function ReplaceString(strSource As String, strFind As String, strReplace As String) As String
 
    Dim strFinal As String
    Dim nPosNew As Integer
    Dim nPos As Integer
    nPos = 1
    
    Do
        nPosNew = InStr(nPos, strSource, strFind)
        If nPosNew &gt; 0 Then
            'Append up to where we found
            strFinal = strFinal &amp; Mid(strSource, nPos, nPosNew - nPos)
            
            'Append the replaced string
            strFinal = strFinal &amp; strReplace
            
            'Move past the item to find
            nPos = nPosNew + Len(strFind)
        Else
            'Append the remainder of the string
            strFinal = strFinal &amp; Right(strSource, Len(strSource) - (nPos - 1))
            
            'No more need to search
            nPos = 0
        End If
    
    Loop Until nPos &lt; 1
    
    ReplaceString = strFinal
 
End Function</UserScript></Experiment>
