.title pad .ident /831205/ ; ;This pads a string with both leading and trailing blanks ;to centre a string ; ;Register usage ; R0 scratch ; R1 string pointer ; R2 string scanner ; R3 pad ; R4 maximum length ; pad:: mov sp,r0 mov (r0),r1 mov r4,(r0)+ mov (r0),r4 ;maximum length mov r3,(r0)+ mov (r0),r3 ;span mov r2,(r0)+ mov (r0),r2 ;string mov r1,(r0) ; cmp r3,r4 ;see if allowable bhi 6$ ;too big ; mov #-1,r0 ;find length of string 1$: inc r0 tstb (r2)+ bne 1$ ; sub r0,r3 ;find pad length ble 6$ mov r3,-(sp) asr r3 ;left side pad beq 4$ sub r3,(sp) ;right side pad ; mov r2,r1 ;shift to allow for left side pad add r3,r1 mov r1,-(sp) inc r0 ;allow for extra null 2$: movb -(r2),-(r1) sob r0,2$ ; 3$: movb #' ,-(r1) ;add leading blanks sob r3,3$ ; mov (sp)+,r2 ;add trailing blanks 4$: dec r2 mov (sp)+,r0 5$: movb #' ,(r2)+ sob r0,5$ clrb (r2) ;mark end ; 6$: mov (sp)+,r4 mov (sp)+,r3 mov (sp)+,r2 rts pc .end