| 1 | / |
| 2 | / IO operations |
| 3 | / |
| 4 | _GET: |
| 5 | jsr pc,get |
| 6 | jsr pc,iosync |
| 7 | return |
| 8 | _PUT: |
| 9 | jsr pc,put |
| 10 | return |
| 11 | _MESSAGE: |
| 12 | mov $_unit2,r0 |
| 13 | jsr pc,unit |
| 14 | mov fchain,r2 / flush all files |
| 15 | 1: |
| 16 | beq 2f |
| 17 | bit $FWRITE,FUNIT(r2) |
| 18 | beq 3f |
| 19 | mov FBUF(r2),-(sp) |
| 20 | jsr pc,_fflush |
| 21 | tst (sp)+ |
| 22 | 3: |
| 23 | mov FCHAIN(r2),r2 |
| 24 | br 1b |
| 25 | 2: |
| 26 | mov $_unit1,r2 |
| 27 | mov FBUF(r2),-(sp) |
| 28 | jsr pc,_fflush |
| 29 | tst (sp)+ |
| 30 | return |
| 31 | _FNIL: |
| 32 | mov (sp),r0 |
| 33 | mov _file,-(sp) |
| 34 | mov buf,-(sp) |
| 35 | jsr pc,unit |
| 36 | jsr pc,iosync |
| 37 | mov (sp)+,buf |
| 38 | mov (sp)+,_file |
| 39 | return |
| 40 | _BUFF: |
| 41 | mov r3,bufopt |
| 42 | return |
| 43 | _EOF: |
| 44 | mov (sp)+,r0 |
| 45 | mov _file,-(sp) |
| 46 | mov buf,-(sp) |
| 47 | mov $EOF,-(sp) |
| 48 | br 1f |
| 49 | _EOLN: |
| 50 | mov (sp)+,r0 |
| 51 | mov _file,-(sp) |
| 52 | mov buf,-(sp) |
| 53 | mov $EOF+EOLN,-(sp) |
| 54 | 1: |
| 55 | jsr pc,unit |
| 56 | cmp buf,$_unit0 |
| 57 | bne 1f |
| 58 | cmp bufopt,$1 |
| 59 | bne 1f |
| 60 | mov $u1buf,-(sp) |
| 61 | jsr pc,_fflush |
| 62 | tst (sp)+ |
| 63 | 1: |
| 64 | mov (sp)+,r1 |
| 65 | clr -(sp) |
| 66 | mov buf,r2 |
| 67 | bit $EOF,FUNIT(r2) |
| 68 | bne 2f |
| 69 | jsr pc,iosync |
| 70 | bit r1,FUNIT(r2) |
| 71 | beq 1f |
| 72 | 2: |
| 73 | mov $1,(sp) |
| 74 | 1: |
| 75 | mov (sp)+,r0 |
| 76 | mov (sp)+,buf |
| 77 | mov (sp)+,_file |
| 78 | mov r0,-(sp) |
| 79 | return |
| 80 | _RESET: |
| 81 | bne 1f / branch if name given |
| 82 | cmp *(sp),$_unit0 |
| 83 | bne 1f |
| 84 | tst _unit0+FNAME |
| 85 | bne 1f |
| 86 | clr r0 |
| 87 | sys seek; 0; 0 |
| 88 | bes 9f |
| 89 | tst (sp)+ |
| 90 | tst (lc)+ |
| 91 | bic $EOF+EOLN,_unit0+FUNIT |
| 92 | bis $SYNC,_unit0+FUNIT |
| 93 | return |
| 94 | 9: |
| 95 | mov $stdin,_file |
| 96 | mov r0,_errno |
| 97 | mov $ESEEK,_perrno |
| 98 | error ESEEK |
| 99 | 1: |
| 100 | jsr pc,getname |
| 101 | mov r0,r1 |
| 102 | mov PFNAME(r1),_file |
| 103 | mov FNAME(r1),openrnm |
| 104 | sys indir; openr |
| 105 | bes eopen |
| 106 | mov r0,*FBUF(r1) |
| 107 | bis $SYNC|FREAD,r0 |
| 108 | bis r0,FUNIT(r1) |
| 109 | return |
| 110 | ecreat: |
| 111 | mov r0,_errno |
| 112 | mov $ECREATE,_perrno |
| 113 | error ECREATE |
| 114 | eopen: |
| 115 | mov r0,_errno |
| 116 | mov $EOPEN,_perrno |
| 117 | error EOPEN |
| 118 | .data |
| 119 | openr: sys open; openrnm: .. ; 0 |
| 120 | creit: sys creat; crenm: ..; 0644 |
| 121 | openw: sys open; openwnm: .. ; 1 |
| 122 | .text |
| 123 | _REWRITE: |
| 124 | jsr pc,getname |
| 125 | mov r0,r1 |
| 126 | mov PFNAME(r1),_file |
| 127 | mov FNAME(r1),crenm |
| 128 | sys indir; creit |
| 129 | bes ecreat |
| 130 | sys close |
| 131 | mov FNAME(r1),openwnm |
| 132 | sys indir; openw |
| 133 | bes eopen |
| 134 | mov r0,*FBUF(r1) |
| 135 | bis $EOF|FWRITE,r0 |
| 136 | bis r0,FUNIT(r1) |
| 137 | return |
| 138 | _REMOVE: |
| 139 | bne 1f |
| 140 | mov (lc)+,r3 |
| 141 | 1: |
| 142 | mov sp,r1 |
| 143 | mov r3,r2 |
| 144 | inc r2 |
| 145 | bic $1,r2 |
| 146 | add r2,sp |
| 147 | add r3,r1 |
| 148 | mov r1,r0 |
| 149 | movb (r1),r2 |
| 150 | clrb (r1) |
| 151 | 1: |
| 152 | cmpb -1(r1),$' |
| 153 | bne 1f |
| 154 | clrb -(r1) |
| 155 | dec r3 |
| 156 | bne 1b |
| 157 | 1: |
| 158 | sub r3,r1 |
| 159 | mov r1,1f |
| 160 | mov r1,_file |
| 161 | sys indir; 0f |
| 162 | bes 9f |
| 163 | movb r2,(r0) |
| 164 | return |
| 165 | .data |
| 166 | 0: sys unlink; 1: .. |
| 167 | .text |
| 168 | 9: |
| 169 | mov _file,sp |
| 170 | mov r0,_errno |
| 171 | mov $EREMOVE,_perrno |
| 172 | error EREMOVE |
| 173 | _UNITINP: |
| 174 | cmp bufopt,$2 |
| 175 | bge 1f / bufopt >= 2, don't flush on read |
| 176 | cmp $512.,u1cnt |
| 177 | beq 1f |
| 178 | mov $u1buf,-(sp) |
| 179 | jsr pc,_fflush |
| 180 | tst (sp)+ |
| 181 | 1: |
| 182 | mov $_unit0,buf |
| 183 | mov $stdin,_file |
| 184 | return |
| 185 | _UNITOUT: |
| 186 | mov $_unit1,buf |
| 187 | mov $stdout,_file |
| 188 | return |
| 189 | _UNIT: |
| 190 | mov (sp)+,r0 |
| 191 | cmp r0,$_unit0 |
| 192 | beq _UNITINP |
| 193 | jsr pc,unit |
| 194 | return |
| 195 | _READ8: |
| 196 | sub $32.,sp |
| 197 | mov sp,-(sp) |
| 198 | mov $32.,-(sp) |
| 199 | mov $1,-(sp) |
| 200 | jsr pc,_preadn |
| 201 | bcs 1f |
| 202 | add $6,sp |
| 203 | mov sp,-(sp) |
| 204 | jsr pc,_atof |
| 205 | add $34.,sp |
| 206 | movf fr0,-(sp) |
| 207 | return |
| 208 | 1: |
| 209 | add $38.,sp |
| 210 | clrf -(sp) |
| 211 | return |
| 212 | _READ4: |
| 213 | sub $20.,sp |
| 214 | mov sp,-(sp) |
| 215 | mov $20.,-(sp) |
| 216 | clr -(sp) |
| 217 | jsr pc,_preadn |
| 218 | bcs 1f |
| 219 | add $6.,sp |
| 220 | mov sp,-(sp) |
| 221 | jsr pc,_atol |
| 222 | add $22.,sp |
| 223 | mov r1,-(sp) |
| 224 | mov r0,-(sp) |
| 225 | return |
| 226 | 1: |
| 227 | add $26.,sp |
| 228 | clr -(sp) |
| 229 | sxt -(sp) |
| 230 | return |
| 231 | _READC: |
| 232 | jsr pc,iosync |
| 233 | clr -(sp) |
| 234 | movb *buf,(sp) |
| 235 | jsr pc,get |
| 236 | return |
| 237 | _READLN: |
| 238 | jsr pc,iosync |
| 239 | mov buf,r0 |
| 240 | bit $EOLN+EOF,FUNIT(r0) |
| 241 | bne 1f |
| 242 | jsr pc,get |
| 243 | br _READLN |
| 244 | 1: |
| 245 | jsr pc,get |
| 246 | return |
| 247 | _PAGE: |
| 248 | mov $14,-(sp) |
| 249 | br 1f |
| 250 | _WRITC: |
| 251 | beq 1f |
| 252 | mov $323,r0 |
| 253 | br pwriteit |
| 254 | 1: |
| 255 | movb (sp)+,*buf |
| 256 | jsr pc,put |
| 257 | tst bufopt |
| 258 | beq 2f |
| 259 | return |
| 260 | _WRITLN: |
| 261 | mov $327,r0 |
| 262 | mov $'\n,-(sp) |
| 263 | mov $1,r2 |
| 264 | cmp buf,$_unit1 |
| 265 | bne 1f |
| 266 | cmp bufopt,$1 |
| 267 | bgt 1f |
| 268 | clr r2 |
| 269 | br 1f |
| 270 | _WRITG: |
| 271 | mov $325,r0 |
| 272 | mov (lc)+,-(sp) |
| 273 | br pwriteit |
| 274 | _WRHEX2: |
| 275 | mov $267,r0 |
| 276 | br 3f |
| 277 | _WRHEX4: |
| 278 | mov $277,r0 |
| 279 | br 3f |
| 280 | _WROCT2: |
| 281 | mov $330,r0 |
| 282 | br 3f |
| 283 | _WROCT4: |
| 284 | mov $331,r0 |
| 285 | br 3f |
| 286 | _WRIT2: |
| 287 | mov $320,r0 |
| 288 | br 3f |
| 289 | _WRIT4: |
| 290 | mov $321,r0 |
| 291 | br 3f |
| 292 | _WRIT8: |
| 293 | mov $324,r0 |
| 294 | br 3f |
| 295 | _WRITB: |
| 296 | mov $322,r0 |
| 297 | br 3f |
| 298 | _WRIT82: |
| 299 | mov $326,r0 |
| 300 | 3: |
| 301 | pwriteit: |
| 302 | mov bufopt,r2 |
| 303 | 1: |
| 304 | mov r3,-(sp) |
| 305 | mov r0,-(sp) |
| 306 | jsr pc,_pwrite |
| 307 | mov r0,sp |
| 308 | tst r2 |
| 309 | bne 1f |
| 310 | 2: |
| 311 | cmp buf,$_unit1 |
| 312 | bne 1f |
| 313 | mov buf,r0 |
| 314 | mov FBUF(r0),-(sp) |
| 315 | jsr pc,_fflush |
| 316 | tst (sp)+ |
| 317 | 1: |
| 318 | return |
| 319 | _DEFNAME: |
| 320 | jsr pc,getname |
| 321 | bis $100000,FUNIT(r0) |
| 322 | return |
| 323 | _FLUSH: |
| 324 | mov (sp)+,r0 |
| 325 | jsr pc,unit |
| 326 | mov buf,r0 |
| 327 | bit $FWRITE,FUNIT(r0) |
| 328 | beq 1f |
| 329 | mov FBUF(r0),-(sp) |
| 330 | jsr pc,_fflush |
| 331 | tst (sp)+ |
| 332 | 1: |
| 333 | return |