Skip to content

Commit

Permalink
Make it a library.
Browse files Browse the repository at this point in the history
  • Loading branch information
eigilhs committed Apr 28, 2017
1 parent fe98efb commit 5a69a06
Show file tree
Hide file tree
Showing 11 changed files with 170 additions and 16 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@
!Makefile
*.o
.depend
lib/
33 changes: 23 additions & 10 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,21 +1,34 @@
APP := example
CFLAGS := -O3
LDLIBS := -levent
CFLAGS := -O3 -Wall -Wextra -Wno-unused-parameter -Iinclude
VPATH := src
PREFIX ?= /usr/local

.PHONY: clean distclean
.PHONY: clean distclean dist install uninstall

$(APP): c-natra.o trie.o
$(APP).o: *.html
lib/libcnatra.a: c-natra.o cn-trie.o | lib
$(AR) cvq $@ $^

.depend: *.[ch]
$(CC) -MM *.c > $@
lib:
mkdir -p $@

install: lib/libcnatra.a | lib include
cp -r $| $(PREFIX)

uninstall:
$(RM) $(addprefix $(PREFIX)/include/, c-natra.h cn-trie.h)
$(RM) $(PREFIX)/lib/libcnatra.a

dist: lib/libcnatra.a | lib include
tar cvJf libcnatra.tar.xz --xform "s,^,libcnatra/," $|

