int main(int argc, char *argv[]) { int i,j; int fa, nfa, mfa; /* current argument we're looking at */ disppath *disp = NULL; /* Display being used */ double hpatscale = 1.0, vpatscale = 1.0; /* scale factor for test patch size */ double ho = 0.0, vo = 0.0; /* Test window offsets, -1.0 to 1.0 */ int fullscreen = 0; /* NZ if whole screen should be filled with black */ int verb = 0; int debug = 0; int doccss = 0; /* Create CCSS rather than CCMX */ int fake = 0; /* Use the fake device for testing, 2 for auto */ int faketoggle = 0; /* Toggle fake between "colorimeter" and "spectro" */ int fakeseq = 0; /* Fake auto CCMX sequence */ int spec = 0; /* Need spectral data to implement option */ icxObserverType observ = icxOT_CIE_1931_2; int override = 1; /* Override redirect on X11 */ icompaths *icmps = NULL; /* Ports to choose from */ int comno = COMPORT; /* COM port used */ flow_control fc = fc_nc; /* Default flow control */ int highres = 0; /* High res mode if available */ int dtype = 0; /* Display kind, 0 = default, 1 = CRT, 2 = LCD, etc */ int sdtype = -1; /* Spectro display kind, -1 = use dtype */ int refrmode = -1; /* Refresh mode */ double refrate = 0.0; /* 0.0 = default, > 0.0 = override refresh rate */ int cbid = 0; /* Calibration base display mode ID */ int nadaptive = 0; /* Use non-adaptive mode if available */ int tele = 0; /* NZ if telephoto mode */ int noinitcal = 0; /* Disable initial calibration */ int webdisp = 0; /* NZ for web display, == port number */ int ccdisp = 0; /* NZ for ChromeCast, == list index */ ccast_id **ccids = NULL; ccast_id *ccid = NULL; #ifdef NT int madvrdisp = 0; /* NZ for MadVR display */ #endif char *ccallout = NULL; /* Change color Shell callout */ int msteps = DEFAULT_MSTEPS; /* Patch surface size */ int npat = 0; /* Number of patches/colors */ ary3 *refs = NULL; /* Reference XYZ values */ int gotref = 0; char *refname = NULL; /* Name of reference instrument */ char *reffile = NULL; /* Name of reference file */ ary3 *cols = NULL; /* Colorimeter XYZ values */ int gotcol = 0; char *colname = NULL; /* Name of colorimeter instrument */ char *colfile = NULL; /* Name of colorimeter file */ col *rdcols = NULL; /* Internal storage of all the patch colors */ int saved = 0; /* Saved result */ char innames[2][MAXNAMEL+1] = { "\000", "\000" }; /* .ti3 input names */ char outname[MAXNAMEL+5+1] = "\000"; /* ccmx output file name */ char *description = NULL; /* Given overall description */ char *displayname = NULL; /* Given display name */ disptech_info *dtinfo = NULL; /* Display technology */ char *uisel = NULL; /* UI selection letters */ int rv; set_exe_path(argv[0]); /* Set global exe_path and error_program */ check_if_not_interactive(); /* Process the arguments */ mfa = 0; /* Minimum final arguments */ for(fa = 1;fa < argc;fa++) { nfa = fa; /* skip to nfa if next argument is used */ if (argv[fa][0] == '-') { /* Look for any flags */ char *na = NULL; /* next argument after flag, null if none */ if (argv[fa][2] != '\000') na = &argv[fa][2]; /* next is directly after flag */ else { if ((fa+1+mfa) < argc) { if (argv[fa+1][0] != '-') { nfa = fa + 1; na = argv[nfa]; /* next is seperate non-flag argument */ } } } if (argv[fa][1] == '?' || argv[fa][1] == '-') { if (argv[fa][2] == '?' || argv[fa][2] == '-') usage(2, "Extended usage requested"); usage(0, "Usage requested"); } else if (argv[fa][1] == 'v') { verb = 1; g_log->verb = verb; } else if (argv[fa][1] == 'S') { doccss = 1; } else if (argv[fa][1] == 'f') { char *cna, *f1 = NULL; fa = nfa; if (na == NULL) usage(0,"Expect argument to input file flag -f"); if ((cna = strdup(na)) == NULL) error("Malloc failed"); /* If got just one file - enough for CCSS */ if ((f1 = strchr(cna, ',')) == NULL) { strncpy(innames[0],cna,MAXNAMEL-1); innames[0][MAXNAMEL-1] = '\000'; free(cna); /* Got two files - needed for CCMX */ } else { *f1++ = '\000'; strncpy(innames[0],cna,MAXNAMEL-1); innames[0][MAXNAMEL-1] = '\000'; strncpy(innames[1],f1,MAXNAMEL-1); innames[1][MAXNAMEL-1] = '\000'; free(cna); } /* Display number */ } else if (argv[fa][1] == 'd') { if (strncmp(na,"web",3) == 0 || strncmp(na,"WEB",3) == 0) { webdisp = 8080; if (na[3] == ':') { webdisp = atoi(na+4); if (webdisp == 0 || webdisp > 65535) usage(0,"Web port number must be in range 1..65535"); } fa = nfa; } else if (strncmp(na,"cc",2) == 0 || strncmp(na,"CC",2) == 0) { ccdisp = 1; if (na[2] == ':') { if (na[3] < '0' || na[3] > '9') usage(0x0001,"Available ChromeCasts"); ccdisp = atoi(na+3); if (ccdisp <= 0) usage(0,"ChromCast number must be in range 1..N"); } fa = nfa; #ifdef NT } else if (strncmp(na,"madvr",5) == 0 || strncmp(na,"MADVR",5) == 0) { madvrdisp = 1; fa = nfa; #endif } else { #if defined(UNIX_X11) int ix, iv; if (strcmp(&argv[fa][2], "isplay") == 0 || strcmp(&argv[fa][2], "ISPLAY") == 0) { if (++fa >= argc || argv[fa][0] == '-') usage(0,"Parameter expected following -display"); setenv("DISPLAY", argv[fa], 1); } else { if (na == NULL) usage(0,"Parameter expected following -d"); fa = nfa; if (strcmp(na,"fake") == 0 || strcmp(na,"FAKE") == 0) { fake = 1; if (strcmp(na,"FAKE") == 0) fakeseq = 1; } else { if (sscanf(na, "%d,%d",&ix,&iv) != 2) { ix = atoi(na); iv = 0; } if (disp != NULL) free_a_disppath(disp); if ((disp = get_a_display(ix-1)) == NULL) usage(0,"-d parameter %d out of range",ix); if (iv > 0) disp->rscreen = iv-1; } } #else int ix; if (na == NULL) usage(0,"Parameter expected following -d"); fa = nfa; if (strcmp(na,"fake") == 0 || strcmp(na,"FAKE") == 0) { fake = 1; if (strcmp(na,"FAKE") == 0) fakeseq = 1; } else { ix = atoi(na); if (disp != NULL) free_a_disppath(disp); if ((disp = get_a_display(ix-1)) == NULL) usage(0,"-d parameter %d out of range",ix); } #endif } #if defined(UNIX_X11) } else if (argv[fa][1] == 'n') { override = 0; #endif /* UNIX */ /* COM port */ } else if (argv[fa][1] == 'c') {
int main(int argc, char *argv[]) { int i,j; int fa, nfa, mfa; /* current argument we're looking at */ disppath *disp = NULL; /* Display being used */ double patsize = 100.0; /* size of displayed color patch */ double patscale = 1.0; /* scale factor for test patch size */ double ho = 0.0, vo = 0.0; /* Test window offsets, -1.0 to 1.0 */ int blackbg = 0; /* NZ if whole screen should be filled with black */ int verb = 0; int debug = 0; int fake = 0; /* Use the fake device for testing */ int override = 1; /* Override redirect on X11 */ int comport = COMPORT; /* COM port used */ flow_control fc = fc_nc; /* Default flow control */ instType itype = instUnknown; /* Default target instrument - none */ int docalib = 0; /* Do a calibration */ int highres = 0; /* Use high res mode if available */ int adaptive = 0; /* Use adaptive mode if available */ int dtype = 0; /* Display kind, 0 = default, 1 = CRT, 2 = LCD */ int proj = 0; /* NZ if projector */ int nocal = 0; /* Disable auto calibration */ int spectral = 0; /* Don't save spectral information */ char *ccallout = NULL; /* Change color Shell callout */ char *mcallout = NULL; /* Measure color Shell callout */ char inname[MAXNAMEL+1] = "\000"; /* Input cgats file base name */ char outname[MAXNAMEL+1] = "\000"; /* Output cgats file base name */ char calname[MAXNAMEL+1] = "\000"; /* Calibration file name */ double cal[3][MAX_CAL_ENT]; /* Display calibration */ int ncal = 256; /* number of cal entries used */ cgats *icg; /* input cgats structure */ cgats *ocg; /* output cgats structure */ time_t clk = time(0); struct tm *tsp = localtime(&clk); char *atm = asctime(tsp); /* Ascii time */ col *cols; /* Internal storage of all the patch colors */ int dim = 0; /* Dimensionality - 1, 3, or 4 */ int npat; /* Number of patches/colors */ int xpat = 0; /* Set to number of extra patches */ int wpat; /* Set to index of white patch */ int si; /* Sample id index */ int ti; /* Temp index */ int fi; /* Colorspace index */ int nsetel = 0; cgats_set_elem *setel; /* Array of set value elements */ disprd *dr; /* Display patch read object */ int errc; /* Return value from new_disprd() */ int rv; set_exe_path(argv[0]); /* Set global exe_path and error_program */ setup_spyd2(NULL); /* Load firware if available */ #ifdef DEBUG_OFFSET ho = 0.8; vo = -0.8; #endif #if defined(DEBUG) || defined(DEBUG_OFFSET) printf("!!!!!! Debug turned on !!!!!!\n"); #endif if (argc <= 1) usage("Too few arguments"); if (ncal > MAX_CAL_ENT) error("Internal, ncal = %d > MAX_CAL_ENT %d\n",ncal,MAX_CAL_ENT); /* Process the arguments */ mfa = 1; /* Minimum final arguments */ for (fa = 1;fa < argc;fa++) { nfa = fa; /* skip to nfa if next argument is used */ if (argv[fa][0] == '-') { /* Look for any flags */ char *na = NULL; /* next argument after flag, null if none */ if (argv[fa][2] != '\000') na = &argv[fa][2]; /* next is directly after flag */ else { if ((fa+1+mfa) < argc) { if (argv[fa+1][0] != '-') { nfa = fa + 1; na = argv[nfa]; /* next is seperate non-flag argument */ } } } if (argv[fa][1] == '?' || argv[fa][1] == '-') { usage("Usage requested"); } else if (argv[fa][1] == 'v') { verb = 1; /* Display number */ } else if (argv[fa][1] == 'd') { #if defined(UNIX) && !defined(__APPLE__) int ix, iv; if (strcmp(&argv[fa][2], "isplay") == 0 || strcmp(&argv[fa][2], "ISPLAY") == 0) { if (++fa >= argc || argv[fa][0] == '-') usage("Parameter expected following -display"); setenv("DISPLAY", argv[fa], 1); } else { if (na == NULL) usage("Parameter expected following -d"); fa = nfa; if (strcmp(na,"fake") == 0) { fake = 1; } else { if (sscanf(na, "%d,%d",&ix,&iv) != 2) { ix = atoi(na); iv = 0; } if (disp != NULL) free_a_disppath(disp); if ((disp = get_a_display(ix-1)) == NULL) usage("-d parameter %d out of range",ix); if (iv > 0) disp->rscreen = iv-1; } } #else int ix; if (na == NULL) usage("Parameter expected following -d"); fa = nfa; if (strcmp(na,"fake") == 0) { fake = 1; } else { ix = atoi(na); if (disp != NULL) free_a_disppath(disp); if ((disp = get_a_display(ix-1)) == NULL) usage("-d parameter %d out of range",ix); } #endif #if defined(UNIX) && !defined(__APPLE__) } else if (argv[fa][1] == 'n') { override = 0; #endif /* UNIX */ /* COM port */ } else if (argv[fa][1] == 'c') {