[Home] Edit Article
Author Information
File Uploads
Edit Article XML Content
<document> <header> <issuecode /> <articlecode /> <zone /> <title /> <authors /> <copyright>CODE Magazine</copyright> <owner>CODE Magazine</owner> </header> <body> <p id="0"> <b>Job-Oriented Programming and Pointers in a Scripting Language</b> </p> <p id="1">This article is about using job-oriented programming and pointers in a scripting language. As a scripting language, we’ll use CSCS (Customized Scripting in C#). This is an easy and a lightweight open-source language that has been described in previous CODE Magazine articles: https://www.codemag.com/article/1607081 introduced it, https://www.codemag.com/article/1711081 showed how you can use it on top of Xamarin to create cross-platform native mobile apps, and https://www.codemag.com/article/1903081 showed how you can use it for Unity programming. CSCS resembles JavaScript with a few differences, such as the variable and function names being case-insensitive. In this article, we’ll be talking about job-oriented programming as implemented in CSCS.</p> <p id="2">Every office job, like print invoice, create offer, manage customer data, manage product data, print accounting list, etc., has its counterpart in appropriate menu system of business application used. Behind any menu item, there’s separate program micro-module. Such micro-modules can interact with each other, calling "child" micro-modules and passing parameters to them. Calling a child micro-module is done by simple <b>Chain</b> command, at any line of code. When the "chained" job is done, program execution proceeds with the next line of the parent job (the one that executed the <b>Chain</b> command). This way, you can easily develop even huge applications using any number of standalone micro-modules.</p> <p id="3">You can also send any parameters to the <b>chained-to</b> program (the child) and return any data from the child program. This way, you can chain from one program to another, any level deep. Any micro-module can be executed from menu or using Chain command from another micro-module.</p> <p id="4">This gives developers the freedom to work on a program independently from one another, as a micro-module is self-sufficient regarding the job that it has to do. Passing parameters is just an option.</p> <p id="5">To facilitate independent development, you need to define parameters that will be used for communication between scripts in case the parameters are needed. This makes any modifications of the whole application very easy, changing only one micro-module. </p> <p id="6">All this functionality has been made with only two functions: <b>Chain</b> and <b>Param</b>. The syntax is simple:</p> <codesnippet> <font>CHAIN</font> <font color="#3B3B3B">»</font> <font>programName</font> <font color="#3B3B3B">»</font> <font color="Blue">WITH</font> <font color="#3B3B3B">»</font> <font>arguments</font> <font color="#3B3B3B">;</font> </codesnippet> <p id="7">The chained-to program (the child program) can listen for arguments with:</p> <codesnippet> <font color="Blue">PARAM</font> <font color="#3B3B3B">»</font> <font>parameters</font> <font color="#3B3B3B">;</font> </codesnippet> <p id="8">The arguments can be constants, variables, or expressions, or any combination. Parameters can be a single variable, an array, or a tuple. From a child program, you can access any variable from a previous (parent) program programmatically. You can also return any value from child to parent programmatically.</p> <p id="9">Let’s see how to use CHAIN/PARAM scripting commands in a C# project, taking as an example a WPF (Windows Presentation Foundation) project.</p> <p id="10">In addition to the CHAIN/PARAM functionality, we’ll also look at how to use pointers in a scripting language. It’s important to note that usually, the main piece of code is in a compiled language (such as C#), but only a part of the project is done in CSCS scripting. There’s an obvious benefit: You don’t have to re-compile anything if you change scripting code, because the scripting will be loaded at runtime.</p> <p id="11">Another benefit of scripting is that you can load scripts, XAML files, and images on the fly from your server. This way, you can get a new version of your client without a formal release! We’ll show how to do this in this article.</p> <p id="12">Let’s start by looking at definition of a chain and how chains can be used in scripting.</p> <h2>Setting Up the CSCS Scripting Environment</h2> <p id="13">Probably the simplest way to start using CSCS scripting is to download the source code from GitHub (see https://github.com/vassilych/cscs) and add the source code directly to your C# .NET project. The license lets you modify and use the code without restrictions.</p> <p id="14">As an example of adding CSCS scripting to a WPF project, take a look at https://github.com/vassilych/cscs_wpf. This is already a preset WPF project with scripting added. There you can also consult the full implementation of the functionality that you’ll see in this article.</p> <p id="15">Take a look at a previous CODE Magazine article: https://www.codemag.com/Article/2008081. It explains how to use WPF with CSCS scripting.</p> <p id="16">Once you set up the project structure, you can explore the possibilities of the customized scripting that you might not have explored before.</p> <h2>Using Chains in Scripting</h2> <p id="17">In this section, you’ll see a cool feature of starting new scripts from a parent script. Also, you’ll see how to pass parameters between these scripts.</p> <h3>Running Child Scripts in the Same Process Space</h3> <p id="18">A sample code for a simple CHAIN functionality is the following:</p> <codesnippet> <font color="#001080">CHAIN</font> <font color="#3B3B3B">»</font> <font>"D:/scripts/scriptName.cscs</font> <font>"</font> <font color="#3B3B3B">;</font> </codesnippet> <p id="19">This runs the specified script and waits until it finishes.</p> <p id="20">You can also specify the default scripts folder in the standard C# project appSettings configuration file (.config). Here’s an example:</p> <codesnippet> <font color="Maroon"><add</font> <font color="#3B3B3B">»</font> <font color="#E50000">key</font> <font color="#3B3B3B">=</font> <font>"</font> <font>ScriptsPath</font> <font>"</font> <font color="#3B3B3B">»</font> <font color="#E50000">value</font> <font color="#3B3B3B">=</font> <font>"D:/scripts/"</font> <font color="Maroon">/></font> </codesnippet> <p id="21">In this case, you can use the path above with the special tpath() function:</p> <codesnippet> <font color="Blue">CHAIN</font> <font>»</font> <font color="#795E26">tpath</font> <font>(</font> <font>)+"</font> <font>scriptName.cscs</font> <font>";</font> </codesnippet> <p id="22">The <b>tpath()</b> is a CSCS function that returns the corresponding "ScriptsPath" path from the config file.</p> <p id="23">Note that spaces are not allowed inside of an argument (e.g., in tpath()+"scriptName.cscs") because the spaces are the argument separators, as you will see in examples below.</p> <p id="24">You can also provide parameters for the chained-to script in a simple way:</p> <codesnippet> <font>CHAIN</font> <font color="#3B3B3B">»</font> <font color="#A31515">"</font> <font color="#A31515">scriptName.cscs</font> <font color="#A31515">"</font> <font color="#3B3B3B">»</font> <font>WITH</font> <font color="#3B3B3B">»</font> <font>arg1</font> <font color="#3B3B3B">»</font> <font color="Blue">arg2</font> <font color="#3B3B3B">»</font> <font>arg3</font> <font color="#3B3B3B">;</font> </codesnippet> <p id="25">Example:</p> <codesnippet> <font color="Blue">CHAIN</font> <font>»</font> <font color="#795E26">tpath</font> <font>(</font> <font>)+"</font> <font>scriptName.cscs</font> <font>"»WITH»"string1"</font> </codesnippet> <codesnippet> <font>»»»»»»variable2»</font> <font>userFunction</font> <font>(</font> <font>arg</font> <font>);</font> </codesnippet> <p id="26">Here, <b>string1</b> is a string constant, <b>variable2 </b>can be variable of any type, even an array variable of any size, and <b>userFunction() </b>can be any user defined function.</p> <h3>Running Child Scripts in a New Process Space</h3> <p id="27">All chained (child) scripts in the previous section run in the same process space. If you want to run the script in another process, there’s another syntax of the CHAIN command:</p> <codesnippet> <font color="Blue">CHAIN</font> <font>»</font> <font color="#795E26">tpath</font> <font>(</font> <font>)+"</font> <font>scriptName.cscs</font> <font>"»NEWRUNTIME»WITH</font> </codesnippet> <codesnippet> <font>»»»»»»"arg1"»"arg2"»"arg3"»"arg4";</font> </codesnippet> <p id="28">In the command above, the NEWRUNTIME keyword tells the interpreter to run the script in another process. Later on, you’ll see an example of a script started in a new runtime environment.</p> <h3>Receiving Arguments in the Child Script and Passing Them Back to the Parent Script</h3> <p id="29">Consider a child script, scriptName.cscs, started from the parent’s script CHAIN command in the previous section. That example contains four arguments, passed from the parent: strings "arg1", "arg2", "arg3", and "arg4". In the chained (child) script, the arguments from the parent script are received as follows:</p> <codesnippet> <font color="#795E26">PARAM</font> <font color="#3B3B3B">(</font> <font>param1</font> <font color="#3B3B3B">,»</font> <font>param2</font> <font color="#3B3B3B">,»</font> <font>param3</font> <font color="#3B3B3B">,»</font> <font>param4</font> <font color="#3B3B3B">);</font> </codesnippet> <p id="30">After running the PARAM command above, the chained script sets its local variables as follows:</p> <codesnippet> <font>param1</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font color="#A31515">"arg1"</font> <font color="#3B3B3B">;»</font> <font>param2</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font color="#A31515">"arg2"</font> <font color="#3B3B3B">;</font> </codesnippet> <codesnippet> <font>param3</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font color="#A31515">"arg3"</font> <font color="#3B3B3B">;»</font> <font>param4</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font color="#A31515">"arg4"</font> <font color="#3B3B3B">;</font> </codesnippet> <p id="31">These four variables are local to the chained script and won’t be known to the parent.</p> <p id="32">It’s also possible to have a two-way exchange of the parameters between the child and the parent script. The syntax is as follows:</p> <codesnippet> <font color="#795E26">ResetField</font> <font color="#3B3B3B">(</font> <font>scriptName</font> <font color="#3B3B3B">,»</font> <font>variableName</font> <font color="#3B3B3B">);</font> </codesnippet> <p id="33">For example:</p> <codesnippet> <font color="#795E26">ResetField</font> <font color="#3B3B3B">(</font> <font>"</font> <font>scriptName.cscs</font> <font>"</font> <font color="#3B3B3B">,»</font> <font>"</font> <font>varNameInParent</font> <font>"</font> <font color="#3B3B3B">);</font> </codesnippet> <p id="34">After running this command, the chained script has access to the variable defined in the parent script, with the name "varNameInParent". Not only is it going to have access to the variable, but also all of the modifications done to "varNameInParent" are visible in the parent script.</p> <p id="35">Using the ResetField() command, the child can do both—have access to all of the variables in the parent script, and also to set any variable in the parent—so that after the child is finished, the parent has had all of its variables modified.</p> <p id="36">Note that the "varNameInParent" variable doesn’t have to exist—the child can create it in the parent space and set it to whatever value (including a number, a string, a tuple, etc.) it needs.</p> <h2>Hello, World! Example in Chaining</h2> <p id="37">In this section, you’ll see an example of chaining scripts using CSCS scripting language in a WPF C# project. The entry point of the first script to be executed is defined in the project .exe.config configuration file using the "CSCS_Init" key. Here’s what we use in the example:</p> <codesnippet> <font color="Maroon"><add</font> <font color="#3B3B3B">»</font> <font color="#E50000">key</font> <font color="#3B3B3B">=</font> <font>"</font> <font>CSCS_Init</font> <font>"</font> <font color="#3B3B3B">»</font> </codesnippet> <codesnippet> <font color="#3B3B3B">»»</font> <font color="#E50000">value</font> <font color="#3B3B3B">=</font> <font>"C:/cscs_wpf/scripts/demoMenu.cscs"</font> <font color="Maroon">/></font> </codesnippet> <p id="38">The full code of the demoMenu.cscs is shown in <b>Listing 1</b>.</p> <p id="39">Note that the first thing the script does is create a new WPF window:</p> <codesnippet> <font color="#795E26">CreateWindow</font> <font color="#3B3B3B">(</font> <font color="#795E26">tpath</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">)»</font> <font>+</font> <font color="#3B3B3B">»</font> <font>"</font> <font>demoMenuWindow.xaml</font> <font>"</font> <font color="#3B3B3B">);</font> </codesnippet> <p id="40">The full code of the demoMenuWindow.xaml file is shown in <b>Listing 2</b>.</p> <p id="41">As you can see, this is a typical XAML file used in any WPF project. Basically, it just creates a WebView based on the https://github.com/vassilych/cscs website and a simple menu.</p> <p id="42">This entry window is shown in <b>Figure 1</b>:</p> <figure id="1" src="image1.png"> <b>Figure </b> <b /> <b> SEQ Figure \* ARABIC </b> <b /> <b>1</b> <b /> <b>:</b> The entry Window after starting a sample project.</figure> <p id="43">At the next step, choose "Run script1" menu entry. The demoMenu.cscs initializes the menus as follows:</p> <codesnippet> <font color="Blue">function</font> <font color="#3B3B3B">»</font> <font>demoMenuWindow_</font> <font>OnDisplay</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">)»{</font> </codesnippet> <codesnippet> <font color="#3B3B3B">»»</font> <font>AddMenuItem</font> <font color="#3B3B3B">(</font> <font color="#A31515">"</font> <font color="#A31515">mainMenuDC</font> <font color="#A31515">"</font> <font color="#3B3B3B">,»</font> <font color="#A31515">"</font> <font color="#A31515">ScriptsDC</font> <font color="#A31515">"</font> <font color="#3B3B3B">,</font> </codesnippet> <codesnippet> <font color="#A31515">.»»»»»»»»»»»»»"Scripts"</font> <font color="#3B3B3B">);</font> </codesnippet> <codesnippet> <font color="#3B3B3B">»»</font> <font>AddMenuItem</font> <font color="#3B3B3B">(</font> <font color="#A31515">"</font> <font color="#A31515">ScriptsDC</font> <font color="#A31515">"</font> <font color="#3B3B3B">,»</font> <font color="#A31515">"demoScript1.cscs"</font> <font color="#3B3B3B">,</font> </codesnippet> <codesnippet> <font color="#3B3B3B">»»»»»</font> <font color="#3B3B3B">»»»»»»»»»</font> <font color="#A31515">"Run»script1"</font> <font color="#3B3B3B">,»</font> <font color="#A31515">"</font> <font color="#A31515">runScript</font> <font color="#A31515">"</font> <font color="#3B3B3B">);</font> </codesnippet> <codesnippet> <font color="#3B3B3B">»»</font> <font>AddMenuItem</font> <font color="#3B3B3B">(</font> <font color="#A31515">"</font> <font color="#A31515">ScriptsDC</font> <font color="#A31515">"</font> <font color="#3B3B3B">,»</font> <font color="#A31515">"exit"</font> <font color="#3B3B3B">,»</font> <font color="#A31515">"Exit"</font> <font color="#3B3B3B">,</font> </codesnippet> <codesnippet> <font color="#3B3B3B">»»»»»</font> <font color="#3B3B3B">»»»»»»»»»</font> <font color="#A31515">"</font> <font color="#A31515">runScript</font> <font color="#A31515">"</font> <font color="#3B3B3B">);</font> </codesnippet> <codesnippet> <font color="#3B3B3B">}</font> </codesnippet> <p id="44">AddMenuItem() is an auxiliary CSCS function that adds an entry to a particular menu.</p> <p id="45">Here’s the CSCS definition of the RunScript function that it uses:</p> <codesnippet> <font color="Blue">function</font> <font>»</font> <font color="#795E26">runScript</font> <font>(</font> <font>sender,»load)»{</font> </codesnippet> <codesnippet> <font>»»</font> <font color="#AF00DB">if</font> <font>»(</font> <font color="#001080">sender</font> <font>»==»</font> <font color="#A31515">"exit"</font> <font>)»{</font> </codesnippet> <codesnippet> <font>»»»»»</font> <font color="#001080">exit</font> <font>;</font> </codesnippet> <codesnippet> <font>»»}</font> </codesnippet> <codesnippet> <font color="Green">//»execute»a»script»from»the»sender.</font> </codesnippet> <codesnippet> <font>»»</font> <font color="#001080">CHAIN</font> <font>»</font> <font color="#795E26">tpath</font> <font>()+</font> <font color="#795E26">strTrim</font> <font>(</font> <font color="#001080">sender</font> <font>);</font> </codesnippet> <codesnippet> <font>}</font> </codesnippet> <p id="46">Once the user clicks "Run Script1" menu option, the demoScript1.cscs is triggered (see <b>Listing 3</b>).</p> <p id="47">That script creates a new window (see <b>Listing 4</b>.). That window is shown in <b>Figure 2</b>.</p> <figure id="2" src="image2.png"> <b>Figure 2:</b> The result of clicking Run Script1 menu</figure> <p id="48">Here we have two buttons; both of them trigger the execution of the demosScript2.cscs script (see <b>Listing 5</b>). The left button triggers the execution in the same process and the right one triggers the execution in a new process space.</p> <p id="49">In any case, as you can see from <b>Listing 5</b>, the first thing the script does is to create a new window, demoScript2.xaml (see <b>Listing 6</b>)<b>.</b></p> <p id="50">The new window, created after the chaining, is shown in <b>Figure 3</b>.</p> <figure id="3" src="image3.png"> <b>Figure 3:</b> The chained script (the child)</figure> <p id="51">Both windows (in <b>Figure 2</b> and in <b>Figure 3</b>) show some graphics. These graphics are parts of the LiveCharts (https://v0.lvcharts.com), an MIT license package that can used as a NuGet package. You can check out how you can create cool graphics from this package in <b>Listing 3 </b>(Pie Chart) and <b>Listing 5 </b>(Normal line chart)).</p> <h2>Downloading Resources from the Internet</h2> <p id="52">In this section, you’ll see how to get the resources (all text, .cscs, and .xaml files, and any images) from the internet.</p> <p id="53">The CSCS function to access a file, located somewhere on the internet, is the following: </p> <codesnippet> <font color="#795E26">Download</font> <font color="#3B3B3B">(</font> <font>fullFilename</font> <font color="#3B3B3B">);</font> </codesnippet> <p id="54">Note that the webserver where you store your files for downloading must be configured to treat .xaml and .cscs files as text files. Usually, this is already done by default for the .xaml files.</p> <pullquote>The webserver where you store files for downloading must be configured to treat .cscs files as text files.</pullquote> <p id="55">For the .cscs files, change the MIME types on the IIS Manager page, as shown in <b>Figure 4</b>.</p> <figure id="4" src="image4.png"> <b>Figure 4:</b> Changing MIME types on the server IIS Manager</figure> <p id="56">After setting up your webserver for downloading the .cscs fies, you can access them as follows: </p> <codesnippet> <font>newXamlFile</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font color="#795E26">Download</font> <font color="#3B3B3B">(»</font> <font color="#A31515">"</font> <font color="#A31515">http://185.32.126.169/</font> </codesnippet> <codesnippet> <font color="#A31515">shared/</font> <font color="#A31515">winWithButtons.xaml</font> <font color="#A31515">"</font> <font color="#3B3B3B">);</font> </codesnippet> <p id="57">You can also do the chaining, explored in the previous section, using scripts from the internet:</p> <codesnippet> <font color="#001080">CHAIN</font> <font color="#001080">»</font> <font color="#795E26">Download</font> <font color="#3B3B3B">(</font> <font>"http://185.32.126.169/</font> </codesnippet> <codesnippet> <font>shared/script5.cscs"</font> <font color="#3B3B3B">);</font> </codesnippet> <p id="58">This statement means that script5.cscs will be downloaded from an internet location and will be immediately started with just one line of code!</p> <p id="59">Alternatively, you can download the version of your program and then, if it’s not up to date, you can download a new version of the CSCS and /or the XAML files.</p> <p id="60">Here’s a simple pseudo-example how to do it in CSCS:</p> <codesnippet> <font color="#001080">v</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font>Download</font> <font color="#3B3B3B">(</font> </codesnippet> <codesnippet> <font color="#3B3B3B">»»</font> <font color="#A31515">"http://185.32.126.169/shared/version.txt"</font> <font color="#3B3B3B">);</font> </codesnippet> <codesnippet> <font color="#001080">lines</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font>readfile</font> <font color="#3B3B3B">(</font> <font color="#001080">v</font> <font color="#3B3B3B">);</font> </codesnippet> <codesnippet> <font color="#001080">version</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font color="#001080">lines</font> <font color="#3B3B3B">[</font> <font color="#098658">0</font> <font color="#3B3B3B">];</font> </codesnippet> <codesnippet> <font color="#AF00DB">if</font> <font color="#3B3B3B">»(</font> <font color="#001080">myVersion</font> <font color="#3B3B3B">»</font> <font><</font> <font color="#3B3B3B">»</font> <font color="#001080">version</font> <font color="#3B3B3B">)»{</font> </codesnippet> <codesnippet> <font color="#3B3B3B">»»</font> <font color="#001080">newScriptFile</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font>Download</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">»»»</font> </codesnippet> <codesnippet> <font color="#3B3B3B">»»»</font> <font color="#A31515">"http://185.32.126.169/shared/script5.cscs"</font> <font color="#3B3B3B">);</font> </codesnippet> <codesnippet> <font color="#3B3B3B">»»</font> <font>copy</font> <font color="#3B3B3B">(</font> <font color="#001080">newScriptFile</font> <font color="#3B3B3B">,»</font> <font color="#001080">programScriptsDir</font> <font color="#3B3B3B">);</font> </codesnippet> <codesnippet> <font color="#3B3B3B">»»</font> <font color="#001080">newXamlFile</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font>Download</font> <font color="#3B3B3B">(</font> </codesnippet> <codesnippet> <font color="#3B3B3B">»»»»</font> <font color="#A31515">"http://185.32.126.169/shared/win5.xaml"</font> <font color="#3B3B3B">);</font> </codesnippet> <codesnippet> <font color="#3B3B3B">»»</font> <font>copy</font> <font color="#3B3B3B">(</font> <font color="#001080">newXamlFile</font> <font color="#3B3B3B">,»</font> <font color="#001080">programXamlDir</font> <font color="#3B3B3B">);</font> </codesnippet> <codesnippet> <font color="#3B3B3B">}</font> </codesnippet> <p id="61">In the same way, you can download images or any other files as well.</p> <h2>Introduction to Pointers in Scripting</h2> <p id="62">Another nice feature that we’d like to introduce in CSCS scripting language is pointers.</p> <p id="63">Pointers work and look similar to the C/C++ pointers (but not the same though: to dereference a pointer, e.g., to access the value of a variable that it points to, use "&" instead of "*"). An important difference is that you don’t have to explicitly allocate and delete the memory to which your pointer points.</p> <p id="64">After a pointer is defined and initialized to point to a variable, as soon as you change the value of the pointer, the value of the variable to which it points will be changed as well. Also, if you change the value of a variable, the pointer value will also be changed.</p> <p id="65">Here’s an example from <b>Listing 5</b>:</p> <codesnippet> <font>//»A»pointer»must»be»first»defined»with»</font> </codesnippet> <codesnippet> <font>//»a»DEFINE»keyword</font> </codesnippet> <codesnippet> <font color="#001080">DEFINE</font> <font color="#3B3B3B">»</font> <font color="#001080">aPointer</font> <font color="#3B3B3B">»</font> <font color="Blue">type</font> <font color="#3B3B3B">»</font> <font color="#001080">f</font> <font color="#3B3B3B">;</font> </codesnippet> <codesnippet> <font color="#001080">aPointer</font> <font color="#3B3B3B">»</font> <font>-></font> <font color="#3B3B3B">»</font> <font color="#001080">var1</font> <font color="#3B3B3B">;</font> </codesnippet> <codesnippet> <font>//»</font> <font>aPointer</font> <font>»points»now»to»a»variable»var1</font> </codesnippet> <codesnippet> <font color="#001080">var1</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font color="#098658">100</font> <font color="#3B3B3B">;</font> </codesnippet> <codesnippet> <font>//»Now»the»value»of»&</font> <font>aPointer</font> <font>»will»be»100</font> </codesnippet> <codesnippet> <font>&</font> <font color="#001080">aPointer</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font color="#098658">200</font> <font color="#3B3B3B">;</font> </codesnippet> <codesnippet> <font>//»Now»the»value»of»var1»will»be»200</font> </codesnippet> <h2>Wrapping Up</h2> <p id="66">In this article, you saw how you can use chains in a scripting language. It’s possible to use script chaining to any level, i.e., you can script from the MainMenu script to script1 then from script1 to script2, and so on.</p> <p id="67">When you quit any script (using the Quit command) the script execution proceeds from the next line after the chain command in the previous (parent) script. Such an implementation can enable even huge applications to be split into many isolated scripts. This is a great advantage for developers who need to independently develop scripts without conflicting with scripts from other developers. As you can see, updating any application may be very easy with simple change of a single script and not of the whole application.</p> <p id="68">We’re looking forward to your feedback, specifically, your experience in scripting with chains and downloading scripts from the internet. Also, we’ll be excited to hear what other features in CSCS you would like to see.</p> </body> <sidebars> <sidebar title="References"> <p id="69"> <b>CSCS Repository: </b>https://github.com/vassilych/cscs</p> <p id="70"> <b>CSCS WPF Repository: </b>https://github.com/vassilych/cscs_wpf</p> <p id="71"> <b>CSCS Visual Studio Code Debugger Extension: </b>https://marketplace.visualstudio.com/items?itemName=vassilik.cscs-debugger </p> </sidebar> </sidebars> <tables /> <codelistings> <codelisting id="1" header="Listing 1: demoMenu.cscs : Main Menu Script"> <code> <font>//»Create»main»menu»</font> <font>window;</font> </code> <code> <font>//»</font> <font>tpath</font> <font>»gets»the»location»of»the»scripts»folder</font> </code> <code> <font color="#795E26">CreateWindow</font> <font color="#3B3B3B">(</font> <font color="#795E26">tpath</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">)</font> <font>+</font> <font color="#A31515">"</font> <font color="#A31515">demoMenuWindow.xaml</font> <font color="#A31515">"</font> <font color="#3B3B3B">);</font> </code> <code /> <code> <font color="#001080">define</font> <font color="#3B3B3B">»</font> <font color="#001080">mainMenuDC</font> <font color="#3B3B3B">»</font> <font color="Blue">type</font> <font color="#3B3B3B">»</font> <font color="#001080">a</font> <font color="#3B3B3B">;</font> </code> <code /> <code> <font color="Blue">function</font> <font color="#3B3B3B">»</font> <font color="#795E26">demoMenuWindow_</font> <font color="#795E26">OnDisplay</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">){</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#795E26">AddMenuItem</font> <font color="#3B3B3B">(</font> <font color="#A31515">"</font> <font color="#A31515">mainMenuDC</font> <font color="#A31515">"</font> <font color="#3B3B3B">,»</font> <font color="#A31515">"</font> <font color="#A31515">ScriptsDC</font> <font color="#A31515">"</font> <font color="#3B3B3B">,»</font> <font color="#A31515">"Scripts"</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#795E26">AddMenuItem</font> <font color="#3B3B3B">(</font> <font color="#A31515">"</font> <font color="#A31515">ScriptsDC</font> <font color="#A31515">"</font> <font color="#3B3B3B">,»</font> <font color="#A31515">"demoScript1.cscs"</font> <font color="#3B3B3B">,</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»»</font> <font color="#A31515">"Run»script1"</font> <font color="#3B3B3B">,»</font> <font color="#A31515">"</font> <font color="#A31515">runScript</font> <font color="#A31515">"</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#795E26">AddMenuItem</font> <font color="#3B3B3B">(</font> <font color="#A31515">"</font> <font color="#A31515">ScriptsDC</font> <font color="#A31515">"</font> <font color="#3B3B3B">,»</font> <font color="#A31515">"exit"</font> <font color="#3B3B3B">,</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»»</font> <font color="#A31515">"Exit"</font> <font color="#3B3B3B">,»</font> <font color="#A31515">"</font> <font color="#A31515">runScript</font> <font color="#A31515">"</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">}</font> </code> <code /> <code> <font>//»function»for»starting»scripts»from»main»menu</font> </code> <code> <font color="Blue">function</font> <font color="#3B3B3B">»</font> <font color="#795E26">runScript</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">sender,»load){</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#AF00DB">if</font> <font color="#3B3B3B">(</font> <font color="#001080">sender</font> <font color="#3B3B3B">»</font> <font>==</font> <font color="#3B3B3B">»</font> <font color="#A31515">"exit"</font> <font color="#3B3B3B">){</font> </code> <code> <font color="#3B3B3B">»»»»»</font> <font>//»exits»the»exe»program</font> </code> <code> <font color="#3B3B3B">»»»»»»</font> <font color="#001080">exit</font> <font color="#3B3B3B">;</font> </code> <code> <font color="#3B3B3B">»»}</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#001080">CHAIN</font> <font color="#3B3B3B">»</font> <font color="#795E26">strTrim</font> <font color="#3B3B3B">(</font> <font color="#795E26">tpath</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">))</font> <font>+</font> <font color="#795E26">strTrim</font> <font color="#3B3B3B">(</font> <font color="#001080">sender</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">}</font> </code> </codelisting> <codelisting id="2" header="Listing 2: demoMenuWindow.xaml: Main Menu Window"> <code> <font><Window</font> <font color="#3B3B3B">»</font> <font color="#E50000">xmlns</font> <font color="#3B3B3B">=</font> </code> <code> <font color="Blue">"http://schemas.microsoft.com/</font> <font color="Blue">winfx</font> <font color="Blue">/2006/</font> <font color="Blue">xaml</font> <font color="Blue">/</font> </code> <code> <font color="Blue">»»presentation"</font> </code> <code> <font color="#E50000">xmlns:x</font> <font color="#3B3B3B">=</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="Blue">"http://schemas.microsoft.com/</font> <font color="Blue">winfx</font> <font color="Blue">/2006/</font> <font color="Blue">xaml</font> <font color="Blue">"</font> </code> <code> <font color="#E50000">xmlns:d</font> <font color="#3B3B3B">=</font> </code> <code> <font color="#3B3B3B">»</font> <font color="Blue">"http://schemas.microsoft.com/expression/blend/2008"</font> </code> <code> <font color="#E50000">xmlns:mc</font> <font color="#3B3B3B">=</font> </code> <code> <font color="Blue">"http://schemas.openxmlformats.org/</font> </code> <code> <font color="Blue">»»markup-compatibility/2006"</font> </code> <code> <font color="#E50000">xmlns:local</font> <font color="#3B3B3B">=</font> <font color="Blue">"</font> <font color="Blue">clr-namespace:WpfCSCS</font> <font color="Blue">"</font> </code> <code> <font color="#E50000">xmlns:WPF</font> <font color="#3B3B3B">=</font> </code> <code> <font color="Blue">"clr-</font> <font color="Blue">namespace:Microsoft.Web</font> <font color="Blue">.WebView2.Wpf;</font> </code> <code> <font color="Blue">»</font> <font color="Blue">assembly=Microsoft.Web.WebView2.Wpf</font> <font color="Blue">"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»</font> <font color="#E50000">mc:Ignorable</font> <font color="#3B3B3B">=</font> <font color="Blue">"d"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»</font> <font color="#E50000">Title</font> <font color="#3B3B3B">=</font> <font color="Blue">"Main»menu"</font> <font color="#3B3B3B">»</font> <font color="#E50000">Height</font> <font color="#3B3B3B">=</font> <font color="Blue">"450"</font> <font color="#3B3B3B">»</font> <font color="#E50000">Width</font> <font color="#3B3B3B">=</font> <font color="Blue">"800"</font> <font color="#3B3B3B">»</font> </code> <code> <font color="#E50000">WindowStartupLocation</font> <font color="#3B3B3B">=</font> <font color="Blue">"</font> <font color="Blue">CenterScreen</font> <font color="Blue">"</font> <font>></font> </code> <code> <font color="#3B3B3B">»»</font> <font><Grid></font> </code> <code> <font color="#3B3B3B">»»»»</font> <font><</font> <font>Grid.RowDefinitions</font> <font>></font> </code> <code> <font color="#3B3B3B">»»»»»»</font> <font><</font> <font>RowDefinition</font> <font color="#3B3B3B">»</font> <font color="#E50000">Height</font> <font color="#3B3B3B">=</font> <font color="Blue">"auto"</font> <font color="#3B3B3B">»</font> <font>/></font> </code> <code> <font color="#3B3B3B">»»»»»»</font> <font><</font> <font>RowDefinition</font> <font color="#3B3B3B">»</font> <font color="#E50000">Height</font> <font color="#3B3B3B">=</font> <font color="Blue">"*"</font> <font color="#3B3B3B">»</font> <font>/></font> </code> <code> <font color="#3B3B3B">»»»»</font> <font></</font> <font>Grid.RowDefinitions</font> <font>></font> </code> <code> <font color="#3B3B3B">»»»»</font> <font><</font> <font>WPF:WebView</font> <font>2</font> <font color="#3B3B3B">»</font> <font color="#E50000">Grid.Row</font> <font color="#3B3B3B">=</font> <font color="Blue">"1"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»</font> <font color="#E50000">x:Name</font> <font color="#3B3B3B">=</font> <font color="Blue">"WebView1"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»</font> <font color="#E50000">Margin</font> <font color="#3B3B3B">=</font> <font color="Blue">"0,0,0,0"</font> </code> <code> <font color="#3B3B3B">»»»»»</font> <font color="#E50000">Source</font> <font color="#3B3B3B">=»</font> <font color="Blue">"https://github.com/</font> <font color="Blue">vassilych</font> <font color="Blue">/</font> <font color="Blue">cscs</font> <font color="Blue">"</font> <font color="#3B3B3B">»</font> <font>/></font> </code> <code> <font color="#3B3B3B">»»»»»»»</font> <font><Menu</font> <font color="#3B3B3B">»</font> <font color="#E50000">Grid.Row</font> <font color="#3B3B3B">=</font> <font color="Blue">"0"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»</font> <font color="#E50000">DataContext</font> <font color="#3B3B3B">=</font> <font color="Blue">"</font> <font color="Blue">mainMenuDC</font> <font color="Blue">"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»</font> <font color="#E50000">Name</font> <font color="#3B3B3B">=</font> <font color="Blue">"</font> <font color="Blue">mainMenuDC</font> <font color="Blue">"</font> <font color="#3B3B3B">»</font> <font>/></font> </code> <code> <font color="#3B3B3B">»»</font> <font></Grid></font> </code> <code> <font></Window></font> </code> </codelisting> <codelisting id="3" header="Listing 3: demoScript1.cscs: First Script triggered from the Menu"> <code> <font color="#795E26">CreateWindow</font> <font color="#3B3B3B">(</font> <font color="#795E26">tpath</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">)</font> <font>+"demoScript1.xaml"</font> <font color="#3B3B3B">);</font> </code> <code /> <code> <font color="Blue">function</font> <font color="#3B3B3B">»</font> <font color="#795E26">demoScript1_</font> <font color="#795E26">onDisplay</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">){</font> </code> <code> <font color="#3B3B3B">»»»»</font> <font color="#795E26">PieChart</font> <font color="#3B3B3B">(</font> <font>"dougnutChart1"</font> <font color="#3B3B3B">,»</font> <font>"</font> <font>init</font> <font>"</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">»»»»</font> <font color="#795E26">PieChart</font> <font color="#3B3B3B">(</font> <font>"dougnutChart1"</font> <font color="#3B3B3B">,»</font> <font>"values"</font> <font color="#3B3B3B">,»</font> <font color="#098658">50</font> <font color="#3B3B3B">,</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»</font> <font>"</font> <font>label</font> <font>»1"</font> <font color="#3B3B3B">,»</font> <font color="#098658">50</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">»»»»</font> <font color="#795E26">PieChart</font> <font color="#3B3B3B">(</font> <font>"dougnutChart1"</font> <font color="#3B3B3B">,»</font> <font>"values"</font> <font color="#3B3B3B">,»</font> <font color="#098658">150</font> <font color="#3B3B3B">,</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»</font> <font>"</font> <font>label</font> <font>»2"</font> <font color="#3B3B3B">,»</font> <font color="#098658">50</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">»»»»</font> <font color="#795E26">PieChart</font> <font color="#3B3B3B">(</font> <font>"dougnutChart1"</font> <font color="#3B3B3B">,»</font> <font>"values"</font> <font color="#3B3B3B">,»</font> <font color="#098658">250</font> <font color="#3B3B3B">,</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»</font> <font>"</font> <font>label</font> <font>»3"</font> <font color="#3B3B3B">,»</font> <font color="#098658">50</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">»»»»</font> <font color="#795E26">PieChart</font> <font color="#3B3B3B">(</font> <font>"dougnutChart1"</font> <font color="#3B3B3B">,»</font> <font>"values"</font> <font color="#3B3B3B">,»</font> <font color="#098658">350</font> <font color="#3B3B3B">,</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»</font> <font>"</font> <font>label</font> <font>»4"</font> <font color="#3B3B3B">,»</font> <font color="#098658">50</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">»»»»</font> <font color="#795E26">PieChart</font> <font color="#3B3B3B">(</font> <font>"dougnutChart1"</font> <font color="#3B3B3B">,»</font> <font>"colors"</font> <font color="#3B3B3B">,</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#3B3B3B">{»</font> <font>"</font> <font>#1C4E80"</font> <font color="#3B3B3B">,»</font> <font>"#EA6A47"</font> <font color="#3B3B3B">,»</font> <font>"#5acc6b"</font> <font color="#3B3B3B">,»</font> <font>"#34d2fa"</font> <font color="#3B3B3B">»});</font> </code> <code> <font color="#3B3B3B">}</font> </code> <code /> <code> <font color="Green">//»button»clicked»event,»starts»a»new»script»and</font> </code> <code> <font color="Green">//»sends»</font> <font color="Green">parameters(</font> <font color="Green">"Hello"»-»constant»</font> </code> <code> <font color="Green">//»and»var1»-»variable)</font> </code> <code> <font color="#001080">function</font> <font color="#3B3B3B">»</font> <font color="#001080">button1</font> <font color="#795E26">@</font> <font color="#795E26">clicked</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">){</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#001080">var1</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font>"»World!"</font> <font color="#3B3B3B">;</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#001080">CHAIN</font> <font color="#3B3B3B">»</font> <font color="#795E26">strTrim</font> <font color="#3B3B3B">(</font> <font color="#795E26">tpath</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">))</font> <font>+"demoScript2.cscs"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»</font> <font color="#001080">WITH</font> <font color="#3B3B3B">»</font> <font>"Hello"</font> <font color="#3B3B3B">»</font> <font color="#001080">var1</font> <font color="#3B3B3B">;</font> </code> <code> <font color="#3B3B3B">}</font> </code> <code /> <code> <font color="Green">//»Same»as»function»above»but»starts»a»script»in</font> </code> <code> <font color="Green">//»a»new»process</font> </code> <code> <font color="#001080">function</font> <font color="#3B3B3B">»</font> <font color="#001080">button2</font> <font color="#795E26">@</font> <font color="#795E26">clicked</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">){</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#001080">var1</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font>"»</font> <font>World!(</font> <font>NEWRUNTIME)"</font> <font color="#3B3B3B">;</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#001080">CHAIN</font> <font color="#3B3B3B">»</font> <font color="#795E26">strTrim</font> <font color="#3B3B3B">(</font> <font color="#795E26">tpath</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">))</font> <font>+"demoScript2.cscs"</font> <font color="#3B3B3B">»</font> </code> <code> <font color="#3B3B3B">»»»»»»»»</font> <font color="#001080">NEWRUNTIME</font> <font color="#3B3B3B">»</font> <font color="#001080">WITH</font> <font color="#3B3B3B">»</font> <font>"Hello"</font> <font color="#3B3B3B">»</font> <font color="#001080">var1</font> <font color="#3B3B3B">;</font> </code> <code> <font color="#3B3B3B">}</font> </code> </codelisting> <codelisting id="4" header="Listing 4: demoScript1.xaml: Window of Script1"> <code> <font><Window</font> <font color="#3B3B3B">»</font> <font color="#E50000">xmlns</font> <font color="#3B3B3B">=</font> </code> <code> <font color="Blue">"http://schemas.microsoft.com/</font> <font color="Blue">winfx</font> <font color="Blue">/2006/</font> <font color="Blue">xaml</font> <font color="Blue">/</font> </code> <code> <font color="Blue">»»presentation"</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#E50000">xmlns:x</font> <font color="#3B3B3B">=</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="Blue">"http://schemas.microsoft.com/</font> <font color="Blue">winfx</font> <font color="Blue">/2006/</font> <font color="Blue">xaml</font> <font color="Blue">"</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#E50000">xmlns:d</font> <font color="#3B3B3B">=</font> </code> <code> <font color="#3B3B3B">»</font> <font color="Blue">"http://schemas.microsoft.com/expression/blend/2008"</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#E50000">xmlns:mc</font> <font color="#3B3B3B">=</font> </code> <code> <font color="Blue">"http://schemas.openxmlformats.org/</font> </code> <code> <font color="Blue">»»»markup-compatibility/2006"</font> </code> <code> <font color="#3B3B3B">»»»</font> <font color="#E50000">xmlns:local</font> <font color="#3B3B3B">=</font> <font color="Blue">"</font> <font color="Blue">clr-namespace:WpfCSCS</font> <font color="Blue">"</font> </code> <code> <font color="#3B3B3B">»»»</font> <font color="#E50000">xmlns:lvc</font> <font color="#3B3B3B">=</font> <font color="Blue">"</font> <font color="Blue">clr</font> <font color="Blue">-</font> </code> <code> <font color="Blue">»</font> <font color="Blue">namespace:LiveChartsCore.SkiaSharpView.WPF</font> <font color="Blue">;</font> </code> <code> <font color="Blue">»»assembly=</font> <font color="Blue">LiveChartsCore.SkiaSharpView.WPF</font> <font color="Blue">"</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#E50000">mc:Ignorable</font> <font color="#3B3B3B">=</font> <font color="Blue">"d"</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#E50000">Title</font> <font color="#3B3B3B">=</font> <font color="Blue">"Script»1"</font> <font color="#3B3B3B">»</font> <font color="#E50000">Height</font> <font color="#3B3B3B">=</font> <font color="Blue">"450"</font> <font color="#3B3B3B">»</font> <font color="#E50000">Width</font> <font color="#3B3B3B">=</font> <font color="Blue">"500"</font> <font color="#3B3B3B">»</font> </code> <code> <font color="#3B3B3B">»»»»</font> <font color="#E50000">WindowStartupLocation</font> <font color="#3B3B3B">=</font> <font color="Blue">"</font> <font color="Blue">CenterScreen</font> <font color="Blue">"</font> <font>></font> </code> <code> <font color="#3B3B3B">»»</font> <font><Grid></font> </code> <code> <font color="#3B3B3B">»»»»</font> <font><</font> <font>lvc:PieChart</font> <font color="#3B3B3B">»</font> <font color="#E50000">LegendPosition</font> <font color="#3B3B3B">=</font> <font color="Blue">"Bottom"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">Name</font> <font color="#3B3B3B">=</font> <font color="Blue">"dougnutChart1"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">VerticalAlignment</font> <font color="#3B3B3B">=</font> <font color="Blue">"Top"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">HorizontalAlignment</font> <font color="#3B3B3B">=</font> <font color="Blue">"Left"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">Width</font> <font color="#3B3B3B">=</font> <font color="Blue">"490"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">Height</font> <font color="#3B3B3B">=</font> <font color="Blue">"289"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">FontSize</font> <font color="#3B3B3B">=</font> <font color="Blue">"10"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">Margin</font> <font color="#3B3B3B">=</font> <font color="Blue">"0,0,0,0"</font> <font color="#3B3B3B">»</font> <font>/></font> </code> <code> <font color="#3B3B3B">»»»»</font> <font><Button</font> <font color="#3B3B3B">»</font> <font color="#E50000">Name</font> <font color="#3B3B3B">=</font> <font color="Blue">"button1"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">Content</font> <font color="#3B3B3B">=</font> <font color="Blue">"CHAIN»to»script»2"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">HorizontalAlignment</font> <font color="#3B3B3B">=</font> <font color="Blue">"Left"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">Margin</font> <font color="#3B3B3B">=</font> <font color="Blue">"90,334,0,0"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">VerticalAlignment</font> <font color="#3B3B3B">=</font> <font color="Blue">"Top"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">Height</font> <font color="#3B3B3B">=</font> <font color="Blue">"60"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">Width</font> <font color="#3B3B3B">=</font> <font color="Blue">"115"</font> <font color="#3B3B3B">»</font> <font>/></font> </code> <code> <font color="#3B3B3B">»»»»</font> <font><Button</font> <font color="#3B3B3B">»</font> <font color="#E50000">x:Name</font> <font color="#3B3B3B">=</font> <font color="Blue">"button2"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»</font> <font color="#E50000">Content</font> <font color="#3B3B3B">=</font> <font color="Blue">"CHAIN»to»script»2(NEWRUNTIME)"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»</font> <font color="#E50000">HorizontalAlignment</font> <font color="#3B3B3B">=</font> <font color="Blue">"Left"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»</font> <font color="#E50000">Margin</font> <font color="#3B3B3B">=</font> <font color="Blue">"250,334,0,0"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»</font> <font color="#E50000">VerticalAlignment</font> <font color="#3B3B3B">=</font> <font color="Blue">"Top"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»</font> <font color="#E50000">Height</font> <font color="#3B3B3B">=</font> <font color="Blue">"60"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»</font> <font color="#E50000">Width</font> <font color="#3B3B3B">=</font> <font color="Blue">"210"</font> <font color="#3B3B3B">»</font> <font>/></font> </code> <code> <font color="#3B3B3B">»»</font> <font></Grid></font> </code> <code> <font></Window></font> </code> </codelisting> <codelisting id="5" header="Listing 5: demoScript2.cscs: script triggered by demoScript1.cscs"> <code> <font color="#795E26">CreateWindow</font> <font color="#3B3B3B">(</font> <font color="#795E26">tpath</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">)</font> <font>+"demoScript2.xaml"</font> <font color="#3B3B3B">);</font> </code> <code /> <code> <font color="#001080">DEFINE</font> <font color="#3B3B3B">»</font> <font color="#001080">aPointer</font> <font color="#3B3B3B">»</font> <font color="Blue">type</font> <font color="#3B3B3B">»</font> <font color="#001080">f</font> <font color="#3B3B3B">;»</font> <font color="Green">//»pointer»type</font> </code> <code> <font color="#001080">DEFINE</font> <font color="#3B3B3B">»</font> <font color="#001080">var1</font> <font color="#3B3B3B">»</font> <font color="#001080">type</font> <font color="#3B3B3B">»</font> <font color="#001080">i</font> <font color="#3B3B3B">»</font> <font color="#001080">size</font> <font color="#3B3B3B">»</font> <font color="#098658">10</font> <font color="#3B3B3B">;»</font> <font color="Green">//»integer»variable</font> </code> <code /> <code> <font color="Blue">function</font> <font color="#3B3B3B">»</font> <font color="#795E26">demoScript2_</font> <font color="#795E26">onInit</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">)»{</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="Green">//»PARAM»will»</font> <font color="Green">recieve</font> <font color="Green">»parameters»sent»from</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="Green">//»the»previous»script.</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="Green">//»They»will»be»named»arg1»and»arg2»in»this»script</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#795E26">PARAM</font> <font color="#3B3B3B">(</font> <font color="#001080">arg1</font> <font color="#3B3B3B">,</font> <font color="#001080">arg2</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="Green">//»Show»arguments</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#795E26">MessageBox</font> <font color="#3B3B3B">(</font> <font color="#001080">arg1</font> <font color="#3B3B3B">»</font> <font>+</font> <font color="#3B3B3B">»</font> <font color="#001080">arg2</font> <font color="#3B3B3B">);</font> </code> <code /> <code> <font color="#3B3B3B">»»</font> <font color="Green">//»</font> <font color="Green">aPointer</font> <font color="Green">»points»to»var1</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#001080">aPointer</font> <font color="#3B3B3B">»</font> <font>-></font> <font color="#3B3B3B">»</font> <font color="#001080">var1</font> <font color="#3B3B3B">;</font> </code> <code /> <code> <font color="#3B3B3B">»»</font> <font color="#001080">var1</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font color="#098658">100</font> <font color="#3B3B3B">;</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#795E26">MessageBox</font> <font color="#3B3B3B">(</font> <font>"var1»=»"</font> <font color="#3B3B3B">»</font> <font>+</font> <font color="#3B3B3B">»</font> <font color="#001080">var1</font> <font color="#3B3B3B">»</font> <font>+</font> <font color="#3B3B3B">»</font> <font>"</font> <font color="#CD3131">,</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»»</font> <font>&</font> <font color="#001080">aPointer</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font>"»+»&</font> <font>aPointer</font> <font>)</font> <font color="#CD3131">;</font> </code> <code> <font color="#3B3B3B">»»</font> <font>&</font> <font color="#001080">aPointer</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font color="#098658">200</font> <font color="#3B3B3B">;</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#795E26">MessageBox</font> <font color="#3B3B3B">(</font> <font>"var1»=»"</font> <font color="#3B3B3B">»</font> <font>+</font> <font color="#3B3B3B">»</font> <font color="#001080">var1</font> <font color="#3B3B3B">»</font> <font>+</font> <font color="#3B3B3B">»</font> <font>"</font> <font color="#CD3131">,</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»»</font> <font>&</font> <font color="#001080">aPointer</font> <font color="#3B3B3B">»</font> <font>=</font> <font color="#3B3B3B">»</font> <font>"»+»&</font> <font>aPointer</font> <font>)</font> <font color="#CD3131">;</font> </code> <code> <font color="#3B3B3B">}</font> </code> <code /> <code> <font color="#001080">function</font> <font color="#3B3B3B">»</font> <font color="#795E26">demoScript2_</font> <font color="#795E26">onDisplay</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">){</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#795E26">Chart</font> <font color="#3B3B3B">(</font> <font>"</font> <font>LineChart</font> <font>"</font> <font color="#3B3B3B">,»</font> <font>"</font> <font>init</font> <font>"</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="Green">//»x»labels»first,»with»font»size»of»12»</font> <font color="Green">px</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#795E26">Chart</font> <font color="#3B3B3B">(</font> <font>"</font> <font>LineChart</font> <font>"</font> <font color="#3B3B3B">,»</font> <font>"</font> <font>labels"</font> <font color="#3B3B3B">,</font> <font>"x</font> <font>"</font> <font color="#3B3B3B">,»</font> <font color="#098658">12</font> <font color="#3B3B3B">,</font> </code> <code> <font color="#3B3B3B">»{</font> <font>"1"</font> <font color="#3B3B3B">,»</font> <font>"2"</font> <font color="#3B3B3B">,»</font> <font>"3"</font> <font color="#3B3B3B">,»</font> <font>"4"</font> <font color="#3B3B3B">,»</font> <font>"5"</font> <font color="#3B3B3B">,»</font> <font>"6"</font> <font color="#3B3B3B">,»</font> <font>"7"</font> <font color="#3B3B3B">,»</font> <font>"8"</font> <font color="#3B3B3B">,»</font> <font>"9"</font> <font color="#3B3B3B">,»</font> <font>"10"</font> <font color="#3B3B3B">});</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#795E26">Chart</font> <font color="#3B3B3B">(</font> <font>"</font> <font>LineChart</font> <font>"</font> <font color="#3B3B3B">,»</font> <font>"</font> <font>SeparatorStep</font> <font>"</font> <font color="#3B3B3B">,»</font> <font color="#098658">1</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="Green">//»set»of»values»for»the»first»line»chart</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#795E26">Chart</font> <font color="#3B3B3B">(</font> <font>"</font> <font>LineChart</font> <font>"</font> <font color="#3B3B3B">,»</font> <font>"values"</font> <font color="#3B3B3B">,»</font> <font>"line"</font> <font color="#3B3B3B">,»</font> </code> <code> <font color="#3B3B3B">»{</font> <font color="#098658">100</font> <font color="#3B3B3B">,»</font> <font color="#098658">512</font> <font color="#3B3B3B">,»</font> <font color="#098658">265</font> <font color="#3B3B3B">,»</font> <font color="#098658">300</font> <font color="#3B3B3B">,»</font> <font color="#098658">1000</font> <font color="#3B3B3B">,»</font> <font color="#098658">456</font> <font color="#3B3B3B">,»</font> <font color="#098658">365</font> <font color="#3B3B3B">,»</font> <font color="#098658">111</font> <font color="#3B3B3B">,»</font> <font color="#098658">900</font> <font color="#3B3B3B">,»</font> <font color="#098658">800</font> <font color="#3B3B3B">},»</font> </code> <code> <font color="#3B3B3B">»»»»</font> <font>"Sample»data»1"</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="Green">//»set»of»values»for»the»second»line»chart</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#795E26">Chart</font> <font color="#3B3B3B">(</font> <font>"</font> <font>LineChart</font> <font>"</font> <font color="#3B3B3B">,»</font> <font>"values"</font> <font color="#3B3B3B">,»</font> <font>"line"</font> <font color="#3B3B3B">,</font> </code> <code> <font color="#3B3B3B">»»{</font> <font color="#098658">30</font> <font color="#3B3B3B">,»</font> <font color="#098658">500</font> <font color="#3B3B3B">,»</font> <font color="#098658">345</font> <font color="#3B3B3B">,»</font> <font color="#098658">456</font> <font color="#3B3B3B">,»</font> <font color="#098658">567</font> <font color="#3B3B3B">,»</font> <font color="#098658">678</font> <font color="#3B3B3B">,»</font> <font color="#098658">789</font> <font color="#3B3B3B">,»</font> <font color="#098658">890</font> <font color="#3B3B3B">,»</font> <font color="#098658">500</font> <font color="#3B3B3B">,»</font> <font color="#098658">200</font> <font color="#3B3B3B">},»</font> </code> <code> <font color="#3B3B3B">»»»</font> <font>"Sample»data»2"</font> <font color="#3B3B3B">);</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="Green">//»define»colors»of»the»first»and»the»second»line</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#795E26">Chart</font> <font color="#3B3B3B">(</font> <font>"</font> <font>LineChart</font> <font>"</font> <font color="#3B3B3B">,»</font> <font>"</font> <font>Color.Series</font> <font>"</font> <font color="#3B3B3B">,»</font> </code> <code> <font color="#3B3B3B">»»»»»»»»</font> <font color="#3B3B3B">{»</font> <font>"</font> <font>#0091D5"</font> <font color="#3B3B3B">,»</font> <font>"red"</font> <font color="#3B3B3B">});»</font> </code> <code> <font color="#3B3B3B">}</font> </code> <code /> <code> <font color="#001080">function</font> <font color="#3B3B3B">»</font> <font color="#001080">exitButton</font> <font color="#795E26">@</font> <font color="#795E26">clicked</font> <font color="#3B3B3B">(</font> <font color="#3B3B3B">){</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="Green">//»exit»from»the»script»and»return»to»the</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="Green">//»previous(parent)»script</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#001080">quit</font> <font color="#3B3B3B">;</font> </code> <code> <font color="#3B3B3B">}</font> </code> </codelisting> <codelisting id="6" header="Listing 6: demoScript2.xaml: Window of Script2"> <code> <font><Window</font> <font color="#3B3B3B">»</font> <font color="#E50000">xmlns</font> <font color="#3B3B3B">=</font> </code> <code> <font color="#3B3B3B">»</font> <font color="Blue">"http://schemas.microsoft.com/</font> <font color="Blue">winfx</font> <font color="Blue">/2006/</font> <font color="Blue">xaml</font> <font color="Blue">/</font> </code> <code> <font color="Blue">»»»presentation"</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#E50000">xmlns:x</font> <font color="#3B3B3B">=</font> </code> <code> <font color="#3B3B3B">»</font> <font color="Blue">"http://schemas.microsoft.com/</font> <font color="Blue">winfx</font> <font color="Blue">/2006/</font> <font color="Blue">xaml</font> <font color="Blue">"</font> </code> <code> <font color="#E50000">xmlns:d</font> <font color="#3B3B3B">=</font> </code> <code> <font color="#3B3B3B">»</font> <font color="Blue">"http://schemas.microsoft.com/expression/blend/2008"</font> </code> <code> <font color="#E50000">xmlns:mc</font> <font color="#3B3B3B">=</font> </code> <code> <font color="#3B3B3B">»</font> <font color="Blue">"http://schemas.openxmlformats.org/markup-</font> </code> <code> <font color="Blue">»»»»compatibility/2006"</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#E50000">xmlns:local</font> <font color="#3B3B3B">=</font> <font color="Blue">"</font> <font color="Blue">clr-namespace:WpfCSCS</font> <font color="Blue">"</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#E50000">xmlns:lvc</font> <font color="#3B3B3B">=</font> </code> <code> <font color="#3B3B3B">»</font> <font color="Blue">"</font> <font color="Blue">clr-</font> <font color="Blue">namespace:LiveChartsCore.SkiaSharpView.WPF</font> <font color="Blue">;</font> </code> <code> <font color="Blue">»»assembly=</font> <font color="Blue">LiveChartsCore.SkiaSharpView.WPF</font> <font color="Blue">"</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#E50000">mc:Ignorable</font> <font color="#3B3B3B">=</font> <font color="Blue">"d"</font> </code> <code> <font color="#3B3B3B">»»</font> <font color="#E50000">Title</font> <font color="#3B3B3B">=</font> <font color="Blue">"Script»2"</font> <font color="#3B3B3B">»</font> <font color="#E50000">Height</font> <font color="#3B3B3B">=</font> <font color="Blue">"450"</font> <font color="#3B3B3B">»</font> <font color="#E50000">Width</font> <font color="#3B3B3B">=</font> <font color="Blue">"500"</font> <font color="#3B3B3B">»</font> </code> <code> <font color="#3B3B3B">»»»»»</font> <font color="#E50000">WindowStartupLocation</font> <font color="#3B3B3B">=</font> <font color="Blue">"</font> <font color="Blue">CenterScreen</font> <font color="Blue">"</font> <font>></font> </code> <code> <font color="#3B3B3B">»»</font> <font><Grid></font> </code> <code> <font color="#3B3B3B">»»</font> <font><</font> <font>lvc:CartesianChart</font> <font color="#3B3B3B">»</font> <font color="#E50000">LegendPosition</font> <font color="#3B3B3B">=</font> <font color="Blue">"Top"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»»»»»»»»»»</font> <font color="#E50000">x:Name</font> <font color="#3B3B3B">=</font> <font color="Blue">"LineChart"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»»»»»»»»»»»»</font> <font color="#E50000">Margin</font> <font color="#3B3B3B">=</font> <font color="Blue">"0"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»»»»»»»»»»»»</font> <font color="#E50000">Height</font> <font color="#3B3B3B">=</font> <font color="Blue">"294"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»»»»»»»»»»»»</font> <font color="#E50000">Width</font> <font color="#3B3B3B">=</font> <font color="Blue">"500"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»»»»»»»»»»»»</font> <font color="#E50000">HorizontalAlignment</font> <font color="#3B3B3B">=</font> <font color="Blue">"Left"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»»»»»»»»»»»»»</font> <font color="#E50000">VerticalAlignment</font> <font color="#3B3B3B">=</font> <font color="Blue">"Top"</font> <font color="#3B3B3B">»</font> <font>/></font> </code> <code> <font color="#3B3B3B">»»»»</font> <font><Button</font> <font color="#3B3B3B">»</font> <font color="#E50000">Name</font> <font color="#3B3B3B">=</font> <font color="Blue">"</font> <font color="Blue">exitButton</font> <font color="Blue">"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">Content</font> <font color="#3B3B3B">=</font> <font color="Blue">"Exit"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">HorizontalAlignment</font> <font color="#3B3B3B">=</font> <font color="Blue">"Left"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">Margin</font> <font color="#3B3B3B">=</font> <font color="Blue">"190,324,0,0"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">VerticalAlignment</font> <font color="#3B3B3B">=</font> <font color="Blue">"Top"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">Height</font> <font color="#3B3B3B">=</font> <font color="Blue">"60"</font> </code> <code> <font color="#3B3B3B">»»»»»»»»»»»»</font> <font color="#E50000">Width</font> <font color="#3B3B3B">=</font> <font color="Blue">"115"</font> <font color="#3B3B3B">»</font> <font>/></font> </code> <code> <font color="#3B3B3B">»»</font> <font></Grid></font> </code> <code> <font></Window></font> </code> </codelisting> </codelistings> </document>