/ .. / / -> download
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <!-- Converts a process data module to a shell script with interaction via
       the dialog command. -->

  <xsl:output method="text"/>

  <xsl:param name="dialog">dialog</xsl:param>

  <xsl:param name="height" select="24"/>
  <xsl:param name="width" select="80"/>

  <xsl:template match="dmodule">
    <xsl:text>#!bin/sh</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:apply-templates select="content/process"/>
    <xsl:text>clear</xsl:text>
    <xsl:text>
</xsl:text>
  </xsl:template>

  <xsl:template match="process">
    <xsl:apply-templates select="variableDeclarations|variablePreSet|dmSeq"/>
  </xsl:template>

  <xsl:template match="dmSeq|dmThenSeq|dmElseSeq">
    <xsl:if test="@applicRefId">
      <xsl:variable name="id" select="@applicRefId"/>
      <xsl:text>if [ </xsl:text>
      <xsl:apply-templates select="//applic[@id = $id]"/>
      <xsl:text> ]</xsl:text>
      <xsl:text>
</xsl:text>
      <xsl:text>then</xsl:text>
      <xsl:text>
</xsl:text>
    </xsl:if>
    <xsl:apply-templates select="dmNode|dmNodeAlts|dmIf|dmLoop|dmSeqAlts"/>
    <xsl:if test="@applicRefId">
      <xsl:text>fi</xsl:text>
      <xsl:text>
</xsl:text>
    </xsl:if>
  </xsl:template>

  <xsl:template match="dmSeqAlts">
    <xsl:apply-templates select="dmSeq"/>
  </xsl:template>

  <xsl:template name="backtitle">
    <xsl:text> --backtitle "</xsl:text>
    <xsl:apply-templates select="ancestor-or-self::dmodule//dmAddressItems/dmTitle"/>
    <xsl:text>"</xsl:text>
  </xsl:template>

  <xsl:template match="dmTitle">
    <xsl:apply-templates select="techName"/>
    <xsl:if test="infoName">
      <xsl:text> - </xsl:text>
      <xsl:apply-templates select="infoName"/>
    </xsl:if>
  </xsl:template>

  <xsl:template match="dmNode">
    <xsl:if test="@applicRefId">
      <xsl:variable name="id" select="@applicRefId"/>
      <xsl:text>if [ </xsl:text>
      <xsl:apply-templates select="//applic[@id = $id]"/>
      <xsl:text> ] </xsl:text>
      <xsl:text>
</xsl:text>
      <xsl:text>then</xsl:text>
      <xsl:text>
</xsl:text>
    </xsl:if>
    <xsl:if test="proceduralStep">
      <xsl:value-of select="$dialog"/>
      <xsl:call-template name="backtitle"/>
      <xsl:apply-templates select="title"/>
      <xsl:text> --msgbox "</xsl:text>
      <xsl:apply-templates select="proceduralStep"/>
      <xsl:text>" </xsl:text>
      <xsl:value-of select="$height"/>
      <xsl:text> </xsl:text>
      <xsl:value-of select="$width"/>
      <xsl:text>
</xsl:text>
    </xsl:if>
    <xsl:apply-templates select="variablePreSet|dialog|message|externalApplication"/>
    <xsl:if test="@applicRefId">
      <xsl:text>fi</xsl:text>
      <xsl:text>
</xsl:text>
    </xsl:if>
  </xsl:template>

  <xsl:template match="proceduralStep">
    <xsl:number level="multiple"/>
    <xsl:text>. </xsl:text>
    <xsl:apply-templates select="title"/>
    <xsl:apply-templates select="para"/>
  </xsl:template>

  <xsl:template match="proceduralStep/title">
    <xsl:apply-templates/>
    <xsl:text>
</xsl:text>
  </xsl:template>

  <xsl:template match="dmRef">
    <xsl:apply-templates select="dmRefIdent/dmCode"/>
  </xsl:template>

  <xsl:template match="dialog|dialogGroup">
    <xsl:apply-templates select="userEntry|menu|dialogGroup"/>
  </xsl:template>

  <xsl:template match="userEntry">
    <xsl:if test="validate">
      <xsl:text>valid=false
</xsl:text>
      <xsl:text>while ! $valid
</xsl:text>
      <xsl:text>do
