home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / clarion / bargraph.zip / CLARGRPH.CLA < prev    next >
Text File  |  1980-01-01  |  4KB  |  161 lines

  1.    !
  2.    !   This procedure will plot simple bar graphs based on data
  3.    !   from your application.  Pass the following to it:
  4.    !      MEM:VL1        MEM:LB1
  5.    !      MEM:VL2        MEM:LB2
  6.    !      MEM:VL3        MEM:LB3
  7.    !      MEM:VL4        MEM:LB4
  8.    !      MEM:VL5        MEM:LB5
  9.    !      MEM:VL6        MEM:LB6
  10.    !      MEM:VL7        MEM:LB7
  11.    !      MEM:VL8        MEM:LB8
  12.    !      MEM:VL9        MEM:LB9
  13.    !      MEM:VL10        MEM:LB10
  14.    !      MEM:NPTS
  15.    !      MEM:GTITLE
  16.    !      MEM:YLBL
  17.    !
  18.    !      You pass the data by declaring the above variables as
  19.    !      Global in your application.  The VL is a long integer,
  20.    !      the LB is STRING(20), the NPTS is a BYTE,
  21.    !      the GTITLE is STRING(50), and the YLBL is STRING(15)
  22.    !      If you're writing your own code, feel free to change
  23.    !      any of the parameters.
  24.    !
  25.    !      Declare the GRAPPROC as an OTHER procedure in your
  26.    !      application, and set the VL series to whatever values your
  27.    !      application generates.
  28.    !
  29.    !      If you have any questions, feel free to call me.
  30.    !
  31.    !      M. D.
  32.    !
  33.  MEMBER ('YOURAPP')   !CHANGE THIS TO MATCH YOUR APPLICATION NAME
  34. GRAPPROC      PROCEDURE
  35. WDTH    BYTE
  36. ISONE    STRING(40)
  37. ISNOT    STRING(40)
  38. AX    BYTE
  39. LCTR    BYTE
  40. SCALE    REAL
  41. TCHECK    REAL    !TEST EACH ROW
  42. MX    LONG
  43. S1    STRING(1)
  44. ARR    GROUP,DIM(10)
  45. VL    LONG
  46. LB    STRING(20)
  47. .
  48. GSCREEN         SCREEN      HUE(7,0,0)
  49.            ROW(2,8)      STRING('┌─{71}┐')
  50.            ROW(3,8)      REPEAT(11),EVERY(2);STRING('│<0{71}>│') .
  51.            ROW(4,8)      REPEAT(5),EVERY(4);STRING('┼<0{71}>┼') .
  52.            ROW(6,8)      REPEAT(5),EVERY(4);STRING('│<0{71}>│') .
  53.            ROW(24,8)  STRING('└─{71}┘')
  54. LBL           ROW(1,21)  STRING(50)
  55. XLBL           ROW(25,9)  STRING(71)
  56. YL5           ROW(4,4)      STRING(@N4)
  57. YL4           ROW(8,4)      STRING(@N4)
  58. YL3           ROW(12,4)  STRING(@N4)
  59. YL2           ROW(16,4)  STRING(@N4)
  60. YL1           ROW(20,4)  STRING(@N4)
  61.               REPEAT(20),INDEX(LCTR)
  62. YLB           ROW(6,1)        STRING(1)
  63.               .
  64.               REPEAT(20),INDEX(LCTR)
  65. LN           ROW(4,9)        STRING(71)
  66.               .
  67.            ROW(25,3)  ENTRY(@S1),USE(S1),SEL(0,0),IMM
  68.          .
  69.  CODE
  70.  
  71.  VL[1]=VL1   !PUT VALUES AND LABELS INTO ARRAYS FOR EASIER LOOPING
  72.  LB[1]=LB1
  73.  VL[2]=VL2
  74.  LB[2]=LB2
  75.  VL[3]=VL3
  76.  LB[3]=LB3
  77.  VL[4]=VL4
  78.  LB[4]=LB4
  79.  VL[5]=VL5
  80.  LB[5]=LB5
  81.  VL[6]=VL6
  82.  LB[6]=LB6
  83.  VL[7]=VL7
  84.  LB[7]=LB7
  85.  VL[8]=VL8
  86.  LB[8]=LB8
  87.  VL[9]=VL9
  88.  LB[9]=LB9
  89.  VL[10]=VL10
  90.  LB[10]=LB10
  91.  ISONE=ALL(CHR(177),40)
  92.  WDTH=70/MEM:NPTS-2
  93.  MX=0
  94.  LOOP LCTR=1 TO MEM:NPTS
  95.  IF VL[LCTR]>MX THEN MX=VL[LCTR].
  96.  .
  97.  MX/=5                 ! ROUND UP Y-AXIS TO NEXT 5
  98.  MX+=1
  99.  MX*=5
  100.  IF MX>10000
  101.  LOOP LCTR=1 TO MEM:NPTS
  102.  VL[LCTR]/=1000
  103.  .
  104.  YLBL='THOUSANDS'
  105.  MX/=1000
  106.  .
  107.  IF MX>10000
  108.  LOOP LCTR=1 TO MEM:NPTS
  109.  VL[LCTR]/=1000
  110.  .
  111.  YLBL='MILLIONS'
  112.  MX/=1000
  113.  .
  114.  LCTR=LOG10(MX)          !MAY SET UP A FORMULA LATER TO MAKE THE
  115.   IF MX>10 AND MX<16 THEN MX=15. ! FOLLOWING MORE ELEGANT
  116.   IF MX>15 AND MX<21 THEN MX=20.
  117.   IF MX>20 AND MX<26 THEN MX=25.
  118.   IF MX>25 AND MX<51 THEN MX=50.
  119.   IF MX>50 AND MX<101 THEN MX=100.
  120.   IF MX>100 AND MX<201 THEN MX=200.
  121.   IF MX>200 AND MX<251 THEN MX=250.
  122.   IF MX>250 AND MX<501 THEN MX=500.
  123.   IF MX>500 AND MX<751 THEN MX=750.
  124.   IF MX>750 AND MX<1001 THEN MX=1000.
  125.   IF MX>1000 AND MX<1251 THEN MX=1250.
  126.   IF MX>1250 AND MX<1501 THEN MX=1500.
  127.   IF MX>1500 AND MX<2001 THEN MX=2000.
  128.   IF MX>2000 AND MX<2501 THEN MX=2500.
  129.   IF MX>2500 AND MX<3001 THEN MX=3000.
  130.   IF MX>3000 AND MX<4001 THEN MX=4000.
  131.   IF MX>4000 AND MX<5001 THEN MX=5000.
  132.   IF MX>5000 AND MX<7501 THEN MX=7500.
  133.   IF MX>7500 AND MX<10001 THEN MX=10000.
  134.   IF MX>10000 AND MX<15001 THEN MX=15000.
  135.  
  136.  OPEN(GSCREEN)
  137.  LBL=CENTER(MEM:GTITLE)
  138.  YL5=MX          !GET Y-AXIS NUMBERS
  139.  YL4=MX/5*4
  140.  YL3=MX/5*3
  141.  YL2=MX/5*2
  142.  YL1=MX/5
  143.  SCALE=MX/20      ! FOR CHECKING EACH ROW
  144.  LOOP LCTR=1 TO 20
  145.  YLB=SUB(YLBL,LCTR,1)
  146.  TCHECK=MX-(SCALE*(LCTR-1))
  147.  LOOP AX=1 TO MEM:NPTS
  148.  IF VL[AX]>=TCHECK THEN LN=SUB(LN,1,AX*(WDTH+1)+1)&SUB(ISONE,1,WDTH).
  149.  .
  150.  .
  151.  MX=0
  152.  LOOP AX=1 TO MEM:NPTS                   !GET LENGTH OF LABELS
  153.  XLBL=SUB(XLBL,1,AX*(WDTH+1)+1)&LB[AX]
  154.  IF LEN(CLIP(LB[AX]))>MX THEN MX=LEN(CLIP(LB[AX])).
  155.  .
  156.  XLBL=SUB(ISNOT,1,(WDTH-MX)/2)&XLBL      !MOVE OVER TO CENTER LONGEST LABEL
  157.  ACCEPT
  158.  CLOSE(GSCREEN)
  159.  RETURN
  160.  
  161.