You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
преди 19 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861
  1. /*
  2. * PypyCaca libcaca Python bindings
  3. * Copyright (c) 2006 Jean-Yves Lamoureux <jylam@lnxscene.org>
  4. * All Rights Reserved
  5. *
  6. * $Id$
  7. *
  8. * This library is free software; you can redistribute it and/or
  9. * modify it under the terms of the Do What The Fuck You Want To
  10. * Public License, Version 2, as published by Sam Hocevar. See
  11. * http://sam.zoy.org/wtfpl/COPYING for more details.
  12. */
  13. #include "pypycaca.h"
  14. static PyMethodDef CacaMethods[] = {
  15. {"init", pycaca_init, METH_VARARGS, "Init libcaca"},
  16. {"set_delay", pycaca_set_delay, METH_VARARGS, "Set delay"},
  17. {"get_rendertime", pycaca_get_rendertime, METH_NOARGS, "Get render time"},
  18. {"get_width", pycaca_get_width, METH_NOARGS, "Get width"},
  19. {"get_height", pycaca_get_height, METH_NOARGS, "Get Height"},
  20. {"set_size", pycaca_set_size, METH_VARARGS, "Set size"},
  21. {"set_width", pycaca_set_width, METH_VARARGS, "Set width"},
  22. {"set_height", pycaca_set_height, METH_VARARGS, "Set height"},
  23. {"set_display_title", pycaca_set_display_title, METH_VARARGS, "Set window titl"},
  24. {"get_display_width", pycaca_get_display_width, METH_NOARGS, "Get window width"},
  25. {"get_display_height", pycaca_get_display_height, METH_NOARGS, "Get Window height"},
  26. {"refresh", pycaca_refresh, METH_NOARGS, "Refresh window"},
  27. {"end", pycaca_end, METH_NOARGS, "End libcaca"},
  28. {"get_feature", pycaca_get_feature, METH_VARARGS, "Get feature"},
  29. {"set_feature", pycaca_set_feature, METH_VARARGS, "Set feature"},
  30. {"get_feature_name", pycaca_get_feature_name, METH_VARARGS, "Get feature name"},
  31. {"get_event", pycaca_get_event, METH_VARARGS, "Get event"},
  32. {"wait_event", pycaca_wait_event, METH_VARARGS, "Wait event"},
  33. {"get_mouse_x", pycaca_get_mouse_x, METH_NOARGS, "Get Mouse X"},
  34. {"get_mouse_y", pycaca_get_mouse_y, METH_NOARGS, "Get mouse Y"},
  35. {"draw_line", pycaca_draw_line, METH_VARARGS, "Init libcaca"},
  36. {"draw_thin_line", pycaca_draw_thin_line, METH_VARARGS, "Init libcaca"},
  37. {"draw_circle", pycaca_draw_circle, METH_VARARGS, "Init libcaca"},
  38. {"draw_ellipse", pycaca_draw_ellipse, METH_VARARGS, "Init libcaca"},
  39. {"draw_thin_ellipse", pycaca_draw_thin_ellipse, METH_VARARGS, "Init libcaca"},
  40. {"fill_ellipse", pycaca_fill_ellipse, METH_VARARGS, "Init libcaca"},
  41. {"draw_box", pycaca_draw_box, METH_VARARGS, "Init libcaca"},
  42. {"fill_box", pycaca_fill_box, METH_VARARGS, "Init libcaca"},
  43. {"draw_thin_box", pycaca_draw_thin_box, METH_VARARGS, "Init libcaca"},
  44. {"draw_triangle", pycaca_draw_triangle, METH_VARARGS, "Init libcaca"},
  45. {"draw_thin_triangle", pycaca_draw_thin_triangle, METH_VARARGS, "Init libcaca"},
  46. {"fill_triangle", pycaca_fill_triangle, METH_VARARGS, "Init libcaca"},
  47. {"draw_polyline", pycaca_draw_polyline, METH_VARARGS, ""},
  48. {"draw_thin_polyline", pycaca_draw_thin_polyline, METH_VARARGS, ""},
  49. {"set_color", pycaca_set_color, METH_VARARGS, "Init libcaca"},
  50. {"get_fg_color", pycaca_get_fg_color, METH_VARARGS, ""},
  51. {"get_bg_color", pycaca_get_bg_color, METH_VARARGS, ""},
  52. {"get_color_name", pycaca_get_color_name, METH_VARARGS, ""},
  53. {"putchar", pycaca_putchar, METH_VARARGS, ""},
  54. {"putstr", pycaca_putstr, METH_VARARGS, ""},
  55. {"printf", pycaca_printf, METH_VARARGS, ""},
  56. {"clear", pycaca_clear, METH_VARARGS, ""},
  57. {"load_sprite", pycaca_load_sprite, METH_VARARGS, ""},
  58. {"draw_sprite", pycaca_draw_sprite, METH_VARARGS, ""},
  59. {"get_sprite_frames", pycaca_get_sprite_frames, METH_VARARGS, ""},
  60. {"get_sprite_width", pycaca_get_sprite_width, METH_VARARGS, ""},
  61. {"get_sprite_height", pycaca_get_sprite_height, METH_VARARGS, ""},
  62. {"get_sprite_dx", pycaca_get_sprite_dx, METH_VARARGS, ""},
  63. {"get_sprite_dy", pycaca_get_sprite_dy, METH_VARARGS, ""},
  64. {"free_sprite", pycaca_free_sprite, METH_VARARGS, ""},
  65. {"get_html", pycaca_get_html, METH_VARARGS, ""},
  66. {"get_html3", pycaca_get_html3, METH_VARARGS, ""},
  67. {"get_irc", pycaca_get_irc, METH_VARARGS, ""},
  68. {"get_ansi", pycaca_get_ansi, METH_VARARGS, ""},
  69. {"create_bitmap", pycaca_create_bitmap, METH_VARARGS, ""},
  70. {"set_bitmap_palette", pycaca_set_bitmap_palette, METH_VARARGS, ""},
  71. {"set_bitmap_gamma", pycaca_set_bitmap_gamma, METH_VARARGS, ""},
  72. {"draw_bitmap", pycaca_draw_bitmap, METH_VARARGS, ""},
  73. {"free_bitmap", pycaca_free_bitmap, METH_VARARGS, ""},
  74. // {"", , METH_VARARGS, ""},
  75. {NULL, NULL, 0, NULL} /* Sentinel */
  76. };
  77. PyMODINIT_FUNC
  78. initcaca(void)
  79. {
  80. PyObject *obj, *dict;
  81. obj = Py_InitModule("caca", CacaMethods);
  82. dict = PyModule_GetDict(obj);
  83. SET_INTCONSTANT(dict,CACA_EVENT_NONE );
  84. SET_INTCONSTANT(dict,CACA_EVENT_KEY_PRESS );
  85. SET_INTCONSTANT(dict,CACA_EVENT_KEY_RELEASE );
  86. SET_INTCONSTANT(dict,CACA_EVENT_MOUSE_PRESS );
  87. SET_INTCONSTANT(dict,CACA_EVENT_MOUSE_RELEASE );
  88. SET_INTCONSTANT(dict,CACA_EVENT_MOUSE_MOTION );
  89. SET_INTCONSTANT(dict,CACA_EVENT_RESIZE );
  90. SET_INTCONSTANT(dict,CACA_EVENT_ANY );
  91. SET_INTCONSTANT(dict, CACA_COLOR_BLACK );
  92. SET_INTCONSTANT(dict, CACA_COLOR_BLUE );
  93. SET_INTCONSTANT(dict, CACA_COLOR_GREEN );
  94. SET_INTCONSTANT(dict, CACA_COLOR_CYAN );
  95. SET_INTCONSTANT(dict, CACA_COLOR_RED );
  96. SET_INTCONSTANT(dict, CACA_COLOR_MAGENTA );
  97. SET_INTCONSTANT(dict, CACA_COLOR_BROWN );
  98. SET_INTCONSTANT(dict, CACA_COLOR_LIGHTGRAY );
  99. SET_INTCONSTANT(dict, CACA_COLOR_DARKGRAY );
  100. SET_INTCONSTANT(dict, CACA_COLOR_LIGHTBLUE );
  101. SET_INTCONSTANT(dict, CACA_COLOR_LIGHTGREEN );
  102. SET_INTCONSTANT(dict, CACA_COLOR_LIGHTCYAN );
  103. SET_INTCONSTANT(dict, CACA_COLOR_LIGHTRED );
  104. SET_INTCONSTANT(dict, CACA_COLOR_LIGHTMAGENTA );
  105. SET_INTCONSTANT(dict, CACA_COLOR_YELLOW );
  106. SET_INTCONSTANT(dict, CACA_COLOR_WHITE );
  107. SET_INTCONSTANT(dict, CACA_BACKGROUND );
  108. SET_INTCONSTANT(dict, CACA_BACKGROUND_BLACK );
  109. SET_INTCONSTANT(dict, CACA_BACKGROUND_SOLID );
  110. SET_INTCONSTANT(dict, CACA_BACKGROUND_MIN );
  111. SET_INTCONSTANT(dict, CACA_BACKGROUND_MAX );
  112. SET_INTCONSTANT(dict, CACA_ANTIALIASING );
  113. SET_INTCONSTANT(dict, CACA_ANTIALIASING_NONE );
  114. SET_INTCONSTANT(dict, CACA_ANTIALIASING_PREFILTER );
  115. SET_INTCONSTANT(dict, CACA_ANTIALIASING_MIN );
  116. SET_INTCONSTANT(dict, CACA_ANTIALIASING_MAX );
  117. SET_INTCONSTANT(dict, CACA_DITHERING );
  118. SET_INTCONSTANT(dict, CACA_DITHERING_NONE );
  119. SET_INTCONSTANT(dict, CACA_DITHERING_ORDERED2 );
  120. SET_INTCONSTANT(dict, CACA_DITHERING_ORDERED4 );
  121. SET_INTCONSTANT(dict, CACA_DITHERING_ORDERED8 );
  122. SET_INTCONSTANT(dict, CACA_DITHERING_RANDOM );
  123. SET_INTCONSTANT(dict, CACA_DITHERING_FSTEIN );
  124. SET_INTCONSTANT(dict, CACA_DITHERING_MIN );
  125. SET_INTCONSTANT(dict, CACA_DITHERING_MAX );
  126. SET_INTCONSTANT(dict, CACA_FEATURE_UNKNOWN );
  127. SET_INTCONSTANT(dict, CACA_KEY_UNKNOWN );
  128. SET_INTCONSTANT(dict, CACA_KEY_BACKSPACE );
  129. SET_INTCONSTANT(dict, CACA_KEY_TAB );
  130. SET_INTCONSTANT(dict, CACA_KEY_RETURN );
  131. SET_INTCONSTANT(dict, CACA_KEY_PAUSE );
  132. SET_INTCONSTANT(dict, CACA_KEY_ESCAPE );
  133. SET_INTCONSTANT(dict, CACA_KEY_DELETE );
  134. SET_INTCONSTANT(dict, CACA_KEY_UP );
  135. SET_INTCONSTANT(dict, CACA_KEY_DOWN );
  136. SET_INTCONSTANT(dict, CACA_KEY_LEFT );
  137. SET_INTCONSTANT(dict, CACA_KEY_RIGHT );
  138. SET_INTCONSTANT(dict, CACA_KEY_INSERT );
  139. SET_INTCONSTANT(dict, CACA_KEY_HOME );
  140. SET_INTCONSTANT(dict, CACA_KEY_END );
  141. SET_INTCONSTANT(dict, CACA_KEY_PAGEUP );
  142. SET_INTCONSTANT(dict, CACA_KEY_PAGEDOWN );
  143. SET_INTCONSTANT(dict, CACA_KEY_F1 );
  144. SET_INTCONSTANT(dict, CACA_KEY_F2 );
  145. SET_INTCONSTANT(dict, CACA_KEY_F3 );
  146. SET_INTCONSTANT(dict, CACA_KEY_F4 );
  147. SET_INTCONSTANT(dict, CACA_KEY_F5 );
  148. SET_INTCONSTANT(dict, CACA_KEY_F6 );
  149. SET_INTCONSTANT(dict, CACA_KEY_F7 );
  150. SET_INTCONSTANT(dict, CACA_KEY_F8 );
  151. SET_INTCONSTANT(dict, CACA_KEY_F9 );
  152. SET_INTCONSTANT(dict, CACA_KEY_F10 );
  153. SET_INTCONSTANT(dict, CACA_KEY_F11 );
  154. SET_INTCONSTANT(dict, CACA_KEY_F12 );
  155. SET_INTCONSTANT(dict, CACA_KEY_F13 );
  156. SET_INTCONSTANT(dict, CACA_KEY_F14 );
  157. SET_INTCONSTANT(dict, CACA_KEY_F15 );
  158. }
  159. /*******************/
  160. /* Basic functions */
  161. /*******************/
  162. static PyObject *
  163. pycaca_init(PyObject *self, PyObject *args)
  164. {
  165. int ret;
  166. ret = caca_init();
  167. return Py_BuildValue("i", ret);
  168. }
  169. static PyObject *
  170. pycaca_set_delay(PyObject *self, PyObject *args)
  171. {
  172. int value=0;
  173. if (!PyArg_ParseTuple(args, "i", &value))
  174. caca_set_delay(value);
  175. return Py_BuildValue("i", 1); /*FIXME*/
  176. }
  177. static PyObject *
  178. pycaca_get_rendertime(PyObject *self, PyObject *args)
  179. {
  180. int ret = caca_get_rendertime();
  181. return Py_BuildValue("i", ret);
  182. }
  183. static PyObject *
  184. pycaca_get_width(PyObject *self, PyObject *args)
  185. {
  186. int ret = caca_get_width();
  187. return Py_BuildValue("i", ret);
  188. }
  189. static PyObject *
  190. pycaca_get_height(PyObject *self, PyObject *args)
  191. {
  192. int ret = caca_get_height();
  193. return Py_BuildValue("i", ret);
  194. }
  195. static PyObject *
  196. pycaca_set_size(PyObject *self, PyObject *args)
  197. {
  198. int width, height;
  199. if (!PyArg_ParseTuple(args, "ii", &width, &height))
  200. caca_set_size(width, height);
  201. return Py_BuildValue("i", 1); /* FIXME */
  202. }
  203. static PyObject *
  204. pycaca_set_width(PyObject *self, PyObject *args)
  205. {
  206. int width;
  207. if (!PyArg_ParseTuple(args, "i", &width));
  208. caca_set_width(width);
  209. return Py_BuildValue("i", 1); /* FIXME */
  210. }
  211. static PyObject *
  212. pycaca_set_height(PyObject *self, PyObject *args)
  213. {
  214. int height;
  215. if (!PyArg_ParseTuple(args, "i", &height));
  216. caca_set_height(height);
  217. return Py_BuildValue("i", 1); /* FIXME */
  218. }
  219. static PyObject *
  220. pycaca_set_display_title(PyObject *self, PyObject *args)
  221. {
  222. int ret;
  223. const char *str;
  224. if (!PyArg_ParseTuple(args, "s", &str));
  225. ret = caca_set_display_title(str);
  226. return Py_BuildValue("i", ret); /* FIXME */
  227. }
  228. static PyObject *
  229. pycaca_get_display_width(PyObject *self, PyObject *args)
  230. {
  231. int ret = caca_get_display_width();
  232. return Py_BuildValue("i", ret);
  233. }
  234. static PyObject *
  235. pycaca_get_display_height(PyObject *self, PyObject *args)
  236. {
  237. int ret = caca_get_display_height();
  238. return Py_BuildValue("i", ret);
  239. }
  240. static PyObject *
  241. pycaca_refresh(PyObject *self, PyObject *args)
  242. {
  243. caca_refresh();
  244. return Py_BuildValue("i", 1); /*FIXME*/
  245. }
  246. static PyObject *
  247. pycaca_end(PyObject *self, PyObject *args)
  248. {
  249. caca_end();
  250. return Py_BuildValue("i", 1); /*FIXME*/
  251. }
  252. static PyObject *
  253. pycaca_get_feature(PyObject *self, PyObject *args)
  254. {
  255. int value, ret;
  256. if (!PyArg_ParseTuple(args, "i", &value));
  257. ret = caca_get_feature(value);
  258. return Py_BuildValue("i", ret);
  259. }
  260. static PyObject *
  261. pycaca_set_feature(PyObject *self, PyObject *args)
  262. {
  263. int value;
  264. if (!PyArg_ParseTuple(args, "i", &value));
  265. caca_set_feature(value);
  266. return Py_BuildValue("i", 1); /* FIXME */
  267. }
  268. static PyObject *
  269. pycaca_get_feature_name(PyObject *self, PyObject *args)
  270. {
  271. int value;
  272. char* ret;
  273. if (!PyArg_ParseTuple(args, "i", &value));
  274. ret = (char* const)caca_get_feature_name(value);
  275. return Py_BuildValue("s", ret);
  276. }
  277. /******************/
  278. /* Event handling */
  279. /******************/
  280. static PyObject *
  281. pycaca_get_event(PyObject *self, PyObject *args)
  282. {
  283. int value, ret;
  284. if (!PyArg_ParseTuple(args, "i", &value));
  285. ret = caca_get_event(value);
  286. return Py_BuildValue("i", ret);
  287. }
  288. static PyObject *
  289. pycaca_wait_event(PyObject *self, PyObject *args)
  290. {
  291. int value, ret;
  292. if (!PyArg_ParseTuple(args, "i", &value));
  293. ret = caca_get_event(value);
  294. return Py_BuildValue("i", ret);
  295. }
  296. static PyObject *
  297. pycaca_get_mouse_x(PyObject *self, PyObject *args)
  298. {
  299. int ret = caca_get_mouse_x();
  300. return Py_BuildValue("i", ret);
  301. }
  302. static PyObject *
  303. pycaca_get_mouse_y(PyObject *self, PyObject *args)
  304. {
  305. int ret = caca_get_mouse_y();
  306. return Py_BuildValue("i", ret);
  307. }
  308. /**********************/
  309. /* Primitives drawing */
  310. /**********************/
  311. static PyObject *
  312. pycaca_draw_line(PyObject *self, PyObject *args)
  313. {
  314. int x1, y1, x2, y2;
  315. char c;
  316. if (!PyArg_ParseTuple(args, "iiiic", &x1,&y1,&x2,&y2,&c));
  317. caca_draw_line(x1,y1,x2,y2,c);
  318. return Py_BuildValue("i", 1); /* FIXME */
  319. }
  320. static PyObject *
  321. pycaca_draw_polyline(PyObject *self, PyObject *args)
  322. {
  323. PyObject *list_x, *list_y, *item;
  324. int *x, *y, n, lenx, leny, i;
  325. char c;
  326. if (!PyArg_ParseTuple(args, "OOic", &list_x, &list_y, &n, &c));
  327. lenx = PySequence_Length(list_x);
  328. leny = PySequence_Length(list_y);
  329. x = (int*) malloc(lenx*sizeof(int));
  330. y = (int*) malloc(leny*sizeof(int));
  331. if((x == NULL) || (y==NULL))
  332. return NULL; /* FIXME */
  333. for(i=0;i<lenx;i++)
  334. {
  335. item = PySequence_GetItem(list_x, i);
  336. x[i] = PyInt_AsLong(item);
  337. }
  338. for(i=0;i<leny;i++)
  339. {
  340. item = PySequence_GetItem(list_y, i);
  341. y[i] = PyInt_AsLong(item);
  342. }
  343. caca_draw_polyline(x,y,n,c);
  344. free(x); free(y);
  345. return Py_BuildValue("i", 1); /* FIXME */
  346. }
  347. static PyObject *
  348. pycaca_draw_thin_line(PyObject *self, PyObject *args)
  349. {
  350. int x1, y1, x2, y2;
  351. if (!PyArg_ParseTuple(args, "iiii", &x1,&y1,&x2,&y2));
  352. caca_draw_thin_line(x1,y1,x2,y2);
  353. return Py_BuildValue("i", 1); /* FIXME */
  354. }
  355. static PyObject *
  356. pycaca_draw_thin_polyline(PyObject *self, PyObject *args)
  357. {
  358. PyObject *list_x, *list_y, *item;
  359. int *x, *y, n, lenx, leny, i;
  360. if (!PyArg_ParseTuple(args, "OOi", &list_x, &list_y, &n));
  361. lenx = PySequence_Length(list_x);
  362. leny = PySequence_Length(list_y);
  363. x = (int*) malloc(lenx*sizeof(int));
  364. y = (int*) malloc(leny*sizeof(int));
  365. if((x == NULL) || (y==NULL))
  366. return NULL; /* FIXME */
  367. for(i=0;i<lenx;i++)
  368. {
  369. item = PySequence_GetItem(list_x, i);
  370. x[i] = PyInt_AsLong(item);
  371. }
  372. for(i=0;i<leny;i++)
  373. {
  374. item = PySequence_GetItem(list_y, i);
  375. y[i] = PyInt_AsLong(item);
  376. }
  377. caca_draw_thin_polyline(x,y,n);
  378. free(x); free(y);
  379. return Py_BuildValue("i", 1); /* FIXME */
  380. }
  381. static PyObject *
  382. pycaca_draw_circle(PyObject *self, PyObject *args)
  383. {
  384. int x1, y1, x2;
  385. char c;
  386. if (!PyArg_ParseTuple(args, "iiic", &x1,&y1,&x2,&c));
  387. caca_draw_circle(x1,y1,x2,c);
  388. return Py_BuildValue("i", 1); /* FIXME */
  389. }
  390. static PyObject *
  391. pycaca_draw_ellipse(PyObject *self, PyObject *args)
  392. {
  393. int x1, y1, x2,y2;
  394. char c;
  395. if (!PyArg_ParseTuple(args, "iiiic", &x1,&y1,&x2,&y2,&c));
  396. caca_draw_ellipse(x1,y1,x2,y2,c);
  397. return Py_BuildValue("i", 1); /* FIXME */
  398. }
  399. static PyObject *
  400. pycaca_draw_thin_ellipse(PyObject *self, PyObject *args)
  401. {
  402. int x1, y1, x2,y2;
  403. if (!PyArg_ParseTuple(args, "iiii", &x1,&y1,&x2,&y2));
  404. caca_draw_thin_ellipse(x1,y1,x2,y2);
  405. return Py_BuildValue("i", 1); /* FIXME */
  406. }
  407. static PyObject *
  408. pycaca_fill_ellipse(PyObject *self, PyObject *args)
  409. {
  410. int x1, y1, x2,y2;
  411. char c;
  412. if (!PyArg_ParseTuple(args, "iiiic", &x1,&y1,&x2,&y2,&c));
  413. caca_fill_ellipse(x1,y1,x2,y2,c);
  414. return Py_BuildValue("i", 1); /* FIXME */
  415. }
  416. static PyObject *
  417. pycaca_draw_box(PyObject *self, PyObject *args)
  418. {
  419. int x1, y1, x2,y2;
  420. char c;
  421. if (!PyArg_ParseTuple(args, "iiiic", &x1,&y1,&x2,&y2,&c));
  422. caca_draw_box(x1,y1,x2,y2,c);
  423. return Py_BuildValue("i", 1); /* FIXME */
  424. }
  425. static PyObject *
  426. pycaca_fill_box(PyObject *self, PyObject *args)
  427. {
  428. int x1, y1, x2,y2;
  429. char c;
  430. if (!PyArg_ParseTuple(args, "iiiic", &x1,&y1,&x2,&y2,&c));
  431. caca_fill_box(x1,y1,x2,y2,c);
  432. return Py_BuildValue("i", 1); /* FIXME */
  433. }
  434. static PyObject *
  435. pycaca_draw_thin_box(PyObject *self, PyObject *args)
  436. {
  437. int x1, y1, x2,y2;
  438. if (!PyArg_ParseTuple(args, "iiiic", &x1,&y1,&x2,&y2));
  439. caca_draw_thin_box(x1,y1,x2,y2);
  440. return Py_BuildValue("i", 1); /* FIXME */
  441. }
  442. static PyObject *
  443. pycaca_draw_triangle(PyObject *self, PyObject *args)
  444. {
  445. int x1, y1, x2,y2, x3, y3;
  446. char c;
  447. if (!PyArg_ParseTuple(args, "iiiiiic", &x1,&y1,&x2,&y2,&x3,&y3,&c));
  448. caca_draw_triangle(x1,y1,x2,y2,x3,y3,c);
  449. return Py_BuildValue("i", 1); /* FIXME */
  450. }
  451. static PyObject *
  452. pycaca_draw_thin_triangle(PyObject *self, PyObject *args)
  453. {
  454. int x1, y1, x2,y2, x3, y3;
  455. if (!PyArg_ParseTuple(args, "iiiiii", &x1,&y1,&x2,&y2,&x3,&y3));
  456. caca_draw_thin_triangle(x1,y1,x2,y2,x3,y3);
  457. return Py_BuildValue("i", 1); /* FIXME */
  458. }
  459. static PyObject *
  460. pycaca_fill_triangle(PyObject *self, PyObject *args)
  461. {
  462. int x1, y1, x2,y2, x3, y3;
  463. char c;
  464. if (!PyArg_ParseTuple(args, "iiiiiic", &x1,&y1,&x2,&y2,&x3,&y3,&c));
  465. caca_fill_triangle(x1,y1,x2,y2,x3,y3,c);
  466. return Py_BuildValue("i", 1); /* FIXME */
  467. }
  468. /**********************/
  469. /* Character printing */
  470. /**********************/
  471. static PyObject *
  472. pycaca_set_color(PyObject *self, PyObject *args)
  473. {
  474. int c1,c2;
  475. if (!PyArg_ParseTuple(args, "ii", &c1,&c2));
  476. caca_set_color(c1,c2);
  477. return Py_BuildValue("i", 1); /* FIXME */
  478. }
  479. static PyObject *
  480. pycaca_get_fg_color(PyObject *self, PyObject *args)
  481. {
  482. int ret = caca_get_fg_color();
  483. return Py_BuildValue("i", ret);
  484. }
  485. static PyObject *
  486. pycaca_get_bg_color(PyObject *self, PyObject *args)
  487. {
  488. int ret = caca_get_bg_color();
  489. return Py_BuildValue("i", ret);
  490. }
  491. static PyObject *
  492. pycaca_get_color_name(PyObject *self, PyObject *args)
  493. {
  494. int c;
  495. char *ret;
  496. if (!PyArg_ParseTuple(args, "i", &c));
  497. ret = (char *)caca_get_color_name(c);
  498. return Py_BuildValue("s", ret); /* FIXME */
  499. }
  500. static PyObject *
  501. pycaca_putchar(PyObject *self, PyObject *args)
  502. {
  503. int x,y;
  504. char c;
  505. if (!PyArg_ParseTuple(args, "iic", &x,&y,&c));
  506. caca_putchar(x,y,c);
  507. return Py_BuildValue("i", 1); /* FIXME */
  508. }
  509. static PyObject *
  510. pycaca_putstr(PyObject *self, PyObject *args)
  511. {
  512. int x,y;
  513. char *c;
  514. if (!PyArg_ParseTuple(args, "iis", &x,&y,&c));
  515. caca_putstr(x,y,c);
  516. return Py_BuildValue("i", 1); /* FIXME */
  517. }
  518. static PyObject *
  519. pycaca_printf(PyObject *self, PyObject *args)
  520. {
  521. int x,y;
  522. char *c;
  523. if (!PyArg_ParseTuple(args, "iic", &x,&y,&c));
  524. caca_putstr(x,y,(char const*)c);
  525. return Py_BuildValue("i", 1); /* FIXME */
  526. }
  527. /*static PyObject *
  528. caca_get_screen(PyObject *self, PyObject *args);*/
  529. static PyObject *
  530. pycaca_clear(PyObject *self, PyObject *args)
  531. {
  532. caca_clear();
  533. return Py_BuildValue("i", 1); /* FIXME */
  534. }
  535. /********************/
  536. /* Sprite functions */
  537. /********************/
  538. static PyObject *
  539. pycaca_load_sprite(PyObject *self, PyObject *args)
  540. {
  541. char *filename;
  542. struct caca_sprite *ret;
  543. /*Quick and dirty hack. Gruik.*/
  544. if (!PyArg_ParseTuple(args, "s", &filename));
  545. ret = (struct caca_sprite*) caca_load_sprite(filename);
  546. return Py_BuildValue("i", PyCObject_FromVoidPtr(ret, NULL));
  547. }
  548. static PyObject *
  549. pycaca_draw_sprite(PyObject *self, PyObject *args)
  550. {
  551. int x, y, sprite, frame;
  552. if (!PyArg_ParseTuple(args, "iiii", &x, &y, &sprite,&frame));
  553. caca_draw_sprite(x,y, (struct caca_sprite const *)PyCObject_AsVoidPtr((void*)sprite), frame);
  554. return Py_BuildValue("i", 1); /* FIXME */
  555. }
  556. static PyObject *
  557. pycaca_get_sprite_frames(PyObject *self, PyObject *args)
  558. {
  559. int sprite, ret;
  560. if (!PyArg_ParseTuple(args, "i", &sprite));
  561. ret = caca_get_sprite_frames((struct caca_sprite const *)PyCObject_AsVoidPtr((void*)sprite));
  562. return Py_BuildValue("i", ret);
  563. }
  564. static PyObject *
  565. pycaca_get_sprite_width(PyObject *self, PyObject *args)
  566. {
  567. int sprite, ret, i;
  568. if (!PyArg_ParseTuple(args, "ii", &sprite, &i));
  569. ret = caca_get_sprite_width((struct caca_sprite const *)PyCObject_AsVoidPtr((void*)sprite),i);
  570. return Py_BuildValue("i", ret);
  571. }
  572. static PyObject *
  573. pycaca_get_sprite_height(PyObject *self, PyObject *args)
  574. {
  575. int sprite, ret, i;
  576. if (!PyArg_ParseTuple(args, "ii", &sprite, i));
  577. ret = caca_get_sprite_height((struct caca_sprite const *)PyCObject_AsVoidPtr((void*)sprite),i);
  578. return Py_BuildValue("i", ret);
  579. }
  580. static PyObject *
  581. pycaca_get_sprite_dx(PyObject *self, PyObject *args)
  582. {
  583. int sprite, ret, i;
  584. if (!PyArg_ParseTuple(args, "ii", &sprite), &i);
  585. ret = caca_get_sprite_dx((struct caca_sprite const *)PyCObject_AsVoidPtr((void*)sprite),i);
  586. return Py_BuildValue("i", ret);
  587. }
  588. static PyObject *
  589. pycaca_get_sprite_dy(PyObject *self, PyObject *args)
  590. {
  591. int sprite, ret, i;
  592. if (!PyArg_ParseTuple(args, "ii", &sprite), &i);
  593. ret = caca_get_sprite_dy((struct caca_sprite const *)PyCObject_AsVoidPtr((void*)sprite),i);
  594. return Py_BuildValue("i", ret);
  595. }
  596. static PyObject *
  597. pycaca_free_sprite(PyObject *self, PyObject *args)
  598. {
  599. int sprite;
  600. if (!PyArg_ParseTuple(args, "i", &sprite));
  601. caca_free_sprite((struct caca_sprite *)PyCObject_AsVoidPtr((void*)sprite));
  602. return Py_BuildValue("i", 1); /* FIXME */
  603. }
  604. /*************/
  605. /* Exporters */
  606. /*************/
  607. static PyObject *
  608. pycaca_get_html(PyObject *self, PyObject *args)
  609. {
  610. if (!PyArg_ParseTuple(args, ""));
  611. return Py_BuildValue("s",caca_get_html());
  612. }
  613. static PyObject *
  614. pycaca_get_html3(PyObject *self, PyObject *args)
  615. {
  616. if (!PyArg_ParseTuple(args, ""));
  617. return Py_BuildValue("s",caca_get_html3());
  618. }
  619. static PyObject *
  620. pycaca_get_irc(PyObject *self, PyObject *args)
  621. {
  622. if (!PyArg_ParseTuple(args, ""));
  623. return Py_BuildValue("s",caca_get_irc());
  624. }
  625. static PyObject *
  626. pycaca_get_ansi(PyObject *self, PyObject *args)
  627. {
  628. int trailing;
  629. if (!PyArg_ParseTuple(args, "i", &trailing));
  630. return Py_BuildValue("s",caca_get_ansi(trailing));
  631. }
  632. /**********/
  633. /* Bitmap */
  634. /**********/
  635. static PyObject *
  636. pycaca_create_bitmap(PyObject *self, PyObject *args)
  637. {
  638. int a,b,c,d,e,f,g,h;
  639. struct caca_bitmap *ret;
  640. if (!PyArg_ParseTuple(args, "iiiiiiii", &a,&b,&c,&d,&e,&f,&g,&h));
  641. ret = (struct caca_bitmap*) caca_create_bitmap(a,b,c,d,e,f,g,h);
  642. return Py_BuildValue("i", PyCObject_FromVoidPtr(ret, NULL));
  643. }
  644. static PyObject *
  645. pycaca_set_bitmap_palette(PyObject *self, PyObject *args)
  646. {
  647. int bitmap;
  648. PyObject *list_r, *list_g, *list_b, *list_a, *item;
  649. unsigned int *r,*g,*b,*a,i;
  650. if (!PyArg_ParseTuple(args, "iOOOO", &bitmap, &list_r, &list_g, &list_b, &list_a));
  651. if((PySequence_Length(list_r)!=256) ||
  652. (PySequence_Length(list_g)!=256) ||
  653. (PySequence_Length(list_b)!=256) ||
  654. (PySequence_Length(list_a)!=256))
  655. {
  656. PyErr_SetString(PyExc_TypeError, "Lengths of colors lists must be 256");
  657. }
  658. r = malloc(256*sizeof(unsigned int));
  659. g = malloc(256*sizeof(unsigned int));
  660. b = malloc(256*sizeof(unsigned int));
  661. a = malloc(256*sizeof(unsigned int));
  662. for(i=0;i<256;i++)
  663. {
  664. item = PySequence_GetItem(list_r, i);
  665. r[i] = PyInt_AsLong(item);
  666. item = PySequence_GetItem(list_g, i);
  667. g[i] = PyInt_AsLong(item);
  668. item = PySequence_GetItem(list_b, i);
  669. b[i] = PyInt_AsLong(item);
  670. item = PySequence_GetItem(list_a, i);
  671. a[i] = PyInt_AsLong(item);
  672. }
  673. caca_set_bitmap_palette((struct caca_bitmap *)PyCObject_AsVoidPtr((void*)bitmap), r,g,b,a);
  674. return Py_BuildValue("i", 1); /* FIXME */
  675. }
  676. static PyObject *
  677. pycaca_set_bitmap_gamma(PyObject *self, PyObject *args)
  678. {
  679. int bitmap;
  680. float value;
  681. if (!PyArg_ParseTuple(args, "if", &bitmap, &value));
  682. caca_set_bitmap_gamma((struct caca_bitmap *)PyCObject_AsVoidPtr((void*)bitmap),value);
  683. return Py_BuildValue("i", 1); /* FIXME */
  684. }
  685. static PyObject *
  686. pycaca_draw_bitmap(PyObject *self, PyObject *args)
  687. {
  688. PyObject *pixels, *item;
  689. int bitmap, x1,x2,y1,y2;
  690. unsigned char *buffer;
  691. int i;
  692. if (!PyArg_ParseTuple(args, "iiiiiO", &x1,&y1,&x2,&y2,&bitmap,&pixels));
  693. buffer = malloc(PySequence_Length(pixels)*sizeof(unsigned char));
  694. for(i=0;i<PySequence_Length(pixels);i++)
  695. {
  696. item = PySequence_GetItem(pixels, i);
  697. buffer[i] = (unsigned char)PyInt_AsLong(item);
  698. }
  699. caca_draw_bitmap(x1,y1,x2,y2, (struct caca_bitmap *)PyCObject_AsVoidPtr((void*)bitmap), (void*)buffer);
  700. free(buffer);
  701. return Py_BuildValue("i", 1); /* FIXME */
  702. }
  703. static PyObject *
  704. pycaca_free_bitmap(PyObject *self, PyObject *args)
  705. {
  706. int bitmap;
  707. if (!PyArg_ParseTuple(args, "i", &bitmap));
  708. caca_free_bitmap((struct caca_bitmap *)PyCObject_AsVoidPtr((void*)bitmap));
  709. return Py_BuildValue("i", 1); /* FIXME */
  710. }
  711. /*
  712. void caca_draw_bitmap(int, int, int, int, struct caca_bitmap const *, void *);
  713. */