home *** CD-ROM | disk | FTP | other *** search
-
- * Maxon C++ Library:
- * Modul "formclass"
- * Jens Gelhar 27.01.92, 08.04.94, 01.09.94
-
- xref form__out,op__new__Ui,free__Pv
- xref op__leftshift__ostream__TPCc
-
- xdef _0ct__form__TPCce,_0dt__form__T
- xdef op__leftshift__ostream__TR04form
-
- _0ct__form__TPCce: ; Parameter: "this", Formatstring, Argumente
- movem.l d0-d7/a0-a6,-(a7)
- move.l 15*4+8(a7),a0 ; Formatstring
- lea 15*4+12(a7),a1 ; Argumente
- moveq #0,d1
- bsr.b formRek
- move.l 15*4+4(a7),a0
- move.l d0,(a0)
- movem.l (a7)+,d0-d7/a0-a6
- rts
-
- formRek:
- ; Format a0, Argumente ab a1: Liste erzeugen, nach d0, Anzahl in d1 weiterzählen
- tst.b (a0)
- beq formEnd
- ; ein Argument putten:
- move.l d1,-(a7)
- lea -84(a7),a7
- move.l a7,a2
- jsr form__out
-
- btst #29,d0
- bne.b fr4
- ; String allozieren:
- move.l d0,-(a7)
- ext.l d0
- add.l d3,d0
- add.l d0,84+4(a7) ; Länge inkrementieren
- addq.l #1,d0
- movem.l d0/a0/a1,-(a7)
- jsr op__new__Ui
- addq.l #4,a7
- movem.l (a7)+,a0/a1
- move.l d0,a3 ; Text-Adresse
- move.l d0,a4 ; Kopie davon
- move.l (a7)+,d0
- move.l a4,d1
- beq.b fr5
- tst.w d0
- beq.b fr1
- btst #30,d0 ; Bit 30: Spaces nachher ausgeben!
- bne.b fr1
- bsr.b FillOut
- fr1 ; d3 Zeichen von d2 nach a3 kopieren:
- tst.l d3
- beq.b fr3
- exg d2,a2
- fr2 move.b (a2)+,(a3)+
- subq.l #1,d3
- bne.b fr2
- exg d2,a2
- fr3 btst #30,d0 ; Bit 30: Spaces nachher ausgeben!
- beq.b fr5
- bsr.b FillOut
- fr5: lea 84(a7),a7
- move.l (a7)+,d1
- clr.b (a3)
- ; Cat-Record für "a4" allozieren:
- moveq #8,d0
- movem.l d0/d1/a0/a1,-(a7)
- jsr op__new__Ui
- addq.l #4,a7
- movem.l (a7)+,d1/a0/a1
- tst.l d0
- beq.b formEnd
- exg d0,a4
- move.l d0,4(a4)
- move.l a4,-(a7)
- bsr formRek
- move.l (a7)+,a4
- move.l d0,(a4)
- move.l a4,d0
- rts
- formEnd moveq #0,d0
- rts
-
- fr4 ; Zeichen-Anzahl nach (a2):
- move.l 84(a7),(a2)
- lea 84(a7),a7
- move.l (a7)+,d1
- bra formRek
-
- FillOut:
- ; d0.w Füllzeichen ausgeben, Anzahl zurückgeben
- move.w d0,-(a7)
- 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,(a3)+
- dbra d0,foLoop
- fo2 move.w (a7)+,d0
- rts
-
- _0dt__form__T: ; dynamische Strings löschen
- movem.l a0/d0,-(a7)
- move.l 8+4(a7),a0
- move.l (a0),a0
- dtLoop move.l a0,d0
- beq.b dtEnd
- move.l (a0),-(a7)
- move.l 4(a0),-(a7)
- jsr free__Pv ; String löschen
- move.l a0,(a7)
- jsr free__Pv ; Cat-Record löschen
- addq.l #4,a7
- move.l (a7)+,a0
- bra.b dtLoop
- dtEnd movem.l (a7)+,d0/a0
- rts
-
- op__leftshift__ostream__TR04form:
- movem.l d2-d3/a2,-(a7)
- move.l 3*4+4(a7),a1 ; Stream
- move.l 3*4+4+4(a7),a0 ; Form
- move.l (a0),a0
- .loop move.l a0,d0
- beq.b .end
- move.l (a0),-(a7)
- move.l 4(a0),-(a7)
- move.l a1,-(a7)
- jsr op__leftshift__ostream__TPCc
- addq.l #8,a7
- move.l (a7)+,a0
- bra.b .loop
- .end movem.l (a7)+,d2-d3/a2
- move.l 4(a7),d0
- rts
-
- end
-
-