home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 9
/
MEDIASHARE_09.ISO
/
clarion
/
bargraph.zip
/
CLARGRPH.CLA
< prev
next >
Wrap
Text File
|
1980-01-01
|
4KB
|
161 lines
!
! This procedure will plot simple bar graphs based on data
! from your application. Pass the following to it:
! MEM:VL1 MEM:LB1
! MEM:VL2 MEM:LB2
! MEM:VL3 MEM:LB3
! MEM:VL4 MEM:LB4
! MEM:VL5 MEM:LB5
! MEM:VL6 MEM:LB6
! MEM:VL7 MEM:LB7
! MEM:VL8 MEM:LB8
! MEM:VL9 MEM:LB9
! MEM:VL10 MEM:LB10
! MEM:NPTS
! MEM:GTITLE
! MEM:YLBL
!
! You pass the data by declaring the above variables as
! Global in your application. The VL is a long integer,
! the LB is STRING(20), the NPTS is a BYTE,
! the GTITLE is STRING(50), and the YLBL is STRING(15)
! If you're writing your own code, feel free to change
! any of the parameters.
!
! Declare the GRAPPROC as an OTHER procedure in your
! application, and set the VL series to whatever values your
! application generates.
!
! If you have any questions, feel free to call me.
!
! M. D.
!
MEMBER ('YOURAPP') !CHANGE THIS TO MATCH YOUR APPLICATION NAME
GRAPPROC PROCEDURE
WDTH BYTE
ISONE STRING(40)
ISNOT STRING(40)
AX BYTE
LCTR BYTE
SCALE REAL
TCHECK REAL !TEST EACH ROW
MX LONG
S1 STRING(1)
ARR GROUP,DIM(10)
VL LONG
LB STRING(20)
.
GSCREEN SCREEN HUE(7,0,0)
ROW(2,8) STRING('┌─{71}┐')
ROW(3,8) REPEAT(11),EVERY(2);STRING('│<0{71}>│') .
ROW(4,8) REPEAT(5),EVERY(4);STRING('┼<0{71}>┼') .
ROW(6,8) REPEAT(5),EVERY(4);STRING('│<0{71}>│') .
ROW(24,8) STRING('└─{71}┘')
LBL ROW(1,21) STRING(50)
XLBL ROW(25,9) STRING(71)
YL5 ROW(4,4) STRING(@N4)
YL4 ROW(8,4) STRING(@N4)
YL3 ROW(12,4) STRING(@N4)
YL2 ROW(16,4) STRING(@N4)
YL1 ROW(20,4) STRING(@N4)
REPEAT(20),INDEX(LCTR)
YLB ROW(6,1) STRING(1)
.
REPEAT(20),INDEX(LCTR)
LN ROW(4,9) STRING(71)
.
ROW(25,3) ENTRY(@S1),USE(S1),SEL(0,0),IMM
.
CODE
VL[1]=VL1 !PUT VALUES AND LABELS INTO ARRAYS FOR EASIER LOOPING
LB[1]=LB1
VL[2]=VL2
LB[2]=LB2
VL[3]=VL3
LB[3]=LB3
VL[4]=VL4
LB[4]=LB4
VL[5]=VL5
LB[5]=LB5
VL[6]=VL6
LB[6]=LB6
VL[7]=VL7
LB[7]=LB7
VL[8]=VL8
LB[8]=LB8
VL[9]=VL9
LB[9]=LB9
VL[10]=VL10
LB[10]=LB10
ISONE=ALL(CHR(177),40)
WDTH=70/MEM:NPTS-2
MX=0
LOOP LCTR=1 TO MEM:NPTS
IF VL[LCTR]>MX THEN MX=VL[LCTR].
.
MX/=5 ! ROUND UP Y-AXIS TO NEXT 5
MX+=1
MX*=5
IF MX>10000
LOOP LCTR=1 TO MEM:NPTS
VL[LCTR]/=1000
.
YLBL='THOUSANDS'
MX/=1000
.
IF MX>10000
LOOP LCTR=1 TO MEM:NPTS
VL[LCTR]/=1000
.
YLBL='MILLIONS'
MX/=1000
.
LCTR=LOG10(MX) !MAY SET UP A FORMULA LATER TO MAKE THE
IF MX>10 AND MX<16 THEN MX=15. ! FOLLOWING MORE ELEGANT
IF MX>15 AND MX<21 THEN MX=20.
IF MX>20 AND MX<26 THEN MX=25.
IF MX>25 AND MX<51 THEN MX=50.
IF MX>50 AND MX<101 THEN MX=100.
IF MX>100 AND MX<201 THEN MX=200.
IF MX>200 AND MX<251 THEN MX=250.
IF MX>250 AND MX<501 THEN MX=500.
IF MX>500 AND MX<751 THEN MX=750.
IF MX>750 AND MX<1001 THEN MX=1000.
IF MX>1000 AND MX<1251 THEN MX=1250.
IF MX>1250 AND MX<1501 THEN MX=1500.
IF MX>1500 AND MX<2001 THEN MX=2000.
IF MX>2000 AND MX<2501 THEN MX=2500.
IF MX>2500 AND MX<3001 THEN MX=3000.
IF MX>3000 AND MX<4001 THEN MX=4000.
IF MX>4000 AND MX<5001 THEN MX=5000.
IF MX>5000 AND MX<7501 THEN MX=7500.
IF MX>7500 AND MX<10001 THEN MX=10000.
IF MX>10000 AND MX<15001 THEN MX=15000.
OPEN(GSCREEN)
LBL=CENTER(MEM:GTITLE)
YL5=MX !GET Y-AXIS NUMBERS
YL4=MX/5*4
YL3=MX/5*3
YL2=MX/5*2
YL1=MX/5
SCALE=MX/20 ! FOR CHECKING EACH ROW
LOOP LCTR=1 TO 20
YLB=SUB(YLBL,LCTR,1)
TCHECK=MX-(SCALE*(LCTR-1))
LOOP AX=1 TO MEM:NPTS
IF VL[AX]>=TCHECK THEN LN=SUB(LN,1,AX*(WDTH+1)+1)&SUB(ISONE,1,WDTH).
.
.
MX=0
LOOP AX=1 TO MEM:NPTS !GET LENGTH OF LABELS
XLBL=SUB(XLBL,1,AX*(WDTH+1)+1)&LB[AX]
IF LEN(CLIP(LB[AX]))>MX THEN MX=LEN(CLIP(LB[AX])).
.
XLBL=SUB(ISNOT,1,(WDTH-MX)/2)&XLBL !MOVE OVER TO CENTER LONGEST LABEL
ACCEPT
CLOSE(GSCREEN)
RETURN