// READWRITE module get "BRAVO1.DF"; get "CHAR.DF"; get "DISPLAY.DF"; get "SELECT.DF"; get "DOC.DF"; get "ALTOFILESYS.D"; get "ST.DF"; get "DIR.DF"; get "com.df" get "rn1.df" // Incoming procedures external [ SetRegionW ugt; ult; underline; selectwholedoc; MakeCurrentBuf inserttx; deleted; getvch; updateunderline; updatedisplay; cpvisible; setsel; confirm; SetRegionSys move; unsetdirty; enww; stnum; oreadfile; owritefile; puts; stget; tsmakegood; tsflush; gets; errhlt; stput; umin; resetts; stsize; FChInSb; selectwholeww; deletea invalidatedoc ] // Incoming statics external [ vrlwsys tscorrect; tsread; chcom; rgmaccp; vdoc; vcp; rgpctb; vpc; selaux; rgsbcom; comno; vmessage; vmapstatus; char; fnts; mpWwWwd; dcpendofdoc ] // Outgoing procedures external [ oreadwritecoms; ofnamfilter; ofilemessage; processtsesc; ] // O R E A D W R I T E C O M S // let oreadwritecoms(cf) = valof [ let ab = abnil let selmain = cf>>CF.sel; let selarg = cf>>CF.selarg let tcplast = nil; let tpc = nil; // let docselm = selmain >> SEL.doc; // let cpfirstselm = selmain >> SEL.cpfirst; // let cplastselm = selmain >> SEL.cplast; if selmain >> SEL.type eq snone then [ ab<<AB.crid = 2 ab<<AB.nrid = 2 //sbselemp resultis ab ] let wwselm = selmain >> SEL.ww; let wwdselm = mpWwWwd ! wwselm let wwDocName = wwdselm >> WWD.wwgroup let wwdDocName = mpWwWwd ! wwDocName let ww = wwDocName+1 let doc = (mpWwWwd ! ww) >> WWD.doc selmain >> SEL.ww = ww selmain >> SEL.doc = doc let mppccp = nil; unless ugt(rgmaccp ! doc,dcpendofdoc) then if chcom eq $p then [ ab<<AB.crid = 2 ab<<AB.nrid = 6 //Document empty, PUT - resultis ab ] let tcpendofdoc = rgmaccp ! doc-dcpendofdoc-1; if chcom eq $p then setsel(selmain,0,tcpendofdoc) underline(ulmode1,selmain); // if rgmaccp ! doctx3 ne 0 then // [ // selectwholedoc(selarg,doctx3); // MakeCurrentBuf(3); // ] unless inserttx(1000,wwDocName) do resultis false; if rgmaccp ! (wwdDocName >> WWD.doc) eq dcpendofdoc then [ ab<<AB.crid = 2 ab<<AB.nrid = 0 //No file name - resultis ab; ] vdoc = wwdDocName >> WWD.doc; vcp = 0; vmapstatus = statusblind; underline(uloff,selmain); updateunderline(); selectwholeww(selarg,wwDocName); selarg >> SEL.cplast = selarg >> SEL.cplast - dcpendofdoc test (chcom eq $g) % (chcom eq ctrlz) ifso [ // cpfirstselm = umin(cpfirstselm,tcpendofdoc+1); if (mpWwWwd ! ww) >> WWD.fDirty then [ unless confirm("clearing window(s) before Get") then [ ab<<AB.crid = 1 ab<<AB.nrid = 1 //Command terminated resultis ab ] ] invalidatedoc(doc) if ugt(rgmaccp ! doc,dcpendofdoc) then deletea(doc,0,rgmaccp ! doc-dcpendofdoc-1) setsel(selmain,0,0) // to read.sr // ab = oreadfile(selarg,doc,0) // test ab eq abmsg ifso // [ // move(selmain,selaux,sell); // tpc = vpc; // cpvisible(wwselm,cpfirstselm); // mppccp = lv((rgpctb ! docselm) >> PCTB.rvmppccp); // cplastselm = mppccp ! (tpc+1)-1; // if (cpfirstselm eq 0) & (cplastselm+1 eq rgmaccp ! docselm-dcpendofdoc) then // enww(unsetdirty,doc); // setsel(selaux,0,rgmaccp ! doc-dcpendofdoc-1); // setsel(selmain,0,0); // underline(ulmode1,selmain) // ] // ifnot resultis ab ] ifnot [ // if ugt(selmain >> SEL.cplast,tcpendofdoc) then // selmain >> SEL.cplast = tcpendofdoc; // test (selmain >> SEL.cpfirst eq 0) & (selmain >> SEL.cplast eq tcpendofdoc) ifso selmain >> SEL.xdlast = -1; // enww(unsetdirty,doc); // ] // ifnot [ if ult(selmain >> SEL.cplast,selmain >> SEL.cpfirst) then // [ // ab<<AB.crid = 2 //Selection empty C T // ab<<AB.nrid = 2 // resultis ab // ] // unless confirm(" if you want PARTIAL OUTPUT ONLY!!!") do // [ // ab<<AB.crid = 2 //PUT command terminated // ab<<AB.nrid = 4 // resultis ab // ]; // ] SetRegionSys(risyspast,95); updatedisplay( ); ] resultis ab ] // O F N A M F I L T E R // and ofnamfilter(sbfn,fsizck; numargs n) = valof [ if n ls 2 then fsizck = true; let sbfnsiz = stsize(sbfn); if fsizck & (sbfnsiz ge mastx-3) then resultis mastx-3; let tchar = nil; for ich = 1 to sbfnsiz do [ tchar = stget(sbfn,ich); if ((tchar ge $A) & (tchar le $Z)) % ((tchar ge $a) & (tchar le $z)) % ((tchar ge $0) & (tchar le $9)) % (FChInSb(tchar,"+.-?!$")) then unless ich eq sbfnsiz do loop; resultis ich; ] resultis -1; ] // O F I L E M E S S A G E // and ofilemessage(sbname,siz,write,fty) be [ let tsb = vec 5; tsb ! 0 = 0; let trid1,trid2,trid3,trid4 = nil,nil,nil,rinil stnum(tsb,siz,10,0,false,false,false); SetRegionW(vrlwsys,0,tsb) trid1<<RID.nrl = 1 trid1<<RID.ri = 0 trid2 = (write ? 76, 77) SetRegionW(vrlwsys,1,sbname) trid3<<RID.nrl = 1 trid3<<RID.ri = 1 if write then [ trid4 = valof switchon fty into [ case ftyNewFile: resultis 78; case ftyNewOnDollar: default: resultis 79; case ftyNewOnOld: case ftyNewVer: resultis 101; ] SetRegionSys(risyspast,trid1,trid2,trid3,trid4) return ] SetRegionSys(risyspast,trid1,trid2,trid3) ]