Warning: this is an htmlized version!
The original is here, and
the conversion rules are here.
// This file:
//   http://anggtwu.net/CLUA/foo.c.html
//   http://anggtwu.net/CLUA/foo.c
//          (find-angg "CLUA/foo.c")
//    Skel: (find-luaso-links "~/CLUA/foo.c" "foo")
//  Author: Eduardo Ochs <eduardoochs@gmail.com>
//
// (defun e () (interactive) (find-angg "CLUA/foo.c"))
// (find-books "__comp/__comp.el" "ierusalimschy")
// (find-books "__comp/__comp.el" "ierusalimschy" "247" "IV The C API")

#include "lauxlib.h"
#include <stdio.h>

static int my_foo(lua_State* L) {
  lua_getglobal(L, "myprint");
  // if (!lua_isnil(L, 0)) {
    lua_pushstring(L, "bar");
    lua_call(L, 1, 0);
  // }
  return 0;
  // lua_pushnumber(L, 33);
  // lua_pushnumber(L, 333);
  // return 2;
}

static const struct luaL_reg foo_lib[] = {
  {"foo", my_foo},
  {NULL,  NULL}
};

LUALIB_API int luaopen_foo(lua_State *L) {
  lua_pushvalue(L, LUA_GLOBALSINDEX);
  luaL_openlib(L, NULL, foo_lib, 0);
  return 0;
}

/*
* (eepitch-shell)
* (eepitch-kill)
* (eepitch-shell)
gcc -g -Wall -shared -I/usr/include/lua5.1 -o foo.so foo.c
laf foo*

* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
Path.prependtocpath "~/CLUA/?.so"
require "foo"
foo(42)
myprint = function (s) print("<"..s..">") end
foo(42)

*/