From owner-svn-src-projects@FreeBSD.ORG Wed Apr 1 05:55:04 2015 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id E165F5C8; Wed, 1 Apr 2015 05:55:04 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CD1C22C9; Wed, 1 Apr 2015 05:55:04 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t315t4EE067099; Wed, 1 Apr 2015 05:55:04 GMT (envelope-from rpaulo@FreeBSD.org) Received: (from rpaulo@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t315t4kJ067097; Wed, 1 Apr 2015 05:55:04 GMT (envelope-from rpaulo@FreeBSD.org) Message-Id: <201504010555.t315t4kJ067097@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: rpaulo set sender to rpaulo@FreeBSD.org using -f From: Rui Paulo Date: Wed, 1 Apr 2015 05:55:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r280947 - projects/lua-bootloader/sys/boot/common X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Apr 2015 05:55:05 -0000 Author: rpaulo Date: Wed Apr 1 05:55:03 2015 New Revision: 280947 URL: https://svnweb.freebsd.org/changeset/base/280947 Log: Parse lines as loader commands if we could not parse it as Lua. This lets us type 'reset', 'boot', etc. in the interpreter. Forth has an advantage here because it compiles the loader commands as verbs, so it automatically executes Forth verbs (functions). The loader command syntax is very different from Lua syntax, so this workaround should be good enough. Modified: projects/lua-bootloader/sys/boot/common/interp_lua.c Modified: projects/lua-bootloader/sys/boot/common/interp_lua.c ============================================================================== --- projects/lua-bootloader/sys/boot/common/interp_lua.c Wed Apr 1 05:46:57 2015 (r280946) +++ projects/lua-bootloader/sys/boot/common/interp_lua.c Wed Apr 1 05:55:03 2015 (r280947) @@ -88,12 +88,26 @@ interp_lua_run(void *data, const char *l struct interp_lua_softc *softc; int argc, ret; char **argv; + char loader_line[128]; + int status; + int len; softc = data; luap = softc->luap; - LDBG("running line..."); - if (ldo_string(luap, line, strlen(line)) != 0) - printf("failed to parse \'%s\'\n", line); + LDBG("executing line..."); + if ((status = ldo_string(luap, line, strlen(line))) != 0) { + /* + * If we could not parse the line as Lua syntax, + * try parsing it as a loader command. + */ + len = snprintf(loader_line, sizeof(loader_line), + "loader.perform(\"%s\")", line); + if (len > 0) + status = ldo_string(luap, loader_line, + len + 1); + } + if (status != 0) + printf("Failed to parse \'%s\'\n", line); return (0); }