/ / / io2 -- format cracker .globl iowf .globl iowp .globl iorf iowp: mov (sp)+,formp mov $6,r1 br 1f iowf: mov (sp)+,formp tst (sp)+ mov (sp)+,r1 1: jsr r5,setio; 2 / write clr rdflg br 1f iorf: mov (sp)+,formp tst (sp)+ mov (sp)+,r1 jsr r5,setio; 1 / read mov pc,rdflg 1: clr binflg clr slcnt clr itmfnd clr scale clr itmflg mov $pbuf,ppar mov $-1,llpcnt jsr r5,fmtchr mov formp,llp cmp r0,$'( beq crack jsr r5,rerr; 106. sys exit crack: clr ngflg mov $1,rep item: jsr r5,fmtchr cmp $' ,r0 beq item cmp $'\t,r0 beq item jsr r5,switch; mswitch jsr r5,rerr; 105. sys exit mswitch: 'a; afmt 'f; ffmt 'e; efmt 'g; gfmt 'd; dfmt 'i; ifmt 'l; lfmt 'h; hfmt 'x; xfmt 'p; scal '-; minus '0; numb '1; numb '2; numb '3; numb '4; numb '5; numb '6; numb '7; numb '8; numb '9; numb ',; crack '/; slash '(; lpar '); rpar '"; quote ' ; item 0; 0 minus: jsr r5,gnum neg r0 br 1f numb: dec formp jsr r5,gnum 1: mov r0,rep br item scal: mov rep,scale br crack elist: tst _nocr beq 1f tst rdflg bne 1f jsr r5,eorec1 br 2f 1: jsr r5,eorec 2: jmp *(r4)+ slash: jsr r5,eorec br crack rpar: mov ppar,r0 cmp r0,$pbuf / see if outer parens blos 2f dec -2(r0) ble 1f / no repeats left mov -4(r0),formp / reset scan br crack 1: sub $4,ppar br crack / pop parens 2: jsr r5,getitm br elist tst itmfnd bne 1f jsr r5,rerr; 107. sys exit 1: jsr r5,eorec inc itmflg mov llpcnt,r1 bpl 1f mov llp,formp jmp crack 1: mov llp,r2 mov r2,formp mov ppar,r0 mov r2,(r0)+ mov r1,(r0)+ mov r0,ppar jbr crack1 lpar: mov ppar,r0 cmp r0,$pbuf+10 blo 1f jsr r5,rerr; 108. sys exit 1: mov formp,(r0)+ mov rep,(r0)+ mov r0,ppar cmp r0,$pbuf+4 bhi 1f mov formp,llp mov rep,llpcnt 1: jmp crack quote: inc ngflg mov $44,-(sp) br 3f hfmt: inc ngflg mov $40,-(sp) br 3f xfmt: inc ngflg mov $34,-(sp) br 3f afmt: mov $30,-(sp) br 1f ifmt: clr -(sp) br 1f lfmt: mov $4,-(sp) 1: jsr r5,gnum mov r0,width br 2f ffmt: mov $10,-(sp) br 1f dfmt: mov $14,-(sp) br 1f gfmt: mov $20,-(sp) br 1f efmt: mov $24,-(sp) 1: jsr r5,gnum mov r0,width 4: jsr r5,fmtchr cmp r0,$' / beq 4b cmp r0,$'. bne err1 jsr r5,gnum mov r0,ndig 2: inc itmfnd 3: add $cvsw,(sp) tst rdflg beq 1f add $2,(sp) 1: mov *(sp)+,-(sp) 1: tst ngflg bne 2f jsr r5,getitm br 1f 2: clr gflg jsr r5,*(sp) dec rep bgt 1b tst (sp)+ br crack1 1: tst (sp)+ jmp elist cvsw: iocv; iicv / 0 locv; licv / 4 focv; ficv / 10 docv; dicv / 14 gocv; gicv / 20 eocv; eicv / 24 aocv; aicv / 30 xocv; xicv / 34 hocv; hicv / 40 qocv; qicv / 44 crack1: jmp crack err1: jsr r5,rerr; 109. sys exit