// GMENU.SR get "BRAVO.DF" get "CHAR.DF" get "GINN.DF" // Incoming Procedures external [ qwritecass qfile setbug stillselecting pollstripe mousedecode readsel stsize stequal overlay swat stput stget setlf updatedisplay getvch setformata putvch insertb setpcsiz selectsel hidemark freedl copydnww bubblingww createdisplay invalidatewindow errhlt stripeline stripewindow stripenone stripefly stripemenu pollmouse qdprint ]; // Incoming Statics external [ vdpon vcassstop vcasson vdoc vcpfirst vstripe vcplast rgmenu module routine selection selaux rgdoc vwwcurrent ddoc rgsfile rgsdoc sdoc rgdirty vdpstop vmenumessage mdoc nmenuitems menumessage vcp vchremain vinsertk vcpput cpscrt vpc rgylast rghpused rgdlfirst rgdllast pbmfirstfree macww vdpspacing rgview vdpheadings rgcpfdispl vdppagenums vdprepaginate comt mpdldcb // %% ]; // Outgoing Procedures external [ cassette casswrite print start stop insertstring setmessage resetmessage setmenu getdoc confirm dirflip makemenuitems bugmenu ]; // Outgoing Statics external [ messagereset vturning rgdirpage ] // Local Statics static [ messagereset vturning rgdirpage ] // Manifests manifest [ msgsize = 70 ] // Structures structure DCB: // %% [ next word; mode bit 1; bw bit 1; htab bit 6; nwrds bit 8; sa word; slc word; ]; let bugmenu(cmdcode) = valof [ let still = true let tdoc = vdoc let tcpfirst = vcpfirst resetmessage() setbug(sinvert-smenu) while stillselecting(-1,0,true,-1) do [ vstripe = pollstripe(true) still = vstripe-sstripe eq sstripemenu-sstripeline & vcpfirst eq tcpfirst & vdoc eq tdoc setbug(still? sinvert-smenu, -1) ] unless still do resultis 0 vdoc = tdoc resultis menuitem(mousedecode(cmdcode)-smouse)? 0, -1 ] and menuitem(mousebutton) = valof [ let string = vec sbfnaml readsel(string,vdoc,vcpfirst,vcplast,(sbfnaml lshift 1)-1); for i = 0 to maxmitems-1 do if stequal(string,rgmenu!i) then [ overlay(module ! (maxsig+i)) resultis (routine ! (maxsig+i))(vcpfirst, selecton mousebutton into [ case 2: selection; case 1: selaux; default: 0 ] ); ] ] and setmessage(string) be [ let ving = vec (msgsize+3)/2 let len = stsize(string) if len gr msgsize then swat() let t = (msgsize-len) rshift 1 ving >> lh = t+len+1 ; for i = 0 to t do stput(ving, i, chsp) for i = 1 to len do stput(ving, t+i, stget(string, i)) setlf(lfsys,idbanner2,ving) updatedisplay() mpdldcb ! 0 >> DCB.bw = 1 ; // %% messagereset = false ] and resetmessage() be [ unless messagereset do [ setlf(lfsys, idbanner2, " ") updatedisplay() mpdldcb ! 0 >> DCB.bw = 0 ; // %% messagereset = true ] ] and setmenu() = valof [ let tdoc = rgdoc ! vwwcurrent; if rgdirty ! tdoc then [ vdpon = false vcasson = false ] let tmenumessage = tdoc eq ddoc? rgcpfdispl!vwwcurrent? // %% rgsfile!(rgsdoc!vwwcurrent)? mmdir, mmnodoc, rgsfile!(rgsdoc!vwwcurrent)? mmdirnocab, // %% mmnodocnocab, // %% tdoc eq sdoc? mmnull, rgdirty ! tdoc? mmdirty, vdpon? vdpstop? mmprint, mmstop, vcasson? vcassstop? mmcassette, mmstop, mmclean; if tmenumessage ne vmenumessage then [ unmakemenuitems(mdoc, 0, nmenuitems ! vmenumessage) // $$ vmenumessage = tmenumessage ; setlf(lfmenu, idmenu1, menumessage ! vmenumessage) ; makemenuitems(mdoc, 0, nmenuitems ! vmenumessage) ; updatedisplay() resultis true ] resultis false ] and makemenuitems(doc, cp, nitems) be [ unmakemenuitems(doc, cp, nitems) // $$ vcp = cp vchremain = 0 for i = 1 to nitems do [ until isletter(getvch(), false) do loop let cp1 = vcp-1 while isletter(getvch(), true) do loop let cp2 = vcp-2 setformata(doc, cp1, cp2, $m, $i) ] ] // $$[ and unmakemenuitems(doc, cp, nitems) be [ vdoc = doc vcp = cp vchremain = 0 while getvch() eq $*T do loop ; // %% while getvch() ne $*T do loop ; setformata(doc, cp, vcp-1, $M, $I, $B) ; ] // $$] and isletter(char, evenlower) = ($A le char & char le $Z) % (evenlower & $a le char & char le $z) and insertstring(doc,cp,string) be [ if vinsertk then errhlt("INK") let ppcd = vec 2; let vpa=nil let stringl=stsize(string) unless stringl do return // ** LT fix !!! important !!! vcpput = cpscrt; for i = 0 to stringl-1 do putvch(stget(string,i)) vpa << VPA.fn = fnscr; vpa << VPA.fp = cpscrt << PCD.p; ppcd >> PCD.vpaddr = vpa; ppcd >> PCD.rc = cpscrt << PCD.rc; ppcd >> PCD.live = 0; insertb(doc,cp,ppcd,stringl); cpscrt=cpscrt+stringl setpcsiz(doc,vpc,stringl) ] and dirflip(tww) = valof [ let tdoc,watchout=nil,nil // LT watchout tdoc=rgdoc!tww if tdoc eq sdoc then resultis 1; test tdoc eq ddoc ifso watchout = getdoc(tww,rgsdoc!tww) ifnot getdoc(unifydoc(tww,tdoc),ddoc) if watchout then selectsel(selection, tww, 0) if selaux>>SEL.doc ne sdoc then hidemark() ; resultis 1 ] and unifydoc(www, doc) = valof [ let crd = false ; let ww = www rgsdoc ! ww = doc while rgdoc ! (ww-1) eq doc do ww = ww-1 www = ww while rgdoc ! (ww+1) eq doc do [ let w = ww + 1 ; rgylast ! (w-1) = rgylast ! w; rghpused ! w = 0; for dl = rgdlfirst ! w to rgdllast ! w do [ pbmfirstfree = 1; freedl(dl); ]; for tw = w to macww-2 do copydnww(tw,tw+1); bubblingww(w, -1) macww = macww-1; crd = true ; ] if crd then createdisplay() resultis www ] and getdoc(www,doc) = valof [ let watchout = selection >> SEL.doc eq rgdoc ! www ; if doc ne ddoc then rgdirpage ! www = rgcpfdispl ! www for ww=1 to macww-2 do if rgsdoc!ww eq rgsdoc!www then [ rgdoc ! ww = doc rgcpfdispl ! ww = 0 invalidatewindow(ww) ]; rgview ! doc = 0 if doc eq ddoc then [ vturning = true rgcpfdispl ! www = rgdirpage ! www ] resultis watchout ] and print(char, sel) = valof [ vdpstop = true vdpon = true vdpspacing = 1 vdpheadings = false vdppagenums = false vdprepaginate = false setmenu() setmessage(" First bug desired options, then bug Start") resultis 1 ] and start(char,sel) = valof [ overlay(devicemodule) test vdpon ifso qdprint(vdpspacing, vdpheadings, vdppagenums, vdprepaginate) ifnot if vcasson then qwritecass() if vdprepaginate then [ overlay(dirtymodule) let tchar,tsel = nil,nil qfile(tchar,tsel) vdprepaginate = false ] resultis 1 ] and stop(char, sel) = valof [ vdpstop = true vdpon = false vcassstop = true vcasson = false resultis 1 ] and cassette(char, sel) = valof [ vcassstop = true vcasson = true setmenu() setmessage(" First mount cassette, then bug Start") resultis 1 ] and casswrite(char, sel) = valof [ overlay(devicemodule) qwritecass() resultis 1 ] and confirm(dummy) = true