</xsl:text>
    </xsl:if>
    <xsl:value-of select="$dialog"/>
    <xsl:call-template name="backtitle"/>
    <xsl:if test="@mandatory = '1'">
      <xsl:text> --no-cancel</xsl:text>
    </xsl:if>
    <xsl:apply-templates select="parent::title"/>
    <xsl:text> --inputbox "</xsl:text>
    <xsl:apply-templates select="prompt"/>
    <xsl:text>" </xsl:text>
    <xsl:value-of select="$height"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="$width"/>
    <xsl:apply-templates select="default"/>
    <xsl:text> 2>tmp</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:value-of select="variableRef/@variableName"/>
    <xsl:text>=$(cat tmp)</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:text>rm tmp</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:if test="validate">
      <xsl:apply-templates select="validate"/>
      <xsl:text>done
</xsl:text>
    </xsl:if>
  </xsl:template>

  <xsl:template match="default">
    <xsl:text> </xsl:text>
    <xsl:apply-templates select="expression"/>
  </xsl:template>

  <xsl:template match="message">
    <xsl:value-of select="$dialog"/>
    <xsl:call-template name="backtitle"/>
    <xsl:text> --msgbox "</xsl:text>
    <xsl:apply-templates select="prompt"/>
    <xsl:text>" </xsl:text>
    <xsl:value-of select="$height"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="$width"/>
    <xsl:text>
</xsl:text>
  </xsl:template>

  <xsl:template match="prompt">
    <xsl:apply-templates select="paraBasic|variableRef"/>
  </xsl:template>

  <xsl:template match="paraBasic">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="variableRef|globalPropertyRef">
    <xsl:if test="parent::expression and not(parent::expression/parent::expression/numberOperator)">
      <xsl:text>"</xsl:text>
    </xsl:if>
    <xsl:text>$</xsl:text>
    <xsl:value-of select="@variableName|@applicPropertyIdent"/>
    <xsl:if test="parent::expression and not (parent::expression/parent::expression/numberOperator)">
      <xsl:text>"</xsl:text>
    </xsl:if>
  </xsl:template>

  <xsl:template match="title">
    <xsl:text> --title "</xsl:text>
    <xsl:apply-templates/>
    <xsl:text>"</xsl:text>
  </xsl:template>

  <xsl:template match="menu">
    <xsl:value-of select="$dialog"/>
    <xsl:call-template name="backtitle"/>
    <xsl:if test="@mandatory = '1'">
      <xsl:text> --no-cancel</xsl:text>
    </xsl:if>
    <xsl:apply-templates select="parent::title"/>
    <xsl:text> --no-tags </xsl:text>
    <xsl:choose>
      <xsl:when test="@choiceSelection = 'single'">
        <xsl:text>--radiolist </xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>--checklist </xsl:text>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:text>"</xsl:text>
    <xsl:apply-templates select="prompt"/>
    <xsl:text>" </xsl:text>
    <xsl:value-of select="$height"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="$width"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="$height"/>
    <xsl:text> </xsl:text>
    <xsl:apply-templates select="menuChoice"/>
    <xsl:text> 2>tmp</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:text>choice=$(cat tmp)</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:text>rm tmp</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:text>case $choice in</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:for-each select="menuChoice">
      <xsl:value-of select="position()"/>
      <xsl:text>) </xsl:text>
      <xsl:apply-templates select="externalApplication|assertion"/>
      <xsl:text>;;</xsl:text>
      <xsl:text>
</xsl:text>
    </xsl:for-each>
    <xsl:text>esac</xsl:text>
    <xsl:text>
