From: Michael N. \(mnorton\) <mn...@ci...> - 2006-02-28 21:05:53
|
Hi, From inside my C extension code, what is the correct way to access a list that is passed in as an argument?=20 My objective with this operation is to learn about writing C extensions. I know vector libraries exist and so forth.=20 Thanks, Mike Here is my code. static int mmatrix_Cmd( ClientData cdata, Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[]) { /* set the matrix pointer */ char *mptr; for (mptr =3D objv[1]; *mptr !=3D '\0'; mptr++) { printf("mmatrix_Cmd (%s)\n", mptr); } Tcl_SetObjResult(interp, Tcl_NewStringObj("mmatrix_Cmd done", -1)); return TCL_OK; }=20 Is the list passed in using objv? Here is what I am passing in from Tcl. load ~/script_dev/skunk_works/C_ext/vector =20 # Eq 3.3 Rx, Real-Time Rendering, Moller & Haines # note t - theta # # | cos t 0 sin t 0 | # Ry(t) =3D | 0 1 0 0 | # | -sin t 0 cos t 0 | # | 0 0 0 1 | # set Ry { \ {0 0 0 0} \ {0 1 0 0} \ {0 0 0 0} \ {0 0 0 1} \ } =20 puts $Ry =20 mmatrix $Ry |
From: Jim I. <ji...@ap...> - 2006-02-28 21:26:55
|
Michael, Yes, the arguments to the command are passed in the objv array. objv=20 [0] will be the command name, and then in your case objv[1] will be =20 your list. The best way to learn how to do C programming of Tcl extensions, IMO, =20= is to find a core Tcl command that exhibits some of the features that =20= you are trying to use, and read the Tcl source for that. The core =20 Tcl source is pretty clean, well commented, and readable. Most of =20 the Tcl level commands are implemented in the generic directory in =20 tclCmdAH.c, tclCmdIL.c and tclCmdMZ.c. So for instance, all the Tcl =20 List commands are in generic/tcl/tclCmdIL.c. Look at =20 Tcl_LindexObjCmd, Tcl_LinsertObjCmd, etc. These will give you a =20 pretty good sense of how to handle arguments, how to take apart =20 lists, and how to return results, etc... Jim On Feb 28, 2006, at 1:05 PM, Michael Norton (mnorton) wrote: > Hi, > > =46rom inside my C extension code, what is the correct way to access a > list that is passed in as an argument? > My objective with this operation is to learn about writing C =20 > extensions. > I know vector libraries exist and so > forth. > > Thanks, > > Mike > > Here is my code. > > static int > mmatrix_Cmd( > ClientData cdata, > Tcl_Interp *interp, > int objc, > Tcl_Obj * CONST objv[]) > { > /* set the matrix pointer */ > char *mptr; > for (mptr =3D objv[1]; *mptr !=3D '\0'; mptr++) > { > printf("mmatrix_Cmd (%s)\n", mptr); > } > > Tcl_SetObjResult(interp, Tcl_NewStringObj("mmatrix_Cmd done", =20 > -1)); > return TCL_OK; > } > > Is the list passed in using objv? > > Here is what I am passing in from Tcl. > > load ~/script_dev/skunk_works/C_ext/vector > > > # Eq 3.3 Rx, Real-Time Rendering, Moller & Haines > # note t - theta > # > # | cos t 0 sin t 0 | > # Ry(t) =3D | 0 1 0 0 | > # | -sin t 0 cos t 0 | > # | 0 0 0 1 | > # > set Ry { \ > {0 0 0 0} \ > {0 1 0 0} \ > {0 0 0 0} \ > {0 0 0 1} \ > } > > > puts $Ry > > > mmatrix $Ry > > > ------------------------------------------------------- > This SF.Net email is sponsored by xPML, a groundbreaking scripting =20 > language > that extends applications into web and mobile media. Attend the =20 > live webcast > and join the prime developer group breaking into this new coding =20 > territory! > http://sel.as-us.falkag.net/sel?cmd=3Dlnk&kid=110944&bid$1720&dat=121642= > _______________________________________________ > Tcl-mac mailing list > Tc...@li... > https://lists.sourceforge.net/lists/listinfo/tcl-mac |