// com.sr // Carol Hankins // April 8, 1976 get "ALTOFILESYS.D" get "bravo1.df" get "com.df" get "rn1.df" get "char.df" get "select.df" get "display.df" get "font.df" get "DOC.df" get "OM.df" // incoming procedures external [ MyFrame updatedisplay updateunderline underline select move getvp GetSi activateomseq deactivateomseq SetRegionW SetRegionA SetRegionSys bravochar updatefdd setupdate invalidatewindow updatewindow inserttx MakeCurrentBuf tsmode selectwholedoc stcopy stappend stnum endofkeystream ugt finddl mpDlDld MapRi backdylines BufToRi CreateSbEff CreateSbAl CbpDirty; flushvm; MoveWwSys; ] // incoming statics external [ vcinorepeat vvpampchci vrldsys vrlwsys cominstream selmain selarg selaux vframe tscorrect tstoflush vfddfaulted mpWwWwd macww vdcborig vdcbblack dcb vrgridpast2 vcridpast2 mpfunfd rgmaccp rgpctb rgyfirst vfcpFDisplSys vcp vfddfirst tsread mpmnom vfRemove ] // outgoing procedures external [ CommandProcessor confirm blinkscreen; extend buffer AbNoRepUndo SetVab ] // outgoing statics external [ vdcb vdcblink doctxtemp vesccom chcom comno; vmeasurestatus; quitchar; doctxcurrent; vundocom vab frameCom labelFaultStor vcRiW ] // local statics static [ vdcb vdcblink doctxtemp vesccom chcom comno; vmeasurestatus; quitchar; doctxcurrent; vundocom vab frameCom labelFaultStor vcRiW // count of available ris in vrlwsys ] let CommandProcessor() be [ let ci, cs, tch, ab = nil, nil, nil, nil let cd = vec lcdmax let cdlast = vec lcdmax let cf = vec lcfmax cf >> CF.chcom = 0 let mpchci = vec chmax let wwdsys = mpWwWwd!0 comno = 16 chcom = 256 frameCom = MyFrame() while true do [ if CbpDirty() gr 4 then flushvm(); underline(uloff, selarg) underline(ulmode1, selmain) updateunderline() labelFaultStor = lfaultStor SetRegionSys(risyscom, nriready) SetRegionSys(risysstate, nrisel) goto lskipKludge lfaultStor: unless tsread then until endofkeystream() do bravochar() blinkscreen() vdcb>>DCB.next= vdcblink SetRegionSys(risyspast, riFaultStor) SetRegionSys(risyscom, 229) SetRegionSys(risysstate, 230) lskipKludge: // **** replaced by ValidateDisplay // update any empty windows // for iww= 0 to macww-1 do // [ // if (mpWwWwd!iww)>>WWD.dlLast eq // (mpWwWwd!iww)>>WWD.dlFirst - 1 then // [ deactivateomseq("", 0); updatewindow(iww)] // ] // waitthings() // **** let tcrefOmReplay = (mpmnom ! ($Y-$A))>>OM.cref; test tsread ifso [ if (tcrefOmReplay eq 0) then activateomseq("Y",0,0) ] ifnot [ if (tcrefOmReplay gr 0) then deactivateomseq("Y","Y"); ] unless vfcpFDisplSys do wwdsys>>WWD.cpFDispl= 0 setupdate(wwsys) updatedisplay() vesccom = false vundocom = false tscorrect = false move(cd, cdlast, lcdmax) for i = 0 to lcdmax do cd!i = 0 mpchci = getvp(vvpampchci) [ tsmode() select(selmain, 0) cf>>CF.sel = selmain cf>>CF.selarg = selarg tstoflush = 0 tch = bravochar() // if tch eq #36 then // [ let tyd = YdFind(selmain >> SEL.ww, selmain >> SEL.cpfirst) // finddl(selmain >> SEL.ww, selmain >> SEL.cpfirst) // if tyd ne -1 then // [ @xbugloc = #30 // @ybugloc = tyd // ] // loop // ] if tch ne chdel then break RestoreSysWw() ] repeat // make sure selections not in system window if (selmain>>SEL.ww eq wwsys) then [ SetRegionSys(risyspast, 40, 50) // no sel in sys ww blinkscreen() loop ] unless vfcpFDisplSys do wwdsys>>WWD.cpFDispl = 0 setupdate(wwsys) updatedisplay() if tch ge $A & tch le $Z then tch = tch+#40 if tch eq ($z+#200) then tch = ctrlz // cf>>CF.chcom had actual character typed. cf>>CF.frepeat = false cf>>CF.fRestoreSysWw = false switchon tch into [ case chesc: if cf >> CF.chcom eq 0 then [ IllCom(tch) loop; ] move(cdlast, cd, lcdmax) tch = cf>>CF.chcom vesccom = true test cdlast>>CD.fokrepeat ifso [ cf>>CF.frepeat = true ci = cinil ] ifnot [ cf >> CF.w0 = cdlast AbNoRepUndo(cf, true) loop ] endcase case $u: case $U: if cf >> CF.chcom eq 0 then [ IllCom(tch) loop; ] vundocom = true move(cdlast, cd, lcdmax) test cdlast>>CD.fokundo ifso [ if cdlast>>CD.fselundo then move(selaux, cf>>CF.sel, sell) tch = cdlast>>CD.chundo mpchci = getvp(vvpampchci) ci = mpchci!tch ] ifnot [ cf >> CF.w0 = cdlast AbNoRepUndo(cf, false) loop ] endcase default: mpchci = getvp(vvpampchci) ci = mpchci!tch if ci eq cinil do [ IllCom(tch) loop; ] ] cf>>CF.chcom = tch chcom = tch cf>>CF.ci = ci unless ci eq cinil do GetSi(cd, ci, lcdmax) if cd>>CD.fRestoreSysWw then RestoreSysWw(); // set up system window SetRegionSys(risyscom, cd>>CD.ricom) SetRegionSys(risysstate, cd>>CD.ristate) SetRegionSys(risyspast, cd>>CD.ripast) SetRegionSys(risyspast2, rinil) // clear this underline(uloff, selmain) updateunderline() wwdsys>>WWD.cpFDispl = 0 setupdate(wwsys) updatedisplay() cs = lv cd>>CD.acsfirst if cd >> CD.fOrderedOvs then deactivateomseq("", 0) vcridpast2 = 0 vfcpFDisplSys = false while (rv cs) ne acsnil do [ vab = abnil vcRiW = 2 if cs>>CS.asbact ne 0 then activateomseq(lv cs>>CS.asbact, 0, cs>>CS.cwarray) ab = (rv cs>>CS.pAbProc) (cf) if cs>>CS.asbact ne 0 then deactivateomseq(lv cs>>CS.asbact, cs+cs>>CS.bsbdeact) if vab ne abnil then ab = vab if ab eq abcomplete % ab eq abmsg then break if ab ne abnil then [ SetRegionA(vrldsys, risyspast, ab<>CS.brgrid)!(ab<>CS.lcsmac ] if cf>>CF.fRestoreSysWw then RestoreSysWw(); // "Last command was " if ab eq abQuit then break if (ab eq abnil % ab eq abcomplete) & ab ne abmsg then SetRegionSys(risyspast, nrilcw, cd>>CD.ricom) if vfcpFDisplSys then [ let tfn, tcp, tdcp = nil, nil, nil MapRi(vrldsys, BufToRi(1)-1, lv tfn, lv tcp, lv tdcp) backdylines(wwsys, tcp, 0) (mpWwWwd!wwsys)>>WWD.cpFDispl = vcp ] updatedisplay() CkCpOflow() if vcridpast2 then InterpretRgrid() ] ] and confirm(sb) = valof [ let trid = nil SetRegionW(vrlwsys, 0, sb) trid<>CF.sel, (cf>>CF.sel)>>SEL.doc) resultis abnil ] and buffer(cf) = valof [ let tch = bravochar() SetRegionSys(risysstate, 143) // type or sel buffer contents unless tch le $3 & tch ge $1 then [ let ab = nil ab<> CF.w0 SetRegionSys(risyspast, tri, cd >> CD.ricom) updatedisplay() ] // S E T V A B and SetVab(ab, mty, ridFirst, nil, nil, nil, nil, nil, nil; numargs na) be [ if na eq 1 then mty = mtyCond if mty eq mtyCond & vab ne abnil return test mty eq mtyAnc & ab eq abmsg ifso [ blinkscreen() if vcridpast2+na-2 ls cridMax then for trid = 0 to na -3 do [ vrgridpast2 ! vcridpast2 = (lv ridFirst) ! trid vcridpast2 = vcridpast2 + 1 ] ] ifnot [ if ab eq abmsg then SetRegionA(vrldsys, risyspast, na-2, lv ridFirst) vab = ab ] ] // end SetVab and InterpretRgrid() be [ if vcridpast2 eq 0 then return let rid, fd, fun, fa, fdh = nil, nil, nil, nil, nil let tsb = vec 40; let tnum = vec 10 for trid = 0 to vcridpast2-1 do [ rid = (vrgridpast2 ! trid) if rid<>FD.rvrgfdd)) + (fd>>FD.maxmagi) // stcopy(tsb, lv (fdh>>FDH.rvsbname) ) // stnum(tnum, fdh>>FDH.height) // stappend(tsb, tnum) // fa = rid<> RID.fun let tfdd = vfddfirst for i = 1 to ifdd do tfdd = tfdd >> FDD.fddnext CreateSbAl(tsb, tfdd) // stcopy(tsb, lv tfdd>>FDD.rvsbname) // stnum(tnum, tfdd>>FDD.height) // stappend(tsb, tnum) // stappend(tsb, ".al") ] deactivateomseq("S", "S") SetRegionW(vrlwsys, vcRiW, tsb) rid<> WWD.dlFirst // let tyd = rgyfirst ! ww // let dld = mpDlDld(dlFirst) // for tdl = dlFirst to dl-1 do // [ tyd = tyd+dld >> DLD.dYdBm+dld >> DLD.ld // dld = dld+lDld // ] // resultis tyd // ] (2116)