#include <X11/Xfuncs.h>#include "Xct.h"#include <stdio.h>#include <stdlib.h>Include dependency graph for Xct.c:

Go to the source code of this file.
Data Structures | |
| struct | _XctPriv |
Defines | |
| #define | UsedGraphic 0x0001 |
| #define | UsedDirection 0x0002 |
| #define | IsMore(priv) ((priv)->ptr != (priv)->ptrend) |
| #define | AmountLeft(priv) ((priv)->ptrend - (priv)->ptr) |
| #define | HT 0x09 |
| #define | NL 0x0a |
| #define | ESC 0x1b |
| #define | CSI 0x9b |
| #define | IsLegalC0(data, c) |
| #define | IsLegalC1(priv, c) |
| #define | IsI2(c) (((c) >= 0x20) && ((c) <= 0x2f)) |
| #define | IsI3(c) (((c) >= 0x30) && ((c) <= 0x3f)) |
| #define | IsESCF(c) (((c) >= 0x30) && ((c) <= 0x7e)) |
| #define | IsCSIF(c) (((c) >= 0x40) && ((c) <= 0x7e)) |
| #define | IsC0(c) ((c) <= 0x1f) |
| #define | IsGL(c) (((c) >= 0x20) && ((c) <= 0x7f)) |
| #define | IsC1(c) (((c) >= 0x80) && ((c) <= 0x9f)) |
| #define | IsGR(c) ((c) >= 0xa0) |
| #define | HasC 1 |
| #define | HasGL 2 |
| #define | HasGR 4 |
| #define | ToGL 8 |
| #define | NEXT data->item_length++; priv->ptr++ |
Typedefs | |
| typedef _XctPriv * | XctPriv |
Functions | |
| static void | ComputeGLGR (XctData) |
| static int | Handle94GR (XctData, int) |
| static int | Handle96GR (XctData, int) |
| static int | HandleExtended (XctData data, int) |
| static int | HandleGL (XctData, int) |
| static int | HandleMultiGL (XctData, int) |
| static int | HandleMultiGR (XctData data, int) |
| static void | ShiftGRToGL (XctData, int) |
| static void | ComputeGLGR (register XctData data) |
| static int | HandleGL (register XctData data, int c) |
| static int | HandleMultiGL (register XctData data, int c) |
| static int | Handle94GR (register XctData data, int c) |
| static int | Handle96GR (register XctData data, int c) |
| static int | HandleMultiGR (register XctData data, int c) |
| static int | HandleExtended (register XctData data, int c) |
| static void | ShiftGRToGL (register XctData data, int hasCdata) |
| XctData | XctCreate (_Xconst unsigned char *string, int length, XctFlags flags) |
| void | XctReset (register XctData data) |
| XctResult | XctNextItem (register XctData data) |
| void | XctFree (register XctData data) |
| #define AmountLeft | ( | priv | ) | ((priv)->ptrend - (priv)->ptr) |
| #define CSI 0x9b |
Definition at line 57 of file Xct.c.
Referenced by Input(), unparseseq(), XctNextItem(), and Xputchar().
| #define ESC 0x1b |
Definition at line 56 of file Xct.c.
Referenced by gchar_no_echo(), unparseseq(), XctNextItem(), and XctReset().
| #define HasC 1 |
| #define HasGL 2 |
| #define HasGR 4 |
| #define IsC0 | ( | c | ) | ((c) <= 0x1f) |
| #define IsC1 | ( | c | ) | (((c) >= 0x80) && ((c) <= 0x9f)) |
| #define IsCSIF | ( | c | ) | (((c) >= 0x40) && ((c) <= 0x7e)) |
| #define IsESCF | ( | c | ) | (((c) >= 0x30) && ((c) <= 0x7e)) |
| #define IsGL | ( | c | ) | (((c) >= 0x20) && ((c) <= 0x7f)) |
| #define IsGR | ( | c | ) | ((c) >= 0xa0) |
Definition at line 73 of file Xct.c.
Referenced by HandleExtended(), ShiftGRToGL(), and XctNextItem().
| #define IsI2 | ( | c | ) | (((c) >= 0x20) && ((c) <= 0x2f)) |
| #define IsI3 | ( | c | ) | (((c) >= 0x30) && ((c) <= 0x3f)) |
| #define IsLegalC0 | ( | data, | |||
| c | ) |
Value:
(((c) == HT) || ((c) == NL) || \ (((data)->version > XctVersion) && \ ((data)->flags & XctAcceptC0Extensions)))
Definition at line 59 of file Xct.c.
Referenced by XctNextItem().
| #define IsLegalC1 | ( | priv, | |||
| c | ) |
Value:
(((data)->version > XctVersion) && \ ((data)->flags & XctAcceptC1Extensions))
Definition at line 63 of file Xct.c.
Referenced by XctNextItem().
| #define IsMore | ( | priv | ) | ((priv)->ptr != (priv)->ptrend) |
Referenced by XctNextItem().
| #define ToGL 8 |
Definition at line 78 of file Xct.c.
Referenced by Handle94GR(), Handle96GR(), HandleMultiGR(), and XctNextItem().
| #define UsedDirection 0x0002 |
| #define UsedGraphic 0x0001 |
| static void ComputeGLGR | ( | register XctData | data | ) | [static] |
Definition at line 96 of file Xct.c.
References NULL.
00097 { 00098 /* XXX this will need more work if more sets are registered */ 00099 if ((data->GL_set_size == 94) && (data->GL_char_size == 1) && 00100 (data->GL[0] == '\102') && 00101 (data->GR_set_size == 96) && (data->GR_char_size == 1)) 00102 data->GLGR_encoding = data->GR_encoding; 00103 else if ((data->GL_set_size == 94) && (data->GL_char_size == 1) && 00104 (data->GL[0] == '\112') && 00105 (data->GR_set_size == 94) && (data->GR_char_size == 1)) 00106 data->GLGR_encoding = data->GR_encoding; 00107 else 00108 data->GLGR_encoding = (char *)NULL; 00109 }
| static void ComputeGLGR | ( | XctData | ) | [static] |
Definition at line 166 of file Xct.c.
00167 { 00168 switch (c) { 00169 case 0x49: 00170 data->GR = "\111"; 00171 data->GR_encoding = "JISX0201.1976-0"; 00172 break; 00173 default: 00174 return 0; 00175 } 00176 data->priv->flags &= ~ToGL; 00177 data->GR_set_size = 94; 00178 data->GR_char_size = 1; 00179 data->GLGR_encoding = (char *)NULL; 00180 return 1; 00181 }
Definition at line 184 of file Xct.c.
References ComputeGLGR(), and ToGL.
00185 { 00186 switch (c) { 00187 case 0x41: 00188 data->GR = "\101"; 00189 data->GR_encoding = "ISO8859-1"; 00190 break; 00191 case 0x42: 00192 data->GR = "\102"; 00193 data->GR_encoding = "ISO8859-2"; 00194 break; 00195 case 0x43: 00196 data->GR = "\103"; 00197 data->GR_encoding = "ISO8859-3"; 00198 break; 00199 case 0x44: 00200 data->GR = "\104"; 00201 data->GR_encoding = "ISO8859-4"; 00202 break; 00203 case 0x46: 00204 data->GR = "\106"; 00205 data->GR_encoding = "ISO8859-7"; 00206 break; 00207 case 0x47: 00208 data->GR = "\107"; 00209 data->GR_encoding = "ISO8859-6"; 00210 break; 00211 case 0x48: 00212 data->GR = "\110"; 00213 data->GR_encoding = "ISO8859-8"; 00214 break; 00215 case 0x4c: 00216 data->GR = "\114"; 00217 data->GR_encoding = "ISO8859-5"; 00218 break; 00219 case 0x4d: 00220 data->GR = "\115"; 00221 data->GR_encoding = "ISO8859-9"; 00222 break; 00223 default: 00224 return 0; 00225 } 00226 data->priv->flags &= ~ToGL; 00227 data->GR_set_size = 96; 00228 data->GR_char_size = 1; 00229 ComputeGLGR(data); 00230 return 1; 00231 }
Here is the call graph for this function:

