home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / C / MAXONC3_6OF8.DMS / in.adf / LIBSRC.LHA / LIBSRC / formclass.asm < prev    next >
Encoding:
Assembly Source File  |  1994-09-01  |  2.7 KB  |  146 lines

  1.  
  2. * Maxon C++ Library:
  3. * Modul "formclass"
  4. * Jens Gelhar 27.01.92, 08.04.94, 01.09.94
  5.  
  6.     xref    form__out,op__new__Ui,free__Pv
  7.     xref    op__leftshift__ostream__TPCc
  8.  
  9.     xdef    _0ct__form__TPCce,_0dt__form__T
  10.     xdef    op__leftshift__ostream__TR04form
  11.  
  12. _0ct__form__TPCce:    ; Parameter: "this", Formatstring, Argumente
  13.     movem.l    d0-d7/a0-a6,-(a7)
  14.     move.l    15*4+8(a7),a0        ; Formatstring
  15.     lea    15*4+12(a7),a1        ; Argumente
  16.     moveq    #0,d1
  17.     bsr.b    formRek
  18.     move.l    15*4+4(a7),a0
  19.     move.l    d0,(a0)
  20.     movem.l (a7)+,d0-d7/a0-a6
  21.     rts
  22.  
  23. formRek:
  24.     ; Format a0, Argumente ab a1: Liste erzeugen, nach d0, Anzahl in d1 weiterzählen
  25.     tst.b    (a0)
  26.     beq    formEnd
  27.     ; ein Argument putten:
  28.     move.l    d1,-(a7)
  29.     lea    -84(a7),a7
  30.     move.l    a7,a2
  31.     jsr    form__out
  32.  
  33.     btst    #29,d0
  34.     bne.b    fr4
  35.     ; String allozieren:
  36.     move.l    d0,-(a7)
  37.     ext.l    d0
  38.     add.l    d3,d0
  39.     add.l    d0,84+4(a7)    ; Länge inkrementieren
  40.     addq.l    #1,d0
  41.     movem.l    d0/a0/a1,-(a7)
  42.     jsr    op__new__Ui
  43.     addq.l    #4,a7
  44.     movem.l    (a7)+,a0/a1
  45.     move.l    d0,a3        ; Text-Adresse
  46.     move.l    d0,a4        ; Kopie davon
  47.     move.l    (a7)+,d0
  48.     move.l    a4,d1
  49.     beq.b    fr5
  50.     tst.w    d0
  51.     beq.b    fr1
  52.     btst    #30,d0        ; Bit 30: Spaces nachher ausgeben!
  53.     bne.b    fr1
  54.     bsr.b    FillOut
  55. fr1    ; d3 Zeichen von d2 nach a3 kopieren:
  56.     tst.l    d3
  57.     beq.b    fr3
  58.     exg    d2,a2
  59. fr2    move.b    (a2)+,(a3)+
  60.     subq.l    #1,d3
  61.     bne.b    fr2
  62.     exg    d2,a2
  63. fr3    btst    #30,d0        ; Bit 30: Spaces nachher ausgeben!
  64.     beq.b    fr5
  65.     bsr.b    FillOut
  66. fr5:    lea    84(a7),a7
  67.     move.l    (a7)+,d1
  68.     clr.b    (a3)
  69.     ; Cat-Record für "a4" allozieren:
  70.     moveq    #8,d0
  71.     movem.l    d0/d1/a0/a1,-(a7)
  72.     jsr    op__new__Ui
  73.     addq.l    #4,a7
  74.     movem.l    (a7)+,d1/a0/a1
  75.     tst.l    d0
  76.     beq.b    formEnd
  77.     exg    d0,a4
  78.     move.l    d0,4(a4)
  79.     move.l    a4,-(a7)
  80.     bsr    formRek
  81.     move.l    (a7)+,a4
  82.     move.l    d0,(a4)
  83.     move.l    a4,d0
  84.     rts
  85. formEnd    moveq #0,d0
  86.     rts
  87.  
  88. fr4    ; Zeichen-Anzahl nach (a2):
  89.     move.l    84(a7),(a2)
  90.     lea    84(a7),a7
  91.     move.l    (a7)+,d1
  92.     bra    formRek
  93.  
  94. FillOut:
  95.     ; d0.w Füllzeichen ausgeben, Anzahl zurückgeben
  96.     move.w    d0,-(a7)
  97.     moveq    #' ',d1
  98.     tst.l    d0
  99.     bpl.b    fo1
  100.     moveq    #'0',d1        ; Bit 31: mit Nullen füllen
  101. fo1    subq.w    #1,d0
  102.     blo.b    fo2
  103. foLoop:    ; d0-mal d1:
  104.     move.b    d1,(a3)+
  105.     dbra    d0,foLoop
  106. fo2    move.w    (a7)+,d0
  107.     rts
  108.  
  109. _0dt__form__T: ; dynamische Strings löschen
  110.     movem.l    a0/d0,-(a7)
  111.     move.l    8+4(a7),a0
  112.     move.l    (a0),a0
  113. dtLoop    move.l    a0,d0
  114.     beq.b    dtEnd
  115.     move.l    (a0),-(a7)
  116.     move.l    4(a0),-(a7)
  117.     jsr    free__Pv    ; String löschen
  118.     move.l    a0,(a7)
  119.     jsr    free__Pv    ; Cat-Record löschen
  120.     addq.l    #4,a7
  121.     move.l    (a7)+,a0
  122.     bra.b    dtLoop
  123. dtEnd    movem.l (a7)+,d0/a0
  124.     rts
  125.  
  126. op__leftshift__ostream__TR04form:
  127.     movem.l    d2-d3/a2,-(a7)
  128.     move.l    3*4+4(a7),a1        ; Stream
  129.     move.l    3*4+4+4(a7),a0        ; Form
  130.     move.l    (a0),a0
  131. .loop    move.l    a0,d0
  132.     beq.b    .end
  133.     move.l    (a0),-(a7)
  134.     move.l    4(a0),-(a7)
  135.     move.l    a1,-(a7)
  136.     jsr    op__leftshift__ostream__TPCc
  137.     addq.l    #8,a7
  138.     move.l    (a7)+,a0
  139.     bra.b    .loop
  140. .end    movem.l    (a7)+,d2-d3/a2
  141.     move.l    4(a7),d0
  142.     rts
  143.  
  144.     end
  145.  
  146.