/ / / io3 -- Fortran I/O .globl getbuf .globl chkunit .globl creatf .globl openf setio: mov r1,unit jsr r5,chkunit movb utable(r1),r0 beq 1f bpl 2f mov r1,r0 asl r0 mov btable(r0),r0 mov r0,r2 br 4f 2: cmp (r5),r0 beq 3f jsr r5,rerr; 101. / inconsistent use of unit sys exit 1: mov r1,-(sp) clr r0 dvd $10.,r0 swab r1 bis r1,r0 add $"00,r0 mov r0,filnam+4 mov (sp)+,r1 jsr r5,getbuf mov $filnam,r0 4: movb (r5),utable(r1) bit $1,(r5) bne 2f jsr r5,creatf br 3f 2: jsr r5,openf 3: tst (r5)+ asl r1 mov btable(r1),buffer rts r5 getbuf: mov $utable,r0 mov $btable,r2 1: tstb (r0)+ beq 2f tst (r2)+ br 3f 2: tst (r2)+ beq 3f mov -(r2),r0 clr (r2) mov r0,r2 br 2f 3: cmp r0,$utable+20. blo 1b mov bufp,r2 add $134.,bufp mov bufp,0f sys break; 0:.. 2: mov r1,r0 asl r0 mov r2,btable(r0) mov r2,buffer rts r5 chkunit: cmp r1,$20. blo 1f jsr r5,rerr; 100. / illegal unit number sys exit 1: rts r5 creatf: cmp unit,$6 bne 2f mov $1,r0 br 1f 2: mov r0,0f sys creat; 0:..; 666 bec 1f jsr r5,rerr; 102. / create error sys exit 1: mov r2,-(sp) mov r0,(r2)+ clr (r2)+ clr (r2)+ mov r2,-(r2) mov (sp)+,r2 rts r5 openf: cmp unit,$5 bne 2f clr r0 br 1f 2: mov r0,0f sys open; 0:..; 0 bec 1f jsr r5,rerr; 103. / open error sys exit 1: mov r2,-(sp) mov r0,(r2)+ clr (r2)+ clr (r2)+ mov (sp)+,r2 rts r5 fputc: mov r1,-(sp) mov buffer,r1 dec 2(r1) bge 1f mov r0,-(sp) jsr pc,flush1 dec 2(r1) mov (sp)+,r0 1: movb r0,*4(r1) inc 4(r1) mov (sp)+,r1 rts r5 fflush: mov r1,-(sp) mov buffer,r1 jsr pc,flush1 mov (sp)+,r1 rts r5 flush1: mov r1,r0 add $6,r0 mov r0,-(sp) mov r0,0f neg r0 add 4(r1),r0 bhis 1f mov r0,0f+2 mov (r1),r0 sys write; 0:..; .. 1: mov (sp)+,4(r1) mov $128.,2(r1) rts pc fgetc: tst nlflg bne 4f mov r1,-(sp) mov buffer,r1 dec 2(r1) bge 1f mov r1,r0 add $6,r0 mov r0,0f mov r0,4(r1) mov (r1),r0 sys read; 0:..; 128. bes 2f tst r0 bne 3f 2: jsr r5,rerr; 104. / EOF on input sys exit 3: dec r0 mov r0,2(r1) 1: clr r0 bisb *4(r1),r0 inc 4(r1) mov (sp)+,r1 tst binflg bne 1f cmp r0,$'\n bne 1f 4: mov pc,nlflg mov $' ,r0 1: rts r5 gnum: mov r1,-(sp) clr r1 1: jsr r5,fmtchr cmp r0,$' / beq 1b sub $'0,r0 cmp r0,$9. bhi 1f mpy $10.,r1 add r0,r1 br 1b 1: mov r1,r0 mov (sp)+,r1 dec formp rts r5 switch: mov (r5)+,r1 1: tst (r1) beq 1f cmp r0,(r1)+ bne 1b tst (sp)+ jmp *(r1) 1: rts r5 fmtchr: movb *formp,r0 inc formp rts r5 getitm: tst itmflg bne 1f mov r5,-(sp) jmp *(r4)+ 1: clr itmflg tst (r5)+ rts r5 / just a fake, there's no carriage control fputcc: cmp $' ,r0 bne 1f inc nspace rts r5 1: mov r0,-(sp) 1: dec nspace blt 1f mov $' ,r0 jsr r5,fputc br 1b 1: clr nspace mov (sp)+,r0 beq 1f jsr r5,fputc 1: rts r5 eorec: mov unit,r0 bitb $1,utable(r0) bne 1f clr nspace mov $'\n,r0 jsr r5,fputc eorec1: clr r0 jsr r5,fputcc / cmp unit,$6 / tty output / bne 2f jsr r5,fflush 2: rts r5 1: tst nlflg bne 1f jsr r5,fgetc br 1b 1: clr nlflg rts r5 spaces: add r1,nspace rts r5