ProBoard BBS Documentation

The Choice of Professionals

User Tools

Site Tools


Sidebar

INTRODUCTION

SUPPORT

INSTALLATION / UPGRADING

SYSTEM CONVERSIONS

STARTING PROBOARD

CONFIGURATION

SECURITY

RIPscrip GRAPHICS

FILE TAGGING

QWK

USERS

ECHOMAIL & NETMAIL

PBUTIL (The ProBoard Utility Program)

REFERENCE

TIPS & TRICKS

SOFTWARE DEVELOPMENT KIT

TELNET

EXTERNAL PROGRAMS / DOORS

External

proboard_file_structures

ProBoard File Structures

This document describes the file structures used by ProBoard v2.15-v2.30. For information on the structures of the RemoteAccess compatible files, refer to the RemoteAccess structures document. It can be obtained from http://pcmicro.com/ra/ra-y2k-2.zip

The data-structures are C-structures, this means:

Strings are stored as an array of characters, terminated by a 0.
A date is stored as 3 bytes (day,month,year)
A time is stored as 3 bytes (hour,min,sec)

The 'accessflags' are stored in a long integer, with bit 31 being flag 'A', bit 30 flag 'B' , … Bit 5 is flag '1', bit 4 is flag '2', etc… I know this doesn't sound logical, but we had some good reasons for doing this :-).

The combined boards are stored in 125 bytes (1000 bits). One bit per message area.

typedef unsigned short word;
typedef unsigned long  dword;
typedef unsigned char  byte;
typedef unsigned long  accessflags;
typedef unsigned char  combinedboards[125];
typedef unsigned char  bool;
typedef unsigned char  Time[3];
typedef unsigned char  Date[3];
typedef unsigned char  TimeFrame[7][6];
typedef struct
  {
    byte periods[7][6];    7x48 periods of 1/2 hour = one week 
  }
  TimeFrame;
typedef struct
  {
    word         minLevel;               0 =           don't care     
    word         maxLevel;               0 =           don't care     
    accessflags  flags;                  All off =     don't care     
    accessflags  flagsNot;               All off =     don't care     
    byte         minAge;                 0 =           don't care     
    byte         maxAge;                 0 =           don't care     
    byte         sex;                    0 =           don't care     
    word         minTimeLeft;            0 =           don't care     
    word         minTimeOnline;          0 =           don't care     
    TimeFrame    timeFrame;              All on =      don't care     
    byte         terminals;              0xFF =        don't care     
    dword        minSpeed;               0 =           don't care     
    dword        maxSpeed;               0 =           don't care     
    byte         extra[50];              Extra space                  
  }
  AccessRecord;

USERSPB.BBS

This file is tied to the files USERS.BBS and USERSXI.BBS. The records are stored in the same order as the records in USERS.BBS. The name of the user is duplicated in this file, so it is possible to fix the userfile after using a third-party userfile packer/sorter, which does not know about USERSPB.BBS.

struct UsersPbBBS
   {
      char           name[36];
      char           country[26];
      char           state[26];
      char           faxPhone[16];
      char           passWord[16];
      char           language[9];
      Date           lastPwdChange;
      Date           lastNewFilesCheck;
      short          logLevel;
      short          tbTimeBalance;
      short          tbKbBalance;
      short          tbTimeWithdrawn;
      short          tbKbWithdrawn;
      word           tbTimeDeposited;
      word           tbKbDeposited;
      word           tbTimeLoaned;
      word           tbKbLoaned;
      Date           tbTimePayback;
      Date           tbKbPayback;
      Date           tbLastUsed;
      word           expLevel;
      accessflags    expFlagsOn;
      accessflags    expFlagsOff;
      dword          uFlags;
      combinedboards mailCheckBoards;
      dword          totalTimeUsed;
      word           qwkMaxMsgsPerArea;
      word           qwkMaxMsgs;
      byte           qwkArchiver;
      byte           ripFont;
      byte           checkMail;
      byte           checkNewFiles;
      byte           extra[398];
  };

These are the extra user-flags for 'uFlags':

#define RA_UFLAG_NOIBM        1
#define RA_UFLAG_NOTOPS       2
#define RA_UFLAG_AVTPLUS      4
#define RA_UFLAG_ATTEN        8
#define RA_UFLAG_NORIP       16
#define RA_UFLAG_MULTILOGIN  32
#define RA_UFLAG_FREECHAT    64
#define RA_UFLAG_LOCALONLY  128

CONFIG.PRO

