home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / plotme.zip / PLOTME.PRG < prev    next >
Text File  |  1991-03-07  |  4KB  |  140 lines

  1. SET TALK OFF
  2. USE mkt_prc IN 1 ORDER TAG acct_date ALIAS dbf_mkt
  3. scrnmax=24            && Bottom Row of screen..Use 42 for EGA43
  4. macct="45005"         && Use your own procedure to find acct to plot
  5. DO plot
  6. RETURN
  7.  
  8. PROCEDURE plot
  9. SAVE SCREEN TO Graph_Win
  10. Graph_Stat=SET("ATTRIBUTES")
  11. C_Min=5               && screen column for vertical axis
  12. C_Max=75              && screen column for end of horizontal axis
  13. R_Top=0               && screen row for top of vertical axis
  14. R_Btm=ScrnMax-4       && screen row for bottom of vertical axis
  15. R_Inc=4               && # rows between vertical axis labels
  16. R_Ticks=(R_Btm-R_Top+1)/R_Inc     && # of vertical axis labels
  17. SELECT dbf_mkt
  18. SET ORDER TO acct_date
  19. SEEK macct
  20. IF acct=macct
  21.   SCAN REST WHILE acct=macct     && find last record to plot
  22.   ENDSCAN
  23.   IF acct<>macct
  24.     SKIP -1
  25.   ENDIF
  26.   Rcd_End=RECNO()
  27.   Date_End=date
  28.   C_End=C_Min
  29.   c=C_Max
  30.   d1=EOM(DATE(),-1)       && far right horizontal axis is end of last month
  31.   DO WHILE acct=macct        && find first record to plot that will
  32.     d2=date                  && find within horizontal axis limits
  33.     ss=c+(YEAR(d2)-YEAR(d1))*12+MONTH(d2)-MONTH(d1)
  34.     IF ss <= C_Min       && if date value of record is less then value
  35.       EXIT               && of far left horizontal axis, then quit
  36.     ENDIF
  37.     c=ss
  38.     C_End=MAX(C_End,c)
  39.     d1=d2
  40.     SKIP -1
  41.   ENDDO
  42.   SKIP
  43.   Rcd_Beg=RECNO()        && first record to be plotted
  44.   Date_Beg=d1
  45.   C_Beg=c
  46.   CALCULATE REST CNT(),AVG(mkt_pr),MAX(mkt_pr),MIN(mkt_pr) ;
  47.     WHILE acct=macct TO Rcd_Cnt,Y_Avg,Y_Max,Y_Min
  48.   SKIP -1
  49.   Y_Sprd=ABS(Y_Max-Y_Min)
  50.   R_Fctr=(R_Btm-R_Top)/Y_Sprd    && convert price to screen row
  51.   t1=LOG10(Y_Sprd/R_Ticks)
  52.   IF t1<0                        && amount to increment tick label
  53.     Y_Inc=ROUND((Y_Sprd/R_Ticks)*10^INT(ABS(t1)+1),0)/(10^INT(ABS(t1)+1))
  54.   ELSE
  55.     Y_Inc=ROUND(Y_Sprd/R_Ticks,0)
  56.   ENDIF
  57.   t1=LOG10(Y_Max)
  58.   IF t1>=0                      && determine picture for tick label
  59.     pic=REPLICATE("9",INT(t1+1))
  60.   ELSE
  61.     pic="9"
  62.   ENDIF
  63.   t1=LOG10(Y_Inc)
  64.   IF t1<0
  65.     pic=pic+"."+REPLICATE("9",INT(ABS(t1)+1))
  66.   ENDIF
  67.   IF Y_Min<0
  68.     pic="9"+pic
  69.   ENDIF
  70.   Y_0=IIF(Y_Min>=0,Y_Min,IIF(Y_Max<=0,Y_Max,0))    && value of y @ horiz axis
  71.   R_0=IIF(Y_Min>=0,R_Btm,IIF(Y_Max<=0,R_top,R_Top+ROUND(Y_Max*R_Fctr,0)))
  72.   SET COLOR TO W+/N                             && screen row at horiz axis
  73.   CLEAR
  74.   @ R_0,C_Min TO R_0,C_Max          && draw horiz axis
  75.   @ R_Top,C_Min TO R_Btm,C_Min      && draw vert axis
  76.   r=R_0
  77.   y=Y_0
  78.   DO WHILE y<=Y_Max
  79.     @ r,C_Min-4 SAY y PICTURE pic   && draw vertical tick labels from 0 up
  80.     @ $,C_Min SAY "├"
  81.     y=y+Y_Inc
  82.     r=r-R_Inc
  83.   ENDDO
  84.   r=R_0+R_Inc
  85.   y=Y_0-Y_Inc
  86.   DO WHILE y>=Y_Min                 && draw vertical tick labels from 0 down
  87.     @ r,C_Min-4 SAY y PICTURE pic
  88.     @ $,C_Min SAY "├"
  89.     y=y-Y_Inc
  90.     r=r+R_Inc
  91.   ENDDO
  92.   c=C_Max
  93.   d1=EOM(DATE(),-1)
  94.   GOTO Rcd_End
  95.   ctr=Rcd_Cnt
  96.   DO WHILE ctr>0                    && draw bar graph of price values
  97.     d2=date
  98.     c=c+(YEAR(d2)-YEAR(d1))*12+MONTH(d2)-MONTH(d1)
  99.     IF mkt_pr>=0
  100.       @ Y_Coord(mkt_pr),c TO R_0,c
  101.     ELSE
  102.       @ R_0,c TO Y_Coord(mkt_pr),c
  103.     ENDIF
  104.     d1=d2
  105.     SKIP -1
  106.     ctr=ctr-1
  107.   ENDDO
  108.   @ Y_Coord(Y_Avg),C_Beg TO Y_Coord(Y_Avg),C_End   && draw average line
  109.   Mkt_Avg=Y_Avg
  110.   @ scrnmax-2,10 SAY Date_Beg
  111.   @ $,$+2 SAY Date_End
  112.   @ $,$+2 SAY "Average Price ="
  113.   @ $,$+1 SAY Mkt_Avg PICTURE "@B 999,999.999"
  114.   ?
  115.   WAIT
  116. ENDIF
  117. SET COLOR TO &Graph_Stat.
  118. RESTORE SCREEN FROM Graph_Win
  119. RETURN
  120.  
  121. FUNCTION Y_Coord
  122. PARAMETER Y_Value
  123. RETURN ROUND(R_0-(Y_Value-Y_0)*R_Fctr,0)
  124.  
  125.  
  126. FUNCTION EOM
  127. PARAMETERS date_now,months
  128. PRIVATE mdate,yr,mo,mo_use,yr_use
  129. IF months>=0
  130.   yr_use=YEAR(date_now)+INT(months/12)
  131.   mo_use=MONTH(date_now)+MOD(months,12)
  132. ELSE
  133.   yr=YEAR(date_now)+INT(months/12)
  134.   mo=MONTH(date_now)-MOD(ABS(months),12)
  135.   mo_use=IIF(mo<1,mo+12,mo)
  136.   yr_use=IIF(mo<1,yr-1,yr)
  137. ENDIF
  138. RETURN CTOD(STR(mo_use+1,2)+'/01/'+STR(yr_use,4))-1
  139.  
  140.