Puppy Linux Discussion Forum Forum Index Puppy Linux Discussion Forum
Puppy HOME page : puppylinux.com
"THE" alternative forum : puppylinux.info
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

The time now is Thu 23 Oct 2014, 16:51
All times are UTC - 4
 Forum index » Off-Topic Area » Programming
simple game framework for scripting languages
Post new topic   Reply to topic View previous topic :: View next topic
Page 4 of 5 [63 Posts]   Goto page: Previous 1, 2, 3, 4, 5 Next
Author Message
linuph


Joined: 03 Jun 2012
Posts: 128
Location: Philippines

PostPosted: Fri 15 Feb 2013, 10:22    Post subject:  

Icon programming.

I've been digging lately to find a graphics programming language without bloating dependencies. I think I found one: Icon. You may never have heard of it.

See here: http://www.cs.arizona.edu/icon/index.htm

It's ancient in software/computer terms (1998). The earliest mention of it that I found dates back to 1979.

I downloaded the packages from the above website, compiled it with X11 headers and dropped the resulting directory with files into ~/bin and made a symlink.

Guess what: it works flawlessly. And it is rather easy to understand, even for me Razz

Below some examples I made with the help of the excellent documentation in an hour or so. But there's lot more to Icon than this, like high level string handling and Turtle Graphics, so I'm venturing on with it.

I would have liked to attach the Icon compilation as well, but it's 1.7Mb zipped (9Mb unzipped).

BTW there's Unicon (http://unicon.sourceforge.net/faq.htm) which is a 'modernized dialect that descends from Icon", but I have not yet looked into it.

I thought you might be interested....

Code:
#!/bin/icon
# fonts
link graphics

procedure main()
   WOpen("size=600,200") | stop("Can't open window")
   WAttrib("pos=50,150")
   WAttrib("label=Icon Programming - Fonts Demonstration")
   GotoXY(10,50)
   ransom("The quick brown fox jumps over the lazy dog.")
   WDone()
end

procedure ransom(s)
   local c
   static famlist, attlist, sizelist
   initial
      {
      famlist:=["URW Chancery L","DejaVu Sans"]
      attlist:=["","","bold","italic"]
      sizelist:=[18,22,24,32,34]
      }
   every c:=!s do
      {
      Font(?famlist || "," || ?sizelist || "," || ?attlist)
      WWrites(c)
      }
   return
end



Code:
#!/bin/icon
#clipping
link graphics

procedure main()

   local x,y
   WOpen("size=600,400", "bg=yellow")
   WAttrib("pos=300,100")
   WAttrib("label=Icon Programming - Clipping")
   Fg("red")
   FillRectangle(50,50,400,300)
   Fg("green")
   FillRectangle(70,70,360,260)
   Clip(71,71,359,259)
   every 1 to 50 do
      {
      x:=?400+50
      y:=?300+50
      WAttrib("fg=black","linewidth=5")
      DrawCircle(x,y,30)
      WAttrib("fg=white","linewidth=3")
      DrawCircle(x,y,30)
      }
   WDone()
end



Code:
#!/bin/icon
# Sierpinsky

$define Width   400
$define Height   400

$define X1      0
$define Y1      Height

$define X2      (Width/2)
$define Y2      0

$define X3      Width
$define Y3      Height

link graphics

procedure main()

   local x,y
   WOpen("size=400,400", "bg=light green")
   WAttrib("label=Icon Programming - Sierpinski Diagram")
   Fg("red")
   WWrite("Press 'q' to quit")
   Fg("black")
   x:=Width/2
   y:=Height/2
   until WQuit() do
      {
         case ?3 of
         {
         1: {
            x:=(x+X1)/2
            y:=(y+Y1)/2
            }
         2:   {
            x:=(x+X2)/2
            y:=(y+Y2)/2
            }
         3:   {
            x:=(x+X3)/2
            y:=(y+Y3)/2
            }
         }
      DrawPoint(x,y)
      }
