home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 8 / CDASC08.ISO / VRAC / DBTALK.ZIP / DBTALK / LIB / CHART.PRG < prev    next >
Encoding:
Text File  |  1993-06-02  |  15.4 KB  |  531 lines

  1. CLASS CHT
  2.  
  3. FUNCTION BAR2D
  4.     PARAMETER cPicFile
  5.     LOCAL aChart:=self:set(), pic:=iif(valtype(cPicFile)='C',.T.,.F.)
  6.     LOCAL aScrn:=aChart[1], aValues:= EVAL(aChart[2]), aXlabels:=aChart[3], cTitle:=aChart[4]
  7.     LOCAL nXstart:=aScrn[2], nYstart:=aScrn[3], nWidth:=aScrn[6], nHeight:=aScrn[7], nFcolor:=aScrn[9], nBcolor:=aScrn[8]
  8.     LOCAL nPHandle, x := 0, y := 0, i := 0, nBarwidth := 0, j
  9.     LOCAL nMaxbar := 0, nMinbar := 0, ht_scale := 0
  10.     LOCAL xaxis_st, yaxis_st, xaxis_en, yaxis_en
  11.     LOCAL xpos := 0, nOldtfcolr := 0, nOldtbcolr := 0
  12.     LOCAL nYval := 0, cYtext := ""
  13.  
  14.     xaxis_st := nXstart+32
  15.     yaxis_st := nYstart+nHeight-32
  16.     xaxis_en := nXstart+nWidth-32
  17.     yaxis_en := nYstart+32
  18.  
  19.     nOldtfcolr = VSTXTCOLR(15)
  20.     nOldtbcolr = VSTXTBCOLR(0)
  21.  
  22.     VFRECT(nXstart, nYstart, nWidth, nHeight, nBcolor)   
  23.  
  24.     IF pic
  25.        nPHandle = FCREATE(cPicFile)
  26.        FWRITE (nPHandle, chr(1)+chr(0)+chr(0)+chr(0)+chr(1)+;
  27.                    chr(0)+chr(8)+chr(0)+chr(68)+chr(0)+;
  28.                    chr(0)+chr(0)+chr(0)+chr(12)+chr(127)+;
  29.                    chr(9)+chr(6)+chr(167)+chr(1)+chr(176))
  30.        self:Send('AddRect', nPHandle, nXstart, nYstart, nWidth, nHeight)
  31.     ENDIF
  32.  
  33.     VSFRAME(nXstart, nYstart, nWidth, nHeight)          
  34.     VSFRAME(nXstart+1, nYstart+1, nWidth-2, nHeight-2)  
  35.  
  36.     i = 1 
  37.  
  38.     DO WHILE ! i > LEN(aValues)
  39.        j = 1
  40.  
  41.        DO WHILE ! j > LEN(aValues[i])
  42.  
  43.           IF nMaxbar < aValues[i,j]
  44.              nMaxbar = aValues[i,j]
  45.           ENDIF
  46.           j = j + 1
  47.        ENDDO
  48.           
  49.        i = i + 1
  50.     ENDDO
  51.  
  52.     i = 1 
  53.  
  54.     DO WHILE ! i > LEN(aValues)
  55.        j = 1
  56.  
  57.        DO WHILE ! j > LEN(aValues[i])
  58.  
  59.           IF nMinbar > aValues[i,j]
  60.              nMinbar = aValues[i,j]
  61.           ENDIF
  62.           j = j + 1
  63.        ENDDO
  64.           
  65.        i = i + 1
  66.     ENDDO
  67.  
  68.     nBarwidth = ROUND((nWidth-64)/LEN(aValues[1]),0)-2
  69.     ht_scale = ABS((nHeight-64)/(nMaxbar-nMinbar))
  70.  
  71.  
  72.     VLINE(xaxis_st, yaxis_st, xaxis_st, yaxis_en, 15)  
  73.     VLINE(xaxis_st, yaxis_st, xaxis_en, yaxis_st, 15)  
  74.  
  75.     IF pic
  76.        self:Send('AddLine', nPHandle, xaxis_st, yaxis_st, xaxis_st, yaxis_en)
  77.        self:Send('AddLine', nPHandle, xaxis_st, yaxis_st, xaxis_en, yaxis_st)
  78.     ENDIF
  79.  
  80.     i = 1 
  81.  
  82.     DO WHILE ! i > LEN(aValues)
  83.        j = 1
  84.        xpos = xaxis_st+1
  85.  
  86.        DO WHILE ! j > LEN(aValues[i])
  87.           self:Send('B2D', xpos, yaxis_st-1, nBarwidth, ht_scale*aValues[i,j]*-1, nFcolor+i-1, pic, nPHandle)
  88.           xpos = xpos + nBarwidth + 2
  89.           j = j + 1
  90.        ENDDO
  91.    
  92.        i = i + 1
  93.     ENDDO
  94.    
  95.     xpos = xaxis_st+1
  96.     i = 1 
  97.  
  98.     DO WHILE ! i > LEN(aValues[1])
  99.        VSAYAT((xpos+1)+(LEN(TRIM(aXlabels[i]))*VTWIDTH()/2), nYstart+nHeight-VTHEIGHT()*1.5, aXlabels[i], nFcolor, nBcolor)
  100.        VRECT((xpos+1)+((nBarwidth+2)/2), nYstart+nHeight-32+3, 1, -6, nFcolor)
  101.  
  102.        IF pic
  103.           self:Send('AddText', nPHandle, (xpos+1)+(LEN(TRIM(aXlabels[i]))*VTWIDTH()/2), nYstart+nHeight-VTHEIGHT()*1.5, vtheight(), aXlabels[i])
  104.           self:Send('AddRect', nPHandle, (xpos+1)+((nBarwidth+2)/2), nYstart+nHeight-32+3, 1, -6)
  105.        ENDIF
  106.  
  107.        xpos = xpos + nBarwidth + 2
  108.        i = i + 1
  109.     ENDDO
  110.  
  111.     i = ROUND(nMaxbar*ht_scale,0)
  112.  
  113.     DO WHILE ! i < ROUND(nMinbar*ht_scale,0)
  114.        nYval  = ( i/((nMaxbar*ht_scale)-(nMinbar*ht_scale)) ) * nMaxbar
  115.  
  116.        IF nYval >= 1
  117.             cYtext = LTRIM(STR(ROUND(nYval,0)))
  118.        ELSE
  119.             cYtext = LTRIM(STR(ROUND(nYval, 1)))
  120.        ENDIF
  121.  
  122.        VSAYAT(nXstart+(VTWIDTH()/2), yaxis_st-i-(VTHEIGHT()/2), cYtext, nFcolor, nBcolor)
  123.        VRECT(nXstart+32-3, yaxis_st-i, 6, 1, nFColor)
  124.  
  125.        IF pic
  126.           self:Send('AddText', nPHandle, nXstart+(VTWIDTH()/2), yaxis_st-i-(VTHEIGHT()/2), vtheight(), cYtext)
  127.           self:Send('AddRect', nPHandle, nXstart+32-3, yaxis_st-i, 6, 1)
  128.        ENDIF
  129.  
  130.         i = i - 30
  131.     ENDDO
  132.  
  133.  
  134.     VSAYAT(nXstart+((nWidth-LEN(cTitle)*VTWIDTH())/2), nYstart+VTHEIGHT(), cTitle, nFcolor, nBcolor)
  135.     VSTXTCOLR(nOldtfcolr)
  136.     VSTXTBCOLR(nOldtbcolr)
  137.   
  138.     IF pic
  139.        self:Send('AddText', nPHandle, nXstart+((nWidth-LEN(cTitle)*VTWIDTH())/2), nYstart+VTHEIGHT(), vtheight(), cTitle)
  140.        FWRITE(nPHandle,chr(96))
  141.        FCLOSE (nPHandle)
  142.     ENDIF
  143.  
  144.     RETURN NIL
  145.  
  146.  
  147.  
  148. FUNCTION BAR3D
  149.     PARAMETER cPicFile
  150.     LOCAL aChart:=self:set(), pic:=iif(valtype(cPicFile)='C',.T.,.F.)
  151.     LOCAL aScrn:=aChart[1], aValues:= EVAL(aChart[2]), aXlabels:=aChart[3], cTitle:=aChart[4]
  152.     LOCAL nXstart:=aScrn[2], nYstart:=aScrn[3], nWidth:=aScrn[6], nHeight:=aScrn[7], nFcolor:=aScrn[9], nBcolor:=aScrn[8]
  153.     LOCAL nPHandle, x := 0, y := 0, i := 0, nBarwidth := 0, j
  154.     LOCAL nMaxbar := 0, nMinbar := 0, ht_scale := 0
  155.     LOCAL xaxis_st, yaxis_st, xaxis_en, yaxis_en
  156.     LOCAL xpos := 0, nOldtfcolr := 0, nOldtbcolr := 0
  157.     LOCAL nYval := 0, cYtext := ""
  158.  
  159.     xaxis_st := nXstart+32
  160.     yaxis_st := nYstart+nHeight-32
  161.     xaxis_en := nXstart+nWidth-32
  162.     yaxis_en := nYstart+32
  163.  
  164.     nOldtfcolr = VSTXTCOLR(15)
  165.     nOldtbcolr = VSTXTBCOLR(0)
  166.  
  167.     VFRECT(nXstart, nYstart, nWidth, nHeight, nBcolor)    
  168.  
  169.     IF pic
  170.        nPHandle = FCREATE(cPicFile)
  171.        FWRITE (nPHandle, chr(1)+chr(0)+chr(0)+chr(0)+chr(1)+;
  172.                    chr(0)+chr(8)+chr(0)+chr(68)+chr(0)+;
  173.                    chr(0)+chr(0)+chr(0)+chr(12)+chr(127)+;
  174.                    chr(9)+chr(6)+chr(167)+chr(1)+chr(176))
  175.        self:Send('AddRect', nPHandle, nXstart, nYstart, nWidth, nHeight)
  176.     ENDIF
  177.  
  178.     VSFRAME(nXstart, nYstart, nWidth, nHeight)          
  179.     VSFRAME(nXstart+1, nYstart+1, nWidth-2, nHeight-2)  
  180.  
  181.  
  182.     i = 1 
  183.  
  184.     DO WHILE ! i > LEN(aValues)
  185.        j = 1
  186.  
  187.        DO WHILE ! j > LEN(aValues[i])
  188.  
  189.           IF nMaxbar < aValues[i,j]
  190.              nMaxbar = aValues[i,j]
  191.           ENDIF
  192.           j = j + 1
  193.        ENDDO
  194.           
  195.        i = i + 1
  196.     ENDDO
  197.  
  198.     i = 1 
  199.  
  200.     DO WHILE ! i > LEN(aValues)
  201.        j = 1
  202.  
  203.        DO WHILE ! j > LEN(aValues[i])
  204.  
  205.           IF nMinbar > aValues[i,j]
  206.              nMinbar = aValues[i,j]
  207.           ENDIF
  208.           j = j + 1
  209.        ENDDO
  210.           
  211.        i = i + 1
  212.     ENDDO
  213.  
  214.     nBarwidth = ROUND((nWidth-64)/(LEN(aValues[1])*1.5),0)-2
  215.     ht_scale = ABS((nHeight-64)/(nMaxbar-nMinbar))
  216.  
  217.     VLINE(xaxis_st, yaxis_st, xaxis_st, yaxis_en, 15)  
  218.     VLINE(xaxis_st, yaxis_st, xaxis_en, yaxis_st, 15)  
  219.  
  220.     IF pic
  221.        self:Send('AddLine', nPHandle, xaxis_st, yaxis_st, xaxis_st, yaxis_en)
  222.        self:Send('AddLine', nPHandle, xaxis_st, yaxis_st, xaxis_en, yaxis_st)
  223.     ENDIF
  224.  
  225.     i = 1 
  226.  
  227.     DO WHILE ! i > LEN(aValues)
  228.        j = 1
  229.        xpos = xaxis_st+1
  230.  
  231.        DO WHILE ! j > LEN(aValues[i])
  232.           self:Send('B3D', xpos, yaxis_st-1, nBarwidth, ROUND(ht_scale*aValues[i,j],0) * -1, nFcolor+i-1, pic, nPHandle)
  233.           xpos = xpos + nBarwidth + ROUND(nBarwidth/2,0) + 2
  234.           j = j + 1
  235.        ENDDO
  236.  
  237.        i = i + 1
  238.     ENDDO
  239.  
  240.     xpos = xaxis_st+1
  241.     i = 1 
  242.  
  243.     DO WHILE ! i > LEN(aValues[1])
  244.        VSAYAT((xpos+1)+((nBarwidth-nBarwidth*0.5)-LEN(TRIM(aXlabels[i]))*VTWIDTH()/2), nYstart+nHeight-VTHEIGHT()*1.5, aXlabels[i], nFcolor, nBcolor)
  245.        VRECT((xpos+1)+((nBarwidth+2)/2), nYstart+nHeight-32+3, 1, -6, nFcolor)
  246.  
  247.        IF pic
  248.           self:Send('AddText', nPHandle, (xpos+1)+((nBarwidth-nBarwidth*0.5)-LEN(TRIM(aXlabels[i]))*VTWIDTH()/2), nYstart+nHeight-VTHEIGHT()*1.5, vtheight(), aXlabels[i])
  249.           self:Send('AddRect', nPHandle, (xpos+1)+((nBarwidth+2)/2), nYstart+nHeight-32+3, 1, -6)
  250.        ENDIF
  251.     
  252.        xpos = xpos + nBarwidth + ROUND(nBarwidth/2,0) + 2
  253.        i = i + 1
  254.     ENDDO
  255.  
  256.  
  257.     i = ROUND(nMaxbar*ht_scale,0)
  258.  
  259.     DO WHILE ! i < ROUND(nMinbar*ht_scale,0)
  260.         nYval  = ( i/((nMaxbar*ht_scale)-(nMinbar*ht_scale)) ) * nMaxbar
  261.  
  262.         IF nYval >= 1
  263.             cYtext = LTRIM(STR(ROUND(nYval,0)))
  264.         ELSE
  265.             cYtext = LTRIM(STR(ROUND(nYval, 1)))
  266.         ENDIF
  267.  
  268.         VSAYAT(nXstart+(VTWIDTH()/2), yaxis_st-i-(VTHEIGHT()/2), cYtext, nFcolor, nBcolor)
  269.         VRECT(nXstart+32-3, yaxis_st-i, 6, 1, nFcolor)
  270.  
  271.         IF pic
  272.            self:Send('AddText', nPHandle, nXstart+(VTWIDTH()/2), yaxis_st-i-(VTHEIGHT()/2), vtheight(), cYtext)
  273.            self:Send('AddRect', nPHandle, nXstart+32-3, yaxis_st-i, 6, 1)
  274.         ENDIF
  275.  
  276.         i = i - 30
  277.     ENDDO
  278.  
  279.  
  280.     VSAYAT(nXstart+((nWidth-LEN(cTitle)*VTWIDTH())/2), nYstart+VTHEIGHT(), cTitle, nFcolor, nBcolor)
  281.     VSTXTCOLR(nOldtfcolr)
  282.     VSTXTBCOLR(nOldtbcolr)
  283.  
  284.     IF pic
  285.        self:Send('AddText', nPHandle, nXstart+((nWidth-LEN(cTitle)*VTWIDTH())/2), nYstart+VTHEIGHT(), vtheight(), cTitle)
  286.        FWRITE(nPHandle,chr(96))
  287.        FCLOSE (nPHandle)
  288.     ENDIF
  289.  
  290.  
  291.     RETURN NIL
  292.  
  293.  
  294.  
  295.  
  296. FUNCTION LINEGRAPH
  297.     PARAMETER cPicFile
  298.     LOCAL aChart:=self:set(), pic:=iif(valtype(cPicFile)='C',.T.,.F.)
  299.     LOCAL aScrn:=aChart[1], aValues:= EVAL(aChart[2]), aXlabels:=aChart[3], cTitle:=aChart[4]
  300.     LOCAL nXstart:=aScrn[2], nYstart:=aScrn[3], nWidth:=aScrn[6], nHeight:=aScrn[7], nFcolor:=aScrn[9], nBcolor:=aScrn[8]
  301.     LOCAL nPHandle, x := 0, y := 0, i := 0, nBarwidth := 0, j
  302.     LOCAL nMaxbar := 0, nMinbar := 0, ht_scale := 0
  303.     LOCAL xaxis_st, yaxis_st, xaxis_en, yaxis_en
  304.     LOCAL xpos := 0, nOldtfcolr := 0, nOldtbcolr := 0
  305.     LOCAL nYval := 0, cYtext := ""
  306.  
  307.     xaxis_st := nXstart+32
  308.     yaxis_st := nYstart+nHeight-32
  309.     xaxis_en := nXstart+nWidth-32
  310.     yaxis_en := nYstart+32
  311.  
  312.     nOldtfcolr = VSTXTCOLR(15)
  313.     nOldtbcolr = VSTXTBCOLR(0)
  314.  
  315.     VFRECT(nXstart, nYstart, nWidth, nHeight, nBcolor)   
  316.  
  317.     IF pic
  318.        nPHandle = FCREATE(cPicFile)
  319.        FWRITE (nPHandle, chr(1)+chr(0)+chr(0)+chr(0)+chr(1)+;
  320.                    chr(0)+chr(8)+chr(0)+chr(68)+chr(0)+;
  321.                    chr(0)+chr(0)+chr(0)+chr(12)+chr(127)+;
  322.                    chr(9)+chr(6)+chr(167)+chr(1)+chr(176))
  323.        self:Send('AddRect', nPHandle, nXstart, nYstart, nWidth, nHeight)
  324.     ENDIF
  325.  
  326.     VSFRAME(nXstart, nYstart, nWidth, nHeight)          
  327.     VSFRAME(nXstart+1, nYstart+1, nWidth-2, nHeight-2)  
  328.  
  329.     i = 1 
  330.  
  331.     DO WHILE ! i > LEN(aValues)
  332.        j = 1
  333.  
  334.        DO WHILE ! j > LEN(aValues[i])
  335.  
  336.           IF nMaxbar < aValues[i,j]
  337.              nMaxbar = aValues[i,j]
  338.           ENDIF
  339.           j = j + 1
  340.        ENDDO
  341.           
  342.        i = i + 1
  343.     ENDDO
  344.  
  345.     i = 1 
  346.  
  347.     DO WHILE ! i > LEN(aValues)
  348.        j = 1
  349.  
  350.        DO WHILE ! j > LEN(aValues[i])
  351.  
  352.           IF nMinbar > aValues[i,j]
  353.              nMinbar = aValues[i,j]
  354.           ENDIF
  355.           j = j + 1
  356.        ENDDO
  357.           
  358.        i = i + 1
  359.     ENDDO
  360.  
  361.  
  362.     nBarwidth = ROUND((nWidth-64)/LEN(aValues[1]),0)-2
  363.     ht_scale = ABS((nHeight-64)/(nMaxbar-nMinbar))
  364.  
  365.     VLINE(xaxis_st, yaxis_st, xaxis_st, yaxis_en, 15)  
  366.     VLINE(xaxis_st, yaxis_st, xaxis_en, yaxis_st, 15)  
  367.  
  368.     IF pic
  369.        self:Send('AddLine', nPHandle, xaxis_st, yaxis_st, xaxis_st, yaxis_en)
  370.        self:Send('AddLine', nPHandle, xaxis_st, yaxis_st, xaxis_en, yaxis_st)
  371.     ENDIF
  372.  
  373.  
  374.     i = 1 
  375.  
  376.     DO WHILE ! i > LEN(aValues)
  377.        j = 1
  378.        xpos = xaxis_st+1+ROUND((nBarwidth+2)/2,0)
  379.  
  380.        DO WHILE ! j > LEN(aValues[i])-1
  381.           VLINE(xpos, yaxis_st-(ht_scale*aValues[i,j]), xpos+nBarwidth+2, yaxis_st-(ht_scale*aValues[i,j+1]), nFcolor+i-1)
  382.  
  383.           IF pic
  384.              self:Send('AddLine', nPHandle, xpos, yaxis_st-(ht_scale*aValues[i,j]), xpos+nBarwidth+2, yaxis_st-(ht_scale*aValues[i,j+1]))
  385.           ENDIF
  386.  
  387.           xpos = xpos + nBarwidth + 2
  388.           j = j + 1
  389.        ENDDO
  390.  
  391.        i = i + 1
  392.     ENDDO
  393.  
  394.     xpos = xaxis_st+1
  395.  
  396.     i = 1 
  397.  
  398.     DO WHILE ! i > LEN(aValues[1])
  399.         VSAYAT((xpos+1)+(LEN(TRIM(aXlabels[i]))*VTWIDTH()/2), nYstart+nHeight-VTHEIGHT()*1.5, aXlabels[i], nFcolor, nBcolor)
  400.         VRECT((xpos+1)+((nBarwidth+2)/2), nYstart+nHeight-32+3, 1, -6, nFcolor)
  401.  
  402.         IF pic
  403.            self:Send('AddText', nPHandle, (xpos+1)+(LEN(TRIM(aXlabels[i]))*VTWIDTH()/2), nYstart+nHeight-VTHEIGHT()*1.5, vtheight(), aXlabels[i])
  404.            self:Send('AddRect', nPHandle,(xpos+1)+((nBarwidth+2)/2), nYstart+nHeight-32+3, 1, -6)
  405.         ENDIF
  406.         xpos = xpos + nBarwidth + 2
  407.        i = i + 1
  408.     ENDDO
  409.  
  410.  
  411.     i = ROUND(nMaxbar*ht_scale,0)
  412.  
  413.     DO WHILE ! i < ROUND(nMinbar*ht_scale,0)
  414.         nYval  = ( i/((nMaxbar*ht_scale)-(nMinbar*ht_scale)) ) * nMaxbar
  415.  
  416.         IF nYval >= 1
  417.             cYtext = LTRIM(STR(ROUND(nYval,0)))
  418.         ELSE
  419.             cYtext = LTRIM(STR(ROUND(nYval, 1)))
  420.         ENDIF
  421.  
  422.         VSAYAT(nXstart+(VTWIDTH()/2), yaxis_st-i-(VTHEIGHT()/2), cYtext, nFcolor, nBcolor)
  423.         VRECT(nXstart+32-3, yaxis_st-i, 6, 1, nFcolor)
  424.  
  425.         IF pic
  426.            self:Send('AddText', nPHandle, nXstart+(VTWIDTH()/2), yaxis_st-i-(VTHEIGHT()/2), vtheight(), cYtext)
  427.            self:Send('AddRect', nPHandle,nXstart+32-3, yaxis_st-i, 6, 1)
  428.         ENDIF
  429.  
  430.         i = i - 30
  431.     ENDDO
  432.  
  433.     VSAYAT(nXstart+((nWidth-LEN(cTitle)*VTWIDTH())/2), nYstart+VTHEIGHT(), cTitle, nFcolor, nBcolor)
  434.     VSTXTCOLR(nOldtfcolr)
  435.     VSTXTBCOLR(nOldtbcolr)
  436.  
  437.     IF pic
  438.        self:Send('AddText', nPHandle, nXstart+((nWidth-LEN(cTitle)*VTWIDTH())/2), nYstart+VTHEIGHT(), vtheight(), cTitle)
  439.        FWRITE(nPHandle,chr(96))
  440.        FCLOSE (nPHandle)
  441.     ENDIF
  442.  
  443.     RETURN NIL
  444.  
  445.  
  446.  
  447. FUNCTION B3D
  448.     PARAMETER nXstart, nYstart, nWidth, nHeight, nFcolor, pic, nPHandle
  449.     LOCAL nX := 0, nY := nYstart
  450.  
  451.     VFRECT(nXstart, nYstart, nWidth, nHeight, nFcolor)
  452.  
  453.     IF pic
  454.        self:Send('AddRect', nPHandle, nXstart, nYstart, nWidth, nHeight)
  455.     ENDIF
  456.  
  457.     nX = nXstart+nWidth+1 
  458.  
  459.     DO WHILE ! nX > nXstart+nWidth+ROUND(nWidth/2,0)
  460.         nY = nY + 1
  461.         VLINE(nX, nY, nX, nY-ABS(nHeight), 8)
  462.  
  463.         IF pic
  464.            self:Send('AddLine', nPHandle, nX, nY, nX, nY-ABS(nHeight))
  465.         ENDIF
  466.  
  467.         nX = nX + 1
  468.     ENDDO
  469.  
  470.     nY = nYstart-ABS(nHeight)
  471.     nX = nXstart+1
  472.  
  473.     DO WHILE ! nX > nXstart+ROUND(nWidth/2,0)
  474.         nY = nY + 1
  475.         VLINE(nX, nY, nX+nWidth, nY, 7)
  476.  
  477.         IF pic
  478.            self:Send('AddLine', nPHandle, nX, nY, nX+nWidth, nY)
  479.         ENDIF
  480.         nX = nX + 1
  481.     ENDDO
  482.  
  483.     RETURN (NIL)
  484.  
  485.  
  486.  
  487. FUNCTION B2D
  488.     PARAMETER nXstart, nYstart, nWidth, nHeight, nFcolor, pic, nPhandle
  489.     VFRECT(nXstart, nYstart, nWidth, nHeight, nFcolor)
  490.  
  491.     IF pic
  492.        self:Send('AddRect', nPHandle, nXstart, nYstart, nWidth, nHeight)
  493.     ENDIF
  494.     RETURN (NIL)
  495.  
  496.  
  497.  
  498. FUNCTION AddLine
  499.     PARAMETER nPHandle,x1,y1,x2,y2
  500.     LOCAL aChart:=self:set(), aScrn:=aChart[1], vp1,vp2,vp3,vp4
  501.  
  502.     vp1 = (x1 - aScrn[2]) * (2800 / aScrn[6])
  503.     vp2 = (aScrn[5] - y1) * (2250 / aScrn[7])
  504.     vp3 = (x2 - aScrn[2]) * (2800 / aScrn[6])
  505.     vp4 = (aScrn[5] - y2) * (2250 / aScrn[7])
  506.     fwrite(nPHandle,chr(160)+num2chr(vp1)+num2chr(vp2)+chr(162)+num2chr(vp3)+num2chr(vp4))
  507.     RETURN NIL
  508.  
  509.  
  510.  
  511. FUNCTION AddText
  512.     PARAMETER nPHandle,x1,y1,size,txt
  513.     LOCAL aChart:=self:set(), aScrn:=aChart[1], vp1,vp2,vp3,vp4
  514.  
  515.     vp1 = (x1 - aScrn[2]) * (2800 / aScrn[6])
  516.     vp2 = (aScrn[5] - y1) * (2250 / aScrn[7])
  517.     vp4 = size * (2250 / aScrn[7])
  518.     vp3 = vp4 * .825
  519.     FWRITE (nPHandle,chr(160)+num2chr(vp1)+num2chr(vp2)+chr(172)+num2chr(vp3)+num2chr(vp4)+chr(168)+chr(7)+txt+chr(0))
  520.     RETURN NIL
  521.  
  522.  
  523.  
  524. FUNCTION AddRect
  525.     PARAMETER nFhandle, nX, nY, nDX, nDY
  526.     self:Send('AddLine', nFhandle, nX, nY, nX+nDX-1, nY)
  527.     self:Send('AddLine', nFhandle, nX+nDX-1, nY, nX+nDX-1, nY+nDY-1)
  528.     self:Send('AddLine', nFhandle, nX+nDX-1, nY+nDY-1, nX, nY+nDY-1)
  529.     self:Send('AddLine', nFhandle, nX, nY+nDY-1, nX, nY)
  530.     RETURN NIL
  531.