1: / 2: / IO SUBROUTINES 3: / 4: .globl _getc,_putc 5: _pmessage: 6: mov r3,-(sp) 7: mov _file,r3 8: mov $_unit2,r0 9: jsr pc,unit 10: mov r3,_file 11: mov fchain,r3 / flush all files 12: 1: 13: tst r3 14: beq 2f 15: bit $FWRITE,FUNIT(r3) 16: beq 3f 17: mov FBUF(r3),-(sp) 18: jsr pc,_fflush 19: tst (sp)+ 20: 3: 21: mov FCHAIN(r3),r3 22: br 1b 23: 2: 24: mov $_unit1,r3 25: mov FBUF(r3),-(sp) 26: jsr pc,_fflush 27: tst (sp)+ 28: mov (sp)+,r3 29: rts pc 30: _pputch: 31: mov 2(sp),*buf 32: jsr pc,put 33: rts pc 34: / 35: / iosync insures that 36: / a useable image is in 37: / the buffer window. 38: / 39: 2: 40: mov (sp)+,r3 41: mov (sp)+,r2 42: mov (sp)+,r1 43: rts pc 44: iosync: 45: mov buf,r0 46: bit $SYNC,FUNIT(r0) / dirty bit 47: bne 1f 48: rts pc 49: 1: 50: mov r1,-(sp) 51: mov r2,-(sp) 52: mov r3,-(sp) 53: mov r0,r2 54: bic $SYNC,FUNIT(r2) 55: bit $EOF,FUNIT(r2) 56: bne pasteof 57: mov FSIZE(r2),r3 58: 1: 59: mov buf,r0 60: mov FBUF(r0),-(sp) 61: jsr pc,_getc 62: tst (sp)+ 63: tst r0 64: bmi eof 65: movb r0,(r2)+ 66: sob r3,1b 67: mov buf,r0 68: bic $EOLN,FUNIT(r0) 69: bit $FTEXT,FUNIT(r0) 70: beq 2b 71: cmpb *buf,$'\n 72: bne 2b 73: bis $EOLN,FUNIT(r0) 74: movb $' ,*buf 75: br 2b 76: eof: 77: mov buf,r0 78: bis $EOF,FUNIT(r0) 79: br 2b 80: pasteof: 81: mov $EPASTEOF,_perrno 82: error EPASTEOF 83: / 84: / get insures that 85: / something is in the window 86: / and then sets the dirty 87: / bit effectively throwing the 88: / windowed data away 89: / 90: get: 91: mov r1,-(sp) 92: mov buf,r1 93: bit $FREAD,FUNIT(r1) 94: bne 1f 95: mov $EREADIT,_perrno 96: error EREADIT 97: 1: 98: jsr pc,iosync 99: bis $SYNC,FUNIT(r1) 100: mov (sp)+,r1 101: rts pc 102: put: 103: cmp buf,$_unit2 104: beq 6f 105: mov r2,-(sp) 106: mov r3,-(sp) 107: mov buf,r2 108: bit $FWRITE,FUNIT(r2) 109: bne 1f 110: mov $EWRITEIT,_perrno 111: error EWRITEIT 112: 1: 113: mov FSIZE(r2),r3 114: 1: 115: mov buf,r0 116: mov FBUF(r0),-(sp) / the hidden buffer 117: movb (r2)+,-(sp) / the character to write 118: jsr pc,_putc 119: cmp (sp)+,(sp)+ 120: tst _errno / error occurred? 121: bne 9f 122: sob r3,1b 123: mov (sp)+,r3 124: mov (sp)+,r2 125: rts pc 126: 9: 127: mov $EWRITE,_perrno 128: error EWRITE 129: 6: 130: mov $1,-(sp) 131: mov $_unit2,-(sp) 132: mov $2,-(sp) 133: jsr pc,_write 134: add $6,sp 135: tst r0 136: bmi 9b 137: cmp r0,$1 138: bne 9b 139: rts pc 140: unit: 141: mov r0,buf 142: beq 1f 143: tst FUNIT(r0) 144: bmi 1f 145: mov PFNAME(r0),_file 146: rts pc 147: 1: 148: mov $EREFINAF,_perrno 149: error EREFINAF 150: / 151: / standard files 152: / 153: .data 154: / 155: / unit 0 for "input" 156: / 157: u0buf: .=.+518. 158: .-518. / buffer pointer 159: 0 160: 0 161: stdin 162: 0 / file name 163: FTEXT+FREAD+SYNC+0 / flags & unit number 164: 1 / size of items 165: _unit0: 166: 0 / window 167: / 168: / unit 1 for "output" 169: / 170: u1buf: 1 / file descriptor for putc 171: _draino: 172: u1cnt: .=.+516. 173: u1buf / putc buffer pointer 174: 0 175: 0 176: stdout 177: 0 178: FTEXT+FWRITE+1+EOF 179: 1 180: _unit1: 181: 0 182: / 183: / unit2 for <message> 184: / 185: 0 186: 0 187: 0 188: mesgf 189: 0 190: FTEXT+FWRITE+2 191: 1 192: _unit2: 193: 0 194: / 195: FBUF = -14. 196: FCHAIN = -12. 197: FLEV = -10. 198: PFNAME = -8. 199: FNAME = -6 200: FUNIT = -4 201: FSIZE = -2 202: nextu: '0 / next temp file 203: tnam: <tmp.x\0> 204: .even 205: .bss 206: buf: .=.+2 207: fchain: .=.+2 208: .data 209: bufopt: 1 210: stdin: <standard input\0> 211: stdout: <standard output\0> 212: mesgf: <message file\0> 213: .text 214: EOF = 400 215: EOLN = 1000 216: SYNC = 2000 217: TEMP = 4000 218: FREAD = 10000 219: FWRITE = 20000 220: FTEXT = 40000