817 if (it8->ch == '.') {
818
819 ReadReal(it8, it8->inum);
820 it8->sy = SDNUM;
821 it8->dnum *= sign;
822 return;
823 }
824
825 it8 -> inum *= sign;
826
827 // Special case. Numbers followed by letters are taken as identifiers
828
829 if (isidchar(it8 ->ch)) {
830
831 if (it8 ->sy == SINUM) {
832
833 sprintf(it8->id, "%d", it8->inum);
834 }
835 else {
836
837 sprintf(it8->id, it8 ->DoubleFormatter, it8->dnum);
838 }
839
840 k = (int) strlen(it8 ->id);
841 idptr = it8 ->id + k;
842 do {
843
844 if (++k < MAXID) *idptr++ = (char) it8->ch;
845
846 NextCh(it8);
847
848 } while (isidchar(it8->ch));
849
850 *idptr = '\0';
851 it8->sy = SIDENT;
852 }
853 return;
854
855 }
856 else
857 switch ((int) it8->ch) {
994 {
995 while (it8->sy == SEOLN) {
996 InSymbol(it8);
997 }
998 }
999
1000
1001 // Returns a string holding current value
1002 static
1003 cmsBool GetVal(cmsIT8* it8, char* Buffer, cmsUInt32Number max, const char* ErrorTitle)
1004 {
1005 switch (it8->sy) {
1006
1007 case SEOLN: // Empty value
1008 Buffer[0]=0;
1009 break;
1010 case SIDENT: strncpy(Buffer, it8->id, max);
1011 Buffer[max-1]=0;
1012 break;
1013 case SINUM: snprintf(Buffer, max, "%d", it8 -> inum); break;
1014 case SDNUM: snprintf(Buffer, max, it8->DoubleFormatter, it8 -> dnum); break;
1015 case SSTRING: strncpy(Buffer, it8->str, max);
1016 Buffer[max-1] = 0;
1017 break;
1018
1019
1020 default:
1021 return SynError(it8, "%s", ErrorTitle);
1022 }
1023
1024 Buffer[max] = 0;
1025 return TRUE;
1026 }
1027
1028 // ---------------------------------------------------------- Table
1029
1030 static
1031 TABLE* GetTable(cmsIT8* it8)
1032 {
1033 if ((it8 -> nTable >= it8 ->TablesCount)) {
1034
1375
1376 return AddToList(it8, &GetTable(it8)->HeaderList, "# ", NULL, Val, WRITE_UNCOOKED) != NULL;
1377 }
1378
1379 // Sets a property
1380 cmsBool CMSEXPORT cmsIT8SetPropertyStr(cmsHANDLE hIT8, const char* Key, const char *Val)
1381 {
1382 cmsIT8* it8 = (cmsIT8*) hIT8;
1383
1384 if (!Val) return FALSE;
1385 if (!*Val) return FALSE;
1386
1387 return AddToList(it8, &GetTable(it8)->HeaderList, Key, NULL, Val, WRITE_STRINGIFY) != NULL;
1388 }
1389
1390 cmsBool CMSEXPORT cmsIT8SetPropertyDbl(cmsHANDLE hIT8, const char* cProp, cmsFloat64Number Val)
1391 {
1392 cmsIT8* it8 = (cmsIT8*) hIT8;
1393 char Buffer[1024];
1394
1395 sprintf(Buffer, it8->DoubleFormatter, Val);
1396
1397 return AddToList(it8, &GetTable(it8)->HeaderList, cProp, NULL, Buffer, WRITE_UNCOOKED) != NULL;
1398 }
1399
1400 cmsBool CMSEXPORT cmsIT8SetPropertyHex(cmsHANDLE hIT8, const char* cProp, cmsUInt32Number Val)
1401 {
1402 cmsIT8* it8 = (cmsIT8*) hIT8;
1403 char Buffer[1024];
1404
1405 sprintf(Buffer, "%u", Val);
1406
1407 return AddToList(it8, &GetTable(it8)->HeaderList, cProp, NULL, Buffer, WRITE_HEXADECIMAL) != NULL;
1408 }
1409
1410 cmsBool CMSEXPORT cmsIT8SetPropertyUncooked(cmsHANDLE hIT8, const char* Key, const char* Buffer)
1411 {
1412 cmsIT8* it8 = (cmsIT8*) hIT8;
1413
1414 return AddToList(it8, &GetTable(it8)->HeaderList, Key, NULL, Buffer, WRITE_UNCOOKED) != NULL;
1415 }
2589 }
2590
2591
2592 cmsBool CMSEXPORT cmsIT8SetDataRowCol(cmsHANDLE hIT8, int row, int col, const char* Val)
2593 {
2594 cmsIT8* it8 = (cmsIT8*) hIT8;
2595
2596 _cmsAssert(hIT8 != NULL);
2597
2598 return SetData(it8, row, col, Val);
2599 }
2600
2601
2602 cmsBool CMSEXPORT cmsIT8SetDataRowColDbl(cmsHANDLE hIT8, int row, int col, cmsFloat64Number Val)
2603 {
2604 cmsIT8* it8 = (cmsIT8*) hIT8;
2605 char Buff[256];
2606
2607 _cmsAssert(hIT8 != NULL);
2608
2609 sprintf(Buff, it8->DoubleFormatter, Val);
2610
2611 return SetData(it8, row, col, Buff);
2612 }
2613
2614
2615
2616 const char* CMSEXPORT cmsIT8GetData(cmsHANDLE hIT8, const char* cPatch, const char* cSample)
2617 {
2618 cmsIT8* it8 = (cmsIT8*) hIT8;
2619 int iField, iSet;
2620
2621 _cmsAssert(hIT8 != NULL);
2622
2623 iField = LocateSample(it8, cSample);
2624 if (iField < 0) {
2625 return NULL;
2626 }
2627
2628 iSet = LocatePatch(it8, cPatch);
2629 if (iSet < 0) {
2679 else {
2680 iSet = LocatePatch(it8, cPatch);
2681 if (iSet < 0) {
2682 return FALSE;
2683 }
2684 }
2685
2686 return SetData(it8, iSet, iField, Val);
2687 }
2688
2689
2690 cmsBool CMSEXPORT cmsIT8SetDataDbl(cmsHANDLE hIT8, const char* cPatch,
2691 const char* cSample,
2692 cmsFloat64Number Val)
2693 {
2694 cmsIT8* it8 = (cmsIT8*) hIT8;
2695 char Buff[256];
2696
2697 _cmsAssert(hIT8 != NULL);
2698
2699 snprintf(Buff, 255, it8->DoubleFormatter, Val);
2700 return cmsIT8SetData(hIT8, cPatch, cSample, Buff);
2701 }
2702
2703 // Buffer should get MAXSTR at least
2704
2705 const char* CMSEXPORT cmsIT8GetPatchName(cmsHANDLE hIT8, int nPatch, char* buffer)
2706 {
2707 cmsIT8* it8 = (cmsIT8*) hIT8;
2708 TABLE* t;
2709 char* Data;
2710
2711 _cmsAssert(hIT8 != NULL);
2712
2713 t = GetTable(it8);
2714 Data = GetData(it8, nPatch, t->SampleID);
2715
2716 if (!Data) return NULL;
2717 if (!buffer) return Data;
2718
2719 strncpy(buffer, Data, MAXSTR-1);
|
817 if (it8->ch == '.') {
818
819 ReadReal(it8, it8->inum);
820 it8->sy = SDNUM;
821 it8->dnum *= sign;
822 return;
823 }
824
825 it8 -> inum *= sign;
826
827 // Special case. Numbers followed by letters are taken as identifiers
828
829 if (isidchar(it8 ->ch)) {
830
831 if (it8 ->sy == SINUM) {
832
833 sprintf(it8->id, "%d", it8->inum);
834 }
835 else {
836
837 sprintf(it8->id, DEFAULT_DBL_FORMAT, it8->dnum);
838 }
839
840 k = (int) strlen(it8 ->id);
841 idptr = it8 ->id + k;
842 do {
843
844 if (++k < MAXID) *idptr++ = (char) it8->ch;
845
846 NextCh(it8);
847
848 } while (isidchar(it8->ch));
849
850 *idptr = '\0';
851 it8->sy = SIDENT;
852 }
853 return;
854
855 }
856 else
857 switch ((int) it8->ch) {
994 {
995 while (it8->sy == SEOLN) {
996 InSymbol(it8);
997 }
998 }
999
1000
1001 // Returns a string holding current value
1002 static
1003 cmsBool GetVal(cmsIT8* it8, char* Buffer, cmsUInt32Number max, const char* ErrorTitle)
1004 {
1005 switch (it8->sy) {
1006
1007 case SEOLN: // Empty value
1008 Buffer[0]=0;
1009 break;
1010 case SIDENT: strncpy(Buffer, it8->id, max);
1011 Buffer[max-1]=0;
1012 break;
1013 case SINUM: snprintf(Buffer, max, "%d", it8 -> inum); break;
1014 case SDNUM: snprintf(Buffer, max, DEFAULT_DBL_FORMAT, it8 -> dnum); break;
1015 case SSTRING: strncpy(Buffer, it8->str, max);
1016 Buffer[max-1] = 0;
1017 break;
1018
1019
1020 default:
1021 return SynError(it8, "%s", ErrorTitle);
1022 }
1023
1024 Buffer[max] = 0;
1025 return TRUE;
1026 }
1027
1028 // ---------------------------------------------------------- Table
1029
1030 static
1031 TABLE* GetTable(cmsIT8* it8)
1032 {
1033 if ((it8 -> nTable >= it8 ->TablesCount)) {
1034
1375
1376 return AddToList(it8, &GetTable(it8)->HeaderList, "# ", NULL, Val, WRITE_UNCOOKED) != NULL;
1377 }
1378
1379 // Sets a property
1380 cmsBool CMSEXPORT cmsIT8SetPropertyStr(cmsHANDLE hIT8, const char* Key, const char *Val)
1381 {
1382 cmsIT8* it8 = (cmsIT8*) hIT8;
1383
1384 if (!Val) return FALSE;
1385 if (!*Val) return FALSE;
1386
1387 return AddToList(it8, &GetTable(it8)->HeaderList, Key, NULL, Val, WRITE_STRINGIFY) != NULL;
1388 }
1389
1390 cmsBool CMSEXPORT cmsIT8SetPropertyDbl(cmsHANDLE hIT8, const char* cProp, cmsFloat64Number Val)
1391 {
1392 cmsIT8* it8 = (cmsIT8*) hIT8;
1393 char Buffer[1024];
1394
1395 sprintf(Buffer, DEFAULT_DBL_FORMAT, Val);
1396
1397 return AddToList(it8, &GetTable(it8)->HeaderList, cProp, NULL, Buffer, WRITE_UNCOOKED) != NULL;
1398 }
1399
1400 cmsBool CMSEXPORT cmsIT8SetPropertyHex(cmsHANDLE hIT8, const char* cProp, cmsUInt32Number Val)
1401 {
1402 cmsIT8* it8 = (cmsIT8*) hIT8;
1403 char Buffer[1024];
1404
1405 sprintf(Buffer, "%u", Val);
1406
1407 return AddToList(it8, &GetTable(it8)->HeaderList, cProp, NULL, Buffer, WRITE_HEXADECIMAL) != NULL;
1408 }
1409
1410 cmsBool CMSEXPORT cmsIT8SetPropertyUncooked(cmsHANDLE hIT8, const char* Key, const char* Buffer)
1411 {
1412 cmsIT8* it8 = (cmsIT8*) hIT8;
1413
1414 return AddToList(it8, &GetTable(it8)->HeaderList, Key, NULL, Buffer, WRITE_UNCOOKED) != NULL;
1415 }
2589 }
2590
2591
2592 cmsBool CMSEXPORT cmsIT8SetDataRowCol(cmsHANDLE hIT8, int row, int col, const char* Val)
2593 {
2594 cmsIT8* it8 = (cmsIT8*) hIT8;
2595
2596 _cmsAssert(hIT8 != NULL);
2597
2598 return SetData(it8, row, col, Val);
2599 }
2600
2601
2602 cmsBool CMSEXPORT cmsIT8SetDataRowColDbl(cmsHANDLE hIT8, int row, int col, cmsFloat64Number Val)
2603 {
2604 cmsIT8* it8 = (cmsIT8*) hIT8;
2605 char Buff[256];
2606
2607 _cmsAssert(hIT8 != NULL);
2608
2609 sprintf(Buff, DEFAULT_DBL_FORMAT, Val);
2610
2611 return SetData(it8, row, col, Buff);
2612 }
2613
2614
2615
2616 const char* CMSEXPORT cmsIT8GetData(cmsHANDLE hIT8, const char* cPatch, const char* cSample)
2617 {
2618 cmsIT8* it8 = (cmsIT8*) hIT8;
2619 int iField, iSet;
2620
2621 _cmsAssert(hIT8 != NULL);
2622
2623 iField = LocateSample(it8, cSample);
2624 if (iField < 0) {
2625 return NULL;
2626 }
2627
2628 iSet = LocatePatch(it8, cPatch);
2629 if (iSet < 0) {
2679 else {
2680 iSet = LocatePatch(it8, cPatch);
2681 if (iSet < 0) {
2682 return FALSE;
2683 }
2684 }
2685
2686 return SetData(it8, iSet, iField, Val);
2687 }
2688
2689
2690 cmsBool CMSEXPORT cmsIT8SetDataDbl(cmsHANDLE hIT8, const char* cPatch,
2691 const char* cSample,
2692 cmsFloat64Number Val)
2693 {
2694 cmsIT8* it8 = (cmsIT8*) hIT8;
2695 char Buff[256];
2696
2697 _cmsAssert(hIT8 != NULL);
2698
2699 sprintf(Buff, DEFAULT_DBL_FORMAT, Val);
2700
2701 return cmsIT8SetData(hIT8, cPatch, cSample, Buff);
2702 }
2703
2704 // Buffer should get MAXSTR at least
2705
2706 const char* CMSEXPORT cmsIT8GetPatchName(cmsHANDLE hIT8, int nPatch, char* buffer)
2707 {
2708 cmsIT8* it8 = (cmsIT8*) hIT8;
2709 TABLE* t;
2710 char* Data;
2711
2712 _cmsAssert(hIT8 != NULL);
2713
2714 t = GetTable(it8);
2715 Data = GetData(it8, nPatch, t->SampleID);
2716
2717 if (!Data) return NULL;
2718 if (!buffer) return Data;
2719
2720 strncpy(buffer, Data, MAXSTR-1);
|