BaCon - Bash-based Basic-to-C converter/compiler

For discussions about programming, programming questions/advice, and projects that don't really have anything to do with Puppy.
Message
Author
big_bass
Posts: 1740
Joined: Mon 13 Aug 2007, 12:21

#354 Post by big_bass »

updated so you can compile most apps from inside the geany GUI
updated Nov-5-2011 for HUG highlighting and upx compression
this is a "hack" going for geany syntax highlighting with BaCon!

geany fix with rxvt_hold
http://www.puppy2.org/slaxer/geany_bacon-2-1_SLXR.tgz

upx compression
http://www.puppy2.org/slaxer/upx-3.07-i ... 1_SLXR.tgz

note in geany I had to recycle the build button
so after you compile the app you click on build
which build now uses upx to compress your already compiled bin


then open geany with any *.bac and select
Document -->Set Filetype-->Programming Languages-->FreeBasic source file


just install the package
and upx
and you get the BaCon commands highlighted !

I cant use gtksourceview with my gtk version so this is how to get
another GUI going


*since FreeBasic was compiled in the GUI as an option that was used
later when all the commands are added and tested Bacon would be used and compiled into geany the right way

if we keep at we could get an official bacon filetype someday it can be done



----------------------------------------------------------------------------
as a side note

*you can also call the rxvt_hold script for other apps too
like this

Code: Select all

 rxvt_hold ls -1   

you could change the "ls -1" for any command you want to run
it works for keeping rxvt or urxvt open after the command is executed
Attachments
geany-compile-bacon.png
(66.05 KiB) Downloaded 1234 times
Last edited by big_bass on Sun 06 Nov 2011, 20:09, edited 21 times in total.

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#355 Post by sunburnt »

big_bass; I had to set the Programming Language to: FreeBasic

Click: Document > Set Filetype > Programming Languages > FreeBasic source file

I was surprised I didn`t have to add ".bac;" to the file: filetype_extensions.conf

big_bass
Posts: 1740
Joined: Mon 13 Aug 2007, 12:21

#356 Post by big_bass »

Hey sunburnt
thanks for confirming that
I had that in my first post viewtopic.php?t=48901&sort=author&start=73
but thought it wasnt needed with the new changes I made

I'll update the above post
I was surprised I didn`t have to add ".bac;" to the file: filetype_extensions.conf
thats for when you click on any source program with the *.bac
it opens automatically with geany

*its nice to know that parts of geany are scriptable without having to
hack it and recompile it to test if it works or not


thanks
Joe

User avatar
vovchik
Posts: 1507
Joined: Tue 24 Oct 2006, 00:02
Location: Ukraine

#357 Post by vovchik »

Dear Joe,

Although bacongui works on my system, I prefer your method with geany and the modded filetypes.freebasic. I guess I am just used to geany, and the syntax highlighting works perfectly.

Thanks.

With kind regards,
vovchik

big_bass
Posts: 1740
Joined: Mon 13 Aug 2007, 12:21

#358 Post by big_bass »

Hey vovchik

thanks for the comments
I updated the post above to fix it so it now compiles
files that have INCLUDES :D

I also added a little terminal so the user can see the
progress while it compiles in geany

there is a script called rxvt_hold
that goes in /usr/sbin the ( app depends on it)

*you can also call that script for other apps too
as a side note like this

Code: Select all

 rxvt_hold ls -1   
you could change the "ls -1" for any command you want to run
it works for keeping rxvt or urxvt open after the command is executed

Joe

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#359 Post by sunburnt »

big_bass; Now you need to add HUG highlighting and it`ll be complete!

I still think API libraries should be made of all this stuff, there`s lots of it !
I wrote shell libraries for dealing with files, file systems, lists, gtkDialog, etc.

But written in Bacon and compiled they can become far more useful.
Especially to Bacon as it`s so limited by the standard Basic language.

big_bass
Posts: 1740
Joined: Mon 13 Aug 2007, 12:21

#360 Post by big_bass »

sunburnt
Now you need to add HUG high lighting and it`ll be complete
great idea
thanks
its now added in the above post

*Hey guys if you find a missing command let me know
It will be added


