* Ben Minton <[EMAIL PROTECTED]> [031028 02:49]:
> 
> Hi List,
 Hi Ben:
        I am attaching browse-system.r
        You might find this to be an example of how to 
        a simple text-based interface. It isn't really
        text-cell graphics but it is an understandable
        interface and *also* is a good way to understadn
        the rebol system and resources.

        BTW: The author was on the rebol development team
        and is a member and frequent contributor to this
        list.

        tj

> I previously posted a question re a rebol web browser 
> for a command line linux install. Both Tom and Tim 
> (thanks to you both), gave a reply or two and 
> suggested that I refine my questions, back to the list.
> 
> One reply stated that I can 'use ansi escape 
> sequences to build some sort of TUI'.
> 
> Has anyone had experience with this? I was also 
> suggested to go to rebolforces.com and look 
> at 'Dialecting and the Console' , which I am doing now.
> 
> Just for info, the reason why I have a command line 
> linux install is I am using old gen PCs and a desire to 
> learn linux, from actually tinkering.
> 
> Thanks, Ben 
> -- 
> To unsubscribe from this list, just send an email to
> [EMAIL PROTECTED] with unsubscribe as the subject.

-- 
Tim Johnson <[EMAIL PROTECTED]>
      http://www.alaska-internet-solutions.com


-- Attached file included as plaintext by Ecartis --

REBOL [
    Title:  "System Object Browser"
    Date:   3-Jun-1999
    Author: "Bohdan Lechnowsky"
    Email:  [EMAIL PROTECTED]
    File:   %browse-system.r
    Purpose: {
        To make browsing the system object safe and easy.
        Also allows changes to be made.
    }
    Category: [script utility]
]

align: function [
        "Forms data into a specified number of columns with optional alignment"
        data length /left /right /center] [len] [
    if right [
        return head copy/part 
            tail insert/dup head form data " " length 
            (length * -1)
    ]
    if center [
        data: head insert/dup head form data " " len: (length / 2)
        data: head insert/dup tail data " " len
        return copy/part at data ((length? data) / 2 - len + 1) length
    ]
    return copy/part head insert/dup tail form data " " length length
]

parent-item: func [path] [
    either find path "/" [
        path: tail path
        while [not find/part path "/" 1] [
            path: back path
        ]
        return head clear path
    ][
        print "^/ERROR: You are already at the top of the system object"
        return path
    ]
]

protocol-menu: func [path] [
    if not object? path [
        display path
        return none
    ]

    if current-path = "system/words" [
        print "^/ERROR: Accessing system/words will lead to an endless recursive loop"
        return none
    ]

    protocols: remove copy first path

    print [newline "===" current-path "==="]

    if current-path <> "system" [print "  0 > PARENT"]
    for index 1 (length? protocols) 1 [
        prin [(align/right index 3) ">" (align pick protocols index 20)]
        if not all [(current-path = "system") ((pick protocols index) = 'words)] [
            if (not find value: mold pick (second path) (index + 1) "^/") [
                prin align value 50
                if (length? value) > 50 [prin " ..."]
            ]
        ]
        prin newline
    ]
    print " 99 > EXIT"

    prin newline

    while [error? try [choice: to-integer ask "->"]] [
        print "ERROR: Please enter a number from the list above"
    ]
    
    either error? try [field: pick protocols choice] [
        current-path: parent-item current-path
        return none
    ][
        if choice = 99 [halt]
        return field
    ]
]

display: func [path] [
    print ["The value of" current-path "is" mold path newline]

    choice: ask "Do you want to change this (y/n)? "

    if choice = "y" [
        value: load ask "What is the new value: "
        do command: rejoin [current-path ": " mold value]
        print [
            newline "To make this change permanent, add the following"
            "line to your %user.r file:" newline newline command newline
        ]
        choice: ask "Do you want me to add this to your %user.r file (y/n)? "
        if choice = "y" [
            either exists? user: join system/options/home %user.r [
                write/append user append command newline
                print [newline "Made addition to" user]
            ][
                either exists? %user.r [
                    write/append %user.r append command newline
                    print [newline "Made addition to" join what-dir %user.r]
                ][
                    print [newline "ERROR: Could not find %user.r or %../user.r"]
                ]
            ]
        ]
    ]
]

start: func [] [
    current-path: "system"

    while [true] [
        if error? try [selection: protocol-menu do current-path][
            print [newline "ERROR: Cannot view this item"]
            selection: none
        ]
        either found? selection [
            current-path: rejoin [current-path "/" selection]
        ][
            current-path: parent-item current-path
        ]
    ]
]

start



-- 
To unsubscribe from this list, just send an email to
[EMAIL PROTECTED] with unsubscribe as the subject.

Reply via email to