/****************************************************************************** * string_to_dbl_array_fmt() * Convert a formatted string to an array of doubles * * Parameters * --------- * - a formatted string * - nrow is number of rows in converted arrays * - ncols is the number of columns * * Returns * ------- * - new array * * Notes * ----- * This will take a string with formatting and convert it to an arrays * Semi-colons are used to deliniate rows of an array. ******************************************************************************/ double *string_to_dbl_array_fmt(char *str, int *nrow, int *ncol ) { int n,j,k; double *arr; char *temp; char **strarr; //char *dummy; if (str == NULL){ *nrow = 0; *ncol = 0; return (NULL); } strarr = split_string(str, ";", nrow, DEFAULT); strarr[0] = clean_string(strarr[0], NOCOPY); *ncol = num_words_in_string(strarr[0]); for (j=1;j<*nrow;j++){ strarr[j] = clean_string(strarr[j], NOCOPY); if( *ncol != num_words_in_string(strarr[j])){ buff_print("Error: rows and cols dont match\n"); *nrow = 1; *ncol = 1; clear_str_arr(strarr); return (NULL); } } n = (*nrow) * (*ncol); if (n == 0) { clear_str_arr(strarr); return( (double *)NULL ); } arr = new_array(n, double); n = 0; for(j=0;j<*nrow;j++){ for(k=0;k<*ncol;k++){ temp = get_word_from_string(strarr[j],k+1); arr[n] = atof(temp); free(temp); n++; } } clear_str_arr(strarr); return(&arr[0]); }
char *get_line_default(char *prompt, char *default_val) { char *temp1=NULL, *temp2=NULL, *ret; int len; buff_print("%s (%s) >", prompt, default_val); temp1 = read_line(stdin); temp2 = strip_white_space(temp1); free(temp1); len = string_len(temp2); if (len == 0) { ret = copy_string( default_val ); free(temp2); }else{ ret = temp2 ; } return(ret); }
static void pageList(void) { char buff[(LCDCOL - 3) * 2]; char buff2[LCDCOL * 2]; uint8_t currs; uint8_t fstart; dispStaticDraw(0); //рисуем статику switch (fileData[0]) { case T_FOLDER: //обычная папка.. if ((brCrumbs[level][1] & LCDINVBITS)== ((fileData[2]) & LCDINVBITS))currs = (fileData[2]) & LCDBITS;//Это максимальное положение курсора на последней странице else currs = LCDBITS; fstart = fileData[1] + (brCrumbs[level][1] & LCDINVBITS);//номер файла для старта вывода. for (uint8_t i = 0; i <= currs; i++) {//пишем из массива для статических папок text_print(i + 1, 0, (PGM_P) pgm_read_word(&fileNames[i + fstart]), ((brCrumbs[level][1] & LCDBITS) == (i)) * 0xFF); } break; case T_DFOLDER: //динамическая папка if ((brCrumbs[level][1] & LCDINVBITS) == ((fileData[2]) & LCDINVBITS)) currs = (fileData[2]) & LCDBITS;//Это максимальное положение курсора на последней странице else currs = LCDBITS; strncpy_P(buff, (char*) pgm_read_word(&(fileNames[fileData[1]])), sizeof(buff));//читаем общее название buff[sizeof(buff) - 1] = '\0'; for (uint8_t i = 0; i <= currs; i++) { snprintf(buff2, sizeof(buff2), "%s %d", buff, (brCrumbs[level][1] & LCDINVBITS) + i); buff_print(i + 1, 0, buff2, ((brCrumbs[level][1] & LCDBITS) == (i)) * 0xFF); } break; case T_SFOLDER: //папка выбора параметра { uint8_t config_folder_view = pgm_read_byte( &fileStruct[FILEREW * fileData[1] + 1]);//читаем байт сдвига. uint8_t config_folder_data = ConfigRead( /*brCrumbs[level][0]+*/config_folder_view);//чтение значения выбора if (config_folder_data > fileData[2]) config_folder_data = fileData[2]; if (config_folder_view < 0) config_folder_view = 0; if (brCrumbs[level][2] == 0) { brCrumbs[level][1] = config_folder_data;//ставим курсор в выбранную позицию. brCrumbs[level][2] = 1; } if ((brCrumbs[level][1] & LCDINVBITS) == ((fileData[2]) & LCDINVBITS)) currs = (fileData[2]) & LCDBITS;//Это максимальное положение курсора на последней странице else currs = LCDBITS; fstart = fileData[1] + (brCrumbs[level][1] & LCDINVBITS);//номер файла для старта вывода. for (uint8_t i = 0; i <= currs; i++) { //пишем из массива для статических папок text_print(i + 1, 0, (PGM_P) pgm_read_word(&fileNames[i + fstart]), ((brCrumbs[level][1] & LCDBITS) == (i)) * 0xFF); } } break; } dispHead(header); // stringSelect(); }
char *get_line(char *prompt) { buff_print("%s", prompt); return (read_line(stdin)); }