Esempio n. 1
0
/**
 * Add label to repository.
 * \param [in,out] repository Label repository.
 * \param [in]     name     Name.
 * \param [in]     logical  Logical address.
 * \param [in]     page     Memory page.
 */
int addLabel(LabelRepository* repository, const char* name, uint16_t logical, uint8_t page) {
    char *dummy;
    if(findLabel(repository, logical, page, &dummy)) {
        if(strcmp(name, dummy)) {
        //    return 0;
        }
        return  1;
    }

    /* Expand arrays if necessary */
    if(repository->last >= repository->size) {
        Label *ptr;
        repository->size += LABEL_ARRAY_INC;
        
        ptr = (Label*)realloc(repository->labels, repository->size * sizeof(Label));
        if(NULL == ptr) {
            deleteLabelRepository(repository);
            return 0;
        }
        repository->labels = ptr;
    }
    
    /* Push addresses */
    repository->labels[repository->last].logical = logical;
    repository->labels[repository->last].page    = page;
    
    /* Push name */
    if(0 == setLabelName(repository, &repository->labels[repository->last], name)) {
        deleteLabelRepository(repository);
        return 0;
    }

    ++repository->last;
    return 1;
}
Esempio n. 2
0
/**
 * Delete labels
 * \param [in]  repository  Label repository.
 * \param [in]  first       Start of the logical address range.
 * \param [in]  end         End of the logical address range.
 * \param [in]  page        Memory page.
 */
int deleteLabels(LabelRepository* repository, uint16_t first, uint16_t end, uint8_t page) {
    size_t i;
    for(i=0; i<repository->last; i++) {
        if( (repository->labels[i].page == page) &&
            (repository->labels[i].logical >= first) && 
            (repository->labels[i].logical < end) ) {
            if(repository->last) {
                repository->last--;
                memcpy(&repository->labels[i], &repository->labels[repository->last], sizeof(Label));
            }
        }
    }
    int ret = 1;
    char *tmp = repository->nameBuffer;
    repository->nameBufferLen = 0;
    repository->nameBuffer    = NULL;
    for(i=0; ret && (i<repository->last); i++) {
        ret = setLabelName(repository, &repository->labels[i], tmp + repository->labels[i].name);
    }    
    if(tmp) {
        free(tmp);
    }
    return ret;
}
Esempio n. 3
0
ClockWidget::ClockWidget(const QRectF &rect)
    : PlexyDesk::DesktopWidget(rect)
{
    setLabelName ("Clock");
    preRenderClockImages();
}