'}"> '}"> ################################################################### # Message Board Version 1.0 # # Developed by Michael Sussna # # Created 12/11/97 Last Modified 10/22/98 # # Based on WWWBoard # # Copyright 1996 Matt Wright mattw@worldwidemart.com # # Scripts Archive at: http://www.worldwidemart.com/scripts/ # ############################################################################## # WWWBoard COPYRIGHT NOTICE # # Copyright 1996 Matthew M. Wright All Rights Reserved. # # # # WWWBoard may be used and modified free of charge by anyone so long as # # this copyright notice and the comments above remain intact. By using this # # code you agree to indemnify Matthew M. Wright from any liability that # # might arise from it's use. # # # # Selling the code for this program without prior written consent is # # expressly forbidden. In other words, please ask first before you try and # # make money off of my program. # # # # Obtain permission before redistributing this software over the Internet or # # in any other medium. In all cases copyright and header must remain intact.# ################################################################## Define Variables This is a special self number in the database: The message board is displayed in a specific sequence. The most recent main postings (or roots) are displayed first. Within each main posting any followup postings are then displayed, most recent first. Followups to followups are displayed most recent first, and so on. This produces a hierarchy of postings. To build this display as fast as possible from the database, each posting is assigned a sequence number. The sequence numbers are designed so that the hierarchy follows from simply listing the postings in sequence. For example, suppose that there are 10 postings that should display in the following hierarchy: 4 10 5 8 9 6 7 3 1 2 The main postings are 1, 3, and 4. 4 is the most recent main posting. Posting 4 has 2 followups, 5 and 10. 10 is more recent than 5 and has no followups. 5 has two followups, 6 and 8, each of which has a followup. The numbering of the postings reflects the order in which they were created, 10 being the most recently created posting. To simply list the postings so that they would display in the proper order above, we would need the following relationships between any sequence numbers assigned: 4's sequence number should be first in the list, followed by 10's, 5's, 8's, 9's, 6's, 7's, 3's, 1's, and finally 2's. We could assign ascending sequence numbers, but we actually assign descending numbers. So, in our example, we could think of the sequence number assignments as 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 for postings 4, 10, 5, 8, 9, 6, 7, 3, 1, and 2 respectively. There are several constraints which influence our scheme for sequence numbering: Each posting should have a unique sequence number --- we want to avoid duplicates so that there is no ambiguity when listing postings. Each sequence number should correctly reflect the relative position of its posting in the hierarchy --- thus it should fall between the sequence numbers of the postings between which the new posting is being inserted. Insertion can occur at any arbitrary point in the hierarchy. We cannot know ahead of time how many postings will be placed at any given location. Finally, we need to allow for a reasonably large number of levels of followup. In actual practice it is not unusual to see 20 levels of followup. That is, one main posting could have a followup which could have a followup which could have a followup, and so on, to 20 levels of followup. To accommodate these constraints, we have devised the following scheme for sequence numbering. Unique numbering is supported by careful planning for handling the other constraints. Reflecting relative position in the hierarchy is provided by selecting a sequence number for a new posting that lies between the sequence numbers of the postings before and after the new posting. By assigning each root a comfortable range of numbers for its followups, we lay the foundation for satisfying the final two constraints. Suppose that we allow 1000 followups per root. So the roots are numbered 1000, 2000, and so on as they are created. Followups are numbered sequentially from 1 within that range. So root 2000's followups fall in the range 1001 - 1999, since posting 2000 must display before any of its followups. The first followup gets 1001. If a second followup to posting 2000 is created, it gets sequence number 1002. But what if a followup to posting 1001 is created? It needs a sequence number lower than 1001, since it must display after 1001, right? What if we renumber so that what was 1001 becomes 1002, and the new posting gets 1001? This is the scheme that we use. As a followup is inserted, it causes a renumbering of all followups between it and the root. So suppose we have 1001 - 1005, and need to insert a new followup to 1003? 1001 and 1002 can stay unchanged. 1003 - 1005 need to be incremented, and the new posting becomes 1003. The root stays at 2000. This scheme satisfies both of the final constraints because arbitrary insertion is accommodated and because any number of levels of followup is allowed as well. At least, any number of followups that fit within the range of 1000 numbers. Nested followups share the range of numbers with any other followups. But how does this method affect performance? Since the renumbering is localized to just the region of numbers assigned to a single root, this minimizes the impact. Since just the followups between the new posting and the root must be visited, this reduces the impact further. All ancestors of a new posting must be visited, to update their count of descendents. We do this by moving back from the parent to the root. All of the postings between the root and the new posting must have their sequence numbers incremented. We do this by moving forward from the root to the parent. Unfortunately these two movements oppose each other. But, each requires its specific direction of motion. The chain of ancestors flows bottom up in the hierarchy, that is, from leaf to root. We learn the parent of a posting from the posting's database record. This means traveling from parent to grandparent etc. as we move back to the root via index1 (sequence number). Not all of the postings encountered are necessarily in the lineage of the new posting. For updating the sequence numbers, we move forward from the root because otherwise we would be assigning duplicate numbers temporarily, which is enough time to do damage. For example, say we have root 2000 and followups 1002 and 1001 under it. We want to insert a followup to 1001. Note that it doesn't matter whether 1001 and 1002 are both followups to 2000, or 1001 is a followup to 1002. We want the end result of the insertion to be the sequence 2000, 1003, 1002, 1001 with the new posting being 1001. If we start the renumbering with the old 1001 and move back towards the root, when we make 1001 into 1002 we now temporarily have two 1002's. This throws off the index and plays havoc. Skipping back from this finds 2000, not the original 1002. So, we must start from the root and move forward, making 1002 into 1003, then 1001 into 1002. Then we can safely create a new sequence number of 1001 for the new posting. One final note on performance considerations is the following. The current maximum sequence number is stored in the super root as its sequence number. This means that we have to retrieve that sequence number before inserting a main posting, and update that number with the new value. But we have to access the super root's database record anyway when we create a posting, because we need to update its number of descendents, which generates the message number for the new posting. By using a 10-digit number for sequencing, and allowing 1000 followups per main posting, we are allowing for 10,000,000 main postings. We can change these values, but doing so means that existing postings would be obsolete. Increment for creating self and parent numbers: ########################################################### ########################################################### MAIN PROCESSING END OF MAIN PROCESSING Done til input errors fixed 1st time in No title yet, but don't care. If we just came from ShowProvideIdentity The name of the msgboard is what immediately precedes ".mv" in the document URL, but parsing depends on whether the URL is an NSAPI or CGI URL. The user must give each message board Miva doc a unique name, e.g. msgboard1.mv, msgboard2.mv, etc. Each message board will have a separate subdirectory under mivadata. The subdirectory will be named with the unique message board name, e.g. msgboard1. The path to the database files, etc. will be based on the message board name, e.g. mivadata/msgboard1/msgboard.dbf. If CGI, URL looks like either .../cgi-bin/miva?xxx.mv+ or .../cgi-bin/miva?zzz/xxx.mv+ where zzz is the path within the Documents directory (so could have >1 slash). If NSAPI, URL looks like either ...xxx.mv? or ...zzz/xxx.mv? where zzz is the path within the Documents directory (so could have >1 slash). path name path name path name path name short name &[title]; ]'}"> Message Board ]'}"> Post Message ]'}"> Search ]'}"> FAQ ]'}"> Importing a single big field and parsing it into data fields takes one second. Importing the fields individually takes several seconds. Figure out the date and time of the entry, accounting for the different time zones. The "time_zone" field is set in admin. If daylight savings add one hour Get rid of any newlines This subroutine should be physically before any calls to it. That's because of the following scenario. Yumlaut, which is ascii 255, means end of file to Miva. If it is encountered at any point by a Miva script, the script terminates immediately, whether that is the desired action or not. Suppose there *is* a yumlaut in an input field. Suppose also that we think we're prepared for this and we call this Remove function before we try to use the field for anything. If the code for the function is physically after the call and the usage of the input field, the function is not found and the script crashes. Because the function is not found, the yumlaut in the input field is not removed. The usage of the field thus still has the yumlaut. This causes immediate termination of the script at that point. This in turn causes the code following that point to not be seen, including this Remove function. Thus the function is not found. The script crashes because it has a function that doesn't have a . This is due to the false end of file, which causes the function within which the input field is used to end right away, before any more code is seen, including its . Doesn't include post form 1st record, super-root not visible yet. Find main posting to start page with. First time in, no direction specified. First time in, start at top of database, else at current pagetop. Find record number of root that will start page. Determine which scrolling options make sense, if any. Starting value of roots_displayed_count > 0 since displaying partial page. Almost empty database Find record number of root that will start page, whether 1st search or search for next match. For 1st search, starting_root s/b zero. Get root count from super_root's parent field. First go forward to find starting point. Start backward from there and look for match. Back up 1 from curr rec so don't match on it again. If we're at beginning of index, i.e. recno 1, stop. &[ON];&[header];