Joe

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#361 Post by sunburnt »

Problem with an associative array: SEGMENTATION FAULT array out of bounds?

Array gives out correct data, clicking a button and calling a sub gets error.
But the button`s ID array is a std. array, not the associative array.
Sub called has widget_ passed to it: SUB btnCLK(int widget_)

Put the files in: "/tmp/apps.sq"
Compile: "sqApps.mnu.bac" and run in rxvt.
Click Menu button and menu Item and it errors calling sub.

It never even makes it to the SYSTEM command, line #65.

Print command shows the associative array is properly filled.

If it finally runs properly, it`ll error because there`s no Squash App. file.
Attachments
AssociativeArrayError.zip
Make dir.: /tmp/apps.sq , copy file to it and unzip it.
(1.34 KiB) Downloaded 517 times

User avatar
GatorDog
Posts: 138
Joined: Tue 12 Sep 2006, 16:43

#362 Post by GatorDog »

Terry,

Code: Select all

CALLBACK(btnIDs_[i], "btnCLK")
Nix the quotes :P

Code: Select all

CALLBACK(btnIDs_[i], btnCLK)
(interesting code, by the way :idea: )

rod

(IMHO)There doesn't seem to be an exact correlation between button geometry and window geometry in HUG.
Most of the time it doesn't mater, but you're trying to keep this widget compact.
Did this to fit all the buttons vertically in the widget, with a slight visual
spacing between buttons. It may need more fudging when more buttons
are present; but it's a good start.

Code: Select all

'added to variable presets
btnSpc = 2
btnY = btnH + btnSpc
...
'mod'ed these two lines
btnY = btnY + btnH + btnSpc
winH = winH_0 + ( (btnH + (btnSpc * 2)) * btnCNT ) + btnSpc
...

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#363 Post by sunburnt »

L.O.L. _ _ _ Late night coding, a real quality producer...
The compiler could be better sometimes, but it can`t out-guess dumb!

I`ll look at your spacing to see it`s visual appeal, any other ideas?

Maybe Puppy has a new pop-menu, with sub menus when I get it added.

Thanks Rod ( the GatorDog )

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#364 Post by sunburnt »

EXEC keeps giving me grief no matter how I try to use it.
What`s wrong with this? ......... Get options from args.

Code: Select all

FOR i = 2 TO 5
	Opt$ = CHOP$(EXEC$("echo", ARGUMENT$, "|cut -d'-' -f", i))
'	IF Opt$ = "" THEN BREAK

PRINT Opt$

NEXT
"echo ....." works from the shell, but not here. Empty output lines.
Tried CONCAT$ also, looks like EXEC$ only sees "echo".

I spent hours trying to get INSTRREV to work, it will not with MID$ !
I got INSTR to work, but decided to take my own advice and do it in the shell.

User avatar
GatorDog
Posts: 138
Joined: Tue 12 Sep 2006, 16:43

#365 Post by GatorDog »

Code: Select all

Opt$ = CHOP$(EXEC$("echo", ARGUMENT$, "|cut -d'-' -f", i)) 
You just insist on hittin' your thumb with a hammer :P
EXEC$ is seeing 3 strings and a number. 3 strikes you're out.

Code: Select all

Cmd$ = CONCAT$("echo ", ARGUMENT$, "|cut -d'-' -f", STR$(i))
Opt$ = CHOP$(EXEC$(Cmd$))
-----------------------------------------
However, this may serve you better

Code: Select all

SPLIT ARGUMENT$ BY " -" TO Arg$ SIZE Arg_count
That'll give you all the command line arguments.
Arg$[0] is the command/program name
Arg_count gives the number of arguments
Then you can pick them off one-by-one Arg$[1] Arg$[2] ....Arg$[Arg_count]

Note that I used a "space dash" ( " -" ) in the SPLIT as the seperator.
That should preclude a trailing space on the Arg$[] variables.

The Arg$[] number is affected by the use of OPTION BASE 1; adjust accordingly. :wink:

rod

By the way, I didn't actually test any of that. Ye pays yer money and ye takes yer chances! RRR...

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#366 Post by sunburnt »

Your code works of course... But the Bacon docs are wrong... >:(

Also the command "FILETYPE" doesn`t correctly report a sym. link as "6".
It says it`s a "1", a Regular file. I thought it was reporting the file the link points to.
But I made a link pointing to a link and it still reports it as "1", a Regular file.
Seems "FILETYPE" can`t be relied on for sym. links at least.

