[Back to COMM SWAG index] [Back to Main SWAG index] [Original]

    {
    MG> Wanted: Phone-directory (like TELIX.FON, etc...) structures in Pascal
    MG>         format. Also what the fields can contain (e.g. 9600...155200,
    MG>         'A'...'F')

        Didn't have it and since I might have to hack my own ZOC phonebook, since I
    haven't found a utility yet that will convert from Telix to Zoc, I just decided
    to have a go at it and here is the result.
    Written, Compiled and tested on Borland Pascal 7.x.

    ##########################################################################
    #######                                                            #######
    #######   REMEMBER TO CHANGE THE PATH AND NAME FOR THE .FON FILE   #######
    #######                                                            #######
    ##########################################################################

    }

    {$A+,B-,D+,E+,F+,G+,I+,L+,N+,O+,P+,Q+,R+,S+,T+,V+,X+,Y+}
    {$M 16384,0,655360}
    Program TelixFon;
    {
     Read a Telix 3.22 Phonebook and display it one entry at a time
     The real purpose of the program is just to demonstrate that
     the structure definition is correct
    }
    uses crt;

    type

     FlagSet = set of
      (LocalEcho,
      AddLineFeeds,
      RecvBSDest,
      SendBSDel,
      StripHigh,
      Dummy32,
      Dummy64,
      Dummy128);

     TlxFonRec = record
      BbsName : array [$00..$18] of char;
      Phone : array [$00..$10] of char;
      Baud : byte;
      Parity : byte;
      DataBits : byte;
      StopBits : byte;
      Script : array [$00..$0B] of char;
      LastCall : array [$00..$05] of char;
      TotalCalls : Word;
      Terminal : byte;
      Protocol : char;
      BitField : FlagSet;
      B_85h : byte;
      B_86h : byte;
      DialPrefix : byte;
      Password : array [$00..$0D] of char;
     end;

    const
     BaudRate : array[0..8] of string =
     ('300', '1200', '2400', '4800', '9600',
     '19200', '38400', '57600', '115200');

     ParityType : array[0..4] of string =
     ('None', 'Even', 'Odd', 'Mark', 'Space');

     TerminalType : array[0..5] of string =
     ('TTY', 'ANSI-BBS', 'VT102', 'VT52', 'AVATAR', 'ANSI');

    var
     TlxFon : file;
     Entry : TlxFonRec;
     Index : word;
     BbsName   : string[$18];
     BbsPhone   : string[$10];
     BBsScript  : string[$0B];
     BbsPassword : string[$0D];
     Ch : char;

    Function Echo(Field:FlagSet) : string;

     begin
      if LocalEcho in Field then
       Echo := 'On'
      else
       Echo := 'Off';
     end;

    Function LineFeeds(Field:FlagSet) : string;

     begin
      if AddLineFeeds in Field then
       LineFeeds := 'On'
      else
       LineFeeds := 'Off';
     end;

    Function RecvBS(Field:FlagSet) : string;

     begin
      if RecvBSDest in Field then
       RecvBS := 'Off'
      else
       RecvBS := 'On';
     end;

    Function SendBS(Field:FlagSet) : string;

     begin
      if SendBSDel in Field then
       SendBS := 'Del'
      else
       SendBS := 'BS';
     end;

    Function StripHBit(Field:FlagSet) : string;

     begin
      if StripHigh in Field then
       StripHBit := 'On'
      else
       StripHBit := 'Off';
     end;

    begin
     assign(TlxFon, 'C:\Comm\Telix.fon');
     reset(TlxFon,1);
     Index := 0;
     {
      Skip PhoneBook Header by seeking directly to first entry
     }
     Seek(TlxFon, $40);
     while not eof(TlxFon) do begin
      BlockRead(TlxFon, Entry, Sizeof(TlxFonRec));
      with Entry do begin
       clrscr;
       writeln('Entry #',Index);
       writeln('Name: ':30,Copy(BbsName,1,sizeof(BbsName)));
       writeln('Phone: ':30,Copy(Phone,1,sizeOf(Phone)));
       writeln('Baud: ':30, BaudRate[Baud]);
       writeln('Parity: ':30,ParityType[Parity]);
       writeln('DataBits: ':30, DataBits);
       writeln('StopBits: ':30, StopBits);
       writeln('Script: ':30,Copy(Script,1,sizeof(Script)));
       writeln('LastCall: ':30,
        Copy(LastCall,1,2) ,'.',
        Copy(LastCall,3,2), '.',
        Copy(LastCall,5,2), '');
       writeln('TotalCalls: ':30,TotalCalls);
       writeln('Terminal: ':30,TerminalType[Terminal]);
       writeln('Protocol: ':30, Protocol);
       writeln('Local Echo: ':30,Echo(BitField));
       writeln('Add Line Feed: ':30,LineFeeds(BitField));
       writeln('Strip HighBits: ':30,StripHBit(BitField));
       writeln('Received BS is Destructive: ':30,RecvBS(BitField));
       writeln('BackSpace Sends: ':30,SendBS(BitField));
       writeln('Unknown B_85h: ':30,B_85h);
       writeln('Unknown B_86h: ':30,B_86h);
       writeln('DialPrefix: ':30,DialPrefix);
       writeln('Password: ':30,Copy(Password,1,sizeof(Password)));
      end;
      writeln;
      writeln('Press any key to continue or <ESC> to terminate...');
      writeln;
      while keypressed do readkey;
      while not keypressed do;
      Ch := readkey;
      if Ch=#27 then
       { Force Exit if <ESC> is pressed by forcing EOF }
       Seek(TlxFon, filesize(TlxFon));
      while keypressed do readkey;
      Inc(Index);
     end;
     close(TlxFon);
    end.

[Back to COMM SWAG index] [Back to Main SWAG index] [Original]