{"id":1462,"date":"2020-12-03T16:11:23","date_gmt":"2020-12-03T14:11:23","guid":{"rendered":"https:\/\/moijari.com\/?p=1462"},"modified":"2020-12-07T12:33:01","modified_gmt":"2020-12-07T10:33:01","slug":"5-puskurinen-printf-rutiini","status":"publish","type":"post","link":"https:\/\/moijari.com\/?p=1462","title":{"rendered":"5 puskurinen printf rutiini"},"content":{"rendered":"\n<p>Edellisest\u00e4 postista muodostui oikea TLDR-paketti (<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/moijari.com\/?p=1256\">https:\/\/moijari.com\/?p=1256<\/a>) , ja ajattelinkin kirjoittaa lyhyempi\u00e4 kappaleita sen &#8220;valmiista&#8221; osista. Toinen TLDR-paketti: (<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/moijari.com\/?p=964\">https:\/\/moijari.com\/?p=964<\/a>).<\/p>\n\n\n\n<p>Suurimpia asioita tertussa on se, ett\u00e4 saatiin aikaan toimiva kyselymalli, ja https- ja http- palvelimet, eli DBS osuus ovat pitk\u00e4ll\u00e4, My\u00f6s DB osuus on periaatteessa toimiva pient\u00e4 tietokantaa varten. K\u00e4\u00e4nn\u00f6ksist\u00e4 saatiin ensimm\u00e4iset ideat. Db-osuuteen voi tietenkkin tulla lis\u00e4asioita sovelluksen puolelta kuten summaus. Save yms viel\u00e4 puuttuu. Muutamassa seuraavassa postissa kuitenkin toimivat uudet osuudet lukukelpoisemmissa listoissa.<\/p>\n\n\n\n<p>Aluksi uusi printf rutiini: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int html_now = 0;\nunsigned char *html&#91;] = { NULL, NULL, NULL, NULL, NULL };\nint html_size&#91;] = { 0, 0, 0, 0, 0 };<\/code><\/pre>\n\n\n\n<p>Html_now kentt\u00e4 sis\u00e4lt\u00e4\u00e4 t\u00e4m\u00e4n hetken k\u00e4yt\u00f6ss\u00e4 olevan puskurin numeron. Html kentt\u00e4 sis\u00e4lt\u00e4\u00e4 kaikkien viiden puskurien sis\u00e4lt\u00e4m\u00e4n merkkijonon ja html_size kentt\u00e4 sis\u00e4lt\u00e4\u00e4 kaikkien viiden puskurin allokoidun koon.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void html_set(int bufno)\n{\n  html_now=bufno;\n  if(html&#91;bufno]==NULL) {\n    html_size&#91;bufno] = 10;\n    html&#91;bufno]=malloc(html_size&#91;bufno]);\n  }\n}<\/code><\/pre>\n\n\n\n<p>Html_set rutiinilla valitaan puskurinumero, johon seuraavat printf lauseet tulostavat merkkijonon.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int html_get()\n{\n  return(html_now);\n}<\/code><\/pre>\n\n\n\n<p>Html get rutiini palauttaa puskurin numeron, johon seuraava printf lause tulostuu.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>unsigned char *html_get_string(int bufno)\n{\n  return(html&#91;bufno]);\n}<\/code><\/pre>\n\n\n\n<p>Html_get_string rutiini palauttaa valitussa puskurissa olevan merkkijonon.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void html_clear()\n{\n  html_set(html_now);\n  html&#91;html_now]&#91;0]='\\0';\n}\n<\/code><\/pre>\n\n\n\n<p>Html_clear tyhjent\u00e4\u00e4 t\u00e4m\u00e4n hetkisen puskurin.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void html_clear_all()\n{\n  int c;\n  for(c=0;c&lt;HTML_BUFFERS;c++) {\n    html_set(c);\n    html_clear();\n  }\n}<\/code><\/pre>\n\n\n\n<p>Html_clear_all tyhjent\u00e4\u00e4 kaikki puskurit.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>static void html_printf_valist(const char *format, va_list ap)\n{\n  int count;\n  static char *printbuf=NULL;\n  static int printbuf_len=0;\n\n  va_list ap2;\n  va_copy(ap2,ap);\n\n  count=vsnprintf(printbuf, printbuf_len, format, ap) + 1;\n  if(printbuf_len &lt; count) {\n    printbuf_len = count;\n    printbuf=realloc(printbuf, printbuf_len);\n    count=vsnprintf(printbuf, printbuf_len, format, ap2) + 1;\n  }\n\n  if(html_size&#91;html_now] &lt;\n     strlen(html&#91;html_now]) +\n     strlen(printbuf) + 1) {\n    html_size&#91;html_now] =\n     strlen(html&#91;html_now]) +\n     strlen(printbuf) + 1;\n    html&#91;html_now] = realloc(html&#91;html_now], html_size&#91;html_now]);\n  }\n\n  strcpy(html&#91;html_now]+strlen(html&#91;html_now]), printbuf);\n}\n<\/code><\/pre>\n\n\n\n<p>html_printf_valist on apufunktio kahdelle viimeiselle printf rutiinille.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void html_printf(const char *format, ...)\n{\n  va_list args;\n\n  va_start(args, format);\n  html_printf_valist(format, args);\n  va_end(args);\n}\n<\/code><\/pre>\n\n\n\n<p>html_printf rutiini tulostaa t\u00e4m\u00e4nhetkiseen puskuriin merkkijonon.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void html_buf_printf(int bufno, const char *format, ...)\n{\n  int save_html;\n  va_list args;\n\n  save_html=html_get();\n  html_set(bufno);\n  va_start(args, format);\n  html_printf_valist(format, args);\n  va_end(args);\n  html_set(save_html);\n}<\/code><\/pre>\n\n\n\n<p>Ja t\u00e4m\u00e4 viimeinen html_buf_printf tulostaa haluttuun puskuriin merkkijonon.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Edellisest\u00e4 postista muodostui oikea TLDR-paketti (https:\/\/moijari.com\/?p=1256) , ja ajattelinkin kirjoittaa lyhyempi\u00e4 kappaleita sen &#8220;valmiista&#8221; osista. Toinen TLDR-paketti: (https:\/\/moijari.com\/?p=964). Suurimpia asioita tertussa on se, ett\u00e4 saatiin aikaan toimiva kyselymalli, ja https- ja http- palvelimet, eli DBS osuus ovat pitk\u00e4ll\u00e4, My\u00f6s DB osuus on periaatteessa toimiva pient\u00e4 tietokantaa varten. K\u00e4\u00e4nn\u00f6ksist\u00e4 saatiin ensimm\u00e4iset ideat. Db-osuuteen voi tietenkkin tulla&hellip; <a class=\"more-link\" href=\"https:\/\/moijari.com\/?p=1462\">Continue reading <span class=\"screen-reader-text\">5 puskurinen printf rutiini<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/1462"}],"collection":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1462"}],"version-history":[{"count":7,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/1462\/revisions"}],"predecessor-version":[{"id":1471,"href":"https:\/\/moijari.com\/index.php?rest_route=\/wp\/v2\/posts\/1462\/revisions\/1471"}],"wp:attachment":[{"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1462"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1462"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/moijari.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1462"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}