diff --git a/otp.c b/otp.c index 99c0266..6b630e0 100644 --- a/otp.c +++ b/otp.c @@ -817,9 +817,27 @@ int list_available_pads(void) { struct dirent* entry; int count = 0; + // Get current default pad path for comparison + char* current_default = get_default_pad_path(); + char default_pad_checksum[65] = ""; + + if (current_default) { + // Extract checksum from default pad path + char* filename = strrchr(current_default, '/'); + if (!filename) filename = current_default; + else filename++; // Skip the '/' + + // Extract checksum (remove .pad extension) + if (strlen(filename) >= 68 && strstr(filename, ".pad")) { + strncpy(default_pad_checksum, filename, 64); + default_pad_checksum[64] = '\0'; + } + free(current_default); + } + printf("\nAvailable pads:\n"); - printf("%-4s %-20s %-12s %-12s %-8s\n", "No.", "ChkSum", "Size", "Used", "% Used"); - printf("%-4s %-20s %-12s %-12s %-8s\n", "---", "-------------------", "----------", "----------", "------"); + printf("%-4s %-7s %-20s %-12s %-12s %-8s\n", "No.", "Default", "ChkSum", "Size", "Used", "% Used"); + printf("%-4s %-7s %-20s %-12s %-12s %-8s\n", "---", "-------", "-------------------", "----------", "----------", "------"); while ((entry = readdir(dir)) != NULL) { if (strstr(entry->d_name, ".pad") && strlen(entry->d_name) == 68) { @@ -828,6 +846,10 @@ int list_available_pads(void) { strncpy(chksum, entry->d_name, 64); chksum[64] = '\0'; + // Check if this is the default pad + int is_default = (strlen(default_pad_checksum) > 0 && + strncmp(chksum, default_pad_checksum, 64) == 0); + // Get pad file size char full_path[1024]; // Increased buffer size to accommodate longer paths snprintf(full_path, sizeof(full_path), "%s/%s", current_pads_dir, entry->d_name); @@ -865,7 +887,7 @@ int list_available_pads(void) { // Calculate percentage double percentage = (double)used_bytes / st.st_size * 100.0; - printf("%-4d %-20.16s %-12s %-12s %.1f%%\n", count, chksum, size_str, used_str, percentage); + printf("%-4d %-7s %-20.16s %-12s %-12s %.1f%%\n", count, is_default ? "*" : "", chksum, size_str, used_str, percentage); } } } @@ -2627,7 +2649,41 @@ int load_preferences(void) { FILE* file = fopen(preferences_file, "r"); if (!file) { - return 0; // No preferences file, use defaults + // No preferences file exists - create it and set first pad as default + + // Create .otp directory if it doesn't exist + struct stat st = {0}; + if (stat(preferences_dir, &st) == -1) { + if (mkdir(preferences_dir, 0755) != 0) { + return 1; + } + } + + // Find the first available pad to set as default + DIR* dir = opendir(current_pads_dir); + if (dir) { + struct dirent* entry; + char first_pad_path[1024]; + int found_pad = 0; + + while ((entry = readdir(dir)) != NULL && !found_pad) { + if (strstr(entry->d_name, ".pad") && strlen(entry->d_name) == 68) { + // Found a pad file - construct full path + snprintf(first_pad_path, sizeof(first_pad_path), "%s/%s", current_pads_dir, entry->d_name); + strncpy(default_pad_path, first_pad_path, sizeof(default_pad_path) - 1); + default_pad_path[sizeof(default_pad_path) - 1] = '\0'; + found_pad = 1; + } + } + closedir(dir); + + // Create the preferences file with the default pad + if (found_pad) { + save_preferences(); + } + } + + return 0; // Successfully initialized } char line[1024]; @@ -3501,18 +3557,41 @@ int handle_pads_menu(void) { prefixes[i][prefix_lengths[i]] = '\0'; } - // Display pads with minimal prefixes underlined + // Display pads with minimal prefixes underlined and default indicator printf("\nAvailable pads:\n"); - printf("%-8s %-12s %-12s %-12s %-8s\n", "ChkSum", "Dir", "Size", "Used", "% Used"); - printf("%-8s %-12s %-12s %-12s %-8s\n", "--------", "------------", "----------", "----------", "------"); + printf("%-7s %-8s %-12s %-12s %-12s %-8s\n", "Default", "ChkSum", "Dir", "Size", "Used", "% Used"); + printf("%-7s %-8s %-12s %-12s %-12s %-8s\n", "-------", "--------", "------------", "----------", "----------", "------"); + + // Get current default pad path for comparison + char* current_default = get_default_pad_path(); + char default_pad_checksum[65] = ""; + + if (current_default) { + // Extract checksum from default pad path + char* filename = strrchr(current_default, '/'); + if (!filename) filename = current_default; + else filename++; // Skip the '/' + + // Extract checksum (remove .pad extension) + if (strlen(filename) >= 68 && strstr(filename, ".pad")) { + strncpy(default_pad_checksum, filename, 64); + default_pad_checksum[64] = '\0'; + } + free(current_default); + } for (int i = 0; i < pad_count; i++) { + // Check if this is the default pad + int is_default = (strlen(default_pad_checksum) > 0 && + strncmp(pads[i].chksum, default_pad_checksum, 64) == 0); + // Display first 8 characters of checksum with prefix underlined char checksum_8char[9]; strncpy(checksum_8char, pads[i].chksum, 8); checksum_8char[8] = '\0'; - printf("\033[4m%.*s\033[0m%s %-12s %-12s %-12s %.1f%%\n", + printf("%-7s \033[4m%.*s\033[0m%s %-12s %-12s %-12s %.1f%%\n", + is_default ? "*" : "", // Default indicator prefix_lengths[i], checksum_8char, // Underlined prefix checksum_8char + prefix_lengths[i], // Rest of 8-char checksum pads[i].location, // Use the stored location info