Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d0a5628072 |
95
otp.c
95
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
|
||||
|
||||
Reference in New Issue
Block a user