From 8802f0c2fc776ce112f88a7ee1b36835515eb5a1 Mon Sep 17 00:00:00 2001
From: Eduardo Cavazos <dharmatech@finkelstein.stackeffects.info>
Date: Tue, 26 Feb 2008 21:43:58 -0600
Subject: [PATCH 1/4] builder.util: fix using

---
 extra/builder/util/util.factor | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/extra/builder/util/util.factor b/extra/builder/util/util.factor
index a838eced6d..1081d3256d 100644
--- a/extra/builder/util/util.factor
+++ b/extra/builder/util/util.factor
@@ -4,7 +4,7 @@ USING: kernel words namespaces classes parser continuations
        math math.parser
        combinators sequences splitting quotations arrays strings tools.time
        parser-combinators new-slots accessors assocs.lib
-       combinators.cleave bake calendar  ;
+       combinators.cleave bake calendar calendar.format ;
 
 IN: builder.util
 

From 5b0ab02d65a2764e27f186bd4e7b4b738ef7b61a Mon Sep 17 00:00:00 2001
From: Eduardo Cavazos <dharmatech@finkelstein.stackeffects.info>
Date: Wed, 27 Feb 2008 01:55:49 -0600
Subject: [PATCH 2/4] add unix.stat

---
 extra/unix/stat/linux/32/32.factor | 54 ++++++++++++++++++++++++++++++
 extra/unix/stat/linux/64/64.factor | 54 ++++++++++++++++++++++++++++++
 extra/unix/stat/linux/linux.factor | 11 ++++++
 extra/unix/stat/stat.factor        | 11 ++++++
 4 files changed, 130 insertions(+)
 create mode 100644 extra/unix/stat/linux/32/32.factor
 create mode 100644 extra/unix/stat/linux/64/64.factor
 create mode 100644 extra/unix/stat/linux/linux.factor
 create mode 100644 extra/unix/stat/stat.factor

