home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / math / rcdsplay / display.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1994-04-30  |  5.0 KB  |  144 lines

  1. {$A+,B-,D+,E+,F-,G-,I+,L+,N+,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}
  2. {$M 16384,0,655360}
  3.  
  4. {**************************************************************************
  5.  TITLE    : DISPLAY
  6.  VERSION  : 2.1
  7.  FUNCITON : Displays a data file by the GRAFED procedure.
  8.  INPUTS   :
  9.  OUTPUTS  : Graphics display of xy data.
  10.  NOTES    :
  11.  AUTHOR   : Roger Carlson (based upon that of M. Riebe and R. Carlson
  12.             written for the IBM CS9000 computer)  5/29/90
  13.  CHANGES  : 6/2/90 (RJC,1.1) - Verison 1.1 of GRAFED.
  14.             6/3/90 (RJC,1.2) - Version 1.2 of GRAFED.
  15.             6/9/90 (RJC,1.3) - Version 1.3 of GRAFED.  Prevented genera-
  16.               tion of test data file if it already exists.
  17.             6/12/90 (RJC,1.4) - Version 1.4 of GRAFED.
  18.             8/18/90 (RJC,1.5) - Version 1.5 of GRAFED.
  19.             3/23/91 (RJC,1.6) - Version 1.6 of GRAFED.
  20.             3/28/91 (RJC,1.7) - Version 1.7 of GRAFED.
  21.             5/2/91  (RJC,1.8) - Version 1.8 of GRAFED.
  22.             5/4/91  (RJC,1.9) - Version 1.9 of GRAFED.
  23.             5/9/91  (RJC,2.0) - Version 2.0 of GRAFED.
  24.             5/23/91 (RJC,2.1) - Version 2.1 of GRAFED.
  25. *************************************************************************}
  26.  
  27. {$I-}  {disable IO checking}
  28. {$M 16384,0,70000}
  29.  
  30. PROGRAM DISPLAY;
  31.  
  32. USES GRAFED, {version 2.1}
  33.      IOFUNCS,{version 1.5}
  34.      CRT;
  35.  
  36. CONST VERSION=2.1;
  37.  
  38. VAR
  39.   DATA     : DARRAY;    {first index =1 is x, 2 is y}
  40.   FILENAME : STR20;     {name of the data file}
  41.   J        : INTEGER;   {loop variable}
  42.   NUMPTS   : INTEGER;   {number of points in data array}
  43.   RECEIVED : BOOLEAN;   {flags successfull reading of data}
  44.   X,Y      : REAL;      {temporary x and y values}
  45.   XINC,YINC: REAL;      {x and y axis margin}
  46.   XMIN,XMAX: REAL;      {min and max of x data}
  47.   YMIN,YMAX: REAL;      {min and max of y data}
  48.  
  49. PROCEDURE GEN_DATA(VAR DATA:DARRAY; VAR NUMPTS:INTEGER;
  50.                    VAR RECEIVED:BOOLEAN);
  51. VAR I:INTEGER;
  52.     OUTFILE:TEXT;
  53. BEGIN
  54.   ASSIGN(OUTFILE,'TEST.DAT'); REWRITE(OUTFILE);
  55.   NUMPTS:=101;
  56.   FOR I:=1 TO NUMPTS DO BEGIN
  57.     DATA[1,I]:=(I-1)*2*3.14/NUMPTS; DATA[2,I]:=1000000*SIN(DATA[1,I]);
  58.     DATA[1,I]:=DATA[1,I]*10000;
  59.     WRITELN(OUTFILE,DATA[1,I],' ',DATA[2,I]);
  60.   END; {FOR}
  61.   CLOSE(OUTFILE);
  62.   RECEIVED:=TRUE;
  63. END; {GET_DATA}
  64.  
  65. PROCEDURE GET_DATA(VAR DATA:DARRAY; VAR NUMPTS:INTEGER; VAR FILENAME:STR20;
  66.                    VAR RECEIVED:BOOLEAN);
  67. VAR
  68.   ERR      : INTEGER;   {error flag}
  69.   INFILE   : TEXT;      {input file}
  70.   QUIT     : BOOLEAN;   {flag to abort procedure}
  71. BEGIN
  72.   REPEAT {until RECEIVED of QUIT}
  73.     RECEIVED:=FALSE;
  74.     WRITELN;
  75.     WRITE('Name of the data file (carriage return to quit): ');
  76.       READLN(FILENAME);
  77.     IF FILENAME='' THEN QUIT:=TRUE
  78.     ELSE BEGIN
  79.       QUIT:=FALSE;
  80.       IF NOT EXISTS(FILENAME) THEN BEGIN
  81.         BEEP(200); WRITELN('No such file!');
  82.         END; {IF}
  83.       END; {ELSE}
  84.     IF NOT(QUIT) AND EXISTS(FILENAME) THEN BEGIN
  85.       NUMPTS:=0;
  86.       ASSIGN(INFILE,FILENAME); ERR:=IORESULT; RESET(INFILE);
  87.       IF ERR<>0 THEN BEGIN
  88.         CLOSE(INFILE);
  89.         WRITELN('IO error number ',ERR);
  90.         END {IF}
  91.       ELSE BEGIN
  92.         WHILE NOT(EOF(INFILE)) AND (ERR=0) AND (NUMPTS<MAXPTS) DO BEGIN
  93.           NUMPTS:=NUMPTS+1;
  94.           READLN(INFILE,DATA[1,NUMPTS],DATA[2,NUMPTS]); ERR:=IORESULT;
  95.           IF (NUMPTS MOD 10) = 0 THEN WRITE('*');
  96.         END; {WHILE}
  97.         WRITELN;
  98.         IF (NUMPTS=MAXPTS) AND NOT(EOF(INFILE)) THEN BEGIN
  99.           BEEP(200);
  100.           WRITELN('Too many data points!  Only the first ',MAXPTS,
  101.                   ' will be displayed.');
  102.           WRITE('Hit <ENTER> to continue.'); READLN;
  103.           END; {IF}
  104.         CLOSE(INFILE);
  105.         IF ERR<>0 THEN BEGIN
  106.           BEEP(200);
  107.           WRITELN('Input file has wrong format!'); NUMPTS:=0;
  108.           END; {IF}
  109.         END; {ELSE}
  110.       IF NUMPTS>0 THEN RECEIVED:=TRUE;
  111.       END; {IF}
  112.   UNTIL RECEIVED OR QUIT;
  113. END; {GET_DATA}
  114.  
  115. BEGIN
  116.   CLRSCR;
  117.   WRITELN('Program DISPLAY - Version',VERSION:4:1);
  118.   WRITELN('Complements of Roger J. Carlson and Michael T. Riebe.');
  119.   WRITELN;
  120.   WRITELN('This program reads a text file of up to ',MAXPTS,' xy data');
  121.   WRITELN('points and displays that data graphically on most PCs.');
  122.   WRITELN;
  123.   WRITELN('Bytes of memory available: ',MEMAVAIL);
  124.   IF NOT EXISTS('TEST.DAT') THEN GEN_DATA(DATA,NUMPTS,RECEIVED);
  125.   REPEAT
  126.     GET_DATA(DATA,NUMPTS,FILENAME,RECEIVED);
  127.     IF RECEIVED THEN BEGIN
  128.       YMAX:=DATA[2,1]; YMIN:=DATA[2,1];
  129.       XMIN:=DATA[1,1]; XMAX:=DATA[1,NUMPTS];
  130.       FOR J:=1 TO NUMPTS DO BEGIN
  131.         Y:=DATA[2,J]; X:=DATA[1,J];
  132.         IF Y>YMAX THEN YMAX:=Y; IF Y<YMIN THEN YMIN:=Y;
  133.         IF X>XMAX THEN XMAX:=X; IF X<XMIN THEN XMIN:=X;
  134.         END; {IF}
  135.       YINC:=(YMAX-YMIN)/20; IF YINC=0 THEN YINC:=1;
  136.       YMAX:=YMAX+YINC;      YMIN:=YMIN-YINC;
  137.       XINC:=(XMAX-XMIN)/40; IF XINC=0 THEN XINC:=1;
  138.       XMIN:=XMIN-XINC;      XMAX:=XMAX+XINC;
  139.       GRAF(DATA,FILENAME,XMIN,XMAX,YMIN,YMAX,NUMPTS);
  140.       CLRSCR;
  141.       END; {IF}
  142.   UNTIL RECEIVED=FALSE;
  143.   CLRSCR;
  144. END.