home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Utilities / Miscellaneous / CopyPaste 3.3.4 / CopyPaste Tools Sourcecode / Selection Sort.c / BuildLines.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-06-06  |  2.1 KB  |  103 lines  |  [TEXT/KAHL]

  1. #include "ToolSort.h"
  2.  
  3. /*=========================================================================
  4. Module:        BuildLines
  5.  
  6. Purpose:    Extract the lines of text from validSel and put them
  7.             into the structure SelLine along with the number 
  8.             of lines.
  9.  
  10. Returns:    selLine, err
  11.  
  12. =========================================================================*/
  13.  
  14. BuildLines( validSel, selLine )
  15.     SelRec             validSel;        /* handle to valid selection */
  16.     SelLine            *selLine;        /* array of handles to lines */
  17.     {
  18.     register Handle    h;                /* handle to line of text */
  19.     register int    l = 0;            /* line counter */
  20.     register int    len;            /* length of selection */
  21.     register int     p = 0;            /* selection position pointer */
  22.     long                err = 0;        /* memory error flag */
  23.     int                num = 0;        /* number of lines */
  24.     char            ch;
  25.     
  26.     if ( (len=validSel.length) <= 0 )
  27.         {
  28.         err = Empty_Error;
  29.         selLine->noLines = 0;
  30.         selLine->lines = 0L;
  31.         }
  32.     else
  33.         {
  34.         for (l=0, p=0; p<len; p++)            /* count number of lines */
  35.             {
  36.             ch = (*validSel.sel)[p];
  37.             (ch=='\r') ? l++: l;
  38.             }
  39.             
  40.         if ( (num=l) <= 0 )
  41.             {
  42.             err = End_Error;
  43.             selLine->noLines = 0;
  44.             }
  45.         else
  46.             {
  47.             selLine->lines = (Handle *)NewPtr( (long) sizeof(Handle)*num );
  48.             
  49.             if ( selLine->lines == NIL )
  50.                 {
  51.                 err = Memory_Error;
  52.                 selLine->noLines = 0;
  53.                 }
  54.             else
  55.                 {
  56.                 h = NewHandle(0L);
  57.                 selLine->lines[l=0] = h;
  58.                 
  59.                 if ( h != NIL )
  60.                     {
  61.                     for ( l=0, p=0; p<len; p++ )
  62.                         {
  63.                         ch = (*validSel.sel)[p];
  64.                         err = PtrAndHand( &ch, selLine->lines[l], 1L);
  65.                         if ( ch=='\r' && p<len-1 )
  66.                             {
  67.                             h = NewHandle( 0L );
  68.                             selLine->lines[++l] = h;
  69.                             if ( h == NIL )
  70.                                 {
  71.                                 err = Memory_Error;
  72.                                 break;
  73.                                 }
  74.                             }
  75.                         }
  76.                     }
  77.                 else
  78.                     err = Memory_Error;
  79.                         
  80.                 if (err == noErr)
  81.                     selLine->noLines = num;
  82.                 else
  83.                     {
  84.                     selLine->noLines = 0;
  85.                     for (; l >= 0; l-- )                    /* dispose garbage */
  86.                         if ( selLine->lines[l] != NIL )
  87.                             {
  88.                             DisposHandle( selLine->lines[l] );
  89.                             selLine->lines[l] = NIL;
  90.                             }
  91.                     if ( selLine->lines != NIL )
  92.                         {
  93.                         DisposPtr((Ptr) selLine->lines );
  94.                         selLine->lines = NIL;
  95.                         }
  96.                     }
  97.                 }
  98.             }
  99.         }
  100.  
  101.     return( err );
  102.     }
  103.