- ILubyte *pal, *data1, *data2, *data;\r
- ILubyte pal12[16*3];\r
- unsigned short i;\r
- unsigned long k;\r
- ILuint col12, col, x, y;\r
- \r
- if (argc<4)\r
- return mustard("extract inpix outpix1 outpix2 [q]",0,1);\r
- else if (argc>4)\r
- q=1;\r
- ilInit();\r
- \r
- ilEnable(IL_ORIGIN_SET);\r
- ilEnable(IL_FILE_OVERWRITE);\r
- \r
- ilGenImages(1,&inpix);\r
- ilGenImages(1,&outpix1);\r
- ilGenImages(1,&outpix2);\r
- \r
- ilBindImage(inpix);\r
- if(!ilLoadImage(argv[1]))\r
- return mustard("inpix load fail.",1,1);\r
- if(ilGetInteger(IL_IMAGE_FORMAT)!=IL_COLOUR_INDEX)\r
- return mustard("inpix not indexed.",1,1);\r
- ilConvertPal(IL_PAL_RGB24);\r
- col=ilGetInteger(IL_PALETTE_NUM_COLS);\r
- col12=tsqrt(col);\r
- if(!col12)\r
- return mustard("Palette is not squarish.",1,1);\r
- x=ilGetInteger(IL_IMAGE_WIDTH);\r
- y=ilGetInteger(IL_IMAGE_HEIGHT);\r
- pal=ilGetPalette();\r
- data=ilGetData();\r
- \r
- for(i=0;i<col12;++i)\r
+ if (argc < argi + 3)\r
+ {\r
+ *err = PAL_UNMIX_MISSING_ARGS;\r
+ return EINVAL;\r
+ }\r
+ \r
+ if (argc >= argi + 5)\r
+ {\r
+ sscanf(argv[argi+3],"%u",&(n0));\r
+ sscanf(argv[argi+4],"%u",&(n1));\r
+ n = n0 * n1;\r
+ size_defined = 1;\r
+ }\r
+ \r
+ r = reserve_pictures(3);\r
+ if (r)\r
+ {\r
+ *err = CREATE_FAILED;\r
+ return r;\r
+ }\r
+ \r
+ r = load_picture(2, argv[argi], &(info[2]), &(flags[2]));\r
+ if (r)\r
+ {\r
+ *err = LOAD_FAILED;\r
+ return r;\r
+ }\r
+ \r
+ if (size_defined)\r
+ {\r
+ if (info[2].palette_num_cols < n)\r
+ {\r
+ *err = BAD_PALETTE_SIZE;\r
+ return EINVAL;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ n = info[2].palette_num_cols;\r
+ n0 = tsqrt(n);\r
+ if (n0 == 0)\r
+ {\r
+ *err = BAD_PALETTE_SIZE;\r
+ return EINVAL;\r
+ }\r
+ n1 = n0;\r
+ }\r
+ \r
+ if (flags[2] & HAS_ALPHA)\r