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