diff options
| -rw-r--r-- | pages.c | 38 | ||||
| -rw-r--r-- | pages.h | 1 | 
2 files changed, 38 insertions, 1 deletions
| @@ -463,7 +463,6 @@ createdirectpages(int *posts, size_t totalposts)  	char file[512];  	char source[512]; -	char buff[128];  	for (int x = 1; x < totalposts; x++)  	{  		memset(source, 0, 1); @@ -489,6 +488,40 @@ createdirectpages(int *posts, size_t totalposts)  	}  	return 1;  } +#include <math.h> +char +*generatepagebar(char *bar, size_t size, int *posts, size_t totalposts, int currentpage) +{ +	/* +	 * create a navigation bar for the posts pages highlighting the 'currentpage' link +	 * store it in bar and return it, NULL on error +	 */ +	char buff[size]; +	int i; +	size_t freespace = size; +	/* determine how many pages we need */ +	int pagecount = (totalposts%posts_per_page == 0) ? totalposts/posts_per_page : totalposts/posts_per_page+1; +	/* gross hack, sxprintf returns the number of chars written, keep track of our freespace */ +	freespace -= snprintf(buff, freespace, "<div class='middle'> <a href='%d.html'>prev</a>", (currentpage == 1) ? pagecount : currentpage-1); +	strncat(bar, buff, freespace); +	for (int i = 1; i < pagecount; i++) +	{ +		// FIXME: this doesn't need to be an if/else.. +		if (currentpage == i) +		{ +			freespace -= snprintf(buff, freespace, "<strong><i><a href='%d.html'>%d</a></i></strong> ", i, i); +		} +		else +		{ +			freespace -= snprintf(buff, freespace, "<a href='%d.html'>%d</a> ", i, i); +		} +		strncat(bar, buff, freespace); +	} +	freespace -= snprintf(buff, freespace, "<div class='middle'> <a href='%d.html'>next</a>", (currentpage == pagecount) ? 1 : currentpage+1); +	strncat(bar, buff, freespace); +	printf("%s: %ld pages = %d\n", bar, freespace, pagecount); +	return bar; +}  int  postspage(int flags) @@ -537,11 +570,14 @@ postspage(int flags)  	/* sort posts */  	qsort(posts, totalposts, sizeof(int), postscompare); +	/* create direct link pages */  	if (!createdirectpages(posts, totalposts))  	{  		fprintf(stderr, "unable to create direct post pages, unrecoverable failure\n");  		return 0;  	} +	char pagebar[1024] = {0}; +	generatepagebar(pagebar, 1024, posts, totalposts, 1);  	return 1;  } @@ -43,6 +43,7 @@ int makedirectories(const char *basedir, const char *file);  int postscompare(const void *a, const void *b);  int genericpage(int flags, const char *ind, const char *out, const char *tit, const char *inf);  int createdirectpages(int *posts, size_t totalposts); +char *generatepagebar(char *bar, size_t size, int *posts, size_t totalposts, int currentpage);  /* generators (to be put into the pages array) */  int frontpage(int flags); | 
