Edellisestä postista muodostui oikea TLDR-paketti (https://moijari.com/?p=1256) , ja ajattelinkin kirjoittaa lyhyempiä kappaleita sen “valmiista” osista. Toinen TLDR-paketti: (https://moijari.com/?p=964).
Suurimpia asioita tertussa on se, että saatiin aikaan toimiva kyselymalli, ja https- ja http- palvelimet, eli DBS osuus ovat pitkällä, Myös DB osuus on periaatteessa toimiva pientä tietokantaa varten. Käännöksistä saatiin ensimmäiset ideat. Db-osuuteen voi tietenkkin tulla lisäasioita sovelluksen puolelta kuten summaus. Save yms vielä puuttuu. Muutamassa seuraavassa postissa kuitenkin toimivat uudet osuudet lukukelpoisemmissa listoissa.
Aluksi uusi printf rutiini:
int html_now = 0;
unsigned char *html[] = { NULL, NULL, NULL, NULL, NULL };
int html_size[] = { 0, 0, 0, 0, 0 };
Html_now kenttä sisältää tämän hetken käytössä olevan puskurin numeron. Html kenttä sisältää kaikkien viiden puskurien sisältämän merkkijonon ja html_size kenttä sisältää kaikkien viiden puskurin allokoidun koon.
void html_set(int bufno)
{
html_now=bufno;
if(html[bufno]==NULL) {
html_size[bufno] = 10;
html[bufno]=malloc(html_size[bufno]);
}
}
Html_set rutiinilla valitaan puskurinumero, johon seuraavat printf lauseet tulostavat merkkijonon.
int html_get()
{
return(html_now);
}
Html get rutiini palauttaa puskurin numeron, johon seuraava printf lause tulostuu.
unsigned char *html_get_string(int bufno)
{
return(html[bufno]);
}
Html_get_string rutiini palauttaa valitussa puskurissa olevan merkkijonon.
void html_clear()
{
html_set(html_now);
html[html_now][0]='\0';
}
Html_clear tyhjentää tämän hetkisen puskurin.
void html_clear_all()
{
int c;
for(c=0;c<HTML_BUFFERS;c++) {
html_set(c);
html_clear();
}
}
Html_clear_all tyhjentää kaikki puskurit.
static void html_printf_valist(const char *format, va_list ap)
{
int count;
static char *printbuf=NULL;
static int printbuf_len=0;
va_list ap2;
va_copy(ap2,ap);
count=vsnprintf(printbuf, printbuf_len, format, ap) + 1;
if(printbuf_len < count) {
printbuf_len = count;
printbuf=realloc(printbuf, printbuf_len);
count=vsnprintf(printbuf, printbuf_len, format, ap2) + 1;
}
if(html_size[html_now] <
strlen(html[html_now]) +
strlen(printbuf) + 1) {
html_size[html_now] =
strlen(html[html_now]) +
strlen(printbuf) + 1;
html[html_now] = realloc(html[html_now], html_size[html_now]);
}
strcpy(html[html_now]+strlen(html[html_now]), printbuf);
}
html_printf_valist on apufunktio kahdelle viimeiselle printf rutiinille.
void html_printf(const char *format, ...)
{
va_list args;
va_start(args, format);
html_printf_valist(format, args);
va_end(args);
}
html_printf rutiini tulostaa tämänhetkiseen puskuriin merkkijonon.
void html_buf_printf(int bufno, const char *format, ...)
{
int save_html;
va_list args;
save_html=html_get();
html_set(bufno);
va_start(args, format);
html_printf_valist(format, args);
va_end(args);
html_set(save_html);
}
Ja tämä viimeinen html_buf_printf tulostaa haluttuun puskuriin merkkijonon.