xref: /freebsd/stand/liblua/lpager.c (revision 3e15b01d6914c927e37d1699645783acf286655c)
1*0a0d522bSKyle Evans /*-
2*0a0d522bSKyle Evans  * Copyright (c) 2020 Kyle Evans <kevans@FreeBSD.org>
3*0a0d522bSKyle Evans  *
4*0a0d522bSKyle Evans  * Redistribution and use in source and binary forms, with or without
5*0a0d522bSKyle Evans  * modification, are permitted provided that the following conditions
6*0a0d522bSKyle Evans  * are met:
7*0a0d522bSKyle Evans  * 1. Redistributions of source code must retain the above copyright
8*0a0d522bSKyle Evans  *    notice, this list of conditions and the following disclaimer.
9*0a0d522bSKyle Evans  * 2. Redistributions in binary form must reproduce the above copyright
10*0a0d522bSKyle Evans  *    notice, this list of conditions and the following disclaimer in the
11*0a0d522bSKyle Evans  *    documentation and/or other materials provided with the distribution.
12*0a0d522bSKyle Evans  *
13*0a0d522bSKyle Evans  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14*0a0d522bSKyle Evans  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15*0a0d522bSKyle Evans  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16*0a0d522bSKyle Evans  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17*0a0d522bSKyle Evans  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18*0a0d522bSKyle Evans  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19*0a0d522bSKyle Evans  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20*0a0d522bSKyle Evans  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21*0a0d522bSKyle Evans  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22*0a0d522bSKyle Evans  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23*0a0d522bSKyle Evans  * SUCH DAMAGE.
24*0a0d522bSKyle Evans  */
25*0a0d522bSKyle Evans 
26*0a0d522bSKyle Evans #include <lua.h>
27*0a0d522bSKyle Evans #include "lauxlib.h"
28*0a0d522bSKyle Evans 
29*0a0d522bSKyle Evans /* Open the pager.  No arguments, no return value. */
30*0a0d522bSKyle Evans static int
lpager_open(lua_State * L)31*0a0d522bSKyle Evans lpager_open(lua_State *L)
32*0a0d522bSKyle Evans {
33*0a0d522bSKyle Evans 
34*0a0d522bSKyle Evans 	pager_open();
35*0a0d522bSKyle Evans 	return (0);
36*0a0d522bSKyle Evans }
37*0a0d522bSKyle Evans 
38*0a0d522bSKyle Evans /*
39*0a0d522bSKyle Evans  * Output to the pager.  All arguments are interpreted as strings and passed to
40*0a0d522bSKyle Evans  * pager_output().  No return value.
41*0a0d522bSKyle Evans  */
42*0a0d522bSKyle Evans static int
lpager_output(lua_State * L)43*0a0d522bSKyle Evans lpager_output(lua_State *L)
44*0a0d522bSKyle Evans {
45*0a0d522bSKyle Evans 	const char *outstr;
46*0a0d522bSKyle Evans 	int i;
47*0a0d522bSKyle Evans 
48*0a0d522bSKyle Evans 	for (i = 1; i <= lua_gettop(L); i++) {
49*0a0d522bSKyle Evans 		outstr = luaL_tolstring(L,  i, NULL);
50*0a0d522bSKyle Evans 		pager_output(outstr);
51*0a0d522bSKyle Evans 		lua_pop(L, -1);
52*0a0d522bSKyle Evans 	}
53*0a0d522bSKyle Evans 
54*0a0d522bSKyle Evans 	return (0);
55*0a0d522bSKyle Evans }
56*0a0d522bSKyle Evans 
57*0a0d522bSKyle Evans /* Output to the pager from a file.  Takes a filename, no return value. */
58*0a0d522bSKyle Evans static int
lpager_file(lua_State * L)59*0a0d522bSKyle Evans lpager_file(lua_State *L)
60*0a0d522bSKyle Evans {
61*0a0d522bSKyle Evans 
62*0a0d522bSKyle Evans 	return (pager_file(luaL_checkstring(L, 1)));
63*0a0d522bSKyle Evans }
64*0a0d522bSKyle Evans 
65*0a0d522bSKyle Evans static int
lpager_close(lua_State * L)66*0a0d522bSKyle Evans lpager_close(lua_State *L)
67*0a0d522bSKyle Evans {
68*0a0d522bSKyle Evans 
69*0a0d522bSKyle Evans 	pager_close();
70*0a0d522bSKyle Evans 	return (0);
71*0a0d522bSKyle Evans }
72*0a0d522bSKyle Evans 
73*0a0d522bSKyle Evans static const struct luaL_Reg pagerlib[] = {
74*0a0d522bSKyle Evans 	{ "open", lpager_open },
75*0a0d522bSKyle Evans 	{ "output", lpager_output },
76*0a0d522bSKyle Evans 	{ "file", lpager_file },
77*0a0d522bSKyle Evans 	{ "close", lpager_close },
78*0a0d522bSKyle Evans 	{ NULL, NULL },
79*0a0d522bSKyle Evans };
80*0a0d522bSKyle Evans 
81*0a0d522bSKyle Evans int
luaopen_pager(lua_State * L)82*0a0d522bSKyle Evans luaopen_pager(lua_State *L)
83*0a0d522bSKyle Evans {
84*0a0d522bSKyle Evans 	luaL_newlib(L, pagerlib);
85*0a0d522bSKyle Evans 	return 1;
86*0a0d522bSKyle Evans }
87