Definition at line 280 of file Xct.c.
References _XctPriv::enc_count, _XctPriv::encodings, i, IsGL, IsGR, len, malloc(), _XctPriv::ptr, realloc(), and void().
00281 { 00282 register XctPriv priv = data->priv; 00283 XctString enc = data->item + 6; 00284 register XctString ptr = enc; 00285 unsigned i, len; 00286 00287 while (*ptr != 0x02) { 00288 if (!*ptr || (++ptr == priv->ptr)) 00289 return 0; 00290 } 00291 data->item = ptr + 1; 00292 data->item_length = priv->ptr - data->item; 00293 len = ptr - enc; 00294 for (i = 0; 00295 (i < priv->enc_count) && 00296 strncmp(priv->encodings[i], (char *)enc, len); 00297 i++) 00298 ; 00299 if (i == priv->enc_count) { 00300 XctString cp; 00301 00302 for (cp = enc; cp != ptr; cp++) { 00303 if ((!IsGL(*cp) && !IsGR(*cp)) || (*cp == 0x2a) || (*cp == 0x3f)) 00304 return 0; 00305 } 00306 ptr = (XctString)malloc((unsigned)len + 1); 00307 (void) memmove((char *)ptr, (char *)enc, len); 00308 ptr[len] = 0x00; 00309 priv->enc_count++; 00310 if (priv->encodings) 00311 priv->encodings = (char **)realloc( 00312 (char *)priv->encodings, 00313 priv->enc_count * sizeof(char *)); 00314 else 00315 priv->encodings = (char **)malloc(sizeof(char *)); 00316 priv->encodings[i] = (char *)ptr; 00317 } 00318 data->encoding = priv->encodings[i]; 00319 data->char_size = c - 0x30; 00320 return 1; 00321 }
Here is the call graph for this function:

