[split] Buffer Exchange cleanup script


RE: [split] Buffer Exchange cleanup script
#6
(2022-12-26, 5:10)N. W. Perry Wrote: On the first loop, we would look for the first instance of a BUFEXCHG RETRIEVE statement (being the last one in the file). When we find one, we would return its buffer ID (A, B, C, etc.) since only the lines stored in that buffer will display at the final step of the model.

Progress…I realized that only taking the final buffer ID won't work, because the active "final" buffer can change within a file (as I found in one of my models, where I retrieved A but stored to B…).

Turns out, this actually makes things easier. Now, given the initial visibility state of true, we look for a RETRIEVE statement, and when we find one we simply take its ID, and switch the visibility to false. This causes the script to ignore any further RETRIEVE statements, and now looks for a STORE statement with a matching ID. This turns the visibility true again, and so when we next find a RETRIEVE statement, we take its ID again, in case it is different, and so on…

I've tested this on a few models with complex buffer exchange statements, and the results seem to be correct. The resulting script is below—right now, it only prints the visible lines (or their index) in the console; the next step is to actually toggle them as comments.

If anyone has any models that use a lot of buffer exchange, I'd love to have some test files!
Code:
genTools=require('genTools') function printVis()   local ses=ldc.session()     if not ses:isLinked() then     ldc.dialog.runMessage('No active session')     return   end     local sf=ldc.subfile()   local cnt=sf:getLineCount()   local lines={}   local isVis=true     for i=cnt, 1, -1 do     local line=sf:getLine(i)     local index=line:getLineIndex()     local strBeg=line:getString():sub(1,11):upper()     local strEnd=line:getString():sub(13):upper()     local strInit=line:getString():sub(12,12):upper()     local isBufEx=strBeg=='0 BUFEXCHG '     local isStor=isBufEx and strEnd==' STORE'     local isRetr=isBufEx and strEnd==' RETRIEVE'         if isRetr then       if isVis then         id=strInit       end       isVis=false     elseif isStor and strInit==id then       isVis=true     elseif line:isRef() and isVis then       table.insert(lines, index)     end   end     for k, v in ipairs(lines) do     print(v)   end end function onRun()   printVis() end function register()   local macro=ldc.macro('Print visible')   macro:setEvent('run', 'onRun') end register()
Reply
« Next Oldest | Next Newest »



Messages In This Thread
RE: [split] Buffer Exchange cleanup script - by N. W. Perry - 2022-12-28, 4:29
RE: Simple LDCad script - by Roland Melkert - 2022-04-02, 19:47
RE: Simple LDCad script - by N. W. Perry - 2022-12-24, 14:25
RE: Simple LDCad script - by Roland Melkert - 2022-12-28, 22:00
RE: Simple LDCad script - by N. W. Perry - 2022-12-28, 23:14
RE: Simple LDCad script - by Roland Melkert - 2022-12-29, 19:28
RE: Simple LDCad script - by N. W. Perry - 2022-12-30, 0:25
RE: Simple LDCad script - by N. W. Perry - 2022-04-03, 3:16

Forum Jump:


Users browsing this thread: 1 Guest(s)