1: rti = 2 2: .globl rm 3: .globl ck 4: .globl loop 5: .globl oct 6: .globl argc 7: .globl arg 8: .globl tfiget 9: .globl asmem 10: .globl qflag 11: .globl vflag 12: .globl getspq 13: .globl q 14: .globl ask 15: .globl getword 16: .globl r 17: .globl w 18: .globl output 19: .globl buffer 20: .globl bufend 21: .globl fv 22: .globl getsp 23: .globl release 24: .globl nothere 25: .globl getn 26: .globl getchar 27: .globl rewind 28: .globl iflag 29: .globl inter 30: / output buffer 31: / r2 = last char in buffer + 1 32: / r2 returned at beginning of buffer 33: / 34: output: 35: sub $buffer,r2 36: blos 1f 37: mov r2,0f 38: mov $1,r0 39: sys write; buffer; 0:.. 40: mov $buffer,r2 41: 1: 42: rts pc 43: / 44: / 45: / routine to find the string pointed to by r0 46: / in either memory or curly 47: / r1 = where to look 48: / 49: / returns error set if string not there 50: / returns r1 = header of string if there 51: getsp: 52: mov r0,-(sp) 53: mov asmem,r1 54: jsr pc,rewind /memory 55: 3: 56: jsr pc,getword 57: bes 1f 58: mov r0,r1 59: jsr pc,rewind 60: mov (sp),r2 61: 2: 62: jsr pc,getchar 63: bes 2f 64: tstb (r2) 65: beq 4f 66: cmpb r0,(r2)+ 67: beq 2b 68: 4: 69: mov asmem,r1 70: add $2,r(r1) 71: br 3b 72: 2: 73: tstb (r2) 74: bne 4b 75: mov r1,r2 76: mov asmem,r1 77: jsr pc,getword 78: tst (sp)+ 79: rts pc 80: 1: 81: mov (sp)+,r0 82: sec 83: rts pc 84: / 85: / finds header of string with name same as that pointed to by r0 86: / taking into account ? and * 87: getspq: 88: mov r0,-(sp) 89: mov asmem,r1 90: tst qflag 91: bgt 1f 92: jsr pc,rewind 93: 1: 94: jsr pc,getword 95: bes 1f 96: mov r0,r1 97: jsr pc,rewind 98: mov (sp),r2 99: 2: 100: cmpb (r2),$'* 101: bne 3f 102: clr strflg 103: mov $2,qflag 104: inc r2 105: tstb (r2) 106: beq 6f 107: mov r2,ch 108: 3: 109: jsr pc,getchar 110: bes 2f 111: tstb (r2) 112: bne 3f 113: cmp $2,qflag 114: bne 4f 115: mov ch,r2 116: 3: 117: cmpb (r2),$'? 118: bne 3f 119: inc r2 120: tst qflag 121: bne 2b 122: mov $1,qflag 123: br 2b 124: 3: 125: cmpb r0,(r2)+ 126: bne 5f 127: inc strflg 128: br 2b 129: 5: 130: cmp $2,qflag 131: bne 4f 132: tst strflg 133: bne 4f 134: dec r2 135: br 2b 136: 4: 137: mov asmem,r1 138: add $2,r(r1) 139: br 1b 140: 2: 141: tstb (r2) 142: bne 4b 143: 6: 144: mov r1,r2 145: mov asmem,r1 146: jsr pc,getword 147: tst (sp)+ 148: rts pc 149: 1: 150: mov $-1.,qflag 151: mov (sp)+,r0 152: sec 153: rts pc 154: / 155: / tfiget 156: / jsr r5,tfiget 157: / 158: tfiget: 159: clr r0 160: sys read; ch; 1 161: bes 1f 162: tst iflag 163: beq 9f; jmp loop; 9: 164: tst r0 165: beq 1f 166: movb ch,r0 167: rts pc 168: 1: jmp q 169: / 170: / routine to print file name and error message 171: / r2 = next free byte in buffer 172: / 173: nothere: 174: mov $buffer,r2 175: 1: 176: tstb (r1) 177: beq 1f 178: movb (r1)+,(r2)+ 179: br 1b 180: 1: 181: sub $buffer,r2 182: mov r2,0f 183: mov $1,r0 184: sys write; buffer; 0:.. 185: mov $1,r0 186: sys write; err4; 16. 187: rts pc 188: / 189: / 190: / routine to put characters from string in buffer 191: / r1 = header of string 192: / on return r2 = next free byte in buffer 193: / 194: getn: 195: mov $buffer,r2 196: jsr pc,rewind 197: 1: 198: jsr pc,getchar 199: bes 1f 200: movb r0,(r2)+ 201: cmp r2,$bufend 202: bhis 1f 203: br 1b 204: 1: rts pc 205: / 206: ask: 207: mov r2,-(sp) 208: mov r0,r1 209: jsr pc,getn 210: movb $' ,(r2)+ 211: jsr pc,output 212: jsr pc,tfiget 213: cmpb $'\n,r0 214: bne 1f 215: 2: 216: mov asmem,r1 217: add $2,r(r1) 218: mov (sp)+,r2 219: sec 220: rts pc 221: 1: 222: cmpb r0,$'y 223: beq 4f 224: cmpb r0,$'q 225: beq 3f 226: 1: 227: tst iflag 228: bne 2b 229: jsr pc,tfiget 230: cmpb $'\n,r0 231: bne 1b 232: br 2b 233: 4: 234: tst iflag 235: bne 2b 236: jsr pc,tfiget 237: cmpb $'\n,r0 238: bne 1b 239: mov asmem,r1 240: mov (sp)+,r2 241: clc 242: rts pc 243: 3: 244: tst iflag 245: bne 2b 246: jsr pc,tfiget 247: cmpb $'\n,r0 248: bne 1b 249: mov (sp)+,r2 250: jmp loop 251: inter: 252: inc iflag 253: rti 254: / to remove an entry from asmem - r points to name ptr 255: / 256: rm: 257: mov r3,-(sp) 258: mov asmem,r1 259: mov r(r1),r3 260: sub $4,r(r1) 261: mov r(r1),r2 262: mov r2,-(sp) 263: 1: 264: mov r3,r(r1) 265: jsr pc,getword 266: bes 1f 267: mov r(r1),r3 268: mov r2,r(r1) 269: jsr pc,alterword 270: mov r(r1),r2 271: br 1b 272: 1: 273: mov r2,w(r1) 274: mov (sp)+,r(r1) 275: mov (sp)+,r3 276: rts pc 277: / 278: / check that header pointed to by r2 released 279: / 280: ck: 281: mov r2,-(sp) 282: mov l(r2),r0 283: sub a(r2),r0 284: sub $hblk,r2 285: jsr pc,log2 286: asl r0 287: mov r0,ch 288: mov frlist(r0),r0 289: 1: 290: beq 1f 291: cmp r2,r0 292: beq 2f 293: add $hblk,r0 294: mov (r0),r0 295: br 1b 296: 2: 297: mov ch,r0 298: inc freeb(r0) 299: mov (sp)+,r2 300: rts pc 301: 1: 302: mov (sp)+,r2 303: sec 304: rts pc 305: oct: 306: mov r1,-(sp) 307: mov r0,r1 308: clr r0 309: div $8.,r0 310: mov r1,-(sp) 311: add $'0,(sp) 312: tst r0 313: beq 1f 314: jsr r5,oct 315: 1: 316: movb (sp)+,ch 317: mov $1,r0 318: sys write; ch; 1 319: mov (sp)+,r1 320: rts r5 321: 322: decml: 323: mov r1,-(sp) 324: mov r0,r1 325: clr r0 326: div $10.,r0 327: mov r1,-(sp) 328: add $'0,(sp) 329: tst r0 330: beq 1f 331: jsr r5,decml 332: 1: 333: movb (sp)+,ch 334: mov $1,r0 335: sys write; ch; 1 336: mov (sp)+,r1 337: rts r5 338: / 339: / 340: iflag: 0 341: qflag: 0 342: vflag: 0 343: .data 344: err4: < not in memory.\n> 345: err1: <Cannot open file > 346: end1: .even 347: .bss 348: freeh: .=.+2 349: freeb: .=.+32. 350: freen: 351: ch: .=.+2 352: strflg: .=.+2 353: buffer: .=.+512. 354: bufend: .=.+2 355: argc = buffer + 20. 356: arg = buffer + 256. 357: fv: .=.+2 358: .text