Files
vfp_roaauto/COMUN/utile/web/wwresponse.prg

587 lines
21 KiB
Plaintext

**
** wwresponse.fxp
**
*
DEFINE CLASS wwResponse AS RELATION
laSpobject = .F.
caUtosessioncookiename = "wwSessionId"
caUtosessioncookie = ""
laUtosessioncookiepersist = .F.
csTylesheet = ""
coUtput = .NULL.
coNtenttype = ""
PROTECTED lnOoutput
lnOoutput = .F.
*
FUNCTION Write
LPARAMETER lcText, llNooutput
RETURN ""
ENDFUNC
*
FUNCTION Send
LPARAMETER lcText, llNooutput
RETURN ""
ENDFUNC
*
FUNCTION FastWrite
LPARAMETER lcText, llNotused
RETURN ""
ENDFUNC
*
FUNCTION GetOutput
LPARAMETER llNoclear
RETURN ""
ENDFUNC
*
PROCEDURE Clear
ENDPROC
*
PROCEDURE Rewind
ENDPROC
*
PROCEDURE Reset
ENDPROC
*
PROCEDURE reset
STORE "" TO thIs.caUtosessioncookie, thIs.caUtosessioncookiename
STORE .F. TO thIs.lnOoutput
ENDPROC
*
FUNCTION HTMLHeader
LPARAMETER tcHeader, tcTitle, tcBackground, tcContenttype, tlNooutput
LOCAL lcOuttext
tcHeader = IIF(EMPTY(tcHeader), "", tcHeader)
tcTitle = IIF(EMPTY(tcTitle), tcHeader, tcTitle)
tcBackground = IIF(EMPTY(tcBackground), "", tcBackground)
thIs.coNtenttypeheader(tcContenttype)
IF .NOT. EMPTY(tcBackground)
lcBackground = IIF(AT("#", tcBackground)>0, 'BGCOLOR="', ;
'BACKGROUND="')+LOWER(tcBackground)+'"'
ELSE
lcBackground = ""
ENDIF
lcOuttext = "<HTML>"+CHR(13)+CHR(10)+"<HEAD><TITLE>"+tcTitle+ ;
"</TITLE></HEAD>"+CHR(13)+CHR(10)+IIF( .NOT. ;
EMPTY(thIs.csTylesheet), ;
'<LINK rel="stylesheet" type="text/css" href="'+ ;
thIs.csTylesheet+'">', "")+CHR(13)+CHR(10)+'<BODY '+ ;
lcBackground+'>'+CHR(13)+CHR(10)
IF ATC("<", tcHeader)>0 .AND. ATC(">", tcHeader)>0
lcOuttext = lcOuttext+thIs.wrIte(tcHeader+CHR(13)+CHR(10),.T.)+ ;
CHR(13)+CHR(10)
ELSE
IF .NOT. EMPTY(tcHeader)
lcOuttext = lcOuttext+'<FONT FACE="Verdana"><H1>'+ ;
tcHeader+'</H1></Font><HR>'+CHR(13)+CHR(10)
ENDIF
ENDIF
RETURN thIs.wrIte(@lcOuttext,tlNooutput)
ENDFUNC
*
PROCEDURE HTMLHeaderEx
LPARAMETER lvHtmlheader, loHttpheader
thIs.coNtenttypeheader(loHttpheader)
IF VARTYPE(lvHtmlheader)="O"
thIs.wrIte(lvHtmlheader.geToutput())
ELSE
IF VARTYPE(lvHtmlheader)="C"
thIs.wrIte("<html><head><title>"+lvHtmlheader+"</title><body>")
ELSE
thIs.wrIte("<html><body>")
ENDIF
ENDIF
ENDPROC
*
FUNCTION HTMLFooter
LPARAMETER tcText, tlNooutput
tcText = IIF(EMPTY(tcText), "", tcText)
RETURN thIs.wrIte(tcText+CHR(13)+CHR(10)+"<p></BODY>"+CHR(13)+ ;
CHR(10)+"</HTML>"+CHR(13)+CHR(10),tlNooutput)
ENDFUNC
*
FUNCTION WriteLn
LPARAMETER lcOutput, llNooutput
IF EMPTY(lcOutput)
lcOutput = ""
ENDIF
RETURN thIs.wrIte(lcOutput+CHR(13)+CHR(10),llNooutput)
ENDFUNC
*
FUNCTION Sendln
LPARAMETER lcOutput, llNooutput
IF EMPTY(lcOutput)
lcOutput = ""
ENDIF
RETURN thIs.wrIte(lcOutput+CHR(13)+CHR(10),llNooutput)
ENDFUNC
*
FUNCTION ContentTypeHeader
LPARAMETER lvContenttype, tlNooutput
LOCAL loHeader, lcType, lcOutput
lcType = VARTYPE(lvContenttype)
DO CASE
CASE lcType="O"
IF .NOT. lvContenttype.lpAssedhtmlobject
RETURN thIs.wrIte(lvContenttype.geToutput(),tlNooutput)
ELSE
lvContenttype.coMpleteheader()
ENDIF
RETURN ""
CASE lcType="C"
lvContenttype = LOWER(lvContenttype)
IF lvContenttype="none" .OR. EMPTY(lvContenttype)
RETURN ""
ENDIF
lvContenttype = LOWER(lvContenttype)
loHeader = CREATEOBJECT('wwHTTPHeader', thIs)
IF lvContenttype="force reload"
loHeader.deFaultheader()
loHeader.adDforcereload()
loHeader.coMpleteheader()
RETURN ""
ENDIF
loHeader.seTprotocol()
loHeader.seTcontenttype(lvContenttype)
loHeader.coMpleteheader()
RETURN ""
OTHERWISE
loHeader = CREATEOBJECT('wwHTTPHeader', thIs)
loHeader.deFaultheader()
loHeader.coMpleteheader()
RETURN ""
ENDCASE
RETURN thIs.wrIte(loHeader.geToutput(),tlNooutput)
ENDFUNC
*
FUNCTION WriteMemo
LPARAMETER lcText, llNooutput
LOCAL lcOutput
lcOutput = STRTRAN(lcText, CHR(13)+CHR(10), CHR(13))
lcOutput = STRTRAN(lcOutput, CHR(13)+CHR(13), "<p>")
lcOutput = STRTRAN(lcOutput, CHR(13), "<br>")
RETURN thIs.wrIte(@lcOutput,llNooutput)
ENDFUNC
*
FUNCTION ExpandTemplate
LPARAMETER tcPagename, tcContenttype, tlTemplatestring, tlNooutput
LOCAL lcOutput, lcOldalias, lnHandle, loEval
IF EMPTY(tcPagename)
RETURN ""
ENDIF
thIs.coNtenttypeheader(tcContenttype)
lcOutput = ""
IF .NOT. tlTemplatestring
lnHandle = FOPEN(tcPagename, 0)
IF lnHandle<>-1
lnSize = FSEEK(lnHandle, 0, 2)
FSEEK(lnHandle, 0, 0)
lcOutput = FREAD(lnHandle, lnSize)
= FCLOSE(lnHandle)
loEval = CREATEOBJECT('wwEval')
RETURN thIs.wrIte(loEval.meRgetext(@lcOutput),tlNooutput)
ELSE
RETURN thIs.wrIte(lcOutput+[<h2>Can't find or open page ]+ ;
tcPagename+'</h2>',tlNooutput)
ENDIF
ENDIF
loEval = CREATEOBJECT("wwEval")
RETURN thIs.wrIte(loEval.meRgetext(@tcPagename),tlNooutput)
ENDFUNC
*
FUNCTION ExpandScript
LPARAMETER tcPagename, tnMode, tvContenttype, tlTemplatestring, ;
llNooutput
LOCAL lcOutput, lnHandle, osCript
tcPagename = IIF(EMPTY(tcPagename), "", tcPagename)
tnMode = IIF(EMPTY(tnMode), 3, tnMode)
thIs.coNtenttypeheader(tvContenttype)
lcOutput = ""
IF llNooutput
loResponse = CREATEOBJECT('wwResponseStringNoBuffer')
ELSE
loResponse = thIs
ENDIF
osCript = CREATEOBJECT('wwVFPScript', IIF(tlTemplatestring, .F., ;
tcPagename), loResponse)
osCript.laLwaysunloadscript = .T.
IF tnMode=3
IF tlTemplatestring
lcCode = osCript.coNvertpage(tcPagename,.T.)
ELSE
lcCode = osCript.coNvertpage(fiLe2var(osCript.cfIlename),.T.)
ENDIF
osCript.reNderpagefromvar(lcCode)
IF llNooutput
RETURN loResponse.geToutput()
ENDIF
RETURN
ENDIF
IF tnMode=2
osCript.reNderpage()
ENDIF
IF tnMode=1
osCript.coNvertpage()
osCript.reNderpage()
ENDIF
IF llNooutput
RETURN loResponse.geToutput()
ENDIF
RETURN
ENDFUNC
*
FUNCTION ShowCursor
LPARAMETER lvHeader, lcTitle, llSumnumbers, llNooutput, lcTabletags
LOCAL lcHeader, lnX, laTotals, lcOutput, lnSizeloc, lnSize, lvValue
IF EMPTY(ALIAS())
RETURN ""
ENDIF
lcOutput = ""
lnFields = AFIELDS(laFields)
lnReccount = RECCOUNT()
IF llSumnumbers
DIMENSION laTotals[1, lnFields]
laTotals = 0
ENDIF
lcTitle = IIF(TYPE("lcTitle")="C", lcTitle, "")
IF .NOT. llNooutput
loShowcursor = CREATEOBJECT("wwShowCursor", thIs)
ELSE
loShowcursor = CREATEOBJECT("wwShowCursor")
ENDIF
loShowcursor.ctAbletitle = lcTitle
loShowcursor.lsUmnumerics = llSumnumbers
loShowcursor.laLternaterows = .T.
IF .NOT. EMPTY(lcTabletags)
loShowcursor.ceXtratabletags = lcTabletags
ENDIF
IF TYPE("lvHeader[1]")<>"U"
loShowcursor.buIldfieldlistheader(@lvHeader)
ENDIF
loShowcursor.shOwcursor()
IF llNooutput
RETURN loShowcursor.geToutput()
ENDIF
RETURN ""
ENDFUNC
*
PROCEDURE NoOutput
LPARAMETER llNooutput
thIs.lnOoutput = .T.
ENDPROC
*
FUNCTION StandardPage
LPARAMETER lcHeader, lcBody, lvHeader, lnRefresh, lcRefreshurl, ;
llNooutput
LOCAL lcOutput
lcHeader = IIF( .NOT. EMPTY(lcHeader), lcHeader, "")
lcBody = IIF( .NOT. EMPTY(lcBody), lcBody, "")
lnRefresh = IIF(EMPTY(lnRefresh), 0, lnRefresh)
IF lnRefresh>0
lcRefreshurl = IIF(EMPTY(lcRefreshurl), "", lcRefreshurl)
ENDIF
loHtml = CREATEOBJECT('wwResponseStringNoBuffer')
loHtml.coNtenttypeheader(lvHeader)
lcOutput = '<table border="0" cellpadding="5" width="100%">'+ ;
CHR(13)+CHR(10)+ ;
' <tr><td align="center" colspan="2" bgcolor="#000000">'+ ;
CHR(13)+CHR(10)+ ;
' <font color="#FFFFFF" size="4" face="Verdana"><b>'+ ;
CHR(13)+CHR(10)+lcHeader+'</b></font>'+CHR(13)+CHR(10)+ ;
' </td></tr>'+CHR(13)+CHR(10)+' <tr><td><br><p>'+ ;
CHR(13)+CHR(10)+' <font face="Verdana" size=2>'+CHR(13)+ ;
CHR(10)+lcBody+'</font>'+CHR(13)+CHR(10)+' </td></tr>'+ ;
CHR(13)+CHR(10)+'</Table>'
lcOutput = '<html><head>'+CHR(13)+CHR(10)+'<title>'+lcHeader+ ;
'</title>'+CHR(13)+CHR(10)+IIF(lnRefresh>0, ;
'<META HTTP-EQUIV="Refresh" CONTENT="'+ ;
TRANSFORM(lnRefresh)+'; URL='+lcRefreshurl+'">', '')+ ;
CHR(13)+CHR(10)+'</head>'+CHR(13)+CHR(10)+ ;
'<body color="#FFFFFF" style="font:normal normal x-small Verdana">'+ ;
CHR(13)+CHR(10)+lcOutput
loHtml.wrIte(lcOutput)
loHtml.htMlfooter()
RETURN thIs.wrIte(loHtml.geToutput(),llNooutput)
ENDFUNC
*
FUNCTION tagtext
LPARAMETER lcTag, lcText, llNooutput
RETURN thIs.wrIte("<"+lcTag+">"+lcText+"</"+lcTag+">",llNooutput)
ENDFUNC
*
FUNCTION Authenticate
LPARAMETER lcRealm, lcErrormsg, llNooutput
LOCAL loHeader, lcOutput
loHeader = CREATEOBJECT('wwHTTPHeader')
loHeader.auThenticate(lcRealm,lcErrormsg)
thIs.clEar()
lcOutput = thIs.wrIte(loHeader.geToutput(),llNooutput)
thIs.lnOoutput = .T.
RETURN lcOutput
ENDFUNC
*
FUNCTION Redirect
LPARAMETER tcUrl, tlNooutput
LOCAL loHeader, lcOutput
loHeader = CREATEOBJECT('wwHTTPHeader')
loHeader.reDirect(tcUrl)
thIs.clEar()
lcOutput = thIs.wrIte(loHeader.geToutput(),tlNooutput)
thIs.lnOoutput = .T.
RETURN lcOutput
ENDFUNC
*
FUNCTION FormHeader
LPARAMETER lcAction, lcMethod, lcTarget, lcExtratags, llNooutput
IF EMPTY(lcMethod)
lcMethod = "POST"
ENDIF
IF EMPTY(lcExtratags)
lcExtratags = ""
ENDIF
RETURN thIs.wrIte('<FORM ACTION="'+lcAction+'" METHOD="'+lcMethod+ ;
'" '+IIF( .NOT. EMPTY(lcTarget), ' TARGET="'+lcTarget+'" ', ;
'')+lcExtratags+'>',llNooutput)
ENDFUNC
*
FUNCTION formtextbox
LPARAMETER lcName, lcValue, lnWidth, lnMaxwidth, lcCustomtags, llNooutput
IF EMPTY(lnWidth)
lnWidth = 20
ENDIF
IF EMPTY(lnMaxwidth)
lnMaxwidth = 0
ENDIF
IF EMPTY(lcCustomtags)
lcCustomtags = ""
ENDIF
lcOutput = '<INPUT TYPE="INPUT" NAME="'+lcName+'" VALUE="'+lcValue+'"'
IF .NOT. EMPTY(lnWidth)
lcOutput = lcOutput+' SIZE="'+LTRIM(STR(lnWidth, 3))+'"'
ENDIF
IF .NOT. EMPTY(lnMaxwidth)
lcOutput = lcOutput+' MAXLENGTH="'+LTRIM(STR(lnMaxwidth, 3))+'"'
ENDIF
IF .NOT. EMPTY(lcCustomtags)
lcOutput = lcOutput+' '+lcCustomtags
ENDIF
RETURN thIs.wrIte(lcOutput+'>',llNooutput)
ENDFUNC
*
FUNCTION formtextarea
LPARAMETER lcName, lcValue, lnHeight, lnWidth, lcCustomtags, llNooutput
IF EMPTY(lnWidth)
lnWidth = 20
ENDIF
IF EMPTY(lnHeight)
lnHeight = 0
ENDIF
IF EMPTY(lcCustomtags)
lcCustomtags = ""
ENDIF
lcOutput = '<TEXTAREA NAME="'+lcName+'"'
IF .NOT. EMPTY(lnWidth)
lcOutput = lcOutput+' COLS="'+LTRIM(STR(lnWidth, 3))+'"'
ENDIF
IF .NOT. EMPTY(lnHeight)
lcOutput = lcOutput+' ROWS="'+LTRIM(STR(lnHeight, 3))+'"'
ENDIF
IF .NOT. EMPTY(lcCustomtags)
lcOutput = lcOutput+' '+lcCustomtags
ENDIF
RETURN thIs.wrIte(lcOutput+'>'+lcValue+'</TEXTAREA>',llNooutput)
ENDFUNC
*
FUNCTION formhidden
LPARAMETER lcName, lcValue, llNooutput
RETURN thIs.wrIte('<INPUT TYPE="HIDDEN" NAME="'+lcName+'" VALUE="'+ ;
lcValue+'">',llNooutput)
ENDFUNC
*
FUNCTION formcheckbox
LPARAMETER lcName, llValue, lcText, lcCustomtags, llNooutput
lcCustomtags = IIF(TYPE("lcCustomTags")="C", lcCustomtags, "")
lcText = IIF(TYPE("lcText")="C", lcText, "")
RETURN thIs.wrIte('<INPUT TYPE="CheckBox" VALUE="ON" NAME="'+ ;
lcName+'"'+IIF(llValue, " CHECKED", "")+" "+lcCustomtags+'>'+ ;
lcText,llNooutput)
ENDFUNC
*
FUNCTION formradio
LPARAMETER lcName, lcValue, lcText, llSelected, lcCustomtags, llNooutput
IF EMPTY(lcCustomtags)
lcCustomtags = ""
ENDIF
RETURN thIs.wrIte('<INPUT TYPE="Radio" Value="'+lcValue+'" NAME="'+ ;
lcName+'"'+IIF(llSelected, " CHECKED", "")+" "+lcCustomtags+ ;
'> '+lcText,llNooutput)
ENDFUNC
*
FUNCTION formbutton
LPARAMETER lcName, lcCaption, lcType, lnWidth, lcCustomtags, llNooutput
lnWidth = IIF(VARTYPE(lnWidth)="N", lnWidth, 20)
lcCustomtags = IIF(VARTYPE(lcCustomtags)="C", lcCustomtags, "")
lcType = IIF(VARTYPE(lcType)="C", lcType, "SUBMIT")
lcOutput = '<INPUT TYPE="'+lcType+'" NAME="'+lcName+'" VALUE="'+ ;
lcCaption+'"'
IF .NOT. EMPTY(lnWidth)
lcOutput = lcOutput+' SIZE="'+LTRIM(STR(lnWidth, 3))+'"'
ENDIF
IF .NOT. EMPTY(lcCustomtags)
lcOutput = lcOutput+' '+lcCustomtags
ENDIF
RETURN thIs.wrIte(lcOutput+'>',llNooutput)
ENDFUNC
*
FUNCTION HRef
LPARAMETER lcLink, lcText, tlNooutput
IF EMPTY(lcText)
lcText = lcLink
ENDIF
RETURN thIs.wrIte('<A HREF="'+lcLink+'">'+lcText+'</A>',tlNooutput)
ENDFUNC
*
FUNCTION DBFPopup
LPARAMETER lcFormvarname, lcCharexpression, lcDefault, lcFirstitem, ;
lnHeight, llNooutput, llMultiselect, lcKey
LOCAL lnX, lcOutput, lcValue, lcKey, lcInsertkey
lcCharexpression = IIF(VARTYPE(lcCharexpression)="C", ;
lcCharexpression, FIELD(1))
lnHeight = IIF(VARTYPE(lnHeight)="N", lnHeight, 1)
lcDefault = IIF(VARTYPE(lcDefault)="C", lcDefault, " xxxx")
lcFirstitem = IIF(VARTYPE(lcFirstitem)="C", lcFirstitem, " xxxx")
lcKey = IIF(VARTYPE(lcKey)="C", lcKey, "")
lcOutput = '<SELECT NAME="'+lcFormvarname+'" SIZE="'+ ;
ALLTRIM(STR(lnHeight))+'"'+IIF(llMultiselect, ;
' MULTIPLE', '')+'>'
lnX = 0
IF lcFirstitem<>" xxxx"
lnX = 1
lcOutput = lcOutput+'<OPTION>'+lcFirstitem+CHR(13)+CHR(10)
ENDIF
SCAN
lnX = lnX+1
lcInsertkey = IIF( .NOT. EMPTY(lcKey), ' Value ="'+ ;
EVALUATE(lcKey)+'" ', '')
lcValue = EVALUATE(lcCharexpression)
IF UPPER(lcDefault)=UPPER(TRIM(lcValue))
lcOutput = lcOutput+'<OPTION SELECTED'+lcInsertkey+'>'+ ;
lcValue+CHR(13)+CHR(10)
ELSE
lcOutput = lcOutput+'<OPTION '+lcInsertkey+'>'+lcValue+ ;
CHR(13)+CHR(10)
ENDIF
ENDSCAN
lcOutput = lcOutput+"</SELECT>"
RETURN thIs.wrIte(@lcOutput,llNooutput)
ENDFUNC
*
FUNCTION IEChart
LPARAMETER lcType, lnDatacols, lvWidth, lnHeight, lcLabels, llNooutput
LOCAL lnX, y, lnReccount, lnFields, lcOutput, lcWidth
lnDatacols = IIF(TYPE("lnDataCols")="N", lnDatacols, 1)
lcLabels = IIF(TYPE("lcLabels")="C", lcLabels, "")
lcType = IIF(TYPE("lcType")="C", UPPER(lcType), "")
lvWidth = IIF(TYPE("lvWidth")<>"L", lvWidth, "100%")
lnHeight = IIF(TYPE("lnHeight")="N", lnHeight, 250)
IF TYPE("lvWidth")="N"
lcWidth = LTRIM(STR(lvWidth))
ELSE
lcWidth = lvWidth
ENDIF
DO CASE
CASE lcType="BAR"
lcType = "12"
CASE lcType="LINE"
lcType = "5"
CASE lcType="AREA"
lcType = "8"
CASE lcType="PIE"
lcType = "1"
OTHERWISE
IF VAL(lcType)=0
lcType = "12"
ENDIF
ENDCASE
lnFields = AFIELDS(laFields)
lnReccount = RECCOUNT()
lcOutput = ""
lcOutput = lcOutput+'<OBJECT'+CHR(13)+CHR(10)+' ID="ocxGraph"'+ ;
CHR(13)+CHR(10)+ ;
' CLASSID="clsid:FC25B780-75BE-11CF-8B01-444553540000"'+ ;
CHR(13)+CHR(10)+ ;
' CODEBASE="http://activex.microsoft.com/controls/iexplorer/iechart.ocx#Version=4,70,0,1161"'+ ;
CHR(13)+CHR(10)+' TYPE="application/x-oleobject"'+ ;
CHR(13)+CHR(10)+' WIDTH='+lcWidth+CHR(13)+CHR(10)+ ;
' HEIGHT='+LTRIM(STR(lnHeight))+'>'+CHR(13)+CHR(10)+ ;
CHR(13)+CHR(10)
lcOutput = lcOutput+' <PARAM NAME="hgridStyle" VALUE="3">'+CHR(13)+ ;
CHR(10)+' <PARAM NAME="vgridStyle" VALUE="0">'+CHR(13)+ ;
CHR(10)+' <PARAM NAME="colorscheme" VALUE="0">'+CHR(13)+ ;
CHR(10)+' <PARAM NAME="BackStyle" VALUE="1">'+CHR(13)+ ;
CHR(10)+' <PARAM NAME="BackColor" VALUE="#ffffCC">'+ ;
CHR(13)+CHR(10)+ ;
' <PARAM NAME="ForeColor" VALUE="#0000ff">'+CHR(13)+ ;
CHR(10)+' <PARAM NAME="Scale" VALUE="100">'+CHR(13)+ ;
CHR(10)+CHR(13)+CHR(10)
lcOutput = lcOutput+IIF(lcType=="1", ;
' <PARAM NAME="columns" VALUE="'+LTRIM(STR(lnReccount))+ ;
'">', ' <PARAM NAME="rows" VALUE="'+ ;
LTRIM(STR(lnReccount))+'">')+CHR(13)+CHR(10)+ ;
' <PARAM NAME="ChartType" VALUE="'+lcType+'">'+CHR(13)+CHR(10)
lcOutput = lcOutput+' <PARAM NAME="'+IIF(lcType=="1", ;
"ColumnNames", "RowNames")+'" VALUE="'
SCAN
lcOutput = lcOutput+CHRTRAN(ALLTRIM(EVALUATE(laFields(1,1))), ;
" ", "_")+" "
ENDSCAN
lcOutput = TRIM(lcOutput)+'">'+CHR(13)+CHR(10)
IF .NOT. EMPTY(lcLabels)
lcOutput = lcOutput+ ;
' <PARAM NAME="ColumnNames" VALUE="'+ ;
lcLabels+'">'+CHR(13)+CHR(10)+ ;
' <PARAM NAME="DisplayLegend" VALUE="1'+'">'+ ;
CHR(13)+CHR(10)
ENDIF
lnX = 0
IF lcType=="1"
SCAN
lcOutput = lcOutput+' <PARAM NAME="DATA[0]['+ ;
LTRIM(STR(lnX))+']" VALUE="'+ ;
LTRIM(STR(EVALUATE(laFields(2,1))))+'">'+ ;
CHR(13)+CHR(10)
lnX = lnX+1
ENDSCAN
ELSE
SCAN
FOR y = 1 TO lnDatacols
lcOutput = lcOutput+' <PARAM NAME="DATA['+ ;
LTRIM(STR(lnX))+']['+LTRIM(STR(y-1))+ ;
']" VALUE="'+ ;
LTRIM(STR(EVALUATE(laFields(y+1,1))))+ ;
'">'+CHR(13)+CHR(10)
ENDFOR
lnX = lnX+1
ENDSCAN
ENDIF
lcOutput = lcOutput+ ;
'This graph can be viewed with ActiveX enabled browsers only...<p>'+ ;
'<A HREF="http://www.microsoft.com/ie/">Download Internet Explorer now!</a>'+ ;
CHR(13)+CHR(10)+'</object>'+CHR(13)+CHR(10)
RETURN thIs.wrIte(@lcOutput,llNooutput)
ENDFUNC
*
FUNCTION ContentType_Assign
LPARAMETER lcValue
thIs.coNtenttype = lcValue
thIs.coNtenttypeheader(lcValue)
RETURN lcValue
ENDFUNC
*
PROCEDURE BinaryWrite
LPARAMETER lcText
thIs.wrIte(lcText)
ENDPROC
*
ENDDEFINE
*