diff --git a/Makefile.os4 b/Makefile.os4 index 16b1f414..1a203cea 100644 --- a/Makefile.os4 +++ b/Makefile.os4 @@ -5,17 +5,20 @@ # LiteXL_OBJ := \ - src/dirmonitor.o src/main.o src/rencache.o src/renderer.o \ - src/renwindow.o src/api/api.o src/api/regex.o \ - src/api/renderer.o src/api/system.o src/platform/amigaos4.o + src/main.o src/rencache.o src/renderer.o src/renwindow.o \ + src/api/dirmonitor/os4.o \ + src/api/api.o src/api/dirmonitor.o src/api/regex.o \ + src/api/renderer.o src/api/system.o \ + src/platform/amigaos4.o +# src/api/process.o outfile := lite compiler := gcc cxxcompiler := g++ INCPATH := -Isrc -Ilib/dmon -I/sdk/local/newlib/include/SDL2 -I/sdk/local/common/include/freetype2 -DFLAGS := -D__USE_INLINE__ -DLITE_XL_DATA_USE_EXEDIR +DFLAGS := -D__USE_INLINE__ -DLITE_XL_DATA_USE_EXEDIR -DDIRMONITOR_BACKEND=os4 -DDIRMONITOR_OS4 # -DLITE_USE_SDL_RENDERER # -Wextra -Wall CFLAGS := -Werror -Wwrite-strings -O3 -g -std=gnu11 -fno-strict-aliasing @@ -43,10 +46,8 @@ LiteXL: $(LiteXL_OBJ) @echo "Compiling $<" @$(compiler) -c $< -o $*.o $(CFLAGS) $(INCPATH) $(DFLAGS) -src/dirmonitor.o: src/dirmonitor.c src/platform/amigaos4.h - src/main.o: src/main.c src/api/api.h src/rencache.h \ - src/renderer.h src/platform/amigaos4.h src/dirmonitor.h + src/renderer.h src/platform/amigaos4.h src/rencache.o: src/rencache.c @@ -54,8 +55,12 @@ src/renderer.o: src/renderer.c src/renwindow.o: src/renwindow.c +src/api/dirmonitor/os4.o: src/api/dirmonitor/os4.c + src/api/api.o: src/api/api.c +src/api/dirmonitor.o: src/api/dirmonitor.c src/api/dirmonitor/os4.c + src/api/regex.o: src/api/regex.c src/api/renderer.o: src/api/renderer.c @@ -65,8 +70,6 @@ src/api/system.o: src/api/system.c src/platform/amigaos4.o: src/platform/amigaos4.c - - release: mkdir -p release/LiteXL cp release_files/* release/LiteXL/ -r @@ -79,3 +82,4 @@ release: cp README_OS4.md release/LiteXL/ cp LICENSE release/LiteXL/ lha -aeqr3 a LiteXL.lha release/ + diff --git a/data/core/dirwatch.lua b/data/core/dirwatch.lua index 2bcf5508..e98be88d 100644 --- a/data/core/dirwatch.lua +++ b/data/core/dirwatch.lua @@ -13,7 +13,8 @@ function dirwatch.new() scanned = {}, watched = {}, reverse_watched = {}, - monitor = dirmonitor.new(), + -- monitor = dirmonitor.new(), + monitor = 0, windows_watch_top = nil, windows_watch_count = 0 } @@ -36,23 +37,25 @@ function dirwatch:watch(directory, bool) if not self.watched[directory] and not self.scanned[directory] then if PLATFORM == "Windows" then if not self.windows_watch_top or directory:find(self.windows_watch_top, 1, true) ~= 1 then - -- Get the highest level of directory that is common to this directory, and the original. - local target = directory - while self.windows_watch_top and self.windows_watch_top:find(target, 1, true) ~= 1 do - target = common.dirname(target) - end - if target ~= self.windows_watch_top then - local value = self.monitor:watch(target) - if value and value < 0 then - return self:scan(directory) - end - self.windows_watch_top = target - self.windows_watch_count = self.windows_watch_count + 1 - end + -- Get the highest level of directory that is common to this directory, and the original. + local target = directory + while self.windows_watch_top and self.windows_watch_top:find(target, 1, true) ~= 1 do + target = common.dirname(target) + end + if target ~= self.windows_watch_top then + local value = self.monitor:watch(target) + if value and value < 0 then + return self:scan(directory) + end + self.windows_watch_top = target + self.windows_watch_count = self.windows_watch_count + 1 + end end self.watched[directory] = true else - local value = self.monitor:watch(directory) + -- TODO: Fix value to get it from monitor + -- local value = self.monitor:watch(directory) + local value = -1 -- If for whatever reason, we can't watch this directory, revert back to scanning. -- Don't bother trying to find out why, for now. if value and value < 0 then @@ -218,3 +221,4 @@ end return dirwatch + diff --git a/data/core/init.lua b/data/core/init.lua index fb2ea30b..971205a0 100644 --- a/data/core/init.lua +++ b/data/core/init.lua @@ -1321,3 +1321,4 @@ end return core + diff --git a/scripts/innosetup/innosetup.iss.in b/scripts/innosetup/innosetup.iss.in index 31ca8008..76129174 100644 --- a/scripts/innosetup/innosetup.iss.in +++ b/scripts/innosetup/innosetup.iss.in @@ -1,88 +1,88 @@ -#define MyAppName "Lite XL" -#define MyAppVersion "@PROJECT_VERSION@" -#define MyAppPublisher "Lite XL Team" -#define MyAppURL "https://lite-xl.com" -#define MyAppExeName "lite-xl.exe" -#define BuildDir "@PROJECT_BUILD_DIR@" -#define SourceDir "@PROJECT_SOURCE_DIR@" - -; Use /dArch option to create a setup for a different architecture, e.g.: -; iscc /dArch=x86 innosetup.iss -#ifndef Arch - #define Arch "x64" -#endif - -[Setup] -; NOTE: The value of AppId uniquely identifies this application. -; Do not use the same AppId value in installers for other applications. -; To generate a new GUID, click Tools | Generate GUID inside the InnoSetup IDE. -AppId={{06761240-D97C-43DE-B9ED-C15F765A2D65} - -AppName={#MyAppName} -AppVersion={#MyAppVersion} -;AppVerName={#MyAppName} {#MyAppVersion} -AppPublisher={#MyAppPublisher} -AppPublisherURL={#MyAppURL} -AppSupportURL={#MyAppURL} -AppUpdatesURL={#MyAppURL} - -#if Arch=="x64" - ArchitecturesAllowed=x64 - ArchitecturesInstallIn64BitMode=x64 - #define ArchInternal "x86_64" -#else - #define ArchInternal "i686" -#endif - -AllowNoIcons=yes -Compression=lzma -SolidCompression=yes -DefaultDirName={autopf}/{#MyAppName} -DefaultGroupName={#MyAppPublisher} -UninstallFilesDir={app} - -; Uncomment the following line to run in non administrative install mode -; (install for current user only.) -;PrivilegesRequired=lowest -PrivilegesRequiredOverridesAllowed=dialog - -; The [Icons] "quicklaunchicon" entry uses {userappdata} -; but its [Tasks] entry has a proper IsAdminInstallMode Check. -UsedUserAreasWarning=no - -OutputDir=. -OutputBaseFilename=LiteXL-{#MyAppVersion}-{#ArchInternal}-setup -;DisableDirPage=yes -;DisableProgramGroupPage=yes - -LicenseFile={#SourceDir}/LICENSE -SetupIconFile={#SourceDir}/resources/icons/icon.ico -WizardImageFile="{#SourceDir}/scripts/innosetup/wizard-modern-image.bmp" -WizardSmallImageFile="{#SourceDir}/scripts/innosetup/litexl-55px.bmp" - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" - -[Tasks] -Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked -Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.1; Check: not IsAdminInstallMode -Name: "portablemode"; Description: "Portable Mode"; Flags: unchecked - -[Files] -Source: "{#BuildDir}/src/lite-xl.exe"; DestDir: "{app}"; Flags: ignoreversion -Source: "{#BuildDir}/mingwLibs{#Arch}/*"; DestDir: "{app}"; Flags: ignoreversion ; Check: DirExists(ExpandConstant('{#BuildDir}/mingwLibs{#Arch}')) -Source: "{#SourceDir}/data/*"; DestDir: "{app}/data"; Flags: ignoreversion recursesubdirs -; NOTE: Don't use "Flags: ignoreversion" on any shared system files - -[Icons] -Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon -Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: not WizardIsTaskSelected('portablemode') -Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"; Check: not WizardIsTaskSelected('portablemode') -Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon; Check: not WizardIsTaskSelected('portablemode') -; Name: "{usersendto}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" - -[Run] -Filename: "{app}/{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent - -[Setup] -Uninstallable=not WizardIsTaskSelected('portablemode') +#define MyAppName "Lite XL" +#define MyAppVersion "@PROJECT_VERSION@" +#define MyAppPublisher "Lite XL Team" +#define MyAppURL "https://lite-xl.com" +#define MyAppExeName "lite-xl.exe" +#define BuildDir "@PROJECT_BUILD_DIR@" +#define SourceDir "@PROJECT_SOURCE_DIR@" + +; Use /dArch option to create a setup for a different architecture, e.g.: +; iscc /dArch=x86 innosetup.iss +#ifndef Arch + #define Arch "x64" +#endif + +[Setup] +; NOTE: The value of AppId uniquely identifies this application. +; Do not use the same AppId value in installers for other applications. +; To generate a new GUID, click Tools | Generate GUID inside the InnoSetup IDE. +AppId={{06761240-D97C-43DE-B9ED-C15F765A2D65} + +AppName={#MyAppName} +AppVersion={#MyAppVersion} +;AppVerName={#MyAppName} {#MyAppVersion} +AppPublisher={#MyAppPublisher} +AppPublisherURL={#MyAppURL} +AppSupportURL={#MyAppURL} +AppUpdatesURL={#MyAppURL} + +#if Arch=="x64" + ArchitecturesAllowed=x64 + ArchitecturesInstallIn64BitMode=x64 + #define ArchInternal "x86_64" +#else + #define ArchInternal "i686" +#endif + +AllowNoIcons=yes +Compression=lzma +SolidCompression=yes +DefaultDirName={autopf}/{#MyAppName} +DefaultGroupName={#MyAppPublisher} +UninstallFilesDir={app} + +; Uncomment the following line to run in non administrative install mode +; (install for current user only.) +;PrivilegesRequired=lowest +PrivilegesRequiredOverridesAllowed=dialog + +; The [Icons] "quicklaunchicon" entry uses {userappdata} +; but its [Tasks] entry has a proper IsAdminInstallMode Check. +UsedUserAreasWarning=no + +OutputDir=. +OutputBaseFilename=LiteXL-{#MyAppVersion}-{#ArchInternal}-setup +;DisableDirPage=yes +;DisableProgramGroupPage=yes + +LicenseFile={#SourceDir}/LICENSE +SetupIconFile={#SourceDir}/resources/icons/icon.ico +WizardImageFile="{#SourceDir}/scripts/innosetup/wizard-modern-image.bmp" +WizardSmallImageFile="{#SourceDir}/scripts/innosetup/litexl-55px.bmp" + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" + +[Tasks] +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked +Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.1; Check: not IsAdminInstallMode +Name: "portablemode"; Description: "Portable Mode"; Flags: unchecked + +[Files] +Source: "{#BuildDir}/src/lite-xl.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: "{#BuildDir}/mingwLibs{#Arch}/*"; DestDir: "{app}"; Flags: ignoreversion ; Check: DirExists(ExpandConstant('{#BuildDir}/mingwLibs{#Arch}')) +Source: "{#SourceDir}/data/*"; DestDir: "{app}/data"; Flags: ignoreversion recursesubdirs +; NOTE: Don't use "Flags: ignoreversion" on any shared system files + +[Icons] +Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon +Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: not WizardIsTaskSelected('portablemode') +Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"; Check: not WizardIsTaskSelected('portablemode') +Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon; Check: not WizardIsTaskSelected('portablemode') +; Name: "{usersendto}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" + +[Run] +Filename: "{app}/{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent + +[Setup] +Uninstallable=not WizardIsTaskSelected('portablemode') diff --git a/src/api/api.c b/src/api/api.c index c0a8dec1..2999211e 100644 --- a/src/api/api.c +++ b/src/api/api.c @@ -4,14 +4,14 @@ int luaopen_system(lua_State *L); int luaopen_renderer(lua_State *L); int luaopen_regex(lua_State *L); // int luaopen_process(lua_State *L); -// int luaopen_dirmonitor(lua_State* L); +int luaopen_dirmonitor(lua_State* L); static const luaL_Reg libs[] = { { "system", luaopen_system }, { "renderer", luaopen_renderer }, { "regex", luaopen_regex }, // { "process", luaopen_process }, - // { "dirmonitor", luaopen_dirmonitor }, + { "dirmonitor", luaopen_dirmonitor }, { NULL, NULL } }; diff --git a/src/api/dirmonitor.c b/src/api/dirmonitor.c index 3c79c0d9..f70e8bc7 100644 --- a/src/api/dirmonitor.c +++ b/src/api/dirmonitor.c @@ -5,6 +5,8 @@ #elif __linux__ #include #include +#elif __amigaos4__ +// #define DIRMONITOR_BACKEND 'os4' #else #include #endif @@ -94,3 +96,4 @@ int luaopen_dirmonitor(lua_State* L) { lua_setfield(L, -2, "__index"); return 1; } + diff --git a/src/api/dirmonitor/os4.c b/src/api/dirmonitor/os4.c new file mode 100644 index 00000000..4e61a3c6 --- /dev/null +++ b/src/api/dirmonitor/os4.c @@ -0,0 +1,23 @@ +#include + +struct dirmonitor { +}; + +struct dirmonitor* init_dirmonitor_os4() { + return NULL; +} + +void deinit_dirmonitor_os4(struct dirmonitor* monitor) { +} + +int check_dirmonitor_os4(struct dirmonitor* monitor, int (*change_callback)(int, const char*, void*), void* data) { + return -1; +} + +int add_dirmonitor_os4(struct dirmonitor* monitor, const char* path) { + return -1; +} + +void remove_dirmonitor_os4(struct dirmonitor* monitor, int fd) { +} +