end
Sierpinsky.png
 Description   
 Filesize   17.13 KB
 Viewed   283 Time(s)

Sierpinsky.png

clipping.png
 Description   
 Filesize   19.35 KB
 Viewed   296 Time(s)

clipping.png

fonts.png
 Description   
 Filesize   8.25 KB
 Viewed   292 Time(s)

fonts.png

Back to top
View user's profile Send private message 
recobayu


Joined: 15 Sep 2010
Posts: 113
Location: indonesia

PostPosted: Sun 17 Feb 2013, 03:28    Post subject: width and height variable in svg  

Hi Everyone, i very2 new in programming with svg. I want to make a background that can be full screen. but i can't change the variable WIDTH and HEIGHT in my script. this is my script:

Code:


#!/bin/sh
if [ -f startku.jpg ]; then
   rm startku.jpg
fi
USER=$HOSTNAME
RES=$(xrandr | grep "current" | cut -d 'c' -f1,3 | tr -cd 'x [:digit:]' | cut -d 'x' -f1,2)
WIDTH=$(echo $RES | cut -d 'x' -f1,1)
HEIGHT=$(echo $RES | cut -d 'x' -f2,3)
echo '
<svg version="1.1">
   <rect width="1366" height="768"
   style="fill:rgb(0,0,255)"/>
   <text >
   <tspan x="550" y="500" font-family="Open Sans" font-weight="bolder" font-size="100"
      fill="white" letter-spacing="-5">
      limuks
   </tspan>
   <tspan x="550" y="530" font-family="Open Sans" font-weight="lighter" font-size="30"
      fill="white">
      '"$USER"''"'"'s puppy linux
   </tspan>
   </text>

   
    <path stroke-dasharray="20,10,5,5,5,10" d="M5 60 215 0" />
   <circle cx="370" cy="100" r="12" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="350" cy="140" r="10" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="400" cy="110" r="5" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="410" cy="130" r="5" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="430" cy="120" r="2" fill="#6BADF6" style="fill-opacity:0.3"/>
   
   <circle cx="300" cy="110" r="40" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="300" cy="110" r="33" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="300" cy="110" r="21" fill="#6BADF6" style="fill-opacity:0.3"/>

   <circle cx="700" cy="100" r="80" fill="#6BADF6" style="fill-opacity:0.2"/>
   <circle cx="700" cy="100" r="60" fill="#6BADF6" style="fill-opacity:0.2"/>
   <circle cx="700" cy="100" r="40" fill="#6BADF6" style="fill-opacity:0.2"/>
   <circle cx="700" cy="100" r="20" fill="#6BADF6" style="fill-opacity:0.2"/>

   <circle cx="1000" cy="150" r="100" fill="#6BADF6" style="fill-opacity:0.2"/>
   <circle cx="1000" cy="150" r="80" fill="#6BADF6" style="fill-opacity:0.2"/>
   <circle cx="1000" cy="150" r="60" fill="#6BADF6" style="fill-opacity:0.2"/>
   <circle cx="1000" cy="150" r="45" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="1000" cy="150" r="30" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="1000" cy="150" r="15" fill="#6BADF6" style="fill-opacity:0.5"/>
   
   <circle cx="300" cy="700" r="20" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="300" cy="700" r="10" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="300" cy="700" r="5" fill="#6BADF6" style="fill-opacity:0.3"/>

   <circle cx="400" cy="710" r="20" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="400" cy="710" r="10" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="400" cy="710" r="5" fill="#6BADF6" style="fill-opacity:0.3"/>

   <circle cx="500" cy="730" r="30" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="500" cy="730" r="23" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="500" cy="730" r="16" fill="#6BADF6" style="fill-opacity:0.3"/>

   <circle cx="640" cy="700" r="30" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="640" cy="700" r="20" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="640" cy="700" r="7" fill="#6BADF6" style="fill-opacity:0.3"/>

   <circle cx="700" cy="680" r="30" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="700" cy="680" r="20" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="700" cy="680" r="5" fill="#6BADF6" style="fill-opacity:0.3"/>

   <circle cx="900" cy="720" r="20" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="900" cy="720" r="10" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="900" cy="720" r="5" fill="#6BADF6" style="fill-opacity:0.3"/>

   <circle cx="935" cy="700" r="20" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="935" cy="700" r="10" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="935" cy="700" r="5" fill="#6BADF6" style="fill-opacity:0.3"/>

   <circle cx="1000" cy="680" r="30" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="1000" cy="680" r="20" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="1000" cy="680" r="15" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="1000" cy="680" r="10" fill="#6BADF6" style="fill-opacity:0.3"/>

   <circle cx="1050" cy="710" r="20" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="1050" cy="710" r="10" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="1050" cy="710" r="5" fill="#6BADF6" style="fill-opacity:0.3"/>

   <circle cx="1100" cy="735" r="20" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="1100" cy="735" r="10" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="1100" cy="735" r="5" fill="#6BADF6" style="fill-opacity:0.3"/>

   <circle cx="1200" cy="730" r="20" fill="#6BADF6" style="fill-opacity:0.5"/>
   <circle cx="1200" cy="730" r="10" fill="#6BADF6" style="fill-opacity:0.3"/>
   <circle cx="1200" cy="730" r="5" fill="#6BADF6" style="fill-opacity:0.3"/>