</xsl:text>
  </xsl:template>

  <xsl:template match="menuChoice">
    <xsl:variable name="on" select="@menuChoiceDefaultFlag = '1'"/>
    <xsl:text>"</xsl:text>
    <xsl:value-of select="position()"/>
    <xsl:text>" "</xsl:text>
    <xsl:apply-templates select="prompt"/>
    <xsl:text>" </xsl:text>
    <xsl:choose>
      <xsl:when test="$on">
        <xsl:text>on</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:text>off</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:text> </xsl:text>
  </xsl:template>

  <xsl:template match="numberOperator|stringOperator|booleanOperator">
    <xsl:variable name="operation" select="@numberOperation|@stringOperation|@booleanOperation"/>
    <xsl:text> </xsl:text>
    <xsl:choose>
      <xsl:when test="$operation = 'equal'">=</xsl:when>
      <xsl:when test="$operation = 'divide'">/</xsl:when>
      <xsl:when test="$operation = 'greaterThan'">-gt</xsl:when>
      <xsl:when test="$operation = 'greaterThanOrEqual'">-ge</xsl:when>
      <xsl:when test="$operation = 'lessThan'">-lt</xsl:when>
      <xsl:when test="$operation = 'lessThanOrEqual'">-le</xsl:when>
      <xsl:when test="$operation = 'minus'">-</xsl:when>
      <xsl:when test="$operation = 'plus'">+</xsl:when>
      <xsl:when test="$operation = 'notEqual'">!=</xsl:when>
      <xsl:when test="$operation = 'times'">*</xsl:when>
      <xsl:when test="$operation = 'exponent'">**</xsl:when>
      <xsl:when test="$operation = 'modulus'">%</xsl:when>
      <xsl:when test="$operation = 'and'"> ] && [ </xsl:when>
      <xsl:when test="$operation = 'or'"> ] || [ </xsl:when>
    </xsl:choose>
    <xsl:text> </xsl:text>
  </xsl:template>

  <xsl:template match="expression">
    <xsl:choose>
      <xsl:when test="numberOperator[
        @numberOperation = 'divide' or
        @numberOperation = 'minus' or
        @numberOperation = 'plus' or
        @numberOperation = 'times' or
        @numberOperation = 'modulus']">
        <xsl:text>$((</xsl:text>
      </xsl:when>
      <xsl:when test="parent::dmIf or parent::dmLoop">
        <xsl:text>[ </xsl:text>
      </xsl:when>
    </xsl:choose>
    <xsl:apply-templates select="*"/>
    <xsl:choose>
      <xsl:when test="numberOperator[
        @numberOperation = 'divide' or
        @numberOperation = 'minus' or
        @numberOperation = 'plus' or
        @numberOperation = 'times' or
        @numberOperation = 'modulus']">
        <xsl:text>))</xsl:text>
      </xsl:when>
      <xsl:when test="parent::dmIf or parent::dmLoop">
        <xsl:text> ]</xsl:text>
      </xsl:when>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="assertion">
    <xsl:value-of select="variableRef/@variableName|globalPropertyRef/@applicPropertyIdent"/>
    <xsl:text>=</xsl:text>
    <xsl:apply-templates select="expression"/>
    <xsl:text>
</xsl:text>
  </xsl:template>

  <xsl:template match="stringValue">
    <xsl:text>"</xsl:text>
    <xsl:apply-templates/>
    <xsl:text>"</xsl:text>
  </xsl:template>

  <xsl:template match="integerValue|realValue">
    <xsl:apply-templates/>
  </xsl:template>

  <xsl:template match="booleanValue">
    <xsl:apply-templates select="falseValue|trueValue"/>
  </xsl:template>

  <xsl:template match="falseValue">
    <xsl:text>"false"</xsl:text>
  </xsl:template>

  <xsl:template match="trueValue">
    <xsl:text>"true"</xsl:text>
  </xsl:template>

  <xsl:template match="variablePreSet">
    <xsl:apply-templates select="assertion"/>
    <xsl:text>
</xsl:text>
  </xsl:template>

  <xsl:template match="dmIf">
    <xsl:text>if </xsl:text>
    <xsl:apply-templates select="expression"/>
    <xsl:text>
</xsl:text>
    <xsl:text>then</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:apply-templates select="dmThenSeq"/>
    <xsl:if test="dmElseSeq">
      <xsl:text>else</xsl:text>
      <xsl:text>
</xsl:text>
      <xsl:apply-templates select="dmElseSeq"/>
    </xsl:if>
    <xsl:text>fi</xsl:text>
    <xsl:text>
</xsl:text>
  </xsl:template>

  <xsl:template match="dmLoop">
    <xsl:apply-templates select="variablePreSet"/>
    <xsl:text>while </xsl:text>
    <xsl:apply-templates select="expression"/>
    <xsl:text>
</xsl:text>
    <xsl:text>do</xsl:text>
    <xsl:text>
</xsl:text>
    <xsl:apply-templates select="dmSeq"/>
    <xsl:apply-templates select="assertion"/>
    <xsl:text>done</xsl:text>
    <xsl:text>
