home *** CD-ROM | disk | FTP | other *** search
/ Freesoft 1997 March / Freesoft_1997-03_cd.bin / nerecenz / internet / webexplr / VFPSCRPT.PRG < prev    next >
Text File  |  1997-03-09  |  16KB  |  567 lines

  1. * VFPScrpt.prg
  2. *
  3. *-- ASCII codes
  4. #DEFINE    EOB        CHR(0)
  5. #DEFINE    MARKER    CHR(1)
  6. #DEFINE    TAB        CHR(9)
  7. #DEFINE    LF        CHR(10)
  8. #DEFINE    CR        CHR(13)
  9. #DEFINE CR_LF    CR+LF
  10.  
  11. *-- Strings
  12. #DEFINE    VFPS_SCRIPT_START    '<SCRIPT LANGUAGE="VFPScript">'
  13. #DEFINE    VFPS_SCRIPT_START2    '<SCRIPT LANGUAGE="VFPS">'
  14. #DEFINE    VBS_SCRIPT_START    '<SCRIPT LANGUAGE="VBScript">'
  15. #DEFINE SCRIPT_END            "</SCRIPT>"
  16. #DEFINE    VFPS_FUNCTION_START    "FUNC"
  17. #DEFINE    VFPS_FUNCTION_END    "ENDF"
  18. #DEFINE    VBS_FUNCTION_START    "Sub"
  19. #DEFINE    VBS_FUNCTION_END    "End Sub"
  20.  
  21.  
  22.  
  23. LPARAMETERS toWebBrowser
  24.  
  25. RETURN HTMLX(toWebBrowser)
  26.  
  27.  
  28.  
  29. FUNCTION HTMLX(toWebBrowser)
  30. PRIVATE pcSourceText,pcNewSourceText,pcAppendSourceText
  31. LOCAL lcVFPScript,lcFilePath,lcFileName,lnLastSelect
  32. LOCAL lcMainScriptCode,lcScriptCode,lcScript
  33. LOCAL lcMemLine,lnCount,lnAtPos,lnAtPos1,lnAtPos2
  34.  
  35. IF TYPE("toWebBrowser")#"O" OR ISNULL(toWebBrowser)
  36.     RETURN .F.
  37. ENDIF
  38. toWebBrowser.nScriptCount=0
  39. DIMENSION toWebBrowser.aScripts[1,2]
  40. toWebBrowser.aScripts=""
  41. lnLastSelect=SELECT()
  42. CREATE CURSOR tempHTMLfile (Source M)
  43. APPEND BLANK
  44. APPEND MEMO Source FROM (toWebBrowser.cSourceFileName) OVERWRITE
  45. pcSourceText=ALLTRIM(Source)
  46. USE
  47. IF NOT LEFT(pcSourceText,1)=="CR"
  48.     pcSourceText=CR+pcSourceText
  49. ENDIF
  50. IF NOT RIGHT(pcSourceText,1)=="CR"
  51.     pcSourceText=pcSourceText+CR
  52. ENDIF
  53. pcNewSourceText=StrTranC(pcSourceText,VFPS_SCRIPT_START2,VFPS_SCRIPT_START)
  54. pcAppendSourceText=""
  55. DO WHILE .T.
  56.     IF toWebBrowser.lRelease
  57.         EXIT
  58.     ENDIF
  59.     lcVFPScript=""
  60.     lnAtPos1=ATC(VFPS_SCRIPT_START,pcNewSourceText)
  61.     IF lnAtPos1=0
  62.         pcNewSourceText=EvlTxt(pcNewSourceText)
  63.         IF NOT EMPTY(pcAppendSourceText)
  64.             IF toWebBrowser.lDebug
  65.                 ViewString(toWebBrowser,pcAppendSourceText)
  66.             ENDIF
  67.             pcNewSourceText=pcNewSourceText+pcAppendSourceText
  68.             pcAppendSourceText=""
  69.             LOOP
  70.         ENDIF
  71.         EXIT
  72.     ENDIF
  73.     lnAtPos2=ATC(SCRIPT_END,SUBSTR(pcNewSourceText,lnAtPos1))
  74.     IF lnAtPos2=0
  75.         EXIT
  76.     ENDIF
  77.     lcVFPScript=EvlTxt(SUBSTR(pcNewSourceText,lnAtPos1+LEN(VFPS_SCRIPT_START), ;
  78.             lnAtPos2-LEN(VFPS_SCRIPT_START)-1))
  79.     IF NOT EMPTY(pcAppendSourceText)
  80.         IF toWebBrowser.lDebug
  81.             ViewString(toWebBrowser,pcAppendSourceText)
  82.         ENDIF
  83.         lcVFPScript=lcVFPScript+pcAppendSourceText
  84.         pcAppendSourceText=""
  85.     ENDIF
  86.     lcVFPScript=ALLTRIM(STRTRAN(STRTRAN(STRTRAN(lcVFPScript,CR_LF,CR),LF,""),TAB," "))
  87.     pcNewSourceText=LEFT(pcNewSourceText,lnAtPos1-1)+ ;
  88.             SUBSTR(pcNewSourceText,lnAtPos1+lnAtPos2+LEN(SCRIPT_END))
  89.     DO WHILE LEFT(lcVFPScript,1)==CR
  90.         lcVFPScript=ALLTRIM(SUBSTR(lcVFPScript,2))
  91.     ENDDO
  92.     DO WHILE RIGHT(lcVFPScript,1)==CR
  93.         lcVFPScript=ALLTRIM(LEFT(lcVFPScript,LEN(lcVFPScript)-1))
  94.     ENDDO
  95.     IF EMPTY(lcVFPScript)
  96.         LOOP
  97.     ENDIF
  98.     lcMainScriptCode=""
  99.     lcScriptCode=""
  100.     lcScript=""
  101.     _mline=0
  102.     FOR lnCount = 1 TO MEMLINES(lcVFPScript)
  103.         lcMemLine=ALLTRIM(MLINE(lcVFPScript,1,_mline))
  104.         IF EMPTY(lcMemLine) OR LEFT(lcMemLine,1)="*" OR LEFT(lcMemLine,2)=("&" +"&") OR ;
  105.                 LEFT(lcMemLine,1)="#" OR LEFT(lcMemLine,4)="<!--" OR LEFT(lcMemLine,3)="-->"
  106.             LOOP
  107.         ENDIF
  108.         IF UPPER(LEFT(lcMemLine,4))==VFPS_FUNCTION_START
  109.             IF EMPTY(lcMainScriptCode)
  110.                 lcMainScriptCode=lcScriptCode
  111.             ENDIF
  112.             lcScriptCode=""
  113.             lnAtPos=AT(" ",lcMemLine)
  114.             lcScript=LOWER(IIF(lnAtPos=0,SYS(3),ALLTRIM(SUBSTR(lcMemLine,lnAtPos+1))))
  115.             LOOP
  116.         ENDIF
  117.         IF UPPER(LEFT(lcMemLine,4))==VFPS_FUNCTION_END
  118.             WITH toWebBrowser
  119.                 .nScriptCount=.nScriptCount+1
  120.                 DIMENSION .aScripts[.nScriptCount,2]
  121.                 .aScripts[.nScriptCount,1]=lcScript
  122.                 .aScripts[.nScriptCount,2]=lcScriptCode
  123.             ENDWITH
  124.             lcScript=""
  125.             lcScriptCode=""
  126.             LOOP
  127.         ENDIF
  128.         lcScriptCode=lcScriptCode+lcMemLine+CR
  129.     ENDFOR
  130.     IF EMPTY(lcMainScriptCode) AND EMPTY(lcScript)
  131.         lcMainScriptCode=lcScriptCode
  132.     ENDIF
  133.     IF NOT EMPTY(lcMainScriptCode)
  134.         toWebBrowser.RunCode(lcMainScriptCode)
  135.     ENDIF
  136.     lcVFPScript=""
  137. ENDDO
  138. pcNewSourceText=EvlTxt(pcNewSourceText)
  139. IF NOT EMPTY(pcAppendSourceText)
  140.     IF toWebBrowser.lDebug
  141.         ViewString(toWebBrowser,pcAppendSourceText)
  142.     ENDIF
  143.     pcNewSourceText=pcNewSourceText+pcAppendSourceText
  144.     pcAppendSourceText=""
  145. ENDIF
  146. IF toWebBrowser.lRelease OR pcNewSourceText==pcSourceText
  147.     SELECT (lnLastSelect)
  148.     RETURN .F.
  149. ENDIF
  150. CREATE CURSOR ("_Temp"+SYS(3)) (Text M)
  151. INSERT BLANK
  152. REPLACE Text WITH pcNewSourceText
  153. IF NOT toWebBrowser.lRefreshMode
  154.     toWebBrowser.EraseTempFile
  155.     lcFilePath=LOWER(toWebBrowser.TrimFile(toWebBrowser.cSourceFileName))
  156.     lnAtPos1=RAT(":",lcFilePath)
  157.     IF lnAtPos1>2
  158.         lcFilePath=ALLTRIM(SUBSTR(lcFilePath,lnAtPos1-1))
  159.     ENDIF
  160.     lcFileName=lcFilePath+"_temp"+SYS(3)+".htm"
  161.     toWebBrowser.cTempFileName=lcFileName
  162. ENDIF
  163. COPY MEMO Text TO (toWebBrowser.cTempFileName)
  164. USE
  165. SELECT (lnLastSelect)
  166. RETURN
  167.  
  168.  
  169.  
  170. FUNCTION ViewString(toWebBrowser,tcString)
  171. LOCAL lcTempFileName
  172.  
  173. lcTempFileName=SYS(2023)+"\"+SYS(3)+".prg"
  174. IF EMPTY(tcString) OR NOT toWebBrowser.StringToFile(tcString,lcTempFileName)
  175.     RETURN .F.
  176. ENDIF
  177. MODIFY COMM (lcTempFileName) NOMODIFY
  178. ERASE (lcTempFileName)
  179. ENDFUNC
  180.  
  181.  
  182.  
  183. FUNCTION strtranc(expc1,expc2,expc3,expn1,expn2)
  184. LOCAL expr,at_pos,at_pos2,i,j
  185.  
  186. IF EMPTY(m.expc1).OR.EMPTY(m.expc2)
  187.   RETURN m.expc1
  188. ENDIF
  189. m.expr=m.expc1
  190. IF TYPE("m.expn1")#"N"
  191.   m.expn1=1
  192. ENDIF
  193. IF TYPE("m.expn2")#"N"
  194.   m.expn2=LEN(m.expc1)
  195. ENDIF
  196. IF m.expn1<1.OR.m.expn2<1
  197.   RETURN m.expc1
  198. ENDIF
  199. m.i=0
  200. m.j=0
  201. m.at_pos2=1
  202. DO WHILE .T.
  203.   m.at_pos=ATC(m.expc2,SUBSTR(m.expr,m.at_pos2))
  204.   IF m.at_pos=0
  205.     EXIT
  206.   ENDIF
  207.   m.i=m.i+1
  208.   IF m.i<m.expn1
  209.     m.at_pos2=m.at_pos+m.at_pos2+LEN(m.expc2)-1
  210.     LOOP
  211.   ENDIF
  212.   m.expr=LEFT(m.expr,m.at_pos+m.at_pos2-2)+m.expc3+;
  213.          SUBSTR(m.expr,m.at_pos+m.at_pos2+LEN(m.expc2)-1)
  214.   m.j=m.j+1
  215.   IF m.j>=m.expn2
  216.     EXIT
  217.   ENDIF
  218.   m.at_pos2=m.at_pos+m.at_pos2+LEN(m.expc3)-1
  219.   IF m.at_pos2>LEN(m.expr)
  220.     EXIT
  221.   ENDIF
  222. ENDDO
  223. RETURN m.expr
  224.  
  225. * END strtranc
  226.  
  227.  
  228.  
  229. FUNCTION evltxt(old_text)
  230. LOCAL new_text,eval_str,eval_str1,eval_str2,var_type
  231. LOCAL at_pos,at_pos2,at_pos3,at_pos4,at_pos5,old_str,new_str
  232. LOCAL i,j,at_line,evlmode,mthd_str,sellast
  233. LOCAL lcFunction,lcType,lcControl,lcDataSource,lcDataSource2,lcSize,lcEvent
  234. LOCAL lcCommand,lcAlias,lnAtPos
  235.  
  236. IF oTHIS.lRelease
  237.     RETURN ""
  238. ENDIF
  239. m.new_text=m.old_text
  240. lcControl=""
  241. m.at_pos3=1
  242. DO WHILE .T.
  243.   m.at_pos=AT("{{",SUBSTR(m.old_text,m.at_pos3))
  244.   IF m.at_pos=0
  245.     EXIT
  246.   ENDIF
  247.   m.at_pos2=AT("}}",SUBSTR(m.old_text,m.at_pos+m.at_pos3-1))
  248.   IF m.at_pos2=0
  249.     EXIT
  250.   ENDIF
  251.   m.at_pos4=AT("{{",SUBSTR(m.old_text,m.at_pos+m.at_pos3+1))
  252.   IF m.at_pos4>0.AND.m.at_pos4<m.at_pos2
  253.     m.at_pos4=OCCURS("{{",SUBSTR(m.old_text,m.at_pos+m.at_pos3-1,;
  254.               m.at_pos2-m.at_pos4))
  255.     m.at_pos4=AT("{{",SUBSTR(m.old_text,m.at_pos+m.at_pos3-1),m.at_pos4)
  256.     m.old_str=SUBSTR(m.old_text,m.at_pos+m.at_pos3-1,m.at_pos2+1)
  257.     m.eval_str=SUBSTR(m.old_str,3,LEN(m.old_str)-2)
  258.     m.old_str=evltxt(m.eval_str)
  259.     m.old_text=STRTRAN(m.old_text,m.eval_str,m.old_str)
  260.     m.new_text=STRTRAN(m.new_text,m.eval_str,m.old_str)
  261.     LOOP
  262.   ENDIF
  263.   m.old_str=SUBSTR(m.old_text,m.at_pos+m.at_pos3-1,m.at_pos2+1)
  264.   m.eval_str=ALLTRIM(SUBSTR(m.old_str,3,LEN(m.old_str)-4))
  265.   m.evlmode=.F.
  266.   DO CASE
  267.     CASE EMPTY(m.eval_str)
  268.       m.eval_str=""
  269.     CASE LEFT(m.eval_str,2)=="&."
  270.       m.eval_str=SUBSTR(m.eval_str,3)
  271.       &eval_str &&;
  272.       Error occured during macro substitution of {{&. <expC> }}.
  273.       m.eval_str=""
  274.     CASE LEFT(m.eval_str,1)=="<"
  275.       m.eval_str=insert(SUBSTR(m.eval_str,2)) &&;
  276.       Error occured during evaluation of {{< <file> }}.
  277.     CASE LEFT(m.eval_str,1)==">"
  278.       m.eval_str=SUBSTR(m.eval_str,2)
  279.       oTHIS.RunScript(m.eval_str) &&;
  280.       Error occured during RunScript of {{> <expC> }}.
  281.       m.eval_str=IIF(TYPE("oTHIS.uValue")=="C",oTHIS.uValue,"")
  282.     CASE LEFT(m.eval_str,1)=="@"
  283.       m.eval_str=SUBSTR(m.eval_str,2)
  284.       lnAtPos=AT(",",m.eval_str)
  285.       IF lnAtPos=0
  286.           RETURN .F.
  287.       ENDIF
  288.       lcControl=ALLTRIM(SUBSTR(m.eval_str,lnAtPos+1))
  289.       lcType=ALLTRIM(LEFT(m.eval_str,lnAtPos-1))
  290.       lcDataSource=""
  291.       lcSize=""
  292.       lcEvent=""
  293.       lnAtPos=AT(",",lcControl)
  294.       IF lnAtPos>0
  295.         lcDataSource=ALLTRIM(SUBSTR(lcControl,lnAtPos+1))
  296.         lcControl=ALLTRIM(LEFT(lcControl,lnAtPos-1))
  297.         lnAtPos=AT(",",lcDataSource)
  298.         IF lnAtPos>0
  299.           lcSize=ALLTRIM(SUBSTR(lcDataSource,lnAtPos+1))
  300.           lcDataSource=ALLTRIM(LEFT(lcDataSource,lnAtPos-1))
  301.           lnAtPos=AT(",",lcSize)
  302.           IF lnAtPos>0
  303.             lcEvent=ALLTRIM(SUBSTR(lcSize,lnAtPos+1))
  304.             lcSize=ALLTRIM(LEFT(lcSize,lnAtPos-1))
  305.            ENDIF
  306.         ENDIF
  307.       ENDIF
  308.       IF EMPTY(lcType)
  309.           lcType="TEXT"
  310.       ENDIF
  311.       IF EMPTY(lcControl) OR EMPTY(lcDataSource)
  312.           RETURN ""
  313.       ENDIF
  314.       m.eval_str=lcDataSource
  315.       m.eval_str=EVALUATE(m.eval_str) &&;
  316.       Error occured during evaluation of {{ <expC> }}.
  317.       lcCommand=[INPUT TYPE="]+lcType+[" NAME="]+lcControl+[" ]
  318.       m.var_type=TYPE("m.eval_str")
  319.       IF EMPTY(lcEvent)
  320.         lcEvent=IIF(m.var_type=="L","OnClick","OnChange")
  321.       ENDIF
  322.       lcFunction=lcControl+"_"+lcEvent
  323.       pcAppendSourceText=pcAppendSourceText+CR+VBS_SCRIPT_START+CR+ ;
  324.         VBS_FUNCTION_START+" "+lcFunction+CR
  325.       DO CASE
  326.         CASE m.var_type=="C" OR m.var_type=="M"
  327.           m.var_type=ALLTRIM(m.var_type)
  328.           pcAppendSourceText=pcAppendSourceText+[Navigate "vfps://RunScript?]+ ;
  329.             lcFunction+[," + ]+lcControl+[.Value]+CR
  330.           IF EMPTY(lcSize)
  331.             lcSize=ALLTRIM(STR(LEN(m.eval_str)))
  332.           ENDIF
  333.         CASE m.var_type=="L"
  334.           pcAppendSourceText=pcAppendSourceText+[Dim Result]+CR+ ;
  335.             [If ]+lcControl+[.Checked Then]+CR+ ;
  336.             [  Result = "(.T.)"]+CR+ ;
  337.             [Else]+CR+ ;
  338.             [  Result = "(.F.)"]+CR+ ;
  339.             [End If]+CR+ ;
  340.             [Navigate "vfps://RunScript?]+lcFunction+[," + Result]+CR
  341.         CASE m.var_type=="N"
  342.           pcAppendSourceText=pcAppendSourceText+[Navigate "vfps://RunScript?]+ ;
  343.             lcFunction+[,0" + ]+lcControl+[.Value]+CR
  344.           IF EMPTY(lcSize)
  345.             lcSize=ALLTRIM(STR(LEN(ALLTRIM(STR(m.eval_str)))))
  346.           ENDIF
  347.         CASE m.var_type=="D"
  348.           pcAppendSourceText=pcAppendSourceText+[Navigate "vfps://RunScript?]+ ;
  349.             lcFunction+[," + ]+lcControl+[.Value]+CR
  350.           IF EMPTY(lcSize)
  351.             lcSize=ALLTRIM(STR(LEN(DTOC(m.eval_str))))
  352.           ENDIF
  353.         CASE m.var_type=="T"
  354.           pcAppendSourceText=pcAppendSourceText+[Navigate "vfps://RunScript?]+ ;
  355.             lcFunction+[," + ]+lcControl+[.Value]+CR
  356.           IF EMPTY(lcSize)
  357.             lcSize=ALLTRIM(STR(LEN(TTOC(m.eval_str))))
  358.           ENDIF
  359.         OTHERWISE
  360.           pcAppendSourceText=pcAppendSourceText+[Navigate "vfps://RunScript?]+ ;
  361.             lcFunction+[," + ]+lcControl+[.Value]+CR
  362.       ENDCASE
  363.       pcAppendSourceText=pcAppendSourceText+VBS_FUNCTION_END+CR+ ;
  364.         SCRIPT_END+CR+CR+VFPS_SCRIPT_START+CR+ ;
  365.         VFPS_FUNCTION_START+" "+lcFunction+CR
  366.       DO CASE
  367.         CASE m.var_type=="C" OR m.var_type=="L"
  368.           lcDataSource2="oTHIS.aParameters[2]"
  369.         CASE m.var_type=="N"
  370.           lcDataSource2="VAL(oTHIS.aParameters[2])"
  371.         CASE m.var_type=="D"
  372.           lcDataSource2="CTOD(oTHIS.aParameters[2])"
  373.         CASE m.var_type=="T"
  374.           lcDataSource2="CTOT(oTHIS.aParameters[2])"
  375.         OTHERWISE
  376.           lcDataSource2="oTHIS.aParameters[2]"
  377.       ENDCASE
  378.       lnAtPos=AT(".",lcDataSource)
  379.       lcAlias=IIF(lnAtPos=0,"",ALLTRIM(LEFT(lcDataSource,lnAtPos-1)))
  380.       IF USED(lcAlias)
  381.         pcAppendSourceText=pcAppendSourceText+ ;
  382.           [pnLastSelectTmp0=SELECT()]+CR+ ;
  383.           [SELECT ]+lcAlias+CR+ ;
  384.           [REPLACE ]+lcDataSource+[ WITH ]+lcDataSource2+CR+ ;
  385.           [SELECT (pnLastSelectTmp0)]+CR
  386.       ELSE
  387.         pcAppendSourceText=pcAppendSourceText+lcDataSource+[=]+lcDataSource2+CR
  388.       ENDIF
  389.       pcAppendSourceText=pcAppendSourceText+VFPS_FUNCTION_END+CR+ ;
  390.           SCRIPT_END+CR
  391.       DO CASE
  392.         CASE m.var_type=="C"
  393.           m.eval_str=[VALUE="]+m.eval_str+["]
  394.         CASE m.var_type=="N"
  395.           m.eval_str=ALLTRIM(STR(m.eval_str,24,12))
  396.           DO WHILE RIGHT(m.eval_str,1)=="0"
  397.             m.eval_str=LEFT(m.eval_str,LEN(m.eval_str)-1)
  398.             IF RIGHT(m.eval_str,1)=="."
  399.                m.eval_str=LEFT(m.eval_str,LEN(m.eval_str)-1)
  400.               EXIT
  401.             ENDIF
  402.           ENDDO
  403.           m.eval_str=[VALUE=]+m.eval_str
  404.         CASE m.var_type=="D"
  405.           m.eval_str=[VALUE="]+DTOC(m.eval_str)+["]
  406.         CASE m.var_type=="T"
  407.           m.eval_str=[VALUE="]+TTOC(m.eval_str)+["]
  408.         CASE m.var_type=="L"
  409.           m.eval_str=IIF(m.eval_str,"CHECKED","")
  410.         OTHERWISE
  411.           m.eval_str=""
  412.       ENDCASE
  413.       IF NOT EMPTY(lcSize)
  414.         m.eval_str=m.eval_str+[ SIZE=]+lcSize
  415.       ENDIF
  416.       m.eval_str=lcCommand+m.eval_str
  417.     OTHERWISE
  418.       m.eval_str=EVALUATE(m.eval_str) &&;
  419.       Error occured during evaluation of {{ <expC> }}.
  420.   ENDCASE
  421.   m.var_type=TYPE("m.eval_str")
  422.   DO CASE
  423.     CASE m.var_type=="C"
  424.       m.new_str=m.eval_str
  425.     CASE m.var_type=="N"
  426.       m.new_str=ALLTRIM(STR(m.eval_str,24,12))
  427.       DO WHILE RIGHT(m.new_str,1)=="0"
  428.         m.new_str=LEFT(m.new_str,LEN(m.new_str)-1)
  429.         IF RIGHT(m.new_str,1)=="."
  430.           m.new_str=LEFT(m.new_str,LEN(m.new_str)-1)
  431.           EXIT
  432.         ENDIF
  433.       ENDDO
  434.     CASE m.var_type=="D"
  435.       m.new_str=DTOC(m.eval_str)
  436.     CASE m.var_type=="T"
  437.       m.new_str=TTOC(m.eval_str)
  438.     CASE m.var_type=="L"
  439.       m.new_str=IIF(m.eval_str,".T.",".F.")
  440.     OTHERWISE
  441.       m.new_str=m.old_str
  442.   ENDCASE
  443.   m.new_text=STRTRAN(m.new_text,m.old_str,m.new_str)
  444.   m.at_pos2=m.at_pos+LEN(m.new_str)
  445.   IF m.at_pos2<=0
  446.     EXIT
  447.   ENDIF
  448.   m.at_pos3=m.at_pos3+m.at_pos2
  449. ENDDO
  450. m.j=0
  451. DO WHILE "{{"$m.new_text.AND."}}"$m.new_text
  452.   m.i=LEN(m.new_text)
  453.   m.new_text=evltxt(m.new_text)
  454.   IF m.i=LEN(m.new_text)
  455.     IF m.j>=2
  456.       EXIT
  457.     ENDIF
  458.     m.j=m.j+1
  459.   ENDIF
  460. ENDDO
  461. RETURN m.new_text
  462.  
  463. * END evltxt
  464.  
  465.  
  466.  
  467. FUNCTION evlstr(eval_str)
  468.  
  469. IF EMPTY(m.eval_str)
  470.   RETURN m.eval_str
  471. ENDIF
  472. RETURN EVALUATE(m.eval_str)
  473.  
  474. * END evlstr
  475.  
  476.  
  477.  
  478. FUNCTION evlmsg(old_str)
  479. LOCAL new_text,eval_str,var_type
  480.  
  481. IF TYPE("m.old_str")#"C"
  482.   RETURN ""
  483. ENDIF
  484. IF .NOT.LEFT(m.old_str,1)=="@"
  485.   RETURN m.old_str
  486. ENDIF
  487. m.eval_str=EVALUATE(SUBSTR(MLINE(m.old_str,1),2))
  488. m.var_type=TYPE("m.eval_str")
  489. DO CASE
  490.   CASE m.var_type=="C"
  491.     m.new_str=m.eval_str
  492.   CASE m.var_type=="N"
  493.     m.new_str=ALLTRIM(STR(m.eval_str,24,12))
  494.     DO WHILE RIGHT(m.new_str,1)=="0"
  495.       m.new_str=LEFT(m.new_str,LEN(m.new_str)-1)
  496.       IF RIGHT(m.new_str,1)=="."
  497.         m.new_str=LEFT(m.new_str,LEN(m.new_str)-1)
  498.         EXIT
  499.       ENDIF
  500.     ENDDO
  501.   CASE m.var_type=="D"
  502.     m.new_str=DTOC(m.eval_str)
  503.   CASE m.var_type=="L"
  504.     m.new_str=IIF(m.eval_str,".T.",".F.")
  505.   OTHERWISE
  506.     m.new_str=m.old_str
  507. ENDCASE
  508. RETURN m.new_str
  509.  
  510. * END evlmsg
  511.  
  512.  
  513.  
  514. FUNCTION strexpr(eval_str)
  515. LOCAL new_text,var_type
  516.  
  517. IF PARAMETERS()=0
  518.   RETURN ""
  519. ENDIF
  520. m.var_type=TYPE("m.eval_str")
  521. DO CASE
  522.   CASE m.var_type=="C"
  523.     m.new_str=m.eval_str
  524.   CASE m.var_type=="N"
  525.     m.new_str=ALLTRIM(STR(m.eval_str,24,12))
  526.     DO WHILE RIGHT(m.new_str,1)=="0"
  527.       m.new_str=LEFT(m.new_str,LEN(m.new_str)-1)
  528.       IF RIGHT(m.new_str,1)=="."
  529.         m.new_str=LEFT(m.new_str,LEN(m.new_str)-1)
  530.         EXIT
  531.       ENDIF
  532.     ENDDO
  533.   CASE m.var_type=="D"
  534.     m.new_str=DTOC(m.eval_str)
  535.   CASE m.var_type=="L"
  536.     m.new_str=IIF(m.eval_str,".T.",".F.")
  537. ENDCASE
  538. RETURN m.new_str
  539.  
  540. * END strexpr
  541.  
  542.  
  543.  
  544. FUNCTION insert(filename)
  545. LOCAL lstselect,filestring,tempalias
  546.  
  547. IF .NOT.FILE(m.filename)
  548.   RETURN ""
  549. ENDIF
  550. m.lstselect=SELECT()
  551. m.tempalias="_"+SYS(3)
  552. IF USED(m.tempalias)
  553.   SELECT (m.tempalias)
  554.   LOCATE
  555. ELSE
  556.   CREATE CURSOR (m.tempalias) (FILEINFO M)
  557.   SELECT (m.tempalias)
  558.   INSERT BLANK
  559. ENDIF
  560. APPEND MEMO FILEINFO FROM (m.filename) OVERWRITE
  561. filestring=FILEINFO
  562. USE IN (m.tempalias)
  563. SELECT (m.lstselect)
  564. RETURN filestring
  565.  
  566. * END insert
  567.