Changeset 6149 for branches/stable_5.0

Show
Ignore:
Timestamp:
19/08/09 16:49:28 (3 years ago)
Author:
westram
Message:
Location:
branches/stable_5.0
Files:
11 modified

Legend:

Unmodified
Added
Removed
  • branches/stable_5.0/ARBDB/ad_load.c

    r6143 r6149  
    15101510                        } 
    15111511                        else { 
    1512                             gbd = 0; 
     1512                            gbd   = 0; 
     1513                            error = GB_await_error(); 
    15131514                        } 
    15141515                    } 
     
    15941595        GB_begin_transaction((GBDATA *)gbd); 
    15951596    } 
     1597 
     1598    gb_assert(error || gbd); 
    15961599     
    15971600    if (error) { 
  • branches/stable_5.0/ARBDB/ad_prot.h

    r6125 r6149  
    133133long GB_read_int P_((GBDATA *gbd)); 
    134134int GB_read_byte P_((GBDATA *gbd)); 
     135void *GB_read_pointer P_((GBDATA *gbd)); 
    135136double GB_read_float P_((GBDATA *gbd)); 
    136137long GB_read_count P_((GBDATA *gbd)); 
     
    160161GB_ERROR GB_write_byte P_((GBDATA *gbd, int i)); 
    161162GB_ERROR GB_write_int P_((GBDATA *gbd, long i)); 
     163GB_ERROR GB_write_pointer P_((GBDATA *gbd, void *pointer)); 
    162164GB_ERROR GB_write_float P_((GBDATA *gbd, double f)); 
    163165GB_ERROR GB_write_pntr P_((GBDATA *gbd, const char *s, long bytes_size, long stored_size)); 
     
    202204GB_ERROR GB_set_temporary P_((GBDATA *gbd)); 
    203205GB_ERROR GB_clear_temporary P_((GBDATA *gbd)); 
    204 long GB_read_temporary P_((GBDATA *gbd)); 
     206GB_BOOL GB_is_temporary P_((GBDATA *gbd)); 
     207GB_BOOL GB_in_temporary_branch P_((GBDATA *gbd)); 
    205208GB_ERROR GB_push_local_transaction P_((GBDATA *gbd)); 
    206209GB_ERROR GB_pop_local_transaction P_((GBDATA *gbd)); 
  • branches/stable_5.0/ARBDB/arbdb.c

    r6143 r6149  
    426426} 
    427427 
     428void *GB_read_pointer(GBDATA *gbd) { 
     429    GB_TEST_READ(gbd,GB_POINTER,"GB_read_pointer"); 
     430    return gbd->info.ptr; 
     431} 
     432 
    428433double GB_read_float(GBDATA *gbd) 
    429434{ 
     
    752757    if ((long)((int32_t)i) != i) { 
    753758        gb_assert(0); 
     759        GB_warningf("Warning: 64bit incompatibility detected\nNo data written to '%s'\n", GB_get_db_path(gbd)); 
    754760        return "GB_INT out of range (signed, 32bit)"; 
    755761    } 
     
    757763        gb_save_extern_data_in_ts(gbd); 
    758764        gbd->info.i = i; 
     765        gb_touch_entry(gbd,gb_changed); 
     766        GB_DO_CALLBACKS(gbd); 
     767    } 
     768    return 0; 
     769} 
     770 
     771GB_ERROR GB_write_pointer(GBDATA *gbd, void *pointer) { 
     772    GB_TEST_WRITE(gbd,GB_POINTER,"GB_write_pointer"); 
     773    if (gbd->info.ptr != pointer) { 
     774        gb_save_extern_data_in_ts(gbd); 
     775        gbd->info.ptr = pointer; 
    759776        gb_touch_entry(gbd,gb_changed); 
    760777        GB_DO_CALLBACKS(gbd); 
     
    13021319        return NULL; 
    13031320    }; 
     1321 
     1322    if (type == GB_POINTER) { 
     1323        if (!GB_in_temporary_branch(father)) { 
     1324            GB_export_error("GB_create: pointers only allowed in temporary branches"); 
     1325            return NULL; 
     1326        } 
     1327    } 
     1328 
    13041329    gbd = gb_make_entry((GBCONTAINER *)father, key, -1,0,type); 
    13051330    gb_touch_header(GB_FATHER(gbd)); 
     
    16421667} 
    16431668 
    1644 long GB_read_temporary(GBDATA *gbd) { 
     1669GB_BOOL GB_is_temporary(GBDATA *gbd) { 
    16451670    GB_TEST_TRANSACTION(gbd); 
    16461671    return (long)gbd->flags.temporary; 
    16471672} 
     1673 
     1674GB_BOOL GB_in_temporary_branch(GBDATA *gbd) { 
     1675    // returns true, if 'gbd' is member of a temporary subtree 
     1676 
     1677    if (GB_is_temporary(gbd)) return GB_TRUE; 
     1678 
     1679    GBDATA *gb_parent = GB_get_father(gbd); 
     1680    if (!gb_parent) return GB_FALSE; 
     1681 
     1682    return GB_in_temporary_branch(gb_parent); 
     1683} 
     1684 
    16481685 
    16491686/******************************************************************************************** 
  • branches/stable_5.0/ARBDB/arbdb.h

    r6143 r6149  
    125125    GB_INT         = 3, 
    126126    GB_FLOAT       = 4, 
    127     // 5 is unused 
     127    GB_POINTER     = 5, // not savable! only allowed in temporary entries 
    128128    GB_BITS        = 6, 
    129129    // 7 is unused 
     
    188188 
    189189union gb_data_base_type_union { 
    190     int32_t                  i; 
    191     struct GB_INTern_strings istr; 
    192     struct GB_INTern         in; 
    193     struct gb_extern_data    ex; 
     190    int32_t                   i; 
     191    void                     *ptr; 
     192    struct GB_INTern_strings  istr; 
     193    struct GB_INTern          in; 
     194    struct gb_extern_data     ex; 
    194195}; 
    195196 
  • branches/stable_5.0/SL/DB_SCANNER/db_scanner.cxx

    r6047 r6149  
    4040    cbs->may_be_an_error = 0; 
    4141    GB_push_transaction(cbs->gb_main); 
    42     GBDATA *gbd = (GBDATA *)aw_root->awar(cbs->def_gbd)->read_int(); 
     42    GBDATA *gbd = (GBDATA *)aw_root->awar(cbs->def_gbd)->read_pointer(); 
    4343    if (    !cbs->gb_user || 
    4444            !gbd || 
     
    134134                else    error      = GB_write_as_string(gb_new,value); 
    135135 
    136                 cbs->aws->get_root()->awar(cbs->def_gbd)->write_int((long)gb_new); // remap arbdb 
     136                cbs->aws->get_root()->awar(cbs->def_gbd)->write_pointer(gb_new); // remap arbdb 
    137137            } 
    138138        } 
     
    195195                        error = GB_delete(gbd); 
    196196                        if (!error) { 
    197                             cbs->aws->get_root()->awar(cbs->def_gbd)->write_int((long) gb_key); 
     197                            cbs->aws->get_root()->awar(cbs->def_gbd)->write_pointer(gb_key); 
    198198                        } 
    199199                    } 
     
    250250    GB_push_transaction(cbs->gb_main); 
    251251    if (cbs->may_be_an_error) {     // sorry 
    252         cbs->aws->get_root()->awar(cbs->def_gbd)->write_int((long)0); 
    253     } 
    254     gbd = (GBDATA *)cbs->aws->get_root()->awar(cbs->def_gbd)->read_int(); 
     252        cbs->aws->get_root()->awar(cbs->def_gbd)->write_pointer(NULL); 
     253    } 
     254    gbd = (GBDATA *)cbs->aws->get_root()->awar(cbs->def_gbd)->read_pointer(); 
    255255 
    256256    if (cbs->gb_edit) { 
     
    301301    sprintf(buffer,"tmp/arbdb_scanner_%i/list",scanner_id); 
    302302    cbs->def_gbd = strdup(buffer); 
    303     aw_root->awar_int( cbs->def_gbd, 0, AW_ROOT_DEFAULT); 
     303    aw_root->awar_pointer(cbs->def_gbd, 0, AW_ROOT_DEFAULT); 
    304304 
    305305    sprintf(buffer,"tmp/arbdb_scanner_%i/find",scanner_id); 
     
    317317    aws->at(box_pos_fig); 
    318318 
    319     cbs->id          = aws->create_selection_list(cbs->def_gbd,0,"",20,10); 
     319    cbs->id          = aws->create_selection_list(cbs->def_gbd, 0, "", 20, 10); 
    320320    cbs->aws         = aws; 
    321321    cbs->awr         = aw_root; 
     
    386386        case GB_DB: { 
    387387            GBS_strcat(out, "<CONTAINER>:"); 
    388             cbs->aws->insert_selection(cbs->id, GBS_mempntr(out), (long)gbd); 
     388            cbs->aws->insert_selection(cbs->id, GBS_mempntr(out), gbd); 
    389389            GBS_strforget(out); 
    390390 
     
    396396        case GB_LINK: { 
    397397            GBS_strnprintf(out, 100, "LINK TO '%s'", GB_read_link_pntr(gbd)); 
    398             cbs->aws->insert_selection(cbs->id, GBS_mempntr(out), (long)gbd); 
     398            cbs->aws->insert_selection(cbs->id, GBS_mempntr(out), gbd); 
    399399            GBS_strforget(out); 
    400400 
     
    417417                GBS_strcat(out, "<unprintable>"); 
    418418            } 
    419             cbs->aws->insert_selection(cbs->id, GBS_mempntr(out), (long)gbd); 
     419            cbs->aws->insert_selection(cbs->id, GBS_mempntr(out), gbd); 
    420420            GBS_strforget(out); 
    421421            break; 
     
    492492                        } 
    493493                    } 
    494                     cbs->aws->insert_selection( cbs->id, buffer, (long)gbd ); 
     494                    cbs->aws->insert_selection(cbs->id, buffer, gbd); 
    495495                } 
    496496                else { // non-existing entry 
    497                     p[0]=' '; p[1] = ':'; p[2] = 0; 
    498                     cbs->aws->insert_selection( cbs->id, buffer, (long)gb_key ); 
     497                    p[0] = ' '; p[1] = ':'; p[2] = 0; 
     498                    cbs->aws->insert_selection(cbs->id, buffer, gb_key); 
    499499                } 
    500500            } 
     
    538538        } 
    539539    } 
    540     aws->insert_default_selection( cbs->id, "", (long)0 ); 
     540    aws->insert_default_selection( cbs->id, "", (void*)NULL); 
    541541    aws->update_selection_list( cbs->id ); 
    542542    if (cbs->gb_user) { 
     
    551551static void awt_scanner_changed_cb2(GBDATA *dummy, struct adawcbstruct *cbs, GB_CB_TYPE gbtype) 
    552552{ 
    553     cbs->aws->get_root()->awar(cbs->def_gbd)->write_int((long)0); 
     553    cbs->aws->get_root()->awar(cbs->def_gbd)->write_pointer(NULL); 
    554554    // unmap edit field 
    555555    awt_scanner_changed_cb(dummy,cbs,gbtype); 
     
    579579    } 
    580580 
    581     cbs->aws->get_root()->awar(cbs->def_gbd)->write_int((long)0); 
     581    cbs->aws->get_root()->awar(cbs->def_gbd)->write_pointer(NULL); 
    582582    awt_scanner_changed_cb(gb_pntr,cbs,GB_CB_CHANGED); 
    583583 
  • branches/stable_5.0/WINDOW/AW_button.cxx

    r6143 r6149  
    149149            switch ( vus->awar->variable_type ) { 
    150150                case AW_STRING: 
    151                     error = vus->awar->write_string( tmp ); 
     151                    error   = vus->awar->write_string( tmp ); 
    152152                    break; 
    153153                case AW_INT: 
    154                     h_int = atoi(tmp); 
    155                     error = vus->awar->write_int( h_int ); 
     154                    h_int   = atoi(tmp); 
     155                    error   = vus->awar->write_int( h_int ); 
    156156                    break; 
    157157                case AW_FLOAT: 
    158158                    h_float = atof(tmp); 
    159                     error = vus->awar->write_float( h_float ); 
     159                    error   = vus->awar->write_float( h_float ); 
    160160                    break; 
    161161                default: 
    162                     error = GB_export_error("Unknown AWAR type"); 
     162                    gb_assert(0); 
     163                    error = GB_export_error("Unknown or incompatible AWAR type"); 
    163164            } 
    164165            XtFree( tmp ); 
     
    181182                case AW_INT:    error = vus->awar->write_int(vus->variable_int_value );      break; 
    182183                case AW_FLOAT:  error = vus->awar->write_float( vus->variable_float_value ); break; 
    183                 default: GB_warning("Unknown AWAR type"); break; 
     184#if defined(DEVEL_RALF) 
     185#warning missing implementation for AW_POINTER                      
     186#endif // DEVEL_RALF 
     187                default: 
     188                    gb_assert(0); 
     189                    GB_warning("Unknown AWAR type"); 
     190                    break; 
    184191            } 
    185192            break; 
     
    222229                    error = vus->awar->write_float( list_table->float_value ); 
    223230                    break; 
     231                case AW_POINTER: 
     232                    error = vus->awar->write_pointer( list_table->pointer_value ); 
     233                    break; 
    224234                default: 
     235                    gb_assert(0); 
    225236                    error = GB_export_error("Unknown AWAR type"); 
    226237                    break; 
     
    232243            break; 
    233244        default: 
     245            gb_assert(0); 
    234246            GB_warning("Unknown Widget Type"); 
    235247            break; 
     
    16871699 
    16881700void AW_window::insert_selection(AW_selection_list *selection_list, const char *displayed, const char *value) { 
    1689     if ( selection_list->variable_type != AW_STRING ) { 
     1701    if (selection_list->variable_type != AW_STRING) { 
    16901702        selection_type_mismatch("string"); 
    16911703        return; 
    16921704    } 
    16931705 
    1694     if ( selection_list->list_table ) { 
    1695         selection_list->last_of_list_table->next = new AW_select_table_struct( displayed, value ); 
     1706    if (selection_list->list_table) { 
     1707        selection_list->last_of_list_table->next = new AW_select_table_struct(displayed, value); 
    16961708        selection_list->last_of_list_table = selection_list->last_of_list_table->next; 
    16971709        selection_list->last_of_list_table->next = NULL; 
    16981710    }else { 
    1699         selection_list->last_of_list_table = selection_list->list_table = new AW_select_table_struct( displayed, value ); 
    1700     } 
    1701 } 
    1702  
    1703  
    1704 void AW_window::insert_default_selection( AW_selection_list *selection_list, const char *displayed, const char *value ) { 
    1705  
    1706     if ( selection_list->variable_type != AW_STRING ) { 
     1711        selection_list->last_of_list_table = selection_list->list_table = new AW_select_table_struct(displayed, value); 
     1712    } 
     1713} 
     1714 
     1715 
     1716void AW_window::insert_default_selection(AW_selection_list *selection_list, const char *displayed, const char *value) { 
     1717    if (selection_list->variable_type != AW_STRING) { 
    17071718        selection_type_mismatch("string"); 
    17081719        return; 
    17091720    } 
    1710     if ( selection_list->default_select ) { 
     1721    if (selection_list->default_select) { 
    17111722        delete selection_list->default_select; 
    17121723    } 
    1713     selection_list->default_select = new AW_select_table_struct( displayed, value ); 
    1714 } 
    1715  
    1716  
    1717 void AW_window::insert_selection( AW_selection_list *selection_list, const char *displayed, long value ) { 
    1718  
    1719     if ( selection_list->variable_type != AW_INT ) { 
     1724    selection_list->default_select = new AW_select_table_struct(displayed, value); 
     1725} 
     1726 
     1727#if defined(DEVEL_RALF) 
     1728#warning parameter value must be int32_t 
     1729#endif // DEVEL_RALF 
     1730void AW_window::insert_selection(AW_selection_list *selection_list, const char *displayed, long value) { 
     1731 
     1732    if (selection_list->variable_type != AW_INT) { 
    17201733        selection_type_mismatch("int"); 
    17211734        return; 
    17221735    } 
    1723     if ( selection_list->list_table ) { 
    1724         selection_list->last_of_list_table->next = new AW_select_table_struct( displayed, value ); 
     1736    if (selection_list->list_table) { 
     1737        selection_list->last_of_list_table->next = new AW_select_table_struct(displayed, value); 
    17251738        selection_list->last_of_list_table = selection_list->last_of_list_table->next; 
    17261739        selection_list->last_of_list_table->next = NULL; 
    17271740    }else { 
    1728         selection_list->last_of_list_table = selection_list->list_table = new AW_select_table_struct( displayed, value ); 
    1729     } 
    1730 } 
    1731  
    1732  
    1733 void AW_window::insert_default_selection( AW_selection_list *selection_list, const char *displayed, long value ) { 
    1734  
    1735     if ( selection_list->variable_type != AW_INT ) { 
     1741        selection_list->last_of_list_table = selection_list->list_table = new AW_select_table_struct(displayed, value); 
     1742    } 
     1743} 
     1744 
     1745#if defined(DEVEL_RALF) 
     1746#warning parameter value must be int32_t 
     1747#endif // DEVEL_RALF 
     1748void AW_window::insert_default_selection(AW_selection_list *selection_list, const char *displayed, long value) { 
     1749    if (selection_list->variable_type != AW_INT) { 
    17361750        selection_type_mismatch("int"); 
    17371751        return; 
    17381752    } 
    1739     if ( selection_list->default_select ) { 
     1753    if (selection_list->default_select) { 
    17401754        delete selection_list->default_select; 
    17411755    } 
    1742     selection_list->default_select = new AW_select_table_struct( displayed, value ); 
    1743 } 
    1744  
    1745  
    1746 void AW_window::clear_selection_list( AW_selection_list *selection_list ) { 
     1756    selection_list->default_select = new AW_select_table_struct(displayed, value); 
     1757} 
     1758 
     1759void AW_window::insert_selection(AW_selection_list * selection_list, const char *displayed, void *pointer) { 
     1760    if (selection_list->variable_type != AW_POINTER) { 
     1761        selection_type_mismatch("pointer"); 
     1762        return; 
     1763    } 
     1764    if (selection_list->list_table) { 
     1765        selection_list->last_of_list_table->next = new AW_select_table_struct(displayed, pointer); 
     1766        selection_list->last_of_list_table = selection_list->last_of_list_table->next; 
     1767        selection_list->last_of_list_table->next = NULL; 
     1768    }else { 
     1769        selection_list->last_of_list_table = selection_list->list_table = new AW_select_table_struct(displayed, pointer); 
     1770    } 
     1771} 
     1772 
     1773void AW_window::insert_default_selection(AW_selection_list * selection_list, const char *displayed, void *pointer) { 
     1774    if (selection_list->variable_type != AW_POINTER) { 
     1775        selection_type_mismatch("pointer"); 
     1776        return; 
     1777    } 
     1778    if (selection_list->default_select) { 
     1779        delete selection_list->default_select; 
     1780    } 
     1781    selection_list->default_select = new AW_select_table_struct(displayed, pointer); 
     1782} 
     1783 
     1784void AW_window::clear_selection_list(AW_selection_list *selection_list) { 
    17471785    AW_select_table_struct *list_table; 
    17481786    AW_select_table_struct *help; 
    17491787 
    17501788 
    1751     for ( help = selection_list->list_table; help; ) { 
     1789    for (help = selection_list->list_table; help; ) { 
    17521790        list_table = help; 
    17531791        help = list_table->next; 
    17541792        delete list_table; 
    17551793    } 
    1756     if ( selection_list->default_select ) { 
     1794    if (selection_list->default_select) { 
    17571795        delete selection_list->default_select; 
    17581796    } 
     
    18141852    AW_select_table_struct *list_table; 
    18151853 
    1816     int         pos = 0; 
    1817     char            *global_var_value = NULL; 
    1818     long            global_var_int_value; 
    1819     float           global_var_float_value; 
     1854    int pos = 0; 
    18201855 
    18211856    if (!selection_list->variable_name) return; // not connected to awar 
     
    18231858    pos = 0; 
    18241859    switch ( selection_list->variable_type ) { 
    1825         case AW_STRING: global_var_value = root->awar( selection_list->variable_name )->read_string(); 
     1860        case AW_STRING: { 
     1861            char *var_value = root->awar( selection_list->variable_name )->read_string(); 
    18261862            for ( list_table = selection_list->list_table; list_table; list_table = list_table->next ) { 
    1827                 if ( strcmp( global_var_value, list_table->char_value ) == 0 ) { 
     1863                if ( strcmp( var_value, list_table->char_value ) == 0 ) { 
    18281864                    found = true; 
    18291865                    break; 
     
    18311867                pos++; 
    18321868            } 
     1869            free(var_value); 
    18331870            break; 
    1834         case AW_INT:    global_var_int_value = root->awar( selection_list->variable_name )->read_int(); 
     1871        } 
     1872        case AW_INT: { 
     1873            int var_value = root->awar( selection_list->variable_name )->read_int(); 
    18351874            for ( list_table = selection_list->list_table; list_table; list_table = list_table->next ) { 
    1836                 if ( global_var_int_value == list_table->int_value ) { 
     1875                if ( var_value == list_table->int_value ) { 
    18371876                    found = true; 
    18381877                    break; 
     
    18411880            } 
    18421881            break; 
    1843         case AW_FLOAT:  global_var_float_value = root->awar( selection_list->variable_name )->read_float(); 
     1882        } 
     1883        case AW_FLOAT: { 
     1884            float var_value = root->awar( selection_list->variable_name )->read_float(); 
    18441885            for ( list_table = selection_list->list_table; list_table; list_table = list_table->next ) { 
    1845                 if ( global_var_float_value == list_table->float_value ) { 
     1886                if ( var_value == list_table->float_value ) { 
    18461887                    found = true; 
    18471888                    break; 
     
    18501891            } 
    18511892            break; 
     1893        } 
     1894        case AW_POINTER: { 
     1895            void *var_value = root->awar( selection_list->variable_name )->read_pointer(); 
     1896            for ( list_table = selection_list->list_table; list_table; list_table = list_table->next ) { 
     1897                if ( var_value == list_table->pointer_value ) { 
     1898                    found = true; 
     1899                    break; 
     1900                } 
     1901                pos++; 
     1902            } 
     1903            break; 
     1904        } 
    18521905        default: 
     1906            gb_assert(0); 
    18531907            GB_warning("Unknown AWAR type"); 
    18541908            break; 
     
    18731927        } 
    18741928 
    1875     }else{ 
    1876         AW_ERROR("Selection list '%s' has no default selection",selection_list->variable_name); 
    1877     } 
    1878     free(global_var_value); 
     1929    } 
     1930    else { 
     1931        AW_ERROR("Selection list '%s' has no default selection", selection_list->variable_name); 
     1932    } 
    18791933} 
    18801934 
     
    24312485            char  *var_name               = oms->variable_name; 
    24322486 
     2487#if defined(DEVEL_RALF) 
     2488#warning missing implementation for AW_POINTER 
     2489#endif // DEVEL_RALF 
     2490             
    24332491            switch ( oms->variable_type ) { 
    24342492                case AW_STRING: global_var_value       = root->awar( var_name )->read_string(); break; 
     
    24442502                    case AW_INT:    found_choice = (global_var_int_value   == active_choice->variable_int_value );      break; 
    24452503                    case AW_FLOAT:  found_choice = (global_var_float_value == active_choice->variable_float_value );    break; 
    2446                     default: GB_warning("Unknown AWAR type"); break; 
     2504                    default: 
     2505                        gb_assert(0); 
     2506                        GB_warning("Unknown AWAR type"); 
     2507                        break; 
    24472508                } 
    24482509                if (found_choice) break; 
     
    26982759            float  global_var_float_value = 0; 
    26992760 
     2761#if defined(DEVEL_RALF) 
     2762#warning missing implementation for AW_POINTER 
     2763#endif // DEVEL_RALF 
     2764             
    27002765            switch ( toggle_field_list->variable_type ) { 
    27012766                case AW_STRING: global_var_value       = root->awar( toggle_field_list->variable_name )->read_string(); break; 
    27022767                case AW_INT:    global_var_int_value   = root->awar( toggle_field_list->variable_name )->read_int();    break; 
    27032768                case AW_FLOAT:  global_var_float_value = root->awar( toggle_field_list->variable_name )->read_float();  break; 
    2704                 default: GB_warning("Unknown AWAR type"); break; 
     2769                default: 
     2770                    gb_assert(0); 
     2771                    GB_warning("Unknown AWAR type"); 
     2772                    break; 
    27052773            } 
    27062774 
     
    27112779                    case AW_INT:    found_toggle = (global_var_int_value == active_toggle->variable_int_value);       break; 
    27122780                    case AW_FLOAT:  found_toggle = (global_var_float_value == active_toggle->variable_float_value);   break; 
    2713                     default: GB_warning("Unknown AWAR type"); break; 
     2781                    default: 
     2782                        gb_assert(0); 
     2783                        GB_warning("Unknown AWAR type"); 
     2784                        break; 
    27142785                } 
    27152786                if (found_toggle) break; 
  • branches/stable_5.0/WINDOW/AW_nawar.cxx

    r6143 r6149  
    7878} 
    7979 
    80 long AW_awar::read_int(){ 
     80long AW_awar::read_int() { 
    8181    if (!gb_var) return 0; 
    8282    GB_transaction ta(gb_var); 
    8383    return (long)GB_read_int( gb_var ); 
    8484} 
    85 double AW_awar::read_float(){ 
     85double AW_awar::read_float() { 
    8686    if (!gb_var) return 0.0; 
    8787    GB_transaction ta(gb_var); 
    8888    return GB_read_float(gb_var); 
    8989} 
     90 
     91void *AW_awar::read_pointer() { 
     92    if (!gb_var) return NULL; 
     93    GB_transaction ta(gb_var); 
     94    return GB_read_pointer(gb_var); 
     95} 
     96 
    9097 
    9198#if defined(DUMP_AWAR_CHANGES) 
     
    116123    WRITE_SKELETON(write_int, long, "%li", GB_write_int) // defines rewrite_int 
    117124    WRITE_SKELETON(write_float, double, "%f", GB_write_float) // defines rewrite_float 
    118     WRITE_SKELETON(write_as_string, const char *, "%s", GB_write_as_string) // defines rewrite_as_string 
     125    WRITE_SKELETON(write_as_string, const char*, "%s", GB_write_as_string) // defines rewrite_as_string 
     126    WRITE_SKELETON(write_pointer, void*, "%p", GB_write_pointer) // defines rewrite_pointer 
    119127 
    120128#undef WRITE_SKELETON 
     
    146154// for string 
    147155AW_awar *AW_root::awar_string( const char *var_name, const char *default_value, AW_default default_file ) { 
    148     AW_awar *vs; 
    149     vs = (AW_awar *)GBS_read_hash(hash_table_for_variables, (char *)var_name); 
    150     if (vs) return vs;  /* already defined */ 
    151     default_file = aw_check_default_file(this->application_database,default_file,var_name); 
    152  
    153     vs = new AW_awar( AW_STRING, var_name, default_value, 0, default_file, this ); 
    154     GBS_write_hash( hash_table_for_variables, (char *)var_name, (long)vs ); 
     156    AW_awar *vs = (AW_awar *)GBS_read_hash(hash_table_for_variables, (char *)var_name); 
     157    if (!vs) { 
     158        default_file = aw_check_default_file(this->application_database,default_file,var_name); 
     159        vs           = new AW_awar(AW_STRING, var_name, default_value, 0, default_file, this); 
     160        GBS_write_hash(hash_table_for_variables, (char *)var_name, (long)vs); 
     161    } 
    155162    return vs; 
    156163} 
     
    158165 
    159166// for int 
    160 AW_awar *AW_root::awar_int( const char *var_name, long default_value, AW_default default_file ) { 
    161     AW_awar *vs; 
    162     vs = (AW_awar *)GBS_read_hash(hash_table_for_variables, (char *)var_name); 
    163     if (vs) return vs;  /* already defined */ 
    164     default_file = aw_check_default_file(this->application_database,default_file,var_name); 
    165  
    166     vs = new AW_awar( AW_INT, var_name, (char *)default_value, 0, default_file, this ); 
    167     GBS_write_hash( hash_table_for_variables, (char *)var_name, (long)vs ); 
     167AW_awar *AW_root::awar_int(const char *var_name, long default_value, AW_default default_file) { 
     168    AW_awar *vs = (AW_awar *)GBS_read_hash(hash_table_for_variables, (char *)var_name); 
     169    if (!vs) { 
     170        default_file = aw_check_default_file(this->application_database,default_file,var_name); 
     171        vs           = new AW_awar(AW_INT, var_name, (char *)default_value, 0, default_file, this); 
     172        GBS_write_hash(hash_table_for_variables, (char *)var_name, (long)vs); 
     173    } 
    168174    return vs; 
    169175} 
     
    171177 
    172178// for float 
    173 AW_awar *AW_root::awar_float( const char *var_name, float default_value, AW_default default_file ) { 
    174     AW_awar *vs; 
    175     vs = (AW_awar *)GBS_read_hash(hash_table_for_variables, (char *)var_name); 
    176     if (vs) return vs;  /* already defined */ 
    177     default_file = aw_check_default_file(this->application_database,default_file,var_name); 
    178  
    179     vs = new AW_awar( AW_FLOAT, var_name, "", (double)default_value, default_file, this ); 
    180     GBS_write_hash( hash_table_for_variables, (char *)var_name, (long)vs ); 
     179AW_awar *AW_root::awar_float(const char *var_name, float default_value, AW_default default_file) { 
     180    AW_awar *vs = (AW_awar *)GBS_read_hash(hash_table_for_variables, (char *)var_name); 
     181    if (!vs) { 
     182        default_file = aw_check_default_file(this->application_database,default_file,var_name); 
     183        vs           = new AW_awar(AW_FLOAT, var_name, "", (double)default_value, default_file, this); 
     184        GBS_write_hash(hash_table_for_variables, (char *)var_name, (long)vs); 
     185    } 
    181186    return vs; 
    182187} 
    183188 
    184 AW_awar *AW_root::awar_no_error( const char *var_name){ 
     189AW_awar *AW_root::awar_pointer(const char *var_name, void *default_value, AW_default default_file) { 
     190    AW_awar *vs = (AW_awar *)GBS_read_hash(hash_table_for_variables, (char *)var_name); 
     191    if (!vs) { 
     192        default_file = aw_check_default_file(this->application_database,default_file,var_name); 
     193        vs           = new AW_awar(AW_POINTER, var_name, (const char *)default_value, NULL, default_file, this); 
     194        GBS_write_hash(hash_table_for_variables, (char *)var_name, (long)vs); 
     195    } 
     196    return vs; 
     197} 
     198 
     199AW_awar *AW_root::awar_no_error(const char *var_name){ 
    185200    AW_awar *vs = (AW_awar *)GBS_read_hash(hash_table_for_variables, (char *)var_name); 
    186201    return vs; 
    187202} 
    188203 
    189 AW_awar *AW_root::awar( const char *var_name){ 
     204AW_awar *AW_root::awar(const char *var_name){ 
    190205    AW_awar *vs = (AW_awar *)GBS_read_hash(hash_table_for_variables, (char *)var_name); 
    191206    if (vs) return vs;  /* already defined */ 
     
    492507    if (!pntr->pointer) return; 
    493508    switch(variable_type) { 
    494         case AW_STRING: 
    495             this->get((char **)pntr->pointer);break; 
    496         case AW_FLOAT: 
    497             this->get((double *)pntr->pointer);break; 
    498         case AW_INT: 
    499             this->get((long *)pntr->pointer);break; 
     509        case AW_STRING: this->get((char **)pntr->pointer);break; 
     510        case AW_FLOAT:  this->get((double *)pntr->pointer);break; 
     511        case AW_INT:    this->get((long *)pntr->pointer);break; 
    500512        default: 
     513            gb_assert(0); 
    501514            GB_warning("Unknown awar type"); 
     515            break; 
    502516    } 
    503517} 
     
    523537 
    524538    this->awar_name = strdup(var_name); 
    525     this->root = rooti; 
    526     GBDATA *gb_def = GB_search((GBDATA *)default_file, var_name,GB_FIND); 
    527     if ( gb_def ) {                                                  // belege Variable mit Datenbankwert 
    528         AW_VARIABLE_TYPE gbtype; 
    529         gbtype = (AW_VARIABLE_TYPE) GB_read_type( gb_def ); 
    530         if ( gbtype != var_type ) { 
    531             GB_warningf("Wrong Awar type %s\n",var_name); 
    532             GB_delete( gb_def ); 
     539    this->root      = rooti; 
     540    GBDATA *gb_def  = GB_search((GBDATA *)default_file, var_name,GB_FIND); 
     541 
     542    GB_TYPES wanted_gbtype = (GB_TYPES)var_type; 
     543 
     544    if ( gb_def ) {                                 // belege Variable mit Datenbankwert 
     545        GB_TYPES gbtype = GB_read_type(gb_def); 
     546 
     547        if (gbtype != wanted_gbtype) { 
     548            GB_warningf("Existing awar '%s' has wrong type (%i instead of %i) - recreating\n", 
     549                        var_name, int(gbtype), int(wanted_gbtype)); 
     550            GB_delete(gb_def); 
    533551            gb_def = 0; 
    534552        } 
    535553    } 
    536     if (!gb_def) {             // belege Variable mit Programmwert 
    537         gb_def = GB_search( (GBDATA *)default_file, var_name, (GB_TYPES)var_type); 
    538  
    539         switch ( var_type ) { 
     554 
     555    if (!gb_def) {                                  // belege Variable mit Programmwert 
     556        gb_def = GB_search( (GBDATA *)default_file, var_name, wanted_gbtype); 
     557 
     558        switch (var_type) { 
    540559            case AW_STRING: 
    541560#if defined(DUMP_AWAR_CHANGES) 
    542561                fprintf(stderr, "creating awar_string '%s' with default value '%s'\n", var_name, (char*)var_value); 
    543562#endif // DUMP_AWAR_CHANGES 
    544                 GB_write_string( gb_def, (char *)var_value ); 
    545                 break; 
     563                GB_write_string(gb_def, (char *)var_value); 
     564                break; 
     565                 
    546566            case AW_INT: 
    547567#if defined(DUMP_AWAR_CHANGES) 
    548568                fprintf(stderr, "creating awar_int '%s' with default value '%li'\n", var_name, (long)var_value); 
    549569#endif // DUMP_AWAR_CHANGES 
    550                 GB_write_int( gb_def, (long)var_value ); 
    551                 break; 
     570                GB_write_int(gb_def, (long)var_value); 
     571                break; 
     572                 
    552573            case AW_FLOAT: 
    553574#if defined(DUMP_AWAR_CHANGES) 
    554575                fprintf(stderr, "creating awar_float '%s' with default value '%f'\n", var_name, (double)var_double_value); 
    555576#endif // DUMP_AWAR_CHANGES 
    556                 GB_write_float( gb_def, (double)var_double_value ); 
    557                 break; 
     577                GB_write_float(gb_def, (double)var_double_value); 
     578                break; 
     579 
     580            case AW_POINTER:  
     581#if defined(DUMP_AWAR_CHANGES) 
     582                fprintf(stderr, "creating awar_pointer '%s' with default value '%p'\n", var_name, (void*)var_value); 
     583#endif // DUMP_AWAR_CHANGES 
     584                GB_write_pointer(gb_def, (void*)var_value); 
     585                break; 
     586                 
    558587            default: 
    559588                GB_warningf("AWAR '%s' cannot be created because of disallowed type",var_name); 
     
    593622    if (gb_default) { 
    594623        GB_no_transaction(gb_default); 
     624 
     625        GBDATA *gb_tmp = GB_search(gb_default, "tmp", GB_CREATE_CONTAINER); 
     626        GB_set_temporary(gb_tmp); 
    595627#if defined(DEBUG) 
    596628        AWT_announce_db_to_browser(gb_default, GBS_global_string("Properties (%s)", default_name)); 
     
    602634        if (!shown_name) shown_name = default_name; 
    603635 
    604         GBK_terminatef(GBS_global_string("Error loading properties '%s': %s", shown_name, error)); 
     636        GBK_terminatef("Error loading properties '%s': %s", shown_name, error); 
    605637    } 
    606638    return (AW_default) gb_default; 
     
    626658AW_error *AW_root::save_default(AW_default aw_default, const char *file_name) 
    627659{ 
    628     GBDATA *gb_tmp; 
    629660    GBDATA *gb_main = GB_get_root((GBDATA *)aw_default); 
    630661    GB_push_transaction(gb_main); 
    631     gb_tmp = GB_entry(gb_main,"tmp"); 
    632     if (gb_tmp) GB_set_temporary(gb_tmp); 
    633662    aw_update_awar_window_geometry(this); 
    634663    GB_pop_transaction(gb_main); 
  • branches/stable_5.0/WINDOW/AW_window.cxx

    r6126 r6149  
    250250    displayed = copy_string(displayedi); 
    251251    float_value = valuei; 
     252} 
     253AW_select_table_struct::AW_select_table_struct(const char *displayedi, void *pointer) { 
     254    memset((char *)this, 0, sizeof(AW_select_table_struct)); 
     255    displayed = copy_string(displayedi); 
     256    pointer_value = pointer; 
    252257} 
    253258AW_select_table_struct::~AW_select_table_struct(void) { 
  • branches/stable_5.0/WINDOW/aw_root.hxx

    r6127 r6149  
    6363 
    6464typedef enum { 
    65     AW_NONE   = 0, 
    66     AW_BIT    = 1, 
    67     AW_BYTE   = 2, 
    68     AW_INT    = 3, 
    69     AW_FLOAT  = 4, 
    70     // 5 is unused 
    71     AW_BITS   = 6, 
     65    AW_NONE    = 0, 
     66    AW_BIT     = 1, 
     67    AW_BYTE    = 2, 
     68    AW_INT     = 3, 
     69    AW_FLOAT   = 4, 
     70    AW_POINTER = 5,  
     71    AW_BITS    = 6, 
    7272    // 7 is unused 
    73     AW_BYTES  = 8, 
    74     AW_INTS   = 9, 
    75     AW_FLOATS = 10, 
    76     AW_STRING = 12, 
     73    AW_BYTES   = 8, 
     74    AW_INTS    = 9, 
     75    AW_FLOATS  = 10, 
     76    AW_STRING  = 12, 
    7777    // 13 is reserved (GB_STRING_SHRT) 
    7878    // 14 is unused 
    79     AW_DB     = 15, 
    80      
     79    AW_DB      = 15, 
     80 
    8181    // keep AW_VARIABLE_TYPE consistent with GB_TYPES 
    8282    // see ../ARBDB/arbdb.h@sync_GB_TYPES_AW_VARIABLE_TYPE 
     
    219219    AW_awar *awar_no_error(const char *awar); 
    220220 
    221     AW_awar *awar_string(const char *var_name, const char *default_value = "", AW_default default_file = AW_ROOT_DEFAULT); 
    222     AW_awar *awar_int   (const char *var_name, long default_value = 0,         AW_default default_file = AW_ROOT_DEFAULT); 
    223     AW_awar *awar_float (const char *var_name, float default_value = 0.0,      AW_default default_file = AW_ROOT_DEFAULT); 
     221    AW_awar *awar_string (const char *var_name, const char *default_value = "", AW_default default_file = AW_ROOT_DEFAULT); 
     222    AW_awar *awar_int    (const char *var_name, long default_value = 0,         AW_default default_file = AW_ROOT_DEFAULT); 
     223    AW_awar *awar_float  (const char *var_name, float default_value = 0.0,      AW_default default_file = AW_ROOT_DEFAULT); 
     224    AW_awar *awar_pointer(const char *var_name, void *default_value = NULL,     AW_default default_file = AW_ROOT_DEFAULT); 
    224225 
    225226    AW_awar *label_is_awar(const char *label); // returns awar, if label refers to one (used by buttons, etc.) 
     
    346347    const char *read_char_pntr(); 
    347348    char       *read_as_string(); 
     349    long        read_int(); 
    348350    double      read_float(); 
    349     long        read_int(); 
     351    void       *read_pointer(); 
    350352 
    351353    GB_ERROR write_string(const char *aw_string); 
     
    353355    GB_ERROR write_int(long aw_int); 
    354356    GB_ERROR write_float(double aw_double); 
     357    GB_ERROR write_pointer(void *aw_pointer); 
     358 
    355359    GB_ERROR write_as(char *aw_value) { return write_as_string(aw_value);}; 
    356360 
     
    360364    GB_ERROR rewrite_int(long aw_int); 
    361365    GB_ERROR rewrite_float(double aw_double); 
     366    GB_ERROR rewrite_pointer(void *aw_pointer); 
     367     
    362368    GB_ERROR rewrite_as(char *aw_value) { return rewrite_as_string(aw_value);}; 
    363369 
  • branches/stable_5.0/WINDOW/aw_window.hxx

    r6011 r6149  
    502502    void insert_selection(  AW_selection_list * selection_list, const char *displayed, float value ); 
    503503    void insert_default_selection(  AW_selection_list * selection_list, const char *displayed, float value ); 
     504    // for pointers (only allowed if selection list uses a tmp-awars) 
     505    void insert_selection(  AW_selection_list * selection_list, const char *displayed, void *pointer ); 
     506    void insert_default_selection(  AW_selection_list * selection_list, const char *displayed, void *pointer ); 
    504507 
    505508    void delete_selection_from_list(  AW_selection_list * selection_list, const char *displayed_string ); 
  • branches/stable_5.0/WINDOW/aw_window_Xm.hxx

    r5951 r6149  
    158158 
    159159    AW_select_table_struct( const char *displayedi, const char *value ); 
    160     ~AW_select_table_struct( void ); 
    161160    AW_select_table_struct( const char *displayedi, long value ); 
    162161    AW_select_table_struct( const char *displayedi, float value ); 
     162    AW_select_table_struct( const char *displayedi, void *pointer ); 
     163 
     164    ~AW_select_table_struct( void ); 
    163165 
    164166    static char *copy_string(const char *str); 
    165167 
    166     char                   *displayed; 
    167     char                   *char_value; 
    168     long                    int_value; 
    169     float                   float_value; 
    170     int                     is_selected; // internal use only 
     168    char *displayed; 
     169 
     170#if defined(DEVEL_RALF) 
     171#warning make the following variables a union 
     172#endif // DEVEL_RALF 
     173    char  *char_value; 
     174    long   int_value; 
     175    float  float_value; 
     176    void  *pointer_value; 
     177 
     178    int is_selected;                                // internal use only 
     179 
    171180    AW_select_table_struct *next; 
    172181};