home *** CD-ROM | disk | FTP | other *** search
-
- ;FHPRINTF.ASM
- ;
- ; Handles formatted printing to Amiga file handles w/ fhprintf
-
- ;
- ; Manx assembler FAR stmts.
-
- FAR code
- FAR data
-
- xdef _fhprintf
- xref _Write
- xref _LVORawDoFmt
- xref _SysBase
-
- _fhprintf
- jsr xformat ;same thing
- jsr _Write
- lea.l 268(A7),A7
- rts
-
- ;XFORMAT takes a Xprintf(xx, cs, arg, arg...) where xx is any
- ;integer and returns (xx, buf, bytes) on the stack suitable for an
- ;immediate call to xwrite() or Write(). The caller must deallocate
- ;268 bytes from the stack when done.
- ;
- ; (oret)
- ; A2 A3 A4 A5 A6 RET FI BUF NUM <thebuffer> printfret fi cs args
- ; ^ ^ ^
- ; 1 2 3
-
-
- xformat
- move.l A7,A0 ;sp now at pos. #3 A0 = pos #3
- sub.l #268,A7 ;sp now at pos. #2 SP = pos #2
- move.l (A0),(A7) ;copy return address
- move.l 8(A0),4(A7) ;copy fi or fh to FI
- lea.l 16(A7),A1 ;address of buffer
- move.l A1,8(A7) ;place in BUF
- movem.l A2-A6,-(A7) ;save regs SP = pos #1
- move.l A1,A3 ;A3 = buffer pointer
- lea.l 16(A0),A1 ;A1 = lea of printf arg list
- move.l 12(A0),A0 ;A0 = control string
- move.l #_xc,A2 ;A2 = call vector
-
- move.l _SysBase,A6 ;exec library call
- jsr _LVORawDoFmt(A6)
-
- move.l 28(A7),A3 ;buffer start
- loop tst.b (A3)+ ;find end of string
- bne loop
- sub.l 28(A7),A3 ;get string length
- subq.l #1,A3
- move.l A3,32(A7) ;place in NUM
- movem.l (A7)+,A2-A6 ;restore registers used
- rts
-
- _xc
- move.b D0,(A3)+
- rts
-
-
-