#define getnumint(x) \ (fixp(x)?(int)getfixnum(x):\ (floatp(x)?(int)getflonum(x):\ xlbadtype(x))) LVAL xmoveto() { LVAL arg1, arg2; arg1 = xlgetarg(); arg2 = xlgetarg(); xllastarg(); curx = (int)getnumint(arg1); cury = (int)getnumint(arg2); return( true ); } LVAL xlineto() { LVAL arg1, arg2; int cur2x, cur2y; arg1 = xlgetarg(); arg2 = xlgetarg(); xllastarg(); cur2x = (int)getnumint(arg1); cur2y = (int)getnumint(arg2); XDrawLine(display, win, grac, curx, cury, cur2x , cur2y); curx = cur2x; cury = cur2y; XFlush(display); return( true ); }Cの関数で計算した数値をLispの数値として返す場合には, データ変換用関数cvfixnumなどを用います(xldmem.c).
LVAL xgetpixel() { LVAL arg1, arg2; int v=0; arg1 = xlgetarg(); arg2 = xlgetarg(); xllastarg(); ximage = XGetImage(display, win, 0,0, 640, 400, AllPlanes, XYPixmap); v = XGetPixel(ximage, (int)getnumint(arg1), (int)getnumint(arg2)); return( cvfixnum(v)); }