1 <?xml version="1.0" standalone="no"?>
3 <xsl:stylesheet version="1.0"
4 xmlns:svg="http://www.w3.org/2000/svg"
5 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
6 xmlns:math="http://exslt.org/math"
7 xmlns:exsl="http://exslt.org/common"
8 xmlns:xlink="http://www.w3.org/1999/xlink"
9 extension-element-prefixes="math">
11 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"
12 doctype-public="-//W3C//DTD SVG 1.0//EN"
13 doctype-system="http://www.w3.org/TR/SVG/DTD/svg10.dtd"/>
15 <xsl:template name="F_Calc_Proc_Height">
16 <xsl:param name="iProcInst" select="_processor_"/>
18 <xsl:variable name="tot_bifs_h_">
19 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[(@INSTANCE = $iProcInst)]/@BIFS_H)">0</xsl:if>
21 <xsl:if test="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[(@INSTANCE = $iProcInst)]/@BIFS_H">
22 <xsl:variable name="bifs_h_" select="($G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[(@INSTANCE = $iProcInst)]/@BIFS_H)"/>
23 <xsl:value-of select="(($BLKD_BIF_H + $BLKD_MOD_BIF_GAP_H) * $bifs_h_)"/>
27 <xsl:value-of select="(($BLKD_MOD_LANE_H * 2) + $tot_bifs_h_ + ($BLKD_MOD_LABEL_H + $BLKD_MOD_BIF_GAP_H))"/>
30 <xsl:template name="F_Calc_Max_Proc_Height">
32 <!-- Store the heights in a variable -->
33 <xsl:variable name="proc_heights_">
35 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE)">
39 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE">
40 <xsl:variable name="procInst_" select="@INSTANCE"/>
41 <xsl:variable name="proc_height_">
42 <xsl:call-template name="F_Calc_Proc_Height">
43 <xsl:with-param name="iProcInst" select="$procInst_"/>
48 <xsl:message>Found Proc height as <xsl:value-of select="$proc_height_"/></xsl:message>
50 <PROC HEIGHT="{$proc_height_}"/>
54 <!-- Return the max of them -->
56 <xsl:message>Found Proc ax as <xsl:value-of select="math:max(exsl:node-set($proc_heights_)/PROC/@HEIGHT)"/></xsl:message>
59 <xsl:value-of select="math:max(exsl:node-set($proc_heights_)/PROC/@HEIGHT)"/>
63 <xsl:template name="F_Calc_Proc_MemoryUnits_Height">
64 <xsl:param name="iProcInst" select="_processor_"/>
66 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and (@MODCLASS = 'MEMORY_UNIT'))])">0</xsl:if>
68 <xsl:if test="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and (@MODCLASS='MEMORY_UNIT'))]">
70 <xsl:variable name="peri_gap_">
72 <xsl:when test="not(@CSTACK_INDEX)">
73 <xsl:value-of select="$BLKD_BIF_H"/>
75 <xsl:otherwise>0</xsl:otherwise>
80 <!-- Store the all memory unit heights in a variable -->
81 <xsl:variable name="memU_heights_">
82 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and (@MODCLASS='MEMORY_UNIT'))]">
84 <xsl:variable name="unitId_" select="@PSTACK_MODS_Y"/>
86 <xsl:variable name="unitHeight_">
87 <xsl:call-template name="F_Calc_MemoryUnit_Height">
88 <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
92 <MEM_UNIT HEIGHT="{$unitHeight_ + $peri_gap_}"/>
96 <xsl:value-of select="sum(exsl:node-set($memU_heights_)/MEM_UNIT/@HEIGHT)"/>
101 <xsl:template name="F_Calc_Proc_Peripherals_Height">
102 <xsl:param name="iProcInst" select="_processor_"/>
104 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and not(@MODCLASS = 'MEMORY_UNIT'))])">0</xsl:if>
106 <xsl:if test="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and not(@MODCLASS='MEMORY_UNIT'))]">
108 <xsl:variable name="peri_gap_">
109 <xsl:if test="@CSTACK_INDEX">
110 <xsl:value-of select="$BLKD_BIF_H"/>
112 <xsl:if test="not(@IS_CSTACK)">0</xsl:if>
115 <!-- Store the all peripheral heights in a variable -->
116 <xsl:variable name="peri_heights_">
118 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@PROCESSOR = $iProcInst) and not(@MODCLASS='MEMORY_UNIT'))]">
119 <xsl:for-each select="MODULE">
121 <xsl:message><xsl:value-of select="@INSTANCE"/></xsl:message>
123 <xsl:variable name="peri_height_">
124 <xsl:call-template name="F_Calc_PeriShape_Height">
125 <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
128 <PERI HEIGHT="{$peri_height_ + $peri_gap_}"/>
133 <xsl:value-of select="sum(exsl:node-set($peri_heights_)/PERI/@HEIGHT)"/>
138 <xsl:template name="F_Calc_Space_AbvSbs_Height">
139 <xsl:param name="iStackToEast" select="'NONE'"/>
140 <xsl:param name="iStackToWest" select="'NONE'"/>
143 <xsl:variable name = "stackAbvSbs_West_H_">
145 <xsl:when test="(($iStackToEast = '0') and ($iStackToWest = 'NONE'))">0</xsl:when>
146 <xsl:when test="(($iStackToEast = 'NONE') and not($iStackToWest = 'NONE'))">
147 <xsl:call-template name="F_Calc_Stack_AbvSbs_Height">
148 <xsl:with-param name="iStackIdx" select="$iStackToWest"/>
151 <xsl:when test="(not($iStackToEast = '0') and ($iStackToWest = 'NONE'))">
152 <xsl:call-template name="F_Calc_Stack_AbvSbs_Height">
153 <xsl:with-param name="iStackIdx" select="($iStackToEast - 1)"/>
156 <xsl:otherwise>0</xsl:otherwise>
160 <xsl:variable name = "stackAbvSbs_East_H_">
161 <xsl:call-template name="F_Calc_Stack_AbvSbs_Height">
162 <xsl:with-param name="iStackIdx" select="$iStackToEast"/>
166 <xsl:variable name="stackAbvSbs_heights_">
167 <STACK HEIGHT="{$stackAbvSbs_East_H_}"/>
168 <STACK HEIGHT="{$stackAbvSbs_West_H_}"/>
171 <xsl:value-of select="math:max(exsl:node-set($stackAbvSbs_heights_)/STACK/@HEIGHT)"/>
175 <xsl:template name="F_Calc_Space_BlwSbs_Height">
176 <xsl:param name="iStackToEast" select="'NONE'"/>
177 <xsl:param name="iStackToWest" select="'NONE'"/>
179 <xsl:variable name = "stackBlwSbs_West_H_">
181 <xsl:when test="(($iStackToEast = '0') and ($iStackToWest = 'NONE'))">0</xsl:when>
182 <xsl:when test="(($iStackToEast = 'NONE') and not($iStackToWest = 'NONE'))">
183 <xsl:call-template name="F_Calc_Stack_BlwSbs_Height">
184 <xsl:with-param name="iStackIdx" select="$iStackToWest"/>
187 <xsl:when test="(not($iStackToEast = '0') and ($iStackToWest = 'NONE'))">
188 <xsl:call-template name="F_Calc_Stack_BlwSbs_Height">
189 <xsl:with-param name="iStackIdx" select="($iStackToEast - 1)"/>
196 <xsl:variable name = "stackBlwSbs_East_H_">
197 <xsl:call-template name="F_Calc_Stack_BlwSbs_Height">
198 <xsl:with-param name="iStackIdx" select="$iStackToEast"/>
202 <xsl:variable name="stackBlwSbs_heights_">
203 <STACK HEIGHT="{$stackBlwSbs_East_H_}"/>
204 <STACK HEIGHT="{$stackBlwSbs_West_H_}"/>
207 <xsl:value-of select="math:max(exsl:node-set($stackBlwSbs_heights_)/STACK/@HEIGHT)"/>
212 <xsl:template name="F_Calc_Stack_AbvSbs_Height">
213 <xsl:param name="iStackIdx" select="100"/>
215 <xsl:message>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</xsl:message>
218 <xsl:if test="(not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_ABVSBS))]) and
219 not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $iStackIdx)]))"><xsl:value-of select="$BLKD_PROC2SBS_GAP"/></xsl:if>
221 <xsl:if test="(($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_ABVSBS))]) or
222 ($G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[ (@STACK_HORIZ_INDEX = $iStackIdx)]))">
225 <xsl:variable name="peri_gap_">
226 <xsl:value-of select="$BLKD_BIF_H"/>
228 <xsl:when test="(@SHAPE_VERTI_INDEX)">
230 <xsl:otherwise>0</xsl:otherwise>
236 <xsl:message>The gap is <xsl:value-of select="$peri_gap_"/></xsl:message>
237 <xsl:message>The gap is <xsl:value-of select="$peri_gap_"/></xsl:message>
238 <xsl:message>================================</xsl:message>
239 <xsl:message>================================</xsl:message>
240 <xsl:message>This is above <xsl:value-of select="@INSTANCE"/></xsl:message>
241 <xsl:message><xsl:value-of select="@INSTANCE"/> : <xsl:value-of select="$peri_height_"/></xsl:message>
245 <!-- Store the all peripheral heights in a variable -->
246 <xsl:variable name="peri_heights_">
248 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and not(@MODCLASS = 'MEMORY_UNIT') and (@IS_ABVSBS))]">
249 <xsl:for-each select="MODULE">
251 <xsl:message>This is above <xsl:value-of select="@INSTANCE"/></xsl:message>
254 <xsl:variable name="peri_height_">
256 <xsl:call-template name="F_Calc_Shape_Height">
257 <xsl:with-param name="shapeId" select="@SHAPE_ID"/>
261 <xsl:call-template name="F_Calc_PeriShape_Height">
262 <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
266 <PERI HEIGHT="{$peri_height_ + $BLKD_BIF_H}"/>
270 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@MODCLASS = 'MEMORY_UNIT') and (@IS_ABVSBS))]">
272 <xsl:variable name="memu_height_">
273 <xsl:call-template name="F_Calc_MemoryUnit_Height">
274 <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
279 <xsl:message>Mem_Unit : <xsl:value-of select="@SHAPE_ID"/> : <xsl:value-of select="$memu_height_ + $peri_gap_"/></xsl:message>
281 <PERI HEIGHT="{$memu_height_ + $BLKD_BIF_H}"/>
285 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_ABVSBS))]">
287 <xsl:variable name="proc_height_">
288 <xsl:call-template name="F_Calc_PeriShape_Height">
289 <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
294 <xsl:message>===================================</xsl:message>
295 <xsl:message>Processor : <xsl:value-of select="@INSTANCE"/> : <xsl:value-of select="$peri_height_ + $peri_gap_"/></xsl:message>
296 <PERI HEIGHT="{$proc_height_ + $BLKD_PROC2SBS_GAP }"/>
298 <PERI HEIGHT="{$proc_height_ + $BLKD_BIF_H}"/>
305 <xsl:message><xsl:value-of select="@INSTANCE"/> : <xsl:value-of select="$peri_height_ + $peri_gap_"/></xsl:message>
306 <xsl:message>================================</xsl:message>
310 <xsl:message>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</xsl:message>
312 <xsl:value-of select="sum(exsl:node-set($peri_heights_)/PERI/@HEIGHT)"/>
317 <xsl:template name="F_Calc_Stack_BlwSbs_Height">
318 <xsl:param name="iStackIdx" select="100"/>
320 <!-- Store the all peripheral heights in a variable -->
321 <xsl:variable name="stack_heights_">
323 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_BLWSBS))])">
324 <STACKSHAPE HEIGHT="0"/>
327 <xsl:if test="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@IS_BLWSBS))]">
329 <xsl:variable name="peri_gap_">
331 <xsl:when test="(@SHAPE_VERTI_INDEX)">
332 <xsl:value-of select="$BLKD_BIF_H"/>
334 <xsl:otherwise>0</xsl:otherwise>
338 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and not(@MODCLASS = 'MEMORY_UNIT') and (@IS_BLWSBS))]">
339 <xsl:for-each select="MODULE">
341 <xsl:message>This is below <xsl:value-of select="@INSTANCE"/></xsl:message>
343 <xsl:variable name="peri_height_">
344 <xsl:call-template name="F_Calc_PeriShape_Height">
345 <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
349 <STACKSHAPE HEIGHT="{$peri_height_ + $peri_gap_}"/>
353 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iStackIdx) and (@MODCLASS = 'MEMORY_UNIT') and (@IS_BLWSBS))]">
355 <xsl:variable name="memu_height_">
356 <xsl:call-template name="F_Calc_MemoryUnit_Height">
357 <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
361 <STACKSHAPE HEIGHT="{$memu_height_ + $peri_gap_}"/>
364 <xsl:message>Mem_Unit : <xsl:value-of select="@SHAPE_ID"/> : <xsl:value-of select="$memu_height_ + $peri_gap_"/></xsl:message>
370 <xsl:variable name="sbsBuckets_H_">
371 <xsl:call-template name="F_Calc_Stack_SbsBuckets_Height">
372 <xsl:with-param name="iStackIdx" select="$iStackIdx"/>
376 <STACKSHAPE HEIGHT="{$sbsBuckets_H_}"/>
378 <xsl:message>Sbs Bucket H : <xsl:value-of select="$sbsBuckets_H_"/></xsl:message>
383 <xsl:message>vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv</xsl:message>
385 <xsl:value-of select="sum(exsl:node-set($stack_heights_)/STACKSHAPE/@HEIGHT)"/>
390 <xsl:template name="F_Calc_Stack_SbsBuckets_Height">
391 <xsl:param name="iStackIdx" select="1000"/>
393 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)])">0</xsl:if>
395 <xsl:if test="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]">
397 <!-- Store the all buckets heights in a variable -->
398 <xsl:variable name="bkt_heights_">
399 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]">
401 <xsl:variable name="bkt_height_">
402 <xsl:call-template name="F_Calc_SbsBucket_Height">
403 <xsl:with-param name="iBucketId" select="@BUS_INDEX"/>
407 <xsl:message>Found shared buckets height as <xsl:value-of select="$bkt_height_"/></xsl:message>
409 <BKT HEIGHT="{$bkt_height_ + $BLKD_BIF_H}"/>
413 <xsl:value-of select="sum(exsl:node-set($bkt_heights_)/BKT/@HEIGHT)"/>
418 <xsl:template name="F_Calc_Max_Stack_BlwSbs_Height">
420 <!-- Store the heights in a variable -->
421 <xsl:variable name="blwSbs_heights_">
423 <!-- Default, in case there are no modules or ports -->
426 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/BCLANESPACES/BCLANESPACE[(@EAST < $G_ROOT/EDKSYSTEM/BLKDIAGRAM/@STACK_HORIZ_WIDTH)]">
429 <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
432 <xsl:variable name="stack_height_">
433 <xsl:call-template name="F_Calc_Stack_BlwSbs_Height">
434 <xsl:with-param name="iStackIdx" select="@EAST"/>
439 <BLW HEIGHT="{$stack_height_}"/>
443 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/BCLANESPACES/BCLANESPACE[(@WEST = ($G_ROOT/EDKSYSTEM/BLKDIAGRAM/@STACK_HORIZ_WIDTH -1))]">
446 <xsl:message>Last stack of index <xsl:value-of select="@WEST"/></xsl:message>
449 <xsl:variable name="stack_height_">
450 <xsl:call-template name="F_Calc_Stack_BlwSbs_Height">
451 <xsl:with-param name="iStackIdx" select="@WEST"/>
456 <BLW HEIGHT="{$stack_height_}"/>
464 <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>
466 <!-- Return the max of them -->
467 <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/>
471 <xsl:template name="F_Calc_Max_Stack_AbvSbs_Height">
473 <!-- Store the heights in a variable -->
474 <xsl:variable name="abvSbs_heights_">
476 <!-- Default, in case there are no modules or ports -->
479 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/BCLANESPACES/BCLANESPACE[(@EAST < $G_ROOT/EDKSYSTEM/BLKDIAGRAM/@STACK_HORIZ_WIDTH)]">
482 <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
485 <xsl:variable name="stack_height_">
486 <xsl:call-template name="F_Calc_Stack_AbvSbs_Height">
487 <xsl:with-param name="iStackIdx" select="@EAST"/>
492 <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
493 <xsl:message>==============================</xsl:message>
496 <ABV HEIGHT="{$stack_height_}"/>
504 <xsl:message>Found Blw Sbs max as <xsl:value-of select="math:max(exsl:node-set($blwSbs_heights_)/BLW/@HEIGHT)"/></xsl:message>
506 <!-- Return the max of them -->
507 <xsl:value-of select="math:max(exsl:node-set($abvSbs_heights_)/ABV/@HEIGHT)"/>
511 <xsl:template name="F_Calc_MultiProc_Stack_Height">
512 <xsl:param name="iMPStack_Blkd_X" select="100"/>
514 <xsl:variable name="mpStk_ShpHeights_">
515 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@HAS_MULTIPROCCONNS) and (@PSTACK_BLKD_X = $iMPStack_Blkd_X))])">
516 <MPSHAPE HEIGHT="0"/>
519 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@HAS_MULTIPROCCONNS) and (@PSTACK_BLKD_X = $iMPStack_Blkd_X))]">
520 <xsl:variable name="shpClass_" select="@MODCLASS"/>
521 <xsl:variable name="shpHeight_">
523 <xsl:when test="$shpClass_ = 'PERIPHERAL'">
525 <xsl:message>Found Multi Proc Peripheral</xsl:message>
527 <xsl:call-template name="F_Calc_PeriShape_Height">
528 <xsl:with-param name="iShapeInst" select="MODULE/@INSTANCE"/>
531 <xsl:when test="$shpClass_ = 'MEMORY_UNIT'">
533 <xsl:message>Found Multi Proc Memory Unit</xsl:message>
535 <xsl:call-template name="F_Calc_MemoryUnit_Height">
536 <xsl:with-param name="iShapeIndex" select="@CSHAPE_INDEX"/>
539 <xsl:otherwise>0</xsl:otherwise>
544 <xsl:message>Found <xsl:value-of select="$shpHeight_"/></xsl:message>
547 <MPSHAPE HEIGHT="{$shpHeight_}"/>
552 <xsl:message>Found stack of height <xsl:value-of select="sum(exsl:node-set($mpStk_ShpHeights_)/MPSHAPE/@HEIGHT)"/></xsl:message>
555 <xsl:value-of select="sum(exsl:node-set($mpStk_ShpHeights_)/MPSHAPE/@HEIGHT)"/>
558 <xsl:template name="F_Calc_Max_MultiProc_Stack_Height">
560 <!-- Store the heights in a variable -->
562 <xsl:variable name="mpStks_Heights_">
563 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE)">
566 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[(@PSTACK_BLKD_X)]">
567 <xsl:variable name="mpstack_height_">
568 <xsl:call-template name="F_Calc_MultiProc_Stack_Height">
569 <xsl:with-param name="iMPStack_Blkd_X" select="(@PSTACK_BLKD_X + 1)"/>
574 <xsl:message>Found <xsl:value-of select="$mpstack_height_"/></xsl:message>
576 <MPSTK HEIGHT="{$mpstack_height_}"/>
581 <!-- Return the max of them -->
582 <xsl:value-of select="math:max(exsl:node-set($mpStks_Heights_)/MPSTK/@HEIGHT)"/>
588 <xsl:template name="F_Calc_Stack_Shape_Y">
590 <xsl:param name="iHorizIdx" select="100"/>
591 <xsl:param name="iVertiIdx" select="100"/>
595 <xsl:param name="sbsGap" select="0"/>
596 <xsl:variable name="numSBSs_" select="count($G_ROOT/EDKSYSTEM/BLKDIAGRAM/SBSSHAPES/MODULE)"/>
597 <xsl:variable name="sbs_LANE_H_" select="($numSBSs_ * $BLKD_SBS_LANE_H)"/>
598 <xsl:variable name="sbsGap_" select="($BLKD_PROC2SBS_GAP + $sbs_LANE_H_)"/>
601 <xsl:variable name="sbsGap_" select="((count($G_ROOT/EDKSYSTEM/BLKDIAGRAM/SBSSHAPES/MODULE) * $BLKD_SBS_LANE_H) + $BLKD_PROC2SBS_GAP)"/>
603 <xsl:if test="(not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and ((@SHAPE_VERTI_INDEX = $iVertiIdx) or ($iVertiIdx = 100)))]) and
604 not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/SBSBUCKETS/SBSBUCKET[( (@STACK_HORIZ_INDEX = $iHorizIdx) and ((@SHAPE_VERTI_INDEX = $iVertiIdx) or ($iVertiIdx = 100)))]) and
605 not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[( (@STACK_HORIZ_INDEX = $iHorizIdx) and ((@SHAPE_VERTI_INDEX = $iVertiIdx) or ($iVertiIdx = 100)))]))">0</xsl:if>
609 <xsl:if test="(not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and ((@SHAPE_VERTI_INDEX = $iVertiIdx) or ($iVertiIdx = 100)))]) and
610 not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/SBSBUCKETS/SBSBUCKET[( (@STACK_HORIZ_INDEX = $iHorizIdx) and ((@SHAPE_VERTI_INDEX = $iVertiIdx) or ($iVertiIdx = 100)))]) and
611 not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[( (@STACK_HORIZ_INDEX = $iHorizIdx) and ((@SHAPE_VERTI_INDEX = $iVertiIdx) or ($iVertiIdx = 100)))]))">
612 <xsl:message>Something is missing </xsl:message>
616 <xsl:if test="(($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and ((@SHAPE_VERTI_INDEX = $iVertiIdx) or ($iVertiIdx = 100)))]) or
617 ($G_ROOT/EDKSYSTEM/BLKDIAGRAM/SBSBUCKETS/SBSBUCKET[( (@STACK_HORIZ_INDEX = $iHorizIdx) and ((@SHAPE_VERTI_INDEX = $iVertiIdx) or ($iVertiIdx = 100)))]) or
618 ($G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[( (@STACK_HORIZ_INDEX = $iHorizIdx) and ((@SHAPE_VERTI_INDEX = $iVertiIdx) or ($iVertiIdx = 100)))]))">
619 <!-- Store the spaces above this one in a variable -->
620 <xsl:variable name="spaces_above_">
622 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX < $iVertiIdx))])">
626 <!-- Store the height of all peripherals and memory units above this one-->
627 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX < $iVertiIdx))]">
629 <xsl:if test="not(@MODCLASS='MEMORY_UNIT')">
630 <xsl:variable name="peri_height_">
631 <xsl:call-template name="F_Calc_Shape_Height">
632 <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
636 <xsl:message>Found peri height <xsl:value-of select="$peri_height_"/></xsl:message>
638 <SPACE HEIGHT="{$peri_height_ + $BLKD_BIF_H}"/>
641 <xsl:if test="(@MODCLASS='MEMORY_UNIT')">
642 <xsl:variable name="memu_height_">
643 <xsl:call-template name="F_Calc_MemoryUnit_Height">
644 <xsl:with-param name="iShapeId" select="@SHAPE_ID"/>
648 <xsl:message>Found unit height <xsl:value-of select="$memu_height_"/></xsl:message>
650 <SPACE HEIGHT="{$memu_height_ + $BLKD_BIF_H}"/>
655 <!-- Store the height of all the processors above this one-->
656 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX < $iVertiIdx))]">
657 <xsl:variable name="proc_height_">
658 <xsl:call-template name="F_Calc_PeriShape_Height">
659 <xsl:with-param name="iShapeInst" select="@INSTANCE"/>
664 <xsl:message>Found Proc height <xsl:value-of select="$proc_height_ + $BLKD_BIF_H"/></xsl:message>
666 <SPACE HEIGHT="{$proc_height_ + $BLKD_BIF_H}"/>
669 <!-- If its a peripheral that is below the shared busses, or its a shared bus bucket -->
670 <!-- add the height of the shared busses and the processor. -->
671 <xsl:if test="($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))]/@IS_BLWSBS)">
672 <SPACE HEIGHT="{$sbsGap_}"/>
674 <xsl:if test="($G_ROOT/EDKSYSTEM/BLKDIAGRAM/SBSBUCKETS/SBSBUCKET[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX = $iVertiIdx))])">
675 <SPACE HEIGHT="{$sbsGap_}"/>
678 <!-- Store the height of all shared bus buckets above this one-->
679 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/SBSBUCKETS/SBSBUCKET[((@STACK_HORIZ_INDEX = $iHorizIdx) and (@SHAPE_VERTI_INDEX < $iVertiIdx))]">
680 <xsl:variable name="bkt_height_">
681 <xsl:call-template name="F_Calc_SbsBucket_Height">
682 <xsl:with-param name="iBucketId" select="@BUS_INDEX"/>
687 <xsl:message>Found bucket height <xsl:value-of select="$bkt_height_ + $BLKD_BIF_H"/></xsl:message>
690 <SPACE HEIGHT="{$bkt_height_ + $BLKD_BIF_H}"/>
695 <xsl:value-of select="sum(exsl:node-set($spaces_above_)/SPACE/@HEIGHT)"/>
701 <xsl:template name="F_Calc_Max_BusConnLane_BifY">
703 <xsl:param name="iBusName" select="'_busname_'"/>
705 <!-- Store the heights in a variable -->
706 <xsl:variable name="busConnYs_">
708 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE/BUSCONN)">
709 <BUSCONNY HEIGHT="0"/>
712 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE[(@BUSNAME = $iBusName)]/BUSCONN">
714 <xsl:variable name="peri_cstk_y_">
715 <xsl:call-template name="F_Calc_CStackShapesAbv_Height">
716 <xsl:with-param name="iCStackIndex" select="../@CSTACK_INDEX"/>
717 <xsl:with-param name="ICStackModY" select="@CSTACK_MODS_Y"/>
721 <xsl:variable name="peri_bif_dy_">
722 <xsl:value-of select="(($BLKD_BIF_H + $BLKD_MOD_BIF_GAP_H) * @BIF_Y)"/>
725 <xsl:variable name="peri_bc_y_">
726 <xsl:value-of select="($BLKD_MOD_LANE_H + $BLKD_MOD_LABEL_H + $BLKD_MOD_BIF_GAP_H + $peri_bif_dy_ + ceiling($BLKD_BIF_H div 2)) - ceiling($BLKD_BIFC_H div 2)"/>
730 <xsl:message>Found a busconn lane</xsl:message>
732 <BUSCONNY HEIGHT="{$peri_cstk_y_ + $peri_bif_dy_ + $peri_bc_y_}"/>
737 <!-- Return the max of them -->
738 <xsl:value-of select="math:max(exsl:node-set($busConnYs_)/BUSCONNY/@HEIGHT)"/>
743 <xsl:template name="F_Calc_Min_BusConnLane_BifY">
745 <xsl:param name="iBusName" select="'_busname_'"/>
747 <!-- Store the heights in a variable -->
748 <xsl:variable name="busConnYs_">
750 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE/BUSCONN)">
751 <BUSCONNY HEIGHT="0"/>
754 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE/BUSCONNS/BUSCONNLANE[(@BUSNAME = $iBusName)]/BUSCONN">
756 <xsl:variable name="peri_cstk_y_">
757 <xsl:call-template name="F_Calc_CStackShapesAbv_Height">
758 <xsl:with-param name="iCStackIndex" select="../@CSTACK_INDEX"/>
759 <xsl:with-param name="iCStackModY" select="@CSTACK_MODS_Y"/>
763 <xsl:variable name="peri_bif_dy_">
764 <xsl:value-of select="(($BLKD_BIF_H + $BLKD_MOD_BIF_GAP_H) * @BIF_Y)"/>
767 <xsl:variable name="peri_bc_y_">
768 <xsl:value-of select="($BLKD_MOD_LANE_H + $BLKD_MOD_LABEL_H + $BLKD_MOD_BIF_GAP_H + $peri_bif_dy_ + ceiling($BLKD_BIF_H div 2)) - ceiling($BLKD_BIFC_H div 2)"/>
772 <xsl:message>Found a busconn lane</xsl:message>
774 <BUSCONNY HEIGHT="{$peri_cstk_y_ + $peri_bc_y_}"/>
779 <!-- Return the min of them -->
780 <xsl:value-of select="math:min(exsl:node-set($busConnYs_)/BUSCONNY/@HEIGHT)"/>
784 <xsl:template name="F_Calc_Stack_Height">
785 <xsl:param name="iStackIdx" select="100"/>
788 <xsl:message>Calculating height for Stack Index <xsl:value-of select="$iStackIdx"/></xsl:message>
792 <xsl:variable name="stack_height_">
793 <!-- if this is called with no vert index of a shape
794 it defaults to the total height of the stack -->
795 <xsl:call-template name="F_Calc_Stack_Shape_Y">
796 <xsl:with-param name="iHorizIdx" select="$iStackIdx"/>
801 <xsl:message>Calculated height for Stack as <xsl:value-of select="$stack_height_"/></xsl:message>
803 <xsl:value-of select="$stack_height_"/>
810 <xsl:template name="F_Calc_Stack_Width">
811 <xsl:param name="iStackIdx" select="100"/>
814 <xsl:message>=============Stack Idx <xsl:value-of select="$iStackIdx"/>====</xsl:message>
816 <xsl:variable name="shape_widths_">
818 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[@STACK_HORIZ_INDEX = $iStackIdx])">
822 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[@STACK_HORIZ_INDEX = $iStackIdx])">
826 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES/MODULE[(@STACK_HORIZ_INDEX = $iStackIdx)]">
828 <xsl:variable name="proc_w_">
829 <xsl:value-of select="$BLKD_MOD_W"/>
831 <xsl:message>Found processor of width <xsl:value-of select="$proc_w_"/></xsl:message>
833 <SHAPE WIDTH="{$BLKD_MOD_W}"/>
836 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES/CMPLXSHAPE[(@STACK_HORIZ_INDEX = $iStackIdx)]">
838 <xsl:variable name="shpClass_" select="@MODCLASS"/>
839 <xsl:variable name="shape_w_">
842 <xsl:when test="$shpClass_ = 'PERIPHERAL'">
843 <xsl:value-of select="$BLKD_MOD_W"/>
846 <xsl:when test="$shpClass_ = 'MEMORY_UNIT'">
847 <xsl:value-of select="($BLKD_MOD_W * @MODS_W)"/>
850 <xsl:otherwise>0</xsl:otherwise>
856 <xsl:message>Found shape width <xsl:value-of select="$shape_w_"/></xsl:message>
859 <SHAPE WIDTH="{$shape_w_}"/>
862 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX = $iStackIdx)]">
863 <xsl:variable name="bucket_w_">
864 <xsl:value-of select="(($BLKD_MOD_BKTLANE_W * 2) + (($BLKD_MOD_W * @MODS_W) + ($BLKD_MOD_BUCKET_G * (@MODS_W - 1))))"/>
868 <xsl:message>Found bucket of width <xsl:value-of select="$bucket_w_"/></xsl:message>
870 <SHAPE WIDTH="{$bucket_w_}"/>
875 <xsl:value-of select="math:max(exsl:node-set($shape_widths_)/SHAPE/@WIDTH)"/>
879 <xsl:template name="F_Calc_Stack_X">
880 <xsl:param name="iStackIdx" select="0"/>
882 <xsl:message>Looking for stack indexes less than <xsl:value-of select="$iStackIdx"/></xsl:message>
885 <!-- Store the stack widths in a variable -->
886 <xsl:variable name="stackspace_widths_">
888 <xsl:if test="($G_ROOT/EDKSYSTEM/BLKDIAGRAM/@STACK_HORIZ_WIDTH = $iStackIdx)">
889 <STACKSPACE WIDTH="{$BLKD_BUS_LANE_W}"/>
892 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES[(@STACK_HORIZ_INDEX < $iStackIdx)])">
893 <STACKSPACE WIDTH="0"/>
896 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES[(@STACK_HORIZ_INDEX < $iStackIdx)])">
897 <STACKSPACE WIDTH="0"/>
900 <xsl:if test="not($G_ROOT/EDKSYSTEM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX < $iStackIdx)])">
901 <STACKSPACE WIDTH="0"/>
904 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/BCLANESPACES/BCLANESPACE[(@EAST <= $iStackIdx)]">
907 <xsl:message>==============================</xsl:message>
908 <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
909 <xsl:message>Bus lane space width <xsl:value-of select="@BUSLANES_W"/></xsl:message>
910 <xsl:message>Bus lane space is <xsl:value-of select="$space_width_"/></xsl:message>
911 <xsl:variable name="space_width_" select="($BLKD_BUS_LANE_W * @BUSLANES_W)"/>
914 <xsl:variable name="East_">
916 <xsl:when test="@EAST"><xsl:value-of select="@EAST"/></xsl:when>
917 <xsl:otherwise>'NONE'</xsl:otherwise>
921 <xsl:variable name="West_">
923 <xsl:when test="@WEST"><xsl:value-of select="@WEST"/></xsl:when>
924 <xsl:otherwise>NONE</xsl:otherwise>
929 <xsl:message>1 - West_ <xsl:value-of select="$West_"/></xsl:message>
930 <xsl:message>1 - East_ <xsl:value-of select="$East_"/></xsl:message>
932 <xsl:variable name="space_width_">
933 <xsl:call-template name="F_Calc_Space_Width">
934 <xsl:with-param name="iStackToWest" select="$West_"/>
935 <xsl:with-param name="iStackToEast" select="$East_"/>
939 <xsl:variable name="stack_width_">
940 <xsl:if test="not(@EAST = $iStackIdx)">
941 <xsl:call-template name="F_Calc_Stack_Width">
942 <xsl:with-param name="iStackIdx" select="@EAST"/>
945 <xsl:if test="(@EAST = $iStackIdx)">0</xsl:if>
948 <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
949 <xsl:message>==============================</xsl:message>
951 <STACKSPACE WIDTH="{$stack_width_ + $space_width_}"/>
955 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/BCLANESPACES/BCLANESPACE[(not(@EAST) and (@WEST = ($iStackIdx -1)))]">
956 <xsl:variable name="space_width_" select="($BLKD_BUS_LANE_W * @BUSLANES_W)"/>
958 <xsl:message>Found end space of <xsl:value-of select="$space_width_"/></xsl:message>
960 <STACKSPACE WIDTH="{$space_width_}"/>
966 <xsl:value-of select="sum(exsl:node-set($stackspace_widths_)/STACKSPACE/@WIDTH)"/>
970 <xsl:template name="F_Calc_Space_Width">
972 <xsl:param name="iStackToWest" select="'NONE'"/>
973 <xsl:param name="iStackToEast" select="'NONE'"/>
976 <xsl:message>Stack to West <xsl:value-of select="$stackToWest"/></xsl:message>
977 <xsl:message>Stack to East <xsl:value-of select="$stackToEast"/></xsl:message>
980 <xsl:variable name="spaceWidth_">
982 <xsl:when test="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/BCLANESPACES/BCLANESPACE[((@EAST = $iStackToEast) or (not($iStackToWest = 'NONE') and (@WEST = $iStackToWest)))]">
983 <xsl:value-of select="((($G_ROOT/EDKSYSTEM/BLKDIAGRAM/BCLANESPACES/BCLANESPACE[((@EAST = $iStackToEast) or (not($iStackToWest = 'NONE') and (@WEST = $iStackToWest)))]/@BUSLANES_W) + 1) * $BLKD_BUS_LANE_W)"/>
985 <xsl:otherwise>0</xsl:otherwise>
990 <xsl:message>Space width <xsl:value-of select="$spaceWidth_"/></xsl:message>
993 <xsl:value-of select="$spaceWidth_"/>
997 <xsl:template name="F_Calc_Space_X">
999 <xsl:param name="iStackToWest" select="'NONE'"/>
1000 <xsl:param name="iStackToEast" select="'NONE'"/>
1003 <xsl:message>Stack East <xsl:value-of select="$stackToEast"/></xsl:message>
1004 <xsl:message>Stack West <xsl:value-of select="$stackToWest"/></xsl:message>
1007 <!-- Store the stack widths in a variable -->
1010 <xsl:message>Looking for stack indexes less than <xsl:value-of select="$stackIdx"/></xsl:message>
1013 <xsl:variable name="stackspace_widths_">
1015 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/CMPLXSHAPES[(@STACK_HORIZ_INDEX < $iStackToEast)])">
1016 <STACKSPACE WIDTH="0"/>
1019 <xsl:if test="not($G_ROOT/EDKSYSTEM/BLKDIAGRAM/PROCSHAPES[(@STACK_HORIZ_INDEX < $iStackToEast)])">
1020 <STACKSPACE WIDTH="0"/>
1023 <xsl:if test="not($G_ROOT/EDKSYSTEM/SBSBUCKETS/SBSBUCKET[(@STACK_HORIZ_INDEX < $iStackToEast)])">
1024 <STACKSPACE WIDTH="0"/>
1027 <xsl:for-each select="$G_ROOT/EDKSYSTEM/BLKDIAGRAM/BCLANESPACES/BCLANESPACE[((@EAST < $iStackToEast) or (not($iStackToWest = 'NONE') and (@EAST <= $iStackToWest)))]">
1030 <xsl:message>==============================</xsl:message>
1031 <xsl:message>Found a space of index <xsl:value-of select="@EAST"/></xsl:message>
1034 <xsl:variable name="East_">
1036 <xsl:when test="@EAST"><xsl:value-of select="@EAST"/></xsl:when>
1037 <xsl:otherwise>'NONE'</xsl:otherwise>
1041 <xsl:variable name="West_">
1043 <xsl:when test="@WEST"><xsl:value-of select="@WEST"/></xsl:when>
1044 <xsl:otherwise>NONE</xsl:otherwise>
1048 <xsl:message>2 - West_ <xsl:value-of select="$West_"/></xsl:message>
1049 <xsl:message>2 - East_ <xsl:value-of select="$East_"/></xsl:message>
1051 <xsl:variable name="space_width_">
1052 <xsl:call-template name="F_Calc_Space_Width">
1053 <xsl:with-param name="iStackToWest" select="$West_"/>
1054 <xsl:with-param name="iStackToEast" select="$East_"/>
1055 </xsl:call-template>
1059 <xsl:variable name="space_width_" select="($BLKD_BUS_LANE_W * @BUSLANES_W)"/>
1060 <xsl:message>Bus lane space width <xsl:value-of select="@BUSLANES_W"/></xsl:message>
1061 <xsl:message>Bus lane space is <xsl:value-of select="$space_width_"/></xsl:message>
1064 <xsl:variable name="stack_width_">
1065 <xsl:call-template name="F_Calc_Stack_Width">
1066 <xsl:with-param name="iStackIdx" select="@EAST"/>
1067 </xsl:call-template>
1071 <xsl:message>Found stack of width <xsl:value-of select="$stack_width_"/></xsl:message>
1072 <xsl:message>==============================</xsl:message>
1075 <STACKSPACE WIDTH="{$stack_width_ + $space_width_}"/>
1079 <xsl:variable name = "stackToWest_W_">
1081 <xsl:when test="(($iStackToEast = '0') and ($iStackToWest = 'NONE'))">0</xsl:when>
1082 <xsl:when test="(($iStackToEast = 'NONE') and not($iStackToWest = 'NONE'))">
1083 <xsl:call-template name="F_Calc_Stack_Width">
1084 <xsl:with-param name="iStackIdx" select="$iStackToWest"/>
1085 </xsl:call-template>
1087 <xsl:when test="(not($iStackToEast = '0') and ($iStackToWest = 'NONE'))">
1088 <xsl:call-template name="F_Calc_Stack_Width">
1089 <xsl:with-param name="iStackIdx" select="($iStackToEast - 1)"/>
1090 </xsl:call-template>
1092 <xsl:otherwise>0</xsl:otherwise>
1097 <xsl:variable name = "stackToEast_W_">
1098 <xsl:call-template name="F_Calc_Stack_Width">
1099 <xsl:with-param name="stackIdx" select="$stackToEast"/>
1100 </xsl:call-template>
1102 <xsl:variable name ="extSpaceEast_W_" select="ceiling($stackToEast_W_ div 2)"/>
1105 <xsl:variable name ="extSpaceWest_W_" select="ceiling($stackToWest_W_ div 2)"/>
1107 <xsl:value-of select="sum(exsl:node-set($stackspace_widths_)/STACKSPACE/@WIDTH) - $extSpaceWest_W_"/>