diff --git a/extra/unix/stat/linux/32/32.factor b/extra/unix/stat/linux/32/32.factor
new file mode 100644
index 0000000000..4525fd3879
--- /dev/null
+++ b/extra/unix/stat/linux/32/32.factor
@@ -0,0 +1,54 @@
+
+USING: kernel alien.syntax math ;
+
+IN: unix.stat
+
+! Ubuntu 8.04 32-bit
+
+C-STRUCT: stat
+    { "dev_t"     "st_dev" }
+    { "ushort"    "__pad1"  }
+    { "ino_t"     "st_ino" }
+    { "mode_t"    "st_mode" }
+    { "nlink_t"   "st_nlink" }
+    { "uid_t"     "st_uid" }
+    { "gid_t"     "st_gid" }
+    { "dev_t"     "st_rdev" }
+    { "ushort"    "__pad2" }
+    { "off_t"     "st_size" }
+    { "blksize_t" "st_blksize" }
+    { "blkcnt_t"  "st_blocks" }
+    { "timespec"  "st_atim" }
+    { "timespec"  "st_mtim" }
+    { "timespec"  "st_ctim" }
+    { "ulong"     "unused4" }
+    { "ulong"     "unused5" } ;
+
+FUNCTION: int __xstat  ( int ver, char* pathname, stat* buf ) ;
+FUNCTION: int __lxstat ( int ver, char* pathname, stat* buf ) ;
+
+:  stat ( pathname buf -- int ) 3 -rot __xstat ;
+: lstat ( pathname buf -- int ) 3 -rot __lxstat ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: S_IFMT   OCT: 170000 ; ! These bits determine file type.
+
+: S_IFDIR  OCT:  40000 ;    ! Directory.
+: S_IFCHR  OCT:  20000 ;    ! Character device.
+: S_IFBLK  OCT:  60000 ;    ! Block device.
+: S_IFREG  OCT: 100000 ;    ! Regular file.
+: S_IFIFO  OCT: 010000 ;    ! FIFO.
+: S_IFLNK  OCT: 120000 ;    ! Symbolic link.
+: S_IFSOCK OCT: 140000 ;    ! Socket.
+
+: S_ISTYPE ( mode mask -- val ) >r S_IFMT bitand r> = ;
+
+: S_ISREG  ( mode -- value ) S_IFREG S_ISTYPE ;
+: S_ISDIR  ( mode -- value ) S_IFDIR S_ISTYPE ;
+: S_ISCHR  ( mode -- value ) S_IFCHR S_ISTYPE ;
+: S_ISBLK  ( mode -- value ) S_IFBLK S_ISTYPE ;
+: S_ISFIFO ( mode -- value ) S_IFIFO S_ISTYPE ;
+: S_ISLNK  ( mode -- value ) S_IFLNK S_ISTYPE ;
+: S_ISSOCK ( mode -- value ) S_IFSOCK S_ISTYPE ;
+
diff --git a/extra/unix/stat/linux/64/64.factor b/extra/unix/stat/linux/64/64.factor
new file mode 100644
index 0000000000..3281af91d5
--- /dev/null
+++ b/extra/unix/stat/linux/64/64.factor
@@ -0,0 +1,54 @@
+
+USING: kernel alien.syntax math ;
+
+IN: unix.stat
+
+! Ubuntu 7.10 64-bit
+
+C-STRUCT: stat
+    { "dev_t"     "st_dev" }
+    { "ino_t"     "st_ino" }
+    { "nlink_t"   "st_nlink" }
+    { "mode_t"    "st_mode" }
+    { "uid_t"     "st_uid" }
+    { "gid_t"     "st_gid" }
+    { "int"       "pad0" }
+    { "dev_t"     "st_rdev" }
+    { "off_t"     "st_size" }
+    { "blksize_t" "st_blksize" }
+    { "blkcnt_t"  "st_blocks" }
+    { "timespec"  "st_atim" }
+    { "timespec"  "st_mtim" }
+    { "timespec"  "st_ctim" }
+    { "long"      "__unused0" }
+    { "long"      "__unused1" }
+    { "long"      "__unused2" } ;
+
+FUNCTION: int __xstat  ( int ver, char* pathname, stat* buf ) ;
+FUNCTION: int __lxstat ( int ver, char* pathname, stat* buf ) ;
+
+:  stat ( pathname buf -- int ) 3 -rot __xstat ;
+: lstat ( pathname buf -- int ) 3 -rot __lxstat ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: S_IFMT   OCT: 170000 ; ! These bits determine file type.
+
+: S_IFDIR  OCT:  40000 ;    ! Directory.
+: S_IFCHR  OCT:  20000 ;    ! Character device.
+: S_IFBLK  OCT:  60000 ;    ! Block device.
+: S_IFREG  OCT: 100000 ;    ! Regular file.
+: S_IFIFO  OCT: 010000 ;    ! FIFO.
+: S_IFLNK  OCT: 120000 ;    ! Symbolic link.
+: S_IFSOCK OCT: 140000 ;    ! Socket.
+
+: S_ISTYPE ( mode mask -- val ) >r S_IFMT bitand r> = ;
+
+: S_ISREG  ( mode -- value ) S_IFREG S_ISTYPE ;
+: S_ISDIR  ( mode -- value ) S_IFDIR S_ISTYPE ;
+: S_ISCHR  ( mode -- value ) S_IFCHR S_ISTYPE ;
+: S_ISBLK  ( mode -- value ) S_IFBLK S_ISTYPE ;
+: S_ISFIFO ( mode -- value ) S_IFIFO S_ISTYPE ;
+: S_ISLNK  ( mode -- value ) S_IFLNK S_ISTYPE ;
+: S_ISSOCK ( mode -- value ) S_IFSOCK S_ISTYPE ;
+
diff --git a/extra/unix/stat/linux/linux.factor b/extra/unix/stat/linux/linux.factor
new file mode 100644
index 0000000000..71248a59f1
--- /dev/null
+++ b/extra/unix/stat/linux/linux.factor
@@ -0,0 +1,11 @@
+
+USING: system combinators vocabs.loader ;
+
+IN: unix.stat
+
+cell-bits
+  {
+    { 32 [ "unix.stat.linux.32" require ] }
+    { 64 [ "unix.stat.linux.64" require ] }
+  }
+case
diff --git a/extra/unix/stat/stat.factor b/extra/unix/stat/stat.factor
new file mode 100644
index 0000000000..a3165fe214
--- /dev/null
+++ b/extra/unix/stat/stat.factor
@@ -0,0 +1,11 @@
+
+USING: system combinators vocabs.loader ;
+
+IN: unix.stat
+
+{
+  { [ linux? ] [ "unix.stat.linux" require ] }
+  { [ t      ] [                           ] }
+}
+cond
+

