! *********************************************** ! ** (c) Interactive Software Services Ltd and ** ! ** Lahey Computer Systems Inc. 1997-2011 ** ! ** ----------------------------------------- ** ! ** This demonstration program source may be ** ! ** modified for training and for product ** ! ** familiarisation. ** ! ** ----------------------------------------- ** ! ** Purpose : Draw simple graphs ** ! *********************************************** ! ! Graphs demo for WINTERACTER Starter Kit ! PROGRAM GRAPH ! USE WINTERACTER IMPLICIT NONE ! ! Resource identifiers, as set via the resource editor ! INTEGER, PARAMETER :: IDR_MENU1 = 30001 INTEGER, PARAMETER :: ID_LINE = 40001 INTEGER, PARAMETER :: ID_SCAT = 40002 INTEGER, PARAMETER :: ID_EXIT = 40003 ! INTEGER :: IPICTURE,ITYPE TYPE(WIN_STYLE) :: WINDOW TYPE(WIN_MESSAGE) :: MESSAGE ! ! Initialise Winteracter ! CALL WInitialise() IPICTURE = 1 ! ! Open root window and put initial data in it ! CALL WindowOpen(FLAGS =SysMenuOn + MinButton + MaxButton, & MENUID=IDR_MENU1, & TITLE ='WiSK Graph Plotting') CALL DrawGraph() ! ! Loop forever until user terminates ! DO CALL WMessage(ITYPE, MESSAGE) SELECT CASE (ITYPE) ! ! Menu item message ! CASE (MenuSelect) CALL WindowClear() SELECT CASE (MESSAGE%VALUE1) CASE (ID_LINE) ! Draw line graph CALL DrawGraph() IPICTURE = 1 CASE (ID_SCAT) ! Draw scatter plot CALL DrawScatterPlot() IPICTURE = 2 CASE (ID_EXIT) ! Exit program EXIT END SELECT ! ! Redisplay data if we get an expose or resize event ! CASE (Expose,Resize) IF (IPICTURE==1) THEN CALL DrawGraph() ELSE IF (IPICTURE==2) THEN CALL DrawScatterPlot() END IF ! ! Close window ! CASE (CloseRequest) EXIT END SELECT END DO ! STOP ! CONTAINS ! SUBROUTINE IAxes(X1,X2,XSTEP,Y1,Y2,YSTEP,TITLE) ! ! Draw and annotate axes ! IMPLICIT NONE ! REAL, INTENT (IN) :: X1,X2,XSTEP,Y1,Y2,YSTEP CHARACTER (LEN=*), INTENT(IN) :: TITLE ! CHARACTER(LEN=4) :: STRING REAL :: XBORDER,YBORDER,XTICK,YTICK ! ! Set up user defined co-ordinate system ! XBORDER = (X2 - X1)*0.1 YBORDER = (Y2 - Y1)*0.1 CALL IGrUnits(X1-XBORDER,Y1-YBORDER,X2+XBORDER,Y2+YBORDER) ! ! Draw axis lines ! CALL IGrLineType(SolidLine) CALL IGrColourN(223) CALL IGrMoveTo(X1,Y2) CALL IGrLineTo(X1,Y1) CALL IGrLineTo(X2,Y1) ! ! Select font (size is independent of user units) ! CALL WGrTextFont(FFHelvetica,WIDTH=0.017,HEIGHT=.048) ! ! Draw some annotation on the X-axis ! CALL WGrTextOrientation(AlignCentre) XTICK = X1 + XSTEP DO WHILE (XTICK