This is rotate.c in view mode; [Download] [Up]
#include <stdlib.h> // on NeXT, at least #include <string.h> // on NeXT, at least typedef unsigned char uBYTE; typedef unsigned long dim; struct _implane {dim mwidth,mheight, iwidth,iheight; uBYTE *im; }; typedef struct _implane implane; enum TURNS { T_NONE,T_RIGHT,T_LEFT }; extern planealloc(); void rotateBm( dim *wid, dim *ht, implane *r, implane *g, implane *b, enum TURNS t) { dim x,y,w,h; implane Out; register uBYTE *pIn,*pOut; uBYTE *work; w = *wid, h = *ht; work = malloc(h); planealloc(&Out, w, h); switch (t) { case T_RIGHT: pOut = Out.im; for( y=0; y<w; y++ ) { pIn = r->im + r->mwidth * ( r->mheight -1) + y; for( x=0; x<h; x++ ) { work[x] = *pIn; pIn -= r->mwidth; } bcopy(work, pOut, h); pOut += h; } bcopy( Out.im, r->im, w*h); pOut = Out.im; for( y=0; y<w; y++ ) { pIn = g->im + g->mwidth * ( r->mheight -1) + y; for( x=0; x<h; x++ ) { work[x] = *pIn; pIn -= g->mwidth; } bcopy(work, pOut, h); pOut += h; } bcopy( Out.im, g->im, w*h); pOut = Out.im; for( y=0; y<w; y++ ) { pIn = b->im + b->mwidth * ( r->mheight -1) + y; for( x=0; x<h; x++ ) { work[x] = *pIn; pIn -= b->mwidth; } bcopy(work, pOut, h); pOut += h; } bcopy( Out.im, b->im, w*h); break; case T_LEFT: pOut = Out.im; for( y=0; y<w; y++ ) { pIn = r->im + r->mwidth - 1 - y; for( x=0; x<h; x++ ) { work[x] = *pIn; pIn += r->mwidth; } bcopy(work, pOut, h); pOut += h; } bcopy( Out.im, r->im, w*h); pOut = Out.im; for( y=0; y<w; y++ ) { pIn = g->im + g->mwidth - 1 - y; for( x=0; x<h; x++ ) { work[x] = *pIn; pIn += g->mwidth; } bcopy(work, pOut, h); pOut += h; } bcopy( Out.im, g->im, w*h); pOut = Out.im; for( y=0; y<w; y++ ) { pIn = b->im + b->mwidth - 1 - y; for( x=0; x<h; x++ ) { work[x] = *pIn; pIn += b->mwidth; } bcopy(work, pOut, h); pOut += h; } bcopy( Out.im, b->im, w*h); break; default: /* T_NONE (or something else) */ /* probably an internal error, but ignore for now */ break; } *wid = h, *ht = w; free(Out.im); free(work); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.