Changeset 1809


Ignore:
Timestamp:
26/01/12 18:44:27 (4 months ago)
Author:
Freddie Akeroyd
Message:

Also trap non-printable characters in attributes when converting to definition.
Refs #320

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/applications/NXconvert/nxconvert_common.cpp

    r1807 r1809  
    4242static int WriteGroup (int is_definition); 
    4343static int WriteAttributes (int is_definition, int is_group); 
     44 
     45static void clean_string(void* dataBuffer, int dataRank, int dataDimensions[]) 
     46{ 
     47        int i, n = 1; 
     48        for(i=0; i<dataRank; ++i) 
     49        { 
     50            n *= dataDimensions[i]; 
     51        } 
     52        for(i=0; i<n; ++i) 
     53        { 
     54            if (!isprint(((const unsigned char*)dataBuffer)[i])) 
     55            { 
     56                ((char*)dataBuffer)[i] = '?'; 
     57            } 
     58        } 
     59} 
    4460 
    4561struct link_to_make 
     
    187203{  
    188204   
    189    int i, n, status, dataType, dataRank, dataDimensions[NX_MAXRANK];      
     205   int i, status, dataType, dataRank, dataDimensions[NX_MAXRANK];      
    190206   static const int slab_start[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 
    191207   static const int MAX_DEF_ARRAY_ELEMENTS_PER_DIM = 3; /* doesn't work yet - only 1 element is written */ 
     
    232248                    if (is_definition && dataType == NX_CHAR) 
    233249                    { 
    234                         n = 1; 
    235                         for(i=0; i<dataRank; ++i) 
    236                         { 
    237                             n *= dataDimensions[i]; 
    238                         } 
    239                         for(i=0; i<n; ++i) 
    240                         { 
    241                             if (!isprint(((const unsigned char*)dataBuffer)[i])) 
    242                             { 
    243                                 ((char*)dataBuffer)[i] = '?'; 
    244                             } 
    245                         } 
     250                        clean_string(dataBuffer, dataRank, dataDimensions); 
    246251                    } 
    247252                    if (NXputdata (outId, dataBuffer) != NX_OK) return NX_ERROR; 
     
    334339            if (NXmalloc((void**)&attrBuffer, 1, &attrLen, attrType) != NX_OK) return NX_ERROR; 
    335340            if (NXgetattr (inId, attrName, attrBuffer, &attrLen , &attrType) != NX_OK) return NX_ERROR; 
     341            if (is_definition && attrType == NX_CHAR) 
     342            { 
     343                clean_string(attrBuffer, 1, &attrLen); 
     344            } 
    336345            if (NXputattr (outId, attrName, attrBuffer, attrLen , attrType) != NX_OK) return NX_ERROR; 
    337346            if (NXfree((void**)&attrBuffer) != NX_OK) return NX_ERROR; 
Note: See TracChangeset for help on using the changeset viewer.