Subj : Accessing Syncdata
To   : Finnigann
From : Angus McLeod
Date : Mon Aug 06 2007 12:21 am

Here's a fairly simple JS script you can try.  Copy it to "junky.js" in
your EXEC directory, and from there you can run it by typing

       jsexec junky

at a command prompt.  Here is the script:

 load("sbbsdefs.js");  // load some useful SBBS definitions

 var sub = "hobbies";  // search this sub
 var subj_search = new RegExp(/Fokker/i);      // RE search
 var want_body = false;                        // keep it short

 // open the message base;
 smb = new MsgBase(sub);
 if ( smb.open != undefined && smb.open() == false) {
       printf( "Uh-oh! Can't access %s: %s\r\n", sub, smb.last_error );
       delete smb;
       exit;
 }

 // process each message in message base
 for (ptr = smb.first_msg;
               ptr <= smb.last_msg && !js.terminated;
                       ptr++) {
       // grab the header
       header = smb.get_msg_header( false, ptr, false );

       // skip certain messages for operational reasons
       if (header == null) continue;
       if (header.attr & MSG_DELETE)   // skip marked for deletion
               continue;
       if (header.attr & MSG_MODERATED && !(hdr.attr&MSG_VALIDATED))
               continue;
       if (header.attr & MSG_PRIVATE)  // skip private messages
               continue;
       if (header.reverse_path)        // no dupe loop
               continue;
       if (header.from_net_type        // don't gate
               && smb.cfg != undefined && !(smb.cfg.settings & SUB_GATE))
               continue;

       // skip messages that don't match subject-wise
       if (!header.subject.match( subj_search )) continue;

       // give some very basic header info
       printf( "From: %s\nTo  : %s\nSubj: %s\n\n",
               header.from, header.to, header.subject );

       // retrieve and message body if needed
       if (want_body) {
               body = smb.get_msg_body( false, ptr, true, true, true );
               if (body == null) {
                       printf( "Uh-oh!  Can't read body for #%ld\n", ptr);
                       continue;
               }
               print( body );
       }
 }

It searches the "hobbies" message-base for any message that mentions the
word "Fokker" in the subject, and lists a few fields (and the body, if you
really want).  It just lists on the console.  You can redirect to disk.

It would be fairly straightforward to search according to a complex set of
criteria, examining from/to, date, etc and even the body-text itself,
before deciding whether to dump the message or not.

Biggest problem with this is that it searches every message in the message
base.  *NOT* just the ones that have been added since the last time it
ran.  You would have to store smb.last_msg in a file somewhere on disk and
read it back for use as a starting point instead of using smb.first_msg
wach time.  Not hard, but not part of this simple example.

Now, would a more advanced version of this script be what you are looking
for?  (A separate script could be written to add messages to a sub.)
And, with your knowledge of BATch programming, are you able to make any
sort of sense of this programming?

---
Playing loud: "Star" by "David Bowie"
             from "The rise & fall of Ziggy Stardust & the spiders from Mars" album.
� Synchronet � Where we BAJA Rob into writing our modules.  The ANJO BBS