struct CONFIG_PRO
   {
      char        shellmsg[81];          Message to show when shelling                
      char        sysopname[36];         Name of sysop                                
      char        txtpath[61];           Path for textfiles                           
      char        mnupath[61];           Path for menu-files                          
      char        msgpath[61];           Path for message base                        
      char        uploadpath[61];        Uploadpath                                   
      char        editorname[61];        Name of external editor                      
      word        newuserlevel;          Level for new user                           
      short       newuserloglevel;       Loglevel for new user                        
      accessflags newuserflags;          New user flags                               
      short       max_passinput;         Maximum attempts for password entry          
      short       min_passlength;        Minimum password length                      
      short       inactivity_time;       Inactivity time-out limit                    
      short       max_sysop_pages;       Maximum times sysop can be paged             
      short       pagebell_length;       Length of page-bell (secs)                   
      short       mailcheck;             Check for mail at logon?                     
      short       europe;                European date format?                        
      short       numnodes;              # nodes                                      
      bool        allowansi;             Allow ANSI?                                  
      bool        allowavatar;           Allow AVATAR?                                
      short       discrete;              Hide sysop activity?                         
      short       askphone;              Ask for phone number?                        
      short       allowoneword;          Allow one-word names                         
      unsigned    crashlevel;            Level needed for crashmail                   
      accessflags crashflags;            Flags needed for crashmail                   
      word        attachlevel;           Level needed for file attach                 
      accessflags attachflags;           Flags needed for file attach                 
      short       allowmsgupload;        Allow message uploads                        
      short       allowstacking;         Allow command stacking                       
      Time        page_start;            Paging hours start                           
      Time        page_end;              Paging hours end                             
      short       handshaking;           I/O Handshaking                              
      short       allowalias;            Allow alias for login                        
      short       loglocal;              Log local calls                              
      short       doswap;                Allow swapping                               
      char        originline[61];        Origin line                                  
      char        nodelistdir[61];       Nodelist directory                           
      char        sysopkeys[10][60];     Sysop hotkeys                                
      Time        dl_start;              Download hours start                         
      Time        dl_end;                Download hours end                           
      short       uploadspace;           Space needed for uploads                     
      char        pvtuploadpath[61];     Directory for files uploads                  
      char        quotestring[6];        String used for quoting                      
      bool        fastmode;              Use fast mode                                
      bool        extra_bool_1;
      bool        killsent;              Kill netmail after sent                      
      bool        multiline;             Use message base sharing?                    
      bool        egamode;               Use 43/50 line mode                          
      bool        showuserinfo;          Show user info while in EGA mode?            
      char        pexpath[61];           Directory for PEX files                      
      bool        allowquicklogin;       Allow quick sysop login?                     
      bool        suspendmsgtime;        Suspend time when writing msgs               
      short       securityboard;         MsgBoard for security messages               
      bool        pwdmessages;           Write security-messages?                     
      bool        extra_bool_2;
      char        bbsname[36];           Name of the BBS                              
      char        pwdchar;               Password character                           
      short       tb_maxtimedeposit;     Max time deposit per day (TimeBank)          
      short       tb_maxkbdeposit;       Max Kbytes deposit per day (TimeBank)        
      short       tb_maxtimewithdrawal;  Max time withdrawal per day (TimeBank)       
      short       tb_maxkbwithdrawal;    Max Kbytes withdrawal per day (TimeBank)     
      short       usage_days;            Days to keep usage graphs                    
      char        systempwd[16];         System password                              
      bool        usesystempwd;          Use system password?                         
      bool        askbirthdate;          Ask Birth Date?                              
      short       binlogdays;            # days to log in BINLOG.PB                   
      bool        binloglocal;           Log local calls to BINLOG.PB yes/no          
      short       pageArea;              Area number for page messages                
      bool        indexfiles;            Use file indexing                            
      bool        checkdupes;            Check for dupes                              
      bool        killdupes;             Kill duplocate files                         
      bool        ignore_ext;            Ignore file extensions for dupe checking     
      char        RIPpath[61];           Path for RIP scripts                         
      char        iconspath[61];         Path for RIP icons                           
      char        location[36];          BBS Location (city)                          
      char        phone[26];             BBS Phone #                                  
      char        QWKid[9];              BBS QWK id                                   
      word        IObuffersize;          I/O buffer size in bytes                     
      TimeFrame   pagingHours;           Paging hours                                 
      char        defaultLanguage[9];    Default language                             
      bool        addUploaderName;       Add uploader's name to FILES.BBS             
      TimeFrame   downloadHours;         Download hours                               
      bool        askdataphone;          Ask data phone #                             
      bool        askfaxphone;           Ask fax phone #                              
      bool        askaddress;            Ask mailing address                          
      bool        asksex;                Ask sex                                      
      bool        askdateformat;         Ask date format                              
      bool        askstate;              Ask state                                    
      bool        askcountry;            Ask country                                  
      short       fuzzyRate;             Fuzzy search percentage for user editor      
      bool        hidePassword;          Hide password in user editor                 
      bool        valConfirm;            Confirm user validation                      
      char        extra_char_1[17];
      char        extChat[81];           External chat program                        
      char        virScanCommand[61];    External upload scan command                 
      byte        virScanType;           External upload scan command (type)          
      char        virScanSemaphore[13];  External upload scan command (semaphore)     
      byte        listColorTag;          File list color (tag char)                   
      byte        listColorFileName;     File list color (file name)                  
      byte        listColorSize;         File list color (file size)                  
      byte        listColorDate;         File list color (file date)                  
      byte        listColorCounter;      File list color (file counter)               
      byte        listColorDesc;         File list color (description)                
      byte        listColorSeperator;    File list color (description seperator)      
      byte        listColorMissing;      File list color (missing indicator)          
      bool        hideFileCounter;       File list setup - hide file counter          
      bool        disableRIP;            TRUE = disable RIP completely                
      char        extra_char_2[81];
      byte        virScanFailedAction;   External upload scan command (action)        
      word        virScanFailedArea;     External upload scan command (failed area)   
      byte        promptColor;           Prompt color (background)                    
      bool        internalfsed;          Set to 1 if internal fsed enabled            
      char        extra[3];
   };

