// QMENU.SR get "BRAVO.DF" get "CHAR.DF" get "GINN.DF" // Incoming Procedures external [ movec codechange changeformata marks invalidateband invalidatesel turntopage overlay macpage pollkeyboard max min cpparabounds qparsename invalidatewindow pagenumcp stget getvch setmenu stripeline stripewindow stripenone stripefly stripemenu bugmenu qdprint readsel stequal qquit qfile qfetch qaddsection qcreatedraft qmakeversion setmessage nextpointablespan cpc find fdeletea finserta visible selectsel hidemark cpvisible stcopy stnum stappend invalidatedoc lastparacp finddl backnlines updatedisplay pointable resetmessage pollstripe pollmouse invalidatedisplay setformata dirflip ]; // Incoming Statics external [ vcasson vww ddoc vturning vchremain comt vdoc vstripe vcpfirst vcplast rgmenu selection selaux mdoc sdoc vcpfinsert rgcpfdispl mww vwwcurrent rgdoc rgdlfirst rgcplast vdl rgupdate vcp vdpstop vdpon ]; // Outgoing Procedures external [ qlevel qpageto qscan qsubstitute qdouble qheadings qpagenums qrepaginate qall qcontinue qcancel qdirectory qdrawer // %% ]; // Outgoing statics external [ vdpspacing vdpheadings vdppagenums vdprepaginate ] // Local statics static [ vdpspacing vdpheadings vdppagenums vdprepaginate ] let qsubstitute(cpmenu, sel) = valof [ if selection>>SEL.doc eq mdoc % selection>>SEL.doc eq sdoc % cpc(selection>>SEL.cplast, selection>>SEL.cpfirst) ls 0 then [ setmessage(" First black-out the target, then bug Substitute") // $$ resultis 1 ] let cpfold,cplold,cpfnew,cplnew=nil,nil,nil,nil nextpointablespan(mdoc,cpmenu,lv cpfnew,lv cplnew) nextpointablespan(mdoc,cplnew+1,lv cpfold,lv cplold) if cpc(cplold, cpfold) ls 0 then resultis 1 setmessage(" Substituting...") let tww = selection>>SEL.ww let tdoc = selection>>SEL.doc let tcpfirst = selection >> SEL.cpfirst let tcplast = selection >> SEL.cplast let ns = 0 until cpc(tcpfirst, tcplast) gr 0 do [ unless find(mdoc,cpfold,cplold,tdoc,tcpfirst,tcplast) do break ns = ns + 1 vcpfirst = fdeletea(tdoc,vcpfirst,vcplast) if cpc(cplnew, cpfnew) ge 0 do finserta(tdoc,vcpfirst,mdoc,cpfnew,cplnew) tcpfirst = vcpfinsert tcplast = selection>>SEL.cplast ] qsubstmessage(tdoc, ns) // $$ //test selaux eq selection //ifso test visible(tww, selaux >> SEL.cpfirst) // ifso selectsel(selaux, tww, selaux >> SEL.cpfirst) // ifnot selectsel(selaux, tww, rgcpfdispl ! tww) //ifnot hidemark() cpvisible(mww,0) resultis 1 ] and qsubstmessage(doc, n) be [ let stn = vec 5 let str = vec 15 stcopy(str, " ") stcopy(stn, "") stnum(stn, n) stappend(str, stn) stappend(str, " substitutions made") invalidatedoc(doc) setmessage(str) ] and qscan(cpmenu, sel) = valof [ let cpfirst,cplast,tcp=nil,nil,nil let tww=vwwcurrent let tdoc=rgdoc!tww let tdl = rgdlfirst ! tww; let tcp = 1 + rgcplast ! tdl if cpc(tcp,lastparacp(tdoc)-1) gr 0 then resultis 1; nextpointablespan(mdoc,cpmenu,lv cpfirst,lv cplast) if cpc(cplast, cpfirst) ls 0 then resultis 1 setmessage(" Scanning...") unless find(mdoc,cpfirst,cplast,tdoc,tcp,lastparacp(tdoc)-1) do [ setmessage(" Not found") resultis 1 ]; let tcp = vcpfirst let tcplast = vcplast vdl = finddl(tww, tcp) test vdl ls 0 % vdl-rgdlfirst!tww gr fardl ifso [ backnlines(tww,tcp,0); rgupdate ! tww = true; vturning = true rgcpfdispl ! tww = vcp; ] ifnot [ vcp = rgcplast ! (rgdlfirst ! tww) + 1 if cpc(tcp, vcp) ls 0 then break rgupdate ! tww = true; vturning = true rgcpfdispl ! tww = vcp; updatedisplay() ] repeat if sel & pointable(tdoc, tcp, tcplast) then // NEW selectsel(sel, tww, tcp, tcplast) resetmessage() // updates display resultis 1 ] // $$[ and qdouble(char,sel) = valof [ vdpspacing = vdpspacing eq 1? 2,1 resultis qboldmenuitem(vdpspacing eq 2) ] and qheadings(char,sel) = valof [ vdpheadings = not vdpheadings resultis qboldmenuitem(vdpheadings) ] and qpagenums(char,sel) = valof [ vdppagenums = not vdppagenums resultis qboldmenuitem(vdppagenums) ] and qrepaginate(char,sel) = valof [ vdprepaginate = not vdprepaginate resultis qboldmenuitem(vdprepaginate) ] and qboldmenuitem(bold) = valof [ invalidatedisplay(mdoc, vcpfirst, -1) setformata(vdoc, vcpfirst, vcplast, bold? $b,$B) updatedisplay() resultis 1 ] and qall(char, sel) = valof [ selectsel(selection, vwwcurrent, 0, lastparacp(rgdoc!vwwcurrent)-1) ; resultis 1 ; ] and qcontinue(char, sel) = dirflip(vwwcurrent) and qcancel(char, sel) = dirflip(vwwcurrent) and qdirectory(char, sel) = dirflip(vwwcurrent) and qdrawer(char, sel) = valof // %% [ cpvisible(vwwcurrent, 0) resultis 1 ] and qpageto(char) = valof [ let zerofudge = #200+$0 let page = char-zerofudge [ char = pollkeyboard() let sig = comt ! char test sig eq spageto ifso page = page*10 + char-zerofudge ifnot if (sig ne snone) % (((rv #177036) & #004000) ne 0) // ctrl up? then break ] repeat let doc = rgdoc ! vww turntopage(doc, doc eq ddoc? page, max(0, page-1)) // $$ for now resultis char ] and qlevel(char) = valof [ let tcpfirst, tcplast = nil, nil let change = vec changel movec(change, change+changel-1, 0) let doc = selection>>SEL.doc let llevel = 0 let rlevel = 0 [ let sig = comt ! char test sig eq slevel ifso [ char = char - #200 let reset = char eq $L % char eq $R let left = char eq $l % char eq $L llevel = llevel + (not reset & left? 1,0) rlevel = rlevel + (not reset & not left? 1,0) qlevelinval(lv tcpfirst, lv tcplast, doc) codechange(change, char + (reset? #40,0), reset? 0,(left? llevel,rlevel) *marglevel) changeformata(change, doc, tcpfirst, tcplast) movec(change, change+changel-1, 0) if reset then test left ifso llevel = 0 ifnot rlevel = 0 updatedisplay() marks(true) marks(false) ] ifnot if (sig ne snone) % (((rv #177036) & #004000) ne 0) // ctrl up? then break char = pollkeyboard() ] repeat resultis char ] and qlevelinval(ptrtcpfirst, ptrtcplast, doc) be [ let dum = nil let tcpfirst = selection>>SEL.cpfirst let tcplast = selection>>SEL.cplast let tcplast1 = nil // %% let band = cpc(tcplast, tcpfirst) ge 0 cpparabounds(doc, tcpfirst, lv tcpfirst, lv dum, lv tcplast1) // %% test band ifso cpparabounds(doc, tcplast, lv dum, lv dum, lv tcplast) ifnot tcplast = tcplast1 // %% invalidateband(doc, tcpfirst, tcplast) invalidatesel(selection) invalidatesel(selaux) @ptrtcpfirst = tcpfirst @ptrtcplast = tcplast ] // $$]