/*
bluenh-cgi.c
Online interface for npb
-04.12.2022
+05.12.2022
Copyright (C) 2013, 2014, 2022 Balthasar Szczepański
pid_t sub;
int r;
- snprintf(s_a, 4, "%"SCNuFAST8, a);
- snprintf(s_b, 4, "%"SCNuFAST8, b);
- snprintf(s_c, 4, "%"SCNuFAST8, c);
- snprintf(s_d, 4, "%"SCNuFAST8, d);
- snprintf(s_e, 4, "%"SCNuFAST8, e);
- snprintf(s_f, 4, "%"SCNuFAST8, f);
+ snprintf(s_a, 4, "%"PRIuFAST8, a);
+ snprintf(s_b, 4, "%"PRIuFAST8, b);
+ snprintf(s_c, 4, "%"PRIuFAST8, c);
+ snprintf(s_d, 4, "%"PRIuFAST8, d);
+ snprintf(s_e, 4, "%"PRIuFAST8, e);
+ snprintf(s_f, 4, "%"PRIuFAST8, f);
sub = fork();
if (sub == 0)
<form method="post" action="/enhance/bluenh" enctype='multipart/form-data'>
<img src="param.png" alt="parameter explanation picture"><br>
<br>
- a=<input class="pt" type="text" name="a" value= "0">, b=<input class="pt" type="text" name="b" value= "34">, c=<input class="pt" type="text" name="c" value= "41">,<br>
- d=<input class="pt" type="text" name="d" value= "0">, e=<input class="pt" type="text" name="e" value= "40">, f=<input class="pt" type="text" name="f" value="255">.<br>
+ a=<input class="pt" type="text" name="a" value= "0" size="3">, b=<input class="pt" type="text" name="b" value= "34" size="3">, c=<input class="pt" type="text" name="c" value= "41" size="3">,<br>
+ d=<input class="pt" type="text" name="d" value= "0" size="3">, e=<input class="pt" type="text" name="e" value= "40" size="3">, f=<input class="pt" type="text" name="f" value="255" size="3">.<br>
a < b < c<br>
<br>
Enhance by URL<br>
/*
diff-cgi.c
The online interface for the differential tool
-04.12.2022
+05.12.2022
Copyright (C) 2022 Balthasar Szczepański
pid_t sub;
int r;
- snprintf(s_ra, 4, "%"SCNuFAST8, ra);
- snprintf(s_ga, 4, "%"SCNuFAST8, ga);
- snprintf(s_ba, 4, "%"SCNuFAST8, ba);
- snprintf(s_rb, 4, "%"SCNuFAST8, rb);
- snprintf(s_gb, 4, "%"SCNuFAST8, gb);
- snprintf(s_bb, 4, "%"SCNuFAST8, bb);
+ snprintf(s_ra, 4, "%"PRIuFAST8, ra);
+ snprintf(s_ga, 4, "%"PRIuFAST8, ga);
+ snprintf(s_ba, 4, "%"PRIuFAST8, ba);
+ snprintf(s_rb, 4, "%"PRIuFAST8, rb);
+ snprintf(s_gb, 4, "%"PRIuFAST8, gb);
+ snprintf(s_bb, 4, "%"PRIuFAST8, bb);
sub = fork();
if (sub == 0)
File 2: <input class="pt" type="file" name="inpixf1"><br>
<br>
Color A:<br>
- R=<input class="pt" type="text" name="ra" value= "0">, G=<input class="pt" type="text" name="ga" value= "87">, B=<input class="pt" type="text" name="ba" value="175"><br>
+ R=<input class="pt" type="text" name="ra" value= "0" size="3">, G=<input class="pt" type="text" name="ga" value= "87" size="3">, B=<input class="pt" type="text" name="ba" value="175" size="3"><br>
Color B:<br>
- R=<input class="pt" type="text" name="rb" value="187">, G=<input class="pt" type="text" name="gb" value="102">, B=<input class="pt" type="text" name="bb" value= "34"><br>
+ R=<input class="pt" type="text" name="rb" value="187" size="3">, G=<input class="pt" type="text" name="gb" value="102" size="3">, B=<input class="pt" type="text" name="bb" value= "34" size="3"><br>
<br>
<input class="pk" type="submit" value="ENHANCE!"><br>
</form>
\ No newline at end of file
ScriptAlias /enhance/bluenh ###CONF_bluenh;
ScriptAlias /enhance/diff ###CONF_diff;
ScriptAlias /enhance/nofading ###CONF_nofading;
+ScriptAlias /enhance/npb ###CONF_npb;
ScriptAlias /enhance/reveal ###CONF_reveal;
<Directory ###CONF_bin;>
# legacy redirections
Redirect permanent /pro/npb/npb.htm /enhance/npb.htm
-Redirect permanent /pro/npb/403.htm /enhance/403.htm
+Redirect permanent /pro/npb/403.htm /enhance/npb.htm
Redirect permanent /pro/bluenh/bluenh.htm /enhance/bluenh.htm
Redirect permanent /pro/nofading/nofading.htm /enhance/nofading.htm
-Redirect permanent /pro/nofading/insertframe.htm /enhance/pal.htm
-Redirect permanent /pro http://bicyclesonthemoon.info/git-projects/?p=ott/enhance&
\ No newline at end of file
+Redirect permanent /pro/insertframe/insertframe.htm /enhance/pal.htm
+Redirect permanent /pro /enhance?
\ No newline at end of file
# "makefile" is automatically generated from "makefile.1.mak"
-# 04.12.2022
+# 05.12.2022
#
# Copyright (C) 2022 Balthasar Szczepański
#
nh.h\
nf.h\
rvl.h\
-df.h
+df.h\
+mpb.h\
+mpb_503.h
CGI=\
bluenh-cgi\
nofading-cgi\
reveal-cgi\
-diff-cgi
+diff-cgi\
+npb-cgi
HTM_CGI=\
bluenh.htm\
nofading.htm\
reveal.htm\
-diff.htm
+diff.htm\
+npb.htm
HTM_CGI_1=\
bluenh.1.htm\
nofading.1.htm\
reveal.1.htm\
-diff.1.htm
+diff.1.htm\
+npb.1.htm
# keep these 2 lists in the same order!:
GENERATE_FROM=\
# "makefile" is automatically generated from "makefile.1.mak"
-# 04.12.2022
+# 05.12.2022
#
# Copyright (C) 2022 Balthasar Szczepański
#
nh.h\
nf.h\
rvl.h\
-df.h
+df.h\
+mpb.h\
+mpb_503.h
CGI=\
bluenh-cgi\
nofading-cgi\
reveal-cgi\
-diff-cgi
+diff-cgi\
+npb-cgi
HTM_CGI=\
bluenh.htm\
nofading.htm\
reveal.htm\
-diff.htm
+diff.htm\
+npb.htm
HTM_CGI_1=\
bluenh.1.htm\
nofading.1.htm\
reveal.1.htm\
-diff.1.htm
+diff.1.htm\
+npb.1.htm
# keep these 2 lists in the same order!:
GENERATE_FROM=\
-// // //Download images and add
- // // Newpixbots to them! (or Megans)
- // //
- // // Requires cgilib
-// // //line 146 of cgi.h
- // // must be changed
- // // from "extern }"
- // // to "}"
-// // //
- // // ~~bicyclesonthemoon
+/*
+npb-cgi.c
+Download images and add Newpixbots to them! (or Megans)
+05.12.2022
+
+Copyright (C) 2013, 2014, 2022 Balthasar Szczepański
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Requires cgilib (http://www.infodrom.org/projects/cgilib/)
+*/
-#include <cgi.h>
#include <stdio.h>
-#include <stdlib.h>
+#include <stdint.h>
#include <unistd.h>
-#include <string.h>
+#include <stdlib.h>
#include <sys/wait.h>
-#include <sys/stat.h>
+#include <stdint.h>
+#include <inttypes.h>
-#define WGET_PATH "/usr/bin/wget"
-#define NPB_PATH "./npb"
-#define MEG_PATH "./403"
-#define RM_PATH "/bin/rm"
-#define LOG_PATH "/eizm/log/npb/npb.log"
-#define LOG_PATH2 "/eizm/log/npb/403.log"
-#define USERAGENT "NewpixbOTTification\x20(1190.bicyclesonthemoon.dnsd.info/npb/npb.htm)"
-#define USERAGENT2 "403fication\x20(1190.bicyclesonthemoon.dnsd.info/npb/403.htm)"
-#define MSTD_PATH "/pro/npb/mpb.png"
-#define MSTD_PATH2 "/pro/npb/503.png"
+#include <cgi.h>
-int main (int argc, char *argv[]);
-void mustard(int mustard);
+#include "online-core.h"
+#include "mpb.h"
+#include "mpb_503.h"
-FILE *pix;
-unsigned char buf[1024];
-char url[1024];
-char path[256];
-char method[256];
-s_cgi *cgi;
-int t;
-pid_t sub;
-struct stat st;
-unsigned long p;
-unsigned short q;
-char **up;
-bool meg=false;
+
+int npb (
+ char *inpix, char *outpix,
+ uint_fast8_t remove_border, uint_fast32_t remove_border_width,
+ uint_fast8_t new_border, uint_fast32_t new_border_width,
+ uint_fast8_t external_border, uint_fast32_t external_border_width,
+ uint_fast8_t corners, uint_fast8_t ong1, uint8_t t403
+);
int main (int argc, char *argv[])
{
- cgi=cgiInit();
+ s_cgi *cgi;
+ char in_tmp[256];
+ char out_tmp[256];
+ char *in_path;
+ char *t;
+ uint_fast8_t remove_border, new_border, external_border, corners, ong1;
+ uint_fast32_t remove_border_width, new_border_width, external_border_width;
+ uint_fast8_t t403 = 0;
- sprintf(path,"%s",(getenv("PATH_INFO")!=NULL)?(getenv("PATH_INFO")):"");
- if(strcmp(path,"/403")==0)
- {
- meg=true;
- //mustard(0);
- }
+ int r=0;
+ int r1=0;
+ int r2=0;
+ int r3=0;
- up=cgiGetFiles(cgi);
- if (up)
- {
- sprintf(path,"%s",cgiGetFile(cgi,up[0])->tmpfile);
- sprintf(url,"%s",cgiGetFile(cgi,up[0])->filename);
- }
- else
- {
- sprintf(url,"%s",(cgiGetValue(cgi,"inpix")!=NULL)?(cgiGetValue(cgi,"inpix")):"");
- sprintf(path,"/var/tmp/%lu",(unsigned long)getpid());
+ do {
+ make_tmp_path(in_tmp, 256, 0, "");
+ make_tmp_path(out_tmp, 256, 1, ".png");
+
+ cgi=cgiInit();
- //Why is there no spawnl() in linux?
- sub=fork();
- if(sub==0)
+ r = get_file(cgi,"inpix2", in_tmp, &in_path);
+ if (r)
+ r = get_file(cgi,"inpix", in_tmp, &in_path);
+ if (r)
+ break;
+
+ remove_border = (cgiGetValue(cgi, "r")!=NULL) ? 1 : 0;
+ external_border = (cgiGetValue(cgi, "e")!=NULL) ? 1 : 0;
+ new_border = (cgiGetValue(cgi, "b")!=NULL) ? 1 : 0;
+ corners = (cgiGetValue(cgi, "c")!=NULL) ? 1 : 0;
+ ong1 = (cgiGetValue(cgi, "o")!=NULL) ? 1 : 0;
+ t403 = (cgiGetValue(cgi, "4")!=NULL) ? 1 : 0;
+
+ if (remove_border)
{
- t=execl(WGET_PATH,WGET_PATH,"-q","-t","2","-U",meg?USERAGENT2:USERAGENT,"-O",path,url,(char *)0);
- exit(t);
+ t = cgiGetValue(cgi, "rw");
+ if (t != NULL)
+ sscanf(t,"%"SCNuFAST32, &remove_border_width);
+ else
+ remove_border_width = 0;
}
- waitpid(sub,&t,0);
- if(t)mustard(t);
- }
-
- sub=fork();
- if(sub==0)
- {
- t=execl(meg?MEG_PATH:NPB_PATH,meg?MEG_PATH:NPB_PATH,path,path,"q",(char *)0);
- exit(t);
- }
- waitpid(sub,&t,0);
- if(t)mustard(t);
-
- pix=fopen(path,"rb");
- if(pix==NULL)
- mustard(123);
- fstat(fileno(pix),&st);
- p=st.st_size/1024;
- q=st.st_size%1024;
-
- printf("Content-Length: %lu\n",(unsigned long)(st.st_size));
- printf("Content-type: image/png\n\n");
- for(unsigned long i=0;i<p;++i)
- {
- fread(buf,1,1024,pix);
- fwrite(buf,1,1024,stdout);
- }
- if(q!=0)
+
+ if (external_border)
+ {
+ t = cgiGetValue(cgi, "ew");
+ if (t != NULL)
+ sscanf(t,"%"SCNuFAST32, &external_border_width);
+ else
+ external_border_width = 0;
+ }
+
+ if (new_border)
+ {
+ t = cgiGetValue(cgi, "bw");
+ if (t != NULL)
+ sscanf(t,"%"SCNuFAST32, &new_border_width);
+ else
+ new_border_width = 0;
+ }
+
+ r = npb(
+ in_path, out_tmp,
+ remove_border, remove_border_width,
+ new_border, new_border_width,
+ external_border, external_border_width,
+ corners, ong1, t403
+ );
+ if (r)
+ break;
+
+ r1 = send_file(out_tmp, "image/png", 0);
+ } while (0);
+ if (r)
{
- fread(buf,1,q,pix);
- fwrite(buf,1,q,stdout);
+ r1 = send_data(
+ t403 ? mpb_503 : mpb,
+ t403 ? mpb_503_size : mpb_size,
+ "image/png",
+ 500
+ );
}
- fclose(pix);
- fflush(stdout);
- mustard(0);//no mustard
+ r2 = rm(in_tmp);
+ r3 = rm(out_tmp);
+ if (r)
+ return r;
+ if (r1)
+ return r1;
+ if (r2)
+ return r2;
+ if (r3)
+ return r3;
+ return 0;
}
-void mustard(int mustard)
+int npb (
+ char *inpix, char *outpix,
+ uint_fast8_t remove_border, uint_fast32_t remove_border_width,
+ uint_fast8_t new_border, uint_fast32_t new_border_width,
+ uint_fast8_t external_border, uint_fast32_t external_border_width,
+ uint_fast8_t corners, uint_fast8_t ong1, uint8_t t403
+)
{
- if(mustard)
- {
- cgiRedirect(meg?MSTD_PATH2:MSTD_PATH);
- }
- sub=fork();
- if(sub==0)
- {
- t=execl(RM_PATH,RM_PATH,"-f",path,(char *)0);
- exit(t);
- }
- waitpid(sub,&t,0);
- pix=fopen(meg?LOG_PATH2:LOG_PATH,"at");
- if(pix!=NULL)
+ char s_rw[13] = "-0";
+ char s_bw[13] = "-0";
+ char s_ew[13] = "-0";
+
+ pid_t sub;
+ int r;
+
+ if (remove_border)
+ snprintf(s_rw, 13, "-r%"PRIuFAST32, remove_border_width);
+ if (new_border)
+ snprintf(s_bw, 13, "-b%"PRIuFAST32, new_border_width);
+ if (external_border)
+ snprintf(s_ew, 13, "-e%"PRIuFAST32, external_border_width);
+
+ sub = fork();
+ if (sub == 0)
{
- fprintf(pix,"%x %s\n",mustard,url);
- fclose(pix);
+ r = execl(
+ NPB_PATH, NPB_PATH,
+ s_rw, s_ew, s_bw,
+ corners ? "-c" : "-0",
+ ong1 ? "-o" : "-0",
+ t403 ? "-4" : "-0",
+ inpix, outpix,
+ (char *)0
+ );
+ exit(r);
}
- exit(mustard);
-}
\ No newline at end of file
+ waitpid(sub, &r, 0);
+ return r;
+}
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
-<html lang="pl">
- <head>
- <title>It's NewpixbOTTification time! • Bicycles on the Moon</title>
- <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2">
- <link rel="icon" type="image/png" href="/img/favicon.png"/>
- </head>
- <body>
- <a href="/"><img src="/img/botmlogo2.png" alt="1190.bicyclesonthemoon.dnsd.info" border="0"></a>
<h1>It's NewpixbOTTification time!</h1>
- <form method="post" action="/cgi/npb/npbd">
+ <form method="post" action="/enhance/npb" enctype="multipart/form-data">
NewpixbOTTify by URL<br>
URL of image:
- <input type="text" name="inpix">
- <input type="submit" value="NewpixbOTTify!">
- </form>
- <br>
- <form method="post" action="/cgi/npb/npbd" enctype="multipart/form-data">
+ <input class="pt" type="text" name="inpix2">
+ <br>
NewpixbOTTify by file upload<br>
Upload the image:
- <input type="file" name="inpix">
- <input type="submit" value="NewpixbOTTify!">
+ <input class="pt" type="file" name="inpix">
+ <br>
+ <input type="checkbox" class="pt" name="r"> remove original border,
+ width: <input class="pt" type="text" name="rw" size="2">
+ <br>
+ <input type="checkbox" class="pt" name="b"> new border,
+ width: <input class="pt" type="text" name="bw" size="2">
+ <br>
+ <input type="checkbox" class="pt" name="e"> external border,
+ width: <input class="pt" type="text" name="ew" size="2">
+ <br>
+ <input type="checkbox" class="pt" name="c"> corners
+ <br>
+ <input type="checkbox" class="pt" name="o"> bOTTeriada Newpixbot
+ <br>
+ <input type="checkbox" class="pt" name="4"> Timeframe 403
+ <br>
+ <br>
+ <input class="pt" type="submit" value="NewpixbOTTify!">
</form>
- <br>
- Source code available at <a href="svn://bicyclesonthemoon.dnsd.info/npb">svn://bicyclesonthemoon.dnsd.info/npb</a> (use "e" to login) or <a href="http://1190.bicyclesonthemoon.dnsd.info/pro/npb">http://1190.bicyclesonthemoon.dnsd.info/pro/npb</a>.
-
- </body>
-</html>
/*
npb.c
Take a picture and add a newpixbot to it!
-30.11.2022
+05.12.2022
Copyright (C) 2013 - 2015, 2022 Balthasar Szczepański
{"help", no_argument, NULL, 'h'},
{0, 0, 0, 0}
};
- char short_options[] = "o4r:b:e:ch";
+ char short_options[] = "o4r:b:e:ch0";
int opt;
int r;
space_t = NPB0_T;
space_b = NPB0_B;
fill_white = 1;
+ override_new_border = 1;
new_border = 0;
npb_after = 1;
fixed_frame = 1;
space_t = NPB1_T;
space_b = NPB1_B;
fill_white = 1;
+ override_new_border = 1;
new_border = 0;
npb_after = 1;
fixed_frame = 1;
r = perform_action_1picture(
2, //id
- fixed_frame ? space_l : x0_content_global, //x0
- fixed_frame ? space_t : y0_content_global, //y0
+ fixed_frame ? space_l + external_border : x0_content_global, //x0
+ fixed_frame ? space_t + external_border: y0_content_global, //y0
0, //f0
fixed_frame ? (space_r - space_l + 1) : width_content, //width
fixed_frame ? (space_b - space_t + 1) : height_content, //height
title_diff: See the difference!
title_enhance: ENHANCE!
title_nofading: No fading!
+title_npb: It's NewpixbOTTification time!
title_reveal: Reveal hidden detail!
bin_path: /botm/bin/enhance
CONF_bluenh = $_bin_bluenh_cgi_path
CONF_diff = $_bin_diff_cgi_path
CONF_nofading = $_bin_nofading_cgi_path
+CONF_npb = $_bin_npb_cgi_path
CONF_reveal = $_bin_reveal_cgi_path