/ hash routine for diff / effectively spreads the string out into 7-bit / bytes, then sums the result 1's-complement / by 16-bit bytes and adds 1 to avoid zero answer / r4 hash accumulator / r3 current offset / r2 first time flag .globl _readhash .globl _getc .text _readhash: mov 2(sp),0f mov r5,-(sp) mov r4,-(sp) mov r3,-(sp) mov r2,-(sp) mov $1,r4 mov r4,r2 clr r3 1: mov 0f,(sp) jsr pc,*$_getc tst r0 blt 2f clr r2 cmp r0,$'\n beq 1f ashc $-16.,r0 ashc r3,r0 add r0,r4 adc r4 add r1,r4 adc r4 add $7,r3 cmp r3,$16. blt 1b sub $16.,r3 br 1b 2: tst r2 bne 2f mov $2,r0 sys write; 3f; 4f-3f 2: clr r4 1: mov r4,r0 mov (sp)+,r2 mov (sp)+,r3 mov (sp)+,r4 mov (sp)+,r5 rts pc .data 3: <Incomplete line omitted\n> 4: .even .bss 0: .=.+2