daemon@stag.UUCP (11/23/87)
ARGH!! Sure enough, the best way to find bugs in a piece of code is to release it to the public. There is a minor bug in the blkcpy() function that I just posted, so here is the corrected version... sorry... [BLKCPY.S] * char *blkcpy(dest, source, len) * register char *dest; * register char *source; * register int len; * /* * * Copies the <source> block to the <dest>. <len> bytes are * * always copied. No terminator is added to <dest>. A pointer * * to <dest> is returned. * */ * { * register char *p = dest; * * if(source < dest) * { * dest += len; * source += len; * while(len--) * *--dest = *--source; * } * else * { * while(len--) * *dest++ = *source++; * } * return(p); * } .text .globl _blkcpy _blkcpy: clr.l d0 move.w 12(a7),d0 ; number of bytes blkcpy0: move.l 4(a7),a1 ; destination move.l 8(a7),a0 ; source cmp.l a0,a1 ; check copy direction bls blkcpy4 add.l d0,a0 ; move pointers to end add.l d0,a1 bra blkcpy2 blkcpy1: move.b -(a0),-(a1) ; (s < d) copy loop blkcpy2: dbra d0,blkcpy1 bra blkcpy5 blkcpy3: move.b (a0)+,(a1)+ ; (s >= d) copy loop blkcpy4: dbra d0,blkcpy3 blkcpy5: move.l 4(a7),d0 ; return destination pointer rts Dale Schumacher ..ihnp4!meccts!stag!syntel!dal (alias: Dalnefre')