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

World: r4wp

[#Red] Red language group

Arnold
21-Mar-2013
[6415]
More than once the console quit on me when I wanted to use q.
DocKimbel
21-Mar-2013
[6416x2]
Henrik: you'll be able to add your own definitions in a %user.red 
script when the time comes.
If there is any last minute bug, it is now time to speak, else the 
fix won't be in 0.3.2 release. If we are ready I'll make the release 
in a couple of hours.
Henrik
21-Mar-2013
[6418]
DocKimbel, ok, that's fine. :-)
Jerry
21-Mar-2013
[6419]
Gonna write a short blog article for 0.3.2?
DocKimbel
21-Mar-2013
[6420]
As usual, yes.
Arnold
21-Mar-2013
[6421]
Last minute bugs are usually marked as features.
Pekr
21-Mar-2013
[6422]
I want both - Q and QUIT :-)
DocKimbel
21-Mar-2013
[6423]
Q is ok for console, but it's a bad idea to have it defined generally. 
Such shortcut should go in a console specific module.
Henrik
21-Mar-2013
[6424]
Agree.
Gregg
21-Mar-2013
[6425]
Doc +1.
DocKimbel
21-Mar-2013
[6426]
I've removed Q from the console-specific module thinking it was in 
boot.red. :-) Needs some rest.... I will put Q back in console.red. 


Sorry Arnold. BTW, how do you manage to call quit the console if 
you redefine Q for custom usage?
Kaj
21-Mar-2013
[6427x2]
Using before defining, I gather
Those repeated shocks to the brain are very helpful to learn REBOL's 
principles ;-)
DocKimbel
21-Mar-2013
[6429x2]
Arnold: if you have such issues with Q in console, you should simply 
set it to none in %user.r for Rebol. For Red, you would need to change 
the console.red script and recompile it for your needs.
Ok, one last possible bug to investigate in GTK-IDE script and we 
should be ready to release.
Endo
22-Mar-2013
[6431]
I use 'q A LOT on R2 console. In scripts no need that shortcut but 
on console it is a MUST for me :) I open/close R2 console every 30 
seconds to do something like english-turkish translation, to see 
NOW, to use functions manipulating clipboard etc. then Q-it..
Arnold
22-Mar-2013
[6432]
Hi do not recall it exactly but I think it was when I was developing 
the checkersgame program and somehow I had a variable q and when 
the code was executed the program and the console closed forcing 
me to restart REBOL.  

The solution you have chosen now will pretty wel have prevented this 
behaviour, still offering a shorthand for quit in console mode is 
welcomed by many. Good thinking again!
Oldes
22-Mar-2013
[6433]
Just playing for a while after some time.. What steps are required 
to add a new native!? I was trying to duplicate stats native as is 
in this commit, but maybe it's not complete as now the console quits 
immediately.

https://github.com/dockimbel/Red/commit/1836a0cd04f703bdd28bfb177e99c317340be5d1
DocKimbel
22-Mar-2013
[6434x2]
I plan to write an HOW-TO guide for that someday, but in the meantime 
and in a nutshell, this is what is required:

1) NAT_<name> enum entry in %macros.reds (order matters!)


2) pointer entry in REGISTER argument block (same order as in macros) 
in %natives.reds


3) an entry point implementation in %natives.reds (if the code is 
too big you can move it elsewhere as long as the entry point is in 
natives.
Of course, you'll need to use the internal Red runtime API and stack. 
No docs for now, as it is not stabilized fully, but you can guess 
a lot of it from other natives and actions implementation.
Oldes
22-Mar-2013
[6436x4]
hmm.. that's what I was doing.. but have:
*** Runtime Error 1: access violation
*** at: 004188CEh
In boot.red
foo: make native! [
	[]
	#get-definition NAT_FOO
]
in natives
foo*: does [halt]
and registered as :foo*

in macros enum added NAT_FOO
when I change #get-definition NAT_FOO  --> #get-definition NAT_HALT 
=== it's working again
Ach... it looks there is some confilct with the name FOO for my native
DocKimbel
22-Mar-2013
[6440]
Tested here, works well.
Oldes
22-Mar-2013
[6441x2]
hm.. now it works here as well even with the name foo... maybe I 
just fooled the compiler as I compile from REBOL console using:

do/args %red.r "-v 0 %red/tests/console.red -o %../builds/console"

so possibly if there was some error before, the compiler state was 
not cleared
so now I have my first native which halts console:)
DocKimbel
22-Mar-2013
[6443x2]
That's possible, the %boot.red extraction routine do not refresh 
their data structures IIRC.
BTW, you can add also new natives using the routine! type. Routine 
body are coded in Red/System too, so they are equally efficient as 
natives. Routines are easier to define (no need to mess around with 
runtime internals). Their only drawback so far is that they don't 
support refinements (we might add that later).
Oldes
22-Mar-2013
[6445]
I would like to access stdout, is it possible from routine?
DocKimbel
22-Mar-2013
[6446]
Sure, use one of Red/System output function: print, print-line, print-wide...
Gregg
22-Mar-2013
[6447]
Congratulations Oldes!
DocKimbel
22-Mar-2013
[6448]
Routine == Red/System + automatic argument/return-value marshalling.
Pekr
22-Mar-2013
[6449]
Refinements would come in handy at some point in future, no?
Oldes
22-Mar-2013
[6450x2]
What if I want native, which takes one integer! argument? stack/arguments 
seems to return pointer
found it... using:
code: as red-integer! stack/arguments
int: code/value


so now I can change colors in console... will clean it later and 
upload:) now back to work
DocKimbel
22-Mar-2013
[6452x3]
stack/arguments will return you a pointer on a series slot in stack. 
If you want to access it's data value, you need:

    int: as red-integer! stack/arguments
    print int/value

Modifying is straightforward:
    int/value: int/value + 1		;-- incrementing example.


Last return value should be at stack/arguments position, in this 
case, it is already.
Great! :-)
Will be back later.
Oldes
22-Mar-2013
[6455]
I wanted to try the console on MacOS, but got missing /usr/lib/libhistory.dylib 
.. is it supposed to be working?
Kaj
22-Mar-2013
[6456]
Only theoretically, if you install GNU ReadLine (including LibHistory) 
on Mac. I don't know if it's available, but you would probably have 
to install one of the porting package projects
Oldes
22-Mar-2013
[6457]
ah.. I see.. there is a TODO in the code
Kaj
22-Mar-2013
[6458x3]
Yes, and nobody has confirmed the proper library names on OS X
Do you know if any other ReadLine comes with OS X?
Is there ldd or something, to see which libraries are missing that 
the executable wants?
Oldes
22-Mar-2013
[6461]
libreadline is available, libhistory not
Kaj
22-Mar-2013
[6462]
Is it a BSD version, or GNU?
MarcS
22-Mar-2013
[6463]
Here /usr/lib/libreadline.dylib is a symlink to the editline library 
(it's not GNU readline)
Kaj
22-Mar-2013
[6464]
Thanks. I would expect LibReadLine to be loaded before LibHistory, 
so the fact it errored on the latter may mean that it has loaded 
ReadLine successfully. Others often try to have a compatible interface