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

World: r4wp

[#Red] Red language group

Bo
2-Jul-2013
[9201]
OK.  Currently 42C (108F) outside my house.  My small window air 
conditioner can't keep up.  My fingers are slipping on the keys.
Kaj
2-Jul-2013
[9202]
Wow, my hard disk runs that hot
Bo
2-Jul-2013
[9203]
It was 44C today but it is starting to cool off.
Kaj
2-Jul-2013
[9204]
My official C book doesn't mention null ending for strcat, but it 
does for all the other string functions, so it would be a very malevolent 
C library that doesn't implement it
Bo
2-Jul-2013
[9205]
Is this a good way to add that null marker?

	tmp: make-c-string 1
	append-string file1 first-line
	tmp: file1 + length? file1
	tmp/1: #"^(00)"
Kaj
2-Jul-2013
[9206]
No, you have to ask for the length before the append, because LENGTH? 
depends on the marker
Bo
2-Jul-2013
[9207x2]
OK.
Here's my code now...still not working:

	tmp: make-c-string 1
	file1: make-c-string 128
	copy-string "to-process/" file1 ;reversed
	print-line [length? file1 " " length? first-line]
	file1len: (length? file1) + (length? first-line)
	append-string file1 first-line
	tmp: file1 + file1len
	tmp/1: #"^(00)"

	print-line [file1 " " length? file1]
	append-string file1 "/img00.bin"
	print-line [file1 " " length? file1]

Here's the output

	11 25
	 36process/2013-06-29-20-20-09.h264
	/img00.bin 4613-06-29-20-20-09.h264
Kaj
2-Jul-2013
[9209x2]
length? is correct
Aha, that means there's an extra character at the end of your first-line
Bo
2-Jul-2013
[9211]
Yes.
Kaj
2-Jul-2013
[9212x3]
Judging by the printing, that must be a CR
So you probably copied a Windows text file to Linux
So the problem is in the only piece of the code you didn't show :-)
Bo
2-Jul-2013
[9215x2]
I could have pasted the whole program in here, but I thought that 
might have been excessive! :-)
Sorry for the false alarm and all the trouble.
Kaj
2-Jul-2013
[9217]
Is first-line a literal or does it come from a text file?
Bo
2-Jul-2013
[9218]
Here's the troubling bit of code:

	dirs: make-c-string 1024
	dirs: read-file "to-process/dirs.txt"

	eol: make-c-string 1024
	eol: find-char dirs #"^/" ;Finds the first end-of-line character

 line-len: as-integer eol - dirs + 1 ;Add one byte for the end-of-string 
 character
	first-line: make-c-string line-len
	copy-string-part dirs first-line as-integer eol - dirs ;reversed
	first-line/line-len: #"^(00)"

Shouldn't 'find-char dirs #"^/" return the first newline byte?
Kaj
2-Jul-2013
[9219x4]
Yes, you're looking for the LF, so you're including the CR
On Windows, the C library that executes the read-file converts DOS 
newlines to Unix LF format. I've had trouble with that before in 
the binding
The C library on Unix just assumes it's a native file, so if there 
are extra CRs in there, it doesn't touch them
It's best to standardise on LF format, even on Windows, with a capable 
editor
Bo
2-Jul-2013
[9223]
The dirs.txt file is being written to the Pi using Rebol on Windows.
Kaj
2-Jul-2013
[9224x2]
Yes, it uses local Windows convention
You must do the conversion somewhere in the chain
Bo
2-Jul-2013
[9226]
So, I'd have to form the file in Rebol, convert it to binary (in 
Rebol) and remove the CRs from the binary, then use write/binary 
to write it out.
Kaj
2-Jul-2013
[9227x2]
Doesn't REBOL have a refinement to force it?
The other option is to convert it in Red/System
Bo
2-Jul-2013
[9229]
write/with
Kaj
2-Jul-2013
[9230]
R2 only
Bo
2-Jul-2013
[9231x2]
I'll just use write/append/binary with #{0A} as the terminator.
It's working now.  Thanks for all your detective work!  I don't know 
how you can find bugs so fast.
Kaj
2-Jul-2013
[9233]
I didn't think it was very fast. :-) I had a hunch in the direction 
of corrupted printing all the time, but didn't think of CR
Bo
2-Jul-2013
[9234]
What I meant was "fast compared to me."
Kaj
2-Jul-2013
[9235x3]
:-)
It still sucks to loose hours to this issue fourty years after it 
was perpetrated
I suppose it would be useful if I made read-file more like REBOL, 
like it already behaves on Windows. I'll look into that tomorrow
Bo
2-Jul-2013
[9238]
You're awesome!
Kaj
2-Jul-2013
[9239]
Thanks
Bo
2-Jul-2013
[9240]
For anyone interested, I just published a JPG in the Files section 
under Misc called MotionDetect.jpg showing real-time motion detection 
performed by the Raspberry Pi running Red/System.  The top two frames 
are the actual camera video (shot at dusk) and the bottom frame highlights 
the areas of motion.  Thanks in huge part goes to Kaj for helping 
me finish this first project!
Kaj
2-Jul-2013
[9241]
Cool to see it displayed like that
Bo
2-Jul-2013
[9242x2]
What do you mean by "displayed like that"?
By the way, the bottom image is completely built by Red/System.
Kaj
2-Jul-2013
[9244]
Well, displayed at all. :-) So far I had only seen isolated code 
snippets
Bo
2-Jul-2013
[9245x2]
Have to protect my intellectual property. :-P
I really can't thank you enough, Kaj, for all your help!
Kaj
2-Jul-2013
[9247]
Yes, but that's not what I mean. It's all very abstract and seems 
like any other code, but now it comes to life
Bo
2-Jul-2013
[9248x2]
I love the feeling that I get when I see my software working!  Especially 
something I've been struggling with for days/weeks/months.
My original prototype written in R2 was started 3-Aug-2012 and finished 
9-Sep-2012.  It's taken this long to get it running on the Pi natively.
Kaj
2-Jul-2013
[9250]
Was that fast enough?