00001
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #if HAVE_CONFIG_H
00034 #include <config.h>
00035 #endif
00036 #include <tcl.h>
00037 #include <tk.h>
00038 #include <sadie.h>
00039 #include "tclsadie.h"
00040
00045 static const char atitle[] = DEFAULT_TCL_ARRAY_TITLE;
00046 static const char ixname[] = DEFAULT_OUT_IMAGE_NAME_INDEX;
00072 int
00073 Sadie_NewFunctions_SineWaveCmd (ClientData client_data, Tcl_Interp *interp,
00074 int objc, Tcl_Obj * const objv[])
00075 {
00076 IMAGE *outimg = NULL;
00077 uint32_t lines, pix;
00078 double period, phase;
00079
00080 if (objc != 2)
00081 {
00082 Tcl_WrongNumArgs (interp, 1, objv, atitle);
00083 return TCL_ERROR;
00084 }
00085 if ((GetSadieUintFromObj2 (interp, objv[1], "lines", &lines)
00086 != TCL_OK)
00087 || (GetSadieUintFromObj2 (interp, objv[1], "pix", &pix)
00088 != TCL_OK)
00089 || (GetSadieDoubleFromObj2 (interp, objv[1], "period", &period)
00090 != TCL_OK)
00091 || (GetSadieDoubleFromObj2 (interp, objv[1], "phase", &phase)
00092 != TCL_OK))
00093 return TCL_ERROR;
00094 SINEWAVE (lines, pix, period, phase, &outimg);
00095 return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00096 }
00097
00117 int
00118 Sadie_NewFunctions_ChirpCmd (ClientData client_data, Tcl_Interp *interp,
00119 int objc, Tcl_Obj * const objv[])
00120 {
00121 IMAGE *outimg = NULL;
00122 uint32_t lines, pix;
00123 double period;
00124
00125 if (objc != 2)
00126 {
00127 Tcl_WrongNumArgs (interp, 1, objv, atitle);
00128 return TCL_ERROR;
00129 }
00130 if ((GetSadieUintFromObj2 (interp, objv[1], "lines", &lines)
00131 != TCL_OK)
00132 || (GetSadieUintFromObj2 (interp, objv[1], "pix", &pix)
00133 != TCL_OK)
00134 || (GetSadieDoubleFromObj2 (interp, objv[1], "period", &period)
00135 != TCL_OK))
00136 return TCL_ERROR;
00137 CHIRP (lines, pix, period, &outimg);
00138 return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00139 }
00140
00160 int
00161 Sadie_NewFunctions_SineStarCmd (ClientData client_data, Tcl_Interp *interp,
00162 int objc, Tcl_Obj * const objv[])
00163 {
00164 IMAGE *outimg = NULL;
00165 uint32_t lines, pix;
00166 double period;
00167
00168 if (objc != 2)
00169 {
00170 Tcl_WrongNumArgs (interp, 1, objv, atitle);
00171 return TCL_ERROR;
00172 }
00173 if ((GetSadieUintFromObj2 (interp, objv[1], "lines", &lines)
00174 != TCL_OK)
00175 || (GetSadieUintFromObj2 (interp, objv[1], "pix", &pix)
00176 != TCL_OK)
00177 || (GetSadieDoubleFromObj2 (interp, objv[1], "period", &period)
00178 != TCL_OK))
00179 return TCL_ERROR;
00180 SINESTAR (lines, pix, period, &outimg);
00181 return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00182 }
00183
00202 int
00203 Sadie_NewFunctions_CheckerboardCmd (ClientData client_data, Tcl_Interp *interp,
00204 int objc, Tcl_Obj * const objv[])
00205 {
00206 IMAGE *outimg = NULL;
00207 uint32_t lines, pix;
00208 uint32_t checklines, checkpix;
00209
00210 if (objc != 2)
00211 {
00212 Tcl_WrongNumArgs (interp, 1, objv, atitle);
00213 return TCL_ERROR;
00214 }
00215 if ((GetSadieUintFromObj2 (interp, objv[1], "lines", &lines)
00216 != TCL_OK)
00217 || (GetSadieUintFromObj2 (interp, objv[1], "pix", &pix)
00218 != TCL_OK)
00219 || (GetSadieUintFromObj2 (interp, objv[1], "checklines", &checklines)
00220 != TCL_OK)
00221 || (GetSadieUintFromObj2 (interp, objv[1], "checkpix", &checkpix)
00222 != TCL_OK))
00223 return TCL_ERROR;
00224 CHECKER (lines, pix, checklines, checkpix, &outimg);
00225 return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00226 }
00227
00248 int
00249 Sadie_NewFunctions_GrayScaleCmd (ClientData client_data, Tcl_Interp *interp,
00250 int objc, Tcl_Obj * const objv[])
00251 {
00252 IMAGE *outimg = NULL;
00253 uint32_t lines, pix, number;
00254 PIXEL min, max;
00255
00256 if (objc != 2)
00257 {
00258 Tcl_WrongNumArgs (interp, 1, objv, atitle);
00259 return TCL_ERROR;
00260 }
00261 if ((GetSadieUintFromObj2 (interp, objv[1], "lines", &lines)
00262 != TCL_OK)
00263 || (GetSadieUintFromObj2 (interp, objv[1], "pix", &pix)
00264 != TCL_OK)
00265 || (GetSadieUintFromObj2 (interp, objv[1], "number", &number)
00266 != TCL_OK)
00267 || (GetSadiePixelFromObj2 (interp, objv[1], "min", &min)
00268 != TCL_OK)
00269 || (GetSadiePixelFromObj2 (interp, objv[1], "max", &max)
00270 != TCL_OK))
00271 return TCL_ERROR;
00272 GRAYSCAL (lines, pix, number, min, max, &outimg);
00273 return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00274 }
00275
00311 int
00312 Sadie_NewFunctions_FunctionCmd (ClientData client_data, Tcl_Interp *interp,
00313 int objc, Tcl_Obj * const objv[])
00314 {
00315 IMAGE *outimg = NULL;
00316 uint32_t lines, pix;
00317 int type;
00318 double radiuslines, radiuspix, alpha;
00319
00320 if (objc != 2)
00321 {
00322 Tcl_WrongNumArgs (interp, 1, objv, atitle);
00323 return TCL_ERROR;
00324 }
00325 if ((GetSadieUintFromObj2 (interp, objv[1], "lines", &lines)
00326 != TCL_OK)
00327 || (GetSadieUintFromObj2 (interp, objv[1], "pix", &pix)
00328 != TCL_OK)
00329 || (GetSadieIntFromObj2 (interp, objv[1], "type", &type)
00330 != TCL_OK)
00331 || (GetSadieDoubleFromObj2 (interp, objv[1], "radiuslines", &radiuslines)
00332 != TCL_OK)
00333 || (GetSadieDoubleFromObj2 (interp, objv[1], "radiuspix", &radiuspix)
00334 != TCL_OK)
00335 || (GetSadieDoubleFromObj2 (interp, objv[1], "alpha", &alpha)
00336 != TCL_OK))
00337 return TCL_ERROR;
00338 FUNCTION (lines, pix, radiuslines, radiuspix, alpha, (short)type, &outimg);
00339 return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00340 }
00341
00362 int
00363 Sadie_NewFunctions_RandomCmd (ClientData client_data, Tcl_Interp *interp,
00364 int objc, Tcl_Obj * const objv[])
00365 {
00366 IMAGE *outimg = NULL;
00367 uint32_t lines, pix;
00368 int type;
00369 double deviation;
00370
00371 if (objc != 2)
00372 {
00373 Tcl_WrongNumArgs (interp, 1, objv, atitle);
00374 return TCL_ERROR;
00375 }
00376 if ((GetSadieUintFromObj2 (interp, objv[1], "lines", &lines)
00377 != TCL_OK)
00378 || (GetSadieUintFromObj2 (interp, objv[1], "pix", &pix)
00379 != TCL_OK)
00380 || (GetSadieIntFromObj2 (interp, objv[1], "type", &type)
00381 != TCL_OK)
00382 || (GetSadieDoubleFromObj2 (interp, objv[1], "deviation", &deviation)
00383 != TCL_OK))
00384 return TCL_ERROR;
00385 RANDOM (lines, pix, (short)type, deviation, &outimg);
00386 return SetSadieImageObj2 (interp, objv[1], ixname, outimg);
00387 }
00388
00395 int
00396 Sadie_NewFunctions_Init (Tcl_Interp *interp)
00397 {
00398 Tcl_CreateObjCommand (interp, "Sadie_NewFunctions_SineWave",
00399 Sadie_NewFunctions_SineWaveCmd, NULL, NULL);
00400 Tcl_CreateObjCommand (interp, "Sadie_NewFunctions_Chirp",
00401 Sadie_NewFunctions_ChirpCmd, NULL, NULL);
00402 Tcl_CreateObjCommand (interp, "Sadie_NewFunctions_SineStar",
00403 Sadie_NewFunctions_SineStarCmd, NULL, NULL);
00404 Tcl_CreateObjCommand (interp, "Sadie_NewFunctions_Checkerboard",
00405 Sadie_NewFunctions_CheckerboardCmd, NULL, NULL);
00406 Tcl_CreateObjCommand (interp, "Sadie_NewFunctions_GrayScale",
00407 Sadie_NewFunctions_GrayScaleCmd, NULL, NULL);
00408 Tcl_CreateObjCommand (interp, "Sadie_NewFunctions_Function",
00409 Sadie_NewFunctions_FunctionCmd, NULL, NULL);
00410 Tcl_CreateObjCommand (interp, "Sadie_NewFunctions_Random",
00411 Sadie_NewFunctions_RandomCmd, NULL, NULL);
00412 return TCL_OK;
00413 }
00414
00415
00416
00417
00418
00419