This is EnhancedText.m in view mode; [Download] [Up]
/*
  Ronin Consulting, Inc.
    Copyright (C) 1992, Nicholas Christopher (nwc@gun.com)
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.
    You should have received a copy of the GNU Library General Public
    License along with this library; if not, write to the Free
    Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#import "EnhancedText.h"
#import <appkit/nextstd.h>
#import <string.h>
static char *returnBuffer = (char *)0;
@implementation Text (EnhancedText)
- setStringValue: (const char *) str
{
   [self empty: self];
   return [self appendStringValue: str];
}
- appendStringValue: (const char *) str
{
   int len;
   len = [self textLength];
   [self setSel: len : len];
   [self replaceSel: str];
   [self scrollSelToVisible];
   
   return self;
}
- empty: sender
{
   int x;
   BOOL editable, selectable;
   x = [self textLength] + 1;
   [self setSel: 0 : x + 1];		     /* select the entire text */
   /*
    * To delete the text must be editable so copy aside the current
    * editable and selectable settings, set the text editable, delete
    * and then restore the copied aside values.
    */
   editable = [self isEditable];
   selectable = [self isSelectable];
   [self setEditable: YES];
   [self delete: sender];
   [self setEditable: editable];
   [self setSelectable: selectable];
   return self;
}
- (const char *) selectedText
{
   NXSelPt start, end;
   int numChars;
   [self getSel: &start : &end];
   numChars = end.cp - start.cp;
   if(returnBuffer)
   {
      NX_FREE(returnBuffer);
      returnBuffer = (char *)0;
   }
   
   NX_MALLOC(returnBuffer, char, numChars + 1);
   [self getSubstring: returnBuffer start: start.cp length: numChars];
   returnBuffer[numChars] = (char)0;
   
   return (const char *)returnBuffer;
}
- (const char *) stringValue
{
   [self setSel: 0 : [self textLength] + 1];		     /* select the entire text */
   return [self selectedText];
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.