指令の解析は容易であり、comtyp()で行う。メインルーチンから呼び出される comand()から、最初にcomtyp()が呼び出される。comand()は、comtyp()の返す値に従い、 必要な処理を行っていく。comand()は以下の通りである。
RATFORでは、
# comand.r4 -- perform formatting command subroutine comand( buf ) character buf(MAXLINE) integer comtyp, getval integer ct, spval, val integer argtyp include cpage.ri include cparam.ri ct = comtyp(buf) if (ct == UNKOWN) # igore unknown commands return val = getval(buf,argtyp) if (ct == FI) { call brk fill = YES } else if (ct == NF) { call brk fill = NOC } else if (ct == BR) call brk else if (ct == LS) call set(lsval,val,argtyp,1,1,HUGE) else if (ct == HE) call gettl(buf,header) else if (ct == FO) call gettl(buf,footer) else if (ct == SP) { call set(spval,val,argtyp,1,0,HUGE) call space(spval) } else if (ct == BP) { if (lineno > 0) call space(HUGE) call set(curpage,val,argtyp,curpage+1,-HUGE,HUGE) newpag = curpag } else if (ct == PL) { call set(plval,val,argtyp,PAGELEN,m1val+m2val+m3val+m4val+1,HUGE) bottom = plval - m3val - m4val } else if (ct == IN) { call set(inval,val,argtyp,0,0,rmval-1) tival = inval } else if (ct == RM) call set(rmval,val,argtyp,PAGEWIDTH,tival+1,HUDGE) else if (ct == TI) { call brk call set(tival,val,argtyp,0,0,rmval-1) } else if (ct == CE) { call brk call set(ceval,val,argtyp,1,0,HUGE) } else if (ct .eq. 14) then ! UL(14) call set(ulval,val,argtyp,1,0,HUGE) return end
WATCOM fortran 77では、
c comand.f -- perform formatting command subroutine comand( buf ) integer*1 buf(82) ! MAXLINE(82) integer comtyp, getval integer ct, spval, val integer*1 argtyp include cpage.fi include cparam.fi ct = comtyp(buf) if (ct .eq. 0) then ! UNKOWN(0) return end if val = getval(buf,argtyp) if (ct .eq. 4) then ! FI(4) call brk fill = 1 ! YES(1) else if (ct .eq. 9) then ! NF(9) call brk fill = 0 ! NOC(0) else if (ct .eq. 2) then ! BR(2) call brk else if (ct .eq. 8) then ! LS(8) call set(lsval,val,argtyp,1,1,1000) ! HUGE(1000) else if (ct .eq. 6) then ! HE(6) call gettl(buf,header) else if (ct .eq. 5) then ! FO(5) call gettl(buf,footer) else if (ct .eq. 12) then ! SP(12) call set(spval,val,argtyp,1,0,1000) ! HUGE(1000) call space(spval) else if (ct .eq. 1) then ! BP(1) if (lineno .gt. 0) then call space(1000) ! HUGE(1000) end if call set(curpage,val,argtyp,curpage+1,-1000,1000) ! HUGE(1000) newpag = curpag else if (ct .eq. 10) then ! PL(10) call set(plval,val,argtyp,66, ! PAGELEN(66) 1 m1val+m2val+m3val+m4val+1,1000) ! HUGE(1000) bottom = plval - m3val - m4val else if (ct .eq. 7) then ! IN(7) call set(inval,val,argtyp,0,0,rmval-1) tival = inval else if (ct .eq. 11) then ! RM(11) call set(rmval,val,argtyp,60,tival+1,1000) ! PAGEWIDTH(60) HUGE(1000) else if (ct .eq. 13) then ! TI(13) call brk call set(tival,val,argtyp,0,0,rmval-1) else if (ct .eq. 3) then ! CE(3) call brk call set(ceval,val,argtyp,1,0,1000) ! HUGE(1000) else if (ct .eq. 14) then ! UL(14) call set(ulval,val,argtyp,1,0,1000) ! HUGE(1000) end if return end
実際の指令の解析は、comtyp()が行う。
RATFOR版は、以下の通り。
※コメントの受付件数を超えているため、この記事にコメントすることができません。