annotate level2/modules/pipeman.asm @ 305:1ecde21f77f7

Added IDE target
author boisy
date Mon, 22 Jul 2002 23:14:27 +0000
parents 6641a883d6b0
children 1cf59b6e12df
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
1 ********************************************************************
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
2 * PipeMan - Pipe file manager
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
3 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
4 * $Id$
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
5 *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
6 * Ed. Comments Who YY/MM/DD
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
7 * ------------------------------------------------------------------
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
8 * 4 Original OS-9 L2 Tandy distribution
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
9 * Added comments from Curtis Boyle's code BGP 98/10/22
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
10
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
11 nam PipeMan
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
12 ttl Pipe file manager
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
13
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
14 ifp1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
15 use defsfile
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
16 use pipedefs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
17 endc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
18
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
19 rev set $01
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
20 edition set 4
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
21
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
22 mod eom,Name,FlMgr+Objct,ReEnt+rev,Start,0
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
23
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
24 Name fcs /PipeMan/
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
25 fcb edition
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
26
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
27 Start lbra Create Create, same as open
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
28 lbra Open Open
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
29 lbra UnkSvc MakDir
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
30 lbra UnkSvc ChgDir
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
31 lbra UnkSvc Delete
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
32 lbra L0040 Seek
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
33 lbra PRead PRead
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
34 lbra PWrite PWrite
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
35 lbra L00AB PRdLn
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
36 lbra L0105 PWrLn
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
37 lbra L0040 GetStat
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
38 lbra L0040 SetStat
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
39 lbra Close Return to system
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
40
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
41 UnkSvc comb Exit with Unknown Service error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
42 ldb #E$UnkSvc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
43 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
44
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
45 L0040 clrb No error & return
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
46 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
47
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
48 * Open or create a Pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
49 Create
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
50 Open ldu PD.RGS,y get Caller's register stack ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
51 ldx R$X,u get pointer to pathname
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
52 pshs y preserve descriptor pointer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
53 os9 F$PrsNam is it legal?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
54 bcs L007B no, exit with error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
55 ldx <D.Proc get task #
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
56 ldb P$Task,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
57 leax -1,y point to last character of pathname
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
58 os9 F$LDABX get it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
59 tsta high bit terminated?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
60 bmi L0060 yes, go on
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
61 leax ,y point just past it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
62 os9 F$PrsNam parse it again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
63 bcc L007B can't accept more data, return error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
64 L0060 sty R$X,u save updated path pointer to caller
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
65 puls y restore path dsc. ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
66 ldd #256 grab a page of memory for my buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
67 os9 F$SRqMem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
68 bcs L007A can't get memory, return error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
69 stu PD.BUF,y save pointer to buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
70 stu <PD.NxtI,y save read pointer?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
71 stu <PD.NxtO,y save write pointer?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
72 leau d,u point to end of buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
73 stu <PD.End,y save the end pointer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
74 L007A rts return
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
75 L007B comb Exit with Bad Pathname error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
76 ldb #E$BPNam
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
77 puls y,pc
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
78
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
79 * Close
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
80 Close lda PD.CNT,y any open images left?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
81 bne L008E yes, go on
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
82 ldu PD.BUF,y No, get buffer pointer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
83 ldd #256 return it's memory to system
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
84 os9 F$SRtMem
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
85 bra L00A9
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
86 * Still stuff open to pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
87 * Check Read part of pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
88 L008E cmpa PD.RCT,y Same as # images open to Read from pipe?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
89 bne L0096 No, go check Write images
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
90 leax PD.RPID,y Point to Read variables
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
91 bra L009C Send signal to reading process
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
92 * Check Write part of pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
93 L0096 cmpa PD.WCT,y Same as # images open to Write to pipe?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
94 bne L00A9 No, exit without error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
95 leax PD.WPID,y Point to Write variables
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
96
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
97 * Send signal
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
98 L009C lda ,x Get Process # to send signal to
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
99 beq L00A9 None, exit without error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
100 ldb 2,x get the signal code to send
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
101 beq L00A9 None, exit without error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
102 clr 2,x Clear out signal code
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
103 os9 F$Send Send to process
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
104 L00A9 clrb No error & exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
105 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
106
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
107 * ReadLn entry point
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
108 * Entry: Y=Path dsc. ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
109 L00AB ldb #$0D Flag for ReadLn
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
110 stb PD.REOR,y Save as Not raw flag in Read area
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
111 bra L00B3 Go read
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
112
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
113 * Read entry point
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
114 PRead clr PD.REOR,y Raw mode on
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
115 L00B3 leax PD.RPID,y point to Pipe Read variables
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
116 lbsr L0160 Go wait for pipe to be ready for us
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
117 bcs L0100 Error, shut off our side & signal other end of pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
118 ldd R$Y,u get # bytes requested to read
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
119 beq L0100 None, shut off our side & signal other end of pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
120 ldx R$X,u get pointer to callers destination
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
121 addd R$X,u
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
122 pshs b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
123 pshs x preserve start pointer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
124 bra L00D5
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
125
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
126 * Read Loop for both ReadLn (stops on CR) or Read (stops when size is done)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
127
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
128 L00C8 pshs x Preserve buffer start ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
129 leax PD.RPID,y Point to Read vars
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
130 lbsr L018B Go wait for possible data
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
131 bcc L00D5 May be some, continue
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
132 puls x Restore buffer start ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
133 bra L00F1 None expected, exit with what we have
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
134
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
135 L00D5 ldx <D.Proc Get current process ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
136 ldb P$Task,x Get task #
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
137 puls x Get Buffer start ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
138
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
139 * Read from pipe buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
140 L00DB lbsr L01F2
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
141 bcs L00C8
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
142 os9 F$STABX Got byte, save it to caller
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
143 leax 1,x Bump buffer ptr up
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
144 tst PD.REOR,y Check Read/ReadLn flag
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
145 beq L00ED Raw, skip ahead
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
146 cmpa PD.REOR,y Was the byte received a CR?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
147 beq L00F1 Yes, done reading
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
148 L00ED cmpx ,s Hit end of buffer read requested yet?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
149 bcs L00DB No, keep reading
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
150 L00F1 tfr x,d Move ptr to D
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
151 subd ,s++ Calculate actual size read
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
152 addd R$Y,u ??? Add to size previously read???
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
153 std R$Y,u Save total # bytes read to caller
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
154 bne L00FF If some read, skip ahead
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
155 ldb #E$EOF Otherwise, exit with EOF error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
156 bra L0100
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
157 L00FF clrb No error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
158
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
159 L0100 leax PD.RPID,y Point to pipe Read vars
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
160 lbra L01BD
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
161
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
162 L0105 ldb #$0D Flag for WritLn (and terminator for lines)
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
163 stb <PD.WEOR,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
164 bra L010F Go do the write
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
165
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
166 PWrite clr <PD.WEOR,y Flag for Raw Write
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
167 L010F leax PD.WPID,y Point to Write variables
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
168 lbsr L0160 Go wait for pipe to be ready for us
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
169 bcs L015C Error, shut off our side & signal other end of pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
170 ldd R$Y,u Get requested size to Write
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
171 beq L015C None, shut off our side & signal other end of pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
172 ldx R$X,u Get ptr to data to write
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
173 addd R$X,u Calculate end of data ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
174 pshs b,a
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
175 pshs x Preserve start ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
176 bra L0131 Start writing
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
177 L0124 pshs x Preserve current buffer ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
178 leax PD.WPID,y Point to Write vars
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
179 lbsr L018B Go wait for data to be ready
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
180 bcc L0131 Ready, go try writing again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
181 puls x No more data, restore buffer ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
182 bra L0150 Go write out as much as we got
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
183
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
184 L0131 ldx <D.Proc Get process dsc. ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
185 ldb P$Task,x Get task #
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
186 puls x Get start ptr back
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
187 L0137 os9 F$LDABX Get byte from caller
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
188 lbsr L01CC
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
189 bcs L0124
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
190 leax 1,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
191 tst <PD.WEOR,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
192 beq L014B
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
193 cmpa <PD.WEOR,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
194 beq L0150
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
195 L014B cmpx ,s Hit end of buffer?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
196 bcs L0137 No, keep writing
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
197 clrb Yes, no error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
198 L0150 pshs b,cc Preserve error status
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
199 tfr x,d Move buffer ptr to D
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
200 subd 2,s Calculate size actually written
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
201 addd R$Y,u Add to size previously written
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
202 std R$Y,u Save for caller
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
203 puls x,b,cc Restore error status
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
204 L015C leax PD.WPID,y Point to Write vars
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
205 bra L01BD Shut off Write part, send signal to Read part
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
206
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
207 * Make current process the process to Read or Write from Pipe, or wait in line
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
208 * until pipe is ready to for our process
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
209 * Entry: Y=Path dsc. ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
210 * X=Ptr to either Pipe Read or Pipe Write variables
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
211 L0160 lda ,x Get process # that is reading or writing to pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
212 beq L0185 If none, make the current process the one
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
213 cmpa PD.CPR,y Same as current process using this path?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
214 beq L0189 Yes, no error & exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
215 * A read or write request from the pipe was made from a process that is not
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
216 * listed in the PD.??? pipe vars
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
217 inc 1,x New process using pipe, update # processes using
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
218 ldb 1,x Get new # of process reading or writing
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
219 cmpb PD.CNT,y Same as total # of processes using pipe?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
220 bne L0173 No, skip ahead
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
221 lbsr L009C Yes, send signal from 2,x to process using pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
222 * New process is put in line to read/write to/from pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
223 L0173 os9 F$IOQu Stick waiting process (A) into I/O Queue
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
224 dec 1,x Dec # images in pipe down again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
225 pshs x Preserve ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
226 ldx <D.Proc Get current process dsc. ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
227 ldb <P$Signal,x Get last signal code from current process
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
228 puls x Get ptr back
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
229 beq L0160 If it didn't receive the signal, try again
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
230 coma Set carry & exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
231 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
232
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
233 L0185 ldb PD.CPR,y Get Current process #
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
234 stb ,x Save as process # that is reading/writing to pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
235 L0189 clrb No error & exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
236 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
237
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
238 L018B ldb 1,x Get # images [reading or writing] from pipe?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
239 incb Base 1
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
240 cmpb PD.CNT,y Same as # of open images?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
241 beq L01B9 Yes, Exit with Write Error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
242 stb 1,x Save updated # images
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
243 ldb #$01 Wakeup signal
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
244 stb 2,x Save as signal to send to process
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
245 clr PD.CPR,y Clear out current process # using pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
246 pshs x Preserve read/write offset ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
247 tfr x,d Move to D
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
248 eorb #$04 Flip between read/write vars
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
249 tfr d,x Move to X
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
250 lbsr L009C Go send signal to process on other end of pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
251 ldx #$0000 Shut off process until signal received
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
252 os9 F$Sleep
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
253 ldx <D.Proc Get current process
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
254 ldb <P$Signal,x Get last signal code received
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
255 puls x Restore read/write offset ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
256 dec 1,x Dec # open images
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
257 tstb Was there a signal receieved?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
258 bne L01BB Yes, exit with carry set
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
259 clrb No error & exit
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
260 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
261 L01B9 ldb #E$Write Write error
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
262 L01BB coma
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
263 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
264 * Shut off Read part, send signal to Write part
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
265 * Shut down our side of pipe & send signal to other half of pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
266 L01BD pshs u,b,cc Preserve U, error code & status
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
267 clr ,x Clear out process # using part of pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
268 tfr x,d Move ptr to D
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
269 eorb #$04 Flip between read/write vars
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
270 tfr d,x Move to X
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
271 lbsr L009C Send Signal to process on other end of pipe
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
272 puls pc,u,b,cc Restore error status & return
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
273
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
274 * Entry: X=Ptr within caller's area we are writing from
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
275 * A=Char to write
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
276 * B=Task # of caller
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
277 L01CC pshs x,b Preserve ptr & Task #
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
278 ldx <PD.NxtI,y Get ptr to next char in pipe buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
279 ldb <PD.RFlg,y Get data ready in pipe buffer flag
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
280 beq L01DE No data ready, skip ahead
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
281 cmpx <PD.NxtO,y Meeting write buffer ptr?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
282 bne L01E3 No, continue
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
283 comb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
284 puls pc,x,b
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
285 * Put char into pipe buffer & Set flag that data is ready
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
286 * Entry: Y=Path dsc. ptr
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
287 * A=Char to put in buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
288 L01DE ldb #1 Set flag
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
289 stb <PD.RFlg,y Save it
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
290 L01E3 sta ,x+ Save char in pipe buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
291 cmpx <PD.End,y Hit end of buffer?
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
292 bcs L01EC No, continue
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
293 ldx PD.BUF,y Yes, wrap to beginning
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
294 L01EC stx <PD.NxtI,y Save current position in buffer
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
295 clrb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
296 puls pc,x,b Restore regs
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
297 L01F2 lda <Pd.RFlg,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
298 bne L01F9
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
299 comb
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
300 rts
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
301 L01F9 pshs x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
302 ldx <PD.NxtO,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
303 lda ,x+
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
304 cmpx <PD.END,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
305 bcs L0207
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
306 ldx PD.BUF,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
307 L0207 stx <PD.NxtO,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
308 cmpx <PD.NxtI,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
309 bne L0212
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
310 clr <Pd.RFlg,y
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
311 L0212 andcc #^Carry
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
312 puls pc,x
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
313
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
314 emod
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
315 eom equ *
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
316 end
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
317
6641a883d6b0 Initial revision
boisy
parents:
diff changeset
318