| ![[Previous]](../image-lib/prev.gif) | ![[Contents]](../image-lib/contents.gif) | ![[Index]](../image-lib/keyword_index.gif) | ![[Next]](../image-lib/next.gif) | 
Get the attributes of a PtMultiText widget
PtMultiTextAttributes_t *
     PtMultiTextGetAttributes( 
         PtWidget_t *widget,
         int char_offset,
         PtMultiTextAttributes_t *attributes,
         int *start,
         int *end );
This function sets the provided PtMultiTextAttributes_t structure to the attributes found at char_offset.
If you provide the integers for start and end, the function sets these parameters to the character offsets that mark the beginning and end of the segment that contains char_offset. Both start and end are 0-based. So, for example, if start returns as 0, it indicates the first character in the widget's text buffer.
A pointer to the provided PtMultiTextAttributes_t structure, or NULL if the specified widget is NULL or isn't a PtMultiText widget.
/* Standard headers */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
/* Toolkit headers */
#include <Ph.h>
#include <Pt.h>
#include <Ap.h>
/* Local headers */
#include "editor.h"
#include "abimport.h"
#include "proto.h"
int
save( PtWidget_t *widget, ApInfo_t *apinfo, 
      PtCallbackInfo_t *cbinfo )
{
    PtArg_t argt;
    FILE *fp;
    char *text;
    PtMultiTextAttributes_t attrs;
    int start = 0, end = 0, len;
    if( !(fp = fopen( "notepad", "w" ) ) )
        return Pt_CONTINUE;
        
    PtSetArg( &argt, Pt_ARG_TEXT_STRING, &text, 0 );
    PtGetResources( ABW_text, 1, &argt );
    len = strlen( text ) + 1;
    fwrite( &len, sizeof( len ), 1, fp );
    fwrite( text, len, 1, fp );
    PtMultiTextGetAttributes( ABW_text, start, 
                              &attrs, NULL, &end );
    while( end > start )
    {
        fwrite( &start, sizeof( start ), 1, fp);
        fwrite( &end, sizeof( end ), 1, fp);
        fwrite( &attrs, sizeof( attrs ), 1, fp );
        if( attrs.font )
        {    len = strlen( attrs.font ) +1;
            fwrite( &len, sizeof( len ), 1, fp );
            fwrite( attrs.font, len, 1, fp );
        }    
        start = end;
        PtMultiTextGetAttributes( ABW_text, start, 
                                  &attrs, NULL, &end );
    }
    fclose( fp );
    widget = widget, apinfo = apinfo, cbinfo = cbinfo;
    return Pt_CONTINUE;
}
int load( PtWidget_t *widget, ApInfo_t *apinfo,
          PtCallbackInfo_t *cbinfo )
{
    PtArg_t argt;
    FILE *fp;
    char *text;
    PtMultiTextAttributes_t attrs;
    int start = -1, end = 0, len;
    if( !(fp = fopen( "notepad", "r" ) ) )
        return Pt_CONTINUE;
    fread( &len, sizeof( len ), 1, fp );
    if( !( text = (char *) malloc( len ) ) )
        return Pt_CONTINUE;
    fread( text, len, 1, fp );
    
    PtSetArg( &argt, Pt_ARG_TEXT_STRING, text, 0 );
    PtSetResources( ABW_text, 1, &argt );
    free( text );
    
    while( fread( &start, sizeof( start ), 1, fp ) )
    {
        fread( &end, sizeof( end ), 1, fp );
        fread( &attrs, sizeof( attrs ), 1, fp );
        if( attrs.font )
        {    fread( &len, sizeof( len ), 1, fp );
             attrs.font = (char *) malloc( len );
             fread( attrs.font, len, 1, fp );
        } 
        PtMultiTextModifyAttributes( ABW_text, start, 
                                     end, &attrs, -1 );
        if( attrs.font )
            free( attrs.font );
    }
    fclose( fp );
    widget = widget, apinfo = apinfo, cbinfo = cbinfo;
    return Pt_CONTINUE;
}
Photon
| Safety: | |
|---|---|
| Interrupt handler | No | 
| Signal handler | No | 
| Thread | No | 
PtMultiTextCreateAttributes(), PtTextGetSelection(), PtTextModifyText(), PtTextSetSelection(), PtMultiTextAttributes_t
| ![[Previous]](../image-lib/prev.gif) | ![[Contents]](../image-lib/contents.gif) | ![[Index]](../image-lib/keyword_index.gif) | ![[Next]](../image-lib/next.gif) |