BSD 3 development
[unix-history] / usr / src / cmd / px / 31write.s
CommitLineData
b202b2da
CH
1#\f
2# 31write.s
3#
4# WRITE OPERATIONS
5#
6_PUT:
7 incl r10
8 bbc $fWRITE,FUNIT(r7),ewriteit
9 pushl FBUF(r7) #stream
10 pushl $1 #number of items
11 pushl FSIZE(r7) #item size
12 pushl r7 #ptr to data
13 calls $4,_fwrite
14cleanup:
15 movl FBUF(r7),r5 #ptr to FILE
16 bbs $ioERR,FLAG(r5),ewrite
17 cmpl r7,$stdout #check for output to stdout
18 bneq l3101
19 tstw _bufopt #check for buffering on stdout
20 bneq l3101
21 pushl r5 #if unbuffered then flush
22 calls $1,_fflush
23l3101:
24 jmp (r8)
25ewriteit:
26 movw $EWRITEIT,_perrno
27 jbr error
28ewrite:
29 movw $EWRITE,_perrno
30 jbr error
31
32_WRITEF:
33 cvtbl (r10)+,r6 #r6 has length of format string
34 cvtwl (r10)+,r5 #r5 has number of longword arguements
35fentry:
36 bbc $fWRITE,FUNIT(r7),ewriteit
37 pushal (sp)[r5] #addr of format string
38 pushl FBUF(r7) #stream
39 addl2 $2,r5 #r5 has total number of arguements
40 calls r5,_fprintf #output formatted data
41 addl2 r6,sp #pop format string
42 jbr cleanup
43
44_WRITLN:
45 aobleq LLIMIT(r7),LCOUNT(r7),l3105
46 movw $ELLIMIT,_perrno
47 jbr error
48l3105:
49 movw $linefeed,-(sp) #push a linefeed
50 clrl r6
51 cmpl r7,$stdout #check for flushing
52 bneq l3102
53 cmpw $1,_bufopt #check for eoln flushing
54 bneq l3102
55 incl r6 #set flush request
56 brb l3102
57_PAGE:
58 movw $formfeed,-(sp) #push a formfeed
59_WRITEC:
60 clrl r6
61l3102:
62 incl r10
63 jbc $fWRITE,FUNIT(r7),ewriteit
64 cvtwl (sp)+,r2 #hold data
65 pushl FBUF(r7) #stream
66 pushl r2 #push data
67 calls $2,_fputc
68 jlbc r6,cleanup #if no flush request, normal exit
69 movl FBUF(r7),r5
70 jbs $ioERR,FLAG(r5),ewrite #check for I/O error
71 pushl r5 #flush
72 calls $1,_fflush
73 jmp (r8)
74
75_WRITES:
76 cvtbl (r10)+,r5 #r5 has length of format string
77 cvtwl (r10)+,r6 #r6 has length of data
78sentry:
79 jbc $fWRITE,FUNIT(r7),ewriteit
80 addl2 sp,r6 #r6 pts to format string
81 pushl sp #ptr to data
82 pushl r6 #ptr to format string
83 addl2 r5,r6 #r6 points to cleared top of stack
84 pushl FBUF(r7) #stream
85 calls $3,_fprintf #output string
86 movl r6,sp #pop data and format string
87 jbr cleanup
88
89_WRITEB:
90 cvtbl (r10)+,r6 #r6 has length of format string
91bentry:
92 jbc $fWRITE,FUNIT(r7),ewriteit
93 movw (sp)+,r0 #push addr of appropriate string
94 beql l3103
95 pushal s_true
96 brb l3104
97l3103:
98 pushal s_false
99l3104:
100 pushal 4(sp) #addr of format string
101 pushl FBUF(r7) #stream
102 calls $3,_fprintf #print boolean
103 addl2 r6,sp #pop format string
104 jbr cleanup
105
106s_true: .byte 't,'r,'u,'e,linefeed,0
107s_false:.byte 'f,'a,'l,'s,'e,linefeed,0