mirror of
https://github.com/palera1n/palera1n
synced 2025-08-22 01:49:11 +00:00
185 lines
4.5 KiB
C
185 lines
4.5 KiB
C
#ifndef TUI_H
|
|
#define TUI_H
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include <inttypes.h>
|
|
#include <errno.h>
|
|
#include <fcntl.h>
|
|
#include <string.h>
|
|
#include <locale.h>
|
|
#include <unistd.h>
|
|
#include <paleinfo.h>
|
|
#include <pthread.h>
|
|
#include <semaphore.h>
|
|
|
|
#define WIDTH 76
|
|
#define HEIGHT 19
|
|
|
|
#define CHECKBOX_STATE(flags, opt) (flags & opt) != 0 ? '*' : ' '
|
|
|
|
#define STR_HELPER(x) #x
|
|
#define STR(x) STR_HELPER(x)
|
|
|
|
#define CLEAR_SCREEN printf("\033[2J")
|
|
#define RESETFONT printf("\x1b[0m")
|
|
#define PRINTAT(x, y, str) printf("\x1b[%d;%dH%s", y, x, str)
|
|
#define PRINTATT(x, y, str) PRINTAT(tui_x_offset + x, tui_y_offset + y, str)
|
|
#define PRINTATLEN(x, y, str, len) printf("\x1b[%d;%dH%." STR(len) "s", y, x, str)
|
|
#define PRINTATLENT(x, y, str, len) PRINTATLEN(tui_x_offset + x, tui_y_offset + y, str, len)
|
|
#define MOVETO(x, y) printf("\x1b[%d;%dH", y, x)
|
|
#define MOVETOT(x, y) MOVETO(tui_x_offset + x, tui_y_offset + y)
|
|
#define SETCOLOR(fg, bg) printf("\x1b[%d;%dm", fg, bg)
|
|
#define SETCOLORA(fg, bg, a) printf("\x1b[" STR(fg) ";" STR(bg) ";" STR(a) "m")
|
|
#define COLOR(fg, bg) "\x1b[" STR(fg) ";" STR(bg) "m"
|
|
#define FG_BLACK 30
|
|
#define FG_YELLOW 33
|
|
#define FG_BLUE 34
|
|
#define FG_WHITE 37
|
|
#define BG_BLACK 40
|
|
#define BG_YELLOW 43
|
|
#define BG_BLUE 44
|
|
#define BG_WHITE 47
|
|
#define NONE 0
|
|
#define BOLD 1
|
|
extern bool supports_bright_colors;
|
|
#define FG_BRIGHT_BLACK 90
|
|
#define FG_BRIGHT_WHITE 97
|
|
#define BG_BRIGHT_BLACK 100
|
|
#define BG_BRIGHT_WHITE 107
|
|
#define G1D4(set) printf("\x1b\x29%c", set)
|
|
#define DSGON putchar('\x0e'); G1D4('0')
|
|
#define DSGOFF putchar('\x0f'); G1D4('B')
|
|
#define MOUSEON printf("\x1b[?1003h")
|
|
#define MOUSEOFF printf("\x1b[?1003l")
|
|
#define CIVIS printf("\x1b[?25l")
|
|
#define CNORM printf("\x1b[?25h")
|
|
#define SMCUP printf("\x1b[?1049h")
|
|
#define RMCUP printf("\x1b[?1049l")
|
|
#define DRAWLINE(x, y, len) \
|
|
MOVETO(x, y); \
|
|
DSGON; \
|
|
for (int i = 0; i < len; i++) { \
|
|
putchar(0x71); \
|
|
} \
|
|
DSGOFF;
|
|
#define DRAWLINET(x, y, len) DRAWLINE(tui_x_offset + x, tui_y_offset + y, len)
|
|
|
|
typedef enum tui_screens {
|
|
ERROR_SCREEN = -1,
|
|
EXIT_SCREEN = 0,
|
|
MAIN_SCREEN = 1,
|
|
OPTIONS_SCREEN = 2,
|
|
ENTER_DFU_SCREEN = 3,
|
|
JAILBREAK_SCREEN = 4,
|
|
ENTER_RECOVERY_SCREEN = 5
|
|
} tui_screen_t;
|
|
|
|
typedef struct bitfield_checkbox_info {
|
|
uint64_t* flags_p;
|
|
uint64_t opt;
|
|
} tui_bit_info_t;
|
|
|
|
tui_screen_t tui_screen_main(void);
|
|
void tui_screen_main_redraw(void);
|
|
tui_screen_t tui_screen_options(void);
|
|
void tui_screen_options_redraw(void);
|
|
tui_screen_t tui_screen_enter_recovery(void);
|
|
void tui_screen_enter_recovery_redraw(void);
|
|
tui_screen_t tui_screen_enter_dfu(void);
|
|
void tui_screen_enter_dfu_redraw(void);
|
|
tui_screen_t tui_screen_jailbreak(void);
|
|
void tui_screen_jailbreak_redraw(void);
|
|
|
|
int redraw_screen(void);
|
|
|
|
void tui_draw_rectangle(int x1, int y1, int x2, int y2);
|
|
|
|
#ifdef BUILD_TAG
|
|
#define TUI_VERSION BUILD_TAG
|
|
#else
|
|
#define TUI_VERSION "Unknown Version"
|
|
#endif
|
|
|
|
extern int tui_x_offset;
|
|
extern int tui_y_offset;
|
|
|
|
extern int tui_mouse_x;
|
|
extern int tui_mouse_y;
|
|
|
|
enum {
|
|
TUI_INPUT_NONE,
|
|
TUI_INPUT_LEFT,
|
|
TUI_INPUT_RIGHT,
|
|
TUI_INPUT_UP,
|
|
TUI_INPUT_DOWN,
|
|
TUI_INPUT_MOUSE_MOVE,
|
|
TUI_INPUT_MOUSE_DOWN,
|
|
TUI_INPUT_MOUSE_UP,
|
|
TUI_INPUT_SELECT,
|
|
TUI_INPUT_TAB,
|
|
TUI_INPUT_TAB_BACK,
|
|
TUI_INPUT_BACKSPACE,
|
|
TUI_INPUT_ESCAPE,
|
|
};
|
|
|
|
enum {
|
|
TUI_EVENT_INPUT,
|
|
TUI_EVENT_CONNECTED_DEVICES_CHANGED,
|
|
TUI_EVENT_JAILBREAK_STATUS_CHANGED
|
|
};
|
|
|
|
int tui_get_input(void);
|
|
void *tui_input_thread(void *arg);
|
|
int tui_get_event(void);
|
|
int tui_try_get_event(void);
|
|
|
|
extern int tui_last_event;
|
|
extern int tui_last_input;
|
|
extern sem_t *tui_event_semaphore;
|
|
extern char tui_last_key;
|
|
|
|
void tui_devhelper(void);
|
|
|
|
enum tui_device_mode {
|
|
TUI_DEVICE_MODE_NORMAL,
|
|
TUI_DEVICE_MODE_RECOVERY,
|
|
TUI_DEVICE_MODE_DFU
|
|
};
|
|
|
|
struct tui_connected_device {
|
|
uint64_t ecid;
|
|
char udid[44];
|
|
char version[0x20];
|
|
bool arm64;
|
|
enum tui_device_mode mode;
|
|
char product_type[0x20];
|
|
char display_name[0x20];
|
|
unsigned int cpid;
|
|
bool requires_passcode_disabled;
|
|
bool passcode_state;
|
|
struct tui_connected_device *next;
|
|
};
|
|
|
|
extern struct tui_connected_device *tui_connected_devices;
|
|
|
|
void tui_jailbreak(void);
|
|
extern bool tui_is_jailbreaking;
|
|
extern int tui_jailbreak_stage;
|
|
extern char *tui_jailbreak_status;
|
|
|
|
void tui_jailbreak_status_changed(void);
|
|
|
|
extern bool tui_is_restarting;
|
|
void tui_terminate(int sig);
|
|
|
|
extern bool tui_options_safe_mode;
|
|
extern bool tui_options_verbose_boot;
|
|
extern bool tui_options_force_revert;
|
|
extern bool tui_options_flower_chain;
|
|
|
|
extern char tui_options_boot_args[0x1e0 + 1];
|
|
|
|
#endif
|