shithub: pokecrystal

Download patch

ref: bbbbd7b9ae6daf32d72ba67fed5ba54ff673480e
parent: edebdf6014dc79fd13cf98b6ea27ef23c091af0a
author: Jacob Moody <moody@posixcafe.org>
date: Tue Feb 28 04:30:13 EST 2023

no more npe dependency

--- a/tools/common.h
+++ b/tools/common.h
@@ -1,14 +1,9 @@
 #ifndef GUARD_COMMON_H
 #define GUARD_COMMON_H
 
+#include <u.h>
+#include <libc.h>
 #include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdbool.h>
-#include <stddef.h>
-#include <inttypes.h>
-#include <string.h>
-#include <errno.h>
 #include <getopt.h>
 
 #ifndef PROGRAM_NAME
@@ -20,36 +15,47 @@
 
 #define COUNTOF(...) (sizeof(__VA_ARGS__) / sizeof(*(__VA_ARGS__)))
 
+#ifdef __plan9__
+typedef uchar uint8_t;
+typedef u32int uint32_t;
+typedef u16int uint16_t;
+#define PRIu32 "ud"
+typedef uchar bool;
+enum{
+	false,
+	true,
+};
+
+#define error_exit(...) (sysfatal(PROGRAM_NAME ": " __VA_ARGS__))
+#else
 #define error_exit(...) exit((fprintf(stderr, PROGRAM_NAME ": " __VA_ARGS__), 1))
+#endif
 
 void usage_exit(int status) {
 	fprintf(stderr, "Usage: " PROGRAM_NAME " " USAGE_OPTS "\n");
-	exit(status);
+	exits("usage");
 }
 
 void *xmalloc(size_t size) {
-	errno = 0;
 	void *m = malloc(size);
 	if (!m) {
-		error_exit("Could not allocate %zu bytes: %s\n", size, strerror(errno));
+		error_exit("Could not allocate %lud bytes: %r\n", size);
 	}
 	return m;
 }
 
 void *xcalloc(size_t size) {
-	errno = 0;
 	void *m = calloc(size, 1);
 	if (!m) {
-		error_exit("Could not allocate %zu bytes: %s\n", size, strerror(errno));
+		error_exit("Could not allocate %lud bytes: %r\n", size);
 	}
 	return m;
 }
 
 void *xrealloc(void *m, size_t size) {
-	errno = 0;
 	m = realloc(m, size);
 	if (!m) {
-		error_exit("Could not allocate %zu bytes: %s\n", size, strerror(errno));
+		error_exit("Could not allocate %lud bytes: %r\n", size);
 	}
 	return m;
 }
@@ -56,33 +62,29 @@
 
 FILE *xfopen(const char *filename, char rw) {
 	char mode[3] = {rw, 'b', '\0'};
-	errno = 0;
 	FILE *f = fopen(filename, mode);
 	if (!f) {
-		error_exit("Could not open file \"%s\": %s\n", filename, strerror(errno));
+		error_exit("Could not open file \"%s\": %r\n", filename);
 	}
 	return f;
 }
 
 void xfread(uint8_t *data, size_t size, const char *filename, FILE *f) {
-	errno = 0;
 	if (fread(data, 1, size, f) != size) {
 		fclose(f);
-		error_exit("Could not read from file \"%s\": %s\n", filename, strerror(errno));
+		error_exit("Could not read from file \"%s\": %r\n", filename);
 	}
 }
 
 void xfwrite(const uint8_t *data, size_t size, const char *filename, FILE *f) {
-	errno = 0;
 	if (fwrite(data, 1, size, f) != size) {
 		fclose(f);
-		error_exit("Could not write to file \"%s\": %s\n", filename, strerror(errno));
+		error_exit("Could not write to file \"%s\": %r\n", filename);
 	}
 }
 
 long xfsize(const char *filename, FILE *f) {
 	long size = -1;
-	errno = 0;
 	if (!fseek(f, 0, SEEK_END)) {
 		size = ftell(f);
 		if (size != -1) {
@@ -90,7 +92,7 @@
 		}
 	}
 	if (size == -1) {
-		error_exit("Could not measure file \"%s\": %s\n", filename, strerror(errno));
+		error_exit("Could not measure file \"%s\": %r\n", filename);
 	}
 	return size;
 }