</xsl:text>
  </xsl:template>

  <xsl:template match="booleanFunction">
    <xsl:choose>
      <xsl:when test="@booleanAction = 'not'">! </xsl:when>
      <xsl:when test="@booleanAction = 'defined'"></xsl:when>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="variableDeclarations">
    <xsl:apply-templates select="variable"/>
  </xsl:template>

  <xsl:template match="variable">
    <xsl:value-of select="@variableName"/>
    <xsl:text>=</xsl:text>
    <xsl:apply-templates select="initialize"/>
    <xsl:text>
</xsl:text>
  </xsl:template>

  <xsl:template match="initialize">
    <xsl:apply-templates select="expression"/>
  </xsl:template>

  <xsl:template match="assert">
    <xsl:text>"$</xsl:text>
    <xsl:value-of select="@applicPropertyIdent"/>
    <xsl:text>" = "</xsl:text>
    <xsl:value-of select="@applicPropertyValues"/>
    <xsl:text>"</xsl:text>
  </xsl:template>

  <xsl:template match="validate">
    <xsl:text>if [ </xsl:text>
    <xsl:apply-templates select="expression"/>
    <xsl:text> ]
</xsl:text>
    <xsl:text>then
</xsl:text>
    <xsl:text>valid=true
</xsl:text>
    <xsl:text>else
</xsl:text>
    <xsl:value-of select="$dialog"/>
    <xsl:call-template name="backtitle"/>
    <xsl:text> --title Error --msgbox "</xsl:text>
    <xsl:value-of select="@errorMessage"/>
    <xsl:text>" </xsl:text>
    <xsl:value-of select="$height"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="$width"/>
    <xsl:text>
</xsl:text>
    <xsl:text>fi
</xsl:text>
  </xsl:template>

  <xsl:template match="noAssertions"/>

  <xsl:template match="applic">
    <xsl:apply-templates select="evaluate|assert|expression"/>
  </xsl:template>

  <xsl:template match="evaluate">
    <xsl:choose>
      <xsl:when test="@andOr = 'or'"> ] || [ </xsl:when>
      <xsl:when test="@andOr = 'and'"> ] && [ </xsl:when>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="para">
    <xsl:apply-templates/>
    <xsl:text>

</xsl:text>
  </xsl:template>

  <xsl:template match="dmCode">
    <xsl:value-of select="@modelIdentCode"/>
    <xsl:text>-</xsl:text>
    <xsl:value-of select="@systemDiffCode"/>
    <xsl:text>-</xsl:text>
    <xsl:value-of select="@systemCode"/>
    <xsl:text>-</xsl:text>
    <xsl:value-of select="@subSystemCode"/>
    <xsl:value-of select="@subSubSystemCode"/>
    <xsl:text>-</xsl:text>
    <xsl:value-of select="@assyCode"/>
    <xsl:text>-</xsl:text>
    <xsl:value-of select="@disassyCode"/>
    <xsl:value-of select="@disassyCodeVariant"/>
    <xsl:text>-</xsl:text>
    <xsl:value-of select="@infoCode"/>
    <xsl:value-of select="@infoCodeVariant"/>
    <xsl:text>-</xsl:text>
    <xsl:value-of select="@itemLocationCode"/>
    <xsl:if test="@learnCode">
      <xsl:text>-</xsl:text>
      <xsl:value-of select="@learnCode"/>
      <xsl:value-of select="@learnEventCode"/>
    </xsl:if>
  </xsl:template>

  <xsl:template match="externalApplication">
    <xsl:if test="receiveValue">
      <xsl:value-of select="receiveValue/variableRef/@variableName"/>
      <xsl:text>="$(</xsl:text>
    </xsl:if>
    <xsl:value-of select="unparsed-entity-uri(@application)"/>
    <xsl:apply-templates select="send"/>
    <xsl:if test="receiveValue">
      <xsl:text>)"</xsl:text>
    </xsl:if>
    <xsl:text>
</xsl:text>
  </xsl:template>

  <xsl:template match="send">
    <xsl:text> </xsl:text>
    <xsl:apply-templates select="variableRef|globalPropertyRef|stringValue"/>
  </xsl:template>

  <xsl:template match="dmNodeAlts">
    <xsl:apply-templates select="*"/>
  </xsl:template>

</xsl:stylesheet>


/ gopher://khzae.net/0/s1kd/s1kd-process2sh/src/process2sh.xsl
Styles: Light Dark Classic