home *** CD-ROM | disk | FTP | other *** search
- #include "ToolSort.h"
-
- /*=========================================================================
- Module: BuildLines
-
- Purpose: Extract the lines of text from validSel and put them
- into the structure SelLine along with the number
- of lines.
-
- Returns: selLine, err
-
- =========================================================================*/
-
- BuildLines( validSel, selLine )
- SelRec validSel; /* handle to valid selection */
- SelLine *selLine; /* array of handles to lines */
- {
- register Handle h; /* handle to line of text */
- register int l = 0; /* line counter */
- register int len; /* length of selection */
- register int p = 0; /* selection position pointer */
- long err = 0; /* memory error flag */
- int num = 0; /* number of lines */
- char ch;
-
- if ( (len=validSel.length) <= 0 )
- {
- err = Empty_Error;
- selLine->noLines = 0;
- selLine->lines = 0L;
- }
- else
- {
- for (l=0, p=0; p<len; p++) /* count number of lines */
- {
- ch = (*validSel.sel)[p];
- (ch=='\r') ? l++: l;
- }
-
- if ( (num=l) <= 0 )
- {
- err = End_Error;
- selLine->noLines = 0;
- }
- else
- {
- selLine->lines = (Handle *)NewPtr( (long) sizeof(Handle)*num );
-
- if ( selLine->lines == NIL )
- {
- err = Memory_Error;
- selLine->noLines = 0;
- }
- else
- {
- h = NewHandle(0L);
- selLine->lines[l=0] = h;
-
- if ( h != NIL )
- {
- for ( l=0, p=0; p<len; p++ )
- {
- ch = (*validSel.sel)[p];
- err = PtrAndHand( &ch, selLine->lines[l], 1L);
- if ( ch=='\r' && p<len-1 )
- {
- h = NewHandle( 0L );
- selLine->lines[++l] = h;
- if ( h == NIL )
- {
- err = Memory_Error;
- break;
- }
- }
- }
- }
- else
- err = Memory_Error;
-
- if (err == noErr)
- selLine->noLines = num;
- else
- {
- selLine->noLines = 0;
- for (; l >= 0; l-- ) /* dispose garbage */
- if ( selLine->lines[l] != NIL )
- {
- DisposHandle( selLine->lines[l] );
- selLine->lines[l] = NIL;
- }
- if ( selLine->lines != NIL )
- {
- DisposPtr((Ptr) selLine->lines );
- selLine->lines = NIL;
- }
- }
- }
- }
- }
-
- return( err );
- }
-