Compare commits

...
Author SHA1 Message Date
ec676a15ae merge (#421)
* Update tui_screen_options.c

* Me

* Update problem.yml

* libusb 1.0.27

* Update mbedtls

* Fix downloading mbedtls

* fixup! Update mbedtls

* Revert MBedTLS changes

* Add new assignee for issues

* New assignee

---------

Co-authored-by: Samara <[email protected]>
Co-authored-by: sam <[email protected]>
Co-authored-by: Nick Chan <[email protected]>
2024-05-29 22:38:40 -07:00
Samara 8ef0035dc0 Add passcode detection for 'iPhone10,'
+ Also remove untested version option, uneeded
2024-05-14 21:45:14 -07:00
Nick Chan 34edfd649b Makefile: link against gpm 2024-05-15 12:33:05 +08:00
Nick Chan 671e2346ae Actually gpm is needed 2024-05-15 12:29:37 +08:00
Nick Chan 464c832883 Remove unused libraries 2024-05-15 12:21:13 +08:00
Nick Chan 0e9cd5e1f6 Fix custom checkra1n 2024-05-15 02:00:24 +08:00
Nick Chan 08fbb60538 actions: prepare for the 32-bit timepocalypse 2024-05-13 20:09:53 +08:00
samara 8787616ae0 aspy 2024-05-10 20:16:11 -07:00
8 changed files with 107 additions and 220 deletions

No files matched your search

+3 -1
View File
@@ -2,8 +2,10 @@ name: Create Issue
description: Ask help for palera1n regarding support or generally how it works!
labels: [palera1n]
assignees:
- ssalggnikool
- khcrysalis
- asdfugil
- elliessurviving
- hg13bs
body:
- type: input
id: device
+10 -119
View File
@@ -76,9 +76,6 @@ jobs:
env:
MBEDTLS_VERSION: 3.5.2
READLINE_VERSION: 8.2
SLANG_VERSION: 2.3.3
NEWT_VERSION: 0.52.23
POPT_VERSION: 1.19
steps:
- name: Checkout
@@ -102,16 +99,10 @@ jobs:
run: |
curl -LOOOOOO \
https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v${{ env.MBEDTLS_VERSION }}.tar.gz \
https://mirror-hk.koddos.net/gnu/readline/readline-${{ env.READLINE_VERSION }}.tar.gz \
https://www.jedsoft.org/releases/slang/slang-${{ env.SLANG_VERSION }}.tar.bz2 \
https://releases.pagure.org/newt/newt-${{ env.NEWT_VERSION }}.tar.gz \
https://github.com/rpm-software-management/popt/archive/refs/tags/popt-${{ env.POPT_VERSION }}-release.tar.gz
https://mirror-hk.koddos.net/gnu/readline/readline-${{ env.READLINE_VERSION }}.tar.gz
tar -xf v${{ env.MBEDTLS_VERSION }}.tar.gz
tar -xf readline-${{ env.READLINE_VERSION }}.tar.gz
tar -xjf slang-${{ env.SLANG_VERSION }}.tar.bz2
tar -xf newt-${{ env.NEWT_VERSION }}.tar.gz
tar -xf popt-${{ env.POPT_VERSION }}-release.tar.gz
git clone --depth=1 https://github.com/libimobiledevice/libplist
git clone --depth=1 https://github.com/libimobiledevice/libimobiledevice-glue
git clone --depth=1 https://github.com/libimobiledevice/libirecovery
@@ -132,9 +123,9 @@ jobs:
echo "CC=$(xcrun --find cc)" >> $GITHUB_ENV
echo "CXX=$(xcrun --find c++)" >> $GITHUB_ENV
echo "CPP=$(xcrun --find cc) -E" >> $GITHUB_ENV
echo "CFLAGS=-g -Os -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isysroot ${{ env.SDK }} -isystem $(pwd)/sysroot/usr/local/include -Os -g -flto=full -Wl,-object_path_lto,lto.o" >> $GITHUB_ENV
echo "CPPFLAGS=-g -Os -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isysroot ${{ env.SDK }} -isystem $(pwd)/sysroot/usr/local/include -Wno-error-implicit-function-declaration -Os" >> $GITHUB_ENV
echo "CXXFLAGS=-stdlib=libc++ -g -Os -isysroot ${{ env.SDK }} -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isystem $(pwd)/sysroot/usr/local/include -Os" >> $GITHUB_ENV
echo "CFLAGS=-g -Os -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isysroot ${{ env.SDK }} -isystem $(pwd)/sysroot/usr/local/include -Os -g -flto=full -Wl,-object_path_lto,lto.o -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64" >> $GITHUB_ENV
echo "CPPFLAGS=-g -Os -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isysroot ${{ env.SDK }} -isystem $(pwd)/sysroot/usr/local/include -Wno-error-implicit-function-declaration -Os -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64" >> $GITHUB_ENV
echo "CXXFLAGS=-stdlib=libc++ -g -Os -isysroot ${{ env.SDK }} -arch ${{ matrix.arch }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -isystem $(pwd)/sysroot/usr/local/include -Os -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64" >> $GITHUB_ENV
echo "LDFLAGS=-g -Wl,-dead_strip -arch ${{ matrix.arch }} -isysroot ${{ env.SDK }} -m${{ matrix.os }}-version-min=${{ matrix.minos }} -L$(pwd)/sysroot/usr/local/lib" >> $GITHUB_ENV
echo "CFLAGS_FOR_BUILD=-arch $(uname -m) -isysroot $(xcrun -sdk macosx --show-sdk-path) -Os" >> $GITHUB_ENV
echo "CXXFLAGS_FOR_BUILD=-stdlib=libc++ -arch $(uname -m) -isysroot $(xcrun -sdk macosx --show-sdk-path) -Os" >> $GITHUB_ENV
@@ -214,51 +205,6 @@ jobs:
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build S-Lang
run: |
cd slang-${{ env.SLANG_VERSION }}
./configure \
${{ env.CONFIGURE_ARGS }} \
--without-x \
--without-pcre \
--without-onig \
--without-z \
--without-png \
--without-iconv
gmake -j$(sysctl -n hw.ncpu) static
gmake -j$(sysctl -n hw.ncpu) install-static DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build popt
run: |
cd popt-popt-${{ env.POPT_VERSION }}-release
autoreconf -fiv
./configure \
${{ env.CONFIGURE_ARGS }} \
--without-libiconv-prefix \
--without-libintl-prefix \
--disable-nls \
--disable-werror
gmake -j$(sysctl -n hw.ncpu)
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build newt
run: |
cd newt-${{ env.NEWT_VERSION }}
./configure \
${{ env.CONFIGURE_ARGS }} \
--with-readline=gnu \
--without-python \
--without-tcl \
--disable-nls
gmake -j$(sysctl -n hw.ncpu) libnewt.a
mkdir -p ${{ env.DESTDIR }}/usr/local/{lib/pkgconfig,include}
install -m644 libnewt.pc ${{ env.DESTDIR }}/usr/local/lib/pkgconfig
install -m644 libnewt.a ${{ env.DESTDIR }}/usr/local/lib
install -m644 newt.h ${{ env.DESTDIR }}/usr/local/include
cd ..
- name: Build libplist
run: |
cd libplist
@@ -532,12 +478,9 @@ jobs:
runs-on: ubuntu-latest
env:
MBEDTLS_VERSION: 3.5.2
LIBUSB_VERSION: 1.0.26
LIBUSB_VERSION: 1.0.27
READLINE_VERSION: 8.2
SLANG_VERSION: 2.3.3
NEWT_VERSION: 0.52.23
GPM_VERSION: 1.20.7
POPT_VERSION: 1.19
steps:
- name: Checkout
@@ -592,8 +535,8 @@ jobs:
;;
esac
echo "PKG_CONFIG_PATH=$(pwd)/sysroot/usr/local/lib/pkgconfig" >> $GITHUB_ENV
echo "CFLAGS=-g -fdata-sections -ffunction-sections -I$(pwd)/sysroot/usr/local/include -L$(pwd)/sysroot/usr/local/lib" >> $GITHUB_ENV
echo "CXXFLAGS=-g -fdata-sections -ffunction-sections -I$(pwd)/sysroot/usr/local/include -L$(pwd)/sysroot/usr/local/lib" >> $GITHUB_ENV
echo "CFLAGS=-g -fdata-sections -ffunction-sections -I$(pwd)/sysroot/usr/local/include -L$(pwd)/sysroot/usr/local/lib -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64" >> $GITHUB_ENV
echo "CXXFLAGS=-g -fdata-sections -ffunction-sections -I$(pwd)/sysroot/usr/local/include -L$(pwd)/sysroot/usr/local/lib -D_FILE_OFFSET_BITS=64 -D_TIME_BITS=64" >> $GITHUB_ENV
echo "LDFLAGS=-g -Wl,--gc-sections -fdata-sections -ffunction-sections -I$(pwd)/sysroot/usr/local/include -L$(pwd)/sysroot/usr/local/lib" >> $GITHUB_ENV
echo "INSTALL=$(command -v install) --strip-program=${{ matrix.triple }}-strip" >> $GITHUB_ENV
echo "DESTDIR=$(pwd)/sysroot" >> $GITHUB_ENV
@@ -609,18 +552,12 @@ jobs:
https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/v${{ env.MBEDTLS_VERSION }}.tar.gz \
https://github.com/libusb/libusb/releases/download/v${{ env.LIBUSB_VERSION }}/libusb-${{ env.LIBUSB_VERSION }}.tar.bz2 \
https://mirror-hk.koddos.net/gnu/readline/readline-${{ env.READLINE_VERSION }}.tar.gz \
https://www.jedsoft.org/releases/slang/slang-${{ env.SLANG_VERSION }}.tar.bz2 \
https://releases.pagure.org/newt/newt-${{ env.NEWT_VERSION }}.tar.gz \
https://github.com/telmich/gpm/archive/refs/tags/${{ env.GPM_VERSION }}.tar.gz \
https://github.com/rpm-software-management/popt/archive/refs/tags/popt-${{ env.POPT_VERSION }}-release.tar.gz
https://github.com/telmich/gpm/archive/refs/tags/${{ env.GPM_VERSION }}.tar.gz
tar -xf v${{ env.MBEDTLS_VERSION }}.tar.gz
tar -xjf libusb-${{ env.LIBUSB_VERSION }}.tar.bz2
tar -xf readline-${{ env.READLINE_VERSION }}.tar.gz
tar -xjf slang-${{ env.SLANG_VERSION }}.tar.bz2
tar -xf newt-${{ env.NEWT_VERSION }}.tar.gz
tar -xf ${{ env.GPM_VERSION }}.tar.gz
tar -xf popt-${{ env.POPT_VERSION }}-release.tar.gz
git clone --depth=1 https://github.com/libimobiledevice/libplist
git clone --depth=1 https://github.com/libimobiledevice/libimobiledevice-glue
git clone --depth=1 https://github.com/libimobiledevice/libirecovery
@@ -668,21 +605,6 @@ jobs:
make -j$(nproc) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build S-Lang
run: |
cd slang-${{ env.SLANG_VERSION }}
./configure \
${{ env.CONFIGURE_ARGS }} \
--without-x \
--without-pcre \
--without-onig \
--without-z \
--without-png \
--without-iconv
gmake -j$(sysctl -n hw.ncpu) static
gmake -j$(sysctl -n hw.ncpu) install-static DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build GPM
run: |
cd gpm-${{ env.GPM_VERSION }}
@@ -694,37 +616,6 @@ jobs:
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build popt
run: |
cd popt-popt-${{ env.POPT_VERSION }}-release
autoreconf -fiv
./configure \
${{ env.CONFIGURE_ARGS }} \
--without-libiconv-prefix \
--without-libintl-prefix \
--disable-nls \
--disable-werror
gmake -j$(sysctl -n hw.ncpu)
gmake -j$(sysctl -n hw.ncpu) install DESTDIR=${{ env.DESTDIR }}
cd ..
- name: Build newt
run: |
cd newt-${{ env.NEWT_VERSION }}
./configure \
${{ env.CONFIGURE_ARGS }} \
--with-readline=gnu \
--without-python \
--without-tcl \
--disable-nls \
--with-gpm-support
gmake -j$(sysctl -n hw.ncpu) libnewt.a
mkdir -p ${{ env.DESTDIR }}/usr/local/{lib/pkgconfig,include}
install -m644 libnewt.pc ${{ env.DESTDIR }}/usr/local/lib/pkgconfig
install -m644 libnewt.a ${{ env.DESTDIR }}/usr/local/lib
install -m644 newt.h ${{ env.DESTDIR }}/usr/local/include
cd ..
- name: Build libplist
run: |
cd libplist
@@ -807,7 +698,7 @@ jobs:
${{ matrix.triple }}-strip --strip-debug --strip-unneeded palera1n.release
${{ matrix.triple }}-objcopy --add-gnu-debuglink=palera1n.debug palera1n.release
chmod -x palera1n.debug
- name: Build palera1n (Development)
run: |
CC="${{ matrix.triple }}-gcc" make -j$(nproc) clean
@@ -836,7 +727,7 @@ jobs:
sed 's|@DEB_ARCH@|${{ env.ARCH_NAME }}|g' -i stage/DEBIAN/control
sed "s|@DEB_VERSION@|$version|g" -i stage/DEBIAN/control
install -Dm644 ready/binaries/palera1n-${{ env.CHECKRA1N_NAME }} stage/usr/bin/palera1n
gzip -c9 docs/palera1n.1 > stage/usr/share/man/man1/palera1n.1.gz
chmod 755 stage/usr/bin/palera1n
+1 -1
View File
@@ -27,11 +27,11 @@ endif
LIBS += $(DEP)/lib/libmbedtls.a $(DEP)/lib/libmbedcrypto.a $(DEP)/lib/libmbedx509.a $(DEP)/lib/libreadline.a
ifeq ($(TUI),1)
LIBS += $(DEP)/lib/libnewt.a $(DEP)/lib/libpopt.a $(DEP)/lib/libslang.a
ifeq ($(TARGET_OS),Linux)
LIBS += $(DEP)/lib/libgpm.a
endif
endif
ifeq ($(DEV_BUILD),1)
CFLAGS += -O0 -g -DDEV_BUILD -fno-omit-frame-pointer
ifeq ($(ASAN),1)
+1 -1
View File
@@ -87,7 +87,7 @@ We are **NOT** responsible for any data loss, or the result of a device being br
## Troubleshooting
Make sure you're following the guides provided [here](https://palera.in), also when asking for support make sure you provide full details on your device, such as:
- iPhone/iPad/iPod
- iPhone/iPad/iPod/Apple TV
- iOS Version
- Passcode enabled?
- Verbose from palera1n (specifying `-Vv` within palera1n)
+1 -1
View File
@@ -13,7 +13,7 @@
#define U stderr,
#define B "#\n# palera1n: " BUILD_TAG " \n#\n"
#define L "# ======== Made by =======\n"
#define E "# Made by: Nick Chan, " THE_PLUSH ", Samara, Mineek, staturnz, " BAKERAIN_DEVELOPE_R ", " NEKO_DEVELOPE_R " \n"
#define E "# Made by: Nick Chan, " THE_PLUSH ", Khcrysalis, Mineek, staturnz, " BAKERAIN_DEVELOPE_R ", " NEKO_DEVELOPE_R " \n"
#define M "# ======== Thanks to =======\n"
#define A "# Thanks to: llsc12, Nebula, Lrdsnow, nikias (libimobiledevice),\n"
#define K "# checkra1n team (Siguza, axi0mx, littlelailo et al.),\n"
+40 -49
View File
@@ -40,10 +40,6 @@ int exec_checkra1n(void) {
LOG(LOG_INFO, "About to execute checkra1n");
int fd_checkra1n, fd_pongo, ret;
char* checkra1n_path = NULL;
if (ext_checkra1n != NULL) {
checkra1n_path = ext_checkra1n;
goto checkra1n_exec;
}
#ifndef NO_CUSTOM_PONGO
if (pongo_path == NULL) {
pongo_path = malloc(strlen(tmpdir) + 20);
@@ -69,36 +65,40 @@ int exec_checkra1n(void) {
}
} else external_pongo = true;
#endif
checkra1n_path = malloc(strlen(tmpdir) + 20);
if (checkra1n_path == NULL) {
LOG(LOG_FATAL, "memory allocation failed\n");
return -1;
}
snprintf(checkra1n_path, strlen(tmpdir) + 20, "%s/checkra1n.XXXXXX", tmpdir);
fd_checkra1n = mkstemp(checkra1n_path);
if (fd_checkra1n == -1) {
LOG(LOG_FATAL, "Cannot open temporary file %s: %d (%s)", checkra1n_path, errno, strerror(errno));
free(checkra1n_path);
checkra1n_path = NULL;
return -1;
}
ssize_t didWrite_checkra1n = write(fd_checkra1n, checkra1n, checkra1n_len);
if (didWrite_checkra1n != (ssize_t)checkra1n_len) {
LOG(LOG_FATAL, "Size written to %s does not match expected: %zd != %" PRIu32 ": %d (%s)", checkra1n_path, didWrite_checkra1n, checkra1n_len, errno, strerror(errno));
if (ext_checkra1n != NULL) {
checkra1n_path = ext_checkra1n;
} else {
checkra1n_path = malloc(strlen(tmpdir) + 20);
if (checkra1n_path == NULL) {
LOG(LOG_FATAL, "memory allocation failed\n");
return -1;
}
snprintf(checkra1n_path, strlen(tmpdir) + 20, "%s/checkra1n.XXXXXX", tmpdir);
fd_checkra1n = mkstemp(checkra1n_path);
if (fd_checkra1n == -1) {
LOG(LOG_FATAL, "Cannot open temporary file %s: %d (%s)", checkra1n_path, errno, strerror(errno));
free(checkra1n_path);
checkra1n_path = NULL;
return -1;
}
ssize_t didWrite_checkra1n = write(fd_checkra1n, checkra1n, checkra1n_len);
if (didWrite_checkra1n != (ssize_t)checkra1n_len) {
LOG(LOG_FATAL, "Size written to %s does not match expected: %zd != %" PRIu32 ": %d (%s)", checkra1n_path, didWrite_checkra1n, checkra1n_len, errno, strerror(errno));
close(fd_checkra1n);
unlink(checkra1n_path);
free(checkra1n_path);
checkra1n_path = NULL;
return -1;
}
close(fd_checkra1n);
unlink(checkra1n_path);
free(checkra1n_path);
checkra1n_path = NULL;
return -1;
}
close(fd_checkra1n);
ret = chmod(checkra1n_path, 0700);
if (ret) {
LOG(LOG_FATAL, "Cannot chmod %s: %d (%s)", checkra1n_path, errno, strerror(errno));
unlink(checkra1n_path);
free(checkra1n_path);
checkra1n_path = NULL;
return -1;
ret = chmod(checkra1n_path, 0700);
if (ret) {
LOG(LOG_FATAL, "Cannot chmod %s: %d (%s)", checkra1n_path, errno, strerror(errno));
unlink(checkra1n_path);
free(checkra1n_path);
checkra1n_path = NULL;
return -1;
}
}
#if defined(__APPLE__) && defined(__arm64__) && (TARGET_OS_IPHONE || defined(FORCE_HELPER))
char* libcheckra1nhelper_dylib_path = NULL;
@@ -146,7 +146,6 @@ setenv_ra1n:
#endif
}
#endif
checkra1n_exec: {};
char args[0x10] = "-E";
if ((palerain_flags & palerain_option_demote)) strncat(args, "d", 0xf);
if (!(palerain_flags & palerain_option_checkrain_is_clone)) {
@@ -168,21 +167,13 @@ checkra1n_exec: {};
posix_spawn_file_actions_addopen(&action, 2, "/dev/null", O_WRONLY, 0);
}
#endif
if (pongo_path != NULL) {
ret = posix_spawn(&pid, checkra1n_path, &action, NULL, (char* []){
checkra1n_path,
args,
"-k",
pongo_path,
NULL
}, environ);
} else {
ret = posix_spawn(&pid, checkra1n_path, &action, NULL, (char* []){
checkra1n_path,
args,
NULL
}, environ);
}
ret = posix_spawn(&pid, checkra1n_path, &action, NULL, (char* []){
checkra1n_path,
args,
"-k",
pongo_path,
NULL
}, environ);
posix_spawn_file_actions_destroy(&action);
if (ret) {
LOG(LOG_FATAL, "Cannot posix spawn %s: %d (%s)", checkra1n_path, errno, strerror(errno));
+12 -4
View File
@@ -86,7 +86,7 @@ void tui_screen_main_redraw(void) {
PRINTATT(3, 2, "Welcome to palera1n!");
SETCOLOR(FG_WHITE, BG_BLACK);
PRINTATT(3, 9, "Made by: Nick Chan, Ploosh, Samara, Mineek");
PRINTATT(3, 9, "Made by: Nick Chan, Ploosh, Khcrysalis, Mineek");
PRINTATT(3, 10, "staturnz, kok3shidoll, ");
if ((tui_mouse_y == tui_y_offset + 9 && tui_mouse_x >= tui_x_offset + 25 && tui_mouse_x <= tui_x_offset + 25 + 8) || easter_egg) {
SETCOLORA(FG_BRIGHT_WHITE, BG_BLACK, BOLD);
@@ -136,11 +136,19 @@ void tui_screen_main_redraw(void) {
printf("Sorry, %s (iOS %s) is not supported.", tui_connected_devices->display_name, tui_connected_devices->version);
ecid_y = 6;
tui_can_start = false;
} else if (tui_compare_versions(tui_connected_devices->version, "15.0") < 0 || tui_compare_versions(tui_connected_devices->version, "17.3.1") > 0) {
} else if (tui_compare_versions(tui_connected_devices->version, "15.0") < 0) {
printf("Sorry, %s is supported, but iOS", tui_connected_devices->display_name);
MOVETOT(3, 6);
printf("%s is not.", tui_connected_devices->version);
PRINTATT(3, 7, "Supported versions are 15.0 - 17.3.1.");
PRINTATT(3, 7, "Supported versions are 15.0+");
ecid_y = 8;
tui_can_start = false;
} else if (tui_connected_devices->requires_passcode_disabled) {
printf("Sorry, this devices passcode must be disabled on %s.", tui_connected_devices->version);
MOVETOT(3, 6);
printf("On 16.0+, you must reset the phone to factory settings");
MOVETOT(3, 7);
printf("and not have a passcode enabled ever since last restore.");
ecid_y = 8;
tui_can_start = false;
} else {
@@ -163,7 +171,7 @@ void tui_screen_main_redraw(void) {
} else {
PRINTATT(3, 6, "Press (E) to show ECID.");
}
PRINTATT(3, 7, "NOTE: Ensure installed iOS is in range 15.0 - 17.3.1!");
PRINTATT(3, 7, "NOTE: Ensure installed iOS is in range 15.0+");
tui_can_start = true;
} else if (tui_connected_devices->mode == TUI_DEVICE_MODE_DFU) {
MOVETOT(3, 5);
+39 -44
View File
@@ -47,37 +47,34 @@ void tui_screen_options_nav(void) {
extern bool easter_egg;
void tui_screen_options_options(void) {
SETCOLOR(FG_WHITE, BG_BLACK);
SETCOLOR( FG_BRIGHT_BLACK, BG_BLACK);
MOVETOT(3, 8);
printf("[%c] %sAllow untested iOS/iPadOS versions" COLOR(FG_WHITE, BG_BLACK),
tui_options_allow_untested ? 'x' : ' ',
tui_options_nav_selection == 1 ? COLOR(FG_BLACK, BG_BRIGHT_WHITE) : (
(
tui_mouse_x >= tui_x_offset + 6 && tui_mouse_x <= tui_x_offset + 6 + 34
) && (tui_mouse_y == tui_y_offset + 7) ? COLOR(FG_BLACK, BG_WHITE) : ""
));
tui_options_allow_untested ? ' ' : ' ',
COLOR(FG_BLACK, FG_BRIGHT_BLACK));
SETCOLOR(FG_WHITE, BG_BLACK);
MOVETOT(3, 9);
printf("[%c] %sSafe Mode " COLOR(FG_WHITE, BG_BLACK),
tui_options_safe_mode ? 'x' : ' ',
tui_options_nav_selection == 2 ? COLOR(FG_BLACK, BG_BRIGHT_WHITE) : (
tui_options_nav_selection == 1 ? COLOR(FG_BLACK, BG_BRIGHT_WHITE) : (
(
tui_mouse_x >= tui_x_offset + 6 && tui_mouse_x <= tui_x_offset + 6 + 34
tui_mouse_x >= tui_x_offset + 5 && tui_mouse_x <= tui_x_offset + 5 + 34
) && (tui_mouse_y == tui_y_offset + 8) ? COLOR(FG_BLACK, BG_WHITE) : ""
));
MOVETOT(3, 10);
printf("[%c] %sVerbose Boot " COLOR(FG_WHITE, BG_BLACK),
tui_options_verbose_boot ? 'x' : ' ',
tui_options_nav_selection == 3 ? COLOR(FG_BLACK, BG_BRIGHT_WHITE) : (
tui_options_nav_selection == 2 ? COLOR(FG_BLACK, BG_BRIGHT_WHITE) : (
(
tui_mouse_x >= tui_x_offset + 6 && tui_mouse_x <= tui_x_offset + 6 + 34
tui_mouse_x >= tui_x_offset + 5 && tui_mouse_x <= tui_x_offset + 5 + 34
) && (tui_mouse_y == tui_y_offset + 9) ? COLOR(FG_BLACK, BG_WHITE) : ""
));
MOVETOT(3, 11);
printf("[%c] %sForce Revert " COLOR(FG_WHITE, BG_BLACK),
tui_options_force_revert ? 'x' : ' ',
tui_options_nav_selection == 4 ? COLOR(FG_BLACK, BG_BRIGHT_WHITE) : (
tui_options_nav_selection == 3 ? COLOR(FG_BLACK, BG_BRIGHT_WHITE) : (
(
tui_mouse_x >= tui_x_offset + 6 && tui_mouse_x <= tui_x_offset + 6 + 34
tui_mouse_x >= tui_x_offset + 5 && tui_mouse_x <= tui_x_offset + 5 + 34
) && (tui_mouse_y == tui_y_offset + 10) ? COLOR(FG_BLACK, BG_WHITE) : ""
));
if (supports_bright_colors) {
@@ -89,9 +86,9 @@ void tui_screen_options_options(void) {
SETCOLOR(FG_WHITE, BG_BLACK);
MOVETOT(7, 15);
printf("%sBoot Arguments: " COLOR(FG_WHITE, BG_BLACK),
tui_options_nav_selection == 5 ? COLOR(FG_BLACK, BG_BRIGHT_WHITE) : (
tui_options_nav_selection == 4 ? COLOR(FG_BLACK, BG_BRIGHT_WHITE) : (
(
tui_mouse_x >= tui_x_offset + 6 && tui_mouse_x <= tui_x_offset + 6 + 34
tui_mouse_x >= tui_x_offset + 5 && tui_mouse_x <= tui_x_offset + 5 + 34
) && (
tui_mouse_y == tui_y_offset + 14 || tui_mouse_y == tui_y_offset + 15
) ? COLOR(FG_BLACK, BG_WHITE) : ""
@@ -102,9 +99,9 @@ void tui_screen_options_options(void) {
MOVETOT(3, 17);
printf("[%c] %s%s " COLOR(FG_WHITE, BG_BLACK),
tui_options_flower_chain ? 'x' : ' ',
tui_options_nav_selection == 6 ? COLOR(FG_BLACK, BG_BRIGHT_WHITE) : (
tui_options_nav_selection == 5 ? COLOR(FG_BLACK, BG_BRIGHT_WHITE) : (
(
tui_mouse_x >= tui_x_offset + 6 && tui_mouse_x <= tui_x_offset + 6 + 34
tui_mouse_x >= tui_x_offset + 5 && tui_mouse_x <= tui_x_offset + 5 + 34
) && (tui_mouse_y == tui_y_offset + 16) ? COLOR(FG_BLACK, BG_WHITE) : ""
), easter_egg ? "Neko Chain " : "Flower Chain");
@@ -174,7 +171,7 @@ tui_screen_t tui_screen_options(void) {
case TUI_INPUT_DOWN:
case TUI_INPUT_TAB:
if (tui_options_is_editing_boot_args) break;
if (++tui_options_nav_selection > 6) tui_options_nav_selection = 0;
if (++tui_options_nav_selection > 5) tui_options_nav_selection = 0;
tui_screen_options_nav();
tui_screen_options_options();
fflush(stdout);
@@ -182,7 +179,7 @@ tui_screen_t tui_screen_options(void) {
case TUI_INPUT_UP:
case TUI_INPUT_TAB_BACK:
if (tui_options_is_editing_boot_args) break;
if (--tui_options_nav_selection < 0) tui_options_nav_selection = 6;
if (--tui_options_nav_selection < 0) tui_options_nav_selection = 5;
tui_screen_options_nav();
tui_screen_options_options();
fflush(stdout);
@@ -200,23 +197,23 @@ tui_screen_t tui_screen_options(void) {
switch(tui_options_nav_selection) {
case 0:
return MAIN_SCREEN;
// case 1:
// tui_options_allow_untested = !tui_options_allow_untested;
// break;
case 1:
tui_options_allow_untested = !tui_options_allow_untested;
break;
case 2:
tui_options_safe_mode = !tui_options_safe_mode;
break;
case 3:
case 2:
tui_options_verbose_boot = !tui_options_verbose_boot;
break;
case 4:
case 3:
tui_options_force_revert = !tui_options_force_revert;
break;
case 5:
case 4:
tui_options_is_editing_boot_args = !tui_options_is_editing_boot_args;
tui_options_boot_args_cursor = tui_options_is_editing_boot_args ? strlen(tui_options_boot_args) : 0;
break;
case 6:
case 5:
tui_options_flower_chain = !tui_options_flower_chain;
break;
}
@@ -240,8 +237,8 @@ tui_screen_t tui_screen_options(void) {
#define MOUSEDOWN_HANDLER(y, val) \
if (tui_mouse_y == tui_y_offset + y && \
tui_mouse_x >= tui_x_offset + 6 - 4 && \
tui_mouse_x <= tui_x_offset + 6 + 34) { \
tui_mouse_x >= tui_x_offset + 5 - 4 && \
tui_mouse_x <= tui_x_offset + 5 + 34) { \
tui_options_nav_selection = val; \
tui_options_nav_mouse_select = val; \
tui_screen_options_nav(); \
@@ -250,15 +247,14 @@ tui_screen_t tui_screen_options(void) {
}
if (!tui_options_is_editing_boot_args) {
MOUSEDOWN_HANDLER(7, 1);
MOUSEDOWN_HANDLER(8, 2);
MOUSEDOWN_HANDLER(9, 3);
MOUSEDOWN_HANDLER(10, 4);
MOUSEDOWN_HANDLER(16, 6);
MOUSEDOWN_HANDLER(8, 1);
MOUSEDOWN_HANDLER(9, 2);
MOUSEDOWN_HANDLER(10, 3);
MOUSEDOWN_HANDLER(16, 5);
}
MOUSEDOWN_HANDLER(14, 5);
MOUSEDOWN_HANDLER(15, 5);
MOUSEDOWN_HANDLER(14, 4);
MOUSEDOWN_HANDLER(15, 4);
#undef MOUSEDOWN_HANDLER
break;
@@ -272,8 +268,8 @@ tui_screen_t tui_screen_options(void) {
#define MOUSEUP_HANDLER(y, val, option, e) \
if (tui_mouse_y == tui_y_offset + y && \
tui_mouse_x >= tui_x_offset + 6 - 4 && \
tui_mouse_x <= tui_x_offset + 6 + 34 && \
tui_mouse_x >= tui_x_offset + 5 - 4 && \
tui_mouse_x <= tui_x_offset + 5 + 34 && \
tui_options_nav_mouse_select == val) { \
tui_options_##option = !tui_options_##option; \
e \
@@ -283,18 +279,17 @@ tui_screen_t tui_screen_options(void) {
}
if (!tui_options_is_editing_boot_args) {
MOUSEUP_HANDLER(7, 1, allow_untested, );
MOUSEUP_HANDLER(8, 2, safe_mode, );
MOUSEUP_HANDLER(9, 3, verbose_boot, );
MOUSEUP_HANDLER(10, 4, force_revert, );
MOUSEUP_HANDLER(16, 6, flower_chain, );
MOUSEUP_HANDLER(8, 1, safe_mode, );
MOUSEUP_HANDLER(9, 2, verbose_boot, );
MOUSEUP_HANDLER(10, 3, force_revert, );
MOUSEUP_HANDLER(16, 5, flower_chain, );
}
#define BOOTARGS_HANDLER \
tui_options_boot_args_cursor = tui_options_is_editing_boot_args ? strlen(tui_options_boot_args) : 0;
MOUSEUP_HANDLER(14, 5, is_editing_boot_args, BOOTARGS_HANDLER);
MOUSEUP_HANDLER(15, 5, is_editing_boot_args, BOOTARGS_HANDLER);
MOUSEUP_HANDLER(14, 4, is_editing_boot_args, BOOTARGS_HANDLER);
MOUSEUP_HANDLER(15, 4, is_editing_boot_args, BOOTARGS_HANDLER);
#undef MOUSEUP_HANDLER
tui_options_nav_mouse_select = -1;
break;