replace the VHD/diskpart disk image pipeline with a directory-based vvfat root, we'll see when it breaks, fix /O2, add an all_tests, generalize the fat32 driver into a fat 16+32 driver, change policy on volume drivers, collapse KCPU's fields into a single atomic KE_CPU_STATE state machine, move scheduler ticking to per-CPU LAPIC timers, gate verbose SMP topology logging behind selftest diagnostics and add SMP pool-checkpoint validation around AP admission, add checked intrusive list helpers behind a new KE_DEBUG_LIST_CHECKS flag, add ObInitializeObjectHeader/ObTryReferenceObject, add waitable display clock objects and a SYS_OPEN_DISPLAY_CLOCK syscall for vsync-style waits, refactor kernel input into a per-queue KE_INPUT_CONTEXT with its own key/mouse ring buffers and DPC-driven key repeat, add KeInputQueuePeekEvent/ReadEvent/WaitKey and a SYS_QUERY_GLOBAL_INPUT_STATE syscall, split the kernel pool allocator out of mm_virt, new video files!
This commit is contained in:
1 parent
485a6bbfe7
commit
8b254f84f4
74 files changed
+4488
-2503
No files matched your search
Binary file not shown.
Binary file not shown.
@@ -11,7 +11,9 @@
|
||||
#include <ntlite/syscall.h>
|
||||
#include "bink.h"
|
||||
|
||||
#define VIDEO_DEFAULT_PATH "video.bk2"
|
||||
#define VIDEO_USAGE "usage: video <file.bk2>\n" \
|
||||
" video --help\n" \
|
||||
"Plays a Bink video file from disk.\n"
|
||||
|
||||
static void print_span(const char* s, size_t len) {
|
||||
if (!s || !len) return;
|
||||
@@ -88,10 +90,10 @@ static SYS_STRING_VIEW skip_one_token(SYS_STRING_VIEW s) {
|
||||
return SysSvFromParts(s.Data + i, s.Length - i);
|
||||
}
|
||||
|
||||
static SYS_STRING_VIEW command_line_second_token(SYS_STRING_VIEW cmdline) {
|
||||
static SYS_STRING_VIEW command_line_first_argument(SYS_STRING_VIEW cmdline) {
|
||||
SYS_STRING_VIEW rest = skip_one_token(cmdline);
|
||||
if (!rest.Data || rest.Length == 0)
|
||||
return SYS_SV_LITERAL(VIDEO_DEFAULT_PATH);
|
||||
return SYS_SV_NULL;
|
||||
|
||||
size_t begin = 0;
|
||||
size_t end = 0;
|
||||
@@ -108,17 +110,43 @@ static SYS_STRING_VIEW command_line_second_token(SYS_STRING_VIEW cmdline) {
|
||||
}
|
||||
|
||||
if (end <= begin)
|
||||
return SYS_SV_LITERAL(VIDEO_DEFAULT_PATH);
|
||||
return SYS_SV_NULL;
|
||||
|
||||
return SysSvFromParts(rest.Data + begin, end - begin);
|
||||
}
|
||||
|
||||
static int sv_equals_cstr(SYS_STRING_VIEW s, const char* cstr) {
|
||||
size_t len = 0;
|
||||
if (!s.Data || !cstr)
|
||||
return 0;
|
||||
|
||||
while (cstr[len])
|
||||
len++;
|
||||
|
||||
if (s.Length != len)
|
||||
return 0;
|
||||
|
||||
return memcmp(s.Data, cstr, len) == 0;
|
||||
}
|
||||
|
||||
static int video_argument_is_help(SYS_STRING_VIEW arg) {
|
||||
return sv_equals_cstr(arg, "-h") ||
|
||||
sv_equals_cstr(arg, "--help") ||
|
||||
sv_equals_cstr(arg, "/?");
|
||||
}
|
||||
|
||||
static void print_usage(void) {
|
||||
print(VIDEO_USAGE);
|
||||
}
|
||||
|
||||
static const char* path_to_cstr(SYS_STRING_VIEW path, char* out, size_t outSize) {
|
||||
if (!out || outSize == 0)
|
||||
return VIDEO_DEFAULT_PATH;
|
||||
return "";
|
||||
|
||||
if (!path.Data || path.Length == 0)
|
||||
path = SYS_SV_LITERAL(VIDEO_DEFAULT_PATH);
|
||||
if (!path.Data || path.Length == 0) {
|
||||
out[0] = '\0';
|
||||
return out;
|
||||
}
|
||||
|
||||
size_t n = path.Length;
|
||||
if (n + 1 > outSize)
|
||||
@@ -140,7 +168,12 @@ static uint32_t open_file_view(SYS_STRING_VIEW path, uint32_t* handleOut) {
|
||||
|
||||
int main(void) {
|
||||
SYS_STRING_VIEW cmdline = command_line_view();
|
||||
SYS_STRING_VIEW pathView = command_line_second_token(cmdline);
|
||||
SYS_STRING_VIEW pathView = command_line_first_argument(cmdline);
|
||||
|
||||
if (!pathView.Data || pathView.Length == 0 || video_argument_is_help(pathView)) {
|
||||
print_usage();
|
||||
exit_now(0);
|
||||
}
|
||||
|
||||
print("video: starting\n");
|
||||
if (cmdline.Data && cmdline.Length) {
|
||||
|
||||
Reference in new issue
Block a user