• Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

AltME groups: search

Help · search scripts · search articles · search mailing list

results summary

worldhits
r4wp64
r3wp940
total:1004

results window for this page: [start: 101 end: 200]

world-name: r3wp

Group: !AltME ... Discussion about AltME [web-public]
Anton:
2-Feb-2005
Some more ideas:

write altme://user:[pass-:-Rebol3]/!AltME/ "message"

Resolved of the first url here to the second url
by the Rebol3 world (local distribution):

altme://user:[pass-:-Rebol3]/!AltME/239
is resolved to:
altme://user:[pass-:-Rebol3]/151/239

151 is the set-file number for the !AltME group, and
239 is the message id.

read altme://user:[pass-:-Rebol3]/!AltME
;== [set-number 151 first-available-message 1 last-message 242]


So it returns some group info, not the content of all the messages 
!

To get a message:

read altme://user:[pass-:-Rebol3]/!AltME/239

;== [(date) 9 (colour) [font [fg 0.0.0 bg 240.240.240]] "We are working 
towards that."]

To find a user name by the set-number:

read altme://user:[pass-:-Rebol3]/9

;== ["Reichart" [reichart-:-safeworlds-:-com] (membership) (dates etc..)]
Ammon:
3-Mar-2005
Sent feedback on the date selector.  It doesn't like TODAY.  Switch 
the value to any other day and try to select TODAY, you'll pull an 
error 100% of the time...
Group: RAMBO ... The REBOL bug and enhancement database [web-public]
Anton:
26-Jan-2005
>> site: http://www.dom.com/
== http://www.dom.com/
>> site/1.r
** Syntax Error: Invalid decimal -- 1.r
** Near: (line 1) site/1.r
>> site/1-r
** Syntax Error: Invalid date -- 1-r
** Near: (line 1) site/1-r
>> site/1-1-1r
== http://www.dom.com/1-Jan-2001
>> site/1_r
** Syntax Error: Invalid integer -- 1_r
** Near: (line 1) site/1_r
Romano:
9-Feb-2005
rebol[
	Author: "Romano Paolo Tenca"
	Date: 10/02/2005
]
split-path-3: func [

 "Splits a file or URL pos. Returns a block containing path and target."
    target [file! url!]
	/local dir pos
][
	parse/all target [
		[#"/" | 1 2 #"." opt #"/"] end (dir: dirize target) |
		pos: any [thru #"/" [end | pos:]] (

   all [empty? dir: copy/part target at target index? pos dir: %./]
			all [find [%. %..] pos: to file! pos insert tail pos #"/"]
		)
	]
	reduce [dir pos]
]
Anton:
11-Feb-2005
I just found a strange bug:
>> read %rebol.r
== {
REBOL [
    Title: "REBOL Extended Definitions"
    Date: cvs-date "$Date: 2001/04/29 16:00:17 $"
    Rights: "Copyright (C)...
>> read %rebol.r.
== {
REBOL [
    Title: "REBOL Extended Definitions"
    Date: cvs-date "$Date: 2001/04/29 16:00:17 $"
    Rights: "Copyright (C)...
>> read %rebol.r.....
== {
REBOL [
    Title: "REBOL Extended Definitions"
    Date: cvs-date "$Date: 2001/04/29 16:00:17 $"
    Rights: "Copyright (C)...
Anton:
11-Feb-2005
I think so. Bad timezone found by QUERY (as used by INFO?). Replacement 
is to use GET-MODES file 'modification date.
Anton:
11-Feb-2005
oops, that should be GET-MODES file 'modification-date,  but Sunanda's 
answer is more relevant..
Brett:
19-May-2005
test-address-import: func [

 {Returns true if pass, false if discrepency and none if failed with 
 error.}
	limit [integer!] "Number of TO address to generate."
	/quiet "Does not display error."
	/local to-list eml sep msg obj
] [
	to-list: copy {} sep: ""
	repeat i limit [
		eml: to-email join "test-" [i "@test.com"]
		repend to-list [sep {"'} eml {'" <} eml {>}]
		if empty? sep [sep: {,^/	}]
	]

	msg: replace copy {Date: Thu, 12 Feb 2004 11:41:49 +0100
From: test <[test-:-test-:-com]>
MIME-Version: 1.0
To: TO_LIST
Subject: [REBOL] test message - edited copy of real message
Content-type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 8bit
Sender: [rebol-bounce-:-rebol-:-com]
Reply-to: [testing-:-testing-:-com]
Status:   


Test message.
} {TO_LIST} to-list

	either error? set/any 'result try [
		obj: import-email msg
		limit = length? obj/to
	][if not quiet [print mold disarm result] none][result]

]
Group: Core ... Discuss core issues [web-public]
Graham:
21-Mar-2005
>> port: open/binary %xml-object.r
>> set-modes port [creation-date: 1-Dec-2004 ]
** Access Error: Cannot open /D/rebol/rebXR/xml-object.r
** Near: set-modes port [creation-date: 1-Dec-2004]
Sunanda:
21-Mar-2005
What about 
   set-modes %xml-object.r  [creation-date: 1-Dec-2004 ]
But may not work on windows -- not all modes are supported.
Graham:
22-Mar-2005
Is it possible to set the modification date on a directory?  I keep 
getting errors whereas it works with files in win32.

>> set-modes %xml-parse.r [ modification-date: 1-Jan-2005 ]
>> set-modes %www/ [ modification-date: 1-Jan-2005 ]
** Access Error: Cannot open /D/rebol/rebXR/www/
** Near: set-modes %www/ [modification-date: 1-Jan-2005]
>> set-modes %www [ modification-date: 1-Jan-2005 ]
** Access Error: Cannot open /D/rebol/rebXR/www
** Near: set-modes %www [modification-date: 1-Jan-2005]
>>
[unknown: 5]:
23-Mar-2005
Graham I did something similiar which allows me to write the date 
to another target just as it appears in the original - kinda like 
a backup.  However, I need to modify it so that the target dates 
are stamped as they are originally.  Currently it changes the stamp.
Volker:
23-Mar-2005
http://vbnet.mvps.org/index.html?code/fileapi/folderdatetime.htm
for visual basic, googled "windows change directory date api"
Raimund:
30-Mar-2005
Hi, is it possible to restore the date of a file which was read via 
ftp?
Group: Script Library ... REBOL.org: Script library and Mailing list archive [web-public]
Sunanda:
25-Sep-2009
Something new in the Library....If you own scripts, you can add images 
to them to make it all a bit more graphic.

Only example to date here:
    http://www.rebol.org/view-script.r?script=ascii-chart.r

Notes about how to add images to yoour scripts here:
    http://www.rebol.org/boiler.r?display=script-images

Thanks to Maxim for the original change request.
Sunanda:
13-Jun-2010
Full marks for persistance!

Apologies -- the FAQ is out of date, especially Part 3 that tells 
you (wrongly!) how to contribute scripts.
I'll update it in the next couple of days.
Thanks for reporting the problem.
Group: View ... discuss view related issues [web-public]
Graham:
8-Jan-2005
>> date-data: [ 1-Jan-2005 2-Jan-2005 3-Jan-2005 1-Dec-2005 ]
== [1-Jan-2005 2-Jan-2005 3-Jan-2005 1-Dec-2005]
>> y-data: [ 1 2 3 4 ]
== [1 2 3 4]

 view quick-plot [ 800x300 x-data [(date-data)] line [(y-data)] x-axis 
 6 ]

which draws a very straight line.
Scott:
8-Jan-2005
G: I don't recall q-plot as being date-smart.  It just thinks you 
are feeding four data points.
Group: Parse ... Discussion of PARSE dialect [web-public]
Graham:
20-Mar-2005
I've got this rule to parse email headers which only works some of 
the time.

				header-rule: [
					thru "^/Date:" copy m-date to newline |
					thru "^/From:" copy m-from to newline |
					thru "^/Subject:" copy m-subject to newline |
					thru "^/To:" copy m-to to newline |
					thru "^/Return-path: "
				]
				m-subject: m-date: m-from: m-to: none

				parse header [some header-rule]
Vincent:
20-Mar-2005
you should only go 'thru the common line start. try something like:
header-rule: [
    "Date:" copy ... to newline |
    "From:" copy ... to newline |
...
]
parse header [some [thru "^/" header-rule]
Graham:
20-Mar-2005
header-rule: [
					thru "Date:" copy m-date to newline |
					thru "From:" copy m-from to newline |
					thru "Subject:" copy m-subject to newline |
					thru "To:" copy m-to to newline
				]
				m-subject: m-date: m-from: m-to: none

				parse header [header-rule some [ thru "^/" header-rule]]
Tomc:
20-Mar-2005
and if you had a header with a line that did not begin with  'Date, 
From, Subject or To  then you could prematurely break out of header-rule 
 before you got all your bits
Vincent:
20-Mar-2005
header-rule: [
    "Date:" copy m-date to newline |
    "From:" copy m-from to newline |
    "Subject:" copy m-subject to newline |
    "To:" copy m-to to newline |
    to newline
]
m-subject: m-date: m-from: m-to: none

parse header [header-rule some [ thru "^/" header-rule]]
Vincent:
20-Mar-2005
else
Date: ...
X-Something: ...   ; break the rule
To: ...
From: ...
Tomc:
20-Mar-2005
in your example  having a rule more like 
header-rule: [
    "Date:" copy date-rule  |
    "From:" copy email-rule |
    "Subject:" copy some alpha-num  |
    "To:" copy email-rule |
    to newline
]

where email-rule only matched email addresses  
 would more taint like
Group: MySQL ... [web-public]
Henrik:
23-Aug-2005
I think you can do that. cronjobs are normal scripts that are carried 
out. they reside in a table of cronjobs which basically is a shell 
script with some time and date information added
Coccinelle:
12-Jan-2006
For the lonlong conversion, the conversion model is initialized to 
none. It should be initialized to integer like this :
	conv-model: [
		decimal			[to decimal!]
		tiny			[to integer!]
		short			[to integer!]
		long			[to integer!]
		float			[to decimal!]
		double			none
		null			none
		timestamp		none
;		longlong		none		; Removed
		longlong		[to integer!]	; Added
		int24			[to integer!]
		date			[to date!]
		time			[to time!]
		datetime		[to date!]
		year			[to integer!]
		newdate			none
		enum			none
		set				none
		tiny-blob		none
		medium-blob		none
		long-blob		none
		blob			none
		var-string		none
		string			none
	]
Group: Linux ... [web-public] group for linux REBOL users
Tomc:
1-Mar-2006
The libc bits on an up-to-date "Red Hat Enterprise Linux WS (v. 3 
for x86)"  
 


-rwxr-xr-x    1 root     root      1144368 Mar 24  2004 libstdc++-2-libc6.1-1-2.9.0.so

-rw-r--r--    1 root     root       426620 Mar 24  2004 libstdc++-3-libc6.2-2-2.10.0.a

-r-xr-xr-x    1 root     root       408440 Mar 24  2004 libstdc++-3-libc6.2-2-2.10.0.so

lrwxrwxrwx    1 root     root           30 Dec 22  2004 libstdc++-libc6.1-1.so.2 
-> libstdc++-2-libc6.1-1-2.9.0.so

lrwxrwxrwx    1 root     root           30 Dec 22  2004 libstdc++-libc6.2-2.a.3 
-> libstdc++-3-libc6.2-2-2.10.0.a

lrwxrwxrwx    1 root     root           31 Dec 22  2004 libstdc++-libc6.2-2.so.3 
-> libstdc++-3-libc6.2-2-2.10.0.so

lrwxrwxrwx    1 root     root           20 Dec 22  2004 libstdc++.so.2.7.2 
-> libstdc++.so.2.7.2.8

-rwxr-xr-x    1 root     root      1025339 Mar 24  2004 libstdc++.so.2.7.2.8

lrwxrwxrwx    1 root     root           18 Dec 22  2004 libstdc++.so.2.8 
-> libstdc++.so.2.8.0

-rwxr-xr-x    1 root     root       375773 Mar 24  2004 libstdc++.so.2.8.0

lrwxrwxrwx    1 root     root           22 Dec 22  2004 libstdc++.so.2.9 
-> libstdc++.so.2.9.dummy

-rwxr-xr-x    1 root     root         5428 Mar 24  2004 libstdc++.so.2.9.dummy

lrwxrwxrwx    1 root     root           18 Sep 29 18:51 libstdc++.so.5 
-> libstdc++.so.5.0.3

-rwxr-xr-x    1 root     root       709456 Jul 19  2005 libstdc++.so.5.0.3
btiffin:
5-Apr-2007
date
Graham:
5-Apr-2007
I used date to set the time correctly .. now going to wait 20 mins 
and see what happens
Graham:
5-Apr-2007
perhaps I should run a script that fixes the date every minute!
Graham:
5-Apr-2007
forever [
	if error? set/any 'err try [
		d: read daytime://192.168.220.2
		d: load d

  call rejoin [ "date -s " {"} d/month "/" d/day "/" d/year " " d/time 
  {"} ]
	][ print mold disarm err ]
	wait 0:02:00
] 

]
btiffin:
13-Apr-2007
I'll have a blog running on peoplecards.ca...and it's blog.r based. 
 I'm just a little confused by 

blog-active: true/false  and the [edit] sequence doesn't seem quite 
right yet. 

This code snippet doesn't seem to redisplay things properly...
	if cgi/save [
		show-blog save-blog cgi/save cgi/date cgi/title cgi/text
	]
DanielSz:
13-Sep-2007
Sure, but I have lots of excuses to postpone. First, I forgot my 
password for the library script. Second, before posting to rebol.org 
I have to write proper headers in the script (such as date, version 
number, license). Third, I have no idea if there is interest at all. 
But I got your point, which is legit.
Graham:
21-Mar-2008
I want to create a backup script that calls a backup utility, but 
I want to create the target file with today's date and time.
Graham:
21-Mar-2008
sorry, I wasn't clear .. I want to name the file with today's date 
and time.
btiffin:
21-Mar-2008
$ a=`date +%D`
$ echo $a
$ mv $backupfile $a
# use date --help to see the plethora of date format specs
Anton:
27-Mar-2008
file-modes doesn't seem to have anything

>> print mold new-line/all/skip get-modes %Desktop get-modes %Desktop/ 
'file-modes on 2
[
    status-change-date: 26-Mar-2008/12:29:33+11:00
    modification-date: 26-Mar-2008/12:29:33+11:00
    access-date: 27-Mar-2008/13:29:25+11:00
    owner-name: "anton"
    group-name: "anton"
    owner-id: 1000
    group-id: 1000
    owner-read: true
    owner-write: true
    owner-execute: true
    group-read: true
    group-write: false
    group-execute: true
    world-read: true
    world-write: false
    world-execute: true
    set-user-id: false
    set-group-id: false

    full-path: %/home/anton/.wine/dosdevices/c:/windows/profiles/anton/Desktop
]
Group: !Readmail ... a Rebol mail client [web-public]
PhilB:
21-Apr-2005
Hi Fabrice .... the format of the locale.r has changed in release 
4.7.12 (for securty purposes)
It should now be of the form ...
REBOL [
    Title:   "Test Locale"
    Date:    31-Dec-2004/18:00:00
]

gm_about: "About"
gm_Accounts: "Accounts"
gm_Contacts: "Contacts"

So you just need to remove the gv_locale/ from your code
Fabrice:
20-May-2005
Received: from web26108.mail.ukl.yahoo.com ([217.12.10.232])

        by mail.prosygma-asp.com (Merak 7.5.2) with SMTP id 1TI26716
        for <[me-:-you-:-com]>; Tue, 26 Apr 2005 04:58:31 +0200

Received: (qmail 67900 invoked by uid 60001); 26 Apr 2005 02:58:30 
-0000

Message-ID: <[20050426025830-:-67898-:-qmail-:-web26108-:-mail-:-ukl-:-yahoo-:-com]>

Received: from [81.248.68.164] by web26108.mail.ukl.yahoo.com via 
HTTP; Tue, 26 Apr 2005 04:58:29 CEST
Date: Tue, 26 Apr 2005 04:58:29 +0200 (CEST)
From: Rodrigue <[you-:-me-:-com]>
Subject: Re: Erreur lors de l'enregistrement d'une news
To: Admin Rebol <[me-:-you-:-com]>
In-Reply-To: 6667
MIME-Version: 1.0

Content-Type: multipart/alternative; boundary="0-370637848-1114484309=:67141"
Content-Transfer-Encoding: 8bit
X-Antivirus: avast! (VPS 0517-0, 25/04/2005), Inbound message
X-Antivirus-Status: Clean

--0-370637848-1114484309=:67141
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

Salut Fabrice,
 
Peux tu me redire sous quel format je dois envoyer les photos

Rodrigue

Admin Rebol <[me-:-you-:-com]> wrote:
Bonjour Rodrigue,

>Salut Fabrice,

>contrairement à ce que je t'expliquais hier soir, les news ne s'enregistrent 
pas.
>voilà le message d'erreur : 

Peux-tu m'envoyer ce que tu veux mettre en ligne par @ ?

Je vérifierais directement avec tes données car il n'y a pas de problème 
de mon côté pour ajouter les news.

Merci.

-- 
Fabrice

		
---------------------------------

 Découvrez le nouveau Yahoo! Mail : 250 Mo d'espace de stockage pour 
 vos mails !
Créez votre Yahoo! Mail
--0-370637848-1114484309=:67141
Content-Type: text/html; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

<DIV>Salut Fabrice,</DIV>
<DIV>&nbsp;</DIV>

<DIV>Peux tu me redire sous quel format je dois envoyer les photos<BR></DIV>
<DIV>Rodrigue</DIV>

<DIV><BR><B><I>Admin Rebol &lt;[me-:-you-:-com]&gt;</I></B> wrote:</DIV>

<BLOCKQUOTE class=replbq style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; 
BORDER-LEFT: #1010ff 2px solid">Bonjour Rodrigue,<BR><BR>&gt;Salut 
Fabrice,<BR>&gt;contrairement à ce que je t'expliquais hier soir, 
les news ne s'enregistrent pas.<BR>&gt;voilà le message d'erreur 
: <BR><BR>Peux-tu m'envoyer ce que tu veux mettre en ligne par @ 
?<BR>Je vérifierais directement avec tes données car il n'y a pas 
de problème de mon côté pour ajouter les news.<BR><BR>Merci.<BR><BR>-- 
<BR>Fabrice<BR></BLOCKQUOTE><p>
		<hr size=1> 

Découvrez le nouveau Yahoo! Mail : <font color="red">250 Mo d'espace</font> 
de stockage pour vos mails !<br><a href="http://fr.rd.yahoo.com/mail/taglines/*http://us.rd.yahoo.com/evt=25917/*http://us.rd.yahoo.com/mail_fr/mail_campaigns/splash/taglines_250/default/*http://fr.promotions.yahoo.com/mail/creer28.html">Créez 
votre Yahoo! Mail</a>


--0-370637848-1114484309=:67141--
Group: SDK ... [web-public]
Graham:
22-Mar-2005
I found that under win32, set-modes file [ modication-date: date 
] works in the betas, but not in the latest sdk.  Can anyone else 
confirm this?
Graham:
5-Dec-2005
If you have an up-to-date SDK license, you can download the new distribution 
from: www.rebol.net/builds/sdk If you do not have an SDK or command 
license, we encourage you to buy one and help support REBOL development.
Group: !RebGUI ... A lightweight alternative to VID [web-public]
Ashley:
26-Mar-2005
Vincent: 'list behavior & features - less is more at this stage, 
once we have something to look at we can refine it.


shadwolf: 'text+ removal. While a useful widget for certain domains 
(like WYSIWYG editors / browsers) it's not a basic building block 
widget. There were also some unresolved implementation issues with 
it at this stage - I'll add it back in at a later date as an optional 
or advanced widget.


shadwolf: multi-column list. An implementation model I liked was 
that adopted by Gui4Cli ( http://users.hol.gr/~dck/g4c/) which allows 
simple "table" representations (including column type and alignment 
definitions). Can't say I've come across that many UI's that use 
anything other than text / numbers in a standard list (thumbnails 
and scrolling check-box options are usually implemented in an app 
specific manner).


Ammon: 'display/popup. If it's sufficiently different from 'display/layout 
then I'm all for it.


Ammon: Wizard style. A wizard widget, if simple enough, would be 
a good addition. Like 'group-box and 'tab-panel it is a meta-widget 
that groups / uses other widgets. I'll make this distinction clearer 
in the next version of the docs. On a side note, my install example 
has convinced me of the need for an 'indent option (and the fact 
that use of 'offset should reset the line-height calculation).


Ammon: "Unless otherwise specified, text size reverts to 200x9999 
if the string contains a newline." I probably need to rephrase this, 
but what I was trying to say was that by default 'text is 9999x20 
which let's you write a string without having to know it's width 
in advance (9999 will auto-size it), *but* if the string contains 
a newline then it is the height that is the more important variable 
so it'll use 200x9999 instead. Of course it'll only do this if you 
don't provide an explicit size yourself (the "unless otherwise specified" 
bit). Hope that makes a bit more sense.
Graham:
27-Mar-2005
What's wrong here ?

display "Configuration" [
		group-box [ 
			"Panel"
			data [

    text [ size 90 "Server (IP) " ] svr: field [ size 100x20 ]return
				text [ size 90 "Userid: " ] uid: field [ size 80x20 ] return

    text [ size 90 "Password: " ] pwd: field hide [ size 80x20 ] return

    text [ size 90 "Period (secs): " ] pd: field [ size 40x20 ] return

    text [ size 90  "Start Date: " ] dp: field [ size 80x20 ] return 
			]
		] 
	]
Ashley:
28-Apr-2005
Latest build available at: http://www.dobeash.com/files/RebGUI-021.zip

Highlights include:

	- Specification dialect is now VID compatible (and 35% slower)
	- request-color and request-date added
	- Span attribute changed from tuple to issue
	- Couple of minor fixes
	- %tour.r has an additional "Requestors" tab


I wanted to get this build out before folks went too far down the 
converting from VID to RebGUI and vice versa path. If a parse expert 
(I'm not one) could suggest performance improvements for the main 
display parse loop that would be great.
Group: !Uniserve ... Creating Uniserve processes [web-public]
Graham:
5-Mar-2005
REBOL [
	Title: "SMTP daemon"
	Author: "Graham Chiu"
	Version: 0.0.1
	Date: 5/3/2005
]

install-service [
	name: 'smtp
	port-id: 25

	multi-line-end: rejoin [crlf #"." crlf]
	stop-at: crlf
	
	server: make object! [ user-data: none ]
	
	maildir: %mail/ ; store mail here
	
	save-mail: func [ data /local mailbox ][

  if not dir? mailbox: rejoin [ maildir server/user-data/email "/" 
  ] [
			if not exists? join maildir %misc/ [
				mailbox: make-dir join maildir %misc/
			]					
		]
		if not exists? join mailbox "mail.txt" [
			write join mailbox "mail.txt" "" 
		]
		write/append join mailbox "mail.txt" join crlf to-string data	
		print dehex data
	]
	
	on-new-client: has [su] [
			su: server/user-data: context [
			state: copy "command"
			email: none
	 	]
		stop-at: crlf
		write-client join "220 mail.compkarori.co.nz SMTP" crlf
	]

	smtp-rule: [
		"HELO" thru newline
			( write-client join "250 mail.compkarori.co.nz SMTP" crlf ) |
		"EHLO" thru newline
			( write-client join "500 not implemented" crlf ) |
		"MAIL" thru newline
			( write-client join "250 OK MAIL FROM" crlf) |
		"QUIT" thru newline
			( write-client join "221 Good Bye" crlf close-client) |
		"RSET" thru newline

   ( write-client join "250 OK RESET" crlf server/user-data/state: copy 
   "command" ) |
		"NOOP" thru newline
			( write-client join "250 OK NOOP" crlf ) |
		"VRFY" thru newline

   ( write-client join "252 send some mail, i'll try my best" crlf ) 
   |
		"EXPN" thru newline
			( write-client join "500 not implemented" crlf ) |
		"RCPT" [ thru "<" | thru ": " ] copy name to "@" thru newline 

   ( server/user-data/email: form name write-client join "250 OK RCPT 
   TO" crlf ) |
		"DATA" thru newline

   ( stop-at: multi-line-end server/user-data/state: copy "body" ) 
	]
	
	on-received: func [data /local su] [
		su: server/user-data
		print join "Data: " data
		switch su/state [
			"command" [
				if not parse data smtp-rule	[ 
					write-client join "500 command not understood" crlf
				]		
			]
			"body" [
				; reject if we don't have a RCPT command first
				if none? su/email [
					write-client join "500 no email address received" crlf
					stop-at: crlf
					su/state: copy "command"
					return
				]
				
				; write the body of the message somewhere

    save-mail rejoin [ "Received: from somewhere at " to-idate now newline 
    dehex data newline newline ]
				stop-at: crlf
				write-client join "250 OK MAIL received" crlf
				su/state: "command"
				su/email: none
			]	
		]
	]
]
Graham:
5-Mar-2005
REBOL [
	Title: "SMTP daemon"
	Author: "Graham Chiu"
	Version: 0.0.2
	Date: 5/3/2005
]

install-service [
	name: 'smtp
	port-id: 25

	multi-line-end: rejoin [crlf #"." crlf]
	stop-at: crlf
	
	server: make object! [ user-data: none ]

 clear-server: server/user-data [ state: "command" email: computer: 
 none ]
	
	maildir: %mail/ ; store mail here
	domains: [ "@compkarori.co.nz" ] ; list of accepted domains
	
	save-mail: func [ data /local mailbox ][

  if not dir? mailbox: rejoin [ maildir server/user-data/email "/" 
  ] [
			if not exists? mailbox: join maildir %misc/ [
				mailbox: make-dir join maildir %misc/
			]					
		]
		if not exists? join mailbox "mail.txt" [
			write join mailbox "mail.txt" "" 
		]
		write/append join mailbox "mail.txt" join crlf to-string data	
		; print dehex data
	]
	
	on-new-client: has [su] [
			su: server/user-data: context [
			state: copy "command"
			email: computer: none
	 	]
		stop-at: crlf
		write-client join "220 mail.compkarori.co.nz SMTP" crlf
	]

	smtp-rule: [
		"HELO" copy name thru newline
			( write-client join "250 mail.compkarori.co.nz SMTP" crlf 
				if not none? name [
					trim/head/tail name
				]
				server/user-data/computer: form name
			) |
		"EHLO" thru newline
			( write-client join "500 not implemented" crlf ) |
		"MAIL" thru newline
			( write-client join "250 OK MAIL FROM" crlf) |
		"QUIT" thru newline
			( write-client join "221 Good Bye" crlf close-client) |
		"RSET" thru newline
			( write-client join "250 OK RESET" crlf clear-server ) |
		"NOOP" thru newline
			( write-client join "250 OK NOOP" crlf ) |
		"VRFY" thru newline

   ( write-client join "252 send some mail, i'll try my best" crlf ) 
   |
		"EXPN" thru newline
			( write-client join "500 not implemented" crlf ) |

  "RCPT" [ thru "<" | thru ": " ] copy name to "@" copy domain to ">" 
  thru newline 
			( 
				either find domains domain [

     server/user-data/email: form name write-client join "250 OK RCPT 
     TO" crlf 
				][

     write-client join "553 sorry, that domain is not in my list of allowed 
     rcpthosts" crlf
					server/user-data/email: none					
				]
			) |
		"DATA" thru newline

   ( 	stop-at: multi-line-end server/user-data/state: copy "body" 
				write-client join "354 start mail input" crlf
			) 
	]
	
	on-received: func [data /local su] [
		su: server/user-data
		; print join "Data: " data
		switch su/state [
			"command" [
				if not parse data smtp-rule	[ 
					write-client join "500 command not understood" crlf
				]		
			]
			"body" [
				; reject if we don't have a RCPT command first
				if none? su/email [
					write-client join "500 no email address received" crlf
					stop-at: crlf
					su/state: copy "command"
					return
				]
				
				; write the body of the message somewhere

    save-mail rejoin [ "Received: from " su/computer " ( " su/computer 
    " [ " client/remote-ip " ]) " to-idate now newline dehex data newline 
    newline ]
				stop-at: crlf
				write-client join "250 OK MAIL received" crlf
				su/state: "command"
				su/email: none
			]	
		]
	]
]
Anton:
18-Mar-2005
Reporting-MTA: dns; sv7.prth.eftel.com
X-Postfix-Queue-ID: E836A143ADA
X-Postfix-Sender: rfc822; <anton's email address>
Arrival-Date: Thu, 17 Mar 2005 21:00:45 +0800 (WST)

Final-Recipient: rfc822; [gchiu-:-compkarori-:-com]
Action: failed
Status: 5.0.0

Diagnostic-Code: X-Postfix; host pop.compkarori.com[203.79.110.37] 
said: 552
    write failure (in reply to end of DATA command)
Philippe:
13-May-2006
Have you planned a target date for a beta of Cheyenne ?
Group: XML ... xml related conversations [web-public]
Christophe:
7-Nov-2005
More recent and up-to-date (and used by the french community) is 
RUn : http://rebol-unit.sourceforge.net/
CharlesW:
1-Aug-2009
Here is the snipped of XMl:   <?xml version="1.0"?>

<xts:sports-content-set xmlns:xts="http://www.xmlteam.com"query-date-time="20090724T011802-0400" 
query-string="http://fod.xmlteam.com/api-trial/getDocuments?doc-ids=xt.9140271-box"
hostname="fod.xmlteam.com" result-count="1" error-count="0" elapsed-time="64.2ms"><sports-content 
xmlns:str="java.lang.String" xmlns:dt="http://xsltsl.org/date-time"
xmlns:xts="http://www.xmlteam.com"xmlns:exsl="http://exslt.org/common"
path-id="baseball/l.mlb.com/event-summary/xt.9140271-box" xts:systemid="MLB_Boxscore_XML" 
xts:tsnid="9140271">

  <sports-metadata xmlns:fs="java.io.File" date-time="20090323T193000-0400" 
  doc-id="xt.9140271-box" xts:tsnslug="AAX%BOX-LOS-ANA" language="en-US" 
  revision-id="l.mlb.com-2009-e.26882-event-stats-sportsnetwork.com" 
  fixture-key="event-stats" document-class="event-summary" fixture-name="Box 
  Score">

    <sports-title>Boxscore: LA Angels vs. Los Angeles</sports-title>
    <sports-content-codes>

      <sports-content-code code-name="The Sports Network" code-key="sportsnetwork.com" 
      code-type="publisher"/>

      <sports-content-code code-name="XML Team Solutions, Inc." code-key="xmlteam.com" 
      code-type="distributor"/>

      <sports-content-code code-type="sport" code-key="15007000" code-name="Baseball"/>

      <sports-content-code code-type="league" code-key="l.mlb.com" code-name="Major 
      League Baseball"/>

      <sports-content-code code-type="season-type" code-key="pre-season"/>
      <sports-content-code code-type="season" code-key="2009"/>

      <sports-content-code code-type="priority" code-key="normal"/>

      <sports-content-code code-type="conference" code-key="c.national" 
      code-name="National"/>

      <sports-content-code code-type="conference" code-key="c.american" 
      code-name="American"/>

      <sports-content-code code-type="team" code-key="l.mlb.com-t.11" code-name="Los 
      Angeles Angels"/>

      <sports-content-code code-type="team" code-key="l.mlb.com-t.28" code-name="Los 
      Angeles Dodgers"/>

      <sports-content-code code-type="action-listing" code-key="complete"/>
    </sports-content-codes>
  </sports-metadata>
  <sports-event xmlns:fs="java.io.File">

    <event-metadata xmlns:xte="www.xmlteam.com/xte" date-coverage-type="event" 
    event-key="l.mlb.com-2009-e.26882" date-coverage-value="l.mlb.com-2009-e.26882" 
    event-status="post-event" duration="2:58" start-date-time="20090323T160500-0400" 
    xts:game-of-day="1">
      <sports-content-codes/>
      <event-metadata-baseball/>
      <site>
        <site-metadata>
          <home-location/>
        </site-metadata>
        <site-stats attendance="8704"/>
      </site>
    </event-metadata>
    <team>
      <team-metadata team-key="l.mlb.com-t.28" alignment="away">
        <name first="Los Angeles" last="Dodgers"/>
      </team-metadata>

      <team-stats score="4" score-opposing="10" event-outcome="loss">
        <sub-score period-value="1" score="1"/>
        <sub-score period-value="2" score="0"/>
        <sub-score period-value="3" score="0"/>
        <sub-score period-value="4" score="3"/>
        <sub-score period-value="5" score="0"/>
        <sub-score period-value="6" score="0"/>
        <sub-score period-value="7" score="0"/>
        <sub-score period-value="8" score="0"/>
        <sub-score period-value="9" score="0"/>
        <team-stats-baseball>

          <stats-baseball-offensive runs-scored="4" at-bats="36" hits="9" rbi="4" 
          bases-on-balls="2" strikeouts="4" doubles="0" triples="0" home-runs="0" 
          grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="1" 
          stolen-bases="1" stolen-bases-caught="1" hit-by-pitch="0" left-on-base="7"/>

          <stats-baseball-defensive errors="0" errors-passed-ball="0"/>

          <stats-baseball-pitching runs-allowed="10" hits="13" earned-runs="10" 
          bases-on-balls="6" strikeouts="8" era="10.000" balks="0" errors-wild-pitch="0" 
          number-of-pitches="0" number-of-strikes="0" shutouts="0" games-complete="0" 
          wins="0" losses="1"/>
        </team-stats-baseball>
      </team-stats>
      <player id="b.11965">

        <player-metadata position-event="8" player-key="l.mlb.com-p.11965" 
        status="starter">
          <name first="Matt" last="Kemp"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="4" hits="1" rbi="2" 
            bases-on-balls="0" strikeouts="0" singles="1" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="1" hit-by-pitch="0" average=".271"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
CharlesW:
1-Aug-2009
I<?xml version="1.0"?>

<xts:sports-content-set xmlns:xts="http://www.xmlteam.com"query-date-time="20090724T011802-0400" 
query-string="http://fod.xmlteam.com/api-trial/getDocuments?doc-ids=xt.9140271-box"
hostname="fod.xmlteam.com" result-count="1" error-count="0" elapsed-time="64.2ms"><sports-content 
xmlns:str="java.lang.String" xmlns:dt="http://xsltsl.org/date-time"
xmlns:xts="http://www.xmlteam.com"xmlns:exsl="http://exslt.org/common"
path-id="baseball/l.mlb.com/event-summary/xt.9140271-box" xts:systemid="MLB_Boxscore_XML" 
xts:tsnid="9140271">

  <sports-metadata xmlns:fs="java.io.File" date-time="20090323T193000-0400" 
  doc-id="xt.9140271-box" xts:tsnslug="AAX%BOX-LOS-ANA" language="en-US" 
  revision-id="l.mlb.com-2009-e.26882-event-stats-sportsnetwork.com" 
  fixture-key="event-stats" document-class="event-summary" fixture-name="Box 
  Score">

    <sports-title>Boxscore: LA Angels vs. Los Angeles</sports-title>
    <sports-content-codes>

      <sports-content-code code-name="The Sports Network" code-key="sportsnetwork.com" 
      code-type="publisher"/>

      <sports-content-code code-name="XML Team Solutions, Inc." code-key="xmlteam.com" 
      code-type="distributor"/>

      <sports-content-code code-type="sport" code-key="15007000" code-name="Baseball"/>

      <sports-content-code code-type="league" code-key="l.mlb.com" code-name="Major 
      League Baseball"/>

      <sports-content-code code-type="season-type" code-key="pre-season"/>
      <sports-content-code code-type="season" code-key="2009"/>

      <sports-content-code code-type="priority" code-key="normal"/>

      <sports-content-code code-type="conference" code-key="c.national" 
      code-name="National"/>

      <sports-content-code code-type="conference" code-key="c.american" 
      code-name="American"/>

      <sports-content-code code-type="team" code-key="l.mlb.com-t.11" code-name="Los 
      Angeles Angels"/>

      <sports-content-code code-type="team" code-key="l.mlb.com-t.28" code-name="Los 
      Angeles Dodgers"/>

      <sports-content-code code-type="action-listing" code-key="complete"/>
    </sports-content-codes>
  </sports-metadata>
  <sports-event xmlns:fs="java.io.File">

    <event-metadata xmlns:xte="www.xmlteam.com/xte" date-coverage-type="event" 
    event-key="l.mlb.com-2009-e.26882" date-coverage-value="l.mlb.com-2009-e.26882" 
    event-status="post-event" duration="2:58" start-date-time="20090323T160500-0400" 
    xts:game-of-day="1">
      <sports-content-codes/>
      <event-metadata-baseball/>
      <site>
        <site-metadata>
          <home-location/>
        </site-metadata>
        <site-stats attendance="8704"/>
      </site>
    </event-metadata>
    <team>
      <team-metadata team-key="l.mlb.com-t.28" alignment="away">
        <name first="Los Angeles" last="Dodgers"/>
      </team-metadata>

      <team-stats score="4" score-opposing="10" event-outcome="loss">
        <sub-score period-value="1" score="1"/>
        <sub-score period-value="2" score="0"/>
        <sub-score period-value="3" score="0"/>
        <sub-score period-value="4" score="3"/>
        <sub-score period-value="5" score="0"/>
        <sub-score period-value="6" score="0"/>
        <sub-score period-value="7" score="0"/>
        <sub-score period-value="8" score="0"/>
        <sub-score period-value="9" score="0"/>
        <team-stats-baseball>

          <stats-baseball-offensive runs-scored="4" at-bats="36" hits="9" rbi="4" 
          bases-on-balls="2" strikeouts="4" doubles="0" triples="0" home-runs="0" 
          grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="1" 
          stolen-bases="1" stolen-bases-caught="1" hit-by-pitch="0" left-on-base="7"/>

          <stats-baseball-defensive errors="0" errors-passed-ball="0"/>

          <stats-baseball-pitching runs-allowed="10" hits="13" earned-runs="10" 
          bases-on-balls="6" strikeouts="8" era="10.000" balks="0" errors-wild-pitch="0" 
          number-of-pitches="0" number-of-strikes="0" shutouts="0" games-complete="0" 
          wins="0" losses="1"/>
        </team-stats-baseball>
      </team-stats>
      <player id="b.11965">

        <player-metadata position-event="8" player-key="l.mlb.com-p.11965" 
        status="starter">
          <name first="Matt" last="Kemp"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="4" hits="1" rbi="2" 
            bases-on-balls="0" strikeouts="0" singles="1" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="1" hit-by-pitch="0" average=".271"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.7103">

        <player-metadata position-event="8" player-key="l.mlb.com-p.7103" 
        status="bench">
          <name first="Jason" last="Repko"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="1" hits="0" rbi="0" 
            bases-on-balls="0" strikeouts="0" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".219"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.9917">

        <player-metadata position-event="9" player-key="l.mlb.com-p.9917" 
        status="starter">
          <name first="Andre" last="Ethier"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="1" at-bats="3" hits="2" rbi="0" 
            bases-on-balls="1" strikeouts="0" singles="2" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".204"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.6892">

        <player-metadata position-event="pr,7" player-key="l.mlb.com-p.6892" 
        status="bench">
          <name first="John-Ford" last="Griffin"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="1" hits="0" rbi="0" 
            bases-on-balls="0" strikeouts="1" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".000"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.3810">

        <player-metadata position-event="dh" player-key="l.mlb.com-p.3810" 
        status="starter">
          <name first="Manny" last="Ramirez"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="3" hits="0" rbi="0" 
            bases-on-balls="0" strikeouts="2" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="1" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".200"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.9776">

        <player-metadata position-event="ph,dh" player-key="l.mlb.com-p.9776" 
        status="bench">
          <name first="A.J." last="Ellis"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="1" hits="1" rbi="0" 
            bases-on-balls="0" strikeouts="0" singles="1" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".320"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.6773">

        <player-metadata position-event="3" player-key="l.mlb.com-p.6773" 
        status="starter">
          <name first="James" last="Loney"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="4" hits="1" rbi="0" 
            bases-on-balls="0" strikeouts="0" singles="1" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".241"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.5664">

        <player-metadata position-event="3" player-key="l.mlb.com-p.5664" 
        status="bench">
          <name first="Doug" last="Mientkiewicz"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="0" hits="0" rbi="0" 
            bases-on-balls="0" strikeouts="0" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".238"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.13237">

        <player-metadata position-event="2" player-key="l.mlb.com-p.13237" 
        status="starter">
          <name first="Russell" last="Martin"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="1" at-bats="3" hits="2" rbi="1" 
            bases-on-balls="0" strikeouts="0" singles="2" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="1" stolen-bases-caught="0" hit-by-pitch="0" average=".394"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.7897">

        <player-metadata position-event="2" player-key="l.mlb.com-p.7897" 
        status="bench">
          <name first="Danny" last="Ardoin"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="1" hits="0" rbi="0" 
            bases-on-balls="0" strikeouts="0" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".375"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.2687">

        <player-metadata position-event="5" player-key="l.mlb.com-p.2687" 
        status="starter">
          <name first="Mark" last="Loretta"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="2" hits="0" rbi="0" 
            bases-on-balls="0" strikeouts="0" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".250"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.14163">

        <player-metadata position-event="5" player-key="l.mlb.com-p.14163" 
        status="bench">
          <name first="Luis" last="Maza"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="2" hits="1" rbi="0" 
            bases-on-balls="0" strikeouts="0" singles="1" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".100"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.17507">

        <player-metadata position-event="4" player-key="l.mlb.com-p.17507" 
        status="starter">
          <name first="Blake" last="DeWitt"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="2" hits="0" rbi="0" 
            bases-on-balls="0" strikeouts="1" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".288"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.1347">

        <player-metadata position-event="4" player-key="l.mlb.com-p.1347" 
        status="bench">
          <name first="Juan" last="Castro"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="2" hits="0" rbi="0" 
            bases-on-balls="0" strikeouts="0" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".436"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.14313">

        <player-metadata position-event="7,9" player-key="l.mlb.com-p.14313" 
        status="starter">
          <name first="Xavier" last="Paul"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="1" at-bats="3" hits="0" rbi="0" 
            bases-on-balls="1" strikeouts="0" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".383"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.18742">

        <player-metadata position-event="6" player-key="l.mlb.com-p.18742" 
        status="starter">
          <name first="Chin-Lung" last="Hu"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="1" at-bats="4" hits="1" rbi="1" 
            bases-on-balls="0" strikeouts="0" singles="1" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".316"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="p.8512">

        <player-metadata position-event="1" player-key="l.mlb.com-p.8512" 
        status="starter">
          <name first="Chad" last="Billingsley"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-pitching runs-allowed="4" innings-pitched="2" hits="4" 
            earned-runs="4" bases-on-balls="3" strikeouts="2" era="6.35" balks="0" 
            shutouts="0" errors-wild-pitch="0" number-of-pitches="0" number-of-strikes="0" 
            wins="0" losses="0" saves-blown="0" saves="0" xts:wins-season="1" 
            xts:losses-season="1" xts:saves-season="0" xts:saves-blown-season="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="p.5381">

        <player-metadata position-event="1" player-key="l.mlb.com-p.5381" 
        status="bench">
          <name first="Jeff" last="Weaver"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-pitching runs-allowed="2" innings-pitched="2" hits="3" 
            earned-runs="2" bases-on-balls="0" strikeouts="2" era="7.88" balks="0" 
            shutouts="0" errors-wild-pitch="0" number-of-pitches="0" number-of-strikes="0" 
            wins="0" losses="1" saves-blown="0" saves="0" event-credit="loss" 
            xts:wins-season="0" xts:losses-season="1" xts:saves-season="0" xts:saves-blown-season="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="p.18258">

        <player-metadata position-event="1" player-key="l.mlb.com-p.18258" 
        status="bench">
          <name first="Scott" last="Elbert"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-pitching runs-allowed="0" innings-pitched="1" hits="1" 
            earned-runs="0" bases-on-balls="0" strikeouts="1" era="6.14" balks="0" 
            shutouts="0" errors-wild-pitch="0" number-of-pitches="0" number-of-strikes="0" 
            wins="0" losses="0" saves-blown="0" saves="0" xts:wins-season="1" 
            xts:losses-season="0" xts:saves-season="0" xts:saves-blown-season="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="p.7482">

        <player-metadata position-event="1" player-key="l.mlb.com-p.7482" 
        status="bench">
          <name first="Erick" last="Threets"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-pitching runs-allowed="2" innings-pitched="1" hits="1" 
            earned-runs="2" bases-on-balls="1" strikeouts="2" era="5.40" balks="0" 
            shutouts="0" errors-wild-pitch="0" number-of-pitches="0" number-of-strikes="0" 
            wins="0" losses="0" saves-blown="0" saves="0" xts:wins-season="0" 
            xts:losses-season="0" xts:saves-season="0" xts:saves-blown-season="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="p.19392">

        <player-metadata position-event="1" player-key="l.mlb.com-p.19392" 
        status="bench">
          <name first="Ramon" last="Troncoso"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-pitching runs-allowed="2" innings-pitched="1" hits="3" 
            earned-runs="2" bases-on-balls="1" strikeouts="0" era="7.88" balks="0" 
            shutouts="0" errors-wild-pitch="0" number-of-pitches="0" number-of-strikes="0" 
            wins="0" losses="0" saves-blown="0" saves="0" xts:wins-season="0" 
            xts:losses-season="1" xts:saves-season="1" xts:saves-blown-season="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="p.14165">

        <player-metadata position-event="1" player-key="l.mlb.com-p.14165" 
        status="finished">
          <name first="Brian" last="Mazone"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-pitching runs-allowed="0" innings-pitched="1" hits="1" 
            earned-runs="0" bases-on-balls="1" strikeouts="1" era="0.00" balks="0" 
            shutouts="0" errors-wild-pitch="0" number-of-pitches="0" number-of-strikes="0" 
            wins="0" losses="0" saves-blown="0" saves="0" xts:wins-season="0" 
            xts:losses-season="0" xts:saves-season="1" xts:saves-blown-season="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
    </team>
    <team>
      <team-metadata team-key="l.mlb.com-t.11" alignment="home">
        <name first="Los Angeles" last="Angels"/>
      </team-metadata>

      <team-stats score="10" score-opposing="4" event-outcome="win">
        <sub-score period-value="1" score="2"/>
        <sub-score period-value="2" score="2"/>
        <sub-score period-value="3" score="0"/>
        <sub-score period-value="4" score="2"/>
        <sub-score period-value="5" score="0"/>
        <sub-score period-value="6" score="2"/>
        <sub-score period-value="7" score="2"/>
        <sub-score period-value="8" score="0"/>
        <sub-score period-value="9"/>
        <team-stats-baseball>

          <stats-baseball-offensive runs-scored="10" at-bats="34" hits="13" 
          rbi="10" bases-on-balls="6" strikeouts="8" doubles="2" triples="1" 
          home-runs="3" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="1" 
          stolen-bases="0" stolen-bases-caught="2" hit-by-pitch="0" left-on-base="6"/>

          <stats-baseball-defensive errors="3" errors-passed-ball="0"/>

          <stats-baseball-pitching runs-allowed="4" hits="9" earned-runs="3" 
          bases-on-balls="2" strikeouts="4" era="3.000" balks="0" errors-wild-pitch="0" 
          number-of-pitches="0" number-of-strikes="0" shutouts="0" games-complete="0" 
          wins="1" losses="0"/>
        </team-stats-baseball>
      </team-stats>
      <player id="b.6445">

        <player-metadata position-event="5" player-key="l.mlb.com-p.6445" 
        status="starter">
          <name first="Chone" last="Figgins"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="2" hits="1" rbi="1" 
            bases-on-balls="1" strikeouts="0" singles="1" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="2" hit-by-pitch="0" average=".325"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.20376">

        <player-metadata position-event="ph,8" player-key="l.mlb.com-p.20376" 
        status="bench">
          <name first="Coby" last="Smith"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="2" hits="1" rbi="0" 
            bases-on-balls="0" strikeouts="1" singles="1" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".667"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.11967">

        <player-metadata position-event="4" player-key="l.mlb.com-p.11967" 
        status="starter">
          <name first="Howie" last="Kendrick"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="2" hits="0" rbi="0" 
            bases-on-balls="1" strikeouts="2" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".344"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.7011">

        <player-metadata position-event="ph,2" player-key="l.mlb.com-p.7011" 
        status="bench">
          <name first="Ryan" last="Budde"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="1" hits="0" rbi="0" 
            bases-on-balls="1" strikeouts="1" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".412"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.5533">

        <player-metadata position-event="7" player-key="l.mlb.com-p.5533" 
        status="starter">
          <name first="Bobby" last="Abreu"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="1" at-bats="2" hits="0" rbi="0" 
            bases-on-balls="1" strikeouts="2" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".263"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.11570">

        <player-metadata position-event="5" player-key="l.mlb.com-p.11570" 
        status="bench">
          <name first="Brandon" last="Wood"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="1" at-bats="2" hits="1" rbi="0" 
            bases-on-balls="0" strikeouts="0" singles="1" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="1" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".354"/>

            <stats-baseball-defensive errors="1" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.1946">

        <player-metadata position-event="9" player-key="l.mlb.com-p.1946" 
        status="starter">
          <name first="Vladimir" last="Guerrero"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="1" at-bats="3" hits="2" rbi="0" 
            bases-on-balls="0" strikeouts="0" singles="2" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".250"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.19314">

        <player-metadata position-event="9" player-key="l.mlb.com-p.19314" 
        status="bench">
          <name first="Chris" last="Pettit"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="2" hits="1" rbi="0" 
            bases-on-balls="0" strikeouts="1" singles="1" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".354"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.2062">

        <player-metadata position-event="8" player-key="l.mlb.com-p.2062" 
        status="starter">
          <name first="Torii" last="Hunter"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="3" hits="1" rbi="2" 
            bases-on-balls="0" strikeouts="0" singles="0" doubles="0" triples="1" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".182"/>

            <stats-baseball-defensive errors="1" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.15871">

        <player-metadata position-event="4" player-key="l.mlb.com-p.15871" 
        status="bench">
          <name first="Sean" last="Rodriguez"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="1" hits="0" rbi="0" 
            bases-on-balls="0" strikeouts="0" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".282"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.18447">

        <player-metadata position-event="3" player-key="l.mlb.com-p.18447" 
        status="starter">
          <name first="Kendry" last="Morales"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="3" hits="0" rbi="0" 
            bases-on-balls="0" strikeouts="0" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".367"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.7262">

        <player-metadata position-event="3" player-key="l.mlb.com-p.7262" 
        status="bench">
          <name first="Matthew" last="Brown"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="1" at-bats="1" hits="0" rbi="1" 
            bases-on-balls="0" strikeouts="0" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".550"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.6012">

        <player-metadata position-event="dh" player-key="l.mlb.com-p.6012" 
        status="starter">
          <name first="Juan" last="Rivera"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="1" at-bats="2" hits="1" rbi="0" 
            bases-on-balls="0" strikeouts="1" singles="0" doubles="1" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".211"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.5647">

        <player-metadata position-event="ph,dh" player-key="l.mlb.com-p.5647" 
        status="bench">
          <name first="Gary" last="Matthews"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="0" at-bats="1" hits="0" rbi="0" 
            bases-on-balls="1" strikeouts="0" singles="0" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".357"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.6928">

        <player-metadata position-event="2" player-key="l.mlb.com-p.6928" 
        status="starter">
          <name first="Jeff" last="Mathis"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="1" at-bats="2" hits="1" rbi="1" 
            bases-on-balls="0" strikeouts="0" singles="0" doubles="0" triples="0" 
            home-runs="1" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".343"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.6814">

        <player-metadata position-event="ph,6" player-key="l.mlb.com-p.6814" 
        status="bench">
          <name first="Maicer" last="Izturis"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="1" at-bats="1" hits="1" rbi="1" 
            bases-on-balls="1" strikeouts="0" singles="1" doubles="0" triples="0" 
            home-runs="0" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".278"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.8016">

        <player-metadata position-event="6" player-key="l.mlb.com-p.8016" 
        status="starter">
          <name first="Erick" last="Aybar"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="2" at-bats="2" hits="2" rbi="2" 
            bases-on-balls="0" strikeouts="0" singles="0" doubles="1" triples="0" 
            home-runs="1" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".310"/>

            <stats-baseball-defensive errors="1" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="b.6589">

        <player-metadata position-event="ph,7" player-key="l.mlb.com-p.6589" 
        status="bench">
          <name first="Robb" last="Quinlan"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-offensive runs-scored="1" at-bats="2" hits="1" rbi="2" 
            bases-on-balls="0" strikeouts="0" singles="0" doubles="0" triples="0" 
            home-runs="1" grand-slams="0" sac-flies="0" sacrifices="0" grounded-into-double-play="0" 
            stolen-bases="0" stolen-bases-caught="0" hit-by-pitch="0" average=".310"/>

            <stats-baseball-defensive errors="0" errors-passed-ball="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="p.7092">

        <player-metadata position-event="1" player-key="l.mlb.com-p.7092" 
        status="starter">
          <name first="Dustin" last="Moseley"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-pitching runs-allowed="4" innings-pitched="6" hits="8" 
            earned-runs="3" bases-on-balls="1" strikeouts="3" era="3.15" balks="0" 
            shutouts="0" errors-wild-pitch="0" number-of-pitches="0" number-of-strikes="0" 
            wins="1" losses="0" saves-blown="0" saves="0" event-credit="win" 
            xts:wins-season="3" xts:losses-season="0" xts:saves-season="0" xts:saves-blown-season="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="p.20390">

        <player-metadata position-event="1" player-key="l.mlb.com-p.20390" 
        status="bench">
          <name first="Trevor" last="Reckling"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-pitching runs-allowed="0" innings-pitched="2" hits="1" 
            earned-runs="0" bases-on-balls="1" strikeouts="0" era="0.00" balks="0" 
            shutouts="0" errors-wild-pitch="0" number-of-pitches="0" number-of-strikes="0" 
            wins="0" losses="0" saves-blown="0" saves="0" xts:wins-season="0" 
            xts:losses-season="0" xts:saves-season="0" xts:saves-blown-season="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
      <player id="p.20370">

        <player-metadata position-event="1" player-key="l.mlb.com-p.20370" 
        status="finished">
          <name first="Mason" last="Tobin"/>
        </player-metadata>
        <player-stats>
          <player-stats-baseball>

            <stats-baseball-pitching runs-allowed="0" innings-pitched="1" hits="0" 
            earned-runs="0" bases-on-balls="0" strikeouts="1" era="0.00" balks="0" 
            shutouts="0" errors-wild-pitch="0" number-of-pitches="0" number-of-strikes="0" 
            wins="0" losses="0" saves-blown="0" saves="0" xts:wins-season="0" 
            xts:losses-season="0" xts:saves-season="0" xts:saves-blown-season="0"/>
          </player-stats-baseball>
        </player-stats>
      </player>
    </team>
    <officials>
      <official>
        <official-metadata position="Home Plate Umpire">
          <name full="Jim Wolf"/>
        </official-metadata>
      </official>
      <official>
        <official-metadata position="First Base Umpire">
          <name full="Bob Davidson"/>
        </official-metadata>
      </official>
      <official>
        <official-metadata position="Second Base Umpire">
          <name full="Mike Winters"/>
        </official-metadata>
      </official>
      <official>
        <official-metadata position="Third Base Umpire">
          <name full="Mike Everitt"/>
        </official-metadata>
      </official>
    </officials>
    <event-actions>
      <event-actions-baseball/>
    </event-actions>
    <highlight class="double-plays">
      <p>Los Angeles 2; LA Angels 1.</p>
    </highlight>
  </sports-event>
</sports-content></xts:sports-content-set>
Group: SVG Renderer ... SVG rendering in Draw AGG [web-public]
shadwolf:
23-Jun-2005
REBOL [
	Title:		"SVG Demo"
	Owner:		"Ashley G. Trüter"
	Version:	0.0.1
	Date:		21-Jun-2005
	Purpose:	"Loads and displays a resizeable SVG file."
	History: {
		0.0.1	Initial release
	}
	Notes: {
		Tested on very simple SVG icons
		Only a few basic styles / attributes / commands supported

  Does not handle sizes in units other than pixels (e.g. pt, in, cm, 
  mm, etc)

  SVG path has an optional close command, "z" ... AGG shape equivalent 
  auto-closes

  load-svg function needs to be totally refactored / optimized ... 
  *sample only*
	}
]

;	The following commands are available for path data:
;
;		M = moveto
;		L = lineto
;		H = horizontal lineto
;		V = vertical lineto
;		C = curveto
;		S = smooth curveto
;		Q = quadratic Belzier curve
;		T = smooth quadratic Belzier curveto
;		A = elliptical Arc
;		Z = closepath

;print: none	; comment out this line to enable debug messages

load-svg: function [svg-file [file! string!] size [pair!]] [

 id defs x y to-color to-byte draw-blk append-style svg-size scale-x 
 scale-y
][
	xml: either string? svg-file [parse-xml svg-file] [

  unless %.svg = suffix? svg-file [to error! "File has an invalid suffix!"]
		parse-xml read svg-file
	]

 unless xml/3/1/1 = "svg" [to error! "Could not find SVG header!"]

 ;unless find ["id" "xmlns"] xml/3/1/2/1 [to error! "Could not find 
 ID header!"]

 ;unless xml/3/1/3/1/1 = "defs" [to error! "Could not find DEFS header!"]

	id: xml/3/1/2
	defs: xml/3/1/3


	;
	;	--- Parse SVG id
	;

	svg-size: either find ["32pt" "48pt" "72pt"] select id "width" [
		switch select id "width" [
			"72pt"	[120x120]
			"48pt"	[80x80]
			"32pt"	[60x60]
		]
	][

  as-pair to integer! any [select id "width" "100"] to integer! any 
  [select id "height" "100"]
	]

	x: to integer! any [select id "x" "0"]
	y: to integer! any [select id "y" "0"]

	scale-x: size/x / svg-size/x
	scale-y: size/y / svg-size/y

	;
	;	--- Helper functions
	;


 to-color: func [s [string!]] [	; converts a string in the form "#FFFFFF" 
 to a 4-byte tuple
		to tuple! load rejoin ["#{" next s "00}"]
	]


 to-byte: func [s [string!]] [	; converts a string with a value 0-1 
 to an inverted byte
		255 - to integer! 255 * to decimal! s
	]

	;
	;	--- Parse SVG defs
	;

	draw-blk: copy []

	append-style: function [
		command [string!] blk [block!]
	][
		x xy pen-color fill-color line-width mode size radius shape
		closed? matrix transf-command
	][
		xy: 0x0
		size: 0x0
		line-width: 1
		matrice: make block! []
		radius: none
		transf-command: none
		
		
		foreach [attr val] blk [
			switch attr [
				"transform" [print "tranform have been found" 
						;probe val halt 
						val: parse val "(),"
						transf-command: first val
						probe transf-command
						switch transf-command [
							"matrix" [ 
								foreach word val [
									if not find word "matrix"
									[ 
										insert tail matrice to-decimal word
									]
								]
							
							]
						]
				]
				"style" [
					foreach [attr val] parse val ":;" [
						switch/default attr [
						
							"font-size" [ ]
							"stroke" [
								switch/default first val [
									#"#" [pen-color: to-color val]
									#"n" [pen-color: none]
								][
									print ["Unknown stroke:" val]
								]
							]
							"stroke-width" [line-width: to decimal! val]
							"fill" [
								fill-color: switch/default first val [
									#"#" [to-color val]
									#"n" [none]
								][
									print ["Unknown fill value:" val]
									none
								]
							]
							"fill-rule" [
								mode: switch/default val [
									"evenodd"	['even-odd]
								][
									print ["Unknown fill-rule value:" val]
									none
								]
							]

       "stroke-opacity" [pen-color: any [pen-color 0.0.0.0] pen-color/4: 
       to-byte val]

       "fill-opacity" [fill-color: any [fill-color 0.0.0.0] fill-color/4: 
       to-byte val]
							"stroke-linejoin" [
								insert tail draw-blk switch/default val [
									"miter"		[compose [line-join miter]]
									"round"		[compose [line-join round]]
									"bevel"		[compose [line-join bevel]]
								][
									print ["Unknown stroke-linejoin value:" val]
									none
								]
							]
							"stroke-linecap" [
								insert tail draw-blk 'line-cap
								insert tail draw-blk to word! val
							]
						][
							print ["Unknown style:" attr]
						]
					]
				]
				"x"			[xy/x: scale-x * val]
				"y"			[xy/y: scale-y * val]
				"width"		[size/x: scale-x * val]
				"height"	[size/y: scale-y * val]
				"rx"		[print "rx"]
				"ry"		[radius: to decimal! val]
				"d"	[
					shape: copy []
					x: none
					closed?: false
					foreach token load val [
						switch/default token [
							M	[insert tail shape 'move]
							C	[insert tail shape 'curve]
							L	[insert tail shape 'line]
							z	[closed?: true]
						][

       unless number? token [print ["Unknown path command:" token]]

       either x [insert tail shape as-pair x scale-y * token x: none] [x: 
       scale-x * token]
						]
					]
				]
			]
		]
		insert tail draw-blk compose [
			pen (pen-color)
			fill-pen (fill-color)
			fill-rule (mode)
			line-width (line-width * min scale-x scale-y)
		]
		switch command [
			"rect" [
				insert tail draw-blk compose [box (xy) (xy + size)]
				if radius [insert tail draw-blk radius]
			]
			"path" [
				unless closed? [print "Path closed"]
				either transf-command <> none  [
					switch transf-command [

      "matrix" [insert tail draw-blk compose/only [ (to-word transf-command) 
      (matrice) shape (shape) reset-matrix]]
					]
				][
					insert tail draw-blk compose/only [shape (shape)]
			 	]
				]

   "g" [ print "Write here how to handle G insertion to Draw block" 

    insert tail draw-blk probe compose/only [reset-matrix (to-word transf-command) 
    (matrice)]
				
				]
			]
	]	
  
	probe defs
	foreach blk defs [
		switch first blk [
			"rect"	[append-style first blk second blk]
			"path"	[append-style first blk second blk]
			"g"		[
						print "key word" probe first blk  
						print "matrix and style in G" probe second blk  
						append-style first blk second blk 
						;print "what to draw in G" probe third blk
						foreach blk2 third blk [
							probe blk2
							switch first blk2[ 
								"path" [append-style first blk2 second blk2]
							]
						]
					]
		]
	]
	
	
probe draw-blk
	draw-blk
]

view make face [
	offset:	100x100
	size:	200x200
	action:	request-file/filter/only "*.svg"
	text:	rejoin ["SVG Demo [" last split-path action "]"]
	data:	read action
	color:	white
	effect:	compose/only [draw (load-svg data size)]
	edge: font: para: none
	feel: make feel [
		detect: func [face event] [
			if event/type = 'resize [
				insert clear face/effect/draw load-svg face/data face/size
				show face
			]
			if event/type = 'close [quit]
		]
	]
	options: [resize]
]
shadwolf:
23-Jun-2005
REBOL [
	Title:		"SVG Demo"
	Owner:		"Ashley G. Trüter"
	Version:	0.0.1
	Date:		21-Jun-2005
	Purpose:	"Loads and displays a resizeable SVG file."
	History: {
		0.0.1	Initial release
	}
	Notes: {
		Tested on very simple SVG icons
		Only a few basic styles / attributes / commands supported

  Does not handle sizes in units other than pixels (e.g. pt, in, cm, 
  mm, etc)

  SVG path has an optional close command, "z" ... AGG shape equivalent 
  auto-closes

  load-svg function needs to be totally refactored / optimized ... 
  *sample only*
	}
]

;	The following commands are available for path data:
;
;		M = moveto
;		L = lineto
;		H = horizontal lineto
;		V = vertical lineto
;		C = curveto
;		S = smooth curveto
;		Q = quadratic Belzier curve
;		T = smooth quadratic Belzier curveto
;		A = elliptical Arc
;		Z = closepath

;print: none	; comment out this line to enable debug messages

load-svg: function [svg-file [file! string!] size [pair!]] [

 id defs x y to-color to-byte draw-blk append-style svg-size scale-x 
 scale-y
][
	xml: either string? svg-file [parse-xml svg-file] [

  unless %.svg = suffix? svg-file [to error! "File has an invalid suffix!"]
		parse-xml read svg-file
	]

 unless xml/3/1/1 = "svg" [to error! "Could not find SVG header!"]

 ;unless find ["id" "xmlns"] xml/3/1/2/1 [to error! "Could not find 
 ID header!"]

 ;unless xml/3/1/3/1/1 = "defs" [to error! "Could not find DEFS header!"]

	id: xml/3/1/2
	defs: xml/3/1/3


	;
	;	--- Parse SVG id
	;

	svg-size: either find ["32pt" "48pt" "72pt"] select id "width" [
		switch select id "width" [
			"72pt"	[120x120]
			"48pt"	[80x80]
			"32pt"	[60x60]
		]
	][

  as-pair to integer! any [select id "width" "100"] to integer! any 
  [select id "height" "100"]
	]

	x: to integer! any [select id "x" "0"]
	y: to integer! any [select id "y" "0"]

	scale-x: size/x / svg-size/x
	scale-y: size/y / svg-size/y

	;
	;	--- Helper functions
	;


 to-color: func [s [string!]] [	; converts a string in the form "#FFFFFF" 
 to a 4-byte tuple
		to tuple! load rejoin ["#{" next s "00}"]
	]


 to-byte: func [s [string!]] [	; converts a string with a value 0-1 
 to an inverted byte
		255 - to integer! 255 * to decimal! s
	]

	;
	;	--- Parse SVG defs
	;

	draw-blk: copy []

	append-style: function [
		command [string!] blk [block!]
	][
		x xy pen-color fill-color line-width mode size radius shape
		closed? matrix transf-command
	][
		xy: 0x0
		size: 0x0
		line-width: 1
		matrice: make block! []
		radius: none
		transf-command: none
		
		
		foreach [attr val] blk [
			switch attr [
				"transform" [print "tranform have been found" 
						;probe val halt 
						val: parse val "(),"
						transf-command: first val
						probe transf-command
						switch transf-command [
							"matrix" [ 
								foreach word val [
									if not find word "matrix"
									[ 
										insert tail matrice to-decimal word
									]
								]
							
							]
						]
				]
				"style" [
					foreach [attr val] parse val ":;" [
						switch/default attr [
						
							"font-size" [ ]
							"stroke" [
								switch/default first val [
									#"#" [pen-color: to-color val]
									#"n" [pen-color: none]
								][
									print ["Unknown stroke:" val]
								]
							]
							"stroke-width" [line-width: to decimal! val]
							"fill" [
								fill-color: switch/default first val [
									#"#" [to-color val]
									#"n" [none]
								][
									print ["Unknown fill value:" val]
									none
								]
							]
							"fill-rule" [
								mode: switch/default val [
									"evenodd"	['even-odd]
								][
									print ["Unknown fill-rule value:" val]
									none
								]
							]

       "stroke-opacity" [pen-color: any [pen-color 0.0.0.0] pen-color/4: 
       to-byte val]

       "fill-opacity" [fill-color: any [fill-color 0.0.0.0] fill-color/4: 
       to-byte val]
							"stroke-linejoin" [
								insert tail draw-blk switch/default val [
									"miter"		[compose [line-join miter]]
									"round"		[compose [line-join round]]
									"bevel"		[compose [line-join bevel]]
								][
									print ["Unknown stroke-linejoin value:" val]
									none
								]
							]
							"stroke-linecap" [
								insert tail draw-blk 'line-cap
								insert tail draw-blk to word! val
							]
						][
							print ["Unknown style:" attr]
						]
					]
				]
				"x"			[xy/x: scale-x * val]
				"y"			[xy/y: scale-y * val]
				"width"		[size/x: scale-x * val]
				"height"	[size/y: scale-y * val]
				"rx"		[print "rx"]
				"ry"		[radius: to decimal! val]
				"d"	[
					shape: copy []
					x: none
					closed?: false
					foreach token load val [
						switch/default token [
							M	[insert tail shape 'move]
							C	[insert tail shape 'curve]
							S   [insert tail shape 'curv]
							L	[insert tail shape 'line]
							Q   [insert tail shape 'qcurve]
							T   [insert tail shape 'qcurv]
							z	[closed?: true]
							H   [insert tail shape 'hline]
							V   [insert tail shape 'vline]
							A   [insert tail shape 'arc]
						][

       unless number? token [print ["Unknown path command:" token]]

       either x [insert tail shape as-pair x scale-y * token x: none] [x: 
       scale-x * token]
						]
					]
				]
			]
		]
		insert tail draw-blk compose [
			pen (pen-color)
			fill-pen (fill-color)
			fill-rule (mode)
			line-width (line-width * min scale-x scale-y)
		]
		switch command [
			"rect" [
				insert tail draw-blk compose [box (xy) (xy + size)]
				if radius [insert tail draw-blk radius]
			]
			"path" [
				unless closed? [print "Path closed"]
				either transf-command <> none  [
					switch transf-command [

      "matrix" [insert tail draw-blk compose/only [ (to-word transf-command) 
      (matrice) shape (shape) reset-matrix]]
					]
				][
					insert tail draw-blk compose/only [shape (shape)]
			 	]
				]

   "g" [ print "Write here how to handle G insertion to Draw block" 

    insert tail draw-blk probe compose/only [reset-matrix (to-word transf-command) 
    (matrice)]
				
				]
			]
	]	
  
	probe defs
	foreach blk defs [
		switch first blk [
			"rect"	[append-style first blk second blk]
			"path"	[append-style first blk second blk]
			"g"		[
						print "key word" probe first blk  
						print "matrix and style in G" probe second blk  
						append-style first blk second blk 
						;print "what to draw in G" probe third blk
						foreach blk2 third blk [
							probe blk2
							switch first blk2[ 
								"path" [append-style first blk2 second blk2]
							]
						]
					]
		]
	]
	
	
probe draw-blk
	draw-blk
]

view make face [
	offset:	100x100
	size:	200x200
	action:	request-file/filter/only "*.svg"
	text:	rejoin ["SVG Demo [" last split-path action "]"]
	data:	read action
	color:	white
	effect:	compose/only [draw (load-svg data size)]
	edge: font: para: none
	feel: make feel [
		detect: func [face event] [
			if event/type = 'resize [
				insert clear face/effect/draw load-svg face/data face/size
				show face
			]
			if event/type = 'close [quit]
		]
	]
	options: [resize]
]
shadwolf:
23-Jun-2005
REBOL [
	Title:		"SVG Demo"
	Owner:		"Ashley G. Trüter"
	Version:	0.0.1
	Date:		21-Jun-2005
	Purpose:	"Loads and displays a resizeable SVG file."
	History: {
		0.0.1	Initial release
	}
	Notes: {
		Tested on very simple SVG icons
		Only a few basic styles / attributes / commands supported

  Does not handle sizes in units other than pixels (e.g. pt, in, cm, 
  mm, etc)

  SVG path has an optional close command, "z" ... AGG shape equivalent 
  auto-closes

  load-svg function needs to be totally refactored / optimized ... 
  *sample only*
	}
]

;	The following commands are available for path data:
;
;		M = moveto
;		L = lineto
;		H = horizontal lineto
;		V = vertical lineto
;		C = curveto
;		S = smooth curveto
;		Q = quadratic Belzier curve
;		T = smooth quadratic Belzier curveto
;		A = elliptical Arc
;		Z = closepath

;print: none	; comment out this line to enable debug messages

load-svg: function [svg-file [file! string!] size [pair!]] [

 id defs x y to-color to-byte draw-blk append-style svg-size scale-x 
 scale-y
][
	xml: either string? svg-file [parse-xml svg-file] [

  unless %.svg = suffix? svg-file [to error! "File has an invalid suffix!"]
		parse-xml read svg-file
	]

 unless xml/3/1/1 = "svg" [to error! "Could not find SVG header!"]

 ;unless find ["id" "xmlns"] xml/3/1/2/1 [to error! "Could not find 
 ID header!"]

 ;unless xml/3/1/3/1/1 = "defs" [to error! "Could not find DEFS header!"]

	id: xml/3/1/2
	defs: xml/3/1/3


	;
	;	--- Parse SVG id
	;

	svg-size: either find ["32pt" "48pt" "72pt"] select id "width" [
		switch select id "width" [
			"72pt"	[120x120]
			"48pt"	[80x80]
			"32pt"	[60x60]
		]
	][

  as-pair to integer! any [select id "width" "100"] to integer! any 
  [select id "height" "100"]
	]

	x: to integer! any [select id "x" "0"]
	y: to integer! any [select id "y" "0"]

	scale-x: size/x / svg-size/x
	scale-y: size/y / svg-size/y

	;
	;	--- Helper functions
	;


 to-color: func [s [string!]] [	; converts a string in the form "#FFFFFF" 
 to a 4-byte tuple
		to tuple! load rejoin ["#{" next s "00}"]
	]


 to-byte: func [s [string!]] [	; converts a string with a value 0-1 
 to an inverted byte
		255 - to integer! 255 * to decimal! s
	]

	;
	;	--- Parse SVG defs
	;

	draw-blk: copy []

	append-style: function [
		command [string!] blk [block!]
	][
		x xy pen-color fill-color line-width mode size radius shape
		closed? matrix transf-command
	][
		xy: 0x0
		size: 0x0
		line-width: 1
		matrice: make block! []
		radius: none
		transf-command: none
		
		
		foreach [attr val] blk [
			switch attr [
				"transform" [print "tranform have been found" 
						;probe val halt 
						val: parse val "(),"
						transf-command: first val
						probe transf-command
						switch transf-command [
							"matrix" [ 
								foreach word val [
									if not find word "matrix"
									[ 
										insert tail matrice to-decimal word
									]
								]
							
							]
						]
				]
				"style" [
					foreach [attr val] parse val ":;" [
						switch/default attr [
						
							"font-size" [ ]
							"stroke" [
								switch/default first val [
									#"#" [pen-color: to-color val]
									#"n" [pen-color: none]
								][
									print ["Unknown stroke:" val]
								]
							]
							"stroke-width" [line-width: to decimal! val]
							"fill" [
								fill-color: switch/default first val [
									#"#" [to-color val]
									#"n" [none]
								][
									print ["Unknown fill value:" val]
									none
								]
							]
							"fill-rule" [
								mode: switch/default val [
									"evenodd"	['even-odd]
								][
									print ["Unknown fill-rule value:" val]
									none
								]
							]

       "stroke-opacity" [pen-color: any [pen-color 0.0.0.0] pen-color/4: 
       to-byte val]

       "fill-opacity" [fill-color: any [fill-color 0.0.0.0] fill-color/4: 
       to-byte val]
							"stroke-linejoin" [
								insert tail draw-blk switch/default val [
									"miter"		[compose [line-join miter]]
									"round"		[compose [line-join round]]
									"bevel"		[compose [line-join bevel]]
								][
									print ["Unknown stroke-linejoin value:" val]
									none
								]
							]
							"stroke-linecap" [
								insert tail draw-blk 'line-cap
								insert tail draw-blk to word! val
							]
						][
							print ["Unknown style:" attr]
						]
					]
				]
				"x"			[xy/x: scale-x * val]
				"y"			[xy/y: scale-y * val]
				"width"		[size/x: scale-x * val]
				"height"	[size/y: scale-y * val]
				"rx"		[print "rx"]
				"ry"		[radius: to decimal! val]
				"d"	[
					shape: copy []
					x: none
					closed?: false
					if all [x not number? token] [

          insert tail shape x * either token = 'V [scale-y][scale-x]
  						    x: none
					]
					foreach token load val [
						switch/default token [
							M	[insert tail shape 'move]
							C	[insert tail shape 'curve]
							S   [insert tail shape 'curv]
							L	[insert tail shape 'line]
							Q   [insert tail shape 'qcurve]
							T   [insert tail shape 'qcurv]
							z	[closed?: true]
							H   [insert tail shape 'hline]
							V   [insert tail shape 'vline]
							A   [insert tail shape 'arc]
						][

       unless number? token [print ["Unknown path command:" token]]

       either x [insert tail shape as-pair x scale-y * token x: none] [x: 
       scale-x * token]
						]
					]
				]
			]
		]
		insert tail draw-blk compose [
			pen (pen-color)
			fill-pen (fill-color)
			fill-rule (mode)
			line-width (line-width * min scale-x scale-y)
		]
		switch command [
			"rect" [
				insert tail draw-blk compose [box (xy) (xy + size)]
				if radius [insert tail draw-blk radius]
			]
			"path" [
				unless closed? [print "Path closed"]
				either transf-command <> none  [
					switch transf-command [

      "matrix" [insert tail draw-blk compose/only [ (to-word transf-command) 
      (matrice) shape (shape) reset-matrix]]
					]
				][
					insert tail draw-blk compose/only [shape (shape)]
			 	]
				]

   "g" [ print "Write here how to handle G insertion to Draw block" 

    insert tail draw-blk probe compose/only [reset-matrix (to-word transf-command) 
    (matrice)]
				
				]
			]
	]	
  
	probe defs
	foreach blk defs [
		switch first blk [
			"rect"	[append-style first blk second blk]
			"path"	[append-style first blk second blk]
			"g"		[
						print "key word" probe first blk  
						print "matrix and style in G" probe second blk  
						append-style first blk second blk 
						;print "what to draw in G" probe third blk
						foreach blk2 third blk [
							probe blk2
							switch first blk2[ 
								"path" [append-style first blk2 second blk2]
							]
						]
					]
		]
	]
	
	
probe draw-blk
	draw-blk
]

view make face [
	offset:	100x100
	size:	200x200
	action:	request-file/filter/only "*.svg"
	text:	rejoin ["SVG Demo [" last split-path action "]"]
	data:	read action
	color:	white
	effect:	compose/only [draw (load-svg data size)]
	edge: font: para: none
	feel: make feel [
		detect: func [face event] [
			if event/type = 'resize [
				insert clear face/effect/draw load-svg face/data face/size
				show face
			]
			if event/type = 'close [quit]
		]
	]
	options: [resize]
]
Group: rebcode ... Rebcode discussion [web-public]
Pekr:
14-Oct-2005
guys - take your time to do it right :-) We know "the date" is on 
14.November. I can't imagine what the rebcode will be like at that 
time, if we have two releases daily :-)
Group: Syncing ... Syncing technologies [web-public]
BrianH:
4-Jan-2006
By "for comparison purposes", I mean don't change the file date, 
just subtract the diff between you and UTC to get the adjusted file 
date in memory and then compare against the adjusted file date from 
the server.
Group: Tech News ... Interesting technology [web-public]
Pekr:
1-Mar-2006
Gab, btw - as we don't want rebol to suck in the future, is the Roadmap 
REBOL 3 announcement date anytime soon now? :-)
Group: !RebDB ... REBOL Pseudo-Relational Database [web-public]
Pekr:
8-Feb-2006
SELECT o.order-id, o.date, o.amount, o.total, oi.item-id, io.item-price, 
oi.goods-name, c.company-name
FROM orders o
INNER JOIN order-items oi ON oi.order-id =  o.order.id
LEFT OUTER JOIN companies c ON c.company-id = o.company-id
WHERE o.amount > 2000
ORDER BY c.company-name, o.order-id, o-item-id
Ashley:
9-Feb-2006
Back to Pekr's JOIN problem. First, let's reformat the SQL into something 
more readable:


select o.order-id, o.date, o.amount, o.total, oi.item-id, io.item-price, 
oi.goods-name, c.company-name
from   orders o
,      order-items oi
,      companies c
where  o.order.id = oi.order-id
  and  o.company-id = c.company-id
  and  o.amount > 2000
order by c.company-name, o.order-id, o-item-id
Ashley:
9-Feb-2006
Then break it down into discrete queries and wrap it in some loops:

blk: copy []

foreach [company-id order-id date amount total] sql [

 select [company-id order-id date amount total] from orders where 
 [amount > 2000]
][
	company-name: second sql compose [lookup companies (company-id)]

 foreach [item-id item-price goods-name] sql compose [select * from 
 order-items where (order-id)] [

  insert tail blk reduce [order-id date amount total item-id item-price 
  goods-name company-name]
	]
]

sort/skip/compare blk 8 [8 1 5]
Ashley:
9-Feb-2006
The final [untested] solution is about as efficient as you can get. 
Adding JOIN support to RebDB so it can break the query down into 
similar steps is not a simple task. In all but the most trivial of 
cases you'd be better off coding it yourself.


What might be a good idea is to add something that lets you more 
easily specify the most common JOIN operation - master/detail with 
optional LOV (List Of Values) lookup(s). Your query is a classic 
example of this construct and it accounts for a surprisingly large 
number of queries.


The function would accept two queries, a master query (the orders 
table in your case) and a details query (the order-items table) and 
an optional block of column/LOV-table pairs (that perform substitutions 
such as company-name). The skeleton would look like:


 sql-join [master-query [block!] detail-query [block!] /order /lov 
 [block!] ]  [
		buffer: copy []
		...
		buffer
	]

and would be used as such:

	sql-join/order/lov [

  select [company-id order-id date amount total] from orders where 
  [amount > 2000]
	] [
		select * from order-items where %ID%
	] [8 1 5] [company-id companies]

Would this make things a tad easier?
Ashley:
11-Feb-2006
Thanks guys, I've had a good look at both implementations and I've 
got ideas from both for a future full JOIN implementation; but at 
the moment my master/detail code has come along nicely. I've now 
enhanced the db-select function to accept statements in these additional 
forms:


 select * from master joins [select * from details where &id] on id

 select * from master joins [select * from details where [all [master-id 
 = &id master-date = &date]] on [id date]


which works exactly like a normal join with the following differences:

	a) It can only join one table to another

 b) Detail columns are always joined to the right of master columns

 c) Table.column prefixes are not supported so all columns in the 
 join must be uniquely named


Apart from that you get all the benefits of db-select (can replace 
* with specific column combinations, order and group by on the final 
result set, etc) *and* it's significantly faster than even the raw 
REBOL code example I gave before (as the SQL is parsed once within 
db-select and all loop sub-selects are done in-line).

I've also implemented “lookups” with the following form:

	select * from table replaces id with name
	select * from table replaces [id-1 id-2] with [table-1 table-2]


which performs a highly optimized db-lookup for each replaced value, 
but has the following restrictions:


 a) The lookup expects lookup tables in the form [id label other-column(s)]
	b) Only single-key lookups are supported
	c) A lookup that fails will replace the column value with none!


I'm now in the process of benchmarking these changes against sqlite 
to see where the bottlenecks (if any) are. Feedback on the design 
decisions is welcome.


While I was doing this, I was once again reminded how cumbersome 
it is to construct SQL statements (not just for RebDB, same goes 
for the other SQL protocols), as the heavy use of 'compose, 'rejoin, 
etc adds noise that reduces legibility. The design goal is to provide 
alternatives to:


 sql compose/deep [select * from table where [all [col1 = (val1) col2 
 = (val2)]]]


so for a start the 'sql function should probably accept a string, 
to allow:

	sql join “select * from “ table


type constructs; but this doesn't make the first example easier. 
So how about the 'sql function accept a block containing a string 
statement followed by a number of substitution variables, as in:


 sql reduce [“select * from table where [all [col1 = &1 col2 = &2]]” 
 val1 val2]


which makes things a bit more readable (and shortens the expression 
if longer word names are used multiple times). So the two questions 
here are:

	a) Is this a good idea?

 b) If so, what substitution character (& % $ @ other) will cause 
 the least conflict with REBOL and/or SQL?
Ashley:
12-Feb-2006
Perhaps another keyword, 'appends, that inserts the matching label 
after the column that would otherwise have been replaced. Or, allow 
column names to be specified multiple times in the select clause 
with replacements occurring from the tail, so:

	select [id id date] from orders replaces id with name

might return:

	1 "Bob" 3-Jan-2006
	2 "Fred" 4-Jan-2006
	etc
BrianH:
22-Jun-2006
If records aren't inserted often you can use a date/time for the 
field - otherwise use a number that you would increment. Keep in 
mind that if you do a lot of insertions and deletions, a number field 
could end up overflowing unless you occasionally compact the numbers.
Group: SQLite ... C library embeddable DB [web-public].
Ashley:
13-Feb-2006
sqlite3-protocol.r has a minor bug whereby locals/cols are not cleared. 
Fix is to add a "clear cols" at the beginning of the ' sqlite-exec 
func. Two other changes I made to this function were:


1) Changing “SQLITE_TEXT [any [attempt [load val: sqlite3/column_text 
stmt j] val]]” so as REBOL values are returned, and

2) Removing the /only clause from "system/words/insert/only tail 
result col" for those that prefer flat data structures (i.e. non-blocked 
records)

Finally, a simple wrapper makes the whole thing more usable:

context [

	db: none

	set 'open-db func [name [file!]] [
		db: open join sqlite://localhost/ name
	]

	set 'close-db does [
		close db
	]

	set 'describe func ['table [word!]] [

  insert db rejoin ["select type, name, sql from sqlite_master where 
  upper(tbl_name) = '" uppercase form table "' order by rootpage"]
		db/locals/sqlresult
	]

	set 'sql function [arg [string! block!]] [statement] [
		case [
			string? arg [insert db arg]
			string? first arg [
				statement: copy first arg
				repeat i -1 + length? arg [
					replace/all statement join ":" i pick arg i + 1
				]
				insert db statement
			]
		]
		db/locals/sqlresult
	]
]

which lets you do stuff like:

>> open-db %test.db
>> sql "create table t1 (col1 INTEGER, col2 TEXT)"
== []
>> describe t1
== [table t1 "CREATE TABLE t1 (col1 INTEGER, col2 TEXT)"]
>> sql reduce ["insert into t1 values (1,':1')" now/date]
== []
>> sql "select * from t1"
== [1 13-Feb-2006]
>> close-db
Ingo:
1-Mar-2006
While testing I started a script using sqlite several times, at about 
the 17th call I get this error:

** Script Error: Library error: Max Callbacks
** Where: context
** Near: sqlite-trace: make routine! [
    db [integer!]
    clb [callback! [int string!]]
    ptr [integer!]
] SQLite3lib

I'm using the following version:

	Title:		"SQLite driver"
	Owner:		"Ashley G. Trüter"
	Version:	0.1.3
	Date:		22-Feb-2006
Graham:
20-Mar-2006
Does sqlite support timestamp/date fields ?  Is there a way to set 
a default value for a field ( so that on a sql insert, you don't 
have to explicitly mention that column  ) ?
Ashley:
20-Mar-2006
Graham, yes to all the above except timestamp/date fields. SQLite 
only supports 5 datatypes: Integer, Decimal, Binary, Null and Text. 
The driver (unless using the /direct refinement to connect) MOLDs 
and LOADs other REBOL types such as date!, pair!, etc into SQLite 
TEXT fields so date is certainly supported at the REBOL level (although 
an "order by date" clause will not give the expected results ... 
I tend to use 'sort/skip SQL "select id,date from t" 2' type constructs 
to achieve the desired result).


Given how common this later operation is (order by date) I'm looking 
at changing the way date is bound. Instead of just MOLDing it, if 
it is transformed to YYYY-MM-DD format then not only can LOAD recognize 
it but it can be sorted (as TEXT) directly by SQLite.
Ashley:
20-Mar-2006
The change to handle date properly is pretty simple in fact (starting 
at line#375):

					unless direct [
						val: either date? val [
							p: reform [val/year val/month val/day]
							all [val/month < 10 insert skip p 5 "0"]
							all [val/day < 10 insert skip p 8 "0"]
							poke p 5 #"/"
							poke p 8 #"/"
							p
						] [mold/all val]
					]
Graham:
20-Mar-2006
also, this doesn't handle date stamps with time/seconds.
Pekr:
21-Mar-2006
In Dbase, the date was stored in db in YYYYMMDD, so I vote for the 
date storage change too ... really helps sorting ...
sqlab:
21-Mar-2006
YYYYMMDD is the short form of the iso date, 
otherwise it should be YYYY-MM-DD, if I remember.
Pekr:
21-Mar-2006
hmm, DBase tools have it like I said - YYYYMMDD, and it is question 
of date mask (which can be set upon locale, which rebol does not 
support :-), if you use dot, slash, whatever as a separator ...
sqlab:
21-Mar-2006
If it's not for human communication, the space between date und time 
is a T
so now /precise is 2006-03-21T11:06:48.232+01
Ashley:
21-Mar-2006
Pekr, "the question is, if there should be any delimiter in DB". 
There has to be, otherwise LOAD will treat "20060101" as an integer 
not a date. Remember that SQLite has no concept of "column types" 
so the MOLDed values themselves have to carry / represent the REBOL 
type when LOADed. What we are trying to do with date is to use an 
alternate representation that REBOL will still recognize as a date 
but that also happens to sort correctly; YYYY-MM-DD achieves both 
those objectives, it's just a cosmetic question as to what delimiter 
"looks" better if someone looks at the raw data (prior to being LOADed 
into REBOL values) or uses the format directly in their statements 
(e.g. "select * from t where date = '2006-01-01'").


Graham, "If they are stored as numbers, then just as easy to sort!" 
Yes, but as per above we lose the fact that they are dates. If they 
are stored as integer then we'll get them back as integers.


Graham, "what about time?" REBOL time values (in HH:MM:SS format) 
are already supported, and nothing prevents you from using now / 
now/precise except that these values will not be sorted correctly 
[with an "order by" clause that is].
Ashley:
21-Mar-2006
Mind you, I can always extend the date handling logic (as posted 
previously) to check to see whether the date has a time component; 
something like:

	if val/time [...]


Should we be checking for a zone component as well? The shortest 
possible timestamp that REBOL will recognize is:

	type? load "2006-01-01/13:30"

But that excludfes both seconds and zone.
Ashley:
22-Mar-2006
Agreed. It's just that almost every datatype apart from date (pair! 
is also problematic) happens to sort correctly under SQLite as is; 
and changing date's TEXT representation so that it sorts correctly 
within SQLite is fairly easy. I'd rather write:

	result: SQL "select id,date from t order by date"


than:

	result: sort/skip SQL "select id,date from t"  2

as it's both easier to maintain and more efficient.
Ashley:
25-Mar-2006
0.1.8 available at: http://www.dobeash.com/SQLite/sqlite.r


Two main fixes are date bind value handling and concatenated string 
handling (both of which were posted previously as code snippets).
Group: Plugin-2 ... Browser Plugins [web-public]
Louis:
12-Oct-2006
>> exists? path-thru http://localhost/slideshow/test.r
== false
>> probe info? http://localhost/slideshow/test.r
connecting to: localhost
make object! [
    size: 15
    date: none
    type: 'file
]
>>
Chris:
18-Jun-2007
I think this is for an older version of the plugin: http://www.ross-gill.com/r/tile-test/
 Need to look into bringing it up to date...
Group: !Liquid ... any questions about liquid dataflow core. [web-public]
Maxim:
16-Feb-2007
so node_c KNOWS its not up to date but computes nothing unless you 
need its value.
Group: !CureCode ... web-based bugtracking tool [web-public]
DideC:
18-Nov-2008
I have downloaded Curecode source.

The func is defined in "db-abstract.r" and has the missing refinment 
!
So what ? Is just the installed file on the site not up to date ?
Group: DevCon2008 (post-chatter) ... DevCon2008 [web-public]
Reichart:
9-Dec-2008
Hmmm, it would be interesting to have a DevCon at this time, since 
many people are at home.

May I suggest, that we do this another way, we create a list and 
let everyone post when is best, and when is worst, then we cull this 
to set a date.  this is SO easy to do in Qtask (we just create a 
form for this).  In AltME we could create a do list, and let each 
person just add their preference and follow a format.
james_nak:
10-Dec-2008
Rebcon 2008 date select checklist/voting created.
james_nak:
11-Dec-2008
Call for topics and presenters placed in the checklist.
Sent out an email on the mailist to inform and gather input:

Dear Fellow Rebolers (of the mailist faction),


There has been some interest in a virtual gathering of Rebol developers 
and users. These discussions have been taking place in the Rebol3 
Altme World. I know there are many here that do not regularly go 
there but nonetheless would be interested in participating. The date 
and time that has been looked at is December 27th from 12:00 PM. 
How does that sound to you?


There has been no decision on the technology to be used but you're 
input would be much appreciated. We are also in need of presenters 
and/or desired topics.

To summarize, we are looking for:

An agreement on the time and date
Topics desired
Presentors
Ideas for technology to be used
Other
NickA:
19-Dec-2008
Pekr,  I did post here and the mailing list.  The whole idea of the 
virtual DevCon evolved quickly and informally, so I apologise if 
it's been confusing.   Since the idea was suggested very near the 
proposed DevCon date, I tried to help organize things a bit at http://rockfactory.us/events/devcon.html
, but my efforts have been personal and not necessarily agreed upon 
by any of the community.   We probably should have appointed an official 
group of organizers and created a web site first, but in the interest 
of trying to things done, I just moved ahead and posted my suggestions 
here and on the mailing list - I hope there've been no disagreements 
or concerns about any of that.   DideC,  as it  stands, my intention 
is to make 100-150 connections available to http://rockfactory.us/rooms/room22
.  At this point, it seams reasonable to leave it open - if anyone 
thinks we should expect more than 100 people, then I'll need to know 
soon.   I'd appreciate a head count of people in the French community 
who plan to attend.  Amacleod, the broadcast system at http://rockfactory.us/rooms/room22
seems to be the best available solution.  I'm leaving that room available 
until the event, so that presenters can become familiar with it. 
 To make it easier for others to use the system, please remember 
to close the broadcast page when you're done using it, and please 
try to conserve bandwidth to only what's necessary to become familiar 
and comfortable with the system.  Please let me know if you have 
any questions!
Brock:
20-Dec-2008
I feel bad as there was a list setup asking when it should be.  However 
the only real date provided was the 27th.
Brock:
20-Dec-2008
... with an option for anyone to suggest another date.  I didn't, 
and things just started falling into place.  There will always be 
someone who isn't going to like the date and will have to miss.  
The only reason I bring it up now is that it's pretty obvious that 
this is not an IDEAL time for a larger number than any non-holiday 
weekend.
Sunanda:
20-Dec-2008
The checklist was put up, with a request for people to add their 
preferred dates.

Not many of us did, and 27-dec was the favorite from a very short 
list.

I think now it'd be Nick's decision if he wanted to throw the date 
back into the open.

Any of us could of course start the hunt for an eDevCon date in 2009.
NickA:
20-Dec-2008
With that said, if the concensus is to move the date, I'm fine with 
that too :)   If it helps to organize things, anyone can add _potential_ 
dates at http://rockfactory.us/events/devcon.html- just click the 
"add new event" link at the top of the page.
Reichart:
27-Dec-2008
May I suggest that the following be added to the home page of REBOLConf.info 
website:

- Much bigger date and time.
- Link to the video conference.
- List of known speakers.
Chris:
27-Dec-2008
I need: a countdown timer that sits in an external file, is invoked 
with startTimer('date and time string'); and changes the text content 
of <span id="counter">.  That is all.  Otherwise, no timer...
Reichart:
27-Dec-2008
Chris, may I suggest we set up the wiki website such that at the 
top is a given even (Name + Date) and that everything else be put 
on one big page.  

This has a lot of advantages.  This is not to say people can't put 
things on other pages, but if we do it this way, everything can be 
in one place.

You come to the Home page, then click on the event you are interestested 
in, and that is it.
Gabriele:
29-Dec-2008
Instead of fixed dates, we could also adapt to presenters availability. 
ie., wait until there are a certain number of presenters, and then 
fix the date.
NickA:
1-Jan-2009
Has a date/time been proposed?
Group: Printing ... [web-public]
Graham:
29-Sep-2008
pagesize A4
font Times-BoldItalic 30
linewidth 1
at 190x750 My-Name
color (black)
font Times-Roman 12
newpath at 75x725 line1
at 75x715 line2
at 75x705 line3
at 445x715 "Ph: "
at 465x715 ph
at 445x705 "Fx: " 
at 465x705 fx
at 438x680 "Date:"  font Times-Bold at 465x680 consult-date
font Times-Roman 11
newpath at 75x740 line 530x740
newpath at 75x700 line 530x700
at 75x680 Provider-Template

at 75x600 "Dear " 
at 100x600 Provider
flow-translate 0x0
flowbox 75x150 540x590 float 20
flow-translate 0x0
flowbox 75x150 540x720
gonzo 
flow consult gonzo
flow-translate 0x0
flowbox 75x150 540x720 float 10
flow-translate 0x0
flowbox 75x72 540x720 float 50
showpage
Graham:
29-Sep-2008
This is the "dialect" I am using to generate a multi-page letter. 
 Words like "consult-date" "provider" "My-name" are processed by 
a pre-processor to substitute the correct variables.
Geomol:
16-Jun-2009
When printing, the user can often choose to have extra info printed 
with: who ordered the print, date and time, etc. What's the english 
name for this part of the print? The danish word for it translate 
to "receipt", but I feel, there's another english word.
Group: reblets ... working reblets (50-100 lines or less) [web-public]
Maxim:
19-Mar-2009
rebol [
	title: "explore.r"
	version 1.0
	date: 2009-03-19
	author: "Maxim Olivier-Adlhoch"
	copyright: "2009(c)Maxim Olivier-Adlhoch"
	tested: "win xp"

 notes: "Add any dir to the dirs block.  options are self explanatory"
]

dirs: [
	%/C/ []
	%"/C/program files/" [expand]
	"%tmp%" [label "temp dir"]
	"" [ label "my documents"]
]

blk: []

explore-dir: func [path expand? /local cmd][

 call/shell rejoin [" explorer " either expand? ["/n,/e,"]["/n,"] 
 path ]
]

ctr: 1
foreach [item opts] dirs [
	ctr: ctr + 1
	expand?: found? find opts 'expand
	label: any [select opts 'label to-local-file item]
	append blk compose/deep [ 
		pad 20 
		(to-set-word setw: rejoin ["dir" ctr]) check (expand?) 
		pad 20 

  btn 200 left (label) [ explore-dir to-local-file item get in (to-word 
  setw) 'data ]
	]
	append blk 'return
]


view layout compose [across vtext right "expand?" vtext "folder" 
 return (blk)]
101 / 10041[2] 34567891011