--- a/tools/getopt.c
+++ b/tools/getopt.c
@@ -23,12 +23,9 @@
 
 /* This implementation was taken from musl and modified for RGBDS */
 
-#include <stddef.h>
-#include <stdlib.h>
-#include <limits.h>
+#include <u.h>
+#include <libc.h>
 #include <stdio.h>
-#include <string.h>
-#include <wchar.h>
 
 #include "getopt.h"
 
--- a/tools/getopt.h
+++ b/tools/getopt.h
@@ -30,6 +30,14 @@
 extern "C" {
 #endif
 
+#ifdef __plan9__
+typedef ulong size_t;
+typedef Rune wchar_t;
+enum { MB_LEN_MAX = 4 };
+#define mblen(r,n) (utfnlen(r, n))
+#define mbtowc(r,s,n) (chartorune(r,s))
+#endif
+
 extern char *optarg;
 extern int optind, musl_opterr, musl_optopt, musl_optreset;
 
--- a/tools/gfx.c
+++ b/tools/gfx.c
@@ -258,7 +258,7 @@
 	free(interleaved);
 }
 
-int main(int argc, char *argv[]) {
+void main(int argc, char *argv[]) {
 	parse_args(argc, argv);
 
 	argc -= optind;
@@ -300,5 +300,5 @@
 	}
 
 	free(graphic.data);
-	return 0;
+	exits(nil);
 }
--- a/tools/lz/main.c
+++ b/tools/lz/main.c
@@ -1,6 +1,6 @@
 #include "proto.h"
 