.depend: src/* include/*
$(CC) -Iinclude -MM src/* > $@
sed -i 's/$$/ $(firstword $(MAKEFILE_LIST))/' $@

clean:
$(RM) *.o

distclean: clean
$(RM) $(APP)
$(RM) .depend
$(RM) *.tar.xz .depend
$(RM) -r lib

-include .depend
10 changes: 7 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# C-natra

A Sinatra-style microframework for C. Very inspired by
[Bogart](https://github.com/tyler/Bogart), but even more unsuitable
for serious use (or any use at all).
[Bogart](https://github.com/tyler/Bogart), but probably even more
unsuitable for serious use (or any use at all).

```c
#include "c-natra.h"
#include <c-natra.h>

get("/") {
html("<h1>Hello, World!</h1>");
Expand All @@ -14,3 +14,7 @@ get("/") {

serve(8000)
```
More examples [here](examples/example.c).
Depends on [libevent](https://github.com/libevent/libevent) 2.x.
14 changes: 14 additions & 0 deletions examples/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
APP := example
CFLAGS := -O3 -I../include
LDLIBS := -levent -lcnatra -L../lib

.PHONY: clean distclean all

all: $(APP)
$(APP).o: *.html

clean:
$(RM) *.o

distclean: clean
$(RM) $(APP)
103 changes: 103 additions & 0 deletions examples/blog.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{title}}</title>
<style type="text/css">
html, body {
height: 100%;
}
body {
margin: 0 auto;
display: flex;
align-items: center;
flex-direction: column;
font-family: "Helvetica", "Arial", sans-serif;
font-size: 16pt;
color: #555;
line-height: 1.5;
padding: 4em 1em;
}
h1 {
font-size: 2.5em;
}
h1, h2, strong {
color: #333;
}
a {
color: #e81c4f;
}
code {
font-size: .8em;
}
#container {
max-width: 40em;
display: flex;
flex-flow: row wrap;
min-height: 100vh;
}
#header, #content, #info, #footer {
flex-grow: 1;
flex-basis: 100%;
}
#header {
padding: 10px;
text-align: center;
}
#info {
padding: 10px;
text-align: right;
}
#footer {
padding: 4em;
text-align: center;
}
#content {
padding: 10px;
margin-right: 30px;
}
@media all and (min-width: 800px) {
#content { flex: 3 0px; }
#info { flex: 1 0px; }
}
.title {
font-size: .8em;
font-style: italic;
}
.email {
font-size: .8em;
text-decoration: none;
}
.name {
margin-bottom: 0px;
}
</style>
</head>
<body>
<div id="container">
<div id="header">
{{body}}
</div>
<div id="content">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vel augue convallis, porta magna vel, porttitor nisl. In vel mauris sapien. Vestibulum quis ultrices libero. Nulla a ex vitae mauris viverra ornare sed in mi. Vestibulum at nisi porttitor lacus condimentum suscipit eu quis dolor. Etiam elementum, ligula quis eleifend vehicula, enim nunc ornare felis, ac maximus elit neque quis nisl. Nulla volutpat felis auctor nibh finibus tempor. Vestibulum vitae sagittis dui. Vestibulum et aliquet lacus, pharetra sagittis nulla. Mauris suscipit nunc vitae enim aliquet lobortis. Morbi nec rutrum erat.
</p>
<p>
Etiam vel elit nec nibh sodales pulvinar imperdiet eget tellus. Suspendisse potenti. Aliquam a nisi non lacus consectetur laoreet non in metus. Vestibulum sed magna enim. Proin condimentum nisl ac odio tempor mollis. Aliquam erat volutpat. Sed eu lacus erat. Morbi ipsum libero, auctor ut aliquam quis, mattis ut nisl. Etiam viverra neque eget vestibulum tincidunt. Nunc gravida tempor dolor id luctus. Pellentesque ullamcorper aliquam justo, sit amet feugiat diam ullamcorper et. Interdum et malesuada fames ac ante ipsum primis in faucibus. Suspendisse iaculis sem sit amet odio vehicula scelerisque.
</p>
<p>
Nullam tellus eros, fermentum et nisl non, pretium facilisis metus. Nullam tortor lectus, vehicula vitae purus at, fringilla varius massa. Etiam tempus ultricies massa quis cursus. Maecenas eros risus, faucibus sed risus dapibus, fermentum tincidunt sem. Quisque nisl diam, feugiat vel justo quis, tristique vehicula ex. Proin at rhoncus dui, vitae mattis ligula. Nunc hendrerit vitae dui eget facilisis. Pellentesque faucibus nulla at arcu fermentum vehicula. Proin et auctor mi. Etiam sit amet tellus consectetur, eleifend ipsum eget, ultrices sapien. Aliquam vitae est eu elit gravida pulvinar. Duis venenatis arcu eget tristique scelerisque.
</p>
</div>
<div id="info">
<h3 class="name">Some Dudette</h3>
<div class="title">Software Engineer at Some Company</div>
<a class="email" href="mailto:[email protected]">[email protected]</a>
</div>
<div id="footer">
Some Company © 2017
</div>
</div>
</body>
</html>
20 changes: 19 additions & 1 deletion example.c → examples/example.c
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
#include "c-natra.h"
#include <c-natra.h>


get("/") {
html("<h1>Hello, World!</h1>");
return HTTP_OK;
}

get("/private") {
set_header("Location", "/login");
return HTTP_FOUND;
}

get("/login") {
html("<h1>Please log in</h1>");
return HTTP_OK;
}

put("/user/:name") {
html("<p>User '%s' created.</p>", params("name"));
return HTTP_CREATED;
Expand All @@ -22,6 +32,14 @@ get("/template") {
return HTTP_OK;
}

get("/blog") {
view("blog.html", map("title", "On the usage of spinlocks in "
"ULTRIX and System V",
"body", "<h1>On the usage of spinlocks in"
" ULTRIX and System V</h1>"));
return HTTP_OK;
}

get("/search") {
html("<h1>Searching for %s ...</h1>", query("q"));
return HTTP_OK;
Expand Down
File renamed without changes.
3 changes: 2 additions & 1 deletion c-natra.h → include/c-natra.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#include <event2/buffer.h>
#include <event2/keyvalq_struct.h>
#include <alloca.h>
#include "trie.h"
#include "cn-trie.h"


#define _HANDLER2(PATTERN, METHOD, ID) \
Expand Down Expand Up @@ -89,6 +89,7 @@ extern struct handler *__start_handlers[], *__stop_handlers[];
#define HTTP_RESETCONTENT 205
#define HTTP_PARTIALCONTENT 206
#define HTTP_MULTIPLECHOICES 300
#define HTTP_FOUND 302
#define HTTP_SEEOTHER 303
#define HTTP_USEPROXY 305
#define HTTP_TEMPORARYREDIRECT 307
Expand Down
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion trie.c → src/cn-trie.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include <stdlib.h>
#include "trie.h"
#include "cn-trie.h"

struct trie *trie_new(void)
{
Expand Down

0 comments on commit 5a69a06

Please sign in to comment.