// look3.sr get "BRAVO1.DF"; get "ST.DF"; get "CHAR.DF"; get "MSG.DF"; get "NEWMSG.DF"; get "SELECT.DF"; get "COM.DF"; get "DISPLAY.DF"; get "LOOK.DF"; get "DOC.DF"; get "PARSE.DF"; // Incoming procedures external [ move; select; bravochar; underline; updateunderline; inserttx; endofkeystream; setbug; cpparabounds; invalidatesel; FFillInUfop; stnum; stcopy; stappend; updatedisplay; formaty; SetRegionSys; RoundRatio FGetTxpParam MakeCurrentBuf stput stget AbReadLookEscSeq WriteLookEscSeq augmentomseq deactivateomseq movec errhlta deleted insertc InsertBuf stsize ] // Incoming statics external [ putbacks; selarg; mpIffFfp; mpWwWwd; vww; rgmaccp; vcpatxdl tsread ] // Outgoing procedures external [ AbGetArg ] // Outgoing statics // external // Local statics // static // Local manifests manifest [ pidPfop = 0 pidArd = 1 pidFMicas = 2 pidAb = 3 pidDoc = 4 pidCp = 5 pidPwFirst = 6 pidPwLast = 7 pidFSwappedIn = 8 ] // A B G E T A R G let AbGetArg(pfop, ard) = valof [ let fMicas = ard>>ARD.fMicas ne 0 let ab = abTyping let doc = 0 let cp = 0 let pwFirst = pfop + ard>>ARD.iwFirst; let pwLast = pfop + ard>>ARD.iwLast; let fSwappedIn = false; // pid manifests for all the above guys !! SetRegionSys(risysstate, 133, ard>>ARD.ri, 134) MakeCurrentBuf(1) updatedisplay() let pfopDefault = vec lnufopMax move(pfop, pfopDefault, lnufopMax) putbacks = false [ test tsread ifso [ ab = AbReadLookEscSeq(pwFirst, pwLast) FopToBuf(pfop, ard, ab) ] ifnot [ selarg>>SEL.type = snone select(selarg, 0, FSelectContinue, FSelectProc) WriteLookEscSeq(ab, pwFirst, pwLast) ] let ch = bravochar() if ch eq $\ then [ unless ard>>ARD.fDefault do resultis abNoDefault ab = abDefault underline(uloff, selarg) updateunderline() move(pfopDefault, pfop, lnufopMax) FopToBuf(pfop, ard, ab) loop ] if ch eq chdel then resultis abComTerm if ch ne chesc then [ unless ard>>ARD.fTyping do resultis abIllParam unless inserttx(1, wwsys, ch) do resultis abComTerm ab = abTyping ] break ] repeat if ab eq abTyping then [ let arg = nil let fIncrement = nil unless FParseBuf(lv arg, lv fIncrement, buf1, fMicas) do resultis abIllParam movec(pwFirst, pwLast, arg) pfop>>UFOP.fIncrement = fIncrement FopToBuf(pfop, ard, ab) ] if fSwappedIn then deactivateomseq("\", "\"); resultis ab ] // F S E L E C T C O N T I N U E and FSelectContinue(sel, fm) = valof [ unless endofkeystream() do resultis false unless (fm ! pidArd)>>ARD.fWhere do resultis true if ((rv bug) & 2) ne 0 then resultis true if fm ! pidAb ne abWhere then [ underline(uloff, sel) updateunderline() setbug(snone) sel>>SEL.type = snone fm ! pidAb = abWhere rv (fm ! pidPwFirst) = -1 ] let arg = (fm ! pidFMicas) ? xatox(rv xbugloc, rv ybugloc), 0 if arg ne rv (fm ! pidPwFirst) then [ movec(fm ! pidPwFirst, fm ! pidPwLast, arg) FopToBuf(fm ! pidPfop, fm ! pidArd, fm ! pidAb); ] resultis true ] // F S E L E C T P R O C and FSelectProc(sel, fm) = valof [ let cpFirst = sel>>SEL.cpfirst let cpLast = nil let type = nil let ab = nil let pfop = fm ! pidPfop let doc = sel>>SEL.doc switchon sel>>SEL.type into [ case schar: case sline: unless (fm ! pidArd)>>ARD.fHere do resultis false cpLast = cpFirst type = schar ab = abHere endcase case sword: cpFirst = vcpatxdl case sph: unless (fm ! pidArd)>>ARD.fSameAs do resultis false test (mpIffFfp ! (pfop>>UFOP.iff))<>SEL.xdfirst lshift 5 movec(fm ! pidPwFirst, fm ! pidPwLast, arg) FopToBuf(pfop, fm ! pidArd, ab) ] ifnot [ unless fm ! pidFSwappedIn do [ augmentomseq("\"); fm ! pidFSwappedIn = true; ]; unless FFillInUfop(pfop, doc, cpFirst) do resultis false FopToBuf(pfop, fm ! pidArd, ab) ] sel>>SEL.cpfirst = cpFirst sel>>SEL.cplast = cpLast sel>>SEL.type = type invalidatesel(sel) fm ! pidDoc = doc fm ! pidCp = cpFirst fm ! pidAb = ab resultis true ] // F P A R S E B U F and FParseBuf(parg, pfIncrement, buf, fMicas) = valof [ let txp = vec lntxp txp>>TXP.doc = doctx0 + buf txp>>TXP.cp = 0 txp>>TXP.cpMac = rgmaccp ! (doctx0+buf) augmentomseq("*140") let fResult = FGetTxpParam(parg, pfIncrement, txp, fMicas, true) deactivateomseq("*140", "*140") resultis fResult ] // F O P T O B U F and FopToBuf(pfop, ard, ab) be [ let sbPt = sbnil; let sbIn = sbnil; let tsbPt = vec 10; let tsbIn = vec 10; let iff = pfop>>UFOP.iff; if iff ge iffMax then errhlta(208); switchon iff into [ case iffProcXtb: if pfop ! 1 eq xtbNil then [ sbPt = "(not set)"; sbIn = sbPt; ]; endcase; case iffProcLeftmarg: if pfop ! 1 ne pfop ! 2 then [ let tsb1 = vec 15; sbPt = tsb1; let tsb2 = vec 15; sbIn = tsb2; stcopy(sbPt, "F:"); stcopy(sbIn, sbPt); SbPtSbIn(tsbPt, tsbIn, pfop ! 2, false, true); stappend(sbPt, tsbPt); stappend(sbIn, tsbIn); stappend(sbPt, " P:"); stappend(sbIn, " P:"); SbPtSbIn(tsbPt, tsbIn, pfop ! 1, false, true); stappend(sbPt, tsbPt); stappend(sbIn, tsbIn); ]; endcase; case iffProcYpos: if pfop ! 1 eq -1 then [ sbPt = "(no V. tab)"; sbIn = sbPt; ]; endcase; // case iffProcTable: // if ab eq abSameAs then // [ // sbPt = "(all tabs)"; // sbIn = sbPt; // ]; // endcase; default: endcase; ] if sbPt eq sbnil then [ SbPtSbIn(tsbPt, tsbIn, pfop ! (ard>>ARD.iwFirst), pfop>>UFOP.fIncrement, ard>>ARD.fMicas); sbPt = tsbPt; sbIn = tsbIn; ]; SbToBuf(sbPt, buf1); SbToBuf(sbIn, buf2); updatedisplay(); ] // end FopToBuf // S B P T S B I N and SbPtSbIn(sbPt, sbIn, arg, fSigned, fMicas) be [ test fSigned ifso [ let sbSign = nil test arg ls 0 ifso [ arg = -arg sbSign = "-" ] ifnot sbSign = "+" stcopy(sbPt, sbSign) stcopy(sbIn, sbSign) ] ifnot [ sbPt ! 0 = 0 sbIn ! 0 = 0 ] let tsb = vec 5 let argpts = fMicas ? RoundRatio(arg, 18, 635), arg stnum(tsb, argpts, 10, 0, false, false, false) stappend(sbPt, tsb) stappend(sbPt, "pt") let arginches = RoundRatio(argpts, 100, 72) stnum(tsb, arginches, 10, (arginches ls 100 ? 3, 0), true, false, false) let tcp = tsb>>SB.cch stput(tsb, tcp, stget(tsb, tcp-1)) stput(tsb, tcp-1, stget(tsb, tcp-2)) stput(tsb, tcp-2, $.) tsb>>SB.cch = tcp + 1 stappend(sbIn, tsb) stappend(sbIn, "in") ] // S B T O B U F and SbToBuf(sb, buf) be [ let doctx = doctx0+buf deleted(doctx) insertc(doctx, 0, sb) InsertBuf(buf, doctx, 0, stsize(sb)) ] // X A T O X and xatox(xa, y) = valof [ formaty(y); let wwd = mpWwWwd ! vww let xd = xa-xaudleft+wwd>>WWD.xdUd; resultis xd lshift 5; ]