From 33c87e08e5617c75e164fc18316264af2f94d64d Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Mon, 15 Jun 2009 13:12:52 +0000 Subject: Add helloworld Lua script git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21289 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/helloworld.lua | 154 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 apps/plugins/helloworld.lua (limited to 'apps/plugins/helloworld.lua') 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) -- cgit v1.2.3