Compare commits
12 Commits
Author | SHA1 | Date |
---|---|---|
George Sokianos | ff3e5282f6 | |
George Sokianos | 89e2defb5b | |
George Sokianos | 1e90105944 | |
George Sokianos | f2e42ca2fa | |
George Sokianos | decd5deeae | |
George Sokianos | b5831ace20 | |
George Sokianos | 8fe3c75339 | |
George Sokianos | 9b599aaa78 | |
George Sokianos | ddb81648c2 | |
George Sokianos | b919e5b942 | |
George Sokianos | 05cf40c1c9 | |
George Sokianos | ad75b7521f |
|
@ -18,3 +18,9 @@ compile_commands.json
|
||||||
error.txt
|
error.txt
|
||||||
lite-xl*
|
lite-xl*
|
||||||
LiteXL*
|
LiteXL*
|
||||||
|
lite
|
||||||
|
.config/
|
||||||
|
*.lha
|
||||||
|
release_files
|
||||||
|
*.o
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
#
|
||||||
|
# Project: Lite XL
|
||||||
|
#
|
||||||
|
# Created on: 26-12-2021
|
||||||
|
#
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
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
|
||||||
|
# -DLITE_USE_SDL_RENDERER
|
||||||
|
# -Wextra -Wall
|
||||||
|
CFLAGS := -Werror -Wwrite-strings -O3 -g -std=gnu11 -fno-strict-aliasing
|
||||||
|
# "-gstabs -finstrument-functions -fno-inline -DPROFILING"
|
||||||
|
LFLAGS := -mcrt=newlib -static-libgcc -static-libstdc++ -lauto -lpcre2 -lSDL2 -llua -lagg -lfreetype -lm -lunix -lpthread -athread=native
|
||||||
|
# " -lprofyle"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.PHONY: LiteXL clean release
|
||||||
|
|
||||||
|
default: LiteXL
|
||||||
|
|
||||||
|
clean:
|
||||||
|
@echo "Cleaning compiler objects..."
|
||||||
|
@rm -f $(LiteXL_OBJ)
|
||||||
|
|
||||||
|
LiteXL: $(LiteXL_OBJ)
|
||||||
|
@echo "Linking LiteXL"
|
||||||
|
@$(cxxcompiler) -o $(outfile) $(LiteXL_OBJ) $(LFLAGS)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.c.o:
|
||||||
|
@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/rencache.o: src/rencache.c
|
||||||
|
|
||||||
|
src/renderer.o: src/renderer.c
|
||||||
|
|
||||||
|
src/renwindow.o: src/renwindow.c
|
||||||
|
|
||||||
|
src/api/api.o: src/api/api.c
|
||||||
|
|
||||||
|
src/api/regex.o: src/api/regex.c
|
||||||
|
|
||||||
|
src/api/renderer.o: src/api/renderer.c
|
||||||
|
|
||||||
|
src/api/system.o: src/api/system.c
|
||||||
|
|
||||||
|
src/platform/amigaos4.o: src/platform/amigaos4.c
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
release:
|
||||||
|
mkdir -p release/LiteXL2
|
||||||
|
cp release_files/* release/LiteXL2/ -r
|
||||||
|
mv release/LiteXL2/LiteXL2.info release/
|
||||||
|
cp data release/LiteXL2/ -r
|
||||||
|
cp changelog.md release/LiteXL2/
|
||||||
|
cp lite release/LiteXL2/
|
||||||
|
strip release/LiteXL2/lite
|
||||||
|
cp README.md release/LiteXL2/
|
||||||
|
cp README_OS4.md release/LiteXL2/
|
||||||
|
cp LICENSE release/LiteXL2/
|
||||||
|
lha -aeqr3 a LiteXL2_OS4.lha release/
|
||||||
|
|
|
@ -0,0 +1,204 @@
|
||||||
|
# Lite XL v2 for AmigaOS 4.1 FE
|
||||||
|
|
||||||
|
Lite XL is a lightweight text editor written in Lua.
|
||||||
|
|
||||||
|
The port is not perfect and might has issues here and there. For example
|
||||||
|
the filesystem notifications are not working yet. So when you make changes
|
||||||
|
at a project folder those will not be reflected in Lite XL automatically.
|
||||||
|
|
||||||
|
It might crash from time to time, if there is a path problem, but overall
|
||||||
|
it works pretty well. This is my daily editor for any kind of development.
|
||||||
|
|
||||||
|
## New features against Lite XL v1
|
||||||
|
- Faster file scrolling
|
||||||
|
- Faster switch between tabs
|
||||||
|
- Reposition tabs at the side or at the bottom of other tabs, making
|
||||||
|
multiple columns/rows of opened files
|
||||||
|
- Multiple cursor editing
|
||||||
|
- Better font manipulation and appearance
|
||||||
|
- Faster transitions
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
You can extract the Lite XL archive wherever you want and run the *lite*
|
||||||
|
editor.
|
||||||
|
|
||||||
|
## Configuration folder
|
||||||
|
This editor creates a `.config` folder where the configuration is saved, as
|
||||||
|
well as plugins, themes etc.. By default this AmigaOS 4.1 FE version uses the
|
||||||
|
executable folder, but if you want to ovveride it, create an ENV variable
|
||||||
|
named `HOME` and set there your path.
|
||||||
|
|
||||||
|
You can check if there is one already set by executing the following command
|
||||||
|
in a shell
|
||||||
|
```
|
||||||
|
GetEnv HOME
|
||||||
|
```
|
||||||
|
If there is one set, then you will see the path at the output.
|
||||||
|
|
||||||
|
Otherwise, you can set your home path be executing the following command.
|
||||||
|
Change the path to the one of your preference.
|
||||||
|
```
|
||||||
|
SetEnv SAVE HOME "Sys:home/"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Addons
|
||||||
|
### Colors
|
||||||
|
Colors are lua files that set the color scheme of the editor. There are
|
||||||
|
light and dark themes for you to choose.
|
||||||
|
|
||||||
|
To install and use them you have to copy the ones you would like from
|
||||||
|
`addons/colors/light` or `addons/colors/dark` into the folder
|
||||||
|
`.config/lite-xl/colors/`. Don't add light or dark folders. Just copy the
|
||||||
|
.lua files in there.
|
||||||
|
|
||||||
|
Then you have to start Lite XL and open your configuration by clicking
|
||||||
|
at the cog icon at the toolbar (bottom left sixth icon). Go at the line
|
||||||
|
that looks like below
|
||||||
|
```
|
||||||
|
-- core.reload_module("colors.summer")
|
||||||
|
```
|
||||||
|
and change the `summer` with the name of your color theme. Also, remove
|
||||||
|
the two dashes `--` at the start of the line and save the file. If you
|
||||||
|
did everything right, the color schema should change instantly.
|
||||||
|
|
||||||
|
The themes can also be found at
|
||||||
|
https://github.com/lite-xl/lite-xl-colors
|
||||||
|
|
||||||
|
### Plugins
|
||||||
|
The Lite XL that you are using on AmigaOS 4 is based on version 2.0.4
|
||||||
|
and not the latest version that is available by the development team.
|
||||||
|
This means that some of the latest plugins might not working at all
|
||||||
|
or need some modifications to work.
|
||||||
|
|
||||||
|
To make it easier for you, I gathered some of the plugins that are working
|
||||||
|
well, and I included them under `addons/plugins`. For you to install the
|
||||||
|
ones you would like to use, you have to copy the `.lua` files into the
|
||||||
|
folder `.config/lite-xl/plugins/` and restart the editor.
|
||||||
|
|
||||||
|
Please, choose wisely, because adding all the plugins might make the editor
|
||||||
|
slower on your system. I would recommend you add only those that you really
|
||||||
|
need.
|
||||||
|
|
||||||
|
The included plugins are the following:
|
||||||
|
|
||||||
|
**autoinsert**
|
||||||
|
Automatically inserts closing brackets and quotes. Also allows selected
|
||||||
|
text to be wrapped with brackets or quotes.
|
||||||
|
|
||||||
|
**autowrap**
|
||||||
|
Automatically hardwraps lines when typing
|
||||||
|
|
||||||
|
**bigclock**
|
||||||
|
Shows the current time and date in a view with large text
|
||||||
|
|
||||||
|
**bracketmatch**
|
||||||
|
Underlines matching pair for bracket under the caret
|
||||||
|
|
||||||
|
**colorpreview**
|
||||||
|
Underlays color values (eg. `#ff00ff` or `rgb(255, 0, 255)`) with their
|
||||||
|
resultant color.
|
||||||
|
|
||||||
|
**eofnewline-xl**
|
||||||
|
Make sure the file ends with one blank line.
|
||||||
|
|
||||||
|
**ephemeral_tabs**
|
||||||
|
Preview tabs. Opening a doc will replace the contents of the preview tab.
|
||||||
|
Marks tabs as non-preview on any change or tab double clicking.
|
||||||
|
|
||||||
|
**ghmarkdown**
|
||||||
|
Opens a preview of the current markdown file in a browser window
|
||||||
|
|
||||||
|
**indentguide**
|
||||||
|
Adds indent guides
|
||||||
|
|
||||||
|
**language_make**
|
||||||
|
Syntax for the Make build system language
|
||||||
|
|
||||||
|
**language_sh**
|
||||||
|
Syntax for shell scripting language
|
||||||
|
|
||||||
|
**lfautoinsert**
|
||||||
|
Automatically inserts indentation and closing bracket/text after newline
|
||||||
|
|
||||||
|
**markers**
|
||||||
|
Add markers to docs and jump between them quickly
|
||||||
|
|
||||||
|
**minimap**
|
||||||
|
Shows a minimap on the right-hand side of the docview. Please note that
|
||||||
|
this plugin will make the editor slower on file loading and scrolling.
|
||||||
|
|
||||||
|
**navigate**
|
||||||
|
Allows moving back and forward between document positions, reducing the
|
||||||
|
amount of scrolling
|
||||||
|
|
||||||
|
**rainbowparen**
|
||||||
|
Show nesting of parentheses with rainbow colours
|
||||||
|
|
||||||
|
**restoretabs**
|
||||||
|
Keep a list of recently closed tabs, and restore the tab in order on
|
||||||
|
cntrl+shift+t.
|
||||||
|
|
||||||
|
**selectionhighlight**
|
||||||
|
Highlights regions of code that match the current selection
|
||||||
|
|
||||||
|
**smallclock**
|
||||||
|
It adds a small clock at the bottom right corner.
|
||||||
|
|
||||||
|
## Tips and tricks
|
||||||
|
|
||||||
|
### Transitions
|
||||||
|
|
||||||
|
If you want to disable the transitions and make the editor faster,
|
||||||
|
open your configuration file by clicking at the cog icon at the toolbar
|
||||||
|
(bottom left, 6th icon) and add the following line at the end of the file,
|
||||||
|
and then save it. You might need to restart your editor (CTRL+SHIFT+R)
|
||||||
|
|
||||||
|
```
|
||||||
|
config.transitions = false
|
||||||
|
```
|
||||||
|
|
||||||
|
### Hide files from the file list
|
||||||
|
|
||||||
|
If you would like to hide files or whole folder from the left side bar list,
|
||||||
|
open your configuration by clicking at the cog icon at the toolbar
|
||||||
|
(bottom left sixth icon) and add the followline at the end of the file and
|
||||||
|
save it. This hides all the files that start with a dot, and all the `.info`
|
||||||
|
files. You might need to restart your editor (CTRL+SHIFT+R)
|
||||||
|
|
||||||
|
```
|
||||||
|
config.ignore_files = {"^%.", "%.info$"}
|
||||||
|
```
|
||||||
|
|
||||||
|
You can add as many rules as you want in there, to hide files or
|
||||||
|
folders, as you like.
|
||||||
|
|
||||||
|
## I would like to thank
|
||||||
|
|
||||||
|
- IconDesigner for the proper glow icons that are included in the release
|
||||||
|
- Capehill for his tireless work on SDL port
|
||||||
|
- Michael Trebilcock for his port on liblua
|
||||||
|
- Lite XL original team for being helpful and providing info
|
||||||
|
|
||||||
|
Without all the above Lite XL would not be possible
|
||||||
|
|
||||||
|
## Support
|
||||||
|
If you enjoy what I am doing and would like to keep me up during the night,
|
||||||
|
please consider to buy me a coffee at:
|
||||||
|
https://ko-fi.com/walkero
|
||||||
|
|
||||||
|
## Known issues
|
||||||
|
You can find the known issues at
|
||||||
|
https://git.walkero.gr/walkero/lite-xl/issues
|
||||||
|
|
||||||
|
# Changelog
|
||||||
|
|
||||||
|
## [2.0.3r1] - 2022-03-30
|
||||||
|
### Changed
|
||||||
|
- Applied all the necessary changes to make it run under AmigaOS 4.1 FE
|
||||||
|
- Fixes and changes
|
||||||
|
|
||||||
|
# Disclaimer
|
||||||
|
YOU MAY USE IT AT YOUR OWN RISK!
|
||||||
|
I will not be held responsible for any data loss or problem you might get
|
||||||
|
by using this software.
|
||||||
|
|
Binary file not shown.
|
@ -695,7 +695,7 @@ function core.init()
|
||||||
local plugins_success, plugins_refuse_list = core.load_plugins()
|
local plugins_success, plugins_refuse_list = core.load_plugins()
|
||||||
|
|
||||||
do
|
do
|
||||||
local pdir, pname = project_dir_abs:match("(.*)[/\\\\](.*)")
|
local pdir, pname = project_dir_abs:match("(.*)[:/\\\\](.*)")
|
||||||
core.log("Opening project %q from directory %s", pname, pdir)
|
core.log("Opening project %q from directory %s", pname, pdir)
|
||||||
end
|
end
|
||||||
local got_project_error = not core.load_project_module()
|
local got_project_error = not core.load_project_module()
|
||||||
|
@ -1374,3 +1374,4 @@ end
|
||||||
|
|
||||||
|
|
||||||
return core
|
return core
|
||||||
|
|
||||||
|
|
|
@ -7,9 +7,10 @@ keymap.map = {}
|
||||||
keymap.reverse_map = {}
|
keymap.reverse_map = {}
|
||||||
|
|
||||||
local macos = PLATFORM == "Mac OS X"
|
local macos = PLATFORM == "Mac OS X"
|
||||||
|
local os4 = PLATFORM == "AmigaOS 4"
|
||||||
|
|
||||||
-- Thanks to mathewmariani, taken from his lite-macos github repository.
|
-- Thanks to mathewmariani, taken from his lite-macos github repository.
|
||||||
local modkeys_os = require("core.modkeys-" .. (macos and "macos" or "generic"))
|
local modkeys_os = require("core.modkeys-" .. (macos and "macos" or os4 and "os4" or "generic"))
|
||||||
local modkey_map = modkeys_os.map
|
local modkey_map = modkeys_os.map
|
||||||
local modkeys = modkeys_os.keys
|
local modkeys = modkeys_os.keys
|
||||||
|
|
||||||
|
@ -259,3 +260,4 @@ keymap.add_direct {
|
||||||
}
|
}
|
||||||
|
|
||||||
return keymap
|
return keymap
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
local modkeys = {}
|
||||||
|
|
||||||
|
modkeys.map = {
|
||||||
|
["left amiga"] = "cmd",
|
||||||
|
["right amiga"] = "cmd",
|
||||||
|
["control"] = "ctrl",
|
||||||
|
["left shift"] = "shift",
|
||||||
|
["right shift"] = "shift",
|
||||||
|
["left alt"] = "alt",
|
||||||
|
["right alt"] = "altgr",
|
||||||
|
}
|
||||||
|
|
||||||
|
modkeys.keys = { "cmd", "ctrl", "alt", "altgr", "shift" }
|
||||||
|
|
||||||
|
return modkeys
|
|
@ -1,5 +1,5 @@
|
||||||
-- this file is used by lite-xl to setup the Lua environment when starting
|
-- this file is used by lite-xl to setup the Lua environment when starting
|
||||||
VERSION = "@PROJECT_VERSION@"
|
VERSION = "2.0.3r1"
|
||||||
MOD_VERSION = "2"
|
MOD_VERSION = "2"
|
||||||
|
|
||||||
SCALE = tonumber(os.getenv("LITE_SCALE") or os.getenv("GDK_SCALE") or os.getenv("QT_SCALE_FACTOR")) or SCALE
|
SCALE = tonumber(os.getenv("LITE_SCALE") or os.getenv("GDK_SCALE") or os.getenv("QT_SCALE_FACTOR")) or SCALE
|
||||||
|
@ -31,3 +31,4 @@ end }
|
||||||
|
|
||||||
table.pack = table.pack or pack or function(...) return {...} end
|
table.pack = table.pack or pack or function(...) return {...} end
|
||||||
table.unpack = table.unpack or unpack
|
table.unpack = table.unpack or unpack
|
||||||
|
|
||||||
|
|
|
@ -137,6 +137,9 @@ DMON_API_DECL void dmon_unwatch(dmon_watch_id id);
|
||||||
#elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
|
#elif defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
|
||||||
# undef DMON_OS_MACOS
|
# undef DMON_OS_MACOS
|
||||||
# define DMON_OS_MACOS __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
|
# define DMON_OS_MACOS __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__
|
||||||
|
#elif defined(__amigaos4__)
|
||||||
|
# undef DMON_OS_AMIGAOS4
|
||||||
|
# define DMON_OS_AMIGAOS4 1
|
||||||
#else
|
#else
|
||||||
# define DMON_OS 0
|
# define DMON_OS 0
|
||||||
# error "unsupported platform"
|
# error "unsupported platform"
|
||||||
|
@ -175,6 +178,7 @@ DMON_API_DECL void dmon_unwatch(dmon_watch_id id);
|
||||||
# include <sys/time.h>
|
# include <sys/time.h>
|
||||||
# include <sys/stat.h>
|
# include <sys/stat.h>
|
||||||
# include <dispatch/dispatch.h>
|
# include <dispatch/dispatch.h>
|
||||||
|
#elif DMON_OS_AMIGAOS4
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef DMON_MALLOC
|
#ifndef DMON_MALLOC
|
||||||
|
|
|
@ -1,88 +1,88 @@
|
||||||
#define MyAppName "Lite XL"
|
#define MyAppName "Lite XL"
|
||||||
#define MyAppVersion "@PROJECT_VERSION@"
|
#define MyAppVersion "@PROJECT_VERSION@"
|
||||||
#define MyAppPublisher "Lite XL Team"
|
#define MyAppPublisher "Lite XL Team"
|
||||||
#define MyAppURL "https://lite-xl.github.io"
|
#define MyAppURL "https://lite-xl.github.io"
|
||||||
#define MyAppExeName "lite-xl.exe"
|
#define MyAppExeName "lite-xl.exe"
|
||||||
#define BuildDir "@PROJECT_BUILD_DIR@"
|
#define BuildDir "@PROJECT_BUILD_DIR@"
|
||||||
#define SourceDir "@PROJECT_SOURCE_DIR@"
|
#define SourceDir "@PROJECT_SOURCE_DIR@"
|
||||||
|
|
||||||
; Use /dArch option to create a setup for a different architecture, e.g.:
|
; Use /dArch option to create a setup for a different architecture, e.g.:
|
||||||
; iscc /dArch=x86 innosetup.iss
|
; iscc /dArch=x86 innosetup.iss
|
||||||
#ifndef Arch
|
#ifndef Arch
|
||||||
#define Arch "x64"
|
#define Arch "x64"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
[Setup]
|
[Setup]
|
||||||
; NOTE: The value of AppId uniquely identifies this application.
|
; NOTE: The value of AppId uniquely identifies this application.
|
||||||
; Do not use the same AppId value in installers for other applications.
|
; 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.
|
; To generate a new GUID, click Tools | Generate GUID inside the InnoSetup IDE.
|
||||||
AppId={{06761240-D97C-43DE-B9ED-C15F765A2D65}
|
AppId={{06761240-D97C-43DE-B9ED-C15F765A2D65}
|
||||||
|
|
||||||
AppName={#MyAppName}
|
AppName={#MyAppName}
|
||||||
AppVersion={#MyAppVersion}
|
AppVersion={#MyAppVersion}
|
||||||
;AppVerName={#MyAppName} {#MyAppVersion}
|
;AppVerName={#MyAppName} {#MyAppVersion}
|
||||||
AppPublisher={#MyAppPublisher}
|
AppPublisher={#MyAppPublisher}
|
||||||
AppPublisherURL={#MyAppURL}
|
AppPublisherURL={#MyAppURL}
|
||||||
AppSupportURL={#MyAppURL}
|
AppSupportURL={#MyAppURL}
|
||||||
AppUpdatesURL={#MyAppURL}
|
AppUpdatesURL={#MyAppURL}
|
||||||
|
|
||||||
#if Arch=="x64"
|
#if Arch=="x64"
|
||||||
ArchitecturesAllowed=x64
|
ArchitecturesAllowed=x64
|
||||||
ArchitecturesInstallIn64BitMode=x64
|
ArchitecturesInstallIn64BitMode=x64
|
||||||
#define ArchInternal "x86_64"
|
#define ArchInternal "x86_64"
|
||||||
#else
|
#else
|
||||||
#define ArchInternal "i686"
|
#define ArchInternal "i686"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
AllowNoIcons=yes
|
AllowNoIcons=yes
|
||||||
Compression=lzma
|
Compression=lzma
|
||||||
SolidCompression=yes
|
SolidCompression=yes
|
||||||
DefaultDirName={autopf}/{#MyAppName}
|
DefaultDirName={autopf}/{#MyAppName}
|
||||||
DefaultGroupName={#MyAppPublisher}
|
DefaultGroupName={#MyAppPublisher}
|
||||||
UninstallFilesDir={app}
|
UninstallFilesDir={app}
|
||||||
|
|
||||||
; Uncomment the following line to run in non administrative install mode
|
; Uncomment the following line to run in non administrative install mode
|
||||||
; (install for current user only.)
|
; (install for current user only.)
|
||||||
;PrivilegesRequired=lowest
|
;PrivilegesRequired=lowest
|
||||||
PrivilegesRequiredOverridesAllowed=dialog
|
PrivilegesRequiredOverridesAllowed=dialog
|
||||||
|
|
||||||
; The [Icons] "quicklaunchicon" entry uses {userappdata}
|
; The [Icons] "quicklaunchicon" entry uses {userappdata}
|
||||||
; but its [Tasks] entry has a proper IsAdminInstallMode Check.
|
; but its [Tasks] entry has a proper IsAdminInstallMode Check.
|
||||||
UsedUserAreasWarning=no
|
UsedUserAreasWarning=no
|
||||||
|
|
||||||
OutputDir=.
|
OutputDir=.
|
||||||
OutputBaseFilename=LiteXL-{#MyAppVersion}-{#ArchInternal}-setup
|
OutputBaseFilename=LiteXL-{#MyAppVersion}-{#ArchInternal}-setup
|
||||||
;DisableDirPage=yes
|
;DisableDirPage=yes
|
||||||
;DisableProgramGroupPage=yes
|
;DisableProgramGroupPage=yes
|
||||||
|
|
||||||
LicenseFile={#SourceDir}/LICENSE
|
LicenseFile={#SourceDir}/LICENSE
|
||||||
SetupIconFile={#SourceDir}/resources/icons/icon.ico
|
SetupIconFile={#SourceDir}/resources/icons/icon.ico
|
||||||
WizardImageFile="{#SourceDir}/scripts/innosetup/wizard-modern-image.bmp"
|
WizardImageFile="{#SourceDir}/scripts/innosetup/wizard-modern-image.bmp"
|
||||||
WizardSmallImageFile="{#SourceDir}/scripts/innosetup/litexl-55px.bmp"
|
WizardSmallImageFile="{#SourceDir}/scripts/innosetup/litexl-55px.bmp"
|
||||||
|
|
||||||
[Languages]
|
[Languages]
|
||||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||||
|
|
||||||
[Tasks]
|
[Tasks]
|
||||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
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: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.1; Check: not IsAdminInstallMode
|
||||||
Name: "portablemode"; Description: "Portable Mode"; Flags: unchecked
|
Name: "portablemode"; Description: "Portable Mode"; Flags: unchecked
|
||||||
|
|
||||||
[Files]
|
[Files]
|
||||||
Source: "{#BuildDir}/src/lite-xl.exe"; DestDir: "{app}"; Flags: ignoreversion
|
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: "{#BuildDir}/mingwLibs{#Arch}/*"; DestDir: "{app}"; Flags: ignoreversion ; Check: DirExists(ExpandConstant('{#BuildDir}/mingwLibs{#Arch}'))
|
||||||
Source: "{#SourceDir}/data/*"; DestDir: "{app}/data"; Flags: ignoreversion recursesubdirs
|
Source: "{#SourceDir}/data/*"; DestDir: "{app}/data"; Flags: ignoreversion recursesubdirs
|
||||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
|
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
|
||||||
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: not WizardIsTaskSelected('portablemode')
|
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: not WizardIsTaskSelected('portablemode')
|
||||||
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"; 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: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon; Check: not WizardIsTaskSelected('portablemode')
|
||||||
; Name: "{usersendto}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
|
; Name: "{usersendto}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
|
||||||
|
|
||||||
[Run]
|
[Run]
|
||||||
Filename: "{app}/{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
|
Filename: "{app}/{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
|
||||||
|
|
||||||
[Setup]
|
[Setup]
|
||||||
Uninstallable=not WizardIsTaskSelected('portablemode')
|
Uninstallable=not WizardIsTaskSelected('portablemode')
|
||||||
|
|
|
@ -4,13 +4,13 @@
|
||||||
int luaopen_system(lua_State *L);
|
int luaopen_system(lua_State *L);
|
||||||
int luaopen_renderer(lua_State *L);
|
int luaopen_renderer(lua_State *L);
|
||||||
int luaopen_regex(lua_State *L);
|
int luaopen_regex(lua_State *L);
|
||||||
int luaopen_process(lua_State *L);
|
// int luaopen_process(lua_State *L);
|
||||||
|
|
||||||
static const luaL_Reg libs[] = {
|
static const luaL_Reg libs[] = {
|
||||||
{ "system", luaopen_system },
|
{ "system", luaopen_system },
|
||||||
{ "renderer", luaopen_renderer },
|
{ "renderer", luaopen_renderer },
|
||||||
{ "regex", luaopen_regex },
|
{ "regex", luaopen_regex },
|
||||||
{ "process", luaopen_process },
|
// { "process", luaopen_process },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -18,3 +18,4 @@ void api_load_libs(lua_State *L) {
|
||||||
for (int i = 0; libs[i].name; i++)
|
for (int i = 0; libs[i].name; i++)
|
||||||
luaL_requiref(L, libs[i].name, libs[i].func, 1);
|
luaL_requiref(L, libs[i].name, libs[i].func, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "api.h"
|
#include "api.h"
|
||||||
#include "../renderer.h"
|
#include "renderer.h"
|
||||||
#include "../rencache.h"
|
#include "rencache.h"
|
||||||
|
|
||||||
static int f_font_load(lua_State *L) {
|
static int f_font_load(lua_State *L) {
|
||||||
const char *filename = luaL_checkstring(L, 1);
|
const char *filename = luaL_checkstring(L, 1);
|
||||||
|
@ -249,3 +249,4 @@ int luaopen_renderer(lua_State *L) {
|
||||||
lua_setfield(L, -2, "font");
|
lua_setfield(L, -2, "font");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,14 +6,16 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include "api.h"
|
#include "api.h"
|
||||||
#include "../dirmonitor.h"
|
// #include "dirmonitor.h"
|
||||||
#include "../rencache.h"
|
#include "rencache.h"
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <fileapi.h>
|
#include <fileapi.h>
|
||||||
#elif __linux__
|
#elif __linux__
|
||||||
#include <sys/vfs.h>
|
#include <sys/vfs.h>
|
||||||
|
#elif __amigaos4__
|
||||||
|
#include "platform/amigaos4.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern SDL_Window *window;
|
extern SDL_Window *window;
|
||||||
|
@ -99,6 +101,8 @@ static const char *numpad[] = { "end", "down", "pagedown", "left", "", "right",
|
||||||
|
|
||||||
static const char *get_key_name(const SDL_Event *e, char *buf) {
|
static const char *get_key_name(const SDL_Event *e, char *buf) {
|
||||||
SDL_Scancode scancode = e->key.keysym.scancode;
|
SDL_Scancode scancode = e->key.keysym.scancode;
|
||||||
|
|
||||||
|
#if !defined(__amigaos4__) && !defined(__MORPHOS__)
|
||||||
/* Is the scancode from the keypad and the number-lock off?
|
/* Is the scancode from the keypad and the number-lock off?
|
||||||
** We assume that SDL_SCANCODE_KP_1 up to SDL_SCANCODE_KP_9 and SDL_SCANCODE_KP_0
|
** We assume that SDL_SCANCODE_KP_1 up to SDL_SCANCODE_KP_9 and SDL_SCANCODE_KP_0
|
||||||
** and SDL_SCANCODE_KP_PERIOD are declared in SDL2 in that order. */
|
** and SDL_SCANCODE_KP_PERIOD are declared in SDL2 in that order. */
|
||||||
|
@ -106,6 +110,8 @@ static const char *get_key_name(const SDL_Event *e, char *buf) {
|
||||||
!(e->key.keysym.mod & KMOD_NUM)) {
|
!(e->key.keysym.mod & KMOD_NUM)) {
|
||||||
return numpad[scancode - SDL_SCANCODE_KP_1];
|
return numpad[scancode - SDL_SCANCODE_KP_1];
|
||||||
} else {
|
} else {
|
||||||
|
#endif
|
||||||
|
|
||||||
/* We need to correctly handle non-standard layouts such as dvorak.
|
/* We need to correctly handle non-standard layouts such as dvorak.
|
||||||
Therefore, if a Latin letter(code<128) is pressed in the current layout,
|
Therefore, if a Latin letter(code<128) is pressed in the current layout,
|
||||||
then we transmit it as it is. But we also need to support shortcuts in
|
then we transmit it as it is. But we also need to support shortcuts in
|
||||||
|
@ -117,7 +123,10 @@ static const char *get_key_name(const SDL_Event *e, char *buf) {
|
||||||
strcpy(buf, SDL_GetScancodeName(scancode));
|
strcpy(buf, SDL_GetScancodeName(scancode));
|
||||||
str_tolower(buf);
|
str_tolower(buf);
|
||||||
return buf;
|
return buf;
|
||||||
|
|
||||||
|
#if !defined(__amigaos4__) && !defined(__MORPHOS__)
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int f_poll_event(lua_State *L) {
|
static int f_poll_event(lua_State *L) {
|
||||||
|
@ -252,19 +261,19 @@ top:
|
||||||
case SDL_USEREVENT:
|
case SDL_USEREVENT:
|
||||||
lua_pushstring(L, "dirchange");
|
lua_pushstring(L, "dirchange");
|
||||||
lua_pushnumber(L, e.user.code >> 16);
|
lua_pushnumber(L, e.user.code >> 16);
|
||||||
switch (e.user.code & 0xffff) {
|
// switch (e.user.code & 0xffff) {
|
||||||
case DMON_ACTION_DELETE:
|
// case DMON_ACTION_DELETE:
|
||||||
lua_pushstring(L, "delete");
|
// lua_pushstring(L, "delete");
|
||||||
break;
|
// break;
|
||||||
case DMON_ACTION_CREATE:
|
// case DMON_ACTION_CREATE:
|
||||||
lua_pushstring(L, "create");
|
// lua_pushstring(L, "create");
|
||||||
break;
|
// break;
|
||||||
case DMON_ACTION_MODIFY:
|
// case DMON_ACTION_MODIFY:
|
||||||
lua_pushstring(L, "modify");
|
// lua_pushstring(L, "modify");
|
||||||
break;
|
// break;
|
||||||
default:
|
// default:
|
||||||
return luaL_error(L, "unknown dmon event action: %d", e.user.code & 0xffff);
|
// return luaL_error(L, "unknown dmon event action: %d", e.user.code & 0xffff);
|
||||||
}
|
// }
|
||||||
lua_pushstring(L, e.user.data1);
|
lua_pushstring(L, e.user.data1);
|
||||||
free(e.user.data1);
|
free(e.user.data1);
|
||||||
return 4;
|
return 4;
|
||||||
|
@ -335,7 +344,11 @@ static int f_set_window_mode(lua_State *L) {
|
||||||
int n = luaL_checkoption(L, 1, "normal", window_opts);
|
int n = luaL_checkoption(L, 1, "normal", window_opts);
|
||||||
SDL_SetWindowFullscreen(window,
|
SDL_SetWindowFullscreen(window,
|
||||||
n == WIN_FULLSCREEN ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
|
n == WIN_FULLSCREEN ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
|
||||||
if (n == WIN_NORMAL) { SDL_RestoreWindow(window); }
|
if (n == WIN_NORMAL)
|
||||||
|
{
|
||||||
|
ren_resize_window();
|
||||||
|
SDL_RestoreWindow(window);
|
||||||
|
}
|
||||||
if (n == WIN_MAXIMIZED) { SDL_MaximizeWindow(window); }
|
if (n == WIN_MAXIMIZED) { SDL_MaximizeWindow(window); }
|
||||||
if (n == WIN_MINIMIZED) { SDL_MinimizeWindow(window); }
|
if (n == WIN_MINIMIZED) { SDL_MinimizeWindow(window); }
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -517,6 +530,10 @@ static int f_list_dir(lua_State *L) {
|
||||||
#define realpath(x, y) _fullpath(y, x, MAX_PATH)
|
#define realpath(x, y) _fullpath(y, x, MAX_PATH)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __amigaos4__
|
||||||
|
#define realpath(x, y) _fullpath(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
static int f_absolute_path(lua_State *L) {
|
static int f_absolute_path(lua_State *L) {
|
||||||
const char *path = luaL_checkstring(L, 1);
|
const char *path = luaL_checkstring(L, 1);
|
||||||
char *res = realpath(path, NULL);
|
char *res = realpath(path, NULL);
|
||||||
|
@ -789,27 +806,28 @@ static int f_load_native_plugin(lua_State *L) {
|
||||||
static int f_watch_dir(lua_State *L) {
|
static int f_watch_dir(lua_State *L) {
|
||||||
const char *path = luaL_checkstring(L, 1);
|
const char *path = luaL_checkstring(L, 1);
|
||||||
const int recursive = lua_toboolean(L, 2);
|
const int recursive = lua_toboolean(L, 2);
|
||||||
uint32_t dmon_flags = (recursive ? DMON_WATCHFLAGS_RECURSIVE : 0);
|
// uint32_t dmon_flags = (recursive ? DMON_WATCHFLAGS_RECURSIVE : 0);
|
||||||
dmon_watch_id watch_id = dmon_watch(path, dirmonitor_watch_callback, dmon_flags, NULL);
|
// dmon_watch_id watch_id = dmon_watch(path, dirmonitor_watch_callback, dmon_flags, NULL);
|
||||||
if (watch_id.id == 0) { luaL_error(L, "directory monitoring watch failed"); }
|
// if (watch_id.id == 0) { luaL_error(L, "directory monitoring watch failed"); }
|
||||||
lua_pushnumber(L, watch_id.id);
|
// lua_pushnumber(L, watch_id.id);
|
||||||
|
lua_pushnumber(L, 0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if __linux__
|
#if __linux__
|
||||||
static int f_watch_dir_add(lua_State *L) {
|
static int f_watch_dir_add(lua_State *L) {
|
||||||
dmon_watch_id watch_id;
|
// dmon_watch_id watch_id;
|
||||||
watch_id.id = luaL_checkinteger(L, 1);
|
// watch_id.id = luaL_checkinteger(L, 1);
|
||||||
const char *subdir = luaL_checkstring(L, 2);
|
// const char *subdir = luaL_checkstring(L, 2);
|
||||||
lua_pushboolean(L, dmon_watch_add(watch_id, subdir));
|
// lua_pushboolean(L, dmon_watch_add(watch_id, subdir));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int f_watch_dir_rm(lua_State *L) {
|
static int f_watch_dir_rm(lua_State *L) {
|
||||||
dmon_watch_id watch_id;
|
// dmon_watch_id watch_id;
|
||||||
watch_id.id = luaL_checkinteger(L, 1);
|
// watch_id.id = luaL_checkinteger(L, 1);
|
||||||
const char *subdir = luaL_checkstring(L, 2);
|
// const char *subdir = luaL_checkstring(L, 2);
|
||||||
lua_pushboolean(L, dmon_watch_rm(watch_id, subdir));
|
// lua_pushboolean(L, dmon_watch_rm(watch_id, subdir));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -914,3 +932,4 @@ int luaopen_system(lua_State *L) {
|
||||||
luaL_newlib(L, lib);
|
luaL_newlib(L, lib);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,11 @@
|
||||||
|
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
|
|
||||||
|
#ifndef __amigaos4__
|
||||||
#define DMON_IMPL
|
#define DMON_IMPL
|
||||||
#include "dmon.h"
|
#include "dmon.h"
|
||||||
#include "dmon_extra.h"
|
#include "dmon_extra.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "dirmonitor.h"
|
#include "dirmonitor.h"
|
||||||
|
|
||||||
|
@ -32,14 +34,14 @@ static void send_sdl_event(dmon_watch_id watch_id, dmon_action action, const cha
|
||||||
}
|
}
|
||||||
|
|
||||||
void dirmonitor_init() {
|
void dirmonitor_init() {
|
||||||
dmon_init();
|
//dmon_init();
|
||||||
/* In theory we should register our user event but since we
|
/* In theory we should register our user event but since we
|
||||||
have just one type of user event this is not really needed. */
|
have just one type of user event this is not really needed. */
|
||||||
/* sdl_dmon_event_type = SDL_RegisterEvents(1); */
|
/* sdl_dmon_event_type = SDL_RegisterEvents(1); */
|
||||||
}
|
}
|
||||||
|
|
||||||
void dirmonitor_deinit() {
|
void dirmonitor_deinit() {
|
||||||
dmon_deinit();
|
//dmon_deinit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void dirmonitor_watch_callback(dmon_watch_id watch_id, dmon_action action, const char *rootdir,
|
void dirmonitor_watch_callback(dmon_watch_id watch_id, dmon_action action, const char *rootdir,
|
||||||
|
@ -49,11 +51,11 @@ void dirmonitor_watch_callback(dmon_watch_id watch_id, dmon_action action, const
|
||||||
(void) user;
|
(void) user;
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case DMON_ACTION_MOVE:
|
case DMON_ACTION_MOVE:
|
||||||
send_sdl_event(watch_id, DMON_ACTION_DELETE, oldfilepath);
|
//send_sdl_event(watch_id, DMON_ACTION_DELETE, oldfilepath);
|
||||||
send_sdl_event(watch_id, DMON_ACTION_CREATE, filepath);
|
//send_sdl_event(watch_id, DMON_ACTION_CREATE, filepath);
|
||||||
break;
|
break;
|
||||||
default:
|
//default:
|
||||||
send_sdl_event(watch_id, action, filepath);
|
//send_sdl_event(watch_id, action, filepath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
14
src/main.c
14
src/main.c
|
@ -12,6 +12,8 @@
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#elif __APPLE__
|
#elif __APPLE__
|
||||||
#include <mach-o/dyld.h>
|
#include <mach-o/dyld.h>
|
||||||
|
#elif __amigaos4__
|
||||||
|
#include "platform/amigaos4.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "dirmonitor.h"
|
#include "dirmonitor.h"
|
||||||
|
@ -45,6 +47,8 @@ static void get_exe_filename(char *buf, int sz) {
|
||||||
char exepath[size];
|
char exepath[size];
|
||||||
_NSGetExecutablePath(exepath, &size);
|
_NSGetExecutablePath(exepath, &size);
|
||||||
realpath(exepath, buf);
|
realpath(exepath, buf);
|
||||||
|
#elif __amigaos4__
|
||||||
|
strcpy(buf, _fullpath("./lite"));
|
||||||
#else
|
#else
|
||||||
strcpy(buf, "./lite");
|
strcpy(buf, "./lite");
|
||||||
#endif
|
#endif
|
||||||
|
@ -108,11 +112,13 @@ int main(int argc, char **argv) {
|
||||||
SDL_DisplayMode dm;
|
SDL_DisplayMode dm;
|
||||||
SDL_GetCurrentDisplayMode(0, &dm);
|
SDL_GetCurrentDisplayMode(0, &dm);
|
||||||
|
|
||||||
dirmonitor_init();
|
// dirmonitor_init();
|
||||||
|
|
||||||
window = SDL_CreateWindow(
|
window = SDL_CreateWindow(
|
||||||
"", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, dm.w * 0.8, dm.h * 0.8,
|
"", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, dm.w * 0.8, dm.h * 0.8,
|
||||||
SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_HIDDEN);
|
SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_HIDDEN);
|
||||||
|
SDL_SetWindowDisplayMode(window, &dm);
|
||||||
|
|
||||||
init_window_icon();
|
init_window_icon();
|
||||||
ren_init(window);
|
ren_init(window);
|
||||||
|
|
||||||
|
@ -154,6 +160,9 @@ init_lua:
|
||||||
" HOME = os.getenv('" LITE_OS_HOME "')\n"
|
" HOME = os.getenv('" LITE_OS_HOME "')\n"
|
||||||
" local exedir = EXEFILE:match('^(.*)" LITE_PATHSEP_PATTERN LITE_NONPATHSEP_PATTERN "$')\n"
|
" local exedir = EXEFILE:match('^(.*)" LITE_PATHSEP_PATTERN LITE_NONPATHSEP_PATTERN "$')\n"
|
||||||
" local prefix = exedir:match('^(.*)" LITE_PATHSEP_PATTERN "bin$')\n"
|
" local prefix = exedir:match('^(.*)" LITE_PATHSEP_PATTERN "bin$')\n"
|
||||||
|
" if not HOME then\n"
|
||||||
|
" HOME = exedir\n"
|
||||||
|
" end\n"
|
||||||
" dofile((MACOS_RESOURCES or (prefix and prefix .. '/share/lite-xl' or exedir .. '/data')) .. '/core/start.lua')\n"
|
" dofile((MACOS_RESOURCES or (prefix and prefix .. '/share/lite-xl' or exedir .. '/data')) .. '/core/start.lua')\n"
|
||||||
" core = require(os.getenv('LITE_XL_RUNTIME') or 'core')\n"
|
" core = require(os.getenv('LITE_XL_RUNTIME') or 'core')\n"
|
||||||
" core.init()\n"
|
" core.init()\n"
|
||||||
|
@ -192,7 +201,8 @@ init_lua:
|
||||||
|
|
||||||
lua_close(L);
|
lua_close(L);
|
||||||
ren_free_window_resources();
|
ren_free_window_resources();
|
||||||
dirmonitor_deinit();
|
// dirmonitor_deinit();
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "amigaos4.h"
|
||||||
|
|
||||||
|
static char *getFullPath(const char *path)
|
||||||
|
{
|
||||||
|
char *appPath = malloc(sizeof(char) * MAX_DOS_NAME);
|
||||||
|
BPTR pathLock = Lock(path, SHARED_LOCK);
|
||||||
|
if (pathLock)
|
||||||
|
{
|
||||||
|
NameFromLock(pathLock, appPath, sizeof(char) * MAX_DOS_NAME);
|
||||||
|
UnLock(pathLock);
|
||||||
|
|
||||||
|
return appPath;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *getCurrentPath(void)
|
||||||
|
{
|
||||||
|
char *appPath = malloc(sizeof(char) * MAX_DOS_NAME);
|
||||||
|
BPTR pathLock = GetCurrentDir();
|
||||||
|
if (pathLock)
|
||||||
|
{
|
||||||
|
NameFromLock(pathLock, appPath, sizeof(char) * MAX_DOS_NAME);
|
||||||
|
return appPath;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *_fullpath(const char *path)
|
||||||
|
{
|
||||||
|
static char prvPath[MAX_DOS_NAME];
|
||||||
|
static char result[MAX_DOS_NAME];
|
||||||
|
|
||||||
|
if (!strcmp(path, prvPath))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy(prvPath, path);
|
||||||
|
|
||||||
|
if (!strcmp(path, "./lite"))
|
||||||
|
{
|
||||||
|
// TODO: Add code to get the name of the executable
|
||||||
|
strcpy(result, getFullPath("PROGDIR:lite"));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strcmp(path, "."))
|
||||||
|
{
|
||||||
|
strcpy(result, getCurrentPath());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy(result, getFullPath(path));
|
||||||
|
return result;
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
#ifndef _AMIGAOS4_H
|
||||||
|
#define _AMIGAOS4_H
|
||||||
|
|
||||||
|
#include <proto/dos.h>
|
||||||
|
#include <proto/exec.h>
|
||||||
|
|
||||||
|
#define VSTRING "Lite XL OS4 2.0.3r1 (30.04.2022)"
|
||||||
|
#define VERSTAG "\0$VER: " VSTRING
|
||||||
|
|
||||||
|
static CONST_STRPTR stack USED = "$STACK:102400";
|
||||||
|
static CONST_STRPTR version USED = VERSTAG;
|
||||||
|
|
||||||
|
char *_fullpath(const char *);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -9,9 +9,10 @@ void rencache_show_debug(bool enable);
|
||||||
void rencache_set_clip_rect(RenRect rect);
|
void rencache_set_clip_rect(RenRect rect);
|
||||||
void rencache_draw_rect(RenRect rect, RenColor color);
|
void rencache_draw_rect(RenRect rect, RenColor color);
|
||||||
float rencache_draw_text(lua_State *L, RenFont **font,
|
float rencache_draw_text(lua_State *L, RenFont **font,
|
||||||
const char *text, float x, int y, RenColor color);
|
const char *text, float x, int y, RenColor color);
|
||||||
void rencache_invalidate(void);
|
void rencache_invalidate(void);
|
||||||
void rencache_begin_frame(lua_State *L);
|
void rencache_begin_frame(lua_State *L);
|
||||||
void rencache_end_frame(lua_State *L);
|
void rencache_end_frame(lua_State *L);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <ft2build.h>
|
#include <ft2build.h>
|
||||||
|
@ -331,18 +332,28 @@ void ren_draw_rect(RenRect rect, RenColor color) {
|
||||||
y2 = y2 > clip.y + clip.height ? clip.y + clip.height : y2;
|
y2 = y2 > clip.y + clip.height ? clip.y + clip.height : y2;
|
||||||
|
|
||||||
SDL_Surface *surface = renwin_get_surface(&window_renderer);
|
SDL_Surface *surface = renwin_get_surface(&window_renderer);
|
||||||
RenColor *d = (RenColor*) surface->pixels;
|
uint32_t *d = surface->pixels;
|
||||||
|
|
||||||
|
#ifdef __amigaos4__
|
||||||
|
d += x1 + y1 * surface->pitch/sizeof(uint32_t);
|
||||||
|
int dr = surface->pitch/sizeof(uint32_t) - (x2 - x1);
|
||||||
|
#else
|
||||||
d += x1 + y1 * surface->w;
|
d += x1 + y1 * surface->w;
|
||||||
int dr = surface->w - (x2 - x1);
|
int dr = surface->w - (x2 - x1);
|
||||||
unsigned int translated = SDL_MapRGB(surface->format, color.r, color.g, color.b);
|
#endif
|
||||||
if (color.a == 0xff) {
|
if (color.a == 0xff) {
|
||||||
|
uint32_t translated = SDL_MapRGB(surface->format, color.r, color.g, color.b);
|
||||||
SDL_Rect rect = { x1, y1, x2 - x1, y2 - y1 };
|
SDL_Rect rect = { x1, y1, x2 - x1, y2 - y1 };
|
||||||
SDL_FillRect(surface, &rect, translated);
|
SDL_FillRect(surface, &rect, translated);
|
||||||
} else {
|
} else {
|
||||||
RenColor translated_color = (RenColor){ translated & 0xFF, (translated >> 8) & 0xFF, (translated >> 16) & 0xFF, color.a };
|
RenColor current_color;
|
||||||
|
RenColor blended_color;
|
||||||
for (int j = y1; j < y2; j++) {
|
for (int j = y1; j < y2; j++) {
|
||||||
for (int i = x1; i < x2; i++, d++)
|
for (int i = x1; i < x2; i++, d++) {
|
||||||
*d = blend_pixel(*d, translated_color);
|
SDL_GetRGB(*d, surface->format, ¤t_color.r, ¤t_color.g, ¤t_color.b);
|
||||||
|
blended_color = blend_pixel(current_color, color);
|
||||||
|
*d = SDL_MapRGB(surface->format, blended_color.r, blended_color.g, blended_color.b);
|
||||||
|
}
|
||||||
d += dr;
|
d += dr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,18 @@ static int query_surface_scale(RenWindow *ren) {
|
||||||
SDL_GetWindowSize(ren->window, &w_points, &h_points);
|
SDL_GetWindowSize(ren->window, &w_points, &h_points);
|
||||||
/* We consider that the ratio pixel/point will always be an integer and
|
/* We consider that the ratio pixel/point will always be an integer and
|
||||||
it is the same along the x and the y axis. */
|
it is the same along the x and the y axis. */
|
||||||
|
|
||||||
|
#ifdef __amigaos4__
|
||||||
|
// This is a workaround when the w_pixels != w_points and h_pixels != h_points
|
||||||
|
// because of redraw delays, especially when the "Resize with contents" is enabled
|
||||||
|
if (w_pixels != w_points) {
|
||||||
|
w_pixels = w_points;
|
||||||
|
}
|
||||||
|
if (h_pixels != h_points) {
|
||||||
|
h_pixels = h_points;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
assert(w_pixels % w_points == 0 && h_pixels % h_points == 0 && w_pixels / w_points == h_pixels / h_points);
|
assert(w_pixels % w_points == 0 && h_pixels % h_points == 0 && w_pixels / w_points == h_pixels / h_points);
|
||||||
return w_pixels / w_points;
|
return w_pixels / w_points;
|
||||||
}
|
}
|
||||||
|
@ -20,7 +32,7 @@ static void setup_renderer(RenWindow *ren, int w, int h) {
|
||||||
SDL_DestroyTexture(ren->texture);
|
SDL_DestroyTexture(ren->texture);
|
||||||
SDL_DestroyRenderer(ren->renderer);
|
SDL_DestroyRenderer(ren->renderer);
|
||||||
}
|
}
|
||||||
ren->renderer = SDL_CreateRenderer(ren->window, -1, 0);
|
ren->renderer = SDL_CreateRenderer(ren->window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||||
ren->texture = SDL_CreateTexture(ren->renderer, SDL_PIXELFORMAT_BGRA32, SDL_TEXTUREACCESS_STREAMING, w, h);
|
ren->texture = SDL_CreateTexture(ren->renderer, SDL_PIXELFORMAT_BGRA32, SDL_TEXTUREACCESS_STREAMING, w, h);
|
||||||
ren->surface_scale = query_surface_scale(ren);
|
ren->surface_scale = query_surface_scale(ren);
|
||||||
}
|
}
|
||||||
|
@ -116,3 +128,4 @@ void renwin_free(RenWindow *ren) {
|
||||||
SDL_FreeSurface(ren->surface);
|
SDL_FreeSurface(ren->surface);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue