summaryrefslogtreecommitdiffstats
path: root/apps/plugins/helloworld.lua
diff options
context:
space:
mode:
authorMaurus Cuelenaere <mcuelenaere@gmail.com>2009-06-15 13:12:52 +0000
committerMaurus Cuelenaere <mcuelenaere@gmail.com>2009-06-15 13:12:52 +0000
commit33c87e08e5617c75e164fc18316264af2f94d64d (patch)
tree6a70d3cc39aac60cab9093125a647898c9acdbfe /apps/plugins/helloworld.lua
parent733bab08869f1813a3212d97f1bde352916dfb67 (diff)
downloadrockbox-33c87e08e5617c75e164fc18316264af2f94d64d.tar.gz
rockbox-33c87e08e5617c75e164fc18316264af2f94d64d.tar.bz2
rockbox-33c87e08e5617c75e164fc18316264af2f94d64d.zip
Add helloworld Lua script
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21289 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/helloworld.lua')
-rw-r--r--apps/plugins/helloworld.lua154
1 files changed, 154 insertions, 0 deletions
diff --git a/apps/plugins/helloworld.lua b/apps/plugins/helloworld.lua
new file mode 100644
index 0000000000..fcdd4de026
--- /dev/null
+++ b/apps/plugins/helloworld.lua
@@ -0,0 +1,154 @@
+--[[
+ __________ __ ___.
+ Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ \/ \/ \/ \/ \/
+ $Id$
+
+ Example Lua script
+
+ Copyright (C) 2009 by Maurus Cuelenaere
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ KIND, either express or implied.
+
+]]--
+
+dofile("actions.lua") -- Contains rb.actions & rb.contexts
+
+-- Example function which splashes a message for x seconds
+function sayhello(seconds)
+ message = string.format("Hello world from LUA for %d seconds", seconds)
+ rb.splash(seconds * rb.HZ, message)
+end
+
+-- Helper function which draws a transparent image at the center of the screen
+function draw_image(img)
+ local x, y = (rb.LCD_WIDTH - img:width()) / 2, (rb.LCD_HEIGHT - img:height()) / 2
+ rb.lcd_bitmap_transparent_part(img, 0, 0, img:width(), x, y, img:width(), img:height())
+ rb.lcd_update()
+end
+
+-- Helper function that acts like a normal printf() would do
+line = 0
+function printf(...)
+ local msg = string.format(...)
+ local res, w, h = rb.font_getstringsize(msg, rb.FONT_UI)
+
+ if(w >= rb.LCD_WIDTH) then
+ rb.lcd_puts_scroll(0, line, msg)
+ else
+ rb.lcd_puts(0, line, msg)
+ end
+ rb.lcd_update()
+
+ line = line + 1
+
+ if(h * line >= rb.LCD_HEIGHT) then
+ line = 0
+ end
+end
+
+-- Helper function which reads the contents of a file
+function file_get_contents(filename)
+ if(not rb.file_exists(filename)) then
+ return nil
+ end
+
+ local fd = rb.open(filename, rb.O_RDONLY)
+ if(fd == -1) then
+ return nil
+ end
+
+ local contents = rb.read(fd, rb.filesize(fd))
+ rb.close(fd)
+
+ return contents
+end
+
+-- Helper function which saves contents to a file
+function file_put_contents(filename, contents)
+ local flags = rb.O_WRONLY
+ if(rb.file_exists(filename)) then
+ flags = bit.bor(flags, rb.O_APPEND) -- binary OR O_APPEND if the file exists
+ else
+ flags = bit.bor(flags, rb.O_CREAT) -- binary OR O_CREAT if the file doesn't exist
+ end
+
+ local fd = rb.open(filename, flags)
+ if(fd == -1) then
+ return false
+ end
+
+ local ret = rb.write(fd, contents) ~= string.len(contents)
+ rb.close(fd)
+ return ret
+end
+
+-- Clear the screen
+rb.lcd_clear_display()
+
+-- Draw an X on the screen
+rb.lcd_drawline(0, 0, rb.LCD_WIDTH, rb.LCD_HEIGHT)
+rb.lcd_drawline(rb.LCD_WIDTH, 0, 0, rb.LCD_HEIGHT)
+
+local rectangle = rb.new_image(10, 15) -- Create a new image with width 10 and height 15
+for i=1, 10 do
+ for j=1, 15 do
+ rectangle:set(i, j, rb.lcd_rgbpack(200, i*20, j*20)) -- Set the pixel at position i, j to the specified color
+ end
+end
+
+-- rb.lcd_bitmap_part(src, src_x, src_y, stride, x, y, width, height)
+rb.lcd_bitmap_part(rectangle, 0, 0, 10, rb.LCD_WIDTH/2-5, rb.LCD_HEIGHT/10-1, 10, 10) -- Draws our rectangle at the top-center of the screen
+
+-- Load a BMP file in the variable backdrop
+local backdrop = rb.read_bmp_file("/.rockbox/icons/tango_small_viewers.bmp") -- This image should always be present?
+-- Draws the image using our own draw_image() function; see up
+draw_image(backdrop)
+
+-- Flush the contents from the framebuffer to the LCD
+rb.lcd_update()
+
+-- Sleep for 2 seconds
+seconds = 2
+rb.sleep(seconds * rb.HZ) -- rb.HZ equals to the amount of ticks that fit in 1 second
+
+-- Call the function sayhello() with arguments seconds
+sayhello(seconds)
+
+-- Clear display
+rb.lcd_clear_display()
+
+-- Construct a pathname using the current path and a file name
+local pathname = rb.current_path() .. "test.txt"
+
+-- Put the string 'Hello from Lua!' in pathname
+file_put_contents(pathname, "Hello from Lua!")
+
+-- Splash the contents of pathname
+printf(file_get_contents(pathname))
+
+line = line + 1 -- empty line
+
+-- Display some long lines
+local tmp = ""
+for i=1, 5 do
+ printf("This is a %s long line!", tmp)
+ tmp = tmp .. " very very very"
+ rb.yield()
+end
+
+-- Loop until the user exits the program
+repeat
+ local action = rb.get_action(rb.contexts.CONTEXT_STD, rb.HZ)
+until action == rb.actions.ACTION_STD_CANCEL
+
+-- For a reference list of all functions available, see apps/plugins/lua/rocklib.c (and apps/plugin.h)