+static size_t yaz_write_marc8_page_chr(yaz_iconv_t cd,
+ char **outbuf, size_t *outbytesleft,
+ const char *page_chr)
+{
+ const char *old_page_chr = cd->write_marc8_page_chr;
+ if (strcmp(page_chr, old_page_chr))
+ {
+ size_t plen = 0;
+ const char *page_out = page_chr;
+
+ if (*outbytesleft < 8)
+ {
+ cd->my_errno = YAZ_ICONV_E2BIG;
+
+ return (size_t) (-1);
+ }
+ cd->write_marc8_page_chr = page_chr;
+
+ if (!strcmp(old_page_chr, "\033p")
+ || !strcmp(old_page_chr, "\033g")
+ || !strcmp(old_page_chr, "\033b"))
+ {
+ /* Technique 1 leave */
+ page_out = "\033s";
+ if (strcmp(page_chr, "\033(B")) /* Not going ASCII page? */
+ {
+ /* Must leave script + enter new page */
+ plen = strlen(page_out);
+ memcpy(*outbuf, page_out, plen);
+ (*outbuf) += plen;
+ (*outbytesleft) -= plen;
+ page_out = page_chr;
+ }
+ }
+ plen = strlen(page_out);
+ memcpy(*outbuf, page_out, plen);
+ (*outbuf) += plen;
+ (*outbytesleft) -= plen;
+ }
+ return 0;
+}
+
+