&[title];

&[crlf];&[OFF]; &[ON];
Match not found.

&[crlf];&[OFF]; &[ON];
Match found:

&[crlf];&[OFF];
Each posting which is not a followup is the root of a tree of postings. To tie all of these roots together, we use an artificial posting called the super-root. It forms the root of a tree or hierarchy. Its children are the original roots. Their children, if any, are their followups. To display the overall hierarchy of postings in most-recent-first sequence, we traverse the overall tree recursively. To do so, we start at the super-root and print its "followups" (postings which are *not* followups). While processing a posting, we print *its* followups, etc., recursively traversing the hierarchy of postings and followups in most-recent-first sequence. Additionally, we don't just print the whole database. We only print a limited number of postings at a time. Other postings can be viewed by "scrolling" forward or backward in time. A practical way to limit the amount of material to display at a time is to pick a fixed number of roots to display postings for. This prevents us from cutting off a set of related postings under one root. Rather, we finish the set of postings related to a root. So, the exact number of postings per page will fluctuate, though the number of *roots* is fixed. The scrolling amount can be set in the administration function of the message board. The amount is called "roots_to_view". &[ON]
&[OFF] Start recursion The following example should help one visualize this processing. Suppose the messsage board has 10 postings so far, numbered 1 to 10, the oldest being 1. There would 11 records in the database, the eleventh being the super-root. Suppose the posting structure should print out like this: 4 10 5 8 9 6 7 3 1 2 The records are in exactly this hierarchical and most-recent-first sequence within the database because the index used here is decreasing sequence number. Sequence number for a posting is midway between the preceding and following postings' sequence numbers. This speeds up displaying the list as it looks above. Start at beginning of database, or at starting point if scrolling, according to index 1 (sequence number). 1st record, super-root not visible yet. &[ON]&[indent_string];
  • &[OFF] &[ON];&[OFF]; &[ON];&[OFF]; &[ON];&[dbsubject]; - &[dbname1];  &[crlf];&[OFF]; &[ON];&[print_date]; (&[dbnumdesc];)&[crlf];&[OFF]; &[ON]&[unindent_string];
  • &[OFF]
    If first page, no previous button. If last page, no next button. Except when we're first coming in to message board, and it's page 1, starting root in url reflects page we're coming *from*, not page we're on. &[ON];
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[OFF]; &[ON];&[footer];&[crlf];&[OFF];
    &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[general_data_area];&[crlf];&[OFF]; &[title2]; ]'}"> Followups ] ' $ '[ Post Followup ] '}"> Omit faq link if not to be shown If visitor's IP in unwelcome list, go no further. Use &[REMOTE_ADDR];. Import unwelcome list file, check for match. Remove any anchors from subject, since it goes in an anchor on main page. Copy part of subject following last anchor, if any. Replace subject with anchor-free version. The following will change as we ascend to super_root. Find parent quickly via selfnum index. Visit the posting immediately after the new posting, and set up the new posting's sequence number. Then visit each posting from the new posting's parent back up to the root which is the ancestor of the new posting. Increment each *ancestor*'s number of descendents, including the root's. Then travel *forward* from the root to the parent again, incrementing each posting's sequence number except for the root's. We have to do the sequence number incrementing in the forward direction to avoid generating temporarily duplicate sequence numbers, which would throw off the index. Read record after insert point. Set up sequence number for new posting. Update root. We're at root. If adding a root, assign new root's sequence number, and update super root's root count and sequence number. Create database record for the new posting. Create a file for the message text Get hidden field data from database. &[ON];&[header];

    &[subject];

    &[crlf];&[OFF];
    &[ON];
    Posted by&[crlf];&[OFF]; &[ON];&[name]; on &[longdate]; from &[ipaddr];:

    &[crlf];&[OFF]; &[ON];&[name]; on &[longdate]; from &[ipaddr];:

    &[crlf];&[OFF]; &[ON];In Reply to: &[origsubject]; posted by&[crlf];&[OFF]; &[ON];&[origname]; on &[origdate];:

    &[crlf];&[OFF]; &[ON];&[origname]; on &[origdate];:

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[body];&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF];
    &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON]
    &[OFF] &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Name:
    E-Mail:
    Subject:&[crlf];&[OFF]; &[ON];
    Subject:&[crlf];&[OFF]; &[ON];
    Subject:&[subject];
    Subject:Re: &[subject];
    Subject:
    Subject:
    Subject:
    Comments:&[crlf];&[OFF]; If requested, add lines of the message to the reply comment area, preceded by colons. Produce one line until a
    , newline, or

    tag is seen. If it's a

    , also produce a blank line. Before processing body text to be quoted, convert any longforms of characters (i.e. < for <, > for >, and " for ") to shortform, then reconvert when ready to display. Too big to fit with : Too big to fit with : Too big to fit with : Too big to fit with : Too big to fit with : Too big to fit with : &[ON];

    Optional Link URL:
    Link Title:
    Optional Image URL:
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[footer];&[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Message Verify: &[subject];

    &[crlf];&[OFF]; &[ON];
      Please verify this posting content before it is posted.

      &[crlf];&[OFF]; &[ON];Name: &[name];
      &[crlf];&[OFF]; &[ON];E-Mail: &[email];
      &[crlf];&[OFF]; &[ON];Subject: &[subject];
      &[crlf];&[OFF]; &[ON];Body of Message:

      &[crlf];&[OFF]; &[ON];&[body];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];

    Use Your Browser's [Back]; Button To Make Changes
    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[footer];&[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Message Verify: &[subject];

    &[crlf];&[OFF]; &[ON];
      Please verify this followup content before it is posted.

      &[crlf];&[OFF]; &[ON];Name: &[name];
      &[crlf];&[OFF]; &[ON];E-Mail: &[email];
      &[crlf];&[OFF]; &[ON];Subject: &[subject];
      &[crlf];&[OFF]; &[ON];Body of Message:

      &[crlf];&[OFF]; &[ON];&[body];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];


    &[crlf];&[OFF]; &[ON];

    Use Your Browser's [Back]; Button To Make Changes
    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[footer];&[crlf];&[OFF];
    bread crumb...macros choke on tags in their data, thus convert and reconvert without macroing the raw data. &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; Allow URL's to be up to db field size, tho input box only looks 60 wide. &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Name:
    E-Mail:
    Subject:
    Message:
    Optional Link URL:
    Link Title:
    Optional Image URL:
    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON]; &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[footer];&[crlf];&[OFF];
    &[ON];&[header];

    Post A Message!

    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[title]; Search&[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    &[title]; Search

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];Choose the type(s) of information to search by. One or more may be selected.

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Search subject?
    Use start date?
    Use end date?
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Find subject containing:&[crlf];&[OFF]; &[ON];
    Start date:&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    End date:&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];
    No search criteria were specified.
    &[crlf];&[OFF]; &[ON];
    Invalid search criteria were specified.
    &[crlf];&[OFF];
    &[ON];&[crlf];&[OFF]; &[ON];&[footer];&[crlf];&[OFF];
    &[ON];&[footer];&[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Frequently Asked Questions

    &[crlf];&[OFF]; &[ON];
      Here is a brief explanation of some of the questions you may&[crlf];&[OFF]; &[ON];have about the &[title];.
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];
    Can I use html tags anywhere in my posts?
    &[crlf];&[OFF]; &[ON];
    No. You can not use HTML tags in any field except the subject or body of&[crlf];&[OFF]; &[ON];the message. The maintainer of the script has the option of&[crlf];&[OFF]; &[ON];allowing or disallowing any HTML in these two parts of your&[crlf];&[OFF]; &[ON];posting. If they disallow it, the script will just display the tags but&[crlf];&[OFF]; &[ON];not "execute" them. If they allow it, your html markup will&[crlf];&[OFF]; &[ON];appear in the posting and actually be used.
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF];
    &[ON];
    Why are there colons in the message when I&[crlf];&[OFF]; &[ON];try to post a followup?
    &[crlf];&[OFF]; &[ON];
    Colons appear in the message dialog box when you try to&[crlf];&[OFF]; &[ON];followup up on a message to indicate that those lines are quoting&[crlf];&[OFF]; &[ON];the previous document. The owner of the &[title]; can decide&[crlf];&[OFF]; &[ON];whether they wish to enable or disable the quoting of previous&[crlf];&[OFF]; &[ON];messages.
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF];
    &[ON];
    Why didn't my post show up?
    &[crlf];&[OFF]; &[ON];
    Your post most likely did not show up because your browser&[crlf];&[OFF]; &[ON];did not reload the page, it simply pulled it out of cache. Please&[crlf];&[OFF]; &[ON];reload your browser and it should then appear.
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF];
    &[ON];
    Where can I get the script for this program?
    &[crlf];&[OFF]; &[ON];
    The script is written in Miva and was created by Simple|Net.&[crlf];&[OFF]; &[ON];Enjoy!
    &[crlf];&[OFF];
    &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Message Added: &[subject];

    &[crlf];&[OFF]; &[ON];
      The following information was added to the &[title];:

    &[crlf];&[OFF]; &[ON];

      Name: &[name];
      &[crlf];&[OFF]; &[ON]; E-Mail: &[email];
      &[crlf];&[OFF]; &[ON]; Subject: &[subject];
      &[crlf];&[OFF]; &[ON]; Body of Message:

      &[crlf];&[OFF]; &[ON];&[body];

      &[crlf];&[OFF]; &[ON];Link: &[message_url_title];
      &[crlf];&[OFF];
      &[ON];Image:
      &[crlf];&[OFF];
      &[ON];Added on Date: &[print_date];

    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];[ &[crlf];&[OFF]; &[ON];[ &[crlf];&[OFF]; &[ON];Go to Your Message ]
    &[crlf];&[OFF]; &[ON];&[footer];&[crlf];&[OFF];
    &[ON];&[header];&[crlf];&[OFF]; &[ON];

    ERROR: No Name

    &[crlf];&[OFF]; &[ON];

    You forgot to fill in the 'Name' field in your posting.&[crlf];&[OFF]; &[ON];Correct it below and re-submit. The necessary fields are: Name, Subject, and Message.&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    ERROR: Illegal Character in Name

    &[crlf];&[OFF]; &[ON];

    You have used a character that is not allowed in the 'Name' field.&[crlf];&[OFF]; &[ON];Only letters, numbers, blanks, and underscores are allowed.&[crlf];&[OFF]; &[ON];Correct it below and re-submit.&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    ERROR: No Subject

    &[crlf];&[OFF]; &[ON];

    You forgot to fill in the 'Subject' field in your posting.&[crlf];&[OFF]; &[ON];Correct it below and re-submit. The necessary fields are: Name, Subject, and Message.&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    ERROR: Subject Links Ignored

    &[crlf];&[OFF]; &[ON];

    Links are ignored in the 'Subject' field.&[crlf];&[OFF]; &[ON];Your posting contains nothing but a link.&[crlf];&[OFF]; &[ON];Correct it below and re-submit.&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    ERROR: No Message

    &[crlf];&[OFF]; &[ON];

    You forgot to fill in the 'Message' field in your posting.&[crlf];&[OFF]; &[ON];Correct it below and re-submit. The necessary fields are: Name, Subject, and Message.&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    ERROR: Not Accepting Postings

    &[crlf];&[OFF]; &[ON];

    Sorry, we are currently&[crlf];&[OFF]; &[ON]; not accepting postings from IP address &[REMOTE_ADDR];.
    &[crlf];&[OFF]; &[ON];If you feel that this is in error, please&[crlf];&[OFF]; &[ON]; contact the board administrator.&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];ERROR! Undefined.&[crlf];&[OFF];
    ###################################################################### # Convert tags to long form. E.g. becomes <xxx> # # # # This is necessary because Internet Explorer won't display textareas with # # their HTML intact, but rather "executes" it as HTML. So we have to convert # # HTML to harmless display form for display, and then back to active form # # when receiving the textarea as submitted in a form for storage and actual use.# # # ##################################################################### ###################################################################### # Convert tags to short form. E.g. <xxx> becomes # # # # This is necessary because Internet Explorer won't display textareas with # # their HTML intact, but rather "executes" it as HTML. So we have to convert # # HTML to harmless display form for display, and then back to active form # # when receiving the textarea as submitted in a form for storage and actual use.# # # ##################################################################### &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON]; &[ON];&[crlf];&[OFF]; &[ON];
    Name:
    E-Mail:
    Subject:&[form_subject];&[crlf];&[OFF]; &[ON];
    Subject:
    Message:&[crlf];&[OFF]; &[ON];
    Optional Link URL:
    Link Title:
    Optional Image URL:
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[footer];&[crlf];&[OFF];
    The following indices are used in admin processing. We need the database records sorted in selfnum sequence (= date sequence) and author sequence (and by date within author), ascending, respectively. Put in a special record (selfnum = super_root value) to serve as the super-root for the main page. It also contains the count of records, used for assigning a record number to each new posting (the selfnum). To omit msg when deleting db that exists. The super root's parent field will be used to hold the value of last_rootnum, the current number of active roots. This is not ideal, but avoids having to pass last_rootnum between pages as a parm. This in turn avoids having it as part of the URL for messages on the main board page. If it were part of the URL, visited links would keep getting reset to their unvisited color every time a new root is added and a viewer comes back to the main board page. Won't be seen immediately So sorts last ###################################################################### # Message Board Admin # # # ###################################################################### Not scrolling ###################################################################### # Change Installation Settings # # # # This form is used to change Message Board variables such as the time zone, # # the number of main postings to show at a time, and so on. The administrator # # must supply a password after the first time. # # # ##################################################################### &[ON];&[header];&[crlf];&[OFF]; &[ON];

    &[title2]; - Change Configuration Settings

    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];

    Use this Change Settings form to change configuration variable settings. If you want to&[crlf];&[OFF]; &[ON];see the default settings, click the "Show Defaults" button below.

    &[crlf];&[OFF]; &[ON];This and other Admin functions are available through the main Admin menu.&[crlf];&[OFF]; &[ON];Click here to visit the &[title2]; Main Menu.&[crlf];&[OFF]; &[ON];To view the message board, click on &[title];.&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Admin Page Settings
    Main Postings per Page in Remove by ThreadHow many main threads per page, with all their followups?
    Entries per Page in Remove by Message NumberHow many message numbers should be shown per page?
    Entries per Page in Remove by DateHow many dates should be shown per page?
    Entries per Page in Remove by AuthorHow many authors should be shown per page?
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Message Board Settings
    Main Postings per Page in Message BoardHow many top level topics per page, with all their followups?
    Time ZoneRelative to GMT (e.g. Pacific is -8).
    Show FAQ?Show a link to the FAQ page on user pages?&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Quote Text?Add lines of the message to the reply comment area, preceded by colons?&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Use Time?Include time of day in postings (or just date)?&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Preview Posting?Show a preview of a posting so user can change their mind?&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Allow GIF's in Message Form?Allow user to specify an optional image URL in post forms?&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Allow HTML in Message Body?Allow user to include HTML tags in messages? If you disable this,&[crlf];&[OFF]; &[ON];you may want to explain this to users on post forms.&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Allow HTML in Subject Line?Allow user to include HTML tags (except links) in subject lines?&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Subject Line in Follow-Up Form0 = Quote original subject, line is editable; 1 = Quote original subject, not editable;&[crlf];&[OFF]; &[ON];2 = Do not quote original subject, editable.
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Application TitleUsed in page headings and link labels.
    HeaderHeader for all pages.
    FooterFooter for all pages.
    Link LineIf you want to supply your own link line, do it here.
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];
    Message Board created by Simple|Net.
    &[crlf];&[OFF]; &[ON];
    &[footer];&[crlf];&[OFF]; ############################################################################## # Remove by Thread # # This option is useful to see how the threads appear in the # # Message Board. It can give you a better idea of whether or # # not you want to remove the whole thread or just part of it. # ############################################################################# Actually, seqnum of record immediately after last posting on page, unless at eof. But this doesn't matter, since that next rec wasn't shown, and we're only interested in postings marked for removal. It just tells filter when to stop reading database. roots to view, root just on &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Remove Messages from &[title]; by Thread

    &[crlf];&[OFF]; &[ON];
      Select below to remove those postings that you wish to remove.&[crlf];&[OFF]; &[ON];A thread consists of a posting and all of its followups, if any. The posting&[crlf];&[OFF]; &[ON];need not be a main posting.&[crlf];&[OFF]; &[ON];Checking the checkbox next to the posting number will mark the whole thread for removal.

      &[crlf];&[OFF]; &[ON];These messages have been left unsorted, so that you can see the order in&[crlf];&[OFF]; &[ON];which they appear in the main page. This will give you an idea of&[crlf];&[OFF]; &[ON];what the threads look like and is often more helpful than the sorted method&[crlf];&[OFF]; &[ON];(remove by message number).&[crlf];&[OFF]; &[ON];

      Note: postings removed here will be logically removed. That is,&[crlf];&[OFF]; &[ON];they will no longer be displayed. To physically remove them, you must run&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];Compress Database.

      &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];[ Remove by Thread ] &[crlf];&[OFF]; &[ON];[ Remove by Message Number ] &[crlf];&[OFF]; &[ON];[ Remove by Date ] &[crlf];&[OFF]; &[ON];[ Remove by Author ] &[crlf];&[OFF]; &[ON];[ &[title2]; ]&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF];
    &[ON];
    XPost #SubjectAuthorDate
    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON]; &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[footer];&[crlf];&[OFF];
    &[ON];&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON]; &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[footer];&[crlf];&[OFF];
    &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[disp_selfnum];&[crlf];&[OFF]; &[ON];&[indent_string];&[dbsubject];&[crlf];&[OFF]; &[ON];&[dbname1];&[print_date];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF];
    ################################################################ # Remove By Number # # This method is useful to see in what order the messages were # # added to the Message Board. # ############################################################### ##################################################################################### # Find the starting point for scrolling in Removal pages. # # # # The other removal functions display in the opposite direction in time from remove # # by thread, so they use a different starting entry variable and different button logic. # # # #################################################################################### &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Remove Messages from &[title]; by Number

    &[crlf];&[OFF]; &[ON];
      Select below to remove those postings you wish to remove.&[crlf];&[OFF]; &[ON];Checking the checkbox under "Remove?" will mark the whole thread for removal.&[crlf];&[OFF]; &[ON];Any followups of a posting marked for removal will also be removed.&[crlf];&[OFF]; &[ON];

      Note: postings removed here will be logically removed. That is,&[crlf];&[OFF]; &[ON];they will no longer be displayed. To physically remove them, you must run&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];Compress Database.

      &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF];&[crlf];&[OFF]; ###################################################################### # Remove By Date # # Using this method allows you to delete all messages posted on # # a certain date. # ##################################################################### Message number order is also date order, so same index used. &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; Start with 1st entry If 1st rec via index, no prev button. EOF also occurs pre-rec1. &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Remove Messages from &[title]; by Date

    &[crlf];&[OFF]; &[ON];
      Select below to remove those postings you wish to remove.&[crlf];&[OFF]; &[ON];Checking the checkbox beside a date will mark for removal all postings &[crlf];&[OFF]; &[ON];that occurred on that date.&[crlf];&[OFF]; &[ON];Any followups of a posting marked for removal will also be removed.&[crlf];&[OFF]; &[ON];

      Note: postings removed here will be logically removed. That is,&[crlf];&[OFF]; &[ON];they will no longer be displayed. To physically remove them, you must run&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];Compress Database.

      &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];
    Remove?Post # Subject Author Date
    &[date_save];&[msg_count];&[crlf];&[OFF]; &[ON];&[yy];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF];&[crlf];&[OFF]; ' $ disp_selfnum $ ''}"> ##################################################################################### # Find the starting point for scrolling in author removal pages. # # # # Multiple records in sequence can have the same author, so don't count records when scrolling,# # but *entries* (i.e. distinct authors). When scrolling to the previous page, find the # # start_item for the current page and back up n entries. For forward scrolling, find the # # end_item for the current page and move forward to the next entry. # #################################################################################### Start with 1st entry If 1st rec via index, no prev button. EOF also occurs pre-rec1. ######################################################################### # Remove By Author # # This option makes a list of all known authors and then groups # # together their postings and allows you to remove them all at once. # ######################################################################## &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Remove Messages from &[title]; by Author

    &[crlf];&[OFF]; &[ON];
      Checking the checkbox beside the name of an author will mark for removal&[crlf];&[OFF]; &[ON];all postings which that author has created.&[crlf];&[OFF]; &[ON];Any followups of a posting marked for removal will also be removed.&[crlf];&[OFF]; &[ON];

      Note: postings removed here will be logically removed. That is,&[crlf];&[OFF]; &[ON];they will no longer be displayed. To physically remove them, you must run&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];Compress Database.

      &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];
    Remove?Date# of MessagesMessage Numbers
     &[author_save]; &[msg_count];&[crlf];&[OFF]; &[ON];&[yy];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; ################################################################# # Provide Username and Password # # To use admin, user must provide name and password matching # # stored values. # ################################################################ &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Welcome to Message Board Administration!

    &[crlf];&[OFF]; &[ON];
    Please provide your user name and password below. All admin functions&[crlf];&[OFF]; &[ON];require name and password.&[crlf];&[OFF]; &[ON];


    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];

    Remove?Author# of MessagesMessage #'s
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Username:
    Password:
    &[crlf];&[OFF]; &[ON];


    &[footer];&[crlf];&[OFF];
    &[ON];
    &[footer];&[crlf];&[OFF];
    ########################################################################## # First time in, show welcome and continue button. # ######################################################################### &[ON];Message Board&[crlf];&[OFF]; &[ON];

    Welcome to Message Board Administration!

    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];



    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];
    &[footer];&[crlf];&[OFF]; ################################################################# # Provide Username and Password # # The first time in, the admin must set up his or her password. # ################################################################ &[ON];Message Board&[crlf];&[OFF]; &[ON];

    Welcome to Message Board Administration!

    &[crlf];&[OFF]; &[ON];
      Fill out the form below to provide your user name and password.&[crlf];&[OFF]; &[ON];Please make a note of these values. All admin functions require name and password.&[crlf];&[OFF]; &[ON];

      To use Message Board Admin after this, make sure you &[crlf];&[OFF]; &[ON];bookmark this page now.

      &[crlf];&[OFF]; &[ON];

      You may create multiple message boards. Make one copy of this ".mv" file for each&[crlf];&[OFF]; &[ON];message board, and name each ".mv" file uniquely. The .mv file(s) can be anywhere&[crlf];&[OFF]; &[ON];under your Documents directory.&[crlf];&[OFF]; &[ON];


    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Username:
    Password:
    Re-type Password:
    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];
    &[footer];&[crlf];&[OFF];
    &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Compress Database

    &[crlf];&[OFF]; &[ON];
      Use this feature to remove database records that have &[crlf];&[OFF]; &[ON];been marked for deletion since the last compression. This will reduce the &[crlf];&[OFF]; &[ON];size of the database and improve the speed of the board functions.&[crlf];&[OFF]; &[ON];The compression process&[crlf];&[OFF]; &[ON];may take a long time. The larger the database, the longer it takes.&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[title2]; Main Menu
    &[crlf];&[OFF]; &[ON];
    &[footer];&[crlf];&[OFF];
    &[ON];&[header];&[crlf];&[OFF]; &[ON];

    IP Blocking

    &[crlf];&[OFF]; &[ON];
      Visitors whose IP is in this list cannot post.
      &[crlf];&[OFF]; &[ON];Checking the checkbox under "Remove?" will mark the IP address for removal.&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF];
    &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Remove?
     &[ip]; 

    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    Add the following IP addresses:

    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];
    &[title2]; Main Menu
    &[crlf];&[OFF]; &[ON];
    &[footer];&[crlf];&[OFF];
    ################################################################# # Change Identity # # By calling this section of the script, the admin can change his or # # her password. # ################################################################ &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Change &[title]; Admin
    User Name or Password

    &[crlf];&[OFF]; &[ON];
    Fill out the form below to change your user name or password.&[crlf];&[OFF]; &[ON];If new user name is left blank, your old one will be assumed.
    &[crlf];&[OFF]; &[ON];


    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];&[crlf];&[OFF]; &[ON];
    User Name:
    Password:
    New User Name:
    New Password:
    Re-type New Password:
    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];
    &[title2]; Main Menu
    &[crlf];&[OFF]; &[ON];
    &[footer];&[crlf];&[OFF];
    Show Defaults If "showmain+1" is in linkline, insert title after it. ' CIN form_linkline}">
    ' }"> ' $ links $ '
    '}">
    ################################################################# # Remove Action # # This function is used by the options remove_by_thread, # # remove_by_num, remove_by_date, and remove_by_author. # # # # Go through only those database records in the range of those # # postings appearing on the page just displayed. If the posting # # is marked for deletion, remove it and its tree and all associated # # message text files, and decrement all of its ancestors' count # # of descendents by the size of its tree + 1 (for itself). # ################################################################ If checked for removal X's tree + x itself Bypass super root If checked for removal Don't update super-root's count -- that affects new selfnum's Update all ancestors' count of descendents (except super_root). Update super_root parent field (= root-count). If posting already deleted during deletion of an ancestor, don't try to delete it again. If admin forgot password, we delete just passwd file, they get welcome page, they fill in info, should get admin menu --- this won't happen if action still set to "provide_identity", so clear it now. Go thru list, see if ip checked (for removal), remove (by *not* writing it back out). Otherwise, write ip out. Check ip_address1-5 and if filled, add to list. If changed or not, new_usrname has curr val &[ON];&[header];&[crlf];&[OFF]; &[ON];

    &[title]; Administration

    &[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];
        &[crlf];&[OFF]; &[ON];
      • Change Configuration Settings&[crlf];&[OFF]; &[ON];
        &[crlf];&[OFF]; &[ON];
      • Remove Messages&[crlf];&[OFF]; &[ON];
        &[crlf];&[OFF]; &[ON];
      • Remove Database Records Marked for Deletion&[crlf];&[OFF]; &[ON];
        &[crlf];&[OFF]; &[ON];
      • Edit List of Unwelcome IP Addresses&[crlf];&[OFF]; &[ON];
          &[crlf];&[OFF]; &[ON];
        • Block IP's&[crlf];&[OFF]; &[ON];

        &[crlf];&[OFF]; &[ON];
      • Change User Name or Password&[crlf];&[OFF]; &[ON];
        &[crlf];&[OFF]; &[ON];
      • View &[title];&[crlf];&[OFF]; &[ON];
          &[crlf];&[OFF]; &[ON];
        • &[title];&[crlf];&[OFF]; &[ON];
        &[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];
    &[footer];&[crlf];&[OFF];
    &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Results of &[title]; Removal by Thread

    &[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Results of &[title]; Removal by Number

    &[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Results of &[title]; Removal by Date

    &[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    Results of &[title]; Removal by Author

    &[crlf];&[OFF]; &[ON];&[header];&[crlf];&[OFF]; &[ON];

    &[title]; Admin Identity Changed

    &[crlf];&[OFF]; &[ON];
      Your Identity for &[title]; Admin has been changed! Results are below:


      &[crlf];&[OFF]; &[ON];User Name: &[new_usrname];

      &[crlf];&[OFF]; &[ON];Password: &[passwd_1];

      &[crlf];&[OFF]; &[ON];


      &[crlf];&[OFF]; &[ON];Do not forget these, since they are now encoded in a file and not readable!.

    &[crlf];&[OFF]; &[ON];
    [ &[title2]; ]

    &[crlf];&[OFF]; &[ON];
    &[footer];&[crlf];&[OFF];
    &[ON];
    Below is a short summary of what messages were removed from the main page and the&[crlf];&[OFF]; &[ON];&[mesgdir]; directory. All files that the script attempted to remove were removed,&[crlf];&[OFF]; &[ON];unless there is an error message stating otherwise.


    &[crlf];&[OFF]; &[ON];

    Messages Removed:&[crlf];&[OFF]; &[ON];&[w2];&[longspace];&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];Messages That Could Not Be Deleted:&[crlf];&[OFF]; &[ON];&[w2];&[longspace];&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];Messages Not Found:&[crlf];&[OFF]; &[ON];&[w2];&[longspace];&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];


    &[crlf];&[OFF]; &[ON];[ Remove by Thread ] &[crlf];&[OFF]; &[ON];[ Remove by Message Number ] &[crlf];&[OFF]; &[ON];[ Remove by Date ] &[crlf];&[OFF]; &[ON];[ Remove by Author ] &[crlf];&[OFF]; &[ON];[ &[title2]; ]&[crlf];&[OFF]; &[ON];
    &[crlf];&[OFF]; &[ON];
    &[footer];&[crlf];&[OFF];
    &[ON];

    You entered an invalid password.&[crlf];&[OFF]; &[ON];Please try again.

    &[crlf];&[OFF]; &[ON];

    You entered an invalid user name.&[crlf];&[OFF]; &[ON];Please try again.

    &[crlf];&[OFF]; &[ON];

    Blanks are not permitted in the user name.&[crlf];&[OFF]; &[ON];Please try again.

    &[crlf];&[OFF]; &[ON];

    Blanks are not permitted in the password.&[crlf];&[OFF]; &[ON];Please try again.

    &[crlf];&[OFF]; &[ON];

    You did not enter a new user name or password.&[crlf];&[OFF]; &[ON];Please try again.

    &[crlf];&[OFF]; &[ON];

    You did not enter a password. Please try again.&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    Could not open the password file for reading!&[crlf];&[OFF]; &[ON];Check permissions and try again.

    &[crlf];&[OFF]; &[ON];

    The passwords that you typed in for your new password&[crlf];&[OFF]; &[ON];were not the same. You may have mistyped, please try again.

    &[crlf];&[OFF]; &[ON];

    The two passwords you typed were not the same.&[crlf];&[OFF]; &[ON];Please try again.

    &[crlf];&[OFF]; &[ON];

    Could not open the password file for writing!&[crlf];&[OFF]; &[ON];Password not changed!

    &[crlf];&[OFF]; &[ON];

    You did not fill in your user name.&[crlf];&[OFF]; &[ON];

    &[crlf];&[OFF]; &[ON];

    You must fill in the user name that you want&[crlf];&[OFF]; &[ON];to use for administration.

    &[crlf];&[OFF];
    ################################################## # Subroutine used for Welcome name/password checking only. # #################################################