r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[Core] Discuss core issues

GrahamC
22-Feb-2011
[1004x4]
find/reverse tail a b only finds the first |
>> a
== "abcd|as|dsf|||||"

>> index? find/reverse tail a b
== 16
oops ...
no sleep :(
BrianH
22-Feb-2011
[1008]
That's where the CLEAR comes in :)
GrahamC
22-Feb-2011
[1009x2]
By George I think I've got it!
BTW, I think trim/with/tail should actually do this .. but trim/with 
removes characters inside the string.
BrianH
22-Feb-2011
[1011]
Yeah, for TRIM /with implies /all.
GrahamC
22-Feb-2011
[1012]
replace/all does the same ... so perhaps trim/with should be changed
Andreas
23-Feb-2011
[1013]
>> map-each a [] [1]
** Throw Error: Return or exit not in function
** Where: map-each
** Near: return any [output make block! 0]

>> system/version
== 2.7.8.4.2
BrianH
23-Feb-2011
[1014x3]
Darn, my bad. It's the [throw] function attribute. Don't worry, there's 
a way to reorganize the code so no RETURN is necessary.
Thanks for the report. I'll fix it in R2/Forward right away.
Here's a working version:

map-each: func [

 "Evaluates a block for each value(s) in a series and returns them 
 as a block."
	[throw catch]

 'word [word! block!] "Word or block of words to set each time (local)"
	data [block!] "The series to traverse"
	body [block!] "Block to evaluate each time"
	/into "Collect into a given series, rather than a new block"

 output [any-block! any-string!] "The series to output to" ; Not image!
	/local init len x
][
	; Shortcut return for empty data
	either empty? data [any [output make block! 0]] [
		; BIND/copy word and body
		word: either block? word [
			if empty? word [throw make error! [script invalid-arg []]]

   copy/deep word  ; /deep because word is rebound before errors checked
		] [reduce [word]]
		word: use word reduce [word]
		body: bind/copy body first word
		; Build init code
		init: none
		parse word [any [word! | x: set-word! (
			unless init [init: make block! 4]
			; Add [x: at data index] to init, and remove from word
			insert insert insert tail init first x [at data] index? x
			remove x
		) :x | x: skip (

   throw make error! reduce ['script 'expect-set [word! set-word!] type? 
   first x]
		)]]
		len: length? word ; Can be zero now (for advanced code tricks)
		; Create the output series if not specified
		unless into [output: make block! divide length? data max 1 len]
		; Process the data (which is not empty at this point)

  until [ ; Note: output: insert/only output needed for list! output
			set word data  do init

   unless unset? set/any 'x do body [output: insert/only output :x]
			tail? data: skip data len
		]
		; Return the output and clean up memory references
		also either into [output] [head output] (
			set [word data body output init x] none
		)
	]
]
Henrik
7-Mar-2011
[1017]
I'm studying the RIP archive format and am wondering:


Why does LOAD allow binary "junk" at the end of a file, if it has 
a REBOL [] header, while it does not, when the header is omitted?
Oldes
7-Mar-2011
[1018]
I don't think that LOAD allow binary "junk"
Rebolek
7-Mar-2011
[1019]
afair, LOAD allows REBOL scripts to be embedded in "junk"
Oldes
7-Mar-2011
[1020x8]
No.. it doesn't... it's possible to DO a script which has some sort 
of junk, but not LOAD.
>> load {234523$%$%^& rebol [] print 1}
** Syntax Error: Invalid integer -- 234523$%$%&
** Near: (line 1) 234523$%$%& rebol [] print 1
>> do {234523$%$%^& rebol [] print 1}
** Syntax Error: Invalid integer -- 234523$%$%&
** Near: (line 1) 234523$%$%& rebol [] print 1
>> write/binary %x.r {234523$%$%^& rebol [] print 1}
>> do %x.r
** Syntax Error: Script is missing a REBOL header
** Near: do %x.r
>> write/binary %x.r {234523$%$%^& ^/rebol [] print 1}
>> do %x.r
1
you can have junk at the beggining as long as you have the header 
there (  rebol at the newline start)
rebol with following block.. this does not works:
>> write/binary %x.r {234523$%$%^& ^/rebol none print 1}
>> do %x.r
** Syntax Error: Script is missing a REBOL header
** Near: do %x.r
this works as well:
>> write/binary %x.r {[^/rebol [] print 1] 34532$%*&%$#}
>> do %x.r
1
hmm.. ok... the LOAD is possible as well:
>> load %x.r
== [print 1
]
so you are right
I guess it's how the load/next is implemented... if the header is 
inside a block, it stops there.
Henrik
10-Mar-2011
[1028]
I forget: How do you open an Explorer window from Rebol?
Dockimbel
10-Mar-2011
[1029]
If you want a file requester: request-file, if you just want to spawn 
a new Explorer window for the user, this should work: call "explorer".
Henrik
10-Mar-2011
[1030]
do you know if the call method works under win7?
Dockimbel
10-Mar-2011
[1031]
Works, tested on Win7 with 2.7.6 & 2.7.8.
Henrik
10-Mar-2011
[1032]
thanks very much
Dockimbel
10-Mar-2011
[1033]
You're welcome.
james_nak
11-Mar-2011
[1034]
Is there a trick / limit to just how deep one can create an object 
which itself has nested objects stored in a block? I have this xml 
string that I converted to a block via parse-xml but at about two 
levels in, it remains a block (make object!...)
Sunanda
11-Mar-2011
[1035x2]
Are you missing a reduce?
Or try Gavin's code:
   http://www.rebol.org/view-script.r?script=xml-object.r
Oldes
11-Mar-2011
[1037x2]
I'm using this one http://www.rebol.org/view-script.r?script=xml-parse.r
(not an object)
james_nak
11-Mar-2011
[1039]
Yes, I am using xml-parse and then xml-object. My question is something 
that I have dealing with for a long time actually. So is there a 
limit to how far something is reduced in terms of nesting?
Sunanda
11-Mar-2011
[1040]
Not as far as I know.....I have used some very deeply nested structures.
james_nak
11-Mar-2011
[1041]
And how do you do that? do reduce blk
Sunanda
11-Mar-2011
[1042]
I made a mistake in suggesting that.

I think the code makes blocks rather than objects. You could run 
through the structures changing them to objects.
james_nak
11-Mar-2011
[1043]
Sorry, about these delays. I was on on an online session.
So When I  use parse-xml+  on my xml string, I get the following:
[document [version none
        encoding none
        standalone none
        doctype none
        pubid none
        sysid none
        subset none

    ] [["TTL_Status" none ["^/^-" ["INPUT_TTLS" none ["^/^-^-" ["TTL_IN" 
    ["value" "0"] [{

^-^-^-} ["status" ["value" "1"] none] "^/^-^-"]] "^/^-^-" ["TTL_IN" 
["value" "1"] [{

^-^-^-} ["status" ["value" "1"] none] "^/^-^-"]] "^/^-"]] "^/^-" 
["OUTPUT_TTLS" none ["^/^-^-" ["TTL_OUT" ["value" "0"] [{

^-^-^-} ["status" ["value" "0"] none] "^/^-^-"]] "^/^-"]] "^/"]]]]

I know it's not that readable...

Then I run xml-to-object on that block and get:

o: xml-to-object  blk
where block is the output of parse-xml+ above.

probe o


[document: make object! [TTL_Status: make object! [INPUT_TTLS: make 
object! [TTL_IN: make block! reduce [

                    make object! [status: make object! [value?: "" value: "1"] value: 
                    "0"] make object! [status: make object! [value?: "" value
: "1"] value: "1"]

                ]] OUTPUT_TTLS: make object! [TTL_OUT: make object! [status: make 
                object! [value?: "" value: "0"] value: "0"]]] version: none
        encoding: none
        standalone: none
        doctype: none
        pubid: none
        sysid: none
        subset: none
    ]]


So this is where my ignorance leaves me. How do I make "o" into a 
an object where all the nested objects become real objects and don't 
remain as blocks?
GrahamC
11-Mar-2011
[1044x3]
do o
what you have is rebol source  so you need to execute it
make that

obj: do o
james_nak
11-Mar-2011
[1047x2]
Graham, I'll try that. Thanks.
OK, so I still get an invalid path but looking at the code I can 
see why.
 [TTL_IN: make block! reduce [

                    make object! [status: make object! [value?: "" value: "1"] value: 
                    "0"] make object! [status: make object! [value?: "" value
: "1"] value: "1"]

So it was making a block of objects. I didn't notice that before.

Thanks for your help. I should have looked more carefully before. 
It was always working.
james_nak
12-Mar-2011
[1049]
I think this is a Graham question. I've been trying to communicate 
with this video encoder. It uses .xml and .cgi files to talk to it:
tmp: http-tools http://192.168.1.62/user/GetTTLStatus.xml[]
and this works fine.


The problem is with he .cgi files. They aren't POST files but they 
only return 

 a: http-tools http://192.168.1.62/user/StorageMediaFiles.cgi[] probe 
 a
make object! [
    HTTP-Response: "<?xml version='1.0' encoding='ISO-8859-1' ?>"
    Date: none
    Server: none
    Last-Modified: none
    Accept-Ranges: none
    Content-Encoding: none
    Content-Type: none
    Content-Length: none
    Location: none
    Expires: none
    Referer: none
    Connection: none
    Set-Cookie: none
]
When you place the url in a browser it works as expected. 
Any ideas on how to get this to work?
GrahamC
12-Mar-2011
[1050x2]
maybe there's a redirect or something else going on
What does a simple 'read do ?
james_nak
12-Mar-2011
[1052]
Graham,  I get an error 

Error.  Target url: http://192.168.1.62/user/StorageMediaFiles.cgi
could not be retrieved.  Server response: HTTP/1.1 40.... 
If you know a way to get the full error code, that might help.
Sunanda
12-Mar-2011
[1053]
One idea....Try setting the user-agent to the same as your browser's
   system/schemes/http/user-agent