User avatar
GatorDog
Posts: 138
Joined: Tue 12 Sep 2006, 16:43

#367 Post by GatorDog »

Also the command "FILETYPE" doesn`t correctly report a sym. link as "6".
It says it`s a "1", a Regular file. I thought it was reporting the file the link points to.
This is probably something to address in the Bacon Forum. Either to be explained or
if it's a bug, then to be dealt with.

GatorDog

User avatar
sunburnt
Posts: 5090
Joined: Wed 08 Jun 2005, 23:11
Location: Arizona, U.S.A.

#368 Post by sunburnt »

Hey big_bass; The Geany syntax highlighting is great!

Problem with Geany... The filetypes.freebasic selection in Document doesn`t stay that way.

Not a problem with your mod. I know, but I`m sure there`s a simple fix.
Thanks for the help... Terry

big_bass
Posts: 1740
Joined: Mon 13 Aug 2007, 12:21

#369 Post by big_bass »

this is BaCon related news

Bacon and Hug color for forum posts in phpBB code

(it is a scriptable keyword generator ) I chose Bacon to be its first format
to add color to other formats will follow


you'll have fun adding many things to this

http://www.murga-linux.com/puppy/viewto ... 99&start=2

Joe

big_bass
Posts: 1740
Joined: Mon 13 Aug 2007, 12:21

#370 Post by big_bass »

http://murga-linux.com/puppy/viewtopic. ... &start=353
updated Oct-11-2011 to add some missing keywords

if for some reason you just cant click on the file to open it *with color
later I'll post my compiled geany to see if that may be the cause
*or use the same build script just to clear up any doubts


because I have tried this puppy pfix=ram and
just clicking on the file works for me (color is there automatically )
I would like to find out why it isnt working for some people
in order to fix it quickly



@BarryK
Thanks for the comments
I have just seen the link from your blog (I forgot my password to comment there )
I would like this geany fix to be done" correctly" and eventually
be compiled into geany having a bacon.filetype so that we dont clobber freebasic
this is just a small step in that direction

any feedback welcomed
Thanks

Joe

big_bass
Posts: 1740
Joined: Mon 13 Aug 2007, 12:21

#371 Post by big_bass »

now we can use even another very easy message system
using pango-view

http://en.wikipedia.org/wiki/Pango
http://manpages.ubuntu.com/manpages/jau ... oad.1.html
The GTK+ UI toolkit uses Pango for all of its text rendering
my first example code
this Bacon is too cool


Joe

Code: Select all

' *****************************************************
' PROGRAM:	pango-test1.bac
' PURPOSE:	show how to use pango-view
' AUTHOR:	big_bass Joe Arose 
' DEPENDS:	gcc, bacon, pango
' PLATFORM:	linux
' DATE:		Oct 10-2011	
' NOTES:	one more simple message option 
' LICENSE:	GPL version 3 or later
' *****************************************************
' first example using pango-view
' could also be used to debug showing exact line numbers


PRINT "============================="
PRINT "Test 1: Testing pango-view"
PRINT "============================="
PRINT

PRINT "Close box to continue"

' one long command line 
result$ = EXEC$("pango-view  --font=\"DejaVu Sans 12\"  --markup  --text 'This is a DejaVu Sans 12 output on a X screen'")



PRINT "Close box to continue"

' dialog formatting for easy reading notice the new lines  are respected 
result$ = EXEC$("pango-view \
 --font=\"DejaVu Sans 24\" \
 --markup \
 --text 'DejaVu Sans 24 \
 output on a X screen'")

PRINT result$


Attachments
pango-test1.tar.gz
(12.14 KiB) Downloaded 424 times
Last edited by big_bass on Thu 13 Oct 2011, 17:19, edited 3 times in total.

User avatar
8-bit
Posts: 3406
Joined: Wed 04 Apr 2007, 03:37
Location: Oregon

#372 Post by 8-bit »

I just uploaded the package to make Bacon for Slacko RC 5.29.5 at
this location.
You will heed to have the kernel source and devx loaded to compile it.
Run the "bacon.bash" script from the package after extracting the package. You can then copy the bacon binary to a place of your choosing.

Have fun as always.

User avatar
vovchik
Posts: 1507
Joined: Tue 24 Oct 2006, 00:02
Location: Ukraine

Making noise in BaCon

#373 Post by vovchik »

Dear Puppians,

This is one way to generate sounds simply in BaCon - provided you have the device /dev/audio. I will experiment a bit more with this so that we can get hex strings that correspond to certain frequencies. It will then be possible to create a useful PLAY statement without invoking external libs. Peter's beep and piano demos require the PC speaker, and mine happens to be switched off.:)

Code: Select all

' *****************************************************
' PROGRAM:	bleep.bac (subroutine)
' PURPOSE:	to generate sine, square, triangle,
' 			sawtooth and pulse waveforms simply
' AUTHOR:		vovchik (Puppy Linux forum)
' DEPENDS:	gcc, bacon and device /dev/audio
' PLATFORM:	Puppy Linux (actually, any *nix)
' DATE:		15-10-2011
' *****************************************************


' *********************
' DECLARATIONS
' *********************

OPTION MEMTYPE short

' *********************
' END DECLARATIONS
' *********************


' *********************
' SUBS & FUNCTIONS
' *********************

' ---------------
SUB BLEEP(NUMBER mysound, NUMBER myduration)
' ---------------
	LOCAL count, i TYPE NUMBER
	LOCAL wave$[7]
	' check whether audio device exists
	IF FILEEXISTS("/dev/audio") THEN
		' check whether passed sound value is in bounds for array definition
		IF mysound < 0 OR mysound > 6 THEN
			mysound = 2
		END IF
		' check whether sound is not too short or too long
		IF myduration < 10 OR myduration > 3000 THEN
			myduration = 50
		END IF
		' define the various waveforms as a series of hex bytes
		' sine
		wave$[0] = "0F2D3F2D0F030003"
		' square
		wave$[1] = "3F3F3F3F00000000"
		' triangle
		wave$[2] = "00070F1D3F1D0F07"
		' sawtooth plus
		wave$[3] = "3F271A120C080400"
		' sawtooth minus
		wave$[4] = "0004080C121A273F"
		' pulse plus
		wave$[5] = "003F3F3F3F3F3F3F"
		' pulse minus
		wave$[6] = "3F00000000000000"
		' convert hex waveform bytes to binary memvar
		' this bit is necessary because C does not like the null character
		binsize = LEN(wave$[mysound]) / 2
		mybindata = MEMORY(binsize)
		count  = 0
		FOR i = 1 TO LEN(wave$[mysound]) STEP 2
			binbyte = DEC(MID$(wave$[mysound], i, 2))
			POKE mybindata + count, binbyte
			INCR count
		NEXT i
		' generate a sound for a certain duration
		' the actual duration will be processor-specific
		OPEN "/dev/audio" FOR WRITING AS myaudio
		count = 0
		WHILE count < myduration
			' send binary waveform to audio device
			PUTBYTE mybindata TO myaudio SIZE binsize
			INCR count
		WEND
		CLOSE FILE myaudio
		FREE mybindata
	ELSE
		PRINT "Cannot open audio device /dev/audio."
	END IF
END SUB

' *********************
' END SUBS & FUNCTIONS
' *********************


' *********************
' MAIN
' *********************

FOR i = 0 TO 6
	BLEEP(i, 180)
	SLEEP 200
NEXT i

' *********************
' END MAIN
' ********************
I have also attached the source.

With kind regards,
vovchik

UPDATE. I have added a FREE mybindata right after CLOSE FILE myaudio, just to be proper.
Attachments
bleep.bac.tar.gz
(1.13 KiB) Downloaded 424 times
Last edited by vovchik on Sun 16 Oct 2011, 14:21, edited 3 times in total.

Post Reply