/* * The Npic library and tools * * Copyright (C) 2003 Edouard Thiel * * This program is free software under the terms of the * GNU Lesser General Public License (LGPL) version 2.1. */ /* DO NOT EDIT !!! Generated by npic-templa from "npic-draw.ct" */ /* * npic-draw.c - 19/10/2008 * */ #include void ShowUsage () { printf ( "npic-draw - Draw in images by changing pixel values.\n" "Usage:\n" " npic-draw -h | -help | --help : print help\n" " npic-draw in1 out1 actions ...\n" "\n" "in1, out1 : image in " NPIC_KNOWN_IMAGE_EXT " format\n" "\n" "actions:\n" " -point p c : draw point p in color c\n" " -rect p q c : draw rectangle bounded by p and q in color c\n" " -ellip p q c : draw ellipse bounded by p and q in color c\n" " -line a b c d : draw bresenham segment [a, b] in colors c to d\n" "\n" "p, q: coordinates y:x or z:y:x or t:z:y:x or s:t:z:y:x or r:s:t:z:y:x\n" " depending on dimension;\n" " they can leave outside the image (the drawing is cut).\n" "a, b: idem but coordinates lying inside image.\n" "c, d: integer or double or r:g:b:a, depending on image type.\n" "\n" "Example: create a 4D image:\n" " ./npic-new tmp2.npz -4l 24:28:25:30\n" " ./npic-draw tmp2.npz tmp2.npz \\\n" " -rect 12:3:10:21 19:11:14:29 100 \\\n" " -ellip 5:2:21:0 9:2:25:29 200 \\\n" " -rect 20:12:20:11 22:14:24:29 300 \\\n" " -ellip 17:20:2:8 21:24:20:22 400\n" "\n" ); } void ArgcExit (int argc, int n) { if (argc < n) { fprintf (stderr, "ERROR: %d argument(s) missing, " "type \"npic-draw -h\" to get help.\n", n-argc); exit (1); } } void ArgShift (int *argc, char **argv[], int n) { *argc -= n; *argv += n; } int main (int argc, char *argv[]) { Npic_image *np1; char *in1, *out1; int modified = 0, bad_coord = 0; ArgcExit (argc, 2); if (strcmp (argv[1], "-h") == 0 || strcmp (argv[1], "-help") == 0 || strcmp (argv[1], "--help") == 0) { ShowUsage (); exit (0); } ArgcExit (argc, 3); in1 = argv[1]; out1 = argv[2]; ArgShift (&argc, &argv, 2); printf ("Loading \"%s\"\n", in1); np1 = NpicReadImage (in1); if (np1 == NULL) exit (1); while (argc > 1) { if (strcmp (argv[1], "-point") == 0) { /*-----------------------------*/ ArgcExit (argc, 4); switch (np1->type) { case NPIC_IMAGE_2C : { Npic_image_2c *p1 = NpicCastImage (np1); int y1, x1; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax ) p1->pix[y1][x1] = atoi(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_2L : { Npic_image_2l *p1 = NpicCastImage (np1); int y1, x1; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax ) p1->pix[y1][x1] = atoi(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_2D : { Npic_image_2d *p1 = NpicCastImage (np1); int y1, x1; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax ) p1->pix[y1][x1] = atof(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_2Q : { Npic_image_2q *p1 = NpicCastImage (np1); int a, b, c, d, y1, x1; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && sscanf (argv[3], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax ) { p1->pix[y1][x1].a = a; p1->pix[y1][x1].b = b; p1->pix[y1][x1].c = c; p1->pix[y1][x1].d = d; } else bad_coord = 1; } break; case NPIC_IMAGE_3C : { Npic_image_3c *p1 = NpicCastImage (np1); int z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax ) p1->pix[z1][y1][x1] = atoi(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_3L : { Npic_image_3l *p1 = NpicCastImage (np1); int z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax ) p1->pix[z1][y1][x1] = atoi(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_3D : { Npic_image_3d *p1 = NpicCastImage (np1); int z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax ) p1->pix[z1][y1][x1] = atof(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_3Q : { Npic_image_3q *p1 = NpicCastImage (np1); int a, b, c, d, z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && sscanf (argv[3], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax ) { p1->pix[z1][y1][x1].a = a; p1->pix[z1][y1][x1].b = b; p1->pix[z1][y1][x1].c = c; p1->pix[z1][y1][x1].d = d; } else bad_coord = 1; } break; case NPIC_IMAGE_4C : { Npic_image_4c *p1 = NpicCastImage (np1); int t1, z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax && 0 <= t1 && t1 < p1->tmax ) p1->pix[t1][z1][y1][x1] = atoi(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_4L : { Npic_image_4l *p1 = NpicCastImage (np1); int t1, z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax && 0 <= t1 && t1 < p1->tmax ) p1->pix[t1][z1][y1][x1] = atoi(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_4D : { Npic_image_4d *p1 = NpicCastImage (np1); int t1, z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax && 0 <= t1 && t1 < p1->tmax ) p1->pix[t1][z1][y1][x1] = atof(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_4Q : { Npic_image_4q *p1 = NpicCastImage (np1); int a, b, c, d, t1, z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax && 0 <= t1 && t1 < p1->tmax ) { p1->pix[t1][z1][y1][x1].a = a; p1->pix[t1][z1][y1][x1].b = b; p1->pix[t1][z1][y1][x1].c = c; p1->pix[t1][z1][y1][x1].d = d; } else bad_coord = 1; } break; case NPIC_IMAGE_5C : { Npic_image_5c *p1 = NpicCastImage (np1); int s1, t1, z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax && 0 <= t1 && t1 < p1->tmax && 0 <= s1 && s1 < p1->smax ) p1->pix[s1][t1][z1][y1][x1] = atoi(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_5L : { Npic_image_5l *p1 = NpicCastImage (np1); int s1, t1, z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax && 0 <= t1 && t1 < p1->tmax && 0 <= s1 && s1 < p1->smax ) p1->pix[s1][t1][z1][y1][x1] = atoi(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_5D : { Npic_image_5d *p1 = NpicCastImage (np1); int s1, t1, z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax && 0 <= t1 && t1 < p1->tmax && 0 <= s1 && s1 < p1->smax ) p1->pix[s1][t1][z1][y1][x1] = atof(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_5Q : { Npic_image_5q *p1 = NpicCastImage (np1); int a, b, c, d, s1, t1, z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && sscanf (argv[3], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax && 0 <= t1 && t1 < p1->tmax && 0 <= s1 && s1 < p1->smax ) { p1->pix[s1][t1][z1][y1][x1].a = a; p1->pix[s1][t1][z1][y1][x1].b = b; p1->pix[s1][t1][z1][y1][x1].c = c; p1->pix[s1][t1][z1][y1][x1].d = d; } else bad_coord = 1; } break; case NPIC_IMAGE_6C : { Npic_image_6c *p1 = NpicCastImage (np1); int r1, s1, t1, z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax && 0 <= t1 && t1 < p1->tmax && 0 <= s1 && s1 < p1->smax && 0 <= r1 && r1 < p1->rmax ) p1->pix[r1][s1][t1][z1][y1][x1] = atoi(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_6L : { Npic_image_6l *p1 = NpicCastImage (np1); int r1, s1, t1, z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax && 0 <= t1 && t1 < p1->tmax && 0 <= s1 && s1 < p1->smax && 0 <= r1 && r1 < p1->rmax ) p1->pix[r1][s1][t1][z1][y1][x1] = atoi(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_6D : { Npic_image_6d *p1 = NpicCastImage (np1); int r1, s1, t1, z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax && 0 <= t1 && t1 < p1->tmax && 0 <= s1 && s1 < p1->smax && 0 <= r1 && r1 < p1->rmax ) p1->pix[r1][s1][t1][z1][y1][x1] = atof(argv[3]); else bad_coord = 1; } break; case NPIC_IMAGE_6Q : { Npic_image_6q *p1 = NpicCastImage (np1); int a, b, c, d, r1, s1, t1, z1, y1, x1; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && sscanf (argv[3], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 && 0 <= x1 && x1 < p1->xmax && 0 <= y1 && y1 < p1->ymax && 0 <= z1 && z1 < p1->zmax && 0 <= t1 && t1 < p1->tmax && 0 <= s1 && s1 < p1->smax && 0 <= r1 && r1 < p1->rmax ) { p1->pix[r1][s1][t1][z1][y1][x1].a = a; p1->pix[r1][s1][t1][z1][y1][x1].b = b; p1->pix[r1][s1][t1][z1][y1][x1].c = c; p1->pix[r1][s1][t1][z1][y1][x1].d = d; } else bad_coord = 1; } break; default : fprintf (stderr, "ERROR: unsupported image type\n"); exit (1); } if (bad_coord) { fprintf (stderr, "ERROR: bad coordinates for image type\n"); exit (1); } ArgShift (&argc, &argv, 3); modified = 1; } else if (strcmp (argv[1], "-rect") == 0) { /*-----------------------------*/ ArgcExit (argc, 5); switch (np1->type) { case NPIC_IMAGE_2C : { int y1, x1, y2, x2; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && sscanf (argv[3], "%d:%d", &y2, &x2) == 2 ) NpicDrawRect_2c (np1, y1, x1, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_2L : { int y1, x1, y2, x2; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && sscanf (argv[3], "%d:%d", &y2, &x2) == 2 ) NpicDrawRect_2l (np1, y1, x1, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_2D : { int y1, x1, y2, x2; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && sscanf (argv[3], "%d:%d", &y2, &x2) == 2 ) NpicDrawRect_2d (np1, y1, x1, y2, x2, atof(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_2Q : { int a, b, c, d, y1, x1, y2, x2; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && sscanf (argv[3], "%d:%d", &y2, &x2) == 2 && sscanf (argv[4], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 ) NpicDrawRect_2q (np1, y1, x1, y2, x2, a, b, c, d); else bad_coord = 1; } break; case NPIC_IMAGE_3C : { int z1, y1, x1, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && sscanf (argv[3], "%d:%d:%d", &z2, &y2, &x2) == 3 ) NpicDrawRect_3c (np1, z1, y1, x1, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_3L : { int z1, y1, x1, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && sscanf (argv[3], "%d:%d:%d", &z2, &y2, &x2) == 3 ) NpicDrawRect_3l (np1, z1, y1, x1, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_3D : { int z1, y1, x1, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && sscanf (argv[3], "%d:%d:%d", &z2, &y2, &x2) == 3 ) NpicDrawRect_3d (np1, z1, y1, x1, z2, y2, x2, atof(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_3Q : { int a, b, c, d, z1, y1, x1, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && sscanf (argv[3], "%d:%d:%d", &z2, &y2, &x2) == 3 && sscanf (argv[4], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 ) NpicDrawRect_3q (np1, z1, y1, x1, z2, y2, x2, a, b, c, d); else bad_coord = 1; } break; case NPIC_IMAGE_4C : { int t1, z1, y1, x1, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &t2, &z2, &y2, &x2) == 4 ) NpicDrawRect_4c (np1, t1, z1, y1, x1, t2, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_4L : { int t1, z1, y1, x1, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &t2, &z2, &y2, &x2) == 4 ) NpicDrawRect_4l (np1, t1, z1, y1, x1, t2, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_4D : { int t1, z1, y1, x1, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &t2, &z2, &y2, &x2) == 4 ) NpicDrawRect_4d (np1, t1, z1, y1, x1, t2, z2, y2, x2, atof(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_4Q : { int a, b, c, d, t1, z1, y1, x1, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &t2, &z2, &y2, &x2) == 4 && sscanf (argv[4], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 ) NpicDrawRect_4q (np1, t1, z1, y1, x1, t2, z2, y2, x2, a, b, c, d); else bad_coord = 1; } break; case NPIC_IMAGE_5C : { int s1, t1, z1, y1, x1, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && sscanf (argv[3], "%d:%d:%d:%d:%d", &s2, &t2, &z2, &y2, &x2) == 5 ) NpicDrawRect_5c (np1, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_5L : { int s1, t1, z1, y1, x1, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && sscanf (argv[3], "%d:%d:%d:%d:%d", &s2, &t2, &z2, &y2, &x2) == 5 ) NpicDrawRect_5l (np1, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_5D : { int s1, t1, z1, y1, x1, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && sscanf (argv[3], "%d:%d:%d:%d:%d", &s2, &t2, &z2, &y2, &x2) == 5 ) NpicDrawRect_5d (np1, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2, atof(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_5Q : { int a, b, c, d, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && sscanf (argv[3], "%d:%d:%d:%d:%d", &s2, &t2, &z2, &y2, &x2) == 5 && sscanf (argv[4], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 ) NpicDrawRect_5q (np1, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2, a, b, c, d); else bad_coord = 1; } break; case NPIC_IMAGE_6C : { int r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && sscanf (argv[3], "%d:%d:%d:%d:%d:%d", &r2, &s2, &t2, &z2, &y2, &x2) == 6 ) NpicDrawRect_6c (np1, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_6L : { int r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && sscanf (argv[3], "%d:%d:%d:%d:%d:%d", &r2, &s2, &t2, &z2, &y2, &x2) == 6 ) NpicDrawRect_6l (np1, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_6D : { int r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && sscanf (argv[3], "%d:%d:%d:%d:%d:%d", &r2, &s2, &t2, &z2, &y2, &x2) == 6 ) NpicDrawRect_6d (np1, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2, atof(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_6Q : { int a, b, c, d, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && sscanf (argv[3], "%d:%d:%d:%d:%d:%d", &r2, &s2, &t2, &z2, &y2, &x2) == 6 && sscanf (argv[4], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 ) NpicDrawRect_6q (np1, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2, a, b, c, d); else bad_coord = 1; } break; default : fprintf (stderr, "ERROR: unsupported image type\n"); exit (1); } if (bad_coord) { fprintf (stderr, "ERROR: bad coordinates for image type\n"); exit (1); } ArgShift (&argc, &argv, 4); modified = 1; } else if (strcmp (argv[1], "-ellip") == 0) { /*----------------------*/ ArgcExit (argc, 5); switch (np1->type) { case NPIC_IMAGE_2C : { int y1, x1, y2, x2; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && sscanf (argv[3], "%d:%d", &y2, &x2) == 2 ) NpicDrawEllipse_2c (np1, y1, x1, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_2L : { int y1, x1, y2, x2; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && sscanf (argv[3], "%d:%d", &y2, &x2) == 2 ) NpicDrawEllipse_2l (np1, y1, x1, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_2D : { int y1, x1, y2, x2; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && sscanf (argv[3], "%d:%d", &y2, &x2) == 2 ) NpicDrawEllipse_2d (np1, y1, x1, y2, x2, atof(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_2Q : { int a, b, c, d, y1, x1, y2, x2; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && sscanf (argv[3], "%d:%d", &y2, &x2) == 2 && sscanf (argv[4], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 ) NpicDrawEllipse_2q (np1, y1, x1, y2, x2, a, b, c, d); else bad_coord = 1; } break; case NPIC_IMAGE_3C : { int z1, y1, x1, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && sscanf (argv[3], "%d:%d:%d", &z2, &y2, &x2) == 3 ) NpicDrawEllipse_3c (np1, z1, y1, x1, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_3L : { int z1, y1, x1, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && sscanf (argv[3], "%d:%d:%d", &z2, &y2, &x2) == 3 ) NpicDrawEllipse_3l (np1, z1, y1, x1, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_3D : { int z1, y1, x1, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && sscanf (argv[3], "%d:%d:%d", &z2, &y2, &x2) == 3 ) NpicDrawEllipse_3d (np1, z1, y1, x1, z2, y2, x2, atof(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_3Q : { int a, b, c, d, z1, y1, x1, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && sscanf (argv[3], "%d:%d:%d", &z2, &y2, &x2) == 3 && sscanf (argv[4], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 ) NpicDrawEllipse_3q (np1, z1, y1, x1, z2, y2, x2, a, b, c, d); else bad_coord = 1; } break; case NPIC_IMAGE_4C : { int t1, z1, y1, x1, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &t2, &z2, &y2, &x2) == 4 ) NpicDrawEllipse_4c (np1, t1, z1, y1, x1, t2, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_4L : { int t1, z1, y1, x1, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &t2, &z2, &y2, &x2) == 4 ) NpicDrawEllipse_4l (np1, t1, z1, y1, x1, t2, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_4D : { int t1, z1, y1, x1, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &t2, &z2, &y2, &x2) == 4 ) NpicDrawEllipse_4d (np1, t1, z1, y1, x1, t2, z2, y2, x2, atof(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_4Q : { int a, b, c, d, t1, z1, y1, x1, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &t2, &z2, &y2, &x2) == 4 && sscanf (argv[4], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 ) NpicDrawEllipse_4q (np1, t1, z1, y1, x1, t2, z2, y2, x2, a, b, c, d); else bad_coord = 1; } break; case NPIC_IMAGE_5C : { int s1, t1, z1, y1, x1, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && sscanf (argv[3], "%d:%d:%d:%d:%d", &s2, &t2, &z2, &y2, &x2) == 5 ) NpicDrawEllipse_5c (np1, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_5L : { int s1, t1, z1, y1, x1, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && sscanf (argv[3], "%d:%d:%d:%d:%d", &s2, &t2, &z2, &y2, &x2) == 5 ) NpicDrawEllipse_5l (np1, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_5D : { int s1, t1, z1, y1, x1, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && sscanf (argv[3], "%d:%d:%d:%d:%d", &s2, &t2, &z2, &y2, &x2) == 5 ) NpicDrawEllipse_5d (np1, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2, atof(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_5Q : { int a, b, c, d, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && sscanf (argv[3], "%d:%d:%d:%d:%d", &s2, &t2, &z2, &y2, &x2) == 5 && sscanf (argv[4], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 ) NpicDrawEllipse_5q (np1, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2, a, b, c, d); else bad_coord = 1; } break; case NPIC_IMAGE_6C : { int r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && sscanf (argv[3], "%d:%d:%d:%d:%d:%d", &r2, &s2, &t2, &z2, &y2, &x2) == 6 ) NpicDrawEllipse_6c (np1, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_6L : { int r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && sscanf (argv[3], "%d:%d:%d:%d:%d:%d", &r2, &s2, &t2, &z2, &y2, &x2) == 6 ) NpicDrawEllipse_6l (np1, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2, atoi(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_6D : { int r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && sscanf (argv[3], "%d:%d:%d:%d:%d:%d", &r2, &s2, &t2, &z2, &y2, &x2) == 6 ) NpicDrawEllipse_6d (np1, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2, atof(argv[4])); else bad_coord = 1; } break; case NPIC_IMAGE_6Q : { int a, b, c, d, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && sscanf (argv[3], "%d:%d:%d:%d:%d:%d", &r2, &s2, &t2, &z2, &y2, &x2) == 6 && sscanf (argv[4], "%d:%d:%d:%d", &a, &b, &c, &d) == 4 ) NpicDrawEllipse_6q (np1, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2, a, b, c, d); else bad_coord = 1; } break; default : fprintf (stderr, "ERROR: unsupported image type\n"); exit (1); } if (bad_coord) { fprintf (stderr, "ERROR: bad coordinates for image type\n"); exit (1); } ArgShift (&argc, &argv, 4); modified = 1; } else if (strcmp (argv[1], "-line") == 0) { /*----------------------*/ ArgcExit (argc, 6); switch (np1->type) { case NPIC_IMAGE_2C : { int y1, x1, y2, x2; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && sscanf (argv[3], "%d:%d", &y2, &x2) == 2 ) NpicDrawLine_2c (np1, y1, x1, y2, x2, atoi(argv[4]), atoi(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_2L : { int y1, x1, y2, x2; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && sscanf (argv[3], "%d:%d", &y2, &x2) == 2 ) NpicDrawLine_2l (np1, y1, x1, y2, x2, atoi(argv[4]), atoi(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_2D : { int y1, x1, y2, x2; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && sscanf (argv[3], "%d:%d", &y2, &x2) == 2 ) NpicDrawLine_2d (np1, y1, x1, y2, x2, atof(argv[4]), atof(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_2Q : { int a1, b1, c1, d1, a2, b2, c2, d2, y1, x1, y2, x2; if ( sscanf (argv[2], "%d:%d", &y1, &x1) == 2 && sscanf (argv[3], "%d:%d", &y2, &x2) == 2 && sscanf (argv[4], "%d:%d:%d:%d", &a1, &b1, &c1, &d1) == 4 && sscanf (argv[5], "%d:%d:%d:%d", &a2, &b2, &c2, &d2) == 4 ) NpicDrawLine_2q (np1, y1, x1, y2, x2, a1, b1, c1, d1, a2, b2, c2, d2); else bad_coord = 1; } break; case NPIC_IMAGE_3C : { int z1, y1, x1, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && sscanf (argv[3], "%d:%d:%d", &z2, &y2, &x2) == 3 ) NpicDrawLine_3c (np1, z1, y1, x1, z2, y2, x2, atoi(argv[4]), atoi(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_3L : { int z1, y1, x1, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && sscanf (argv[3], "%d:%d:%d", &z2, &y2, &x2) == 3 ) NpicDrawLine_3l (np1, z1, y1, x1, z2, y2, x2, atoi(argv[4]), atoi(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_3D : { int z1, y1, x1, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && sscanf (argv[3], "%d:%d:%d", &z2, &y2, &x2) == 3 ) NpicDrawLine_3d (np1, z1, y1, x1, z2, y2, x2, atof(argv[4]), atof(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_3Q : { int a1, b1, c1, d1, a2, b2, c2, d2, z1, y1, x1, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d", &z1, &y1, &x1) == 3 && sscanf (argv[3], "%d:%d:%d", &z2, &y2, &x2) == 3 && sscanf (argv[4], "%d:%d:%d:%d", &a1, &b1, &c1, &d1) == 4 && sscanf (argv[5], "%d:%d:%d:%d", &a2, &b2, &c2, &d2) == 4 ) NpicDrawLine_3q (np1, z1, y1, x1, z2, y2, x2, a1, b1, c1, d1, a2, b2, c2, d2); else bad_coord = 1; } break; case NPIC_IMAGE_4C : { int t1, z1, y1, x1, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &t2, &z2, &y2, &x2) == 4 ) NpicDrawLine_4c (np1, t1, z1, y1, x1, t2, z2, y2, x2, atoi(argv[4]), atoi(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_4L : { int t1, z1, y1, x1, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &t2, &z2, &y2, &x2) == 4 ) NpicDrawLine_4l (np1, t1, z1, y1, x1, t2, z2, y2, x2, atoi(argv[4]), atoi(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_4D : { int t1, z1, y1, x1, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &t2, &z2, &y2, &x2) == 4 ) NpicDrawLine_4d (np1, t1, z1, y1, x1, t2, z2, y2, x2, atof(argv[4]), atof(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_4Q : { int a1, b1, c1, d1, a2, b2, c2, d2, t1, z1, y1, x1, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d", &t1, &z1, &y1, &x1) == 4 && sscanf (argv[3], "%d:%d:%d:%d", &t2, &z2, &y2, &x2) == 4 && sscanf (argv[4], "%d:%d:%d:%d", &a1, &b1, &c1, &d1) == 4 && sscanf (argv[5], "%d:%d:%d:%d", &a2, &b2, &c2, &d2) == 4 ) NpicDrawLine_4q (np1, t1, z1, y1, x1, t2, z2, y2, x2, a1, b1, c1, d1, a2, b2, c2, d2); else bad_coord = 1; } break; case NPIC_IMAGE_5C : { int s1, t1, z1, y1, x1, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && sscanf (argv[3], "%d:%d:%d:%d:%d", &s2, &t2, &z2, &y2, &x2) == 5 ) NpicDrawLine_5c (np1, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2, atoi(argv[4]), atoi(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_5L : { int s1, t1, z1, y1, x1, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && sscanf (argv[3], "%d:%d:%d:%d:%d", &s2, &t2, &z2, &y2, &x2) == 5 ) NpicDrawLine_5l (np1, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2, atoi(argv[4]), atoi(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_5D : { int s1, t1, z1, y1, x1, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && sscanf (argv[3], "%d:%d:%d:%d:%d", &s2, &t2, &z2, &y2, &x2) == 5 ) NpicDrawLine_5d (np1, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2, atof(argv[4]), atof(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_5Q : { int a1, b1, c1, d1, a2, b2, c2, d2, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d", &s1, &t1, &z1, &y1, &x1) == 5 && sscanf (argv[3], "%d:%d:%d:%d:%d", &s2, &t2, &z2, &y2, &x2) == 5 && sscanf (argv[4], "%d:%d:%d:%d", &a1, &b1, &c1, &d1) == 4 && sscanf (argv[5], "%d:%d:%d:%d", &a2, &b2, &c2, &d2) == 4 ) NpicDrawLine_5q (np1, s1, t1, z1, y1, x1, s2, t2, z2, y2, x2, a1, b1, c1, d1, a2, b2, c2, d2); else bad_coord = 1; } break; case NPIC_IMAGE_6C : { int r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && sscanf (argv[3], "%d:%d:%d:%d:%d:%d", &r2, &s2, &t2, &z2, &y2, &x2) == 6 ) NpicDrawLine_6c (np1, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2, atoi(argv[4]), atoi(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_6L : { int r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && sscanf (argv[3], "%d:%d:%d:%d:%d:%d", &r2, &s2, &t2, &z2, &y2, &x2) == 6 ) NpicDrawLine_6l (np1, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2, atoi(argv[4]), atoi(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_6D : { int r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && sscanf (argv[3], "%d:%d:%d:%d:%d:%d", &r2, &s2, &t2, &z2, &y2, &x2) == 6 ) NpicDrawLine_6d (np1, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2, atof(argv[4]), atof(argv[5])); else bad_coord = 1; } break; case NPIC_IMAGE_6Q : { int a1, b1, c1, d1, a2, b2, c2, d2, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2; if ( sscanf (argv[2], "%d:%d:%d:%d:%d:%d", &r1, &s1, &t1, &z1, &y1, &x1) == 6 && sscanf (argv[3], "%d:%d:%d:%d:%d:%d", &r2, &s2, &t2, &z2, &y2, &x2) == 6 && sscanf (argv[4], "%d:%d:%d:%d", &a1, &b1, &c1, &d1) == 4 && sscanf (argv[5], "%d:%d:%d:%d", &a2, &b2, &c2, &d2) == 4 ) NpicDrawLine_6q (np1, r1, s1, t1, z1, y1, x1, r2, s2, t2, z2, y2, x2, a1, b1, c1, d1, a2, b2, c2, d2); else bad_coord = 1; } break; default : fprintf (stderr, "ERROR: unsupported image type\n"); exit (1); } if (bad_coord) { fprintf (stderr, "ERROR: bad coordinates for image type\n"); exit (1); } ArgShift (&argc, &argv, 5); modified = 1; } else { /*-----------------------------------------------------------*/ fprintf (stderr, "ERROR: unknown argument \"%s\", " "type \"npic-draw -h\" to get help.\n", argv[1]); exit (1); } } if (modified) { printf ("Saving \"%s\" ... \n", out1); NpicWriteImage (np1, out1); } exit (0); }