Bladeren bron

Factor out file_browser translation unit

rexim 2 jaren geleden
bovenliggende
commit
0c582f90a9
5 gewijzigde bestanden met toevoegingen van 46 en 25 verwijderingen
  1. 1 1
      build.sh
  2. 1 1
      build_msvc.bat
  3. 21 0
      src/file_browser.c
  4. 13 0
      src/file_browser.h
  5. 10 23
      src/main.c

+ 1 - 1
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"

+ 1 - 1
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

+ 21 - 0
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;
+}

+ 13 - 0
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_

+ 10 - 23
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;