path: root/README.EXT_SKEL
diff options
authorJouni Ahto <>2000-06-10 08:59:43 (GMT)
committerJouni Ahto <>2000-06-10 08:59:43 (GMT)
commitd09ec3261f1b2c2f88ee7fa6bff34859c1f0bc58 (patch)
treea189bb27207df68aaf29216868f238478c9f19fb /README.EXT_SKEL
parentf79e3fa02f126bce7cb977459ba6aed366b53ccc (diff)
- Add some documentation for ext_skel and a note about it's existence.
Diffstat (limited to 'README.EXT_SKEL')
1 files changed, 123 insertions, 0 deletions
new file mode 100644
index 0000000..2b0fd48
--- /dev/null
@@ -0,0 +1,123 @@
+ It's a tool for automatically creating the basic framework for a PHP module
+ and writing C code handling arguments passed to your functions from a simple
+ configuration file. See an example at the end of this file.
+ Very simple. First, cd do directory ext/ in PHP 4 sources. If you just need
+ the basic framework and will be writing all the code in your functions
+ yourself, you can now do './ext_skel your_module_name' and everything you
+ need is placed in directory your_module_name. In fact, if you don't need to
+ test the existence of any external header files, libraries or functions in
+ them, the module is already almost ready to be compiled in PHP. Just remove
+ 3 comments in your_module_name/config.m4, cd back up to PHP sources top
+ directory, and do './buildconf; ./configure --enable-your_module_name; make'.
+ But if you already have planned the overall scheme of your module, what
+ functions it will contain, their return types and the arguments they take
+ (a very good idea) and don't want to bother yourself with creating function
+ definitions and handling arguments passed yourself, it's time to create a
+ function definitions file, which you will give as the second argument to
+ ext_skel.
+ All the definitions must be on one line. In it's simplest form, it's just
+ the function name, ie.
+ my_function
+ but then you'll be left with an almost empty function body without any
+ argument handling.
+ Arguments are given in parenthesis after the function name, and are of
+ the form 'argument_type argument_name'. Arguments are separated from each
+ other with a comma and optional space. Argument_type can be one of int,
+ double, string, array, object or mixed.
+ An optional argument is separated from the previous by an optional space,
+ then '[' and of course comma and optional space, like all the other
+ arguments. You should close a row of optional arguments with same amount of
+ ']'s as there where '['s. Currently, it does not harm if you forget to do it
+ or there is a wrong amount of ']'s, but this may change in the future.
+ An example:
+ my_function(int arg1, int arg2 [, int arg3 [, int arg4]])
+ Arguments arg3 and arg4 are optional.
+ If possible, the function definition should also contain it's return type
+ in front of the definition. It's not actually used for any C code generating
+ purposes but PHP in-source documentation instead, and as such, very useful.
+ It can be any of int, double, string, bool, array, object, resource, mixed
+ or void.
+ The file must contain nothing else but function definitions, no comments or
+ empty lines.
+ Only arguments of types int, float, string and array are handled. For other
+ types you must write the code yourself. And for type mixed, it wouldn't even
+ be possible to write anything, because only you know what to expect.
+ It doesn't yet handle correctly grouped optional arguments, ie. it thinks
+ 'type function(type arg1 [, type arg2, type arg3]' to actually be
+ 'type function(type arg1 [, type arg2 [, type arg3]]', so you have to
+ manually correct the switch construct created. But it's nothing more than
+ deleting a few 'case ?:' lines and fixing PHP in-source documentation proto.
+ It creates incorrect code to handle arguments passed to function when an
+ optional argument is of type 'resource'.
+ The following _one_ line
+ bool my_drawtext(resource image, string text, resource font, int x, int y [, int color])
+ will create this function definition for you (note that there are a few
+ question marks to be replaced by you, and you must of course add your own
+ value definitions too):
+/* {{{ proto bool my_drawtext(resource image, string text, resource font, int x, int y[, int color])
+ */
+ zval **image, **text, **font, **x, **y, **color;
+ int argc;
+ int image_id = -1;
+ int font_id = -1;
+ ???LS_FETCH();
+ argc = ZEND_NUM_ARGS();
+ if (argc < 5 || argc > 6 || zend_get_parameters_ex(argc, &image, &text, &font, &x, &y, &color) == FAILURE) {
+ }
+ ZEND_FETCH_RESOURCE(???, ???, image, image_id, "???", ???G());
+ ZEND_FETCH_RESOURCE(???, ???, font, font_id, "???", ???G());
+ switch (argc) {
+ case 6:
+ convert_to_long_ex(color);
+ /* Fall-through. */
+ case 5:
+ convert_to_long_ex(y);
+ convert_to_long_ex(x);
+ /* font: fetching resources already handled. */
+ convert_to_string_ex(text);
+ /* image: fetching resources already handled. */
+ break;
+ default:
+ }
+ php_error(E_WARNING, "my_drawtext: not yet implemented");
+/* }}} */