Synchronet v3.19b-Win32 (install) has been released (Jan-2022).

You can donate to the Synchronet project using PayPal.

This is an old revision of the document!


Callinfo.bbs

External Program Data File (a.k.a. drop file), CALLINFO.BBS format from the RBBS software.

This file should normally be created in the current node's directory (example: C:\sbbs\node1). The current node's directory can be easily passed to external programs via command line (using the %n command line specifier in SCFG) or more easily retrieved by external programs be reading the SBBSNODE environment variable.

The CALLINFO.BBS is a plain text file consisting of CRLF-delimited lines, parsed one line at a time.

Line Example Description Comment
01 Jim Harrer
02 5
03 Bakersfield, CA
04 1000
05 120
06 MONO
07 WCATIS#1
08 1
09 0
10 12:44
11 12:44 05/08/89 {Changed in v2.0 }
12 ABCDEFGHIJKLMNOYZ
13 0
14 100
15 0
16 10
17 555-555-5555
18 05/08/89 12:44
19 NOVICE
20 All
21 04/24/89
22 190
23 23
24 808
25 0
26 2
27 8 { Databits }
28 LOCAL
29 COM0
30 06/26/58
31 38400
32 FALSE
33 Normal Connection
34 05/08/89 13:44
35 1
36 0

Datastructure

Most of the original software was written in Pascal. This is a routine to write the file (in Pascal)

procedure Save_Caller_Info;

{ Save the callers information when exiting to a live program or
  Dropping to DOS from remote. }
var
  FileOut        : Text;
  DateTime       : String;
  OldSlash       : Char;
begin
  Assign(FileOut, HomePath+'CALLINFO.BBS');
  Rewrite(FileOut);
  CheckError('Rewriting CALLINFO.BBS');
  Update_User_Info_Before_LogOff;
  with User do
    begin
      OldSlash := SlashChar;
      SlashChar := '/';
      WriteLn(FileOut, UserName);                                  { Line 1 }
      case Baud of
        B300 : WriteLn(FileOut, '1');                              { Line 2 }
        B1200 : WriteLn(FileOut, '2');
        B2400 : WriteLn(FileOut, '0');
        B9600 : WriteLn(FileOut, '3');
        B19200 : WriteLn(FileOut, '4');
        BLocal : WriteLn(FileOut, '5');
      end;
      WriteLn(FileOut, CallingFrom);                               { Line 3 }
      WriteLn(FileOut, SecurityLevel);                             { Line 4 }
      WriteLn(FileOut, User.TimeLeft);                             { Line 5 }
      if ColorMenus then WriteLn(FileOut, 'COLOR')
      else                                                         { Line 6 }
        WriteLn(FileOut, 'MONO');
      WriteLn(FileOut, Password);                                  { Line 7 }
      WriteLn(FileOut, UserRefNum);                                { Line 8 }
      WriteLn(FileOut, TimeOn);                                    { Line 9 }
      WriteLn(FileOut, TimeStr);                                  { Line 10 }
      with DateTimeCalled do
        DateTime := TimeToTimeString('hh:mm', T)+' '+DatetoDateString('mm/dd/yy', D);
      WriteLn(FileOut, DateTime);                                 { Line 11 }
      WriteLn(FileOut, ConfJoined);                               { Line 12 }
      WriteLn(FileOut, DailyDL);                                  { Line 13 }
      WriteLn(FileOut, Cfig.SecMaxDL[Array_Level]);               { Line 14 }
      WriteLn(FileOut, Sc(DailyDK));                              { Line 15 }
      WriteLn(FileOut, Sc(Cfig.SecMaxDK[Array_Level]/1024));      { Line 16 }
      WriteLn(FileOut, User.PhoneNumber);                         { Line 17 }
      WriteLn(FileOut, DatetoDateString('mm/dd/yy', TimeDate.D)+Space+
              TimeToTimeString('hh:mm', TimeDate.T));             { Line 18 }
      if User.Xpert = Novice then WriteLn(FileOut, 'NOVICE')
      else                                                        { Line 19 }
        WriteLn(FileOut, 'EXPERT');
      case User.TransferMethod of                                 { Line 20 }
        All : WriteLn(FileOut, 'All');
        Ymodem : WriteLn(FileOut, 'Ymodem');
        YmodemG : WriteLn(FileOut, 'Ymodem/G');
        Xmodem : WriteLn(FileOut, 'Xmodem');
        XmodemCRC : WriteLn(FileOut, 'Xmodem/CRC');
        Xmodem1K : WriteLn(FileOut, 'Xmodem-1K');
        Xmodem1KG : WriteLn(FileOut, 'Xmodem-1K/G');
        ASCii : WriteLn(FileOut, 'Ascii');
      end;
      WriteLn(FileOut, DatetoDateString('mm/dd/yy', LastNew.D));  { Line 21 }
      WriteLn(FileOut, Sc(TimesOn));                              { Line 22 }
      WriteLn(FileOut, Sc(LinesPerPage));                         { Line 23 }
      WriteLn(FileOut, Sc(UsersHighestMsgRead(HighMsg, ConfJoined))); { Line 24 }
      WriteLn(FileOut, Sc(Uploads));                              { Line 25 }
      WriteLn(FileOut, Sc(Downloads));                            { Line 26 }
      if DataBits = SevenBits then WriteLn(FileOut, '7  { Databits } ')
      else WriteLn(FileOut, '8  { Databits }');                   { Line 27 }
      if Local then WriteLn(FileOut, 'LOCAL')
      else WriteLn(FileOut, 'REMOTE');                            { Line 28 }
      WriteLn(FileOut, 'COM'+Sc(Cfig.CommPort));                  { Line 29 }
      WriteLn(FileOut, DatetoDateString('mm/dd/yy', BirthDate));  { Line 30 }
      { Write Comm Port Speed }
      if Cfig.FixedRate then WriteLn(FileOut, Cfig.BaudInit)
      else
        WriteLn(FileOut, BaudRate);                               { Line 31 }
      WriteLn(FileOut, AlreadyConnected);                         { Line 32 }
      if MNP_Connection then WriteLn(FileOut, 'MNP/ARQ Connection')
      else WriteLn(FileOut, 'Normal Connection');                 { Line 33 }
      with GlobalNinfo.TimeOff do
        DateTime := DatetoDateString('mm/dd/yy', D)+' '+TimeToTimeString('hh:mm', T);
      WriteLn(FileOut, DateTime);                                 { Line 34 }
      WriteLn(FileOut, Cfig.NodeID);                              { Line 35 }
      WriteLn(FileOut, DoorNumber);                               { Line 36 }
      SlashChar := OldSlash;
    end;                                                             { With }
  Close(FileOut);
  CheckError('Closing CALLINFO.BBS File');
end;

See Also