\ folderol.txt Leo Wong 26 March 02003 + \ Parse a file list into a tree \ See usage example at the end of this file \ \ Sample input from a file: \ \ C:\docs\guide\2d\samples\BidiSample.java \ C:\docs\guide\2d\samples\Blur.java \ C:\docs\guide\awt\demos\eventmodel\actual\Box.java \ C:\docs\guide\awt\demos\eventmodel\actual\Click0.java \ etc. \ \ Sample output from folderol .tree: \ \ C: \ docs \ guide \ 2d \ samples \ BidiSample.java \ Blur.java \ awt \ demos \ eventmodel \ actual \ Box.java \ Click0.java \ etc. CHAR \ CONSTANT Separator \ OS word include from.txt from tools.txt from string.txt from tree.txt from files.txt : .Data ( node -- ) >data COUNT CR level @ SPACES TYPE ; : .Tree ( tree -- ) ['] .Data IS xNode 0 level ! xtree ; ' >data IS >comp \ for inlist? : Add-Parsed ( a u node -- a' u' node' ) >R Separator split R@ inlist? ?DUP IF NIP NIP R> DROP ELSE R> add-sibling >R string, R> THEN >children >R 1 /STRING R> ; : Grow-Tree ( a u tree -- a -1 node ) OVER 0> 0= ?? EXIT Add-Parsed RECURSE ; \ Input words : xFile ( tree a u -- ) open-in >R BEGIN readl WHILE R@ Grow-Tree DROP 2DROP REPEAT 2DROP close-in R> DROP ; : .Node ( node -- ) HEX CR level @ 8 * SPACES DUP 8 U.R @+ 8 U.R @+ 8 U.R @+ 8 U.R SPACE COUNT TYPE DECIMAL ; : .Nodes ( tree -- ) ['] .Node is xNode 0 level ! xTree ; CREATE Spad 84 CHARS ALLOT Spad 84 BL FILL : Write-Data ( node -- ) Spad level @ 2* write >data COUNT writel ; : Write-Tree ( tree -- ) 0 level ! ['] Write-Data IS xnode xTree ; : Folderol ( tree -- ) 0 PARSE xFile ; \ Usage example: \ tree Top \ Top folderol dir.dat \ Top .Tree \ Top .Nodes \ S" dir.tree" create-out \ Top write-tree \ close-out