/[pg_recode]/recode.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /recode.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (vendor branch)
Sat Mar 18 21:47:50 2000 UTC (24 years ago) by dpavlin
Branch: DbP, MAIN
CVS Tags: beta, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
početni import

1 /*****************************************************************************
2 * recode.c
3 * 2000-03-04 Dobrica Pavlinusic <dpavlin@rot13.org>
4 * first really working version which doesn't overwrite chars which are
5 * in PostgreSQL buffer (I should really read examples more carefully!)
6 * 2000-03-17 dpavlin added to88592 function
7 * 2000-03-18 dpavlin added initcap2 function
8 *****************************************************************************/
9
10 #include <string.h>
11 #include <stdio.h>
12 #include "postgres.h" /* for char16, etc. */
13 #include "utils/palloc.h" /* for palloc */
14 #include "libpq-fe.h" /* for TUPLE */
15 #include <stdio.h>
16 #include <ctype.h>
17
18 /* to1250 -- convert iso8859-2 chars to cp1250 */
19
20 text *
21 to1250(text *t)
22 {
23 int32 i;
24 char c;
25 text *new_t = (text *) palloc(VARSIZE(t));
26 memset(new_t, 0, VARSIZE(t));
27 VARSIZE(new_t) = VARSIZE(t);
28
29 for(i=0; i<=VARSIZE(t)-VARHDRSZ; i++) {
30 c=VARDATA(t)[i];
31 switch (c) {
32 case (char)0xa9: c=(char)0x8a; break;
33 case (char)0xb9: c=(char)0x9a; break;
34 case (char)0xae: c=(char)0x8e; break;
35 case (char)0xbe: c=(char)0x9e; break;
36 }
37 VARDATA(new_t)[i]=c;
38 }
39
40 return (new_t);
41 }
42
43 /* to88592 -- convert cp1250 to iso8859-2 chars */
44
45 text *
46 to88592(text *t)
47 {
48 int32 i;
49 char c;
50 text *new_t = (text *) palloc(VARSIZE(t));
51 memset(new_t, 0, VARSIZE(t));
52 VARSIZE(new_t) = VARSIZE(t);
53
54 for(i=0; i<=VARSIZE(t)-VARHDRSZ; i++) {
55 c=VARDATA(t)[i];
56 switch (c) {
57 case (char)0x8a: c=(char)0xa9; break;
58 case (char)0x9a: c=(char)0xb9; break;
59 case (char)0x8e: c=(char)0xae; break;
60 case (char)0x9e: c=(char)0xbe; break;
61 }
62 VARDATA(new_t)[i]=c;
63 }
64
65 return (new_t);
66 }
67
68 /* tocsz -- convert iso8859-2 or cp1250 to czs */
69
70 text *
71 toczs(text *t)
72 {
73 int32 i;
74 char c;
75 text *new_t = (text *) palloc(VARSIZE(t));
76 memset(new_t, 0, VARSIZE(t));
77 VARSIZE(new_t) = VARSIZE(t);
78
79 for(i=0; i<=VARSIZE(t)-VARHDRSZ; i++) {
80 c=VARDATA(t)[i];
81 switch (c) {
82 /* iso8859-2 */
83 case (char)0xa9: c=(char)'S'; break;
84 case (char)0xb9: c=(char)'s'; break;
85 case (char)0xd0: c=(char)'D'; break;
86 case (char)0xf0: c=(char)'d'; break;
87 case (char)0xc8: c=(char)'C'; break;
88 case (char)0xe8: c=(char)'c'; break;
89 case (char)0xc6: c=(char)'C'; break;
90 case (char)0xe6: c=(char)'c'; break;
91 case (char)0xae: c=(char)'Z'; break;
92 case (char)0xbe: c=(char)'z'; break;
93 /* cp1250 */
94 case (char)0x8a: c=(char)'S'; break;
95 case (char)0x9a: c=(char)'s'; break;
96 case (char)0x8e: c=(char)'Z'; break;
97 case (char)0x9e: c=(char)'z'; break;
98 }
99 VARDATA(new_t)[i]=c;
100 }
101
102 return (new_t);
103 }
104
105 /* initcap2 -- initcap whith support for iso8859-2 or cp1250 */
106
107 text *
108 initcap2(text *t)
109 {
110 int32 i;
111 char c;
112 int first = 1; /* is this a first letter? */
113 text *new_t = (text *) palloc(VARSIZE(t));
114 memset(new_t, 0, VARSIZE(t));
115 VARSIZE(new_t) = VARSIZE(t);
116
117 for(i=0; i<=VARSIZE(t)-VARHDRSZ; i++) {
118 c=VARDATA(t)[i];
119 if (first) {
120 if (c >=(char)'a' && c <= (char)'z') { c-=32; }
121 switch (c) {
122 /* iso8859-2 */
123 case (char)0xb9: c-=16; break;
124 case (char)0xf0: c-=32; break;
125 case (char)0xe8: c-=32; break;
126 case (char)0xe6: c-=32; break;
127 case (char)0xbe: c-=16; break;
128 /* cp1250 */
129 case (char)0x9a: c-=16; break;
130 case (char)0x9e: c-=16; break;
131 }
132 }
133 if (!first) {
134 if (c >='A' && c <= 'Z') { c+=32; }
135 switch (c) {
136 /* iso8859-2 */
137 case (char)0xa9: c+=16; break;
138 case (char)0xd0: c+=32; break;
139 case (char)0xc8: c+=32; break;
140 case (char)0xc6: c+=32; break;
141 case (char)0xae: c+=16; break;
142 /* cp1250 */
143 case (char)0x8a: c+=16; break;
144 case (char)0x8e: c+=16; break;
145 }
146 }
147 if (c == ' ' || c == '-' || c =='.') first = 1; else first = 0;
148 VARDATA(new_t)[i]=c;
149 }
150
151 return (new_t);
152 }
153

  ViewVC Help
Powered by ViewVC 1.1.26