home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_300 / 300_01 / econ_plt.c < prev    next >
Text File  |  1989-12-30  |  4KB  |  171 lines

  1. #include <graphics.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <math.h>
  5. #include <dos.h>
  6. #include <ctype.h>
  7. #include <stdlib.h>
  8. #include "gr_lib.h"
  9. #include "mat_v2d.h"
  10.  
  11. #define     VECTOR      1
  12. #define     DATE            0
  13. #define     POINTS      1
  14. #define     MOVE_AVE    2
  15. #define     CUMUL_TOT   3
  16.  
  17. float time (char date[]);
  18.  
  19. main()
  20.  
  21. {
  22. unsigned      rows,cols,i,j,k,toksize,move_ave,cumul_tot,loops,nostgs,no_pds;
  23. char    xtitle[80],filename[30];
  24. struct  tmat    *data,*headings,*date;
  25. struct  fmat     *dataf,*plot_data;
  26. float   date_min,date_max,plot_max,plot_min,tic;
  27. string80 *ticstgs;
  28.  
  29.     printf("Please enter the name of the file to plot => ");
  30.     scanf("%s",filename);
  31.     printf("Please enter the number of periods to be summed => ");
  32.     scanf("%d",&no_pds);
  33.  
  34.    mtcnt(filename,&rows,&cols,&toksize);
  35.    move_ave = cols-1;
  36.    cumul_tot = cols;
  37.    tdim(data,rows,cols,toksize);
  38.    tdim(headings,VECTOR,cols,toksize);
  39.    fdim(dataf, rows-1, cols+1);
  40.     fdim(plot_data,4,rows-1);
  41.  
  42.     mtget(filename,data);
  43.  
  44.    all(data,i,j) {
  45.  
  46.         if (i==0) {
  47.           tck(headings,i,j,toksize);
  48.             strcpy ( t(headings,i,j), ts(data,i,j,cols) );
  49.         }
  50.       else {
  51.             if (j==0) {
  52.                 fck(plot_data,DATE,i-1);
  53.                 f(plot_data,DATE,i-1) =
  54.                             (time( ts(data,i,j,cols) )/31536000)+1970;
  55.             }
  56.             else {
  57.                 fck(dataf,i-1,j-1);
  58.                 f(dataf,i-1,j-1) = tf(data,i,j,cols);
  59.          }
  60.       }
  61.    }
  62.  
  63.     loops = no_cols(dataf)-3;
  64.     j=1;
  65.     do {
  66.         mfmvac (dataf, no_pds, j, 0, no_rows(dataf)-1, move_ave);
  67.         mfcumc (dataf,j,(no_rows(dataf)-no_pds),no_rows(dataf)-1,
  68.             cumul_tot);
  69.         rows(dataf,i) {
  70.             fck(dataf,i,move_ave);
  71.             f(dataf,i,move_ave)=f(dataf,i,move_ave)*no_pds;
  72.         }
  73.  
  74.          cols(plot_data,k) {
  75.  
  76.             fck(plot_data,POINTS,k);
  77.             fck(dataf,k,j);
  78.             fck(plot_data,MOVE_AVE,k);
  79.             fck(dataf,k,move_ave);
  80.             fck(plot_data,CUMUL_TOT,k);
  81.             fck(dataf,k,cumul_tot);
  82.  
  83.             f(plot_data,POINTS,k)         = f(dataf,k,j);
  84.             f(plot_data,MOVE_AVE,k)     = f(dataf,k,move_ave);
  85.             f(plot_data,CUMUL_TOT,k)     = f(dataf,k,cumul_tot);
  86.  
  87.         }
  88.         if(registerbgidriver(CGA_driver)<0) {
  89.             puts("Cannot locate CGA_driver");
  90.             exit(0);
  91.         }
  92.         InitSEGraphics("a:\\");
  93.         SetCurrentWindow(2);
  94.         SetAxesType(0,0);
  95.         SelectColor(3);
  96.         FindMinMax(&f(plot_data,DATE,0),no_cols(plot_data),
  97.             &date_min,&date_max );
  98.         date_min=floor(date_min);
  99.         FindMinMax(&f(plot_data,MOVE_AVE,0),no_cols(plot_data),
  100.             &plot_min,&plot_max );
  101.         if (plot_min>0.0) plot_min=0.0;
  102.         ScalePlotArea(date_min,plot_min,date_max,plot_max);
  103.         SetXYIntercepts(date_min,plot_min);
  104.         DrawXAxis(1,0);
  105.         LabelXAxis(1,0);
  106.         tic=(plot_max-plot_min)/10;
  107.         DrawYAxis(tic,0);
  108.         TitleXAxis("DATE");
  109.         LabelYAxis(1,0);
  110.         BorderCurrentWindow(2);
  111.         TitleWindow(t(headings,0,j));
  112.         DrawGrid(4);
  113.  
  114.         LinePlotData(&f(plot_data,DATE,no_pds),
  115.             &f(plot_data,MOVE_AVE,no_pds),
  116.             no_cols(plot_data)-no_pds, 3, 0);
  117.  
  118.         LinePlotData(&f(plot_data,DATE,no_cols(plot_data)-no_pds),
  119.             &f(plot_data,CUMUL_TOT,no_cols(plot_data)-no_pds),
  120.             no_pds, 3, 0);
  121.  
  122.         LinePlotData(&f(plot_data,DATE,0),
  123.             &f(plot_data,POINTS,0),
  124.             no_cols(plot_data), 3, 0);
  125.         getch();
  126.         ClearWindow();
  127.         CloseSEGraphics();
  128.  
  129.     } while (j++<loops);
  130.  }
  131.  
  132.  
  133. /*====================================================================*/
  134.  
  135. float time (char date_stg[])
  136.  
  137. /*====================================================================*/
  138. {
  139. char *end,temp[2],mon,day;
  140. signed int  year;
  141. struct date d1;
  142. struct time t1;
  143.  
  144.    strncpy(temp,&date_stg[0],2);
  145.    if (isdigit(temp[0]) && isdigit(temp[1]) )
  146.         year = (int) strtol (temp,&end,10)+1900;
  147.    else year = 0;
  148.  
  149.    strncpy(temp,&date_stg[2],2);
  150.    if (isdigit(temp[0]) && isdigit(temp[1]) )
  151.         mon = (char) strtol(temp,&end,10);
  152.    else mon = 0;
  153.  
  154.    end = NULL;
  155.    strncpy(temp,&date_stg[4],2);
  156.    if (isdigit(temp[0]) && isdigit(temp[1]) )
  157.         day = (char) strtol (temp,&end,10);
  158.    else day = 0;
  159.  
  160.    d1.da_year = year;
  161.    d1.da_day  = day;
  162.    d1.da_mon  = mon;
  163.  
  164.    t1.ti_min  = 0;
  165.    t1.ti_hour = 0;
  166.    t1.ti_hund = 0;
  167.    t1.ti_sec  = 0;
  168.  
  169. return (float) dostounix (&d1,&t1);
  170. }
  171.