Commit | Line | Data |
---|---|---|
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 | |
14 | cleanup: | |
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 | |
23 | l3101: | |
24 | jmp (r8) | |
25 | ewriteit: | |
26 | movw $EWRITEIT,_perrno | |
27 | jbr error | |
28 | ewrite: | |
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 | |
35 | fentry: | |
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 | |
48 | l3105: | |
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 | |
61 | l3102: | |
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 | |
78 | sentry: | |
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 | |
91 | bentry: | |
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 | |
97 | l3103: | |
98 | pushal s_false | |
99 | l3104: | |
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 | ||
106 | s_true: .byte 't,'r,'u,'e,linefeed,0 | |
107 | s_false:.byte 'f,'a,'l,'s,'e,linefeed,0 |