ded

Dramatic EDitor
Index Commits Files Refs README LICENSE
commit 0c582f90a9878b05a537e8bf13922ecb3a6a9063
parent 2182214d5eb309d8cbe8d18882ca0e1b0a5c1726
Author: rexim <reximkut@gmail.com>
Date:   Tue, 10 Jan 2023 13:29:31 +0700

Factor out file_browser translation unit

Diffstat:
Mbuild.sh | 2+-
Mbuild_msvc.bat | 2+-
Asrc/file_browser.c | 21+++++++++++++++++++++
Asrc/file_browser.h | 13+++++++++++++
Msrc/main.c | 33++++++++++-----------------------
5 files changed, 46 insertions(+), 25 deletions(-)
diff --git a/build.sh b/build.sh
@@ -6,7 +6,7 @@ CC="${CXX:-cc}"
 PKGS="sdl2 glew freetype2"
 CFLAGS="-Wall -Wextra -std=c11 -pedantic -ggdb"
 LIBS=-lm
-SRC="src/main.c src/la.c src/editor.c src/free_glyph.c src/simple_renderer.c src/common.c"
+SRC="src/main.c src/la.c src/editor.c src/file_browser.c src/free_glyph.c src/simple_renderer.c src/common.c"
 
 if [ `uname` = "Darwin" ]; then
     CFLAGS+=" -framework OpenGL"
diff --git a/build_msvc.bat b/build_msvc.bat
@@ -9,4 +9,4 @@ set LIBS=dependencies\SDL2\lib\x64\SDL2.lib ^
          dependencies\GLEW\lib\glew32s.lib ^
          opengl32.lib User32.lib Gdi32.lib Shell32.lib
 
-cl.exe %CFLAGS% %INCLUDES% /Feded src\main.c src\la.c src\editor.c src\free_glyph.c src\simple_renderer.c src\common.c /link %LIBS% -SUBSYSTEM:windows
+cl.exe %CFLAGS% %INCLUDES% /Feded src\main.c src\la.c src\editor.c src\file_browser.c src\free_glyph.c src\simple_renderer.c src\common.c /link %LIBS% -SUBSYSTEM:windows
diff --git a/src/file_browser.c b/src/file_browser.c
@@ -0,0 +1,21 @@
+#include <string.h>
+#include "file_browser.h"
+
+int file_cmp(const void *ap, const void *bp)
+{
+    const char *a = *(const char**)ap;
+    const char *b = *(const char**)bp;
+    return strcmp(a, b);
+}
+
+Errno fb_open_dir(File_Browser *fb, const char *dir_path)
+{
+    fb->files.count = 0;
+    fb->cursor = 0;
+    Errno err = read_entire_dir(dir_path, &fb->files);
+    if (err != 0) {
+        return err;
+    }
+    qsort(fb->files.items, fb->files.count, sizeof(*fb->files.items), file_cmp);
+    return 0;
+}
diff --git a/src/file_browser.h b/src/file_browser.h
@@ -0,0 +1,13 @@
+#ifndef FILE_BROWSER_H_
+#define FILE_BROWSER_H_
+
+#include "common.h"
+
+typedef struct {
+    Files files;
+    size_t cursor;
+} File_Browser;
+
+Errno fb_open_dir(File_Browser *fb, const char *dir_path);
+
+#endif // FILE_BROWSER_H_
diff --git a/src/main.c b/src/main.c
@@ -17,6 +17,7 @@
 #include "./sv.h"
 
 #include "./editor.h"
+#include "./file_browser.h"
 #include "./la.h"
 #include "./free_glyph.h"
 #include "./simple_renderer.h"
@@ -60,16 +61,12 @@ void MessageCallback(GLenum source,
 static Free_Glyph_Atlas atlas = {0};
 static Simple_Renderer sr = {0};
 static Editor editor = {0};
+static File_Browser fb = {0};
 static Uint32 last_stroke = 0;
 
 #define FREE_GLYPH_FONT_SIZE 64
 #define ZOOM_OUT_GLYPH_THRESHOLD 30
 
-typedef struct {
-    Files files;
-    size_t cursor;
-} File_Browser;
-
 void render_file_browser(SDL_Window *window, Free_Glyph_Atlas *atlas, Simple_Renderer *sr, const File_Browser *fb)
 {
     Vec2f cursor_pos = vec2f(0, -(float)fb->cursor * FREE_GLYPH_FONT_SIZE);
@@ -225,13 +222,6 @@ void render_editor(SDL_Window *window, Free_Glyph_Atlas *atlas, Simple_Renderer 
 // TODO: display errors reported via flash_error right in the text editor window somehow
 #define flash_error(fmt, ...) fprintf(stderr, fmt, __VA_ARGS__)
 
-int file_cmp(const void *ap, const void *bp)
-{
-    const char *a = *(const char**)ap;
-    const char *b = *(const char**)bp;
-    return strcmp(a, b);
-}
-
 int main(int argc, char **argv)
 {
     editor_recompute_lines(&editor);
@@ -279,6 +269,13 @@ int main(int argc, char **argv)
         }
     }
 
+    const char *dir_path = ".";
+    Errno err = fb_open_dir(&fb, dir_path);
+    if (err != 0) {
+        fprintf(stderr, "ERROR: Could not read directory %s: %s\n", dir_path, strerror(errno));
+        return 1;
+    }
+
     if (SDL_Init(SDL_INIT_VIDEO) < 0) {
         fprintf(stderr, "ERROR: Could not initialize SDL: %s\n", SDL_GetError());
         return 1;
@@ -346,7 +343,6 @@ int main(int argc, char **argv)
 
     bool quit = false;
     bool file_browser = false;
-    File_Browser fb = {0};
     while (!quit) {
         const Uint32 start = SDL_GetTicks();
         SDL_Event event = {0};
@@ -404,16 +400,7 @@ int main(int argc, char **argv)
                     break;
 
                     case SDLK_F3: {
-                        fb.files.count = 0;
-                        fb.cursor = 0;
-                        const char *dir_path = ".";
-                        Errno err = read_entire_dir(dir_path, &fb.files);
-                        if (err != 0) {
-                            flash_error("Could not read directory %s: %s", dir_path, strerror(errno));
-                        } else {
-                            qsort(fb.files.items, fb.files.count, sizeof(*fb.files.items), file_cmp);
-                            file_browser = true;
-                        }
+                        file_browser = true;
                     }
                     break;