TIMELOG.PRO

struct TIMELOG_PRO
   {
      short       numdays;               Number of days active                        
      Date        lastdate;              Last update                                  
      long        hours[24];             # minutes per hour usage (obsolete)          
      long        days[7];               # minutes per day usage  (obsolete)          
      long        weeks[53];             # minutes per week usage (obsolete)          
      long        totalcalls;            Total calls to system                        
  };

FILECFG.PRO

struct FILECFG_PRO
   {
      char        name[80];              Name of file area                            
      char        listpath[80];          Path for file-list                           
      char        filepath[80];          Path for files                               
      word        level;                 Level needed for access                      
      long        flags;                 Flags needed for access                      
      char        type;                  1 = CDROM File listing type                  
      short       maxfiles;              Max files per day in this area downloadable  
      short       maxkb;                 Max Kbytes per day in this area              
      bool        notops;                Set to 1 -> should not be listed in TOPFILES 
      bool        free;                  Set to 1 -> free area                        
      byte        groups[4];             Groups belonging to                          
      bool        allGroups;             Belongs to all groups                        
      byte        minAge;                Minimum age                                  
      long        flagsNot;              Access flags not allowed                     
      byte        dateFormat;            Date format (same as in user file)           
      byte        extra[2];
  };

MESSAGES.PB

struct MESSAGES_PB
   {
      word        areaNum;               # of message area (1-10000)                  
      word        hudsonBase;            Number of Hudson message base                
      char        name[81];              Name of message area                         
      byte        msgType;               Kind of message area (Net/Echo/Local)        
      byte        msgKind;               Type of message (Private only/Public only/.) 
      byte        msgBaseType;           Type of message base                         
      char        path[81];              Path to Squish or *.MSG                      
      byte        flags;                 Alias allowed/forced/prohibited              
      word        readLevel;             Minimum level needed to read msgs            
      accessflags readFlags;             flags needed to read msgs                    
      accessflags readFlagsNot;          flags non-grata to read msgs                 
      word        writeLevel;            Minimum level needed to write msgs           
      accessflags writeFlags;            flags needed to write msgs                   
      accessflags writeFlagsNot;         flags non-grata to read msgs                 
      word        sysopLevel;            Minimum level needed to change msgs          
      accessflags sysopFlags;            flags needed to change msgs                  
      accessflags sysopFlagsNot;         flags non-grata to read msgs                 
      char        origin[62];            Origin line                                  
      short       aka;                   AKA                                          
      word        rcvKillDays;           Kill received after xx days                  
      word        msgKillDays;           Kill after xx days                           
      word        maxMsgs;               Max # msgs                                   
      char        sysop[36];             Area Sysop                                   
      short       replyBoard;            Area number where replies should go          
      char        echoTag[61];           Echomail Tag Name                            
      char        qwkTag[13];            QWK Area Name                                
      byte        groups[4];             Groups belonging to                          
      bool        allGroups;             Belongs to all groups                        
      byte        minAge;                Minimum age for this area                    
      byte        extra[112];
  };
