]> git.mdlowis.com Git - archive/carl.git/commitdiff
Initialized the build environment
authorMike D. Lowis <mike.lowis@gentex.com>
Fri, 5 Jun 2015 14:41:25 +0000 (10:41 -0400)
committerMike D. Lowis <mike.lowis@gentex.com>
Fri, 5 Jun 2015 14:41:25 +0000 (10:41 -0400)
.gitmodules [new file with mode: 0644]
Gemfile [new file with mode: 0644]
Gemfile.lock [new file with mode: 0644]
build.rb [new file with mode: 0755]
modules/build-system [new submodule]
source/libc.h [new file with mode: 0644]
source/main.c [new file with mode: 0644]

diff --git a/.gitmodules b/.gitmodules
new file mode 100644 (file)
index 0000000..3806bc3
--- /dev/null
@@ -0,0 +1,3 @@
+[submodule "modules/build-system"]
+    path = modules/build-system
+    url = https://github.com/mikedlowis/build-system.git
diff --git a/Gemfile b/Gemfile
new file mode 100644 (file)
index 0000000..894906d
--- /dev/null
+++ b/Gemfile
@@ -0,0 +1,4 @@
+source 'https://rubygems.org'
+gem 'rake', '>= 0'
+gem 'rscons', '>= 0'
+gem 'rspec', '>= 0'
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644 (file)
index 0000000..88f9e23
--- /dev/null
@@ -0,0 +1,29 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    diff-lcs (1.2.5)
+    json (1.8.2)
+    rake (10.4.2)
+    rscons (1.9.0)
+      json (~> 1.0)
+    rspec (3.2.0)
+      rspec-core (~> 3.2.0)
+      rspec-expectations (~> 3.2.0)
+      rspec-mocks (~> 3.2.0)
+    rspec-core (3.2.2)
+      rspec-support (~> 3.2.0)
+    rspec-expectations (3.2.0)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.2.0)
+    rspec-mocks (3.2.1)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.2.0)
+    rspec-support (3.2.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  rake
+  rscons
+  rspec
diff --git a/build.rb b/build.rb
new file mode 100755 (executable)
index 0000000..b0a131d
--- /dev/null
+++ b/build.rb
@@ -0,0 +1,4 @@
+#!/usr/bin/env ruby
+
+require './modules/build-system/setup'
+
diff --git a/modules/build-system b/modules/build-system
new file mode 160000 (submodule)
index 0000000..f1a522b
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit f1a522b4aed7c58ce3c8467ff8a00f00c3e27e64
diff --git a/source/libc.h b/source/libc.h
new file mode 100644 (file)
index 0000000..353df8f
--- /dev/null
@@ -0,0 +1,212 @@
+/**
+  @file libc.h
+*/
+#ifndef LIBC_H
+#define LIBC_H
+
+/*
+ * Base Types and Definitions
+ */
+#include <stddef.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdarg.h>
+#include <errno.h>
+
+#ifndef nil
+#define nil NULL
+#endif
+
+#ifndef nelem
+#define nelem(x) (sizeof(x)/sizeof((x)[0]))
+#endif
+
+/*
+ * Assertions
+ */
+#include <assert.h>
+
+#ifndef static_assert
+    #ifdef NDEBUG
+        #define static_assert(expr) ((void)0)
+    #else
+        #define static_assert(expr) switch(0){case 0:case (expr):;}
+    #endif
+#endif
+
+/*
+ * Setjmp Routines
+ */
+#include <setjmp.h>
+
+/*
+ * Signal Routines
+ */
+#include <signal.h>
+
+/*
+ * Memory and String Routines
+ */
+#include <string.h>
+
+/*
+ * Rune Definitions and Routines
+ */
+#define UTFmax    4        /*< Maximum number of bytes per rune */
+#define Runesync  0x80     /*< Upper bound of a UTF sequence */
+#define Runeself  0x80     /*< Upper bound of a rune sequence */
+#define Runeerror 0xFFFD   /*< Decoding error */
+#define Runemax   0x10FFFF /*< Maximum rune value */
+#define Runemask  0x1FFFFF /*< All bits used by a rune */
+
+/*
+typedef uint32_t Rune;
+
+int runetochar(char*, Rune*);
+int chartorune(Rune*, char*);
+int runelen(long);
+int runenlen(Rune*, int);
+int fullrune(char*, int);
+int utflen(char*);
+int utfnlen(char*, long);
+char* utfrune(char*, long);
+char* utfrrune(char*, long);
+char* utfutf(char*, char*);
+char* utfecpy(char*, char*, char*);
+
+Rune* runestrcat(Rune*, Rune*);
+Rune* runestrchr(Rune*, Rune);
+int runestrcmp(Rune*, Rune*);
+Rune* runestrcpy(Rune*, Rune*);
+Rune* runestrncpy(Rune*, Rune*, long);
+Rune* runestrecpy(Rune*, Rune*, Rune*);
+Rune* runestrdup(Rune*);
+Rune* runestrncat(Rune*, Rune*, long);
+int runestrncmp(Rune*, Rune*, long);
+Rune* runestrrchr(Rune*, Rune);
+long  runestrlen(Rune*);
+Rune* runestrstr(Rune*, Rune*);
+
+Rune tolowerrune(Rune);
+Rune totitlerune(Rune);
+Rune toupperrune(Rune);
+Rune tobaserune(Rune);
+int isalpharune(Rune);
+int isbaserune(Rune);
+int isdigitrune(Rune);
+int islowerrune(Rune);
+int isspacerune(Rune);
+int istitlerune(Rune);
+int isupperrune(Rune);
+*/
+
+/*
+ * I/O Routines
+ */
+#include <stdio.h>
+
+#define Bsize      8*1024
+#define Bungetsize 4        /* space for ungetc */
+#define Bmagic     0x314159
+#define Beof       -1
+#define Bbad       -2
+//#define Binactive  0        /* states */
+//#define Bractive,
+//#define Bwactive,
+//#define Bracteof,
+//#define Bend
+
+//enum {
+//    Bsize       = 8*1024,
+//    Bungetsize  = 4,        /* space for ungetc */
+//    Bmagic      = 0x314159,
+//    Beof        = -1,
+//    Bbad        = -2,
+//
+//    Binactive   = 0,        /* states */
+//    Bractive,
+//    Bwactive,
+//    Bracteof,
+//
+//    Bend
+//};
+
+typedef struct Biobuf {
+    int icount;     /* neg num of bytes at eob */
+    int ocount;     /* num of bytes at bob */
+    int rdline;     /* num of bytes after rdline */
+    int runesize;   /* num of bytes of last getrune */
+    int state;      /* r/w/inactive */
+    int fid;        /* open file */
+    int flag;       /* magic if malloc'ed */
+    long long   offset;     /* offset of buffer in file */
+    int bsize;      /* size of buffer */
+    unsigned char*  bbuf;       /* pointer to beginning of buffer */
+    unsigned char*  ebuf;       /* pointer to end of buffer */
+    unsigned char*  gbuf;       /* pointer to good data in buf */
+    unsigned char   b[Bungetsize+Bsize];
+} Biobuf;
+
+/*
+#define BGETC(bp)\
+        ((bp)->icount?(bp)->bbuf[(bp)->bsize+(bp)->icount++]:Bgetc((bp)))
+
+#define BPUTC(bp,c)\
+        ((bp)->ocount?(bp)->bbuf[(bp)->bsize+(bp)->ocount++]=(c),0:Bputc((bp),(c)))
+
+#define BOFFSET(bp)\
+        (((bp)->state==Bractive)?\
+                (bp)->offset + (bp)->icount:\
+            (((bp)->state==Bwactive)?\
+                    (bp)->offset + ((bp)->bsize + (bp)->ocount):\
+                    -1))
+
+#define BLINELEN(bp)\
+        (bp)->rdline
+
+#define BFILDES(bp)\
+        (bp)->fid
+
+int Bbuffered(Biobuf*);
+Biobuf* Bfdopen(int, int);
+int Bfildes(Biobuf*);
+int Bflush(Biobuf*);
+int Bgetc(Biobuf*);
+int Bgetd(Biobuf*, double*);
+long Bgetrune(Biobuf*);
+int Binit(Biobuf*, int, int);
+int Binits(Biobuf*, int, int, unsigned char*, int);
+int Blinelen(Biobuf*);
+long long Boffset(Biobuf*);
+Biobuf* Bopen(char*, int);
+int Bprint(Biobuf*, char*, ...);
+int Bputc(Biobuf*, int);
+int Bputrune(Biobuf*, long);
+void* Brdline(Biobuf*, int);
+char* Brdstr(Biobuf*, int, int);
+long Bread(Biobuf*, void*, long);
+long long Bseek(Biobuf*, long long, int);
+int Bterm(Biobuf*);
+int Bungetc(Biobuf*);
+int Bungetrune(Biobuf*);
+long Bwrite(Biobuf*, void*, long);
+int Bvprint(Biobuf*, char*, va_list);
+*/
+
+/*
+ * New Features
+ */
+extern char* errstr;
+void exits(char*);
+
+/*
+ * Make sure we use the built-in main which calls user_main
+ */
+#ifndef NO_MAIN_WRAPPER
+    #define main user_main
+    extern void user_main(int, char**);
+#endif
+
+#endif /* LIBC_H */
diff --git a/source/main.c b/source/main.c
new file mode 100644 (file)
index 0000000..1930b05
--- /dev/null
@@ -0,0 +1,24 @@
+#define NO_MAIN_WRAPPER
+#include "libc.h"
+
+char* errstr = nil;
+
+static int exitcode(void)
+{
+    return errstr ? 1 : errno;
+}
+
+void exits(char* estr)
+{
+    if (estr)
+        errstr = estr;
+    exit(exitcode());
+}
+
+int main(int argc, char** argv)
+{
+    user_main(argc, argv);
+    exits(errstr);
+    return -1;
+}
+