Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #pragma init (register_irtglc)
00027
00028 #include "eus.h"
00029
00030 extern pointer ___irtglc();
00031 static register_irtglc()
00032 { add_module_initializer("___irtglc", ___irtglc);}
00033
00034 #define colsize(p) (intval(p->c.ary.dim[1]))
00035 #define rowsize(p) (intval(p->c.ary.dim[0]))
00036 #define isimage(p) ((isarray(p) && \
00037 p->c.ary.rank==makeint(2) && \
00038 (elmtypeof(p->c.ary.entity)==ELM_CHAR || \
00039 elmtypeof(p->c.ary.entity)==ELM_BYTE)))
00040
00041 pointer CTRANSPOSE_IMAGE_ROWS(ctx,n,argv)
00042 register context *ctx;
00043 register int n;
00044 register pointer argv[];
00045
00046 {
00047 int h,step,y;
00048 char *src, *dst, *buf;
00049
00050 ckarg2(3,4);
00051 h=ckintval(argv[0]); step=ckintval(argv[1]);
00052 if (isstring(argv[2])) src=argv[2]->c.str.chars;
00053 else src=(char*)bigintval(argv[2]);
00054
00055 if (n==3) {
00056 buf=malloc(sizeof(char)*step);
00057 for(y = 0; y < h/2; ++y) {
00058 memcpy(buf, src + (h-y-1)*step, step);
00059 memcpy(src + (h-y-1)*step, src + y*step, step);
00060 memcpy(src + y*step, buf, step);
00061 }
00062 free(buf);
00063 return(src);
00064 } else {
00065 if (isstring(argv[3])) dst=argv[3]->c.str.chars;
00066 else dst=(char*)bigintval(argv[3]);
00067 for(y = 0; y < h; ++y) {
00068 memcpy(dst + y*step, src + (h-y-1)*step, step);
00069 }
00070 return(dst);}}
00071
00072 pointer ___irtglc(ctx,n,argv,env)
00073 register context *ctx;
00074 int n;
00075 pointer argv[];
00076 pointer env;
00077 {
00078 pointer mod=argv[0];
00079 defun(ctx,"CTRANSPOSE-IMAGE-ROWS",mod,CTRANSPOSE_IMAGE_ROWS);
00080 }
00081