home *** CD-ROM | disk | FTP | other *** search
/ Beijing Paradise BBS Backup / PARADISE.ISO / software / BBSDOORW / MKMSG102.ZIP / MKGLOBT.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-08-15  |  4.8 KB  |  225 lines

  1. Unit MKGlobT;
  2.  
  3. {$I MKB.Def}
  4.  
  5. Interface
  6.  
  7. Type AddrType = Record                 {Used for Fido style addresses}
  8.   Zone: Word;
  9.   Net: Word;
  10.   Node: Word;
  11.   Point: Word;
  12.   End;
  13.  
  14. Type SecType = Record
  15.   Level: Word;                         {Security level}
  16.   Flags: LongInt;                      {32 bitmapped flags}
  17.   End;
  18.  
  19. Type DateType = Record
  20.   Year: Word;
  21.   Month: Byte;
  22.   Day: Byte;
  23.   End;
  24.  
  25.  
  26. Const
  27.   BbsVersion = 'Mythical Kingdom Bbs - Version 0.01 Alpha';
  28.   Copyright  = 'Copyright 1992, 1993 by Mark May';
  29.   Contact    = 'Contact 1:110/290  (513)237-7737 HST/V32';
  30.  
  31. Const
  32.   uoNotAvail = 0;
  33.   uoBrowse =  1;
  34.   uoXfer   =  2;
  35.   uoMsg    =  3;
  36.   uoDoor   =  4;
  37.   uoChat   =  5;
  38.   uoQuest  =  6;
  39.   uoReady  =  7;
  40.   uoMail   =  8;
  41.   uoWait   =  9;
  42.   uoLogIn  = 10;
  43.  
  44. Function AddrStr(Addr: AddrType): String;
  45. Function ParseAddr(AStr: String; CurrAddr: AddrType; Var DestAddr: AddrType): Boolean;
  46. Function Access(USec: SecType; RSec: SecType): Boolean;
  47. Function EstimateXferTime(FS: LongInt; BaudRate: Word; Effic: Word): LongInt;
  48.   {Result in seconds}
  49. Function NameCrcCode(Str: String): LongInt; {Get CRC code for name}
  50. Function Flag2Str(Number: Byte): String;
  51. Function Str2Flag(St: String): Byte;
  52.  
  53. Var
  54.   StartUpPath: String[128];
  55.  
  56. Const
  57.   UseEms: Boolean = True;
  58.   LocalMode: Boolean = False;
  59.   LogToPrinter: Boolean = False;
  60.   ReLoad: Boolean = False;
  61.   NodeNumber: Byte = 1;
  62.   OverRidePort: Byte = 0;
  63.   OverRideBaud: Word = 0;
  64.   UserBaud: Word = 0;
  65.   ExitErrorLevel: Byte = 0;
  66.   TimeToEvent: LongInt = 0;
  67.   ShellToMailer: Boolean = False;
  68.  
  69. Implementation
  70.  
  71. Uses MKString, Crc32;
  72.  
  73. Function Flag2Str(Number: Byte): String;
  74.   Var
  75.     Temp1: Byte;
  76.     Temp2: Byte;
  77.     i: Word;
  78.     TempStr: String[8];
  79.  
  80.   Begin
  81.   Temp1 := 0;
  82.   Temp2 := $01;
  83.   For i := 1 to 8 Do
  84.     Begin
  85.     If (Number and Temp2) <> 0 Then
  86.       TempStr[i] := 'X'
  87.     Else
  88.       TempStr[i] := '-';
  89.     Temp2 := Temp2 shl 1;
  90.     End;
  91.   TempStr[0] := #8;
  92.   Flag2Str := TempStr;
  93.   End;
  94.  
  95.  
  96. Function Str2Flag(St: String): Byte;
  97.   Var
  98.     i: Word;
  99.     Temp1: Byte;
  100.     Temp2: Byte;
  101.  
  102.   Begin
  103.   St := StripBoth(St,' ');
  104.   St := PadLeft(St,'-',8);
  105.   Temp1 := 0;
  106.   Temp2 := $01;
  107.   For i := 1 to 8 Do
  108.     Begin
  109.     If UpCase(St[i]) = 'X' Then
  110.       Inc(Temp1,Temp2);
  111.     Temp2 := Temp2 shl 1;
  112.     End;
  113.   Str2Flag := Temp1;
  114.   End;
  115.  
  116.  
  117.  
  118.  
  119. Function AddrStr(Addr: AddrType): String;
  120.   Begin
  121.   If Addr.Point = 0 Then
  122.     AddrStr := Long2Str(Addr.Zone) + ':' + Long2Str(Addr.Net) + '/' +
  123.       Long2Str(Addr.Node)
  124.   Else
  125.     AddrStr := Long2Str(Addr.Zone) + ':' + Long2Str(Addr.Net) + '/' +
  126.       Long2Str(Addr.Node) + '.' + Long2Str(Addr.Point);
  127.   End;
  128.  
  129.  
  130. Function Access(USec: SecType; RSec: SecType): Boolean;
  131.   Begin
  132.   If (USec.Level >=  RSec.Level) Then
  133.     Access :=  ((RSec.Flags and Not(USec.Flags)) = 0)
  134.   Else
  135.     Access := False;
  136.   End;
  137.  
  138.  
  139. Function EstimateXferTime(FS: LongInt; BaudRate: Word; Effic: Word): LongInt;
  140.   Begin
  141.   If BaudRate > 0 Then
  142.     EstimateXferTime := ((FS * 100) Div Effic) Div (BaudRate Div 10)
  143.   Else
  144.     EstimateXferTime := ((FS * 100) Div Effic) Div (960);
  145.   End;
  146.  
  147.  
  148. Function NameCrcCode(Str: String): LongInt;
  149.   Var
  150.     NCode: LongInt;
  151.     i: WOrd;
  152.  
  153.   Begin
  154.   NCode := UpdC32(Length(Str),$ffffffff);
  155.   i := 1;
  156.   While i < Length(Str) Do
  157.     Begin
  158.     NCode := Updc32(Ord(UpCase(Str[i])), NCode);
  159.     Inc(i);
  160.     End;
  161.   NameCrcCode := NCode;
  162.   End;
  163.  
  164.  
  165. Function ParseAddr(AStr: String; CurrAddr: AddrType; Var DestAddr: AddrType): Boolean;
  166.   Var
  167.     SPos: Word;
  168.     EPos: Word;
  169.     TempStr: String;
  170.     Code: Word;
  171.     BadAddr: Boolean;
  172.  
  173.   Begin
  174.   BadAddr := False;
  175.   AStr := StripBoth(Upper(AStr), ' ');
  176.   EPos := Length(AStr);
  177.   SPos := Pos(':',AStr) + 1;
  178.   If SPos > 1 Then
  179.     Begin
  180.     TempStr := StripBoth(Copy(AStr,1,Spos - 2), ' ');
  181.     Val(TempStr,DestAddr.Zone,Code);
  182.     If Code <> 0 Then
  183.       BadAddr := True;
  184.     AStr := Copy(AStr,Spos,Length(AStr));
  185.     End
  186.   Else
  187.     DestAddr.Zone := CurrAddr.Zone;
  188.   SPos := Pos('/',AStr) + 1;
  189.   If SPos > 1 Then
  190.     Begin
  191.     TempStr := StripBoth(Copy(AStr,1,Spos - 2), ' ');
  192.     Val(TempStr,DestAddr.Net,Code);
  193.     If Code <> 0 Then
  194.       BadAddr := True;
  195.     AStr := Copy(AStr,Spos,Length(AStr));
  196.     End
  197.   Else
  198.     DestAddr.Net := CurrAddr.Net;
  199.   EPos := Pos('.', AStr) + 1;
  200.   If EPos > 1 Then
  201.     Begin
  202.     TempStr := StripBoth(Copy(AStr,EPos,Length(AStr)), ' ');
  203.     Val(TempStr,DestAddr.Point,Code);
  204.     If Code <> 0 Then
  205.       DestAddr.Point := 0;
  206.     AStr := Copy(AStr,1,EPos -2);
  207.     End
  208.   Else
  209.     DestAddr.Point := 0;
  210.   TempStr := StripBoth(AStr,' ');
  211.   If Length(TempStr) > 0 Then
  212.     Begin
  213.     Val(TempStr,DestAddr.Node,Code);
  214.     If Code <> 0 Then
  215.       BadAddr := True;
  216.     End
  217.   Else
  218.     DestAddr.Node := CurrAddr.Node;
  219.   ParseAddr := Not BadAddr;
  220.   End;
  221.  
  222.  
  223.  
  224. End.
  225.