The Awesome Factor

Files and file-systems in Factor, part 2

Tuesday, January 13, 2009

#files #tools

In my previous post I wrote about the file-info and file-system-info words. Using those words, it’s possible to write a portable program for directory listing (dir or ls) and one for file-systems listing (df). Uses for directory listing include file-system utility programs and FTP servers.

File listing tool

The file-listing tool is in the Factor git repository as basis/tools/files/files.factor. Which slots you see depend on how it is configured and on which platform it’s running. Directory listings can be sorted by slot and the default sort is by name.

On Unix platforms, it’s configured like this:

    <listing-tool>
       { permissions nlinks user group file-size file-date file-name } >>specs
       { { directory-entry>> name>> <=> } } >>sort

Listing a directory on MacOSX:

-rw-r--r-- 1  erg staff 27185 Nov 28  2008 #factor.el#
drwxr-xr-x 6  erg staff 204   Nov 17  2008 Factor.tmbundle
-rw-r--r-- 1  erg staff 30282 Nov 30  2008 factor.el
-rw-r--r-- 1  erg staff 18037 Nov 17  2008 factor.vim
-rw-r--r-- 1  erg staff 12496 Nov 17  2008 factor.vim.fgen
drwxr-xr-x 26 erg staff 884   Jan 13 11:17 fuel
drwxr-xr-x 8  erg staff 272   Nov 17  2008 icons

Windows platforms take the look of the ``dir’’ command by default:

2009-01-14 00:00:53 <DIR>                Factor.tmbundle
2009-01-14 00:00:53                30282 factor.el
2009-01-14 00:00:53                18037 factor.vim
2009-01-14 00:00:53                12496 factor.vim.fgen
2009-01-14 00:00:53 <DIR>                fuel
2009-01-14 00:00:53 <DIR>                icons

File-systems tool

A tool for disk usage and mounted devices was easy to write once file-system tuples worked everywhere. Once again, it’s configurable for whatever you want to see. The default file-system word is:

: file-systems. ( -- )
    {
        device-name available-space free-space used-space
        total-space percent-used mount-point
    } print-file-systems ;

File-systems on a Mac:

device-name   available-space free-space   used-space   total-space  percent-used mount-point
/dev/disk0s2  118599725056    118861869056 200867090432 319728959488 62           /
fdesc         0               0            1024         1024         100          /dev
fdesc         0               0            1024         1024         100          /dev
map -hosts    0               0            0            0            0            /net
map auto_home 0               0            0            0            0            /home

On Windows:

device-name      available-space free-space used-space total-space percent-used mount-point
                 3814506496      3814506496 6911225856 10725732352 64           C:\
VBOXADDITIONS_2. 0               0          27983872   27983872    100          D:\
                 0               0          0          0           0            A:\