From 95aafbc188da74ec4be0373437dcfbcd440c293a Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Wed, 27 Feb 2008 13:21:06 -0600
Subject: [PATCH 3/4] some work on sqlite

---
 extra/db/sqlite/sqlite.factor | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/extra/db/sqlite/sqlite.factor b/extra/db/sqlite/sqlite.factor
index b8e8bca300..8aba932490 100755
--- a/extra/db/sqlite/sqlite.factor
+++ b/extra/db/sqlite/sqlite.factor
@@ -8,7 +8,9 @@ words combinators.lib db.types combinators tools.walker ;
 IN: db.sqlite
 
 TUPLE: sqlite-db path ;
-C: <sqlite-db> sqlite-db
+
+M: sqlite-db make-db* ( path db -- db )
+    [ set-sqlite-db-path ] keep ;
 
 M: sqlite-db db-open ( db -- )
     dup sqlite-db-path sqlite-open <db>
@@ -19,9 +21,6 @@ M: sqlite-db db-close ( handle -- )
 
 M: sqlite-db dispose ( db -- ) dispose-db ;
 
-: with-sqlite ( path quot -- )
-    >r <sqlite-db> r> with-db ; inline
-
 TUPLE: sqlite-statement ;
 
 TUPLE: sqlite-result-set has-more? ;
@@ -47,7 +46,6 @@ M: sqlite-result-set dispose ( result-set -- )
     f swap set-result-set-handle ;
 
 : sqlite-bind ( specs handle -- )
-break
     swap [ sqlite-bind-type ] with each ;
 
 M: sqlite-statement bind-statement* ( obj statement -- )

From fdc812d307685ca7ce1d65499b1be1eda3512509 Mon Sep 17 00:00:00 2001
From: Eduardo Cavazos <dharmatech@finkelstein.stackeffects.info>
Date: Wed, 27 Feb 2008 16:08:57 -0600
Subject: [PATCH 4/4] add extra:size-of

---
 extra/size-of/size-of.factor | 46 ++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
 create mode 100644 extra/size-of/size-of.factor

diff --git a/extra/size-of/size-of.factor b/extra/size-of/size-of.factor
new file mode 100644
index 0000000000..df43a9adb2
--- /dev/null
+++ b/extra/size-of/size-of.factor
@@ -0,0 +1,46 @@
+
+USING: kernel namespaces sequences
+       io io.files io.launcher bake builder.util
+       accessors vars ;
+
+IN: size-of
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+VAR: headers
+
+: include-headers ( -- seq )
+  headers> [ { "#include <" , ">" } bake to-string ] map ;
+
+: size-of-c-program ( type -- lines )
+  {
+    "#include <stdio.h>"
+    include-headers
+    { "main() { printf( \"%i\\n\" , sizeof( " , " ) ) ; }" }
+  }
+  bake to-strings ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: c-file ( -- path ) "size-of.c" temp-file ;
+
+: exe ( -- path ) "size-of" temp-file ;
+
+: answer ( -- path ) "size-of-answer" temp-file ;
+
+! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+: size-of ( type -- n )
+  c-file
+    [ size-of-c-program [ print ] each ]
+  with-file-writer
+
+  { "gcc" c-file "-o" exe } to-strings
+  [ "Error compiling generated C program" print ] run-or-bail
+  
+  <process*>
+    { exe } to-strings >>arguments
+    answer             >>stdout
+  >desc run-process drop
+
+  answer eval-file ;
\ No newline at end of file