</svg>' > startku.jpg
if [ -f /usr/share/backgrounds/startku.jpg ]; then
   rm /usr/share/backgrounds/startku.jpg
fi
cp startku.jpg /usr/share/backgrounds/startku.jpg&
wallpaper /usr/share/backgrounds/startku.jpg&
defaultimageviewer startku.jpg

The variable USER can reference to $HOSTNAME, but why WIDTH and HEIGHT can't?
How to solve my problem?
Thank you.
Back to top
View user's profile Send private message 
technosaurus


Joined: 18 May 2008
Posts: 4353

PostPosted: Sun 17 Feb 2013, 04:18    Post subject:  

you need to set width and height in the svg tag as in this post:
http://murga-linux.com/puppy/viewtopic.php?p=674581#674581

edit: and its not a jpg

edit2:and you arent using the HEIGHT and WIDTH variables anywhere

_________________
Web Programming - Pet Packaging 100 & 101
Back to top
View user's profile Send private message 
recobayu


Joined: 15 Sep 2010
Posts: 113
Location: indonesia

PostPosted: Sun 17 Feb 2013, 04:48    Post subject:  

thank you technosaurus,
i mean the width and height is at rectangle
if i change
Code:
<rect width="1366" height="768"
   style="fill:rgb(0,0,255)"/>

with
Code:
<rect width="'$WIDTH'" height="'$HEIGHT'"
   style="fill:rgb(0,0,255)"/>

i don't see any rectangle. just black screen with text and circle.
i looked at this thread:
http://murga-linux.com/puppy/viewtopic.php?p=647253#647253
and you can use $BACKGROUND variable in the svg's script. but why in my script don't work?
thank you
Back to top
View user's profile Send private message 
technosaurus


Joined: 18 May 2008
Posts: 4353

PostPosted: Sun 17 Feb 2013, 05:38    Post subject:  

probably because it is the size of your screen. you can make it any size and it will stretch to fill the window if you have the right aspect ratio. removing the title bar is different though, depends on wm settings or modifying the source code
_________________
Web Programming - Pet Packaging 100 & 101
Back to top
View user's profile Send private message 
recobayu


Joined: 15 Sep 2010
Posts: 113
Location: indonesia

PostPosted: Mon 18 Feb 2013, 01:53    Post subject: [SOLVED]  

