home *** CD-ROM | disk | FTP | other *** search
-
- * Maxon C++ Project:
- * Library-Modul "sprintf"
- * Jens Gelhar 07.01.93, 15.04.94, 16.04.94
-
- xdef _sprintf,sprintf__PcPCce
- xdef _vsprintf,vsprintf__PcPCcUi
-
- xref form__out
-
- _vsprintf:
- vsprintf__PcPCcUi:
- movem.l d2-d7/a2-a6,-(a7)
- move.l 11*4+12(a7),a1 ; va_list
- bra.b spIn
-
- _sprintf:
- sprintf__PcPCce:
- movem.l d2-d7/a2-a6,-(a7)
- lea 11*4+12(a7),a1 ; Parameter
- spIn:
- move.l 11*4+4(a7),d1 ; Zielstring
- move.l 11*4+8(a7),a0 ; Formatstring
- clr.l -(a7) ; Anzahl Zeichen
- spLoop
- tst.b (a0)
- beq.b spEnd
- lea -84(a7),a7
- move.l a7,a2
- move.l d1,-(a7)
- jsr form__out
-
- move.l (a7)+,d1
- btst #29,d0
- bne.b sp4
- tst.w d0
- beq.b sp1
- btst #30,d0 ; Bit 30: Spaces nachher ausgeben!
- bne.b sp1
- bsr.b FillOut
- add.w d0,84+2(a7) ; zur Zeichenzahl addieren
- sp1 add.l d3,84(a7) ; zu Zeichenanzahl addieren
- ; d3 Zeichen von d2 nach d1 kopieren:
- tst.l d3
- beq.b sp3
- exg d1,a1
- exg d2,a2
- sp2 move.b (a2)+,(a1)+
- subq.l #1,d3
- bne.b sp2
- exg d1,a1
- exg d2,a2
- sp3 lea 84(a7),a7
- tst.w d0
- beq.b spLoop
- btst #30,d0
- beq.b spLoop
- bsr.b FillOut
- add.w d0,2(a7)
- bra.b spLoop
- spEnd move.l d1,a0
- clr.b (a0)
- movem.l (a7)+,d0/d2-d7/a2-a6
- rts
-
- sp4 ; "%n"
- move.l 84(a7),(a2)
- bra.b sp3
-
- FillOut: ; d0.w Füllzeichen ausgeben, Anzahl zurückgeben
- move.l a0,-(a7)
- move.w d0,-(a7)
- move.l d1,a0
- moveq #' ',d1
- tst.l d0
- bpl.b fo1
- moveq #'0',d1 ; Bit 31: mit Nullen füllen
- fo1 subq.w #1,d0
- blo.b fo2
- foLoop ; d0-mal d1:
- move.b d1,(a0)+
- dbra d0,foLoop
- fo2 move.w (a7)+,d0
- move.l a0,d1
- move.l (a7)+,a0
- rts
-
- end
-