diff options
Diffstat (limited to 'pkg/images/tv/tvmark/mktools.x')
-rw-r--r-- | pkg/images/tv/tvmark/mktools.x | 505 |
1 files changed, 505 insertions, 0 deletions
diff --git a/pkg/images/tv/tvmark/mktools.x b/pkg/images/tv/tvmark/mktools.x new file mode 100644 index 00000000..33f1424b --- /dev/null +++ b/pkg/images/tv/tvmark/mktools.x @@ -0,0 +1,505 @@ +include <ctype.h> +include "tvmark.h" + +# MK_INIT -- Procedure to initialize the image marking code. + +procedure mk_init (mk) + +pointer mk # pointer to immark structure + +begin + call malloc (mk, LEN_MARKSTRUCT, TY_STRUCT) + + # Initialize the mark type parameters. + MK_MARK(mk) = EOS + MK_CSTRING(mk) = EOS + MK_RSTRING(mk) = EOS + MK_MKTYPE(mk) = 0 + MK_NCIRCLES(mk) = 0 + MK_NELLIPSES(mk) = 0 + MK_NSQUARES(mk) = 0 + MK_NRECTANGLES(mk) = 0 + MK_NXOFFSET(mk) = 0 + MK_NYOFFSET(mk) = 0 + + # Initialize the mark shape parameters. + MK_RATIO(mk) = 1.0 + MK_ELLIPTICITY(mk) = 0.0 + MK_RTHETA(mk) = 0.0 + MK_ETHETA(mk) = 0.0 + + # Initialize the pointers. + MK_RADII(mk) = NULL + MK_AXES(mk) = NULL + MK_SLENGTHS(mk) = NULL + MK_RLENGTHS(mk) = NULL + + MK_X1(mk) = INDEFI + MK_Y1(mk) = INDEFI + MK_X2(mk) = INDEFI + MK_Y2(mk) = INDEFI + + # Initialize actual drawing parameters. + MK_NUMBER(mk) = NO + MK_LABEL(mk) = NO + MK_FONT(mk) = EOS + MK_GRAYLEVEL(mk) = 0 + MK_SIZE(mk) = 1 + MK_SZPOINT(mk) = 1 + + # Initialize file parameters strings. + MK_IMAGE(mk) = EOS + MK_OUTIMAGE(mk) = EOS + MK_COORDS(mk) = EOS + MK_DELETIONS(mk) = EOS + MK_LOGFILE(mk) = EOS + MK_AUTOLOG(mk) = NO + + # Initilize the display command parameters. + MK_FRAME(mk) = 1 + MK_TOLERANCE(mk) = 1.0 + + # Initialize the buffers. + call mk_rinit (mk) +end + + +# MK_RINIT -- Procedure to initialize the immark structure. + +procedure mk_rinit (mk) + +pointer mk # pointer to immark structure + +begin + call mk_rfree (mk) + call malloc (MK_RADII(mk), MAX_NMARKS, TY_REAL) + call malloc (MK_AXES(mk), MAX_NMARKS, TY_REAL) + call malloc (MK_SLENGTHS(mk), MAX_NMARKS, TY_REAL) + call malloc (MK_RLENGTHS(mk), MAX_NMARKS, TY_REAL) +end + + +# MK_INDEFR -- Procedure to reinitialize the size dependent buffers. + +procedure mk_indefr (mk) + +pointer mk # pointer to immark + +int ncircles, nsquares, nellipses, nrectangles +int mk_stati() + +begin + ncircles = mk_stati (mk, NCIRCLES) + nellipses = mk_stati (mk, NELLIPSES) + nsquares = mk_stati (mk, NSQUARES) + nrectangles = mk_stati (mk, NRECTANGLES) + + if (ncircles > 0) + call amovkr (INDEFR, Memr[MK_RADII(mk)], ncircles) + if (nellipses > 0) + call amovkr (INDEFR, Memr[MK_AXES(mk)], nellipses) + if (nsquares > 0) + call amovkr (INDEFR, Memr[MK_SLENGTHS(mk)], nsquares) + if (nrectangles > 0) + call amovkr (INDEFR, Memr[MK_RLENGTHS(mk)], nrectangles) + +end + + +# MK_REALLOC -- Procedure to reallocate regions buffers. + +procedure mk_realloc (mk, ncircles, nellipses, nsquares, nrectangles) + +pointer mk # pointer to immark structure +int ncircles # number of circles +int nellipses # number of ellipses +int nsquares # number of squares +int nrectangles # number of rectangles + +int nc, ne, ns, nr +int mk_stati() + +begin + if (ncircles > 0) + call realloc (MK_RADII(mk), ncircles, TY_REAL) + else { + call mfree (MK_RADII(mk), TY_REAL) + MK_RADII(mk) = NULL + } + + if (nellipses > 0) + call realloc (MK_AXES(mk), nellipses, TY_REAL) + else { + call mfree (MK_AXES(mk), TY_REAL) + MK_AXES(mk) = NULL + } + + if (nsquares > 0) + call realloc (MK_SLENGTHS(mk), nsquares, TY_REAL) + else { + call mfree (MK_SLENGTHS(mk), TY_REAL) + MK_SLENGTHS(mk) = NULL + } + + if (nrectangles > 0) + call realloc (MK_RLENGTHS(mk), nrectangles, TY_REAL) + else { + call mfree (MK_RLENGTHS(mk), TY_REAL) + MK_RLENGTHS(mk) = NULL + } + + nc = mk_stati (mk, NCIRCLES) + ne = mk_stati (mk, NELLIPSES) + ns = mk_stati (mk, NSQUARES) + nr = mk_stati (mk, NRECTANGLES) + + if (ncircles > nc) + call amovkr (INDEFR, Memr[MK_RADII(mk)+nc], ncircles - nc) + if (nellipses > ne) + call amovkr (INDEFR, Memr[MK_AXES(mk)+ne], nellipses - ne) + if (nsquares > ns) + call amovkr (INDEFR, Memr[MK_SLENGTHS(mk)+ns], nsquares - ns) + if (nrectangles > nr) + call amovkr (INDEFR, Memr[MK_RLENGTHS(mk)+nr], nrectangles - nr) +end + + +# MK_FREE -- Procedure to free the immark structure. + +procedure mk_free (mk) + +pointer mk # pointer to immark structure + +begin + call mk_rfree (mk) + call mfree (mk, TY_STRUCT) +end + + +# MK_RFREE -- Procedure to free the regions portion of the immark structure. + +procedure mk_rfree (mk) + +pointer mk # pointer to immark structure + +begin + if (MK_RADII(mk) != NULL) + call mfree (MK_RADII(mk), TY_REAL) + MK_RADII(mk) = NULL + if (MK_AXES(mk) != NULL) + call mfree (MK_AXES(mk), TY_REAL) + MK_AXES(mk) = NULL + if (MK_SLENGTHS(mk) != NULL) + call mfree (MK_SLENGTHS(mk), TY_REAL) + MK_SLENGTHS(mk) = NULL + if (MK_RLENGTHS(mk) != NULL) + call mfree (MK_RLENGTHS(mk), TY_REAL) + MK_RLENGTHS(mk) = NULL +end + + +# MK_STATI -- Procedure to fetch the value of an immark integer parameter. + +int procedure mk_stati (mk, param) + +pointer mk # pointer to immark structure +int param # parameter to be fetched + +begin + switch (param) { + case AUTOLOG: + return (MK_AUTOLOG(mk)) + case NUMBER: + return (MK_NUMBER(mk)) + case LABEL: + return (MK_LABEL(mk)) + case GRAYLEVEL: + return (MK_GRAYLEVEL(mk)) + case SIZE: + return (MK_SIZE(mk)) + case SZPOINT: + return (MK_SZPOINT(mk)) + case FRAME: + return (MK_FRAME(mk)) + case NCIRCLES: + return (MK_NCIRCLES(mk)) + case NELLIPSES: + return (MK_NELLIPSES(mk)) + case NSQUARES: + return (MK_NSQUARES(mk)) + case NRECTANGLES: + return (MK_NRECTANGLES(mk)) + case MKTYPE: + return (MK_MKTYPE(mk)) + case X1: + return (MK_X1(mk)) + case Y1: + return (MK_Y1(mk)) + case X2: + return (MK_X2(mk)) + case Y2: + return (MK_Y2(mk)) + case NXOFFSET: + return (MK_NXOFFSET(mk)) + case NYOFFSET: + return (MK_NYOFFSET(mk)) + default: + call error (0, "MK_STATI: Unknown integer parameter.") + } +end + + +# MK_STATP -- Procedure to fetch the value of a pointer parameter. + +pointer procedure mk_statp (mk, param) + +pointer mk # pointer to immark structure +int param # parameter to be fetched + +begin + switch (param) { + case RADII: + return (MK_RADII(mk)) + case AXES: + return (MK_AXES(mk)) + case SLENGTHS: + return (MK_SLENGTHS(mk)) + case RLENGTHS: + return (MK_RLENGTHS(mk)) + default: + call error (0, "MK_STATP: Unknown pointer parameter.") + } +end + + +# MK_STATR -- Procedure to fetch the value of a real parameter. + +real procedure mk_statr (mk, param) + +pointer mk # pointer to immark structure +int param # parameter to be fetched + +begin + switch (param) { + case RATIO: + return (MK_RATIO(mk)) + case ELLIPTICITY: + return (MK_ELLIPTICITY(mk)) + case RTHETA: + return (MK_RTHETA(mk)) + case ETHETA: + return (MK_ETHETA(mk)) + case TOLERANCE: + return (MK_TOLERANCE(mk)) + default: + call error (0, "MK_STATR: Unknown real parameter.") + } +end + + +# MK_STATS -- Procedure to fetch the value of a string parameter. + +procedure mk_stats (mk, param, str, maxch) + +pointer mk # pointer to immark structure +int param # parameter to be fetched +char str[ARB] # output string +int maxch # maximum number of characters + +begin + switch (param) { + case IMAGE: + call strcpy (MK_IMAGE(mk), str, maxch) + case OUTIMAGE: + call strcpy (MK_OUTIMAGE(mk), str, maxch) + case COORDS: + call strcpy (MK_COORDS(mk), str, maxch) + case DELETIONS: + call strcpy (MK_DELETIONS(mk), str, maxch) + case LOGFILE: + call strcpy (MK_LOGFILE(mk), str, maxch) + case FONT: + call strcpy (MK_FONT(mk), str, maxch) + case MARK: + call strcpy (MK_MARK(mk), str, maxch) + case CSTRING: + call strcpy (MK_CSTRING(mk), str, maxch) + case RSTRING: + call strcpy (MK_RSTRING(mk), str, maxch) + default: + call error (0, "MK_STATS: Unknown string parameter.") + } +end + + +# MK_SETI -- Procedure to set the value of an integer parameter. + +procedure mk_seti (mk, param, value) + +pointer mk # pointer to immark structure +int param # parameter to be fetched +int value # value of the integer parameter + +begin + switch (param) { + case AUTOLOG: + MK_AUTOLOG(mk) = value + case NUMBER: + MK_NUMBER(mk) = value + case LABEL: + MK_LABEL(mk) = value + case GRAYLEVEL: + MK_GRAYLEVEL(mk) = value + case SIZE: + MK_SIZE(mk) = value + case SZPOINT: + MK_SZPOINT(mk) = value + case FRAME: + MK_FRAME(mk) = value + case NCIRCLES: + MK_NCIRCLES(mk) = value + case NELLIPSES: + MK_NELLIPSES(mk) = value + case NSQUARES: + MK_NSQUARES(mk) = value + case NRECTANGLES: + MK_NRECTANGLES(mk) = value + case MKTYPE: + MK_MKTYPE(mk) = value + case X1: + MK_X1(mk) = value + case Y1: + MK_Y1(mk) = value + case X2: + MK_X2(mk) = value + case Y2: + MK_Y2(mk) = value + case NXOFFSET: + MK_NXOFFSET(mk) = value + case NYOFFSET: + MK_NYOFFSET(mk) = value + default: + call error (0, "MK_SETI: Unknown integer parameter.") + } +end + + +# MK_SETP -- Procedure to set the value of a pointer parameter. + +procedure mk_setp (mk, param, value) + +pointer mk # pointer to immark structure +int param # parameter to be fetched +pointer value # value of the pointer parameter + +begin + switch (param) { + case RADII: + MK_RADII(mk) = value + case AXES: + MK_AXES(mk) = value + case SLENGTHS: + MK_SLENGTHS(mk) = value + case RLENGTHS: + MK_RLENGTHS(mk) = value + default: + call error (0, "MK_SETP: Unknown pointer parameter.") + } +end + + +# MK_SETR -- Procedure to set the value of a real parameter. + +procedure mk_setr (mk, param, value) + +pointer mk # pointer to immark structure +int param # parameter to be fetched +real value # real parameter + +begin + switch (param) { + case RATIO: + MK_RATIO(mk) = value + case ELLIPTICITY: + MK_ELLIPTICITY(mk) = value + case RTHETA: + MK_RTHETA(mk) = value + case ETHETA: + MK_ETHETA(mk) = value + case TOLERANCE: + MK_TOLERANCE(mk) = value + default: + call error (0, "MK_SETR: Unknown real parameter.") + } +end + + +# MK_SETS -- Procedure to set the value of a string parameter. + +procedure mk_sets (mk, param, str) + +pointer mk # pointer to immark structure +int param # parameter to be fetched +char str[ARB] # output string + +int rp, ntemp +pointer sp, rtemp +int fnldir(), mk_gmarks() + +begin + switch (param) { + case IMAGE: + call strcpy (str, MK_IMAGE(mk), SZ_FNAME) + + case OUTIMAGE: + call strcpy (str, MK_OUTIMAGE(mk), SZ_FNAME) + + case COORDS: + rp = fnldir (str, MK_COORDS(mk), SZ_FNAME) + call strcpy (str[rp+1], MK_COORDS(mk), SZ_FNAME) + + case DELETIONS: + rp = fnldir (str, MK_DELETIONS(mk), SZ_FNAME) + call strcpy (str[rp+1], MK_DELETIONS(mk), SZ_FNAME) + + case LOGFILE: + rp = fnldir (str, MK_LOGFILE(mk), SZ_FNAME) + call strcpy (str[rp+1], MK_LOGFILE(mk), SZ_FNAME) + + case FONT: + rp = fnldir (str, MK_FONT(mk), SZ_FNAME) + call strcpy (str[rp+1], MK_FONT(mk), SZ_FNAME) + + case MARK: + call strcpy (str, MK_MARK(mk), SZ_FNAME) + + case CSTRING: + call smark (sp) + call salloc (rtemp, MAX_NMARKS, TY_REAL) + ntemp = mk_gmarks (str, Memr[rtemp], MAX_NMARKS) + if (ntemp > 0) { + call strcpy (str, MK_CSTRING(mk), SZ_FNAME) + MK_NCIRCLES(mk) = ntemp + call realloc (MK_RADII(mk), ntemp, TY_REAL) + call amovr (Memr[rtemp], Memr[MK_RADII(mk)], ntemp) + call asrtr (Memr[MK_RADII(mk)], Memr[MK_RADII(mk)], ntemp) + } + call sfree (sp) + + case RSTRING: + call smark (sp) + call salloc (rtemp, MAX_NMARKS, TY_REAL) + ntemp = mk_gmarks (str, Memr[rtemp], MAX_NMARKS) + if (ntemp > 0) { + call strcpy (str, MK_RSTRING(mk), SZ_FNAME) + MK_NRECTANGLES(mk) = ntemp + call realloc (MK_RLENGTHS(mk), ntemp, TY_REAL) + call amovr (Memr[rtemp], Memr[MK_RLENGTHS(mk)], ntemp) + call asrtr (Memr[MK_RLENGTHS(mk)], Memr[MK_RLENGTHS(mk)], ntemp) + } + call sfree (sp) + + default: + call error (0, "MK_SETS: Unknown string parameter.") + } +end |