[ Previous | Next | Contents | Glossary | Home | Search ]
Motif 2.1 Programmer's Guide



Storing Text in a File

A common requirement of many text editors is the ability to read text from a file, allow the user to edit the text, and then store the text in a file. An application usually obtains pathnames from the user by means of a FileSelectionBox, often invoked as a dialog from a MenuBar File Menu. Following are very simple routines that use ANSI C input/output facilities to read text from a file into a Text widget and save text from a Text widget into a file:

void ReadTextFromFile(Widget w, char *filename)
{
  FILE           *file;
  char            buffer[MAXSIZE];
  char           *ptr, *end;
  XmTextPosition  last_pos;
  int             val;
  if (file = fopen(filename, "r")) {
    XmTextSetString(w, "");
    ptr = buffer;
    end = buffer + MAXSIZE - 1;
    while((val = getc(file)) != EOF) {
      if (ptr < end) {
        *ptr++ = (char) val;
      } else {
        *ptr = '\0';
        last_pos = XmTextGetLastPosition(w);
        XmTextReplace(w, last_pos, last_pos, buffer);
        ptr = buffer;
      }
    }
    if (ptr > buffer) {
      *ptr = '\0';
      last_pos = XmTextGetLastPosition(w);
      XmTextReplace(w, last_pos, last_pos, buffer);
    }
    (void) fclose(file);
  }
}
 
void SaveTextToFile(Widget w, char *filename)
{
  FILE     *file;
  char     *text;
  if (file = fopen(filename, "w")) {
    text = XmTextGetString(w);
    (void) fputs(text, file);
    (void) fclose(file);
    XtFree(text);
  }
}

[ Previous | Next | Contents | Glossary | Home | Search ]