/*Start of RxHtml() Function----------------------------Version-01.00-*/ /*:RxHtml Function: Generates HTML to display tables and lists, whose */ /* contents are passed into RxHtml are passed in via stem variables. */ /* Syntax: */ /* HEAD - define the HEAD section of a web page. The output will be */ /* issued as SAY commands (the default), but can be directed */ /* to the stack of saved in a stem variable): */ /* rc=RxHtml('Head',"Title('Text of page title') Output('stem.')") */ /* STACK */ /* SAY */ /* BODY - define the BODY section of a web page. Note that the */ /* following colors are supported: AQUA BLUE BLACK FUSHSIA */ /* GRAY GREEN LIME MAROON NAVY OLIVE PURPLE RED SILVER TEAL */ /* WHITE YELLOW: */ /* rc=RxHtml('Body','BackColor(color) TextColor(color)', */ /* 'LinkColor(color) VisitedLinkColor(color)', */ /* 'ActiveLinkColor(color) Output(dest)') */ /* */ /* LIST - define a LIST at the current portion of the web page. Note */ /* that STEM is required, and Bullet and Numbered are mutually */ /* exclusive: */ /* rc=RxHtml('List','STEM(input.stemVarName.) Output(dest)', */ /* 'BULLET(Disk | Circle | Square)', */ /* 'NUMBERED(A | 1 | a | i | I)') */ /* Lettered--^ ^ ^ */ /* Numbered------+ +------Roman Numerals */ /* */ /* TABLE - define a table at the current portion of the web page; */ /* data for the columns is provided by stem variables. */ /* rc=RxHtml('Table','Output(dest)', Output destination */ /* 'COLCOLOR(color)', Default text color */ /* 'BACKCOLOR(color)', Background color */ /* 'COLALIGN(LEFT|CENTER|RIGHT)', Default column */ /* Frame controls exterior grid lines... alignment */ /* 'FRAME(TOP|BOTTOM|LEFT|RIGHT|ALL|TOP,BOTTOM|LEFT,RIGHT)',*/ /* 'RULES(NONE|ROWS|COLS|ALL)', Interior grid lines*/ /* 'TBLWIDTH(nn%|nnn)', Table width % or pixels */ /* The following TABLE parms are for individual columns, col1-col12 */ /* 'COL1STEM(stem.)', Input stem variable for col1 */ /* 'COL1COLOR(color)', Text color for col1 */ /* 'HEAD1(Heading text)', optional Heading for col1*/ /* 'FOOT1(Footer text)', optional footer for col1 */ /* 'COL1ALIGN(LEFT|CENTER|RIGHT)', text alignment */ /* */ /* FOOT - Close off the bottom of the web page. */ /* */ /*Example: */ /* dwarf.1='Grumpy'; dwarf.2='Sleepy'; dwarf.3='Dopey'; dwarf.4='Doc';*/ /* dwarf.5='Happy'; dwarf.6='Bashful'; dwarf.7='Sneezy'; dwarf.0=7 */ /* rc=RxHtml('Head',"Title('Some Famous Dwarves') Output('web.')") */ /* rc=RxHtml('Body','BackColor(Blue) TextColor(Yellow) output(web.)') */ /* rc=RxHtml('List','Numbered(1) STEM(dwarf.) output(web.)') */ /* rc=RxHtml('Table','Output(web.) BACKCOLOR(Yellow) Colcolor(Blue)', */ /* 'COLALIGN(CENTER) Head1(Name) Col1Stem(dwarf.)' */ /* rc=RxHtml('Foot','output(web.)') */ /*--------------------------------------------------------------------*/ RxHtml: /* No expose here because caller passes stem vars by name. */ _htmerr = _HTMParse(ARG(1),ARG(2)) /* Parse incoming parameters */ IF _htmerr <> '' THEN RETURN _htmerr /* Return w/ error if parse fail*/ RETURN RxHtml1(ARG(1)) RxHtml1: PROCEDURE EXPOSE gbl. _htmp. _htm. (_htm.0expose) SELECT WHEN TRANSLATE(ARG(1)) = 'BODY' THEN DO _htmo = '' rc=_htmo(_htmo) END WHEN TRANSLATE(ARG(1)) = 'FOOT' THEN DO rc=_htmo('') rc=_htmo('') END WHEN TRANSLATE(ARG(1)) = 'HEAD' THEN DO rc=_htmo('') rc=_htmo(' ') rc=_htmo('') rc=_htmo('') IF SYMBOL('_htmp.0TITLE') = 'VAR' THEN rc=_htmo(''_htmp.0title'') rc=_htmo('') END WHEN TRANSLATE(ARG(1)) = 'LIST' THEN DO IF SYMBOL('_htmp.0BULLET') = 'VAR' THEN rc=_htmo('') IF SYMBOL('_htmp.0NUMBERED') = 'VAR' THEN rc=_htmo('') END WHEN TRANSLATE(ARG(1)) = 'TABLE' THEN DO rc=_htmo(' 'NONE' THEN rc=_htmo(' border="1"') IF SYMBOL('_htmp.0FRAME') = 'VAR' THEN DO SELECT WHEN POS('TOP',_htmp.0FRAME)>0 & POS('BOTTOM',_htmp.0FRAME)>0, & POS('LEFT',_htmp.0FRAME)>0 & POS('RIGHT',_htmp.0FRAME)>0 THEN frame = 'border' WHEN POS('TOP',_htmp.0FRAME)>0 & POS('BOTTOM',_htmp.0FRAME)>0 THEN frame = 'hsides' WHEN POS('LEFT',_htmp.0FRAME)>0 & POS('RIGHT',_htmp.0FRAME)>0 THEN frame = 'vsides' OTHERWISE frame = WORDTRAN(_htmp.0FRAME, ,'TOP BOTTOM LEFT RIGHT ALL', ,'above below lhs rhs border', ,'') END rc=_htmo(' frame="'frame'"') END IF SYMBOL('_htmp.0RULES') = 'VAR' THEN IF _htmp.0rules <> 'NONE' THEN rc=_htmo(' rules="'_htmp.0RULES'"') IF SYMBOL('_htmp.0TBLWIDTH') = 'VAR' THEN rc=_htmo(' width="'_htmp.0TBLWIDTH'"') rc=_htmo('>') /* End of the attributes on the table tag */ IF SYMBOL('_htmp.0HEAD1') = 'VAR' THEN DO rc=_htmo('') /* Start header row */ DO col = 1 BY 1 IF SYMBOL('_htmp.0COL'col'STEM') <> 'VAR' /* Any more columns?*/ THEN LEAVE col /* No, done this row*/ SELECT /* Specific color for this column? */ WHEN SYMBOL('_htmp.0COL'col'COLOR') = 'VAR' THEN color = VALUE('_htmp.0COL'col'COLOR') /* Generic color for entire table? */ WHEN SYMBOL('_htmp.0COLCOLOR') = 'VAR' THEN color = _htmp.0COLCOLOR OTHERWISE /* No color, carry forward current color. */ color = '' END align = '' SELECT /* Specific alignment for this column? */ WHEN SYMBOL('_htmp.0COL'col'ALIGN') = 'VAR' THEN IF VALUE('_htmp.0COL'col'ALIGN') <> 'LEFT', | SYMBOL('_htmp.0COLALIGN') = 'VAR' THEN align=' align="'VALUE('_htmp.0COL'col'ALIGN')'"' /* Generic alignment for entire table? */ WHEN SYMBOL('_htmp.0COLALIGN') = 'VAR' THEN IF VALUE('_htmp.0COL'col'ALIGN') <> 'LEFT' THEN align = ' align="'VALUE('_htmp.0COLALIGN')'"' OTHERWISE /* No alignment, browser assigns defaults. */ END IF SYMBOL('_htmp.0HEAD'col) = 'VAR' THEN value = VALUE('_htmp.0HEAD'col) ELSE value = '' IF color <> '' THEN rc=_htmo(''value'') ELSE rc=_htmo(''value'') END col rc=_htmo('') /* End header row */ END DO row = 1 TO VALUE(_htmp.0COL1STEM''0) rc=_htmo('') /* Start first (or next) row */ DO col = 1 BY 1 IF SYMBOL('_htmp.0COL'col'STEM') <> 'VAR' /* Any more columns?*/ THEN LEAVE col /* No, done this row*/ SELECT /* Specific color for this column? */ WHEN SYMBOL('_htmp.0COL'col'COLOR') = 'VAR' THEN color = VALUE('_htmp.0COL'col'COLOR') /* Generic color for entire table? */ WHEN SYMBOL('_htmp.0COLCOLOR') = 'VAR' THEN color = _htmp.0COLCOLOR OTHERWISE /* No color, carry forward current color. */ color = '' END rc=_htmo(' 'LEFT' THEN rc=_htmo(' align="'VALUE('_htmp.0COL'col'ALIGN')'"') /* Generic alignment for entire table? */ WHEN SYMBOL('_htmp.0COLALIGN') = 'VAR' THEN IF VALUE('_htmp.0COL'col'ALIGN') <> 'LEFT' THEN rc=_htmo(' align="'VALUE('_htmp.0COLALIGN')'"') OTHERWISE /* No alignment, browser assigns defaults. */ END rc=_htmo('>') /* End bracket for ') ELSE rc=_htmo(VALUE(VALUE('_htmp.0COL'col'STEM')row)'') END col rc=_htmo('') /* End this row */ END row IF SYMBOL('_htmp.FOOT1') = 'VAR' THEN DO rc=_htmo('') /* Start footer row */ DO col = 1 BY 1 IF SYMBOL('_htmp.0COL'col'STEM') <> 'VAR' /* Any more columns?*/ THEN LEAVE col /* No, done this row*/ SELECT /* Specific color for this column? */ WHEN SYMBOL('_htmp.0COL'col'COLOR') = 'VAR' THEN color = VALUE('_htmp.0COL'col'COLOR') /* Generic color for entire table? */ WHEN SYMBOL('_htmp.0COLCOLOR') = 'VAR' THEN color = _htmp.0COLCOLOR OTHERWISE /* No color, carry forward current color. */ color = '' END IF SYMBOL('_htmp.0FOOT'col) = 'VAR' THEN value = VALUE('_htmp.0FOOT'col) ELSE value = '' IF color <> '' THEN rc=_htmo('') ELSE rc=_htmo('') END col rc=_htmo('') /* End footer row */ END rc=_htmo('
'' THEN rc=_htmo('', VALUE(VALUE('_htmp.0COL'col'STEM')row), '
'value''value'
') /* End this table */ END /* WHEN TRANSLATE(ARG(1)) = 'TABLE' */ OTHERWISE END RETURN 0 /*--------------------------------------------------------------------*/ /*:_HTMName2Color(colorName) function: returns color code for a given */ /* color name, or blank if invalid color name passed */ /*--------------------------------------------------------------------*/ _HTMName2Color: PROCEDURE EXPOSE gbl. p = WORDPOS(TRANSLATE(ARG(1)), ,'AQUA BLUE BLACK FUSHSIA GRAY GREEN LIME MAROON NAVY', 'OLIVE PURPLE RED SILVER TEAL WHITE YELLOW') IF p = 0 THEN RETURN '' RETURN '#'WORD('', '00FFFF 0000FF 000000 FF00FF 808080 008000 00FF00 800000 000080', '808000 800080 FF0000 C0C0C0 008080 FFFFFF FFFF00',p) /*--------------------------------------------------------------------*/ /*:_HTMO() function: outputs tags to a given destination */ /*--------------------------------------------------------------------*/ _HTMO: SELECT WHEN _HTMP.0OUTPUT = 'SAY' THEN SAY ARG(1) WHEN _HTMP.0OUTPUT = 'STACK' THEN QUEUE ARG(1) OTHERWISE IF SYMBOL(_HTMP.0OUTPUT'0') = 'LIT' THEN CALL VALUE _htmp.0OUTPUT'0', 0 n = VALUE(_htmp.0OUTPUT'0') + 1 CALL VALUE _htmp.0OUTPUT'0', n CALL VALUE _htmp.0OUTPUT''n, ARG(1) END RETURN 0 /*--------------------------------------------------------------------*/ /*:_HTMParse(arg1,arg2) function: Parses the parameters for a given */ /* request type, issues error messages if values are invalid or */ /* missing, and stores the parm values in the _HTMP.0parmname stem */ /*--------------------------------------------------------------------*/ _HTMParse: PROCEDURE EXPOSE gbl. _htmp. _htm. _htm.0expose = '' /* Variables to be exposed by our caller */ reqtype = TRANSLATE(ARG(1)) rc = KWVALID('REQTYPE','LIST(BODY,FOOT,HEAD,LIST,TABLE)','_HTMPARSEINV') IF rc <> 0 THEN RETURN rc SELECT WHEN reqtype = 'BODY' THEN DO valkeys = 'BACKCOLOR TEXTCOLOR LINKCOLOR VISITEDLINKCOLOR', 'ACTIVELINKCOLOR OUTPUT' reqkeys = '' END /* WHEN reqtype = 'BODY' THEN */ WHEN reqtype = 'FOOT' THEN DO valkeys = 'OUTPUT' reqkeys = '' END /* WHEN reqtype = 'FOOT' THEN */ WHEN reqtype = 'HEAD' THEN DO valkeys = 'TITLE OUTPUT' reqkeys = '' END /* WHEN reqtype = 'HEAD' THEN */ WHEN reqtype = 'LIST' THEN DO valkeys = 'BULLET NUMBERED STEM OUTPUT' reqkeys = 'STEM' END /* WHEN reqtype = 'LIST' THEN */ WHEN reqtype = 'TABLE' THEN DO valkeys = 'BACKCOLOR COLCOLOR COLALIGN FRAME RULES TBLWIDTH OUTPUT' maxColumns = 12 /* max no of supported columns */ DO i = 1 TO maxColumns /* Generate keywords to max columns */ valkeys=SPACE(valkeys 'HEAD'i 'FOOT'i, 'COL'i'ALIGN' 'COL'i'COLOR' 'COL'i'STEM') END i reqkeys = 'COL1STEM' END /* WHEN reqtype = 'TABLE' THEN */ OTHERWISE SAY 'Bug1! Reqtype='reqtype 'has not been handled' END /* SELECT */ /*--------------------------------------------------------------------*/ /* Determine which parms are valid and required, based on request type*/ /*--------------------------------------------------------------------*/ krc = KWPARSE(ARG(2),valkeys) IF krc <> 0 THEN DO; SAY krc; RETURN krc; END /* Ensure that all required keywords have been entered. */ DO i = 1 TO WORDS(reqkeys) IF SYMBOL(WORD(reqkeys,i)) <> 'VAR' THEN DO; rc = 'Missing required parm 'WORD(reqkeys,i)'()' SAY rc; RETURN rc END END i IF SYMBOL('output') = 'LIT' THEN output = 'SAY' output = TRANSLATE(output) CALL VALUE '_HTMP.0OUTPUT', output /* Save value of output parm */ IF WORDPOS(output,'SAY STACK') = 0 THEN DO /* Have caller expose the stem contents, so it can access it */ _htm.0expose = SPACE(_htm.0expose output,1) END SELECT WHEN reqtype = 'BODY' THEN DO keys = 'ACTIVELINKCOLOR BACKCOLOR LINKCOLOR TEXTCOLOR', 'VISITEDLINKCOLOR' DO i = 1 TO WORDS(keys) key = WORD(keys,i) IF SYMBOL(key) = 'VAR' THEN DO val = _HTMName2Color(VALUE(key)) IF val = '' THEN SAY 'Invalid value for' key'('VALUE(key)'), ignored' ELSE CALL VALUE '_HTMP.0'key, val END END i END /* WHEN reqtype = 'BODY' THEN */ WHEN reqtype = 'HEAD' THEN DO _HTMP.0TITLE = title /* Save value of TITLE(xx) parm */ END /* WHEN reqtype = 'HEAD' THEN */ WHEN reqtype = 'FOOT' THEN NOP WHEN reqtype = 'LIST' THEN DO _HTMP.0STEM = stem /* Save value of STEM(xxx) parm */ _htm.0expose = SPACE(_htm.0expose stem,1) IF SYMBOL('BULLET')SYMBOL('NUMBERED') = 'VARVAR' THEN DO; rc = 'LIST keywords BULLET() and NUMBERED() are mutually', 'exclusive, specify one or the other, not both' SAY rc; RETURN rc END IF SYMBOL('BULLET')SYMBOL('NUMBERED') = 'LITLIT' THEN bullet = 'DISK' /* Set default if none specified */ IF SYMBOL('BULLET') = 'VAR' THEN DO bullet = LOWER(bullet) /* HTML wants these in lower case. */ CALL KWVALID 'BULLET','LIST(disk,circle,square)','_HTMPARSEINV' _HTMP.0BULLET = bullet END IF SYMBOL('NUMBERED') = 'VAR' THEN DO CALL KWVALID 'NUMBERED','LIST(A,1,a,i,I)','_HTMPARSEINV' _HTMP.0NUMBERED = numbered END END /* WHEN reqtype = 'LIST' THEN */ WHEN reqtype = 'TABLE' THEN DO keys = 'BACKCOLOR COLCOLOR' DO i = 1 TO WORDS(keys) key = WORD(keys,i) IF SYMBOL(key) = 'VAR' THEN DO val = _HTMName2Color(VALUE(key)) IF val = '' THEN SAY 'Invalid value for' key'('VALUE(key)'), ignored' ELSE CALL VALUE '_HTMP.0'key, val END END i IF SYMBOL('COLALIGN') = 'VAR' THEN DO colalign = TRANSLATE(colalign) CALL KWVALID 'COLALIGN','LISTABBR(LEFT,CENTER,RIGHT)', ,'_HTMPARSEINV' _HTMP.0COLALIGN = colalign END IF SYMBOL('FRAME') = 'VAR' THEN DO /* This needs a KWVALID enhancement to handle (TOP,BOTTOM) */ frame = TRANSLATE(frame) CALL KWVALID 'FRAME','LISTABBR(TOP,BOTTOM,LEFT,RIGHT,ALL)', ,'_HTMPARSEINV' _HTMP.0FRAME = frame END IF SYMBOL('RULES') = 'VAR' THEN DO rules = TRANSLATE(rules) CALL KWVALID 'RULES','LISTABBR(ROWS,COLS,ALL,NONE)', ,'_HTMPARSEINV' _HTMP.0RULES = rules END IF SYMBOL('TBLWIDTH') = 'VAR' THEN DO _HTMP.0TBLWIDTH = tblwidth END DO i = 1 TO maxColumns /* Generate keywords to max columns */ IF WORDPOS('VAR', ,SYMBOL('HEAD'i) SYMBOL('FOOT'i) SYMBOL('COL'i'ALIGN'), SYMBOL('COL'i'COLOR')) > 0 THEN IF SYMBOL('COL'i'STEM') <> 'VAR' THEN DO; rc = 'TABLE keywords HEAD'i'() FOOT'i'() COL'i'ALIGN() or', 'COL'i'COLOR() require COL'i'STEM keyword. Ignored.' SAY rc; RETURN rc END IF SYMBOL('COL'i'STEM') <> 'VAR' /* Any more stems? */ THEN LEAVE i /* No, exit this loop */ CALL VALUE '_HTMP.0COL'i'STEM', VALUE('COL'i'STEM') _htm.0expose = SPACE(_htm.0expose VALUE('COL'i'STEM'),1) IF SYMBOL('HEAD'i) = 'VAR' THEN CALL VALUE '_HTMP.0HEAD'i, VALUE('head'i) IF SYMBOL('FOOT'i) = 'VAR' THEN CALL VALUE '_HTMP.0FOOT'i, VALUE('foot'i) IF SYMBOL('COL'i'ALIGN') = 'VAR' THEN DO CALL VALUE 'COL'i'ALIGN', TRANSLATE(VALUE('COL'i'ALIGN')) CALL KWVALID 'COL'i'ALIGN','LISTABBR(LEFT,CENTER,RIGHT)', ,'_HTMPARSEINV' CALL VALUE '_HTMP.0COL'i'ALIGN', VALUE('COL'i'ALIGN') END IF SYMBOL('COL'i'COLOR') = 'VAR' THEN DO val = _HTMName2Color(VALUE('COL'i'COLOR')) IF val = '' THEN SAY 'Invalid value for', 'COL'i'COLOR('VALUE('COL'i'COLOR')'), ignored' ELSE CALL VALUE '_HTMP.0COL'i'COLOR', VALUE('COL'i'COLOR') END END i END /* WHEN reqtype = 'TABLE' THEN */ OTHERWISE SAY 'Bug2! Reqtype='reqtype 'has not been handled' END /* SELECT */ RETURN '' /* Return w/ no errors */ _HTMParseInv: SAY _kwerrmsg RETURN _kwerrmsg /*-End of RxHtml function---------------------------------------------*/ /*RXCOPY KWPARSE NODUP 0 LINES COPIED ON 05-22-03 AT 14:38*************/ /*RXCOPY KWVALID NODUP 0 LINES COPIED ON 05-22-03 AT 14:38*************/ /*RXCOPY LOWER NODUP 0 LINES COPIED ON 05-22-03 AT 14:38***************/ /*RXCOPY WORDTRAN NODUP 0 LINES COPIED ON 05-22-03 AT 14:38************/