Definition at line 112 of file Xct.c.
References ComputeGLGR().
00113 { 00114 switch (c) { 00115 case 0x42: 00116 data->GL = "\102"; 00117 data->GL_encoding = "ISO8859-1"; 00118 break; 00119 case 0x4a: 00120 data->GL = "\112"; 00121 data->GL_encoding = "JISX0201.1976-0"; 00122 break; 00123 default: 00124 return 0; 00125 } 00126 data->GL_set_size = 94; 00127 data->GL_char_size = 1; 00128 ComputeGLGR(data); 00129 return 1; 00130 }
Here is the call graph for this function:

Definition at line 133 of file Xct.c.
References NULL.
00134 { 00135 switch (c) { 00136 case 0x41: 00137 data->GL = "\101"; 00138 data->GL_encoding = "GB2312.1980-0"; 00139 break; 00140 case 0x42: 00141 data->GL = "\102"; 00142 data->GL_encoding = "JISX0208.1983-0"; 00143 break; 00144 case 0x43: 00145 data->GL = "\103"; 00146 data->GL_encoding = "KSC5601.1987-0"; 00147 break; 00148 default: 00149 return 0; 00150 } 00151 data->GL_set_size = 94; 00152 data->GL_char_size = 2; 00153 #ifdef notdef 00154 if (c < 0x60) 00155 data->GL_char_size = 2; 00156 else if (c < 0x70) 00157 data->GL_char_size = 3; 00158 else 00159 data->GL_char_size = 4; 00160 #endif 00161 data->GLGR_encoding = (char *)NULL; 00162 return 1; 00163 }
Definition at line 234 of file Xct.c.
References NULL, ToGL, and XctShiftMultiGRToGL.
00235 { 00236 switch (c) { 00237 case 0x41: 00238 data->GR = "\101"; 00239 if (data->flags & XctShiftMultiGRToGL) 00240 data->GR_encoding = "GB2312.1980-0"; 00241 else 00242 data->GR_encoding = "GB2312.1980-1"; 00243 break; 00244 case 0x42: 00245 data->GR = "\102"; 00246 if (data->flags & XctShiftMultiGRToGL) 00247 data->GR_encoding = "JISX0208.1983-0"; 00248 else 00249 data->GR_encoding = "JISX0208.1983-1"; 00250 break; 00251 case 0x43: 00252 data->GR = "\103"; 00253 if (data->flags & XctShiftMultiGRToGL) 00254 data->GR_encoding = "KSC5601.1987-0"; 00255 else 00256 data->GR_encoding = "KSC5601.1987-1"; 00257 break; 00258 default: 00259 return 0; 00260 } 00261 if (data->flags & XctShiftMultiGRToGL) 00262 data->priv->flags |= ToGL; 00263 else 00264 data->priv->flags &= ~ToGL; 00265 data->GR_set_size = 94; 00266 data->GR_char_size = 2; 00267 #ifdef notdef 00268 if (c < 0x60) 00269 data->GR_char_size = 2; 00270 else if (c < 0x70) 00271 data->GR_char_size = 3; 00272 else 00273 data->GR_char_size = 4; 00274 #endif 00275 data->GLGR_encoding = (char *)NULL; 00276 return 1; 00277 }
Definition at line 324 of file Xct.c.
References _XctPriv::buf_count, i, IsGR, _XctPriv::itembuf, malloc(), realloc(), and void().
00325 { 00326 register XctPriv priv = data->priv; 00327 register int i; 00328 00329 if (data->item_length > priv->buf_count) { 00330 priv->buf_count = data->item_length; 00331 if (priv->itembuf) 00332 priv->itembuf = (XctString)realloc((char *)priv->itembuf, 00333 priv->buf_count); 00334 else 00335 priv->itembuf = (XctString)malloc(priv->buf_count); 00336 } 00337 (void) memmove((char *)priv->itembuf, (char *)data->item, 00338 data->item_length); 00339 data->item = priv->itembuf; 00340 if (hasCdata) { 00341 for (i = data->item_length; --i >= 0; ) { 00342 if (IsGR(data->item[i])) 00343 data->item[i] &= 0x7f; 00344 } 00345 } else { 00346 for (i = data->item_length; --i >= 0; ) 00347 data->item[i] &= 0x7f; 00348 } 00349 }
Here is the call graph for this function:

Definition at line 353 of file Xct.c.
References _XctPriv::buf_count, data, _XctPriv::dirsize, _XctPriv::dirstack, _XctPriv::enc_count, _XctPriv::encodings, _XctPriv::itembuf, malloc(), NULL, and XctReset().
00354 { 00355 register XctData data; 00356 register XctPriv priv; 00357 00358 data = (XctData)malloc(sizeof(struct _XctRec) + sizeof(struct _XctPriv)); 00359 if (!data) 00360 return data; 00361 data->priv = priv = (XctPriv)(data + 1); 00362 data->total_string = (XctString)string; 00363 data->total_length = length; 00364 data->flags = flags; 00365 priv->dirstack = (XctHDirection *)NULL; 00366 priv->dirsize = 0; 00367 priv->encodings = (char **)NULL; 00368 priv->enc_count = 0; 00369 priv->itembuf = (XctString)NULL; 00370 priv->buf_count = 0; 00371 XctReset(data); 00372 return data; 00373 }
Here is the call graph for this function:

| void XctFree | ( | register XctData | data | ) |
Definition at line 668 of file Xct.c.
References _XctPriv::dirstack, _XctPriv::enc_count, _XctPriv::encodings, free(), i, _XctPriv::itembuf, and XctFreeString.
00669 { 00670 unsigned i; 00671 register XctPriv priv = data->priv; 00672 00673 if (priv->dirstack) 00674 free((char *)priv->dirstack); 00675 if (data->flags & XctFreeString) 00676 free((char *)data->total_string); 00677 for (i = 0; i < priv->enc_count; i++) 00678 free(priv->encodings[i]); 00679 if (priv->encodings) 00680 free((char *)priv->encodings); 00681 if (priv->itembuf) 00682 free((char *)priv->itembuf); 00683 free((char *)data); 00684 }
Here is the call graph for this function:

Definition at line 412 of file Xct.c.
References AmountLeft, bits, CSI, _XctPriv::dirsize, _XctPriv::dirstack, ESC, _XctPriv::flags, Handle94GR(), Handle96GR(), HandleExtended(), HandleGL(), HandleMultiGL(), HandleMultiGR(), HasC, HasGL, HasGR, IsC0, IsC1, IsCSIF, IsESCF, IsGL, IsGR, IsI2, IsI3, IsLegalC0, IsLegalC1, IsMore, len, malloc(), NEXT, NULL, _XctPriv::ptr, realloc(), ShiftGRToGL(), ToGL, UsedDirection, UsedGraphic, XctC0Segment, XctC1Segment, XctEndOfText, XctError, XctExtendedSegment, XctExtension, XctGLSegment, XctGRSegment, XctHideDirection, XctHorizontal, XctLeftToRight, XctProvideExtensions, XctRightToLeft, XctSegment, XctShiftMultiGRToGL, XctSingleSetSegments, and XctVersion.
00413 { 00414 register XctPriv priv = data->priv; 00415 unsigned char c; 00416 int len, bits; 00417 00418 #define NEXT data->item_length++; priv->ptr++ 00419 00420 while (IsMore(priv)) { 00421 data->item = priv->ptr; 00422 data->item_length = 0; 00423 c = *priv->ptr; 00424 if (c == ESC) { 00425 NEXT; 00426 while (IsMore(priv) && IsI2(*priv->ptr)) { 00427 NEXT; 00428 } 00429 if (!IsMore(priv)) 00430 return XctError; 00431 c = *priv->ptr; 00432 NEXT; 00433 if (!IsESCF(c)) 00434 return XctError; 00435 switch (data->item[1]) { 00436 case 0x24: 00437 if (data->item_length > 3) { 00438 if (data->item[2] == 0x28) { 00439 if (HandleMultiGL(data, c)) 00440 continue; 00441 } else if (data->item[2] == 0x29) { 00442 if (HandleMultiGR(data, c)) 00443 continue; 00444 } 00445 } 00446 break; 00447 case 0x25: 00448 if ((data->item_length == 4) && (data->item[2] == 0x2f) && 00449 (c <= 0x3f)) { 00450 if ((AmountLeft(priv) < 2) || 00451 (priv->ptr[0] < 0x80) || (priv->ptr[1] < 0x80)) 00452 return XctError; 00453 len = *priv->ptr - 0x80; 00454 NEXT; 00455 len = (len << 7) + (*priv->ptr - 0x80); 00456 NEXT; 00457 if (AmountLeft(priv) < len) 00458 return XctError; 00459 data->item_length += len; 00460 priv->ptr += len; 00461 if (c <= 0x34) { 00462 if (!HandleExtended(data, c) || 00463 ((data->horz_depth == 0) && 00464 (priv->flags & UsedDirection))) 00465 return XctError; 00466 priv->flags |= UsedGraphic; 00467 return XctExtendedSegment; 00468 } 00469 } 00470 break; 00471 case 0x28: 00472 if (HandleGL(data, c)) 00473 continue; 00474 break; 00475 case 0x29: 00476 if (Handle94GR(data, c)) 00477 continue; 00478 break; 00479 case 0x2d: 00480 if (Handle96GR(data, c)) 00481 continue; 00482 break; 00483 } 00484 } else if (c == CSI) { 00485 NEXT; 00486 while (IsMore(priv) && IsI3(*priv->ptr)) { 00487 NEXT; 00488 } 00489 while (IsMore(priv) && IsI2(*priv->ptr)) { 00490 NEXT; 00491 } 00492 if (!IsMore(priv)) 00493 return XctError; 00494 c = *priv->ptr; 00495 NEXT; 00496 if (!IsCSIF(c)) 00497 return XctError; 00498 if (c == 0x5d) { 00499 if ((data->item_length == 3) && 00500 ((data->item[1] == 0x31) || (data->item[1] == 0x32))) { 00501 data->horz_depth++; 00502 if (priv->dirsize < data->horz_depth) { 00503 priv->dirsize += 10; 00504 if (priv->dirstack) 00505 priv->dirstack = (XctHDirection *) 00506 realloc((char *)priv->dirstack, 00507 priv->dirsize * 00508 sizeof(XctHDirection)); 00509 else 00510 priv->dirstack = (XctHDirection *) 00511 malloc(priv->dirsize * 00512 sizeof(XctHDirection)); 00513 } 00514 priv->dirstack[data->horz_depth - 1] = data->horizontal; 00515 if (data->item[1] == 0x31) 00516 data->horizontal = XctLeftToRight; 00517 else 00518 data->horizontal = XctRightToLeft; 00519 if ((priv->flags & UsedGraphic) && 00520 !(priv->flags & UsedDirection)) 00521 return XctError; 00522 priv->flags |= UsedDirection; 00523 if (data->flags & XctHideDirection) 00524 continue; 00525 return XctHorizontal; 00526 } else if (data->item_length == 2) { 00527 if (!data->horz_depth) 00528 return XctError; 00529 data->horz_depth--; 00530 data->horizontal = priv->dirstack[data->horz_depth]; 00531 if (data->flags & XctHideDirection) 00532 continue; 00533 return XctHorizontal; 00534 } 00535 } 00536 } else if (data->flags & XctSingleSetSegments) { 00537 NEXT; 00538 if IsC0(c) { 00539 data->encoding = (char *)NULL; 00540 data->char_size = 1; 00541 if (IsLegalC0(data, c)) 00542 return XctC0Segment; 00543 } else if (IsGL(c)) { 00544 data->encoding = data->GL_encoding; 00545 data->char_size = data->GL_char_size; 00546 while (IsMore(priv) && IsGL(*priv->ptr)) { 00547 NEXT; 00548 } 00549 if (((data->char_size > 1) && 00550 (data->item_length % data->char_size)) || 00551 ((data->horz_depth == 0) && 00552 (priv->flags & UsedDirection))) 00553 return XctError; 00554 priv->flags |= UsedGraphic; 00555 return XctGLSegment; 00556 } else if (IsC1(c)) { 00557 data->encoding = (char *)NULL; 00558 data->char_size = 1; 00559 if (IsLegalC1(data, c)) 00560 return XctC1Segment; 00561 } else { 00562 data->encoding = data->GR_encoding; 00563 data->char_size = data->GR_char_size; 00564 while (IsMore(priv) && IsGR(*priv->ptr)) { 00565 NEXT; 00566 } 00567 if (((data->char_size > 1) && 00568 (data->item_length % data->char_size)) || 00569 ((data->horz_depth == 0) && 00570 (priv->flags & UsedDirection))) 00571 return XctError; 00572 priv->flags |= UsedGraphic; 00573 if (!(priv->flags & ToGL)) 00574 return XctGRSegment; 00575 ShiftGRToGL(data, 0); 00576 return XctGLSegment; 00577 } 00578 } else { 00579 bits = 0; 00580 while (1) { 00581 if (IsC0(c) || IsC1(c)) { 00582 if ((c == ESC) || (c == CSI)) 00583 break; 00584 if (IsC0(c) ? !IsLegalC0(data, c) : !IsLegalC1(data, c)) 00585 break; 00586 bits |= HasC; 00587 NEXT; 00588 } else { 00589 len = data->item_length; 00590 if (IsGL(c)) { 00591 if ((data->flags & XctShiftMultiGRToGL) && 00592 (bits & HasGR)) 00593 break; 00594 NEXT; 00595 bits |= HasGL; 00596 while (IsMore(priv) && IsGL(*priv->ptr)) { 00597 NEXT; 00598 } 00599 if ((data->GL_char_size > 1) && 00600 ((data->item_length - len) % data->GL_char_size)) 00601 return XctError; 00602 } else { 00603 if ((data->flags & XctShiftMultiGRToGL) && 00604 (bits & HasGL)) 00605 break; 00606 NEXT; 00607 bits |= HasGR; 00608 while (IsMore(priv) && IsGR(*priv->ptr)) { 00609 NEXT; 00610 } 00611 if ((data->GR_char_size > 1) && 00612 ((data->item_length - len) % data->GR_char_size)) 00613 return XctError; 00614 } 00615 } 00616 if (!IsMore(priv)) 00617 break; 00618 c = *priv->ptr; 00619 } 00620 if (data->item_length) { 00621 if (bits & (HasGL|HasGR)) { 00622 priv->flags |= UsedGraphic; 00623 if ((data->horz_depth == 0) && 00624 (priv->flags & UsedDirection)) 00625 return XctError; 00626 if ((data->flags & XctShiftMultiGRToGL) && (bits & HasGR)) 00627 ShiftGRToGL(data, bits & HasC); 00628 } 00629 if ((bits == (HasGL|HasGR)) || 00630 (data->GLGR_encoding && !(bits & HasC))) { 00631 data->encoding = data->GLGR_encoding; 00632 if (data->GL_char_size == data->GR_char_size) 00633 data->char_size = data->GL_char_size; 00634 else 00635 data->char_size = 0; 00636 } else if (bits == HasGL) { 00637 data->encoding = data->GL_encoding; 00638 data->char_size = data->GL_char_size; 00639 } else if (bits == HasGR) { 00640 data->encoding = data->GR_encoding; 00641 data->char_size = data->GR_char_size; 00642 } else { 00643 data->encoding = (char *)NULL; 00644 data->char_size = 1; 00645 if ((bits & HasGL) && 00646 (data->GL_char_size != data->char_size)) 00647 data->char_size = 0; 00648 if ((bits & HasGR) && 00649 (data->GR_char_size != data->char_size)) 00650 data->char_size = 0; 00651 } 00652 return XctSegment; 00653 } 00654 NEXT; 00655 } 00656 if (data->version <= XctVersion) 00657 return XctError; 00658 if (data->flags & XctProvideExtensions) 00659 return XctExtension; 00660 if (!data->can_ignore_exts) 00661 return XctError; 00662 } 00663 return XctEndOfText; 00664 }
Here is the call graph for this function:

| void XctReset | ( | register XctData | data | ) |
Definition at line 377 of file Xct.c.
References ESC, _XctPriv::flags, Handle96GR(), HandleGL(), IsI2, NULL, _XctPriv::ptr, _XctPriv::ptrend, void(), and XctUnspecified.
Referenced by XctCreate().
00378 { 00379 register XctPriv priv = data->priv; 00380 00381 priv->ptr = data->total_string; 00382 priv->ptrend = data->total_string + data->total_length; 00383 data->item = (XctString)NULL; 00384 data->item_length = 0; 00385 data->encoding = (char *)NULL; 00386 data->char_size = 1; 00387 data->horizontal = XctUnspecified; 00388 data->horz_depth = 0; 00389 priv->flags = 0; 00390 data->GL_set_size = data->GR_set_size = 0; /* XXX */ 00391 (void)HandleGL(data, (unsigned char)0x42); 00392 (void)Handle96GR(data, (unsigned char)0x41); 00393 data->version = 1; 00394 data->can_ignore_exts = 0; 00395 /* parse version, if present */ 00396 if ((data->total_length >= 4) && 00397 (priv->ptr[0] == ESC) && (priv->ptr[1] == 0x23) && 00398 IsI2(priv->ptr[2]) && 00399 ((priv->ptr[3] == 0x30) || (priv->ptr[3] == 0x31))) { 00400 data->version = priv->ptr[2] - 0x1f; 00401 if (priv->ptr[3] == 0x30) 00402 data->can_ignore_exts = 1; 00403 priv->ptr += 4; 00404 } 00405 }
Here is the call graph for this function:

Here is the caller graph for this function:

1.5.1