home *** CD-ROM | disk | FTP | other *** search
-
- * Maxon C++ Project:
- * Library-Modul "printf"
- * Jens Gelhar 17.10.91, 15.04.94, 15.12.94
-
- xdef _printf,printf__PCce
- xdef _vprintf,vprintf__PCcUi
- xdef _fprintf,fprintf__P06streamPCce
- xdef _vfprintf,vfprintf__P06streamPCcUi
-
- xref form__out
- xref _std__out,__Writefile
-
- _vprintf:
- vprintf__PCcUi:
- movem.l d1-d7/a0-a6,-(a7)
- move.l 14*4+8(a7),a1 ; va_list
- bra.b pfIn
- _printf:
- printf__PCce: movem.l d1-d7/a0-a6,-(a7)
- lea 14*4+8(a7),a1 ; Parameter
- pfIn move.l #_std__out,d1
- move.l 14*4+4(a7),a0 ; String
- bra.b fpIn
-
- _vfprintf:
- vfprintf__P06streamPCcUi:
- movem.l d1-d7/a0-a6,-(a7)
- move.l 14*4+12(a7),a1 ; va_list
- bra.b fpIn1
-
- _fprintf:
- fprintf__P06streamPCce:
- movem.l d1-d7/a0-a6,-(a7)
- lea 14*4+12(a7),a1 ; Parameter
- fpIn1 move.l 14*4+4(a7),d1 ; Stream
- move.l 14*4+8(a7),a0 ; String
- fpIn
- clr.l -(a7)
- fpLoop tst.b (a0)
- beq.b fpEnd
- lea -84(a7),a7
- move.l a7,a2
- move.l d1,-(a7)
- jsr form__out
- btst #29,d0
- bne.b fp3
-
- tst.w d0
- beq.b fp1
- btst #30,d0 ; Bit 30: Spaces nachher ausgeben!
- bne.b fp1
- move.l (a7),d1
- movem.l d1-d3/a0-a1,-(a7)
- bsr.b FillOut
- movem.l (a7)+,d1-d3/a0-a1
- add.l d0,84+4(a7) ; zur Zeichenzahl addieren
- fp1 move.l (a7)+,d1
- add.l d3,84(a7) ; zu Zeichenanzahl addieren
- movem.l d0/d1/a0/a1,-(a7)
- move.l d1,a0
- jsr __Writefile
- tst.l d0
- bmi fperror
- movem.l (a7)+,d0/d1/a0/a1
- btst #30,d0
- beq.b fp2
- tst.w d0
- beq.b fp2
- movem.l d1/a0/a1,-(a7)
- bsr.b FillOut
- movem.l (a7)+,d1/a0/a1
- add.l d0,84(a7)
- fp2 lea 84(a7),a7
- bra.b fpLoop
- fperror ; Fehler beim Schreiben aufgetreten:
- add.w #4*4+84,a7
- move.l #-1,(a7) ; Ergebnis: -1
- fpEnd movem.l (a7)+,d0-d7/a0-a6
- rts
-
- fp3 ; "%n"
- move.l (a7)+,d1
- move.l 84(a7),(a2)
- bra.b fp2
-
- FillOut: ; d0.w Füllzeichen ausgeben, Anzahl zurückgeben
- move.l d0,-(a7)
- move.l d1,a0
- lea -84(a7),a7 ; Platz für Puffer
- moveq #' ',d1
- tst.l d0
- bpl.b flLoop
- moveq #'0',d1 ; Bit 31: mit Nullen füllen
- flLoop ; d0-mal d1:
- moveq #0,d4
- move.w d0,d4
- cmp.w #80,d4
- bls.b fl2
- moveq #80,d4
- fl2 sub.w d4,d0
- move.l a7,d2
- move.l d2,a2
- move.l d4,d3
- movem.l d0/d1/a0,-(a7)
- fl3 move.b d1,(a2)+
- subq.w #1,d4
- bne.b fl3
- jsr __Writefile
- movem.l (a7)+,d0/d1/a0
- tst.w d0
- bne.b flLoop ; noch mehr Zeichen?
-
- lea 84(a7),a7
- move.l (a7)+,d0
- ext.l d0
- rts
-
- end
-