From 5cab701dbad2994435b928843c5de3dcbe78ca6c Mon Sep 17 00:00:00 2001 From: marcusDenslow Date: Sat, 3 May 2025 15:50:41 +0200 Subject: [PATCH] idek --- grep.c | 1124 ++++++++++++++++++++++++++++++++++++++++++++++++++++- grep.h | 11 + grep.o | Bin 4952 -> 48848 bytes shell | Bin 282776 -> 311760 bytes test.txt | 5 + weather.c | 87 ++--- weather.o | Bin 10064 -> 5072 bytes 7 files changed, 1156 insertions(+), 71 deletions(-) create mode 100644 test.txt diff --git a/grep.c b/grep.c index fca71ea..5733a04 100644 --- a/grep.c +++ b/grep.c @@ -1,6 +1,6 @@ /** * grep.c - * Simple implementation of text searching for Linux + * Custom implementation of text searching for Linux using Boyer-Moore algorithm */ #include "grep.h" @@ -13,42 +13,1130 @@ #include #include #include +#include +#include +#include // For getting terminal size with TIOCGWINSZ +#include // For terminal control +#include // For malloc, free + +#define MAX_PATTERN_LENGTH 1024 +#define MAX_LINE_LENGTH 4096 +#define MAX_FILE_SIZE (50 * 1024 * 1024) // 50MB max file size + +// Function to determine if a path is a directory +bool is_directory(const char *path) { + struct stat statbuf; + if (stat(path, &statbuf) != 0) + return false; + return S_ISDIR(statbuf.st_mode); +} + +// Function to determine if a file is text file +bool is_text_file(const char *path) { + FILE *file = fopen(path, "r"); + if (!file) return false; + + // Read first 1024 bytes + unsigned char buffer[1024]; + size_t bytes_read = fread(buffer, 1, sizeof(buffer), file); + fclose(file); + + if (bytes_read == 0) return true; // Empty files are considered text + + // Check for binary content + for (size_t i = 0; i < bytes_read; i++) { + // If we find a null byte or too many non-printable characters, consider it binary + if (buffer[i] == 0 || (buffer[i] < 32 && buffer[i] != '\n' && buffer[i] != '\r' && buffer[i] != '\t')) { + return false; + } + } + + return true; +} + +// Function to precompute the Boyer-Moore bad character table +void compute_bad_char_table(const char *pattern, int pattern_len, int bad_char[256]) { + int i; + + // Initialize all occurrences as -1 + for (i = 0; i < 256; i++) + bad_char[i] = -1; + + // Fill the actual value of last occurrence of a character + for (i = 0; i < pattern_len; i++) + bad_char[(unsigned char)pattern[i]] = i; +} + +// Function to precompute the Boyer-Moore good suffix table +void compute_good_suffix_table(const char *pattern, int pattern_len, int suffix[MAX_PATTERN_LENGTH], bool prefix[MAX_PATTERN_LENGTH]) { + int i, j; + + // Initialize suffix and prefix arrays + for (i = 0; i < pattern_len; i++) { + suffix[i] = -1; + prefix[i] = false; + } + + // Case 1: pattern[i+1...m-1] matches suffix of pattern[0...m-1] + for (i = 0; i < pattern_len - 1; i++) { + j = i; + int k = 0; + + // While matching suffix + while (j >= 0 && pattern[j] == pattern[pattern_len - 1 - k]) { + j--; + k++; + suffix[k] = j + 1; + } + + // If we found a suffix that starts at position 0 + if (j == -1) prefix[k] = true; + } +} + +// Function to calculate the shift for the Boyer-Moore algorithm +int get_shift(int bad_char[256], int suffix[MAX_PATTERN_LENGTH], bool prefix[MAX_PATTERN_LENGTH], + int pattern_len, int j, char c) { + // Case 1: Bad character rule + int bad_char_shift = j - bad_char[(unsigned char)c]; + + // Case 2: Good suffix rule + int good_suffix_shift = 0; + + if (j < pattern_len - 1) { + int k = pattern_len - 1 - j; + + if (suffix[k] != -1) { + // Case 2a: Matching suffix + good_suffix_shift = j + 1 - suffix[k]; + } else { + // Case 2b: Matching prefix of pattern + for (int r = j + 2; r <= pattern_len - 1; r++) { + if (prefix[pattern_len - r]) { + good_suffix_shift = r; + break; + } + } + // If no matching prefix found + if (good_suffix_shift == 0) + good_suffix_shift = pattern_len; + } + } + + return (bad_char_shift > good_suffix_shift) ? bad_char_shift : good_suffix_shift; +} + +// Boyer-Moore search in a string +bool boyer_moore_search(const char *text, int text_len, const char *pattern, int pattern_len, + int *match_pos, bool ignore_case) { + if (pattern_len > MAX_PATTERN_LENGTH) { + fprintf(stderr, "Pattern too long (max %d characters)\n", MAX_PATTERN_LENGTH); + return false; + } + + if (pattern_len == 0) return false; + + int bad_char[256]; + int suffix[MAX_PATTERN_LENGTH]; + bool prefix[MAX_PATTERN_LENGTH]; + + // Precompute tables + compute_bad_char_table(pattern, pattern_len, bad_char); + compute_good_suffix_table(pattern, pattern_len, suffix, prefix); + + int s = 0; // Starting position for the current attempt + + while (s <= text_len - pattern_len) { + int j = pattern_len - 1; + + // Compare pattern with text from right to left + while (j >= 0) { + char text_char = text[s + j]; + char pattern_char = pattern[j]; + + if (ignore_case) { + text_char = tolower(text_char); + pattern_char = tolower(pattern_char); + } + + if (text_char != pattern_char) + break; + j--; + } + + // If the pattern was found + if (j < 0) { + *match_pos = s; + return true; + } + + // Shift pattern according to the Boyer-Moore rules + s += get_shift(bad_char, suffix, prefix, pattern_len, j, + ignore_case ? tolower(text[s + j]) : text[s + j]); + } + + return false; // Pattern not found +} + +// Function to process a single file +int process_file(const char *file_path, const char *pattern, bool show_line_numbers, + bool ignore_case, bool fuzzy_match) { + FILE *file = fopen(file_path, "r"); + if (!file) { + fprintf(stderr, "Error: Unable to open file %s\n", file_path); + return 0; + } + + // Check file size + fseek(file, 0, SEEK_END); + long file_size = ftell(file); + rewind(file); + + if (file_size > MAX_FILE_SIZE) { + fprintf(stderr, "Error: File %s is too large (max 50MB)\n", file_path); + fclose(file); + return 0; + } + + // For fuzzy matching, we use a simpler approach + // (in a real implementation, you'd want a proper fuzzy algorithm) + + char line[MAX_LINE_LENGTH]; + int line_number = 0; + int matches_found = 0; + int pattern_len = strlen(pattern); + + while (fgets(line, MAX_LINE_LENGTH, file)) { + line_number++; + int line_len = strlen(line); + + // Remove newline character at the end if present + if (line[line_len - 1] == '\n') { + line[line_len - 1] = '\0'; + line_len--; + } + + int match_pos = 0; + bool match_found = false; + + if (fuzzy_match) { + // Simple fuzzy matching - allows for character skipping + // For a real implementation, use Levenshtein distance or another algorithm + char *line_ptr = line; + char *pattern_ptr = (char *)pattern; + int matched_chars = 0; + + while (*line_ptr && *pattern_ptr) { + char line_char = ignore_case ? tolower(*line_ptr) : *line_ptr; + char pattern_char = ignore_case ? tolower(*pattern_ptr) : *pattern_ptr; + + if (line_char == pattern_char) { + matched_chars++; + pattern_ptr++; + } + line_ptr++; + } + + // If we've matched at least 70% of the pattern's characters + match_found = (*pattern_ptr == '\0' || + (matched_chars >= pattern_len * 0.7)); + } else { + // Exact matching using Boyer-Moore + match_found = boyer_moore_search(line, line_len, pattern, pattern_len, + &match_pos, ignore_case); + } + + if (match_found) { + matches_found++; + + // Print the file name only once if multiple matches + if (matches_found == 1) { + printf("%s%s%s:\n", ANSI_COLOR_CYAN, file_path, ANSI_COLOR_RESET); + } + + // Print line number if requested + if (show_line_numbers) { + printf(" %s%d:%s ", ANSI_COLOR_GREEN, line_number, ANSI_COLOR_RESET); + } else { + printf(" "); + } + + // Print the matching line, highlighting the match + if (!fuzzy_match) { + // Print the line with the match highlighted + for (int i = 0; i < line_len; i++) { + if (i == match_pos) { + printf("%s", ANSI_COLOR_RED); + for (int j = 0; j < pattern_len; j++) { + putchar(line[i + j]); + } + printf("%s", ANSI_COLOR_RESET); + i += pattern_len - 1; + } else { + putchar(line[i]); + } + } + } else { + // For fuzzy matches, just print the line + printf("%s", line); + } + printf("\n"); + } + } + + fclose(file); + return matches_found; +} + +// Function to recursively search directories +int search_directory(const char *dir_path, const char *pattern, bool show_line_numbers, + bool ignore_case, bool recursive, bool fuzzy_match) { + DIR *dir = opendir(dir_path); + if (!dir) { + fprintf(stderr, "Error: Unable to open directory %s\n", dir_path); + return 0; + } + + struct dirent *entry; + int total_matches = 0; + + while ((entry = readdir(dir)) != NULL) { + // Skip . and .. + if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) + continue; + + char path[PATH_MAX]; + snprintf(path, PATH_MAX, "%s/%s", dir_path, entry->d_name); + + if (is_directory(path)) { + // If recursive flag is set, search subdirectories + if (recursive) { + total_matches += search_directory(path, pattern, show_line_numbers, + ignore_case, recursive, fuzzy_match); + } + } else { + // Only process text files + if (is_text_file(path)) { + total_matches += process_file(path, pattern, show_line_numbers, + ignore_case, fuzzy_match); + } + } + } + + closedir(dir); + return total_matches; +} /** - * Simple grep implementation + * Custom grep implementation using Boyer-Moore algorithm */ int lsh_actual_grep(char **args) { if (args[1] == NULL) { - printf("Usage: grep [pattern] [file...]\n"); + printf("Usage: grep [options] pattern [file/directory]\n"); + printf("Options:\n"); + printf(" -n, --line-numbers Show line numbers\n"); + printf(" -i, --ignore-case Ignore case distinctions\n"); + printf(" -r, --recursive Search directories recursively\n"); + printf(" -f, --fuzzy Use fuzzy matching instead of exact\n"); return 1; } + + // Parse options + bool show_line_numbers = false; + bool ignore_case = false; + bool recursive = false; + bool fuzzy_match = false; + + int arg_idx = 1; + const char *pattern = NULL; + + // Parse options + while (args[arg_idx] != NULL && args[arg_idx][0] == '-') { + if (strcmp(args[arg_idx], "-n") == 0 || strcmp(args[arg_idx], "--line-numbers") == 0) { + show_line_numbers = true; + } else if (strcmp(args[arg_idx], "-i") == 0 || strcmp(args[arg_idx], "--ignore-case") == 0) { + ignore_case = true; + } else if (strcmp(args[arg_idx], "-r") == 0 || strcmp(args[arg_idx], "--recursive") == 0) { + recursive = true; + } else if (strcmp(args[arg_idx], "-f") == 0 || strcmp(args[arg_idx], "--fuzzy") == 0) { + fuzzy_match = true; + } else if (strcmp(args[arg_idx], "--help") == 0) { + printf("Usage: grep [options] pattern [file/directory]\n"); + printf("Options:\n"); + printf(" -n, --line-numbers Show line numbers\n"); + printf(" -i, --ignore-case Ignore case distinctions\n"); + printf(" -r, --recursive Search directories recursively\n"); + printf(" -f, --fuzzy Use fuzzy matching instead of exact\n"); + return 1; + } else { + // Unknown option - treat as pattern + pattern = args[arg_idx]; + arg_idx++; + break; + } + arg_idx++; + } + + // The pattern should be the next argument after options + if (pattern == NULL) { + if (args[arg_idx] == NULL) { + fprintf(stderr, "Error: No pattern specified\n"); + return 1; + } + pattern = args[arg_idx++]; + } + + int total_matches = 0; + + // If no files/directories specified, search current directory + if (args[arg_idx] == NULL) { + if (recursive) { + total_matches = search_directory(".", pattern, show_line_numbers, + ignore_case, recursive, fuzzy_match); + } else { + // Just search files in current directory, not recursively + DIR *dir = opendir("."); + if (!dir) { + fprintf(stderr, "Error: Unable to open current directory\n"); + return 1; + } + + struct dirent *entry; + while ((entry = readdir(dir)) != NULL) { + // Skip directories and non-text files + char path[PATH_MAX]; + snprintf(path, PATH_MAX, "./%s", entry->d_name); + + if (!is_directory(path) && is_text_file(path)) { + total_matches += process_file(path, pattern, show_line_numbers, + ignore_case, fuzzy_match); + } + } + closedir(dir); + } + } else { + // Process each specified file/directory + while (args[arg_idx] != NULL) { + const char *path = args[arg_idx++]; + + if (is_directory(path)) { + total_matches += search_directory(path, pattern, show_line_numbers, + ignore_case, recursive, fuzzy_match); + } else { + if (is_text_file(path)) { + total_matches += process_file(path, pattern, show_line_numbers, + ignore_case, fuzzy_match); + } + } + } + } + + // Print summary + if (total_matches == 0) { + printf("No matches found\n"); + } else { + printf("\nFound %d match%s\n", total_matches, (total_matches == 1 ? "" : "es")); + } + + return 1; +} - // Use the system's grep command - char command[1024] = "grep "; +/** + * Run grep with interactive interface + * + * Shows a split view with files on left, matches on right, and + * updates search results with each keystroke + */ +void run_interactive_grep_session(void) { + // Save original terminal settings to restore later + struct termios old_tio, new_tio; + tcgetattr(STDIN_FILENO, &old_tio); - // Add the pattern (first argument) - strcat(command, "\""); - strcat(command, args[1]); - strcat(command, "\""); + // Copy the old settings and modify for raw input + new_tio = old_tio; + new_tio.c_lflag &= ~(ICANON | ECHO); // Disable canonical mode and echo + new_tio.c_cc[VMIN] = 1; // Read one character at a time + new_tio.c_cc[VTIME] = 0; // No timeout + tcsetattr(STDIN_FILENO, TCSANOW, &new_tio); + + // Initialize the search query + char search_query[256] = ""; + char last_query[256] = ""; - // Add any additional files specified - for (int i = 2; args[i] != NULL; i++) { - strcat(command, " "); - strcat(command, args[i]); + // Variables for UI state + int running = 1; + int selected_index = 0; + int file_selected_index = 0; + int match_selected_index = 0; + int results_count = 0; + + // Results data structure: + // We'll organize results by file for easier context display + typedef struct { + char *line; // The matching line + int line_number; // Line number in the file + char *context[11]; // 5 lines before, the match line, 5 lines after + int context_line_numbers[11]; // Line numbers for context lines + } MatchLine; + + typedef struct { + char *filename; // Filename + MatchLine *matches; // Array of matches in this file + int match_count; // Number of matches in this file + } FileMatches; + + FileMatches *file_matches = NULL; // Array of file matches + int file_match_count = 0; // Number of files with matches + + char **file_list = NULL; // List of all files + int file_count = 0; // Total number of files + int current_view = 0; // 0 = files, 1 = matches + + // Get terminal size + struct winsize w; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); + int term_width = w.ws_col; + int term_height = w.ws_row; + int split_point = term_width / 2; + + // Load all files in the current directory to start with + DIR *dir = opendir("."); + if (!dir) { + fprintf(stderr, "Error: Unable to open current directory\n"); + tcsetattr(STDIN_FILENO, TCSANOW, &old_tio); + return; } - // If no files specified, use all files in current directory - if (args[2] == NULL) { - strcat(command, " ."); + // Count files first + struct dirent *entry; + while ((entry = readdir(dir)) != NULL) { + // Skip . and .. directories + if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) + continue; + + // Skip directories, only show files + char path[PATH_MAX]; + snprintf(path, PATH_MAX, "./%s", entry->d_name); + if (!is_directory(path) && is_text_file(path)) { + file_count++; + } } - // Execute the grep command - return system(command); + // Allocate memory for file list + file_list = (char **)malloc(file_count * sizeof(char *)); + if (!file_list) { + closedir(dir); + tcsetattr(STDIN_FILENO, TCSANOW, &old_tio); + return; + } + + // Fill file list + rewinddir(dir); + int file_idx = 0; + while ((entry = readdir(dir)) != NULL && file_idx < file_count) { + // Skip . and .. directories + if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) + continue; + + // Skip directories, only show files + char path[PATH_MAX]; + snprintf(path, PATH_MAX, "./%s", entry->d_name); + if (!is_directory(path) && is_text_file(path)) { + file_list[file_idx++] = strdup(entry->d_name); + } + } + closedir(dir); + + // Draw initial UI once + printf(ANSI_CLEAR_SCREEN ANSI_CURSOR_HOME); + printf("--- Interactive Grep Search --- [Type to search | Tab: switch pane | Enter: open file | Ctrl+C: exit]\n\n"); + printf("Search: "); + + // Main interaction loop + while (running) { + // Check terminal size and detect resize + struct winsize new_w; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &new_w); + + // If terminal size changed, redraw the screen completely + if (new_w.ws_col != term_width || new_w.ws_row != term_height) { + w = new_w; + term_width = w.ws_col; + term_height = w.ws_row; + split_point = term_width / 2; + + // Redraw the whole screen on resize + printf(ANSI_CLEAR_SCREEN ANSI_CURSOR_HOME); + printf("--- Interactive Grep Search --- [Type to search | Tab: switch pane | Enter: open file | Ctrl+C: exit]\n\n"); + printf("Search: %s", search_query); + } + + // Update just the search query part and clear the rest of the line + printf("\033[3;8H%s\033[K", search_query); + + // Position cursor at the header row + printf("\033[5;1H"); + + // Draw the split view header + printf("Files"); + // Move cursor to split point + printf("\033[%dG", split_point); + printf("| Matches"); + + // Move to the next line for the divider + printf("\n"); + + // Clear the divider line and redraw it + printf("\033[K"); + for (int i = 0; i < split_point - 1; i++) { + printf("-"); + } + printf("+"); + for (int i = split_point + 1; i < term_width; i++) { + printf("-"); + } + + // Check if the query has changed and we need to run search again + if (strcmp(search_query, last_query) != 0) { + // Free previous results if any + if (file_matches) { + for (int i = 0; i < file_match_count; i++) { + for (int j = 0; j < file_matches[i].match_count; j++) { + free(file_matches[i].matches[j].line); + + // Free the context lines + for (int k = 0; k < 11; k++) { + if (file_matches[i].matches[j].context[k]) { + free(file_matches[i].matches[j].context[k]); + } + } + } + + free(file_matches[i].filename); + free(file_matches[i].matches); + } + free(file_matches); + file_matches = NULL; + file_match_count = 0; + } + + results_count = 0; + + if (strlen(search_query) > 0) { + // First pass: count files with matches and allocate the structure + int files_with_matches = 0; + int *matches_per_file = (int *)calloc(file_count, sizeof(int)); + + if (!matches_per_file) { + fprintf(stderr, "Memory allocation error\n"); + continue; + } + + // First, count matches per file + for (int i = 0; i < file_count; i++) { + char filepath[PATH_MAX]; + snprintf(filepath, PATH_MAX, "./%s", file_list[i]); + + // Open the file + FILE *file = fopen(filepath, "r"); + if (!file) continue; + + // Read each line and search for the pattern + char line[MAX_LINE_LENGTH]; + int line_number = 0; + + while (fgets(line, MAX_LINE_LENGTH, file)) { + line_number++; + + // Remove newline if present + int line_len = strlen(line); + if (line_len > 0 && line[line_len - 1] == '\n') { + line[line_len - 1] = '\0'; + line_len--; + } + + // Check if this line contains the search query + // Using simple case-sensitive search here for simplicity + if (strstr(line, search_query) != NULL) { + if (matches_per_file[i] == 0) { + files_with_matches++; + } + matches_per_file[i]++; + results_count++; + } + } + + fclose(file); + } + + // Allocate the file matches array + if (files_with_matches > 0) { + file_matches = (FileMatches *)malloc(files_with_matches * sizeof(FileMatches)); + if (!file_matches) { + fprintf(stderr, "Memory allocation error\n"); + free(matches_per_file); + continue; + } + + // Initialize the file matches array + file_match_count = 0; + for (int i = 0; i < file_count; i++) { + if (matches_per_file[i] > 0) { + // This file has matches, initialize its entry + file_matches[file_match_count].filename = strdup(file_list[i]); + file_matches[file_match_count].match_count = matches_per_file[i]; + file_matches[file_match_count].matches = + (MatchLine *)malloc(matches_per_file[i] * sizeof(MatchLine)); + + if (!file_matches[file_match_count].matches) { + fprintf(stderr, "Memory allocation error\n"); + // Cleanup what we've allocated so far + free(file_matches[file_match_count].filename); + for (int j = 0; j < file_match_count; j++) { + free(file_matches[j].filename); + free(file_matches[j].matches); + } + free(file_matches); + file_matches = NULL; + file_match_count = 0; + free(matches_per_file); + continue; + } + + // Initialize all matches for this file + for (int j = 0; j < matches_per_file[i]; j++) { + file_matches[file_match_count].matches[j].line = NULL; + for (int k = 0; k < 11; k++) { + file_matches[file_match_count].matches[j].context[k] = NULL; + file_matches[file_match_count].matches[j].context_line_numbers[k] = 0; + } + } + + file_match_count++; + } + } + + // Second pass: fill in the matches with line content and context + for (int file_idx = 0, i = 0; i < file_count && file_idx < file_match_count; i++) { + if (matches_per_file[i] == 0) continue; + + char filepath[PATH_MAX]; + snprintf(filepath, PATH_MAX, "./%s", file_list[i]); + + // Read the whole file into memory to easily extract context + // This is used to provide the surrounding lines + char *file_lines[100000] = {NULL}; // Support for up to 100K lines per file + int total_lines = 0; + + FILE *file = fopen(filepath, "r"); + if (!file) { + file_idx++; + continue; + } + + // Read the file into memory + char line[MAX_LINE_LENGTH]; + while (fgets(line, MAX_LINE_LENGTH, file) && total_lines < 100000) { + // Remove newline if present + int line_len = strlen(line); + if (line_len > 0 && line[line_len - 1] == '\n') { + line[line_len - 1] = '\0'; + line_len--; + } + + file_lines[total_lines++] = strdup(line); + } + + // Now that we have all lines, look for matches and collect context + int match_idx = 0; + for (int line_idx = 0; line_idx < total_lines && match_idx < matches_per_file[i]; line_idx++) { + // Check if this line contains the search query + if (strstr(file_lines[line_idx], search_query) != NULL) { + // This is a match, save it with context + file_matches[file_idx].matches[match_idx].line = strdup(file_lines[line_idx]); + file_matches[file_idx].matches[match_idx].line_number = line_idx + 1; + + // Get context: 5 lines before and 5 lines after + for (int ctx = 0; ctx < 11; ctx++) { + int target_line = line_idx - 5 + ctx; + + if (target_line >= 0 && target_line < total_lines) { + file_matches[file_idx].matches[match_idx].context[ctx] = + strdup(file_lines[target_line]); + file_matches[file_idx].matches[match_idx].context_line_numbers[ctx] = + target_line + 1; + } else { + file_matches[file_idx].matches[match_idx].context[ctx] = strdup(""); + file_matches[file_idx].matches[match_idx].context_line_numbers[ctx] = 0; + } + } + + match_idx++; + } + } + + // Free the file lines array + for (int line_idx = 0; line_idx < total_lines; line_idx++) { + free(file_lines[line_idx]); + } + + fclose(file); + file_idx++; + } + } + + free(matches_per_file); + } + + // Update last query + strcpy(last_query, search_query); + + // Reset selection + file_selected_index = 0; + match_selected_index = 0; + selected_index = 0; + } + + // Calculate how many items we can display in each pane + int max_display = term_height - 6; // Account for header and other UI elements + + // Draw files in left pane + int display_count = file_count < max_display ? file_count : max_display; + for (int i = 0; i < display_count; i++) { + // Check if this file has matches + int match_idx = -1; + for (int j = 0; j < file_match_count; j++) { + if (strcmp(file_list[i], file_matches[j].filename) == 0) { + match_idx = j; + break; + } + } + + // Highlight if selected and in file view + if (i == selected_index && current_view == 0) { + printf("\033[7m"); // Invert colors + file_selected_index = i; // Track selected file + } + + // Display match count for the file + int match_count = (match_idx >= 0) ? file_matches[match_idx].match_count : 0; + + // Truncate filename if too long + int max_filename_length = split_point - 10; // Leave room for match count + if (strlen(file_list[i]) > max_filename_length) { + printf(" %.%ds… (%d)", max_filename_length - 1, file_list[i], match_count); + } else { + printf(" %s (%d)", file_list[i], match_count); + } + + // Reset colors and clear to end of line section + printf("\033[0m\033[K"); + + // Move cursor to split point + printf("\033[%dG", split_point); + printf("| "); + + // End of line for file entry + printf("\033[K\n"); + } + + // After listing all files, use the rest of the right pane to show context + // for the currently selected file + int context_start_line = display_count + 1; + int selected_file_match_idx = -1; + + // Find the index of the selected file in the file_matches array + for (int i = 0; i < file_match_count; i++) { + if (file_selected_index < file_count && + strcmp(file_list[file_selected_index], file_matches[i].filename) == 0) { + selected_file_match_idx = i; + break; + } + } + + // Set cursor position for context display in the right pane + printf("\033[6;%dH", split_point + 2); + + // Display context for the selected file if it has matches + if (selected_file_match_idx >= 0 && file_matches[selected_file_match_idx].match_count > 0) { + // Title for the context view + printf("%s%s - %d matches%s", + ANSI_COLOR_CYAN, + file_matches[selected_file_match_idx].filename, + file_matches[selected_file_match_idx].match_count, + ANSI_COLOR_RESET); + printf("\033[K\n"); + + // Choose which match to display context for (first one by default) + int match_to_display = 0; + if (match_selected_index < file_matches[selected_file_match_idx].match_count) { + match_to_display = match_selected_index; + } + + // Move cursor to the next line in the right pane + printf("\033[%d;%dH", 7, split_point + 2); + + // Display line number and match info + printf(" %sMatch %d of %d at line %d:%s\033[K\n", + ANSI_COLOR_GREEN, + match_to_display + 1, + file_matches[selected_file_match_idx].match_count, + file_matches[selected_file_match_idx].matches[match_to_display].line_number, + ANSI_COLOR_RESET); + + // Move cursor to the next line in the right pane + printf("\033[%d;%dH", 8, split_point + 2); + + // Display context (5 lines before, the line itself, and 5 lines after) + printf(" %s----- Context -----%s\033[K\n", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + + // Display the 11 context lines (5 before, match, 5 after) + for (int ctx = 0; ctx < 11; ctx++) { + // Get the context line + char* ctx_line = file_matches[selected_file_match_idx].matches[match_to_display].context[ctx]; + int ctx_line_number = file_matches[selected_file_match_idx].matches[match_to_display].context_line_numbers[ctx]; + + // Move cursor to the next line in the right pane + printf("\033[%d;%dH", 9 + ctx, split_point + 2); + + if (ctx_line && ctx_line_number > 0) { + // The highlighted line is in position 5 (0-based index) + if (ctx == 5) { + printf(" %s%3d:%s %s%s%s\033[K", + ANSI_COLOR_GREEN, ctx_line_number, ANSI_COLOR_RESET, + ANSI_COLOR_RED, ctx_line, ANSI_COLOR_RESET); + } else { + printf(" %s%3d:%s %s\033[K", + ANSI_COLOR_GREEN, ctx_line_number, ANSI_COLOR_RESET, ctx_line); + } + } else { + // Just print an empty line for padding if we're at file boundaries + printf(" \033[K"); + } + + // Don't add a newline here, as we're using cursor positioning instead + } + } else { + // No matches for this file + if (strlen(search_query) > 0) { + printf("%sNo matches in selected file%s\033[K", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + } else { + printf("%sType to search in files%s\033[K", ANSI_COLOR_YELLOW, ANSI_COLOR_RESET); + } + } + + // Clear any remaining lines in the right pane + for (int i = (selected_file_match_idx >= 0 ? 20 : 7); i < term_height - 1; i++) { + printf("\033[%d;%dH\033[K", i, split_point + 2); + } + + // Position cursor at the bottom line + printf("\033[%d;1H", term_height - 1); + + // Show result count at the bottom + printf("\033[K"); // Clear the line + if (strlen(search_query) > 0) { + printf("Found %d match%s in %d file%s", + results_count, + results_count == 1 ? "" : "es", + file_match_count, + file_match_count == 1 ? "" : "s"); + } else { + printf("%d file%s available", + file_count, + file_count == 1 ? "" : "s"); + } + + // Position cursor correctly at the end of the search query + printf("\033[3;%dH", 8 + strlen(search_query)); + fflush(stdout); + + // Allow a small delay to reduce CPU usage and make the UI feel less flickery + struct timespec ts = {0, 5000000}; // 5ms delay + nanosleep(&ts, NULL); + + // Process user input + unsigned char c; + if (read(STDIN_FILENO, &c, 1) > 0) { + if (c == 3) { // Ctrl+C - exit + running = 0; + } else if (c == 9) { // Tab - switch between file and results view + current_view = 1 - current_view; + + // Only switch to results if there are results + if (current_view == 1 && results_count == 0) { + current_view = 0; + } + } else if (c == 10 || c == 13) { // Enter - open file + if (current_view == 0 && selected_index < file_count) { + // Open the selected file in neovim + char filepath[PATH_MAX]; + snprintf(filepath, PATH_MAX, "./%s", file_list[selected_index]); + + // If the file has matches, open at the line of the first match + int line_number = 1; // Default to line 1 if no matches + + // Find if this file has matches + int file_match_idx = -1; + for (int i = 0; i < file_match_count; i++) { + if (strcmp(file_list[selected_index], file_matches[i].filename) == 0) { + file_match_idx = i; + break; + } + } + + // If file has matches, use the line number of the currently selected match + if (file_match_idx >= 0 && file_matches[file_match_idx].match_count > 0) { + int match_idx = 0; + if (match_selected_index < file_matches[file_match_idx].match_count) { + match_idx = match_selected_index; + } + line_number = file_matches[file_match_idx].matches[match_idx].line_number; + } + + // Restore terminal settings before launching editor + tcsetattr(STDIN_FILENO, TCSANOW, &old_tio); + + // Clear the screen + printf(ANSI_CLEAR_SCREEN ANSI_CURSOR_HOME); + + // Check if neovim is available + char command[2048]; + if (system("which nvim >/dev/null 2>&1") == 0) { + snprintf(command, sizeof(command), "nvim +%d \"%s\"", line_number, filepath); + } else if (system("which vim >/dev/null 2>&1") == 0) { + snprintf(command, sizeof(command), "vim +%d \"%s\"", line_number, filepath); + } else { + snprintf(command, sizeof(command), "nano +%d \"%s\"", line_number, filepath); + } + + system(command); + + // Restore our terminal settings + tcsetattr(STDIN_FILENO, TCSANOW, &new_tio); + + // Redraw UI + printf(ANSI_CLEAR_SCREEN ANSI_CURSOR_HOME); + } + } else if (c == 27) { // Escape sequence for arrow keys + // Read the next two bytes + char seq[2]; + if (read(STDIN_FILENO, &seq[0], 1) > 0 && read(STDIN_FILENO, &seq[1], 1) > 0) { + if (seq[0] == '[') { + switch (seq[1]) { + case 'A': // Up arrow + if (selected_index > 0) selected_index--; + + // Reset match selection when changing files + match_selected_index = 0; + break; + case 'B': // Down arrow + if (current_view == 0 && selected_index < file_count - 1) { + selected_index++; + + // Reset match selection when changing files + match_selected_index = 0; + } + break; + case 'C': // Right arrow - next match in the current file + // Find the current file's match index + int file_match_idx = -1; + for (int i = 0; i < file_match_count; i++) { + if (file_selected_index < file_count && + strcmp(file_list[file_selected_index], file_matches[i].filename) == 0) { + file_match_idx = i; + break; + } + } + + // If file has matches, move to the next match + if (file_match_idx >= 0 && file_matches[file_match_idx].match_count > 0) { + match_selected_index = (match_selected_index + 1) % + file_matches[file_match_idx].match_count; + } + break; + case 'D': // Left arrow - previous match in the current file + // Find the current file's match index + file_match_idx = -1; + for (int i = 0; i < file_match_count; i++) { + if (file_selected_index < file_count && + strcmp(file_list[file_selected_index], file_matches[i].filename) == 0) { + file_match_idx = i; + break; + } + } + + // If file has matches, move to the previous match + if (file_match_idx >= 0 && file_matches[file_match_idx].match_count > 0) { + match_selected_index = (match_selected_index - 1 + + file_matches[file_match_idx].match_count) % + file_matches[file_match_idx].match_count; + } + break; + } + } + } + } else if (c == 127 || c == 8) { // Backspace + // Remove the last character from the search query + size_t len = strlen(search_query); + if (len > 0) { + search_query[len - 1] = '\0'; + } + } else if (isprint(c)) { // Printable character + // Add to the search query + size_t len = strlen(search_query); + if (len < sizeof(search_query) - 1) { + search_query[len] = c; + search_query[len + 1] = '\0'; + } + } + } + } + + // Clean up + if (file_matches) { + for (int i = 0; i < file_match_count; i++) { + for (int j = 0; j < file_matches[i].match_count; j++) { + free(file_matches[i].matches[j].line); + + // Free the context lines + for (int k = 0; k < 11; k++) { + if (file_matches[i].matches[j].context[k]) { + free(file_matches[i].matches[j].context[k]); + } + } + } + + free(file_matches[i].filename); + free(file_matches[i].matches); + } + free(file_matches); + } + + if (file_list) { + for (int i = 0; i < file_count; i++) { + free(file_list[i]); + } + free(file_list); + } + + // Restore original terminal settings + tcsetattr(STDIN_FILENO, TCSANOW, &old_tio); + + // Clear screen + printf(ANSI_CLEAR_SCREEN ANSI_CURSOR_HOME); } /** * Wrapper for grep */ int lsh_grep(char **args) { + // If no arguments provided, run interactive grep + if (args[1] == NULL) { + run_interactive_grep_session(); + return 1; + } + + // Otherwise run the regular grep command return lsh_actual_grep(args); } \ No newline at end of file diff --git a/grep.h b/grep.h index 2dcdda4..8f98789 100644 --- a/grep.h +++ b/grep.h @@ -8,6 +8,14 @@ #include "common.h" +/** + * Run grep with interactive interface + * + * Shows a split view with files on left, matches on right, and + * updates search results with each keystroke + */ +void run_interactive_grep_session(void); + /** * Command handler for the "grep" command * @@ -20,6 +28,9 @@ * --file Specify files/directories to search (otherwise searches * current dir) * + * If called without arguments, opens an interactive grep UI with a split view + * that updates as you type. + * * @param args Command arguments * @return 1 to continue shell execution, 0 to exit shell */ diff --git a/grep.o b/grep.o index 0c17ffc91a0dec4cded7019782ad58a3b95117c5..c46edcef6e052712100e96ac03966983f6bfb589 100644 GIT binary patch literal 48848 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 CN>{|9gGs_0oHu_w$_RJm)#jS?)Ra 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 XYcw26mA%ITPH)ukd?tGjb+Z2tb018d delta 88985 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 RCFtPMYYjb1o!>8;{vWvOmZksz diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..401006f --- /dev/null +++ b/test.txt @@ -0,0 +1,5 @@ +hello world +This is a test file for the grep command +It contains multiple lines +Boyer-Moore algorithm +testing the grep diff --git a/weather.c b/weather.c index 123f8d0..66e78bc 100644 --- a/weather.c +++ b/weather.c @@ -1,8 +1,7 @@ /** * weather.c * Implementation of weather information fetching and display for Linux - * This is a simplified version that provides basic information about using curl/wget - * instead of implementing full HTTP functionality + * Uses wttr.in service to display weather with its rich UI */ #include "weather.h" @@ -14,62 +13,44 @@ /** * Command handler for the "weather" command - * In this Linux version, we'll provide instructions for using curl/wget + * Executes curl to get weather from wttr.in with full UI */ int lsh_weather(char **args) { - printf("\n"); - printf("╭─────────────────────────────────────────────────────────────╮\n"); - printf("│ Weather Command (Linux Version) │\n"); - printf("├─────────────────────────────────────────────────────────────┤\n"); - printf("│ This is a simplified version of the weather command for │\n"); - printf("│ Linux. The full version would use libcurl for HTTP requests. │\n"); - printf("│ │\n"); - printf("│ To get weather information on Linux: │\n"); - printf("│ │\n"); - printf("│ 1. Using curl: │\n"); - printf("│ curl wttr.in/[city] │\n"); - printf("│ │\n"); - printf("│ 2. Using wget: │\n"); - printf("│ wget -O - wttr.in/[city] │\n"); - printf("│ │\n"); - printf("│ For example: │\n"); - printf("│ curl wttr.in/London │\n"); - printf("│ curl wttr.in/\"New York\" │\n"); - printf("│ │\n"); - printf("│ For a shorter format: │\n"); - printf("│ curl wttr.in/London?format=3 │\n"); - printf("│ │\n"); - printf("├─────────────────────────────────────────────────────────────┤\n"); - - // Check if a city was provided as an argument + char command[256]; + char location[128] = ""; // Default empty location + + // Check if a location was provided as an argument if (args[1]) { - char command[256]; - // Use wttr.in for a simple demonstration - snprintf(command, sizeof(command), "curl -s wttr.in/%s?format=3", args[1]); - printf("│ Running: %-47s │\n", command); - printf("├─────────────────────────────────────────────────────────────┤\n"); - printf("│ Result: │\n"); - printf("│ │\n"); - - // Execute the command - FILE *fp = popen(command, "r"); - if (fp) { - char buffer[256]; - if (fgets(buffer, sizeof(buffer), fp)) { - // Print the result with padding - printf("│ %-53s │\n", buffer); - } else { - printf("│ No result returned │\n"); - } - pclose(fp); - } else { - printf("│ Error executing command │\n"); - } - - printf("│ │\n"); + // Use the provided location + strncpy(location, args[1], sizeof(location) - 1); + location[sizeof(location) - 1] = '\0'; + } else { + // No location provided, use current location (blank parameter to wttr.in) + location[0] = '\0'; } - printf("╰─────────────────────────────────────────────────────────────╯\n\n"); + // Properly URL-encode spaces in the location + char encoded_location[256] = ""; + char *src = location; + char *dst = encoded_location; + + while (*src) { + if (*src == ' ') { + *dst++ = '%'; + *dst++ = '2'; + *dst++ = '0'; + } else { + *dst++ = *src; + } + src++; + } + *dst = '\0'; + + // Format command with the location - using default wttr.in display format + snprintf(command, sizeof(command), "curl -s wttr.in/%s", encoded_location); + + // Execute the command and display the full wttr.in UI + system(command); return 1; } \ No newline at end of file diff --git a/weather.o b/weather.o index 41e4d06fece8e670d0a3786f733aa47869afd67f..6feccf6bf6521506314ab3470d9345640e75f296 100644 GIT binary patch literal 5072 zcmbtX4Nz3q6~4=|{QoS7B4Ty5g5bt=fhcIJE(-V>Q6UD424ojpe&Vuhb{AcgMucEM zvK>r=1y{M(sUs&*iPpWu`MdGyBeW zzI)C+_uRktc1LP@nukO}m`KPHB3O(iL>?qy4G%RWoJ=BFT>W?4&f8rcgmCpIvY$MA zwux)-jEbQyTz%@pI0rXSYoaWKP-qiil>qAm*eJke0k#Y9fB?G$cuar}0iF@yc>xX! z@LK_nGT2a?O(9p~@ZlN=SL?8MqpBP&-hcL46+eFzRnn^RtMP%hlIvVG->798#;8TDQvSLI53nl>Aar zo=h#EIeUhLt8W6>PomtB@$N|Vt!XdPTtkyHL1>+vtKpMLs23)E+Yww_K_>>|`suXT zn_!V)oG_C53!Hr-l=CT^A-Xg8Ibel3U7Wk+7@RS#A?x8LP8r6Z7ORZ+8$4A|ZZ;_9 zS`=HYRGd{2Ks%{Q3qy=q}pB_Bf+VX3U zk?v)lGs61hY0+JwX_I_TpYaOuRO(dAeBPWm<7~m7JVSal)seFnO|M)3pQ@C_((Kra zhQhUqo{4=1nQv8UOJqcH$7M~2qBDJ)x?-Bw#zv35zLko5WhPmtIxC=3yTZ4-HUHl1 zYi*U<=DW*ZoQVf9Zl_iEO<;7rtYg z*WRLS!^7VzPAJzbX#T_gGb4L46V|4``^IQ{V1x1U{Er83&CNLbkze-D2C}04qJ4)r z?USA(H$KRDHZb_WkXNw&SCt1#K3P2!vt2r~AoR4|!;ImrYZ?BTVtn6t^mtin=1ue7b6d};8VijRS4QMC z&b*?jnpLxG{_XzR@tKEPGfKZI`$0Q<%C-3EjpkVkzv#-_9}=?Uz3cB^IQ4X$*Bx0b z7v1;MJCAQ}EZe%}!(XgRjGDK(U-{NS+okT4H|o1CbCWxB)`jf9nRnx8apbzuz`y)0 zs5qqDm*?u-Ts7eu#lDQ^j-qk4il&{~eE-AVHup=_} zc+Ie~y;CQ9@7wjU<4*9gSkuZ&32%A)*)THn zdVAzIA6#1BdW@`&NJ=6rmM>qVh*_~ZD^?NrvMOE`r-)a_&sWE*6AAI8<519_jQ*$x z-8K>jaBN;BB0G$>fk?K!N+dS9Br?F;r;$2Or5yY~_-&RPB;Vz+JkU$JN=jXv4Q`&0 z$CKRS-^1c&>DVZqZ;|q&eVzkLO1xeqdER|~De)i2KX4r0@-mEGh21{`sTEt>C8w*So#9}m=ON`b+VyUoL^`#^)&tlaT zY|bkv-kevcD=`omE-D_Fp(fY5h{{q?YSraaZ8bY}F+*m(L8r3nZC0Y%q_gUXD&JxuDs!3B;9EE8^UI6! zN{oeN)Q88q{Cu;13w48Fq|7>Fksd+?&QN01vk;n(L7?f?L+ygH(o(&VrZ$#Y^(y+R znakfuXcrmFRVH(pNpH4RV88m}yh5|CRF8%JpGraFVGh|oVclsEuzQ>FxXqYJA}NA> zr5R(KK?m6i5xxGSd z7C(VvR}tr5LK}IG6^70Sa6qH3!4!+!$U@4wo4;Y4zib>B%pa@~i)Zuq3gz78Z^Xmi zN!wk8#WOCK0&z{ywisVR?0hqSv2QkQa5sK6y!5EBco;vF#PYN8zezcF<2Pac1GL>$ zSUlql6u8T;#rzI*g#7S+X7MclZzu=()vSSHkjZ!;{^~Txp3IHSLmh2#7e9>g{GY+G zXdyp~Z)Wi>J^)w3%ascIc63_8TCwQ{z7PzyZ9s=|3x8`N8CJOBUy literal 10064 zcmeHNcUV-%7QZYYVg-T}ed?760?G=A6%+)4RgqY*M5DOCBCE?TY=KoHh(eTN1tL7r z*f1K@SYkyC*a+Bbh#ExuYBK|kG(VJH@|b{%$d1Ut|kYD z1PP3c7?O;bLChP8pbWFL%bT(vSM+0S85?G-D7{vca^GFRFrxI5sy~~WqC}Y{j?Rc8 zN)K%CDE+<#D&EE#qD7`$mR|mU@gGJbGYv;tG{3aDD3cMTm9|aoiUv)@hb=^l(jH+_ z`Z>{}b~x~d@W6`F%lBach5#tX-;52v_JhVtXG+(UDE%^ONY_Ss+HKC)5}YyWsiMqW z4nXcTHZ>8ablkL3HH-a56{2*#PTgz!##Nn8rp`Vz_ip`P&bobgu8T6qHbjZKTXVBk zZOWOgID(_ZFg3YbYjWoPEB|u0VgGaHv2UgE60tf)qGSUUv9V%#6zd!!m20%@IEhjv zRmff5;$i_A;Np-|@UIL49=iMz{Qh`n2-%a^k|Jt_S!_ELL-Y}H7W@!lSV{plrk1;i^9T2vPwz3Mxs)y zgm2sKZ&S&|I8n3fpzr_&-<#sw!Tmz-M2teIMhk;( z^1N>c`F3c3bp7(x864Q_FP*}6xJl!tdObvrs@J+)+(v8Uax^^$u#RqCeO35PYN5j= zDvj(zCkS|h+f~A-IJ))j1!e&WRiHN)8%LR1qm-ld;=K}y3R!;xl}c{zNFp_A?gfL@ zAr?L|!I4|7P zkaW}daf-jSspZhm*DoydA8C2aETToby_sy@VTZ!P!nD97|Ls<s;~0{(p@)?P&HK8e_*z;BG3H%jZ60Sryuny9Ck2Zy=^y#Nt=Y93Tst0 z@{>;2EPnFa;`78bW7o<_b6;LeFiQ=I&tGy$Q_-n$-98ty^G6;;iM;l$yXgJ%iN!sN z`d({4J1c5!l0%8CvF4A>9mAx-N4~hR=kB=Q_b>mr-q!Bm?y@J#@oADp9q@vAX_f|v7Q~k=k3R4T)E%?UjL~EgFi(uOe zo1~N_<)PirW!FlME1c8f_g=a7qOvU9?sjbHtEgK{cFMi3+BJ%`$2#2}d$*+IYWKPm z)twzHKHnZ@D-W5wcEz(%f}w6Z*XJ!hJ<8Xq#T3)em^}AduMUDcF8(9e*HxUZ{Z6xb z#O`hNQ3nJ&zwBigYKIgIUkVobD zgrgZdt@ds3cJ@lGZekvm+CA-ox`^&SC^hGv68 zHr-%vZ=d|+@jT}si?%)3Gl%Ck%d@M^Z}@5CF}pIWxOw?w7pG*KJ5}^J`or4N%2(>f zF|xV2FZ*}D+Iw7G#g;8I@-C+K4;7@Dtlp)JVf&;0PfNkouz;&?pg27P1eFa`&I2bSKWT>`E=sS16@2q3!XTK z-N_o{H@GtA=HwXj)Mf307N?G~>pOpywfg}}mv2R@&8MB8x;7;5W0RX!w#!{(&mK6i z*!)+=-?Pgc?-hOdL)RsrM-*Hg*2gsG!Mym@BQ-tmK5!seR<>Zlf8d9Q-0y|stdzU+S(Tn zV%W38vY6n2fB~#?aOhYU*27EaDfD1H-93A|d%E}KJTpO07X9!Q5s}dRH!8&#@!yD& ztx+9LMzcmUMp_G_4z0|ZFGb}4APoO-;@+3RZ7jYJ1hj5ud`W;Px(Yo{+>QzJxJgeH zWBl5Sw`+|#Z{NnSWXv>s7vymL?He;K4e(nVz}vioV+&S1Kgn8Qi*So~*bLLz0N&LA z?qmRWGl2IpfcH0m`x(F)xIhUb8JQ|393&=AqmGObD{-!3RPs2bRIZL@;uLWbITMY} z<|-yGQl?NznDB6wS{ykeJThiRc(hn5L(Ooh8{~M7;V(+BnsiABI9{gk(SqQ80LOeB zYl061obV5V90)nh525%bFu}tN@F!9Hqri_ez@JX>Tfus(G{B!p@xy?hVt~Jp;uipa zsR8~9icjprHjdu8x8u2y;{O8nw;8a%o8tF?^I(Yq{!xlg{5ffWe}Uqw!TwbP{2GdX z5cqcu@E=or;?D~MeDaFpuwc_BIDjZMhj~HAvn}9+9|C+^1N=@DKL_|u2Ka6ipZMR~ z0N;n=UjzF?4Dg3j{I1+LM1~n-fIpGq6MrHM@TC-=ypQn)_+L}}81QF5kKYQ72U#B~ zDSj&Of8_D;Do^;=DL(P%S010g{yd=g1z`WF0sbqBPvT<&?-@ORtNc1pB0(;NF1CDSiXkpGDz0Ad{Tf*$wIr`__+v@oWRd7Z z;YzUMO5sxg_oVPVz{gSe0l=qH_+7xWDSR2=n<*T9W8hK+g|7!bIX{yAIsxw`#h(Ci z_z#@d2)`@f-2lgCL6xf+MDYWmGL+(Hfj{9CUkvu=P<#@{#T0)S*e7c>_7jd!oF#JC zqy2P%b}%3B7hWJcQTP;)T`4>cWFdu<`#?Vm&jp#>k4U@Z-0x5EH-j8Z;X6Pk_a&G5ymOewO6U033eqh;n7NQtOPpx4>K0&;~0|pM$Gv^ zfqZ8mIOg&b-WT!w^y7o5ya^64OTn-;!mutm2iXB1&rgiQYXB(2w5I{6q1*3)aBP#N zzpp+%2Vt9U%@riGU@(}!IU}6-kBVFxgr1yFR7DJ)$SD0mIZV+Q{Jlh9{QB8*>Wn)t zez-{VN&JQ(OmF-6l7iATUH1A(^a(H-6(|?Esv&SNCFc*qr@44t)#raqXPpMo$K!8~ zex!Zke>}qU`LBicSL)2XeiD5G$WTFF`+3klxi{nX@jZa(llJEz47cx2Do`0GJ2|2May<)=8>~9?92&KB*_U7w8k2 zTpwoSy&vK%a~s;S>LfT!9MMCaoU>`uzwIa$5f=!u5^c8dj%3#tDxfUQ&oY z!S%I`HP=A<+o8kwe>CZve;A|J4y->C)-SUEU<@ZPrxVcA68-e)?_+fo@_k7sy{rE} D*sw`z