-int main (int argc, char ** argv) {
+void main (int argc, char ** argv) {
   struct options options = get_options(argc, argv);
   unsigned short size;
   unsigned char * file_buffer = read_file_into_buffer(options.input, &size);
@@ -22,7 +22,7 @@
   }
   free(file_buffer);
   free(commands);
-  return 0;
+  exits(nil);
 }
 
 struct command * compress (const unsigned char * data, unsigned short * size, unsigned method) {
--- a/tools/lz/mkfile
+++ b/tools/lz/mkfile
@@ -14,9 +14,6 @@
 	uncomp.$O\
 	util.$O\
 
-# ThIs MaKeS It PoRtAbLe
-POSIX=-D PRIu32="ud" -DPRId32="d" -DPRIx32="x" -DPRIX32="X" -DPRIo32="o" -DSTDOUT_FILENO=1 -DSTDIN_FILENO=0 -DPRIu8="ud" -DPRIu16="ud" -DPRId16="d" -DPRIx16="x" -DPRIX16="X" -DMB_LEN_MAX=4 -DUINT32_C='(uint32_t)'
-
-CFLAGS=$CFLAGS -p -I/sys/include/npe -D__plan9__ -D__${objtype}__ $POSIX
+CFLAGS=$CFLAGS -p
 
 </sys/src/cmd/mkone
--- a/tools/lz/nullcomp.c
+++ b/tools/lz/nullcomp.c
@@ -6,7 +6,7 @@
    Flags values: 0 = split a trailing 33-to-64-byte block at the end into two short blocks; 1 = don't
 */
 
-struct command * store_uncompressed (__attribute__((unused)) const unsigned char * data, __attribute__((unused)) const unsigned char * bitflipped, unsigned short * size, unsigned flags) {
+struct command * store_uncompressed (const unsigned char * data, const unsigned char * bitflipped, unsigned short * size, unsigned flags) {
   unsigned short position, block, remainder = *size;
   struct command _tmp;
   struct command * result = NULL;
--- a/tools/lz/options.c
+++ b/tools/lz/options.c
@@ -118,7 +118,7 @@
   fputs("                                   cleared (default: 0).\n", stderr);
   fputs("The source and output filenames can be given as - (or omitted) to use standard\n", stderr);
   fputs("input and output. Use -- to indicate that subsequent arguments are file names.\n", stderr);
-  exit(3);
+  exits("usage");
 }
 
 noreturn list_compressors (void) {
@@ -137,5 +137,5 @@
   fputs("Note: the offset indicates the compressor's lowest method number when the\n", stderr);
   fputs("--compressor option is not given. When that option is used, every compressor's\n", stderr);
   fputs("methods are numbered from zero.\n", stderr);
-  exit(3);
+  exits("usage");
 }
--- a/tools/lz/proto.h
+++ b/tools/lz/proto.h
@@ -1,7 +1,6 @@
+#include <u.h>
+#include <libc.h>
 #include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
 
 #define NUM_COMPRESSORS              4
 #define COMPRESSION_METHODS         96 /* sum of all values for the methods field in compressors */
@@ -45,7 +44,7 @@
 extern char option_name_buffer[];
 
 // main.c
-int main(int, char **);
+void main(int, char **);
 struct command * compress(const unsigned char *, unsigned short *, unsigned);
 
 // merging.c
--- a/tools/lz/repcomp.c
+++ b/tools/lz/repcomp.c
@@ -7,7 +7,7 @@
                  (lowest bit to highest: repeat single byte (1), repeat two bytes (2), repeat zeros (3)).
 */
 
-struct command * try_compress_repetitions (const unsigned char * data, __attribute__((unused)) const unsigned char * bitflipped, unsigned short * size, unsigned flags) {
+struct command * try_compress_repetitions (const unsigned char * data, const unsigned char * bitflipped, unsigned short * size, unsigned flags) {
   unsigned short pos = 0, skipped = 0;
   struct command _tmp;
   struct command * result = malloc(*size * sizeof(struct command));
--- a/tools/lz/util.c
+++ b/tools/lz/util.c
@@ -7,7 +7,7 @@
   vfprintf(stderr, error, ap);
   va_end(ap);
   fputc('\n', stderr);
-  exit(error_code);
+  exits("error");
 }
 
 unsigned char * read_file_into_buffer (const char * file, unsigned short * size) {
--- a/tools/mkfile
+++ b/tools/mkfile
@@ -10,9 +10,6 @@
 	pokemon_animation_graphics\
 	stadium\
 
-# ThIs MaKeS It PoRtAbLe
-POSIX=-D PRIu32="ud" -DPRId32="d" -DPRIx32="x" -DPRIX32="X" -DPRIo32="o" -DSTDOUT_FILENO=1 -DSTDIN_FILENO=0 -DPRIu8="ud" -DPRIu16="ud" -DPRId16="d" -DPRIx16="x" -DPRIX16="X" -DMB_LEN_MAX=4 -DUINT32_C='(uint32_t)'
-
-CFLAGS=$CFLAGS -I/sys/include/npe -D__plan9__ -D__${objtype}__ $POSIX
+CFLAGS=$CFLAGS -p -D__plan9__
 
 </sys/src/cmd/mkmany
--- a/tools/png_dimensions.c
+++ b/tools/png_dimensions.c
@@ -12,7 +12,7 @@
 	return (width_tiles << 4) | width_tiles;
 }
 
-int main(int argc, char *argv[]) {
+void main(int argc, char *argv[]) {
 	if (argc < 3) {
 		usage_exit(1);
 	}
@@ -19,5 +19,5 @@
 
 	uint8_t output_byte = read_png_dimensions(argv[1]);
 	write_u8(argv[2], &output_byte, 1);
-	return 0;
+	exits(nil);
 }
--- a/tools/pokemon_animation.c
+++ b/tools/pokemon_animation.c
@@ -164,7 +164,7 @@
 	}
 }
 
-int main(int argc, char *argv[]) {
+void main(int argc, char *argv[]) {
 	struct Options options = {0};
 	parse_args(argc, argv, &options);
 
@@ -191,5 +191,5 @@
 	}
 
 	free(tilemap);
-	return 0;
+	exits(nil);
 }
--- a/tools/pokemon_animation_graphics.c
+++ b/tools/pokemon_animation_graphics.c
@@ -144,7 +144,7 @@
 	free(data);
 }
 
-int main(int argc, char *argv[]) {
+void main(int argc, char *argv[]) {
 	struct Options options = {0};
 	parse_args(argc, argv, &options);
 
@@ -167,5 +167,5 @@
 	}
 
 	free(tiles);
-	return 0;
+	exits(nil);
 }
--- a/tools/stadium.c
+++ b/tools/stadium.c
@@ -182,7 +182,7 @@
 	SET_U16BE(file + GLOBAL_OFF, globalsum);
 }
 
-int main(int argc, char *argv[]) {
+void main(int argc, char *argv[]) {
 	bool european = false;
 	parse_args(argc, argv, &european);
 
@@ -199,5 +199,5 @@
 		calculate_checksums(file, european);
 	}
 	write_u8(filename, file, filesize);
-	return 0;
+	exits(nil);
 }