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

AltME groups: search

Help · search scripts · search articles · search mailing list

results summary


results window for this page: [start: 1 end: 57]

world-name: r4wp

Group: #Red ... Red language group [web-public]
If I run this code

s: declare struct! [
	f [float!]
s/f: 12345678.9
p: as byte-ptr! s
v: p/value
w: 256 * as integer! p/value
x: 256 * as integer! v
print [x ".." w]

I get  this result: 52480..4194304

Why the difference? Shouldn't W and X be same as V is same as P/VALUE?
Hi Kaj on my macbook:

Last login: Fri Oct 19 07:21:16 on 

 MacBook-van-Arnold-160:~ Arnold$ 
 ; exit;
Hello, world!
, !
`O}Y, NLu
Dobr den svte

[Proces voltooid]

 /Users/Arnold/Downloads/Red\(/System\)\ Testing-dc1b702068063b65/Darwin/Red/Fibonacci 
 ; exit;

MacBook-van-Arnold-160:~ Arnold$ /Users/Arnold/Downloads/Red\(/System\)\ 
Testing-dc1b702068063b65/Darwin/Red/Fibonacci ; exit;
Fibonacci 35: 9227465

[Proces voltooid]

MacBook-van-Arnold-160:~ Arnold$ /Users/Arnold/Downloads/Red\(/System\)\ 
Testing-dc1b702068063b65/Darwin/Red/empty ; exit;

[Proces voltooid]
I took the programs from the Red tree under Darwin
Doc: you should consider a 128 GB SSD or at least a hybrid HDD+SSD 
drive from Seagate. That's why that Mac Air was running so fast, 
which you have avoided taking... I just realized 5 minutes after 
you left w Brian that you didn't take it w you... :/
Group: Ann-Reply ... Reply to Announce group [web-public]
DC Input is statet as 5V / 2A. That's 10W. The Amiga1200 used 20W, 
if I remember correctly. Not bad for these new small computers. Ras 
Pi may use half of the ODROID, so about 5W.

A cluster of computers each running at a couple Watts, that would 
be something! :)
Group: !REBOL3 ... General discussion about REBOL 3 [web-public]
Continuing from #Red group. A johnk asked for multi-line source from 
Carl. This is my W_GETS code in World, which has multi-line (blocks 
and long strings). I don't know, if you can use it, as World might 
be different internal:

char prompt_str[]	= "prin system/console/prompt";
char block_str[]	= "prin system/console/block";
char string_str[]	= "prin system/console/string";

#define W_GETS \
	if (W->line_read) { \
		free (W->line_read); \
		W->line_read = NULL; \
	} \
	if (W->top_of_series > W->series_base) { \
		W->stack = W->stack + 1; \
		int trace = W->trace; \
		W->trace = 0; \
		if (*W->top_of_series == BLOCK_BEGIN_T) { \
			tv.newline = 1; \
			do_string (W, block_str); \
			int i; \
			for (i = 0; i < W->top_of_blocks - W->blocks; i++) \
				w_printf ("    "); \
		} else { \
			do_string (W, string_str); \
			w_printf ("    "); \
		} \
		W->trace = trace; \
		W->stack = W->stack - 1; \
	} else { \
		W->top_of_code = W->code - 1; \
		W->top = -1; \
		if (NULL != W->P) \
			printf ("**** W->P != NULL ****\n"); \
		W->stack = W->stack + 1; \
		int trace = W->trace; \
		W->trace = 0; \
		do_string (W, prompt_str); \
		W->trace = trace; \
		W->stack = W->stack - 1; \
	} \
	W->line_read = w_readline (&auto_brackets, &tab_completion); \
	reset_stack (W); \
	if (W->line_read == NULL) throw_error (W, ERRMEM_S); \
	if (W->line_read[0] == KEY_CTRL_D) throw_error (W, QUIT_S); \
	W->save_line_read = W->line_read;

world-name: r3wp

Group: !AltME ... Discussion about AltME [web-public]
As a new REBOLer, I want to "gather" every bit of information I can 
get, especially from the posts, but the groups which I believe would 
be very helpful to me have more than 1000 posts. Through the web 
site, I can't read the earlier posts, and I get disconnected from 
the world everytime AltME resyncs these groups. I have noticed that 
groups with less than 500 posts do get resynced w/o being disconnected; 
although I had to "force" the resync (that's why I had to post the 
dot in several groups, as posting in the dot group doesn't sync me 
to all of the groups).
My world, linux version running on linux machine, has just become 
unreachable since noon after working for years. Nothing changed on 
that side - the altme.com web site reports it as reachable. I can 
connect to it from the linux box it's on, but not from the W XP box 
sitting alongside nor any other.
Group: RAMBO ... The REBOL bug and enhancement database [web-public]
Perhaps form is just waiting until there's a value before it adds 
>> form [{} {} {} {Hi} {} {}]
== "Hi  " ;2 spaces, and only after string w/value found
>> form [{} {} {} {Hi} {} {} {Hi} {}]
== "Hi   Hi " ;2 spaces and 1 space..

But yes, there probably ought to be a space in fron like you said 
before.  If the behavoir I think is happening, then 'trim should 
just be used, not letting it be automatic
Group: Core ... Discuss core issues [web-public]
I hope this is useful for someone


rest: func [s [series!]][skip s 1]

define-object: func [
	spec [block!] 

  arg-spec ctx-spec object-name constructor-name predicate-name attributes
		spec-rule type-spec continue? w
	arg-names: copy []

	continue?: [none] ;used to stop parsing
	name-rule: [set w word! (insert tail arg-names w)]

 type-rule: [set w word! (unless datatype? attempt [get w] [continue?: 
 [end skip]])]

 spec-rule: [name-rule some [name-rule opt [into [some [type-rule 

	if any [
		not parse spec spec-rule
		arg-names <> unique arg-names
		make error! "invalid spec"

    object-name: to-string first arg-names
	constructor-name: to-word join 'make- object-name
	predicate-name: to-word join first arg-names '?
	attributes: rest arg-names

	arg-spec: copy []
	foreach itm attributes [
		insert tail arg-spec reduce [
			to-word join itm '-value
			either block? w: select spec itm [w][[any-type!]]

	ctx-spec: copy []
	arg-names: extract arg-spec 2 1
	repeat i length? attributes [

  insert tail ctx-spec reduce [to-set-word attributes/:i to-get-word 

	;create constructor function
	set constructor-name make function! 

  compose [(reform ["Makes a new" uppercase object-name "object with 
  attributes" mold attributes]) (arg-spec)]
		compose/only [make object! (ctx-spec)] ;body

	;create predicate function
	set predicate-name make function! 

  compose [(reform ["Determines if value is a" uppercase object-name 
  "object"]) value [object!] /local types]
		compose/deep/only [
			either (attributes) = rest first value [
				foreach itm (attributes) [
					unless any [

      [any-type!] = types: select (arg-spec) to-word join itm '-value
						find types type?/word value/:itm
					][return false]
rel-obj: make object! []

add-relation: func [path-block [block!] /local p v w] [
  p: to-block 'rel-obj
  parse path-block [
    any [
      [set w word! (
        unless all [

          find either object? do to-path p [first do to-path p][[]] w
          insert tail p w
        ] [

          do load mold reduce [to set-path! p make do to-path p reduce [to-set-word 
          w none]]

I'm not sure it's enough...
Now I can ask a more precise question:

here is my problem:
I have an application object app that "serve" two client c1, c2

app: make object! [
	hset: func [c] [k: c/name]
	hget: func [c] [print ["k=" k]]

c1: make object! [
	name: "pippo"

c2: make object! [
	name: "pluto"

The handlers of app, use k as internal container, but of course it's 
shared between clients:

>> app/hset c1
== "pippo"
>> app/hset c2
== "pluto"
>> app/hget c1
k= pluto   

I would bind k (and every set-word in the handler) to the object 
passed as parameter so the last line would produce:

>> app/hget c1
k= pippo

Now I come to this solution, using blocks instead of funcs in app

app: make object! [
	hset: [k: name]
	hget: [print ["k=" k]]

c1: make object! [
	name: "pippo"
	vars: make object! [
		k: none

c2: make object! [
	name: "pluto"
	vars: make object! [
		k: none

This produce:

>>  do bind bind app/hset c1/vars c1
== "pippo"
>> do bind bind app/hset c2/vars c2
== "pluto"
>> do bind bind app/hget c1/vars c1
k= pippo

This works, but I have to collect every set-words used in the handler, 
into the clients (using Ladislav set-words http://www.fm.tul.cz/~ladislav/rebol/set-words.r

sw: copy [] repeat h next first app [sw: union sw set-words app/:h]

b: copy [] repeat w sw [insert tail b reduce [to set-word! w none]] 
vars: make object! head b
c1/vars: vars
c2/vars: vars

Now, my questions are:
1) Is this approch "rebolish" ? There's a smarter way to do it ?
2) If I need a function in my app like:

app: make object! [
	hset: [k: avg a b]
	hget: [print ["k=" k]]
	avg: func [x y] [aux: x + y aux: aux / 2]

How can I collect the aux: word in avg function, and bind this function 
to c1/vars ?
It does? That's not clear from this example:

>> f: func ['w b] [use reduce [w] reduce [to set-word! w 1 'do 'b]]
>> f i [print i]
** Script Error: i has no value
this way we can create rebol code directly from strings and native 
data very easily.

there is currently a size limit on executed strings, its a simple 
question of optimisation.  this means we can't use the wiredf function 
for creating large datasets via strings (for now).

but I'm already doing stuff like:

wiredf("rogl-event-handler make wr-event [new-size: %p]", win-w, 

calls rebol's do with %p replaced by a pair, using 2 ints.  this 
is a varargs function.
Group: Script Library ... REBOL.org: Script library and Mailing list archive [web-public]
Looks good to me, thanks.

Though one oddity -- unlikely not your problem....They don't display 
in colour:


....Must be crashing Carl's color-code.r that we use to do the coloring, 
so we fall back to b&w. I'll take a closer look in a day ot two.
Group: View ... discuss view related issues [web-public]
I wonder if that will save okay though 

>> t: as-string compress mold [ font bold32 pen yellow red line-pattern 
5 5 line-width 2 ]

== {xN+QHI16R(HSL/W(JMQK-H,)I-S0^EB@yfJIQ,^@\Z^T^T:^@^@^@}
>> t

== {xN+QHI16R(HSL/W(JMQK-H,)I-S0^EB@yfJIQ,^@\Z^T^T:^@^@^@}

>> insert db-port [{update results set draw = (?) where rid = 174} 
t ]
>> insert db-port {select draw from results where rid = 174}
>> r: pick db-port 1

== [{xN+QHI16R(HSL/W(JMQK-H,)I-S0^EB@yfJIQ,^@\Z^T^T:^@^@^@}]
>> decompress to-binary r/1
== {[font bold32 pen yellow red line-pattern 5 5 line-width 2]}
My script looks like this

view layout [
   title "Address"
   name-list: list 300x400 [
      text bold 400 [

         person-info: first sql rejoin [{select * from person where guid like 
         "%} face/user-data {%";} ]

         ;person-info: ["1" "ingo" "hohmann" "static test" "" "" ""]
         vals: get person-disp

         repeat i length? person-info [insert clear vals/:i person-info/:i]
         show w
   supply [
      count: count + cnt
      face/color: ivory
      face/text: none
      if even? count [face/color: ivory - 50.50.50]
      if none? v: pick list-data count [exit]
      face/text: reform [pick v 4 "-" pick v 2 pick v 3]
      face/user-data: pick v 1
   sld: slider 16x400 [
      c: max 0 to-integer (length? list-data) * value
      if c <> cnt [cnt: c show name-list]
   w: box 400x400 with [pane: layout address/make-person-lay]

If I click on a list entry, it's like all other entries are removed 
from the list. Wherever I click I always get the same entry, if I 
move the mouse over the list, all other lines are emptied when the 
mouse moves over them.
Using the static test-data everything warks fine
Thank for the example, Anton! Mind: Blown. I know Kung-f... I mean, 
how VID initialization works!

Here's my cleaned up (and working!) test program. It should be a 
little more generic than your example, since it will set values until 
it runs out of facets or pane items. Label styles are treated specially 
though, as you can see. Maybe now I can fix their set-face method...

    REBOL [Title: "Node Property Sheet" Author: oofoe] 
    ; Special thanks to Anton on altme/Rebol/View! 
    s: stylize [
    	title: vtext red 256
    	label: text 64
    	agg: panel with [
    		multi: make multi [
    			text: func [face blk][]
    			size: func [face blk][]
    			decimal: func [face blk][]
    		append init [
    			context [
    				p: pane  f: facets
    				while [all [not tail? p  not tail? f]] [
    					either 'label = p/1/style [
    						p/1/text: f/1
    					] [
    						set-face p/1 f/1
    					p: next p  f: next f
    	gpath: agg [

      across  label "Path:"  field 150 "Unspecified"  button "..." 30]
    	gint: agg [across  label "Integer:"  field 50 "0"]
    	gnumber: agg [across  label "Number:"  field 75 "0.0"]
    view layout [
    	styles s
    	title "Project Settings"
    	gpath "main" %. 
    	w: gint "width" 1024
    	h: gint "height" 768
    	gnumber "fps" 23.97

This is so cool! I am excited!
Group: I'm new ... Ask any question, and a helpful person will try to answer. [web-public]
Glad to see that in Rebol there are many ways to Rome.

Alphabetical sort - Is there a built-in way to obtain the right sort 
order for the french language.

a b c d e    f g ... I dont see it as a 'sort refinement, and 
'am a bit surprised.  Else why fuss with 8 bit chars?  So I suppose 
it is there, but don't see it.

In plain sort, the accented caracters are coming last! a: [   
 a c b d e g f h i k j l m n p o q r t s u v x w y z]   sort a
== [a b c d e f g h i j k l m n o p q r s t u v w x y z    ]
Hello!  Looking for some general advice.  Just completed my first 
project in REBOL as a learning experience, a simple departmental 
database using View 2.7.6 with HMK's LIST-VIEW and Dobeash's SQLite 
driver.  While I'm sure there is much I could have done better, it 
works well enough that people want to use it!  Now my boss is looking 
for another LAN-based departmental application.  Will use REBOL of 
course; probably can get by w/ SQLite again.  But my questions are 
these: (1) use View 2.7.6, the new 2.7.7, or try 3.0?  (2) stick 
w/ the standard View/VID, and LIST-VIEW, or try Dobeash's RebGUI? 
Many thanks in advance for any advice you can share!
Group: Parse ... Discussion of PARSE dialect [web-public]
I solved it in a way that I can just return out of whole function 
(with return) at that point so it's ok .. first I had it thought 
out in a way that I would need to exit the some [ ] loop but continue 
parsing .. error probably wouldn't work that way either? This is 
now my code..match: 

match func [ data rules ] [
	parse rules [ 

  [ 	set L lit-word! ( either equal? L reduce first data [ data: next 
  data ] [ return false ] ) | 
			set W word! ( set :W first data  data: next data ) 
Group: Dialects ... Questions about how to create dialects [web-public]
Originally I had "r" and "w" for "readin-mu" and "writeout-mu" but 
found that w for while was more frequent than the number of writes, 
and in fact I also found that my writeout was not as useful as print's 
default behavior, so I remapped w.  These one-character decisions 
are in flux as I look at how some of my ideas are panning out in 
real solutions.
Group: !RebGUI ... A lightweight alternative to VID [web-public]
How is the svn related to get-rebgui?

 The SVN is for developers / experienced REBOLers ... it is used to 
 manage individual widget source files. %get-rebgui.r obtains a pre-built 
 distribution (including a merged %rebgui.r, %tour.r, images and demo 
 scripts). It is targeted at 'end users' who don't want to use SVN.

%tour.r is missing

 I want to add it *without* having to also add sample icon images 
 to the SVN. I'll probably just 'inline' the images so it's all in 
 one big file.

min-size: read this very carefully: http://www.dobeash.com/RebGUI/display.html#section-2.1.2

The Note says it all: "The min-size limit will only be enforced upon 
a window resize, and the size is inclusive of an OS specific number 
of border / title pixels. Also note that if any widgets are resizeable 
(#H and #W) and min-size has not been specified then RebGUI will 
assign a default value equal to the initial window size."
Can you transform to Curl 5.0 instead ( http://www.curl.com) ?  
Or write a Curl macro to start  the task ?  I have a few curl notes 
at eclectic-pencil and eclectic-pencil.blogspot.com  ( I work in 
Curl at a s/w co.  servicing web browser needs of F500 + int'l ) 
    The macros  {example    and   {x-example-ref    are the coolest 
    Curl is kinda link Scheme+ Tcl too ... if you have looked at 
Groovy HTML-builder then Curl will look familiar.  The REGEXP is 
Perl-like    Curl is a web-content language in the functional-mold 
rather like a JavaScript with its own RTE.   There is also TiScript 
 ( www.terrainformatica.com  ) and of course XUL for Mozilla ....
OK, a couple of items of business first.

New logo - I like the new logo Reichart proposed (including the X-Internet 
text) and given I've heard nothing to the contrary I'd ask Reichart 
to prepare a few different color samples and we can vote for the 
one we like best ... and then I'll choose the one I like best anyway. 

UI Look - The RebGUI look is too Windozy and is starting to show 
its age. I've decided to try for a simpler, whiter web look with 
fewer colors (I experimented with a B&W look but that's too harsh). 
My first thoughts are, with Reichart's permission, to revisit Quilt 
and mimic its look; but if someone has a link to an extensive set 
of online widgets (with a unified look) that they feel is appropriate 
then post away.

Radio-group - And now a minor implementation question (mostly for 
Graham I suspect). After looking at http://www.useit.com/alertbox/20040927.html
I note their comments in point 9:

Always offer a default selection for radio button lists. By definition, 
radio buttons always have exactly one option selected, and you therefore 
shouldn't display them without a default selection. (Checkboxes, 
in contrast, often default to having none of the options selected.)

users might need to refrain from making a selection, you should provide 
a radio button for this choice, such as one labeled 

None." Offering users an explicit, neutral option to click is better 
than requiring the implicit act of not selecting from the list, especially 
because doing the latter violates the rule of always having exactly 
one option chosen."

Is it time to disallow null radio-group selections? (at present radio-group 
allows a 0 or none! selection)
Pekr/Graham (re group-box resize overlap convo from 13-Jan) ... it's 
a limitation not a bug. The #H and #W directives assume they are 
by themselves in a given row/column.

Instead of ... unview/only face/parent-face/parent-face ... why not 
unview/ony find-window face
 ... performance over coding efficiency.  

Ashley hasn't been on line here since xmas eve ... is he on a rather 
extended holiday

 ... the GFC has forced me to allocate considerable resources elsewhere, 
 but I'm back for the time being.

button is blue. But with over effect, going to green (default?), 
and with press, going pink

 ... the over (theme light) and press (state light) colors are global. 
 118 fixes the problem whereby these states lost your original color 

We have arrow key navigation of tables.  How can we get the enter 
key to do the action?
 ... add 'table to behaviors/action-on-enter
I just want to share my modifications of the chat widget in b177, 
I needed a slimmer chat. It should also fix the resize issue:
slim-chat: make baseface [
	options: {

   chat2 120 data ["Bob" blue "My comment." yello 14-Apr-2007/10:58]

			Three column chat display as found in IM apps such as AltME.
			Messages are appended, with those exceeding 'limit not shown.


   [limit n] where n specifies number of messages to show (default 100)
			[id n] where n specifies id column width (default 10)
			[user n] where n specifies user column width (default 15)
			[date n] where n specifies date column width (default 25)
	size: 200x100
	pane: []
	data: []
	edge: default-edge
	action: make default-action [
		on-resize: make function! [face] [

   poke face/pane/2/para/tabs 2 face/pane/1/size/x - sizes/slider - 
   (sizes/cell * any [select face/options 'date 25])

 height: 0 ; actual pixel height of all messages (-1 ensures first 
 message is offset to hide it's edge
	rows: 0 ; number of messages
	limit: none ; last n messages to display

	append-message: make function! [
		user [string!]
		user-color [tuple! word! none!]
		msg [string!]
		msg-color [tuple! word! none!]
		date [date!]
		/no-show row
		/local p y t1 t2 t3
	] [
		;	cache current tab stops
		p: self
		t1: pick pane/2/para/tabs 1

  t2: pane/1/size/x - sizes/slider - (sizes/cell * any [select p/options 
  'date 25])

		p: self
		;	get height of message
		y: max sizes/line 4 + second size-text make baseface [
			size: as-pair p/size/x - sizes/slider + 1 10000
			text: msg
			font: default-font
			para: para-wrap


		insert tail pane/1/pane reduce [
			make baseface [
				offset: as-pair -1 height - 1
				size: as-pair t2 21
				span: all [p/span find p/span #W #W]
				text: user
				edge: make default-edge [size: 0x1]

    font: make font-top [color: either word? user-color [get user-color] 
    [user-color] style: 'bold]
				color: either word? msg-color [get msg-color] [msg-color]
			make baseface [
				offset: as-pair -1 height - 1 + 20
				size: as-pair p/size/x - sizes/slider + 1 y
				text: form msg
				color: either word? msg-color [get msg-color] [msg-color]
				edge: make default-edge [size: 0x1]
				font: default-font
				para: para-wrap
			make baseface [
				offset: as-pair t2 - 1 height - 1

    size: as-pair (sizes/cell * any [select p/options 'date 25]) + sizes/slider 
    + 1 21
				span: all [p/span find p/span #W #X]

    text: form either now/date = date/date [date/time] [date/date]
				edge: make default-edge [size: 0x1]
				font: make font-top [style: 'bold align: 'right]
				color: either word? msg-color [get msg-color] [msg-color]
		height: height + y - 1 + 20
		if ((length? pane/1/pane) / 3) > limit [
			y: pane/1/pane/2/size/y + pane/1/pane/1/size/y - 2
			remove/part pane/1/pane 3
			foreach [u m d] pane/1/pane [
				u/offset/y: u/offset/y - y
				m/offset/y: m/offset/y - y
				d/offset/y: d/offset/y - y
			height: height - y
		unless no-show [
			insert tail data reduce [user user-color msg msg-color date]
			pane/1/size/y: height
			pane/3/ratio: pane/3/size/y / height
			show p

  show pane/1 ; !!! this cleans up artifacts but "eats" other widgets 
  redraw events !!!

 set-user-color: make function! [id [integer!] color [tuple! word! 
 none!] /local idx] [
		if any [zero? id id > rows] [exit]
		poke data id * 5 - 3 color
		if limit > (rows - id) [

   idx: either rows > limit [(id + limit - rows) * 3 - 2] [id * 3 - 

   pane/1/pane/:idx/font/color: either word? color [get color] [color]
			show pane/1/pane/:idx

 set-message-text: make function! [id [integer!] string [string!] 
 /local idx] [
		if any [zero? id id > rows] [exit]
		poke data id * 5 - 2 string
		if limit > (rows - id) [

   idx: either rows > limit [(id + limit - rows) * 3 - 1] [id * 3 - 
			insert clear pane/1/pane/:idx/text string

 set-message-color: make function! [id [integer!] color [tuple! word! 
 none!] /local idx] [
		if any [zero? id id > rows] [exit]
		poke data id * 5 - 1 color
		if limit > (rows - id) [

   idx: either rows > limit [(id + limit - rows) * 3 - 1] [id * 3 - 
			pane/1/pane/:idx/color: either word? color [get color] [color]
			show pane/1/pane/:idx

	redraw: make function! [/no-show /local row] [
		clear pane/1/pane
		height: 0
		rows: (length? data) / 5
		row: max 0 rows - limit: any [select options 'limit 100]

  foreach [user user-color msg msg-color date] skip data row * 5 [

   append-message/no-show user user-color msg msg-color date row: row 
   + 1
		pane/1/size/y: height
		pane/3/ratio: either zero? height [1] [pane/3/size/y / height]
		unless no-show [show self]

	init: make function! [/local p] [
		unless options [options: copy []]
		p: self
		limit: any [select options 'limit 100]
		; chat pane (1)
		insert pane make baseface [
			offset: as-pair 0 sizes/line
			size: p/size - as-pair sizes/slider sizes/line
			span: all [p/span find p/span #W #W]
			pane: []
		;	heading (2)
		insert tail pane make gradface [
			offset: -1x-1
			size: as-pair p/size/x sizes/line
			text: "Chat"
			span: all [p/span find p/span #W #W]
			font: make font-button [align: 'left]
			para: make default-para [tabs: [0 0]]
		;	set header tabs

  poke pane/2/para/tabs 1 sizes/cell * (any [select options 'user 15])

  poke pane/2/para/tabs 2 size/x - sizes/slider - (sizes/cell * any 
  [select options 'date 25])
		;	vertical scroller
		insert tail pane make slider [
			offset: as-pair p/size/x - sizes/slider sizes/line - 2
			size: as-pair sizes/slider p/size/y - sizes/line + 2
			span: case [
				none? p/span [none]
				all [find p/span #H find p/span #W] [#XH]
				find p/span #H [#H]
				find p/span #W [#X]
			action: make default-action [
				on-click: make function! [face] [
					if height > face/size/y [

      face/parent-face/pane/1/offset/y: (height - face/size/y * negate 
      face/data) + sizes/line
						show face/parent-face
		action/on-resize self
Group: DevCon2005 ... DevCon 2005 [web-public]
rebol Plugin could work for this but again there's the plaform issue, 
i thing this filed its outside rebol capabilities interaction w/hardware 
sounds a bit crazy in reb-world.
Group: Hardware ... Computer Hardware Issues [web-public]
2 Mac mini (PPC) with 23" Cinema displays plus an iBook with Parallels 
running WinXP. The whole lot is networked via AIrport Express to 
an ADSL modem and a Brother MFC-8840D. I've had no problems and zero 
downtime for over two years. I switched from Windows/Linux about 
two years ago and haven't looked back. Some of the business advantages 

	- Almost silent operation
	- Low power consumption
	- Small footprint
	- Zero admin
	- The WOW! factor when clients see your setup
	- Cheap
	- Out-of-the-box solution (no extra s/w required)

In fact, the only software I have purchased is iWorks and .Mac membership. 
The one issue I have is with Spreadsheets on the Mac minis. I don't 
want to use/pay for MS*Office and iWorks does not have a spreadsheet, 
so I'm using NeoOffice (aka OpenOffice) which is SLOWWWWW on PPC 
hardware. Works well on the (Intel) iBook though. I'll upgrade the 
Mac minis to Intel when Apple refreshes the line (probably when they 
release Leopard later this year).

Parallels is a must if, like me, you have to run or support legacy 
software running on Windows. Coherence mode puts the Windows task 
bar directly on the Mac OSX desktop and enables you to run Windows 
programs directly from it. It's hardware virtualization so it's fast, 
and removes the need for multiple machines. The ability to cut&paste 
directly from a Mac app to a Windows one is also pretty handy.

Bottom line is, if you like to play and endlessly tinker with stuff 
then WIndows/Linux is the way to go; if you want a tool that just 
works then get a Mac.
Group: Tech News ... Interesting technology [web-public]
I'm in two minds regarding gravity. All my logic and understanding 
tells me, that Einstein was right, when he said, that gravity is 
curvation of space-time. Then gravity is not a field like electro-magnetism 
(light) and the other natural forces (strong and weak kernel forces), 
and there's not a particle (which are actually waves) called a graviton, 
like we have fotons, gluons, Z0 and W+-, whose are responsible for 
transfering the forces. But I really really hope, I'm wrong, so that 
antigravity can be reality one day.

The spacecraft Gravity Probe B was finished collecting data almost 
two years ago, and results should have been published last year, 
but they wasn't! There's something wrong with the data. They might 
come to some very interesting results: http://einstein.stanford.edu/

CERN are upgrading their accelerator, and they should start some 
new experiments this year, where they hope to find the Higgs boson 
and maybe the graviton. I'll be very surprised, if they find the 
graviton. I don't know enough about the Higgs boson to have an opinion 
on that.

But it's exciting times! :-)
Group: SQLite ... C library embeddable DB [web-public].
Here's the latest version:

rebol []
do %sqlite.r
do %rebgui.r
unless value? 'ctx-rebgui [
	either exists? %rebgui-ctx.r [do %rebgui-ctx.r] [do %rebgui.r]
tab-size: 120x55
fonts: reduce [font-sans-serif font-fixed font-serif "verdana"]

if not exists? %id.txt [write %id.txt 1]
i: to-integer read %id.txt
i: i - 1
either not exists? %indodex.db [
    CONNECT/create %indodex.db

    SQL "create table base (ID, Title, Nama, Alamat, Telefon, Handfon, 
    Fax, Email, Tgl_Nikah, Nota)"

    SQL "create table birthdays (ID, Nama, Jenis, Hubungan, Tgl_Lahir, 
    Agama, Nota)"
    CONNECT %indodex.db
do show-cc: make function! [] [
display "IndoDex Ver. 1.0.1" [
            label 16 "ID:" id: text (to-string i)

            label 16 "Title:" title: drop-list 30 #W "Pak" data ["Pak" "Ibu" 
            "Sdr." "Sdri." "Drs." "Dr." "Tuan" "Nyonya"] 20x5
            label 16 "Nama:" nama: field 
            label 16 "Alamat:" alamat: area 50x30
            label 16 "Telefon:" telefon: field
            label 16 "Handfon:" handfon: field
            label 16 "Fax:" fax: fax: field
            label 16 "E-Mail:" email: field
            label 16 "Nota:" nota: area 50x30
            button "Save" [


                ;SQL reduce ["insert into base values (?, ?, ?, ?, ?, ?, ?, ?, ?, 
                ?)" id/text, title/text, nama/text, alamat/text, telefon/text, handfon/text, 
                fax/text, email/text, tgl_nikah/text, nota/text]

                ;SQL {insert into base values ('Pak' 'Ibu' 'Sdr.' 'Sdri.' 'Drs.' 
                'Dr.' 'Tuan' 'Nyonya' 'Jonew')}
                (i: to-integer i)
                (i: i + 1)
                (write %id.txt i)
                (i: to-string i)
            button "GUI Info [

                print [id/text " " title/text " " nama/text " " alamat/text newline]
            button "DB Info" [
                print TABLES
                SQLite/col-info?: true
                print SQL "select * from base"
                print SQLite/columns
            button "Halt" [
            button "Quit" [
Group: !REBOL3-OLD1 ... [web-public]
and i think parse is already a big enhancement compared to regular 
expression ( i give a try to it past week writing a software in ruby 
... that's horrible ... I mean i'm complaining about parse but regular 
expression is so much a bore and stupid to write + they don't allow 
any action they are just made for match  only way to have regular 
expresion doing something is in ruby using them with an action mathod 
of the string class..... And that the kind of stupid things most 
of  coders in the world today found fantastic ??? HOOOO  really ???)

So when we come from mystring.match( "/\d\w***.*" ) kind of things 
of course going to the match action parse way is complicated... but 
complicated maybe not the way it's supposed to be.

Parse works better on "tags" words matching more than cabalistic 
formulas like regular exapressions. This doeasnt means it can't be 
doing that too..
Pekr, seems too slow for USB flash. I think it's on floppy or R/W 
Group: Postscript ... Emitting Postscript from REBOL [web-public]
well, the bitmap it sends is over 2 MB in size. that's pretty huge 
for a pure b/w bitmap I think.
Group: !Cheyenne ... Discussions about the Cheyenne Web Server [web-public]
Henrik, if you're running cheyenne in source mode, you should use 
the -w command line option (that will allow the generation of a %crash.log 
file if the REBOL error is catched). If your Cheyenne quits, I don't 
think that's caused by a bug inside Cheyenne, but usually by something 
like an uncatched file access error (file handles starvation, file 
access rights,...). Will had some similar issues with Cheyenne on 
OS X, I guess he could help here.
Janko: "About code loading on on-page-start : yes I know of that, 
I am using it as dev setup so I know latest code is reloaded each 

There's an easier solution for that: add -w 0 argument to Cheyenne's 
command line, this will ensure that the worker process will be reloaded 
for each new request. Here's the command line I use to run Cheyenne 
on my development boxes : C:\Dev\SDK\tools\rebcmdview.exe -s cheyenne.r 
-vv -w 0
It's : - w 0, -w only won't work, it expects the number of worker 
processes as argument.

It should work ok with both source and binary version. I'll make 
a test right know with 0.9.19 binary...
Hi Oldes, good point, I was thinking about adding a worker processes 
user-controlled killing policy since years now, but it  has never 
bothered me on my production linux servers. 

Also, if you use the -w command line option, you can (in theory) 
set the threshold for workers kept alive after each request. In practice, 
a worker gets killed only if the threshold is reached and after a 
request is processed, so you might have cases, where more workers 
than should be, remains temporary after a burst of requests.

If it's really an issue for you, I can have a look at this feature 
to see if there's a simple way to implement a killing policy (would 
decrease the number of worker processes using 1 / t or e^(-t) function 
classes). See function plots at :
aahha... i was using the -w as usual, that's why i didn't see any 
output when i was starting cheyenne from source.

normally i use -w, otherwise pipeing the output doesn't work properly.
okay, everything makes more sense now.
thats what im not sure how to handle w a little code in rebol, that's 
why i was asking u; thought u need have some examples in ur toolbox
so it's worth learning.

i was a wget user earlier, but since macs come w curl and i can easily 
apt-get install curl and even syllable comes w curl, i don't give 
a fuck anymore how an inefficient bloatware is curl, im still trying 
to use it and only it :)
:) thanks. interesting.

i was doing DOS, TurboVision, then tried Win3.0. used Turbo Pascal 
in 2 dos windows under Win3.1, programmed serial equipement with 
Delphi 1.0 under Win95, but then i just fell in love w the fvwm2 
theme of icewm and the big virtual desktop which even worked on trident 
8900 isa cards, using suse linux. i was forced using windows until 
the xp version and i even saw delphi 4.0.

no windows interface can compete with icewm with autofocus and saying 
this as someone who still can handle windows without a mouse faster 
than anyone else i know.

i found vista and win7 particularly disgusting. those dim windows 
w huge decorations just make me annoyed.
im the fullscreen terminal window in black&green kinda guy :)

i want console in web browsers too. i think lisp machines were great 
examples that how the character based interface can benefit from 
graphical capabilities.

plan9's acme is also a nice example; although i never had the chance 
to use it for anything real. never really seen an expert using it 
[1]+  Stopped                 rebol -s cheyenne.r -w 1 -vv
this time i started w 2 only for some weird reason
hmm... ok, i step back and think about it. thx, for ringing the complexity 
alarm! :)

on the other hand, i just saw there is https://github.com/nodejitsu/node-http-proxy
which is a reverse proxy for nodejs.

if u remember, i was missing this functionality from cheyenne too.

i think what carl was aiming w rebol is happening w javascript / 
json now...
it's not as advanced as rebol, though, but it's
Group: !REBOL3 Extensions ... REBOL 3 Extensions discussions [web-public]
I'm trying to return a block containg a word not taken from a commands 
arguments. Say, I want to return a block like [BATTERY CHARGING]: 

That works with

	u32 *word_ids = 0; // used to hold word identifiers
	enum power_words {W_POWER_BATTERY = 1, W_POWER_CHARGING};

	RXIEXT int RX_Call(int cmd, RXIFRM *frm, void *data) {
		/* .... */

		v.int32a = word_ids[W_POWER_BATTERY];
		RXI_SET_VALUE(s, pos++, v, RXT_WORD); 
		v.int32a = word_ids[W_POWER_CHARGING];
		RXI_SET_VALUE(s, pos++, v, RXT_WORD);
		/* .... */

only after importing the DLL I "manually" init the words with a MAP-WORDS 
command. I was thinking that IMPORT eventually triggers LIB-BOOT 
init-code from the INIT_BLOCK. It seems like the init code is not 
Group: !REBOL3 GUI ... [web-public]
btw... many host-kit fixes are pretty easy if you know where to look... 
for example to enable image gobs in Carl's host-kit, one must just 
remove the temp_remove and replace:
	int gobw = GOB_CONTENT(gob)->size & 65535;
	int gobh = GOB_CONTENT(gob)->size >> 16;
	int gobw = GOB_W(gob);
	int gobh = GOB_H(gob);


And that's all... I really wonder why you keep the host-kit updates 
hidden. Even Carl was able to put it on github:/
Well, I stop my tries to port a demo now. My take is, that following 
primitive code should work easily, when repeated for the second time, 
but it does not:

lay: [button "OK"]

child: make-face 'hpanel [break-after: 1]
set-panel-content/no-show child lay
view child

My take is, that either make-face is not creating a structure needed 
later, or 'parse-panel is buggy, or I don't know what :-)

** Internal error: stack overflow

** Where: reduce switch parse to-text reduce parse to-draw all update-subgobs 

reach update-subgobs show-native show-native show-native show-native 

 show-native show-native show-native show-native show-native show-native 

tive show-native show-native show-native show-native show-native 
show-native sho

w-native show-native show-native show-native show-native show-native 

 show-native show-native show-native show-native show-native show-native 

tive show-native show-native show-native show-native show-native 
show-native sho
w-native show-native show-native show-native s...
Group: !REBOL3 ... [web-public]
REPEAT has the same BIND/copy overhead, but REPEAT w number! has 
less work to do, so it's faster. I wouldn't be surprised if REPEAT 
w series! is comparable to FORALL.
>> x: [16#ffffff] 
== [#6#ffffff]

how can i specify an integer! in hex format?

debase/base "ffffff" 16  returns a binary! which i mostly can smear 
on my hair, since most operators just doesn't play nicely w it...

same problem again... i tried to use rebol for byte level processing 
and it's just not suitable for it.. :/
Group: World ... For discussion of World language [web-public]
Q: Does World compile into bytecodes (a la java) or machine languages?

A: Into bytecodes for the virtual machine. Each VM instruction is 
32 bytes (256 bits) including data and register pointers.

Q: Can you do operators with more or less than 2 arguments?

A: Not yet. I've considered post-fix operators (1 argument), and 
it shouldn't be too hard to implement. To motivate me, I would like 
to figure out some really good examples. With more arguments, I can 
only think of the ternary operator ("THE ternary operator"). I'm 
not sure, World needs that.

Q: Is range! a series! type?

A: No, range! is a component datatype. It has two components just 
like pair!.

Q: What platforms are supported?

A: For now Mac OS X (64 bit), Linux (32 bit) and Windows (Win32). 
The code is very portable. It took me a few hours to port to Linux 
from OS X and just a few days to Windows.

Q: What platforms do you plan to support in the future?

A: It would be cool to see World on all thinkable platforms. I personally 
don't have time to support all. World is not a hobby project, and 
I'm open for business opportunities to support other platforms. The 
host depending code is open source. I mainly think 64-bit.

Q: I'm a little sorry to see the R2-style port model instead of the 
R3 style. Are all ports direct at least?

A: Yes, ports are direct (no buffering). The ports and networking 
are some of the most recent implemented. More work is needed in this 
area. I would like to keep it simple and fast, yet flexible so we're 
all happy.

Q: What in the world is going on with the World Programming Language? 
This looks like something that must have been under wraps for a long 
time. What's getting released?

A: I didn't speak up about this, until I was sure, there were no 
show-stoppers. The open alpha of World/Cortex is being released as 
executables for Mac OS X, Linux and Windows (Win32), as are the platform 
dependent sources and initial documentation. World implement 74 natives 
and more than 40 datatypes. The Cortex extension (cortex.w) implement 
100 or so mezzanine functions and some definitions. The REBOL extension 
(or REBOL dialect in rebol.w) implement close to 50 mezzanine functions 
(not all functionality) and some definitions.

Q: Did you do some speed benchmark? (R3 vs R2 vc World) ?
A: Yes:

(All tests under OS X using R2 v. and R3 v.

- A mandelbrot routine (heavy calculations using complex! arithmetic) 
is 6-7 times faster in World than code doing the same without complex! 
in R2 and 11-12 times faster than R3. If using same code, it's 2.5 
times faster in World than R2 and 4.2 times faster than R3.
- A simple WHILE loop like:
n: 1000000 while [0 < n: n - 1] []

is 1.8 times faster in World than in R2 and 2.8 times faster than 
in R3.

- I tested networking in two ways. One sending one byte back and 
forth between client and server task 100'000 times using PICK to 
get it, and another sending 1k bytes back and forth 10'000 times 
using COPY/PART to get it from the port. Both were around 3 times 
faster in World than in R2. (I didn't test this in R3.)

- I tested calling "clock" and "tanh" routines in the libc library. 
I called those routines 1'000'000 times in a loop and subtracted 
the time of the same loop without calling. Calling "clock" is 2.4 
times faster in World than in R2. Calling "tanh" (with argument 1.0) 
is 5.9 times faster in World than in R2. (I didn't test this in R3.)

(Some functions are mezzanines in World, which are natives in REBOL, 
so they'll in most cases be slower in World.)
Q: We already know that your physics background influenced the new 
complex numbers datatype. Should we expect further progress of this 
kind (physics/science)?

A: After pointing this language out to a couple of friends from university, 
I was quickly asked to give scientific examples, like making a Lorentz 
attractor. There will come examples like that. Also I have some contacts 
at the Niels Bohr Institute (Copenhagen University), that I would 
like to show the language to and see, if we can create some projects.

Q: How long has this been in the making in general & how much time 
have you spent programming it?

A: I started R&D late March 2009. In March 2010, I had >7'000 lines 
of C. Then I took almost a year break from World and started up again 
Spring 2011. I have used much time on it this year (2011). So I've 
used 1-2 years effectively, I guess.

Q: Is there a way loading and interfacing pure object files, how 
about callbacks?

A: I don't have much experience in this area. Two of the closed alpha 
testers have looked at interfacing with sqlite3, which uses callbacks 
for some stuff. I would say, it doesn't work 100% yet, but it's being 
worked on. I need to see examples of loading and interfacing with 
pure object files to judge, how much of such functionality should 
be in World.

Q: Wouldn't it be useful to treat the kwatz! type same way as binary! 
so you don't need to always convert it? I mean, all functions that 
are able to take binary! arg should be able to use the kwatz! as 
well...or do you think are there any problems regarding that?

A: I've thought of that and came to the decision, that KWATZ! should 
be treated with some care. Are we always sure, we want to treat that 
data as binary? I need more experience using KWATZ! to judge that. 
Conversion could be fast, if the AS function was introduced, which 
should just change the type without copying.

Q: Is there a call-in interface available, meaning I can embed World 
in other programs?

A: Not yet. Internally I do call World functions from C (to parse 
URLs) by pushing arguments on the VM stack and call the execute_vm() 
C function. I imagine an interface much like in Lua (lua_call), but 
a little more work is needed, before we're there. This is an alpha 
release, so things will change/be added, before we move to beta release.

Q: Regarding your thesis I guess you have something like an integrated 
db or a special datatype for permanent storage too.. ?
A: Too early! :)

Q: What subset of REBOL2 will run without change in World?

A: Uh, ah, hard to tell at this point. When I need new functionality 
in World (because I want to run some of my R2 scripts), I consider, 
if it should be part of World/Cortex or if the new functions should 
go into the REBOL expansion/dialect (%rebol.w). I want World/Cortex 
to be small and compact. The idea with %rebol.w is, that much of 
R2 code could run, after this script has run.

Q: Are there datatype and function comparisons between World and 

A: No, I haven't documented that ... yet. Maybe someone else wanna 
document that!? But there are differences, like the REBOL decimal!, 
which in World is called real!. And then %rebol.w just include the 
decimal!: :real!
, so REBOL scripts using that will run.

Q: How many people were working on this World? :) Is it just a single 
man project?
A: Yes, just me.

Q: Will there be a GUI?

A: I would really need a GUI for my own work at some point. I have 
ideas, but nothing set in stone yet. And I want World to be open, 
so different GUIs should be possible, also the native GUIs in the 
different OS.

Q: Are you rich enough to buy Rebol Technologies and employ Carl? 
First let's see, how many REBOL scripts will actually run. I assume, 
a lot of work is needed in %rebol.w . You guys are welcome to contribute. 
Maybe we need a project for that!?
Code is compiled in two ways.

1) Code is being compiled to the VM, when it's being run. So if I 
define and run this function:

w> f: does [return 1 return 2]
w> f
== 1

only the first RETURN statement is being compiled.

2) If I instead compiled the functions, both statements are being 
compiled, e.g.:

w> compile :f

will compile both RETURN statements, but this has no impact, when 
running the function (of cource), and DISASM just stops, when it 
sees a RETURN.
It's not really junk!, it's human text, encoded as humans see fit, 
gibberish or deep meaning symbolic.

Funny, when I first implemented KWATZ!, I called it gibberish!, but 
I found KWATZ! better suited and more interesting. And it kinda give 
you the same feeling, as when you see a computer go down with a "Guru 
Meditation". :)

And if you don't mind, I may start poking around in your wiki as 
btiffin on GitHub. Feel free to tear any writings apart.

The idea with the wiki is, that it's for everybody to edit, so it's 
not really "mine". And as I have very little time for documentation 
right now, I will only contribute a little. It may be needed to step 
in at some point and clear things up, make different pages consistent 
with each other etc., and that may be me, who does that, but it could 
be somebody else too. For the dictionary, it may be an idea to write 
a script, which does most of the documentation (I think, there's 
an old REBOL script for that lying around somewhere, which may be 
suited with some modification). system/words may be needed to do 
that properly, and that's not in World yet. I produce LaTeX output 
with my NicomDoc format, so I'm covered there with the documentation, 
I'll do (a proper manual).

Regarding cortex.w - is that in the far-plan?

Yes, the binary will be as basic as possible. I even consider removing 
definitions of natives from the binary, as it's possible to define 
them in cortex.w. Same could be done with datatypes with a little 
change to World. Then the binary could only define MAKE and DATATYPE! 
(and probably also SYSTEM), and the rest could be build from that. 
It's a good idea to split the doc up in a native section and a mezzanine 
section. And then there's rebol.w, which will make it possible to 
run even more REBOL scripts. There could be a dictionary for that 
Btw. in World, natives are being called functions too (it's easier 
for the user to understand, I think). You can distinguish them with 
PICK, as the second item is an integer. Examples:

w> type? pick :add 2
== integer!			; so ADD is a native function
w> type? pick :loop 2
== block!			; so LOOP is a mezzanine function
I don't think so, as it's a simple memcpy. The C code looks like 

	if (rb->type == STRUCT_T) {
		if (rc->type == HANDLE_T) {
			Struct *U = (Struct *) rb->value.rc;

   memcpy (U->u, (char *) ((Handle *) rc->value.rc)->pointer, U->size);
		} else
			invalid_argument (W, rc);
	} else
		invalid_argument (W, rb);
Gregg wrote in group #Red: "World has similar goals I believe."

Yes. To clarify: There is World and there is World/Cortex. World 
is written in C and the Cortex extension is written in World. It's 
a design goal to have as little as possible in the C part, but because 
it's also a goal to have good performance, especially with math stuff, 
some functions are native (written in C), which could have been mezzanines 
(written in World), like ABS, COS, SIN, TAN (all small functions 
in C).

But large functions like PARSE and SORT and many other functions 
are part of the Cortex extension, so they're written in World and 
is therefore open source.

With the good support for dynamic loaded libraries, good performace 
with heavier functions can be achieved that way.

And then there is the REBOL extension (in the World file %rebol.w), 
which is there to hold further extensions and definitions needed 
to run REBOL scripts. Those are not in the Cortex extension, because 
I disagree with some of the REBOL design decisions, and because I 
would like the Cortex extension not to be too large.

For me, World and Cortex has the higher priority, the REBOL extension 
the lower priority, meaning I use more time on finishing World/Cortex 
for now.