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

World: r3wp

[!REBOL3 Schemes] Implementors guide

Graham
20-Jan-2010
[1740x2]
I've got this in my network code ..

			;find/part msg join generator " OK" 8
			join generator " OK" = copy/part msg 8


and can't figure out why the first line does not work but the second 
does ....
Somewhere I came across a document that showed how 'open, 'read etc 
would search the schemes to invoke the correct actor.  Anyone know 
the link?
Steeve
21-Jan-2010
[1742x2]
weird, I thought exactly the opposite. Why the second case is working 
?
Should be:
(join generator " OK") = copy/part msg 8
For the firt case, i'd rather prefer.
>> find/match msg join generator " OK"
Graham
21-Jan-2010
[1744x3]
hmm.. I didn't need the ( )
I use find/part because I want to match at the start of the line
of the series
Steeve
21-Jan-2010
[1747]
Then, use find/match

But using Parse is better to my mind (less memory overhead)
>> parse msg [generator " OK" to end]
Graham
21-Jan-2010
[1748x2]
True ... but still there's a bug in find/part
Isn't there some new way to return true from parse without the "to 
end" now?
Steeve
21-Jan-2010
[1750]
(break/return true) but i don't know if it's faster
Graham
21-Jan-2010
[1751]
Yeah .. that's what I was thinking of
Steeve
21-Jan-2010
[1752x2]
but you must have a loop
>> loop 1 [parse msg [generator " OK" (break/return true)]]
Graham
21-Jan-2010
[1754]
compose [ (generator)  ...
Steeve
21-Jan-2010
[1755]
with a sub-rule...
>> match: [(break/return true)]
>> loop 1 [parse msg [generator " OK" match]]
Graham
21-Jan-2010
[1756]
why the parens in your sub rule?
Steeve
21-Jan-2010
[1757]
because break is not a part of the parse dialect.
It's a regular function
Graham
21-Jan-2010
[1758x2]
ahh... not thinking
just looking ... break does appear in the new parse dialect
Steeve
21-Jan-2010
[1760]
but not break/return
BrianH
21-Jan-2010
[1761]
And in the R2 parse dialect, but the meaning in both cases is different 
from the function.
Graham
21-Jan-2010
[1762x2]
brianh, what's causing the find/part error?
parse documentation is very skimpy .. .need lots of new examples
BrianH
21-Jan-2010
[1764]
There are more than a few FIND bugs. Check CureCode to see if yours 
is covered already.
Maxim
21-Jan-2010
[1765]
graham, can't you just use the return keyword in R3 parse?
BrianH
21-Jan-2010
[1766]
PARSE documentation is actually pretty extensive, but not yet organized. 
There was a lot of thorough research conducted during the parse project 
and revamp. It just hasn';t been put into the docs yet.
Graham
21-Jan-2010
[1767x2]
it's not there in curecode
but it's more subtle ... as it works outside the function
Steeve
21-Jan-2010
[1769]
(reworking on ftp scheme currently )
Graham
21-Jan-2010
[1770]
going to implement ftp site to site transfer ?  :)
Steeve
21-Jan-2010
[1771]
yup, i need it for PC to AS400 file's exchanges
Graham
21-Jan-2010
[1772]
So, I have some bugs in my scheme?
Steeve
21-Jan-2010
[1773x2]
and remote commands too
well, missing lot of commands :)
Graham
21-Jan-2010
[1775x4]
oh yeah ...minimal functionality ... for someone else to finish ;)
cwd: func [ mbox [port!] dir [string!]][
	if in mbox/scheme/actor 'cwd [
		mbox/scheme/actor/cwd dir
	]
]
which is what I have in my imap scheme ... could use similar for 
ftp
actor: [
	cwd: funct [ dir [string!]][
			write mbox compose [ SELECT (dir) ]
			read mbox
		]
]
Steeve
21-Jan-2010
[1779]
i'm doing differently currently, i only use WRITE to pass block of 
commands to parse
Graham
21-Jan-2010
[1780]
so the user still has low level access to the scheme or not?
Steeve
21-Jan-2010
[1781]
don't know what u mean exactly, so i would say... maybe
Graham
21-Jan-2010
[1782]
the user can still use the port in what carl calls mixed mode ...
Steeve
21-Jan-2010
[1783]
OPEN, WRITE and CLOSE will be the only one usefull actors in my scheme
Graham
21-Jan-2010
[1784x2]
I think mine allows file upload resume by sening a APPE command with 
the rest of the file
but rather than handling it directly ... you can just write the command 
to the port
Steeve
21-Jan-2010
[1786]
a session will be something like:
>> session: open ftp://ftp.site.com
>> write session [
	USER "toto"
	PASS "****"
	PASV
	BINARY
	CD /dir-temp
	GET %thif-file
]
>> close session
Graham
21-Jan-2010
[1787]
ok, looking forward to seeing it ...
Steeve
21-Jan-2010
[1788x2]
and i will use a dialect to construct the state diagrams
for example, the state diagram used to open a ftp session looks like 
this currently.

USER
<< ( 
	(1 2) error
	(4 5) fail
	3 >> PASS << ( 
		2		success
		1		error
		(4 5)	fail
		3 >> ACCT << (
				2   	success
				(1 3) 	error
				4 5 	fail
		)
	)
)

it's a dialect