#define MSGTYPE_BOTH     0  Private/Public 
#define MSGTYPE_PVT      1  Private Only   
#define MSGTYPE_PUBLIC   2  Public Only    
#define MSGTYPE_TOALL    3  To All         
#define MSGKIND_LOCAL    0  Local          
#define MSGKIND_NET      1  NetMail        
#define MSGKIND_ECHO     2  EchoMail       
#define MSGKIND_PVTECHO  3  Pvt EchoMail   
#define MSGBASE_HUDSON   0
#define MSGBASE_SQUISH   1
#define MSGBASE_SDM      2
#define MSGBASE_JAM      3

ONLINE.PRO

struct ONLINE_PRO
   {
      char        name[36];              Name of user online                          
      char        city[16];              City of user online                          
      word        baud;                  Baud rate of user                            
      short       status;                0 -> online , <0 -> not online or unavailable
      char        extra[8];
   };

TOPS.PB

struct TOPS_PB
   {
      char        name[36];              Name of user online                                 
      dword       n;                     Data (# kb/minutes/files/etc...)                    
   };

PROTOCOL.PRO

struct PROTOCOL_PRO
   {
      char        name[50];              Name of protocol                             
      char        key;                   Hotkey for Protocol                          
      char        flags;                 Protocol behavior                            
      char        logfile[60];           Logfile from protocol                        
      char        ctlfile[60];           Control file (redirection file)              
      char        dlcom[128];            Download command line                        
      char        ulcom[128];            Upload command line                          
      char        dlstring[80];          String to place in download control file     
      char        ulstring[80];          String to place in upload control file       
      char        dlkeyword[40];         Download keyword to search for in logfile    
      char        ulkeyword[40];         Upload keyword to search for in logfile      
      short       wordnr;                File name word nr after keyword (1-..)       
  };
 

Flags:

#define PROT_BATCH   1     Batch protocol        
#define PROT_ENABLED 2     Enabled               
#define PROT_BOTH    4     Full-duplex protocol  
#define PROT_BIM     8     Bimodem-type ctl-file 
#define PROT_LOCAL  16     Local only            

LIMITS.PRO

struct LIMITS_PRO
   {
      word        level;                 Level                                        
      short       timelimit;             # minutes per day                            
      short       daily_klimit;          Kbytes per day allowed                       
      short       pre_download;          # minutes online before download             
      char        id[6];                 Usergroup ID                                 
      word        free;                  Free upload in Kb.                           
      byte        factor;                Percentage upload required                   
      word        max_download;          Max download for this level                  
      short       fallto;                Fall to level x when max. reached            
      short       msgfactor;             # Kbytes granted per message written         
      char        extra[5];
   };

MODEM.PB

struct MODEM_PB
   {
      long        maxBps;                Maximum Baud Rate                         
      long        lockedBps;             Locked Baud Rate  (not used)              
      dword       flags;                 Attributes (see below)                    
      short       port;                  COM port (1-8)                            
      short       commandDelay;          Delay in 1/10s between characters sent    
      short       answerDelay;           Delay in 1/10s before answer string sent  
      short       blankTime;             Time in seconds for screen blanker        
      char        msgCon300     [80];    Connect 300 string                        
      char        msgCon1200    [80];    Connect 1200 string                       
      char        msgCon1275    [80];    Connect 1275 string                       
      char        msgCon2400    [80];    Connect 2400 string                       
      char        msgCon4800    [80];    Connect 4800 string                       
      char        msgCon7200    [80];    Connect 7200 string                       
      char        msgCon9600    [80];    Connect 9600 string                       
      char        msgCon12000   [80];    Connect 12000 string                      
      char        msgCon14400   [80];    Connect 14400 string                      
      char        msgCon16800   [80];    Connect 16800 string                      
      char        msgCon19200   [80];    Connect 19200 string                      
      char        msgCon21600   [80];    Connect 21600 string                      
      char        msgCon24000   [80];    Connect 24000 string                      
      char        msgCon26400   [80];    Connect 26400 string                      
      char        msgCon28800   [80];    Connect 28800 string                      
      char        msgCon38400   [80];    Connect 38400 string                      
      char        msgCon57600   [80];    Connect 57600 string                      
      char        msgCon64000   [80];    Connect 64000 string                      
      char        msgCon115200  [80];    Connect 115200 string                     
      char        msgConExternal[80];    External/Fax connect string               
      char        msgRing       [80];    Ring string                               
      char        msgOk         [80];    "OK" string                               
      char        cmdInit1      [80];    Init command string 1                     
      char        cmdInit2      [80];    Init command string 2                     
      char        cmdInit3      [80];    Init command string 3                     
      char        cmdAnswer     [80];    Answer commnad string                     
      char        cmdOffHook    [80];    Off Hook command string                   
      char        cmdDown       [80];    BBS Down command string                   
      char        cmdAttention  [80];    Attention command string (usually "AT|")  
      short       externalErrorLevel;    Errorlevel for external/fax connect       
      char        msgCon31200   [80];    Connect 31200 string                      
      char        msgCon33600   [80];    Connect 33600 string                      
      char        msgCon36000   [80];    Connect 36000 string                      
      char        msgConUser1   [80];    User connect string #1                    
      long        userConBps1;           User connect bps #1                       
      char        msgConUser2   [80];    User connect string #2                    
      long        userConBps2;           User connect bps #2                       
      char        msgConUser3   [80];    User connect string #3                    
      long        userConBps3;           User connect bps #3                       
      char        msgConUser4   [80];    User connect string #4                    
      long        userConBps4;           User connect bps #4                       
      char        msgConUser5   [80];    User connect string #5                    
      long        userConBps5;           User connect bps #5                       
      char        msgConUser6   [80];    User connect string #6                    
      long        userConBps6;           User connect bps #6                       
      byte        extra[920];
   };
#define MODEM_LOCKED        (0x00000001L)
#define MODEM_MANUAL_ANSWER (0x00000002L)

BINLOG.PB

struct BINLOG_PB
   {
      Date        date;
      Time        timeIn;
      Time        timeOut;
      char        name[36];
      char        city[26];
      char        country[26];
      long        baud;
      word        node;
      long        kbDown;
      long        kbUp;
      word        yells;
      word        level;
      dword       uflags;
      char        alias[36];
      char        extra[45];
  };

FILESIDX.PB

struct FILESIDX_PB
   {
      char        filename[13];          Name of the file, with extension             
      word        area;                  File area number where file is located       
   };

FGROUPS.PB / MGROUPS.PB

struct GROUPS_PB
   {
      char        name[80];
      word        level;
      long        flags;
      long        flagsNot;
      byte        extra[10];
   };

PVTFILES.PB

struct PVTFILES_PB
   {
      Date        date;
      char        fname  [80];
      char        to     [36];
      char        from   [36];
      char        desc   [80];
      dword       attr;
      byte        extra  [61];
   };
#define PVTFILE_KEEP (0x00000001L)

*.PBM (ProBoard Menus)

#define MENU_RIP 1           menu header attribute 
struct MENU_HEADER
   {
      dword attr;   // bit 0 = RIP menu
      char prompt[200];
      byte color;
      byte highlight;
      char RIPname[9];
      byte extra[100];
   };
#define MENU_SHOWREMOTE 1    menu item attribute 
#define MENU_SHOWLOCAL  2    menu item attribute 
struct MENU_ITEM
   {
      dword attr;     // Show remote/local - reset RIP
      char text[160];
      char data[160];
      byte color;
      byte hotKey;
      word function;
      char password[16];
      AccessRecord access;
      byte extra[50];
   };

*.PBL (ProBoard Language Files)

struct LANG_HEADER
   {
      char        name[41];          Name of the language 
      bool        avail;             TRUE = Available     
      word        level;             Level needed         
      accessflags flags;             Flags needed         
      char        menuPath[61];      Path for menus       
      char        txtPath[61];       Path for text files  
      char        questPath[61];     Path for Q-A files   
      char        copyright[81];     Copyright notice     
      byte        attrib;            Attribute (not used) 
      byte        extra[500];
   };
#define LANG_PROMPT  1
#define LANG_NOCOLOR 2
struct LANG_PROMPT
  {
   word len;                Length of string (excl. terminating '\0') 
   word numHotkeys;         # Hotkeys defined                         
   byte color;              Main color                                
   byte highlight;          Highlight color                           
   byte promptcolor;        Prompt color                              
   byte flags;              Prompt/NoColor                            
  };
Each prompt consists of a LANG_PROMPT header, followed by 'len' characters
for the prompt (not including the terminating zero), followed by
'numHotkeys' characters for the hotkeys (if any).
So a language file has the following structure:
      LANG_HEADER
      LANG_PROMPT 1
      string 1
      hotkeys 1
      lANG_PROMPT 2
      string 2
      hotkeys 2
      LANG_PROMPT 3
      string 3
      hotkeys 3
      ....
proboard_file_structures.txt · Last modified: 2023/06/20 02:48 by admin