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

    {
    Following this text is a basic guide to the format of the TRIBBS.SYS
    dropfile, JSDoor code for reading in TRIBBS.SYS and storing it in a
    DoorSysType variable, and code for a FileExists function that's used in the
    TRIBBS_SYS code.

    TRIBBS.SYS is TriBB's proprietary door data file.  It is an ASCII text file
    and uses the following format:

    1                  <- The user's record number
    Sean Laurent       <- The user's name
    Something          <- The user's password
    200                <- The user's security level (0 - 9999)
    Y                  <- Y for Expert, N for Novice
    Y                  <- Y for ANSi, N for monochrome
    60                 <- Minutes left this call
    715-344-4142       <- The user's phone number
    Stevens Point, Wi  <- The user's city and state
    12/18/77           <- The user's birth date
    1                  <- The node number
    2                  <- The serial port
    14400              <- Baud rate or 0 for local
    38400              <- Locked rate or 0 for not locked
    Y                  <- Y for RTS/CTS, N for no RTS/CTS
    Y                  <- Y for error correcting or N
    The Magic Of Krynn <- The board's name
    Sean Laurent       <- The sysop's name

    --------CUT HERE FOR TRIBBS.SYS REFERENCE-------

    }
    Uses Dos, Strings;

    Procedure TRIBBS_SYS(Path : String; Var DropInfo : DoorSysType);
    Var FF    : Text;
        FName : String;
        TempS : String;

        Code,
        Int   : Integer;
    Begin
      FName:=Concat(Path,'TRIBBS.SYS');
      If not(FileExists(FName)) Then
        Halt(4);
      Assign(FF,FName);
      Reset(FF);
      Readln(FF,TempS);             {User record number}
      Readln(FF,DropInfo.UserName);
      Readln(FF,DropInfo.Password);

      Readln(FF,TempS);             {Security Level}
      Val(TempS,Int,Code);
      If (Code <> 0) Then
        DropInfo.Access:=0
      Else Begin
        If (Int > 255) Then
          DropInfo.Access:=255
        Else
          DropInfo.Access:=Int;
      End;

      Readln(FF,TempS);             {Expert Y/N}
      Readln(FF,TempS);             {Y = ANSI, N = Monochrome}

      Readln(FF,TempS);             {Minutes left}
      Val(TempS,Int,Code);
      If (Code <> 0) Then
        DropInfo.MinutesLeft:=30
      Else
        DropInfo.MinutesLeft:=Int;
      DropInfo.SecondsLeft:=0;

      Readln(FF,DropInfo.Phone);
      DropInfo.WorkPhone:=DropInfo.Phone;
      Readln(FF,DropInfo.UserCity);
      Readln(FF,TempS);             {Birth date}

      Readln(FF,TempS);             {Node Number}
      Val(TempS,Int,Code);
      If (Code <> 0) Then
        DropInfo.Node:=1
      Else
        DropInfo.Node:=Int;

      Readln(FF,TempS);             {Serial port}
      Val(TempS,Int,Code);
      If (Code <> 0) Then
        DropInfo.ComPort:=0
      Else
        DropInfo.ComPort:=Int;

      Readln(FF,TempS);             {Baud rate}
      Val(TempS,Int,Code);
      If (Code <> 0) Then
        DropInfo.BaudRate:=0
      Else
        DropInfo.BaudRate:=Int;

      Readln(FF,TempS);             {Locked rate}
      Readln(FF,TempS);             {RTS/CTS}
      Readln(FF,TempS);             {Error correcting}
      Readln(FF,DropInfo.BBSName);

      Close(FF);
    End;

    {
    Note, FileExists doesn't actually open/close the file... Also, it's the
    fastest I've seen...
    }

    Function FileExists(filename : String) : Boolean; Assembler;

      ASM
        PUSH   DS
        LDS    SI, [filename]      { make ASCIIZ }
        XOR    AH, AH
        LODSB
        XCHG   AX, BX
        MOV    Byte Ptr [SI+BX], 0
        MOV    DX, SI
        MOV    AX, 4300h           { get file attributes }
        INT    21h
        MOV    AL, False
        JC     @1                  { fail? }
        INC    AX

        @1: POP    DS
    end;  { FileExists}

    {
    There is support for RIPScrip graphics, but I can't find the information
    on it with relation to TRIBBS.SYS files.  Sorry.
    Anyway, I hope this helps!
    }

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