home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / MAXONC3_6OF8.DMS / in.adf / LIBSRC.LHA / LIBSRC / sprintf.asm < prev    next >
Encoding:
Assembly Source File  |  1994-04-16  |  1.5 KB  |  89 lines

  1.  
  2. * Maxon C++ Project:
  3. * Library-Modul "sprintf"
  4. * Jens Gelhar 07.01.93, 15.04.94, 16.04.94
  5.  
  6.     xdef    _sprintf,sprintf__PcPCce
  7.     xdef    _vsprintf,vsprintf__PcPCcUi
  8.  
  9.     xref    form__out
  10.  
  11. _vsprintf:
  12. vsprintf__PcPCcUi:
  13.     movem.l d2-d7/a2-a6,-(a7)
  14.     move.l 11*4+12(a7),a1   ; va_list
  15.     bra.b spIn
  16.  
  17. _sprintf:
  18. sprintf__PcPCce:
  19.     movem.l d2-d7/a2-a6,-(a7)
  20.     lea 11*4+12(a7),a1      ; Parameter
  21. spIn:
  22.     move.l 11*4+4(a7),d1    ; Zielstring
  23.     move.l 11*4+8(a7),a0    ; Formatstring
  24.     clr.l -(a7)             ; Anzahl Zeichen
  25. spLoop
  26.     tst.b (a0)
  27.     beq.b spEnd
  28.     lea -84(a7),a7
  29.     move.l a7,a2
  30.     move.l d1,-(a7)
  31.     jsr form__out
  32.  
  33.     move.l (a7)+,d1
  34.     btst #29,d0
  35.     bne.b sp4
  36.     tst.w d0
  37.     beq.b sp1
  38.     btst #30,d0             ; Bit 30: Spaces nachher ausgeben!
  39.     bne.b sp1
  40.     bsr.b FillOut
  41.     add.w d0,84+2(a7)         ; zur Zeichenzahl addieren
  42. sp1    add.l d3,84(a7)         ; zu Zeichenanzahl addieren
  43.     ; d3 Zeichen von d2 nach d1 kopieren:
  44.     tst.l d3
  45.     beq.b sp3
  46.     exg d1,a1
  47.     exg d2,a2
  48. sp2    move.b (a2)+,(a1)+
  49.     subq.l #1,d3
  50.     bne.b sp2
  51.     exg d1,a1
  52.     exg d2,a2
  53. sp3    lea 84(a7),a7
  54.     tst.w d0
  55.     beq.b spLoop
  56.     btst #30,d0
  57.     beq.b spLoop
  58.     bsr.b FillOut
  59.     add.w d0,2(a7)
  60.     bra.b spLoop
  61. spEnd    move.l d1,a0
  62.     clr.b (a0)
  63.     movem.l (a7)+,d0/d2-d7/a2-a6
  64.     rts
  65.  
  66. sp4    ; "%n"
  67.     move.l 84(a7),(a2)
  68.     bra.b sp3
  69.  
  70. FillOut:    ; d0.w Füllzeichen ausgeben, Anzahl zurückgeben
  71.     move.l a0,-(a7)
  72.     move.w d0,-(a7)
  73.     move.l d1,a0
  74.     moveq #' ',d1
  75.     tst.l d0
  76.     bpl.b fo1
  77.     moveq #'0',d1           ; Bit 31: mit Nullen füllen
  78. fo1    subq.w #1,d0
  79.     blo.b fo2
  80. foLoop    ; d0-mal d1:
  81.     move.b d1,(a0)+
  82.     dbra d0,foLoop
  83. fo2    move.w (a7)+,d0
  84.     move.l a0,d1
  85.     move.l (a7)+,a0
  86.     rts
  87.  
  88.     end
  89.