home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 6 / FreshFish_September1994.bin / bbs / misc / cp-4.3.lha / cP / Source / file2set.c < prev    next >
C/C++ Source or Header  |  1994-04-26  |  6KB  |  264 lines

  1. #include "cp.h"
  2.  
  3.  
  4. BOOL AddSet( UBYTE *fName )
  5. {
  6. struct Set *NewSet;
  7. BPTR f;
  8. UBYTE str[128];
  9.  
  10.      f = OpenFile( fName );
  11.  
  12.      if ( f && f != 1 )
  13.        {
  14.        
  15.            strcpy(str,"Reading File -> ");
  16.            strcat(str,fName);
  17.           if ( PlotWindowWnd ) SetWindowTitles( PlotWindowWnd, str, str );
  18.  
  19.           NewSet = (struct Set *)AllocMem( sizeof( struct Set ), MEMF_CLEAR );
  20.  
  21.           if ( NewSet == NULL )
  22.             {
  23.               if ( PlotWindowWnd ) SetWindowTitles( PlotWindowWnd, NULL, "No more RAM!" );
  24.                Close( f );
  25.                return ( FALSE );
  26.             }
  27.  
  28.           NewSet-> snode.ln_Name = NewSet-> fn;
  29.           NewSet-> snode.ln_Type = NT_DATA;
  30.           NewSet-> snode.ln_Pri = 0;
  31.  
  32.           NewSet-> FirstPoint = File2Set( f , NewSet);
  33.  
  34.           if ( NewSet-> FirstPoint )
  35.             {
  36.                strcpy( NewSet-> fn, FilePart( fName ));
  37.                AddTail( SetList, &NewSet-> snode);
  38.               if ( PlotWindowWnd ) SetWindowTitles( PlotWindowWnd, MyName, MyName );
  39.  
  40.                return ( TRUE );
  41.             }
  42.           else
  43.             {
  44.                FreeMem( NewSet , sizeof(struct Set));
  45.                return ( FALSE );
  46.             }
  47.        }
  48.      return ( FALSE );
  49. }
  50.  
  51. BPTR OpenFile( UBYTE *fName)
  52. {
  53. BPTR fi;
  54. UBYTE str[128];
  55.  
  56.      fi = Open( fName, MODE_OLDFILE );
  57.      if ( fi == NULL)
  58.      {
  59.        strcpy (str,"Can't Open file -> ");
  60.        strcat (str,fName);
  61.  
  62.        if ( PlotWindowWnd ) SetWindowTitles( PlotWindowWnd, NULL, str );
  63.        return( NULL );
  64.      }
  65.  
  66.      NameFromFH(fi, path, 255);
  67.  
  68.      return( fi );
  69. }
  70.  
  71. struct Point *File2Set( BPTR fi , struct Set *ThisSet)
  72. {
  73.  
  74. char ch;
  75. char in[256];
  76. int c = 0;
  77. int k = 0;
  78. int n;
  79. BOOL good;
  80. double x, y;
  81.  
  82. struct Point *ThisPoint;
  83. struct Point *LastPoint = NULL;
  84. struct Point *FirstPoint = NULL;
  85.  
  86.  
  87.      while ( FGets( fi, in, 255 ))
  88.        {
  89.           n = sscanf( in, "%lf%c%lf", &x, &ch, &y );   /* ch to swallow csv */
  90.           
  91.           if ( n == 3 || n == 2 )
  92.             {
  93.                 good = TRUE;
  94.                 k++;
  95.             }
  96.           else good = FALSE;
  97.           
  98.           if ( k >= points ) break;
  99.  
  100.           if ( good && k % thin == 0 )
  101.             {
  102.  
  103.                ThisPoint = AllocMem( sizeof( struct Point ), NULL );
  104.  
  105.                if( ThisPoint == NULL )
  106.                  {
  107.                   if ( PlotWindowWnd ) SetWindowTitles( PlotWindowWnd, NULL, "Out of Memory" );
  108.                     FreePoints( FirstPoint );
  109.                     Close ( fi );
  110.                     return ( NULL );
  111.                  }
  112.  
  113.                if ( c )
  114.                  {
  115.                     LastPoint-> NextPoint = ThisPoint;
  116.                  }
  117.                else
  118.                  {
  119.                     FirstPoint = ThisPoint;
  120.                  }
  121.  
  122.             if ( n == 2 )
  123.               {
  124.                   y = x;
  125.                   x = k;
  126.               }
  127.  
  128.                ThisPoint-> xval = x;
  129.                ThisPoint-> yval = y;
  130.  
  131.                LastPoint = ThisPoint;
  132.  
  133.                if ( c )
  134.                  {
  135.                     ThisSet-> xmax = max( ThisSet-> xmax, x);
  136.                     ThisSet-> xmin = min( ThisSet-> xmin, x);
  137.                     ThisSet-> ymax = max( ThisSet-> ymax, y);
  138.                     ThisSet-> ymin = min( ThisSet-> ymin, y);
  139.                  }
  140.                else
  141.                  {
  142.                     ThisSet-> xmax = x;
  143.                     ThisSet-> xmin = x;
  144.                     ThisSet-> ymax = y;
  145.                     ThisSet-> ymin = y;
  146.                  }
  147.  
  148.                c++;
  149.                ThisPoint-> NextPoint = NULL;
  150.             }
  151.        }
  152.      ThisSet-> npt = c;
  153.      Close ( fi );
  154.  
  155.      return ( FirstPoint );
  156. }
  157.  
  158. void FreePoints( struct Point *First )
  159. {
  160. struct Point *Next;
  161.  
  162.        while ( First )
  163.          {
  164.  
  165.           Next = First -> NextPoint;
  166.           FreeMem( First, sizeof(struct Point));
  167.           First = Next;
  168.  
  169.          }
  170.  
  171. }
  172.  
  173. void FreeAllSets()
  174. {
  175. struct Set *node;
  176. struct Set *Next;
  177. UBYTE str[132];
  178.  
  179.      node = (struct Set *)SetList-> lh_Head;
  180.  
  181.      while ( Next = (struct Set *)node-> snode.ln_Succ )
  182.        {
  183.  
  184.            strcpy(str,"Freeing -> ");
  185.               strcat(str,node-> snode.ln_Name);
  186.           if ( PlotWindowWnd ) SetWindowTitles( PlotWindowWnd, str, str );
  187.  
  188.           FreePoints( node -> FirstPoint);
  189.           Remove( (struct Node *)node );
  190.           FreeMem( node , sizeof(struct Set));
  191.           node = Next;
  192.        }
  193. }
  194.  
  195. BOOL AddNewSet()
  196. {
  197. struct FileRequester *fr;
  198. UBYTE *fpp;
  199. struct WBArg *frargs;
  200. BOOL res;
  201. LONG x;
  202. WORD rqW=180, rqH=120,   xo=100, yo=100;
  203. struct Rectangle rect;
  204.     
  205.  
  206.      if (PlotWindowWnd)
  207.        {
  208.         rqW  = fontPtr->tf_XSize * 30;
  209.         rqH = cPFont->ta_YSize * 18;
  210.         
  211.         if (QueryOverscan(Disp, &rect, OSCAN_TEXT))
  212.           {
  213.  
  214.              xo = -Scr->ViewPort.DxOffset+(rect.MaxX-rect.MinX)/2 - rqW/2;
  215.              yo = -Scr->ViewPort.DyOffset+(rect.MaxY-rect.MinY)/2 - rqH/2;
  216.               }
  217.           }
  218.  
  219.      if ((fr = AllocAslRequest( ASL_FileRequest, TAG_DONE )))
  220.        {
  221.  
  222.           fpp = FilePart( path );
  223.  
  224.           *fpp = '\0';
  225.  
  226.           res = AslRequestTags( fr,
  227.                ASL_Window, PlotWindowWnd,
  228.                ASL_Hail, (ULONG)"Select Multiple Files",
  229.                ASL_Dir, path,
  230.                ASL_FuncFlags, FILF_MULTISELECT,
  231.             ASL_LeftEdge, xo,
  232.             ASL_TopEdge, yo,
  233.             ASL_Width, rqW,
  234.             ASL_Height, rqH,
  235.                TAG_DONE );
  236.  
  237.           if ( res )
  238.             {
  239.                if ( fr-> rf_NumArgs )
  240.                  {
  241.                     frargs = fr-> rf_ArgList;
  242.  
  243.                     for( x = 0; x < fr-> rf_NumArgs; x++)
  244.                       {
  245.                          strcpy( path, fr-> rf_Dir);
  246.                          AddPart( path, frargs[x].wa_Name, 128);
  247.  
  248.                          res = AddSet( path );
  249.  
  250.                       }
  251.                  }
  252.                else if( strlen(fr-> rf_File))
  253.                  {
  254.                     if (strlen(fr-> rf_Dir)) strcpy( path, fr-> rf_Dir);
  255.                     AddPart( path, fr-> rf_File, 128);
  256.  
  257.                     res = AddSet( path );
  258.                  }
  259.             }
  260.           FreeAslRequest( fr );
  261.        }
  262.      return ( res );
  263. }
  264.