summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/pdftexdir/vfpacket.c
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
committerKarl Berry <karl@freefriends.org>2021-02-25 19:22:25 +0000
commitad547a6b5986815fda458221149728d9d9ab1d87 (patch)
tree16296910eb3eca724371474ea9aea3994dc69614 /Build/source/texk/web2c/pdftexdir/vfpacket.c
parent947b43de3dd21d58ccc2ffadefc4441ea1c2a813 (diff)
restore Build,TODO from r57911
git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/pdftexdir/vfpacket.c')
-rw-r--r--Build/source/texk/web2c/pdftexdir/vfpacket.c107
1 files changed, 107 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/pdftexdir/vfpacket.c b/Build/source/texk/web2c/pdftexdir/vfpacket.c
new file mode 100644
index 00000000000..8d7bd86c3a9
--- /dev/null
+++ b/Build/source/texk/web2c/pdftexdir/vfpacket.c
@@ -0,0 +1,107 @@
+/*
+Copyright 1996-2014 Han The Thanh, <thanh@pdftex.org>
+
+This file is part of pdfTeX.
+
+pdfTeX is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+pdfTeX 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 General Public License for more details.
+
+You should have received a copy of the GNU General Public License along
+with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "ptexlib.h"
+
+typedef struct {
+ char *dataptr;
+ integer len;
+} packet_entry;
+
+/* define packet_ptr, packet_array & packet_limit */
+define_array(packet);
+
+typedef struct {
+ char **data;
+ int *len;
+ int char_count;
+} vf_entry;
+
+/* define vf_ptr, vf_array & vf_limit */
+define_array(vf);
+
+static char *packet_data_ptr;
+
+integer newvfpacket(internalfontnumber f)
+{
+ int i, n = fontec[f] - fontbc[f] + 1;
+ alloc_array(vf, 1, SMALL_ARRAY_SIZE);
+ vf_ptr->len = xtalloc(n, int);
+ vf_ptr->data = xtalloc(n, char *);
+ vf_ptr->char_count = n;
+ for (i = 0; i < n; i++) {
+ vf_ptr->data[i] = NULL;
+ vf_ptr->len[i] = 0;
+ }
+ return vf_ptr++ - vf_array;
+}
+
+void storepacket(internalfontnumber f, integer c, strnumber s)
+{
+ int l = strstart[s + 1] - strstart[s];
+ vf_array[vfpacketbase[f]].len[c - fontbc[f]] = l;
+ vf_array[vfpacketbase[f]].data[c - fontbc[f]] = xtalloc(l, char);
+ memcpy((void *) vf_array[vfpacketbase[f]].data[c - fontbc[f]],
+ (void *) (strpool + strstart[s]), (unsigned) l);
+}
+
+void startpacket(internalfontnumber f, eightbits c)
+{
+ packet_data_ptr = vf_array[vfpacketbase[f]].data[c - fontbc[f]];
+ vfpacketlength = vf_array[vfpacketbase[f]].len[c - fontbc[f]];
+}
+
+eightbits packetbyte(void)
+{
+ vfpacketlength--;
+ return *packet_data_ptr++;
+}
+
+void pushpacketstate(void)
+{
+ alloc_array(packet, 1, SMALL_ARRAY_SIZE);
+ packet_ptr->dataptr = packet_data_ptr;
+ packet_ptr->len = vfpacketlength;
+ packet_ptr++;
+}
+
+void poppacketstate(void)
+{
+ if (packet_ptr == packet_array)
+ pdftex_fail("packet stack empty, impossible to pop");
+ packet_ptr--;
+ packet_data_ptr = packet_ptr->dataptr;
+ vfpacketlength = packet_ptr->len;
+}
+
+void vf_free(void)
+{
+ vf_entry *v;
+ char **p;
+ if (vf_array != NULL) {
+ for (v = vf_array; v < vf_ptr; v++) {
+ xfree(v->len);
+ for (p = v->data; p - v->data < v->char_count; p++)
+ xfree(*p);
+ xfree(v->data);
+ }
+ xfree(vf_array);
+ }
+ xfree(packet_array);
+}