1: / 2: / 3: ed: 4: mov (sp)+,r3 5: ble error 6: econ: 7: sys stat; ftemp; buffer 8: bec 2f 9: sys creat; ftemp; 666 10: mov r0,tmpw 11: sys open; ftemp; 0 12: mov r0,tmpr 13: br 1f 14: 2: 15: cmpb $'z,ftemp+9. 16: bne 2f 17: mov $1,r0 18: sys write; erm; 23. 19: jmp loop 20: 2: 21: incb ftemp+9. 22: br econ 23: 1: 24: mov (sp),r0 25: jsr pc,getspq 26: bes 3f 27: mov r0,r4 28: mov r2,r1 29: jsr pc,rewind 30: mov $buffer,r2 31: 1: 32: jsr pc,getchar 33: bes 1f 34: movb r0,(r2)+ 35: br 1b 36: 1: 37: movb $'\n,(r2)+ 38: jsr pc,output 39: mov r4,r1 40: jsr pc,rewind 41: 2: 42: mov $buffer,r2 43: 1: 44: jsr pc,getchar 45: bes 1f 46: movb r0,(r2)+ 47: cmp r2,$bufend 48: blo 1b 49: mov tmpw,r0 50: sys write; buffer; 512. 51: br 2b 52: 1: 53: sub $buffer,r2 54: beq 4f 55: mov r2,0f 56: mov tmpw,r0 57: sys write; buffer; 0:.. 58: 4: 59: tst iflag 60: beq 1f 61: mov tmpw,r0 62: sys close 63: mov tmpr,r0 64: sys close 65: sys unlink; ftemp 66: jmp loop 67: 1: 68: mov tmpw,r0 69: sys close 70: sys fork 71: br 5f 72: mov r1,-(sp) 73: sys wait 74: sys signal; 2; inter 75: mov (sp)+,r1 76: mov a(r1),w(r1) 77: 2: 78: mov tmpr,r0 79: sys read; buffer; 512. 80: tst r0 81: beq 2f 82: add $buffer,r0 83: mov r0,bufend 84: mov $buffer,r2 85: 1: 86: movb (r2)+,r0 87: jsr pc,putchar 88: cmp r2,bufend 89: blo 1b 90: br 2b 91: 2: 92: mov tmpr,r0 93: sys close 94: sys unlink; ftemp 95: tst iflag 96: beq 1f 97: jmp loop 98: 1: 99: tst qflag 100: bgt 1f 101: tst (sp)+ 102: dec r3 103: bgt 1f 104: jmp loop 105: 1: jmp econ 106: jmp loop 107: 3: 108: mov (sp),r2 109: mov $2,r0 110: jsr pc,allocate 111: 1: 112: tstb (r2) 113: beq 1f 114: movb (r2)+,r0 115: jsr pc,putchar 116: br 1b 117: 1: 118: mov r1,r0 119: mov asmem,r1 120: jsr pc,putword 121: mov $2,r0 122: jsr pc,allocate 123: mov r1,r0 124: mov asmem,r1 125: jsr pc,putword 126: mov r0,r1 127: br 4b 128: 5: 129: mov $2,r0 130: 1: 131: sys close 132: inc r0 133: cmp r0,$10. 134: blo 1b 135: sys exec; edd; eda 136: sys exit 137: eda: edd; ftemp; 0 138: edd: </bin/ed\0> 139: .even 140: ftemp: </tmp/ftmpa\0> 141: erm: <Cannot open temp. file\n> 142: .even 143: tmpw: .=.+2 144: tmpr: .=.+2 145: / 146: / remove a 'file' from memory 147: / 148: remove: 149: mov (sp)+,r3 150: bgt 5f 151: mov $1,vflag 152: mov asmem,r1 153: jsr pc,rewind 154: mov r(r1),-(sp) 155: 4: 156: tst iflag 157: beq 1f 158: jmp loop 159: 1: 160: jsr pc,getword 161: bes 4f 162: mov r0,r2 163: jsr pc,ask 164: bec 1f 165: mov r(r1),(sp) 166: br 4b 167: 1: 168: jsr pc,getword 169: br 2f 170: 5: 171: mov (sp),r0 172: jsr pc,getspq 173: bec 2f 174: tst qflag 175: blt 6f 176: mov (sp),r1 177: jsr pc,nothere 178: br 3f 179: 2: 180: mov r0,r1 181: jsr pc,release 182: mov r2,r1 183: jsr pc,release 184: jsr pc,rm 185: 3: 186: tst vflag 187: bne 3f 188: tst iflag 189: beq 1f 190: jmp loop 191: 1: 192: tst qflag 193: bgt 5b 194: 6: 195: tst (sp)+ 196: dec r3 197: bgt 5b 198: jmp loop 199: 3: 200: mov asmem,r1 201: mov (sp),r(r1) 202: br 4b 203: 4: 204: tst (sp)+ 205: jmp loop 206: / 207: / rename a 'file' 208: / 209: rename: 210: mov (sp)+,r3 211: bne 1f 212: jmp error 213: 1: 214: sub $2,r3 215: blt 1f 216: 5: 217: mov (sp),r0 218: jsr pc,getsp 219: bes 4f 220: tst (sp)+ 221: sub $4,r(r1) 222: mov (sp),r0 223: mov r2,-(sp) 224: mov r(r1),-(sp) 225: jsr pc,getsp 226: bes 3f 227: mov r2,-(sp) 228: mov r0,r1 229: jsr pc,release 230: jsr pc,rm 231: mov (sp)+,r0 232: mov (sp)+,r(r1) 233: jsr pc,alterword 234: mov (sp)+,r1 235: jsr pc,release 236: br 5f 237: 3: 238: mov (sp)+,r(r1) 239: mov (sp)+,r1 240: jsr pc,release 241: mov $2,r0 242: jsr pc,allocate 243: mov (sp)+,r2 244: 2: 245: movb (r2)+,r0 246: beq 2f 247: jsr pc,putchar 248: br 2b 249: 2: 250: mov r1,r0 251: mov asmem,r1 252: jsr pc,alterword 253: 5: 254: tst iflag 255: beq 2f 256: jmp loop 257: 2: 258: tst r3 259: beq 2f 260: sub $2,r3 261: bge 5b 262: 1: 263: tst (sp)+ 264: jmp error 265: 2: 266: jmp loop 267: 4: 268: mov (sp)+,r1 269: jsr pc,nothere 270: tst (sp)+ 271: br 5b 272: / 273: / list contents of asmem 274: / 275: list: 276: mov $buffer,r2 277: movb $'\n,(r2)+ 278: jsr pc,output 279: mov (sp)+,r3 280: beq 1f 281: mov $1,vflag 282: 5: 283: tst iflag 284: beq 2f 285: jmp loop 286: 2: 287: mov (sp),r0 288: jsr pc,getspq 289: bes 4f 290: mov r2,r1 291: br 3f 292: 1: 293: mov asmem,r1 294: jsr pc,fsfile 295: sub $2,r(r1) 296: 2: 297: tst iflag 298: bne 2f 299: jsr pc,backword 300: bes 2f 301: mov r0,r1 302: 3: 303: jsr pc,getn 304: movb $'\n,(r2)+ 305: jsr pc,output 306: tst vflag 307: bne 1f 308: mov asmem,r1 309: sub $2,r(r1) 310: br 2b 311: 1: 312: tst qflag 313: bgt 5b 314: 4: 315: tst (sp)+ 316: dec r3 317: bgt 5b 318: 2: 319: mov $buffer,r2 320: movb $'\n,(r2)+ 321: jsr pc,output 322: jmp loop 323: / 324: / list a 'file 325: / 326: listf: 327: mov (sp)+,r3 328: bgt 4f 329: jmp error 330: 4: 331: mov (sp),r0 332: jsr pc,getspq 333: bes 3f 334: mov r0,r4 335: mov r2,r1 336: jsr pc,rewind 337: mov $buffer,r2 338: movb $'\n,(r2)+ 339: 1: 340: jsr pc,getchar 341: bes 1f 342: movb r0,(r2)+ 343: cmp r2,$bufend 344: blo 1b 345: jsr pc,output 346: br 1b 347: 1: 348: mov r4,r1 349: jsr pc,rewind 350: movb $':,(r2)+ 351: cmp r2,$bufend 352: blo 2f 353: jsr pc,output 354: 2: 355: movb $'\n,(r2)+ 356: 1: 357: tst iflag 358: beq 2f 359: jmp loop 360: 2: 361: cmp r2,$bufend 362: blo 2f 363: jsr pc,output 364: 2: 365: jsr pc,getchar 366: bes 1f 367: movb r0,(r2)+ 368: br 1b 369: 1: 370: jsr pc,output 371: 3: 372: tst qflag 373: bgt 4b 374: tst (sp)+ 375: dec r3 376: bgt 4b 377: mov $buffer,r2 378: movb $'\n,(r2)+ 379: jsr pc,output 380: jmp loop 381: / 382: fin: 383: jsr pc,flush 384: jsr pc,whead 385: 4 386: q: 387: jsr pc,flush 388: jsr pc,whead 389: sys exit 390: memck: mov (sp)+,r3 391: 2: 392: ble 2f 393: mov (sp)+,r1 394: cmpb (r1),$'p 395: bne 1f 396: bis $1,vflag 397: br 3f 398: 1: 399: cmpb (r1),$'f 400: bne 3f 401: bis $2,vflag 402: 3: 403: dec r3 404: br 2b 405: 2: 406: clr freeh 407: mov $freeb,r2 408: 1: 409: clr (r2)+ 410: cmp r2,$freen 411: blo 1b 412: mov $headers,r2 413: 2: 414: cmp l(r2),$hsz 415: beq 6f 416: jsr pc,ck 417: bec 1f 418: cmp r2,asmem 419: beq 1f 420: mov asmem,r1 421: jsr pc,rewind 422: clr r3 423: 4: 424: inc r3 425: jsr pc,getword 426: bes 5f 427: cmp r0,r2 428: bne 4b 429: 6: 430: inc freeh 431: 1: 432: cont: 433: add $8.,r2 434: cmp r2,$headend-4 435: blo 2b 436: mov asmem,r1 437: jsr pc,rewind 438: 4: 439: jsr pc,getword 440: bes 4f 441: tst r(r0) 442: beq 2f 443: mov r0,r2 444: jsr pc,ck 445: bes 4b 446: 2: 447: sub $hblk,r0 448: jsr r5,oct 449: mov $1,r0 450: sys write; re; 24. 451: cmp vflag,$1 452: beq 4b 453: bit $1,r3 454: beq 2f 455: jsr pc,getword 456: mov r0,r1 457: jsr pc,release 458: br 3f 459: 2: 460: jsr pc,backword 461: add $4,r(r1) 462: mov r0,r1 463: jsr pc,release 464: 3: 465: jsr pc,rm 466: clr r3 467: br 4b 468: 4: 469: mov freeh,r0 470: jsr r5,decml 471: mov $1,r0 472: sys write; frh; 14. 473: mov $freeb,r2 474: mov $1,r3 475: 6: 476: cmp r2,$freen 477: bhis 6f 478: mov (r2)+,r0 479: beq 3f 480: jsr r5,decml 481: mov $1,r0 482: sys write; frb; 18. 483: mov r3,r0 484: jsr r5,decml 485: mov $1,r0 486: sys write; lf; 1. 487: 3: 488: asl r3 489: br 6b 490: 6: 491: mov $1,r0 492: sys write; lf; 1. 493: jmp loop 494: 5: 495: mov r2,r0 496: sub $hblk,r0 497: jsr r5,oct 498: mov $1,r0 499: sys write; un; 26. 500: tst vflag 501: beq 1b 502: mov r2,r1 503: cmp vflag,$2 504: beq 3f 505: jsr pc,rewind 506: mov $buffer,r2 507: 2: 508: jsr pc,getchar 509: bes 2f 510: movb r0,(r2)+ 511: cmp r2,$buffer+80. 512: blo 2b 513: jsr pc,output 514: br 2b 515: 2: 516: movb $'\n,(r2)+ 517: jsr pc,output 518: mov r1,r2 519: cmp vflag,$1 520: bne 3f 521: jmp cont 522: 3: 523: jsr pc,release 524: jmp cont 525: / 526: interrupt: 4 527: / 528: un: < header not accounted for\n> 529: re: < part of asmem released\n> 530: lf: <\n> 531: frh: < free headers\n > 532: frb: < free blocks size > 533: endc: .even