I got it. I'm sorry, i know what is the problem. My mistake is the delimiter. the code before is:
Code:
WIDTH=$(echo $RES | cut -d 'x' -f1,1)
 HEIGHT=$(echo $RES | cut -d 'x' -f2,3)

and it should be
Code:
WIDTH=$(echo $RES | cut -d ' ' -f1,1)
 HEIGHT=$(echo $RES | cut -d ' ' -f3,3)

i realized this after i copy the echo code to a plain text and i got 'space' in $WIDTH. so the $WIDTH="1366 " and $HEIGHT=" 768". That's why rectangle didn't appear. [/code]
Back to top
View user's profile Send private message 
technosaurus


Joined: 18 May 2008
Posts: 4353

PostPosted: Mon 18 Feb 2013, 13:46    Post subject:  

oK, Too many people have needed this info to have to keep having to hack together an ugly set of sed/grep/tr/cut pipes, so I wrote a helper app in C
Code:
# displayinfo
XWIDTH=1280
XHEIGHT=800
XDEPTH=24
#

time on the static version is ~.002s while the shared version is ~.004s

so to use it in a script just
eval `displayinfo`
echo $XHEIGHT

The attached tarball contains a both a shared and static binary as well as the source code - consider it public domain.

P.S. I may add this to pupngo's xwin/startx via setenv so that the variables are always available.

Edit: if you want something faster without having to install anything

Code:
xwininfo -root 2>&1|awk 'BEGIN{FS=" |x"}/geometry/{split($5,height,"+");print "width=" $4 "\nheight=" height[1]}'


its time is ~0.008s vs xrandr's 1.100s, so much better than xrandr and not _too_ much worse than my little helper
displayinfo.tar.gz
Description  shared version is 3kb, static version is 57kb & source is included
gz

 Download 
Filename  displayinfo.tar.gz 
Filesize  34.83 KB 
Downloaded  142 Time(s) 

_________________
Web Programming - Pet Packaging 100 & 101
Back to top
View user's profile Send private message 
seaside

Joined: 11 Apr 2007
Posts: 887

PostPosted: Mon 18 Feb 2013, 21:13    Post subject:  

technosaurus,

Have you abandoned bash? Very Happy

Code:
eval `xwininfo -root|while read LINE ; do
 case $LINE in   
     Width*) echo ${LINE/: /=};;     
     Height*) echo ${LINE/: /=};;   
      esac;
 done`

0m0.008s and the Width, Height variables are set.

Regards,
s
Back to top
View user's profile Send private message 
technosaurus


Joined: 18 May 2008
Posts: 4353

PostPosted: Tue 19 Feb 2013, 01:03    Post subject:  

nope, I just missed those lines due to the size of my terminal

Edit: here is a shell version
Code:
displayinfo(){
xwininfo -root|while read VAR VALUE; do
case $VAR in
    Height:)echo XHEIGHT=$VALUE;;
    Width:)echo XWIDTH=$VALUE;;
    Depth:)echo XDEPTH=$VALUE;;
esac
done
}


#read can read multiple variables and separates them at $IFS

_________________
Web Programming - Pet Packaging 100 & 101
Back to top
View user's profile Send private message 
linuph


Joined: 03 Jun 2012
Posts: 128
Location: Philippines

PostPosted: Tue 19 Feb 2013, 02:41    Post subject:  

Nice and good programming exercise!

Seaside, no output, but without eval it works:

Code:
#!/bin/sh
xwininfo -root | while read LINE; do
  case $LINE in
    Width*) echo ${LINE/: /=};;
    Height*) echo ${LINE/: /=};;
  esac;
done

real user sys
0.037s 0.010s 0.007s

technosaurus's awk :
real user sys
0.036s 0.007s 0.007s

xrandr doesn't seem THAT slow if done like this:

Code:
#!/bin/sh
xrandr | awk '/*/{split($1,res,"x");print "width="res[1]"\nheight="res[2]}'

real user sys
0.109s 0.010s 0.007s

