/** * 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; }
/** * 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; }
ClockWidget::ClockWidget(const QRectF &rect) : PlexyDesk::DesktopWidget(rect) { setLabelName ("Clock"); preRenderClockImages(); }