REBOL [ Title: "REBOL/Services Client Test Shell" Version: 1.0.2 Author: "Gabriele Santilli" ] lns-url: http://www.rebol.net/cgi-bin/services.r lns-port: none print [system/script/header/title system/script/header/version] do http://www.rebol.net/rebservices/client.r ctx-services/debug-enable: false print "Type HELP for more information." help-menu: { Local Commands: QUIT - Quit the shell LOGIN [user [pass]] - Login as user LOGOUT - Logout HELP - This help message RESET - Reset connection OPEN url - Open new connection LOCAL expr - Evaluate expression locally Useful Remote Commands: INFO - General info about services COMMANDS - Discovery of services commands DATE - Date/time/zone of server SYSTEM - REBOL version LANGUAGE - Human interface language Any other command is sent to the server, along with arguments. For example: ECHO "How ya doing?" ECHO [%file $10.00 http://www.rebol.com] INFO all INFO title } if-error: func [ "Tries to DO code, then DOes on-error if it fails" [throw] code [block!] on-error [block!] "The word 'error will refer to the error" /local result ] [ on-error: func [[throw] error [error!]] on-error either error? set/any 'result try code [on-error :result] [get/any 'result] ] form-error: func [ "Forms an error message" errobj [object!] "Disarmed error" /all "Use the same format as the REBOL console" /local errtype text ] [ errtype: get in system/error get in errobj 'type text: get in errtype get in errobj 'id if block? text [text: reform bind/copy text in errobj 'self] either all [ rejoin [ "** " get in errtype 'type ": " text newline either get in errobj 'where [join "** Where: " [mold get in errobj 'where newline]] [""] either get in errobj 'near [join "** Near: " [mold/only get in errobj 'near newline]] [""] ] ] [ text ] ] lns-port: open-service lns-url do-local: func [cmd] [ bind cmd system/words set/any 'cmd if-error cmd [ prin form-error/all disarm error exit ] if value? 'cmd [print ["L===" mold cmd]] ] forever [ request: to block! ask "LNS> " if not parse request [ ['q | 'quit] (quit) | 'login set user opt string! set pass opt string! ( user: any [user ask "Username? "] pass: any [pass ask/hide "Password? "] if not login-service lns-port user pass [ print "***Unable to log in!" ] ) | 'logout (logout-service lns-port) | 'reset (attempt [close-service lns-port lns-port: open-service lns-url]) | 'open set lns-url url! (attempt [close-service lns-port lns-port: open-service lns-url]) | ['! | 'local] copy cmd to end (do-local cmd) | 'help (print help-menu) | end ; empty command line, ignore ] [ if-error [ result: do-service lns-port request either all [result/1 = 'done result/3 = 'ok] [ print ["====" mold/only next result/4] ] [ print ["!!!!" mold result] ] ] [ prin form-error/all disarm error ] ] ]