technosaurus' Displayinfo:
real user sys
0.025s 0.000s 0.013s

techosaurus' Displayinfo-static:
real user sys
0.004s 0.000 0.000

technosaurus' C routines are, of course, the clear winner, timing wise. But is's not quite fair, because the C-routines also print the color depth.

So, lastly, a very short awk routine that also prints the color depth:

Code:
#/bin/sh
xwinfo -root | awk '{ if( NR>7 && NR<11) print $1$2; next }'

real user sys
0.023s 0.007s 0.003s

Timing varies a bit depending on what the system is doing at that point.
Back to top
View user's profile Send private message 
recobayu


Joined: 15 Sep 2010
Posts: 113
Location: indonesia

PostPosted: Tue 19 Feb 2013, 04:47    Post subject:  

linuph wrote:


Code:
#!/bin/sh
xwininfo -root | while read LINE; do
  case $LINE in
    Width*) echo ${LINE/: /=};;
    Height*) echo ${LINE/: /=};;
  esac;
done



Code:
#!/bin/sh
xrandr | awk '/*/{split($1,res,"x");print "width="res[1]"\nheight="res[2]}'



Code:
#/bin/sh
xwininfo -root | awk '{ if( NR>7 && NR<11) print $1$2; next }'



I'm sorry to ask again.
All of that code can showing an output about WIDTH, HEIGHT, and DEPTH. but then when i write echo $HEIGHT or echo $XWIDTH, it doesn't appear anything. I'm still very2 new in programming. How to save to a variable?
Thanks in advance.
Back to top
View user's profile Send private message 
L18L

Joined: 19 Jun 2010
Posts: 2527
Location: Moved from Hosla to www.eussenheim.de

PostPosted: Tue 19 Feb 2013, 07:01    Post subject:  

recobayu wrote:
...All of that code can showing an output about WIDTH, HEIGHT, and DEPTH. but then when i write echo $HEIGHT or echo $XWIDTH, it doesn't appear anything. I'm still very2 new in programming. How to save to a variable?
Thanks in advance.

try
Code:
WIDTH=`xwininfo -root  | awk '{ if( NR==8) print $2; next }'   `

or
Code:
WIDTH=`xrandr 2>/dev/null | awk '/*/{split($1,res,"x");print res[1]}'`
Back to top
View user's profile Send private message 
linuph


Joined: 03 Jun 2012
Posts: 128
Location: Philippines

PostPosted: Tue 19 Feb 2013, 07:50    Post subject:  

These scripts have a name (not shown here). So, if you type the script name in a terminal it will output to screen.

To save the output as a variable, follow L18L's suggestion. If you want to see that variable, you have to type 'echo <variable name>' in a terminal.
Back to top
View user's profile Send private message 
technosaurus


Joined: 18 May 2008
Posts: 4353

PostPosted: Tue 19 Feb 2013, 09:53    Post subject:  

I explained this in the same post that has the displayinfo tarball but I reiterate
when the output is in VAR=VALUE format all you have to do is:
eval `the_function...` #those are back ticks
or
eval $(the_function ...)
or
you may even be able to leave off the eval

_________________
Web Programming - Pet Packaging 100 & 101
Back to top
View user's profile Send private message 
linuph


Joined: 03 Jun 2012
Posts: 128
Location: Philippines

PostPosted: Tue 19 Feb 2013, 11:24    Post subject:  

I believe that $(....) is preferred in stead of back ticks `....`. Am I correct?
Back to top
View user's profile Send private message 
Display posts from previous:   Sort by:   
Page 4 of 5 [63 Posts]   Goto page: Previous 1, 2, 3, 4, 5 Next
Post new topic   Reply to topic View previous topic :: View next topic
 Forum index » Off-Topic Area » Programming
Jump to:  

You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group
[ Time: 0.1354s ][ Queries: 13 (0.0063s) ][ GZIP on ]