scene.org File Archive

File download

<root>­/­resources­/­bbs­/­xroads/xrd-dev1.txt

File size:
40 321 bytes (39.38K)
File date:
2017-06-26 00:05:55
Download count:
all-time: 828

Preview

  ÛÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛßÛÛÛÜÜ  ÜÛÛÛÛßÛÛÛÜ  ÜÜÛÛÛÛÛÜÜ  ÛÛÛÛÛßÛÛÜ    ÜÜÛÛÛßÛÛÛÜÜ
  ÛÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛ  ÛÛÛÛÛÛ ÛÛÛÛÛÛ
  ÛÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛ²ÛÛ ÛÛÛ²Û ÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÝ ÛÛÛÛÛÛ ÛÛÛ²ÛÛ
  ÛÛÛÛÛÛ ÛÛÛÛÛ Û²ÛÛÛ ÛÛÛÛÛÛ ÛÛÛ²Û ÛÛÛÛ Û²ÛÛÛ ÛÛÛÛÛ ÛÛÛ²Û ÛÛÛÛÛ ÛÛ²ÛÛÛ ÛÛÛÛÛÛ
  ÞÛ²ÛÛÛ ÛÛÛÛÝ Û²ÛÛÛ ÛÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛ Û²ÛÛÛ ÛÛÛÛÛ ÛÛÛ²Û ÛÛÛÛÛ ÛÛ²ÛÛÛ ßßßÛÛÛ Ý
 Ý ÛÛÛÛÛ ÛÛÛÛ  Û²ÛÛÛÛÛÛÛÛÛß ÛÛÛÛÛ ÛÛÛÛ Û²ÛÛÛ ÛÛÛÛÛ ÛÛÛ²Û ÛÛÛÛÛ ÛÛ²ÛÛÛÛÛÛÛÜÜ
    ßÛÛÛÜÛÛß   ÛÛÛÛÛßÛÛÛÜ   ÛÛÛÛÛ ÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ßßßßßßßÛÛÛÛÛÛ
   ܲÛÛÛ ÛÛÛÜ  ÛÛÛÛÛ ÛÛÛÛÛ ÜÛÛÛÛÛ ÛÛÛÛÜÜÜÜÜÜÜÛÛÛÛÛ ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ ÛÛÛÛÛÛ Ý
  ÞÛ²ÛÛÛ ÛÛÛÛÝ ÛÛÛÛÛ ÛÛÛÛÛÝ ÛÛÛ²Û ÛÛÛÛ ÜÜÜÜÜ ÛÛÛÛÛ ÜÜÜÜÜ ÜÜÜÜÜ ÛÛÛÛÛÛ ÛÛÛÛÛÛ Ý
 ÝÛÛ²ÛÛÛ ÛÛÛÛÛ Û²ÛÛÛ ÛÛÛ²ÛÛ ÛÛÛ²Û ÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛ²ÛÛÛ ÛÛÛ²ÛÛ Ý
 ÝÛÛÛÛÛÛ ÛÛÛÛÛ Û²ÛÛÛ ÛÛÛ²ÛÛ ÛÛÛ²Û ÛÛÛÛ Û²ÛÛÛ ÛÛÛÛÛ ÛÛÛ²Û ÛÛÛÛÛ ÛÛ²ÛÛÛ ÛÛÛ²ÛÛ Ý
  ÛÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛ Û²ÛÛÛ ÛÛÛÛÛ ÛÛÛ²Û ÛÛÛÛÛ ÛÛÛÛÛÛ ÛÛÛÛÛÛ Ý
 ÝÛÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛ Û²ÛÛÛ ÛÛÛÛÛ ÛÛÛ²Û ÛÛÛÛÝ ÞÛÛÛÛÛ ÛÛÛÛÛÛ Ý
 ÝÛÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛÛ ÛÛÛÛÛÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛß Ü ßÛÛÛÛÛÛÛÛÛÛß Ý
 Ýßßßßßß ßßßßß ßßßßß ßßßßßß  ßßßßßßßß  ßßßßß ßßßßß ßßßßßßßß Üß ßÜ  ßßßßßß ÜÜß
 ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß     ßSQUiZZYß
           ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
   ÖÄÄÄÄÄÄ[³     [   x R O A D s    1    9    9    7   !  ]      ³]ÄÄÄÄÄÄ·
ÚÄĺÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺÄÄÄ¿
³  º                                                                     º   ³
³  º         The Desire Development Pack #1 by Rapido/xROADs             º   ³
³  º                                                                     º   ³
ÀÄĺÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺÄÄÄÙ
   ÓÄÄÄÄÄÄij                                                    ³ÄÄÄÄÄÄÄĽ
           ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ

 Contents


 1. How to get started

 2. The Doorkit Explained

 3. The Newuser Application Viewer 1.1 (Full Pascal Source included!)

 4. Notes


ÚÄÄÄÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄÄÄÄÄÄ¿
³  º                                                                     º   ³
³  º                    1. How to get started                            º   ³
³  º                                                                     º   ³
ÀÄÄÄÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄÄÄÄÄÄÙ

 What you need is: Borland Pascal 7.0 and the Desire Doorkit 1.2 (or the most
 recent version). The Desire Doorkit consists of a set of UNITS for Borland 
 Pascal 7.0, these are:

 Deskit.TPU   this is the 'main' unit. You always need to 'include' this one!
              (uses Dos,Crt,Deskit,.....;)


 Desstr.TPU   for operations on strings, chars, time, date.
              This one you can use if you want to use the desire own 
              string/date/time operations, but is not neccessary!

 Desuart.TPU  this one is only by Deskit.TPU for the UART communications.
              but forget this, you don't need this.
 Desfos.TPU   this one too is only used by Deskit.TPU for the FOSSIL
              communications, you don't need this one either!

              Maybe you did some coding for System/X before where you
              needed 2 different .TPU-files for UART and FOSSIL ?
              Well Desire supports both at one time, no need to make
              a FOSSIL and a seperate UART version! Desire doors are
              both FOSSIL and UART!

 Dessys.TPU   Some System&Keyboard routines, only of you want to use it!

ÚÄÄÄÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄÄÄÄÄÄ¿
³  º                                                                     º   ³
³  º                    2. The Doorkit Explained                         º   ³
³  º                                                                     º   ³
ÀÄÄÄÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄÄÄÄÄÄÙ


 = Deskit.TPU ==============================================================

 A unit contains VARS, TYPES, PROCEDURES and FUNCTIONS you can access in 
 your program called a 'DOOR'

 Const
 -----

 Const Version='1.2';
 Const STRLINES=200;   { number of strings in STRSx.x }

 Types 
 -----

 TYPE
        ConfigRec = RECORD                    (* C:\DESIRE\CONFIG.<Node>   *)
        LastCall = RECORD                     (* C:\BBS\DATA\LASTCALL.DAT  *)
        BBSrecord = Record                    (* C:\BBS\DATA\BBS<node>.DAT *)
        ConfUserRecord = RECORD               (* C:\BBS\CONFDIR\USERS.CNF  *)
        TransferRecord = RECORD               (* C:\BBS\DATA\TRANSFER.xxx  *)
        MultiNodeRecord = RECORD              (* C:\BBS\DATA\NODE.xxx      *)          
        DoorRecord = RECORD                   (* C:\BBS\DATA\SXDOOR.xxx    *)
        MsgRecord = RECORD                    (* C:\BBS\MSGBASE\HEADERS.DAT*)
        FlagRecord = RECORD                   (* C:\BBS\FILEFLAG.xx        *)     
        XferLogRecord = RECORD                (* C:\BBS\LOGFILES\UPLOAD.DAT*)
        StringRecord = RECORD                 (* C:\BBS\STRSx.xxx          *)
        GlobalFlagRecord = Record

        { all the above RECORDS structures can be found in STRUCTS.130, in
          this case STRUCT.130 because Doorkit version 1.2 supports the
          structures of Desire Version 1.3 (at this point not yet released), 
          and is compatible with any next version of Desire!
        }

        InternalRec = RECORD  { used internal }

        StringBaseArray1 = Array[1..50]         of StringRecord;
        StringBaseArray2 = Array[51..99]        of StringRecord;
        StringBaseArray3 = Array[100..150]      of StringRecord;
        StringBaseArray4 = Array[151..STRLINES] of StringRecord;

        { the above contain all the menuset strings!, as they appear
          in STRDES.TXT or in the MENUSET.EXE editor! you can access
          all these strings by the function GetString(Nr:Integer):String;
        }

 TYPE   MCIRptr   = ^MCIRecord;
        MCIRecord = Record

        { the above are to pass information into a @MCIx@ MCI-code!

          If you want to show you own .PCB-file which has variable 
          fields in it, you can build up a list of values for all the
          @MCIx@-codes that should appear on that position (up to 10 max.)

          When we show a .PCB-file with the Procedure 
          TypeMCIFile(Name:String) the doorkit looks if there exists
          a list Control^.MCI^ (or in other words: if Control^.MCI^<>NIL)

          (Be carefull: Control^.MCI points to the MCIRECORD which hold
           a pointer to the first element Control^.MCI^^, thats why there
           is an extra ^ !)

          For instance: (see NAV.PAS, included in this PACK!)
          -------------------------------------------------------------------
          Var AidMCI:MCIRPTR;

          Begin

           GetMem(Control^.MCI^,SizeOf(MCIRecord));
              { here it creates the first element of a list } 
                 
           AidMCI:=Control^.MCI^;
              { AidMCI now points to that first element }

           AidMCI^.Mcistr:='RAPIDO';
              { now fill the 1st record with a string, in this case
                @MCI1@ will be replaced by RAPIDO! }

           AidMCI^.NExt:=NIL;
              { ok, tell the doorkit this was the last element in the list!
               } 

           TypeMCIFile('NAVSRCH.PCB');
             { show the file, @MCI1@ in that file will now be replaced with 
               'RAPIDO' }

           AidMCI:=Control^.MCI^;
           FreeMem(Control^.MCI^,SizeOf(MCIRECORD));
             { now free the 1st MCIRECORD, becarefull and don't forget
               the ^ in Control^MCI^ <---- because it's the 1st element
               we are removing and NOT the Control^.MCI }

           CloseAll;
          End;

        }

 TYPE   EventRecord = RECORD 

                Time:String[5]; {HH:MM}
                Action:Byte;

                {  Set Bit 7 OFF-HOOK
                       Bit 6 ON-HOOK
                       Bit 5 ONLINE
                       Bit 4 OFFLINE
                       Bit 3..0 = 0..31 Actions

                Actions:

                0 IDLE
                1 RESET DAYSTATS
                2 EXIT            +  <Errorlevel>
                3 RUN DOOR        +  <Filename>
                4 CD PLAY         +  <Track>
                5 CD STOP
                6 TYPE            +  <Filename>     
                7 RUN UTIL        +  <Filepath>
                8 BEEP            +  <# Times>
                9 LOGOFF

                }


               Extern:String[30];  { DOORNAME }
        End;

        { The eventrecord contains a time and a action byte. The action 
          byte contains the information about which action should occure and
          whether or not the modem should be turned on- or off-hook or
          if the action may only occur if the bbs is off- or online. 
          the 4 least significant bytes represent the action number 
          as show above.

          This data is read from the EVENTS.x, for instance:
          ----------------------------------
          05:40 TYPE WARNING
          05:45 OFFHOOK
          06:00 RUN NETMAIL
          06:15 ONHOOK
          ----------------------------------
          This could be an event-script for the NETMAIL-door. At 5.40 a door
          is executed while a user might be online. At 5.45 the BBS goes
          actually OFFLINE. at 6.00 a door called NETMAIL is started.
          This door could actually take over the modem to communicate with
          another remote NETMAIL-server/BBS. At 6.15 the board goes online again.
          Commands for events:
          TYPE    <filename>      for showing textfiles from the TEXT-dir online.
          RUN     <filename>      for executing programs offline.
          RUNDOOR <filename>      for executing programs online.
          OFFHOOK                 for modem-offhook (busy.)
          ONHOOK                  for modem-onhook (online.)
          CDPLAY  <track>         for playing a cd-track.
          CDSTOP                  for stopping the cd.
          RESET                   for BBS-reset (usually at 00:00)
          EXIT                    for exiting the bbs (reset)
          QUIT                    for quiting the bbs (shutdown)

          While creating a EVENTS.x file make sure you put the line :   
          ----------------------------------
          RESET xx:xx
          ----------------------------------
          (Where xx:xx indicates the time of the day statistics reset)
          Otherwise the statistics reset will be ignored!

        }

 TYPE   InternalRec = RECORD
               PosInUserBase   :       LongInt;   { for use with msgindex }
                 { the position of this user in the userbase }
               CheckPause      :       Boolean;
                 { check when length of screen is reached ? }
               Ypos:Byte;
                 { the current number of lines enter without a pause }
               SysopHangup      :      Boolean;
                 { ALT - H pressed ? }
               UserLockOut: Boolean;
                 { ALT - L pressed ? }
               CorrectLogon:Boolean;
                 { Is this a correct logon ? }
               Node:Byte;
                 { The current node }
               Commands:Array [1..MaxDosKey] of String[30];
                 { The last 20 commands }
               CommandPtr:Byte;
                 { current command }
               BaudStr:String;
                 { baudstr returned by modem }
               Lines:Byte;
                 { howmany lines available on the screen 
                   with or without the statistics bar etc. }
               TimeExpiredWarning:Boolean;
                 { Did we have a warning yet ? }
               TimeLeft:LongInt; {original timeleft for a user}
                 { Timeleft at start }
               NextEvent:EventRecord; { HH:MM }
                 { When is the next event ? (see above) }
               LastEvent:EventRecord; { HH:MM }
                 { What was the last event ? (see above) }
               StatBarType:Byte; { 1..9 }
                 { which statbar is on ? }
               InputAvail:Byte;  { 0 none , 1 = local , 2 = remote }
               MainPrompt:String;
                 { what's the current mainprompt in Desire ? }
               ForceLogoff:Boolean;
                 { Force logoff after event ? }
               StopOutput:Boolean;
                 { Stop output after 'More Y/N/NS = N' }
               SysopLogon:Boolean;
                 { Sysoplogin ? }
               DontSendInit:Boolean;
                 { -L as parameter for Desire ? }
               DontCheckInit:Boolean;
                 { -DONTCHECK as parameter for Desire ? }
               DontHangUp:Boolean;
                 { -D as parameter for Desire ? }
               NoDirCheck:Boolean;
                 { -C as parameter for Desire ? }
               CheckCarrier:Boolean;
                 { Is carrier checked now ? }
               CheckTime:Boolean;
                 { Check for timeleft ? }
               LastLocalAction:String[8]; { HH:MM:SS }
                 { Last time input from keyboard locally }
               SaveScreen:Boolean; { screensave active ?>! }
                 { Screensaver active ? }
               DontShowFiles:Boolean;
                 { Is flag G (ALT-G) Up or Down ? }
               CDTrackPlaying:Integer;
                 { Which CD track is been played now ? }
               StatBarHelpPos:Byte;
                 { Which help is shown ? }
               CaptureStart:Boolean;
                 { Is capture on ? }
        End;


 PROCEDURES and FUNCTIONS
 ------------------------

 { PUBLIC FUNCTIONS: }
 Function  GetAreaName(No:Byte):String;  
   { get the name of the current CONFERENCE! }
 Procedure Pause;
   { prints a Pause, the pause directly from the menuset of the current
     user! }
 Procedure More;
   { prints a More prompt Yes/No/Nonstop etc.. 

     If 'N' then Control^.Int^.StopOutput  is set TRUE !
     If 'NS' then Control^.Int^.CheckPause is set FALSE!

   }
 Function  Default(YesIsDefault:Boolean):boolean;
   { Waits for input (y/n). 

     YesIsDefault means if the key that is pressed
     was NOT a 'N' (but for instance an Enter) then Default gets TRUE!
     and the other way around!

     If Default is set TRUE then 'Yes' appears on the screen and 'NO' 
     otherwise.

   } 


 { OUTPUT LOCAL : }
 Procedure LocalWrite(f:string);
 Procedure LocalWriteln(f:string);     { local screen }
   { Writes locally, including PCB-codes!}
 Procedure LocalCls;
   { just a ClrScr }

 Function  TypeMCIFile(filename:string):Boolean;
   { to show a .PCB file with MCI-codes and ANSI-codes allowed }
 Function  TypeTXTFile(filename:string):Boolean;
   { to show a plain textfile with no MCI/ANSI-codes allowed }

 { INPUT LOCAL & REMOTE : }

 Function  AllReadln(Size:Integer):string;
   { reads input remote&local with a max. Size }
 Function  AllRead(Size:Integer):string;
   { idem, now it only doesn't enter to the next line }
 Function  AllReadlnFill(Size:Integer;Fill:Char):string;
   { does the same as AllReadln but fills spaces with Fill-chars,
     for instance 'ú' }
 Function  AllGetCh:byte;
   { Waits for input! is used by Function Getch:Byte which does not wait! }
   
 Function  AllKeypressed:Boolean;
   { gives True if ANY input is available from remote or local keyboard }

 Function  GetCh:byte;
   { gives 0 when no key is pressed and the ASCII-value otherwise }

 Function  Edit_String(f:string;size:integer;LF:Boolean):String;
   { let's you Edit a string.

     It prints the string on the current position and lets you edit it
     using Backspace and checks for the maximum size and finally enters
     if LF is true.
   }
 
 { OUTPUT LOCAL & REMOTE : }
 Procedure AllBackSpace(L:Byte);
   { Moves the cursor and Deletes the last L charachters }
 Procedure Allmoveleft(i:integer);
   { Moves the cursor  left i positions }
 Procedure  AllmoveRight(i:integer);
   { Moves the cursor  right i positions }
 Procedure Allmoveup(i:integer);
   { Moves the cursor  up i positions }
 Procedure Allmovedown(i:integer);
   { Moves the cursor  down i positions }
 Procedure AllCursorXY(x,y:integer);
   { Moves the cursor to (X,Y) from the top left position }
 Procedure AllWrite(f:string);       { both local & com }
   { Prints a string f, MCI and ANSI-codes allowed }
 Procedure AllWriteln(f:string);       { both local & com }
   { Prints a string f with a line-feed, MCI and ANSI-codes allowed  }
 Procedure AllWriteNonMCI(f:string);       { both local & com }
   { Prints a string f, but no MCI/ANSI-codes allowed }
 Procedure AllWritelnNonMCI(f:string);       { both local & com }
   { Prints a string f with a line-feed, but no MCI/ANSI-codes allowed }
 
 Procedure CWriteMCI(f:string);       { both local & com }
   { same as AllWrite, for System/X compatibility }
 Procedure CWriteMCIln(f:string);       { both local & com }
   { same as AllWriteln, for System/X compatibility }
 Procedure CWrite(f:string);       { both local & com }
   { same as AllWriteNonMCI, for System/X compatibility }
 Procedure CWriteln(f:string);       { both local & com }
   { same as AllWritelnNONMCI, for System/X compatibility }
 
 { OUTPUT REMOTE }
 Procedure Com_string(f:string);
   { sends string f to the modem }
 Function  Com_stringcheck(f:string):boolean;
   { sends string f to the modem, and checks if the modem is receiving 
     it, in case of Com_string the system would hang until the modem
     receives the string }
 Procedure Com_stringcrlf(f:string);
   { same a Com_string but gives an enter after it }

 { INPUT REMOTE }
 Function  Com_receive:Char;
   { wait's for remote input }
 Function  Com_inputavail:boolean;
   { is set TRUE if the remote user has pressed a key }
 
 { COMFUNCTIONS }
 Procedure Allinit;
   { Do not use this! it's called once at the start of the doorkit
     by Deskit.TPU itself to init the comport }
 Procedure Com_flush;
   { Flush the comport }
 Procedure Com_hangup;
   { Drop the carrier }
 Procedure Com_Atcmd(f:string);
   { Send an AT-command to the modem }
 Procedure CloseAll;           (* Always use this as last command !! *)
   { Close the comport, Always call this last! in your doors!! }
 
 { DATAFILES }
 
 Procedure WriteDropFile;
   { Write the current DOOR-record (in memory) to disk 

     If you change values in this DOOR-record and you write it back to
     disk with WriteDropFile then Desire will notice that it's data
     has been changed and will read the DOOR-record and will take
     over it's values! 

   }

 Procedure ReadDropFile;
   { read the DOOR-record (user data), this is already read in by
     Deskit.TPU, so there is no need to execute this procedure unless you
     intend to
   }

 Procedure WriteNodeFile(Status:Byte;ExtStatus:String);
   { Write's the NODE-file, to tell other nodes what this node is doing.
     
     for instance if you made a WHO-door you could call this at the
     beginning of the door:

     WriteNodeFile(18,'');

                0 - Node Inactive         ExtStatus: -
                1 - Waiting for Call      ExtStatus: -
                2 - Ring Detected         ExtStatus: -
                3 - Receiving Call        ExtStatus: -
                4 - Logging on            ExtStatus: -
                5 - Scanning Mail         ExtStatus: -
                6 - Normal BBS Use/IDLE   ExtStatus: -
                7 - Account Sequence      ExtStatus: -
                8 - MultiNode Chat        ExtStatus: -
                9 - Newuser               ExtStatus: NewUserName
               10 - Uploading             ExtStatus: FileName <Number>
               11 - Downloading           ExtStatus: FileName <Number>
               12 - Beginning Upload      ExtStatus: -
               13 - Beginning Download    ExtStatus: -
               14 - FileCheck             ExtStatus: FileName
               15 - FileID                ExtStatus: FileName
               16 - Logging Off           ExtStatus: -
               17 - Chatting with Sysop   ExtStatus: -
               18 - WHO                   ExtStatus: -
               19 - Joining Conference    ExtStatus: -
               20 - Viewing Bulletins     ExtStatus: -
               21 - Viewing TextFile      ExtStatus: -
               22 - Sysop Viewing File    ExtStatus: -
               23 - Viewing Userlist      ExtStatus: -
               24 - Editing User Setups   ExtStatus: -
               25 - Posting Message       ExtStatus: <ToWho>
               26 - Reading Messages      ExtStatus: -
               27 - Viewing Filelist      ExtStatus: -
               28 - Scanning New Files    ExtStatus: -
               29 - Paging Sysop          ExtStatus: -
               30 - Requested Relogon     ExtStatus: -
               31 - ZipScan               ExtStatus: -
               32 - Flagging Files        ExtStatus: -
   }
 Procedure LogAction(Comment:String);
   { LogAction logs a comment into the LOGFILE of the current node,
    
     LogAction('xROADs' NEWUSERAPPLICATIONVIEWER 1.1 executed.');

     results in a line like this:
     --------------------------------------------------------
     14:00:22  xROADs' NEWUSERAPPLICATIONVIEWER 1.1 executed.
     --------------------------------------------------------

     LogAction('')  { with an empty string }

     results in a line like this:

     -------------------------03-29-97 14:00:10-----------------------------

 Function  GetString(Nr:Integer):String;
   { Gives a MENUSET string 

     When the normal Desire menuset(s) are used, GetString(73) would
     return the string:
     '@X07Sysop Jumped to DOS, please wait...'

     and GetString(74) would be: '@X07thanx for waiting...'

     Now, AllWrite(Getstring(73)) would print:
     @X07Sysop Jumped to DOS, please wait...

     See the STRDES.TXT or MENUSET.EXE for the corresponding numbers! 

   } 

 Function GetConferencePath(ConfNumber:Integer):String;
   { returns the current FULL path to the conference like this:
     'C:\DESIRE\CONF1'
   }

 = Desstr.TPU ==============================================================

 Function ShortTIME:string;
   { prints the time like this: 10:00 }
 Function DATE:string;
   { print the date like this: MM-DD-YY }
 Function TIME:string;
   { prints the time like this: 10:00:00 }
 Function StrToInt(Str:string):integer;
   { converts a string to an integer } 
 Function CutSpacesOff(str:string):string;
   { cuts the last spaces from a string }
 Function ToLowcase(Str:String):string;
   { converts al chars in a string to lowercase }
 Function LongToStr(i:longint;Width:Integer):String;
   { converts a LongInt i to a string with a particular Width }
 Function intToStr(i:integer;Width:Integer):String;
   { converts a Integer i to a string with a particular Width }
 Function DoubleToStr(i:double;Width:Integer):String;
   { converts a Double i to a string with a particular Width and no
     fraction }
 Function ToUpcase(Str:String):string;
   { converts the string Str tp uppercase }
 Function chobstring(source:string;from_length, to_length:integer;fill:boolean):string;
   { chobs a part of a string source which had a length of from_length and
     needs to be resized (either bigger or smaller) to to_length and
     if it needs to be bigger add it with characters of fill }
 Function Parameter(f:string;N:byte):String;
   { returns the f-th parameter in a string, that is the f-th word 
     surrounded by spaces }
 Function swildcard(name:string):string;
   { converts a string (filename or username) to a string with length 30
     where 'FILE*' would result in 'FILE??????????????????????????' 
     to see if two strings are the same if they are wildcarded
     (with equal)
   }
 Function swildcardsused(f:string):boolean;
   { return TRUE if f contains a '*' or a '?' }
 Function equal(name1,name2:string):boolean;
   { checks if two wildcarded strings are equal to each other

     Equal(Swildcard('FI*'),Swildcard('*')) = true
   }
 Function fwildcard(name:string):string;
   { same as before, now for files 

     fwildcard ('FIL*.TXT') = 'FIL?????.TXT' 
   }
 Function fwildcardsused(f:string):boolean;
 Function FExpandFile(name1:String):String;
   { shapes a filename 'BLA*.*' into 8.3 ('BLA*    .*  ') }
 Function Fequal(name1,name2:string):boolean;
   { return TRUE if two wildcardeds filenames are the same:

     Fequal(FWildcard('FIL*'),FWildcard('F*')) = True;

   }
 Function LeadingSpace(w : Longint;Width:Byte) : String;
   { converts a LongInt to a string with a Width an aligns it to the 
     right }
 Function TimeUsed(LcLogonTime,LastTime:String):
          LongInt;
   { returns the amount of seconds between two time-strings :

     TimeUsed('09:00:00','10:00:00') = 3600

   }
 Function LeadingZerof(w : LongInt) : String;
   { converts a LongInt to a string and puts zeros in front }

     LeadingZerof(8) = '00000008'
   }
 Function Stripmcicode(var str:string):string;
   { removes @X00-codes from a string }
 Function CompileTab(Var f:string):String;
   { converts #9 into 8 spaces }
 Function RemoveUnderScore(f:string):String;
   { removes _ and replaces them by a space ' ' }
 Function DateToDays(DateSt:String):LongInt;
   { converts a date to a number of days from 00-00-00 }
 Function KillEndSlash(f:string):string;
   { removes the last \ that occurs in filepaths }
 Function CharInString(St:String;Ch:Char):Boolean;
   { returns true if character Ch occurs in string St }

 = Dessys.TPU ==============================================================

 Procedure Pageon;
   { turns the screen on from PageOff }
 Procedure Pageoff;
   { turns the screen output of and the screen appears black }
 Function CapsOn: Boolean;
   { return TRUE when Capslock is on }
 Function NumOn: Boolean;
   { return TRUE when Numlock is on }
 Function ScrollOn: Boolean;
   { return TRUE when Scrolllock is on }
 Procedure Set_Caps(On : boolean);
   { sets Capslock (and the led) on/off }
 Procedure Set_Num(On : boolean);
   { sets Numlock (and the led) on/off }
 Procedure Set_Scroll(On : boolean);
   { sets Scrolllock (and the led) on/off }

ÚÄÄÄÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄÄÄÄÄÄ¿
³  º                                                                     º   ³
³  º Example: 3. The xROADS Newuser Application Viewer 1.1 (FULL SOURCE) º   ³
³  º                                                                     º   ³
ÀÄÄÄÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄÄÄÄÄÄÙ

      This code is not Optimized and still contains bugs! Find them :)  

-----------------------------------------------------------------------------
Program NewuserAppViewer;

Uses Deskit,Files,DesStr;

Var Username,Input,Temp_Str:String;
                          { input strings Temp_Str and Input 
                          { output string Username as @MCI1@ in NAVFND.PCB }

    EndSubLoop,EndLoop:Boolean;
                          { variables to end loops lile WHILE/DO and
                            REPEAT/UNTIL }

    SearchNode:Byte;      { which ANSWERx.TXT file are we reading ? }
    Found:Boolean;        { we just found a user }
    F:Text;               { for textfiles }
    i:integer;            { aid counter }
    C:Byte;               { to read a byte from the user }

    AidMCI:MCIRPTR;       { for the @MCIx@-codes }

    ShowCont:Boolean;
    EverFound,            { did we ever find a user ? }
    JustShown:Boolean;    { did we just have a user on the screen or
                            were we looking for one ? 
                            to estimate the amount of enters at 
                            the end 
                          }

Begin
EverFound:=false;
If ParamStr(2)<>'' then
 If Door.SecLvl<StrToInt(ParamStr(2)) then 
  Begin
   AllWriteln('No rights to execute this door.');
   AllWriteln('');
   CloseAll;
   Exit;
  End;


TypeMCIFile('NAVTOP.PCB');
Input:=Allreadln(30);


    If Input='' then 
     Begin;
     EndSubLoop:=True;
     Endloop:=True;
     TypeMCIFile('NAVBORT.PCB');
     End else
      Begin;
        GetMem(Control^.MCI^,SizeOf(MCIRecord));
        AidMCI:=Control^.MCI^;
        AidMCI^.mcistr:=ToUpcase(Input);
        AidMCI^.NExt:=NIL;
        TypeMCIFile('NAVSRCH.PCB');
        AidMCI:=Control^.MCI^;

        AidMCI:=Control^.MCI^;
        FreeMem(Control^.MCI^,SizeOf(MCIRECORD));
      End;
      
EndLoop:=False;SearchNode:=1;Found:=False;
ShowCont:=True;
JustShown:=False;


While not EndLoop do
 Begin
  If Exists(Config.Scripts+'\ANSWER'+IntToStr(SearchNode,0)+'.TXT') then
   Begin;
    { ok, list exists }
    Assign(f,Config.Scripts+'\ANSWER'+IntToStr(SearchNode,0)+'.TXT');
    Reset(f);

    Readln(f,Temp_str);
    EndSubLoop:=False;

    While not EndSubLoop do
     Begin
      If Eof(f) then EndSubLoop:=True else

      If (Chobstring(Temp_str,5,5,false)='\----') then
       Begin { this is a string, the next line gives the username }
        Readln(f,Temp_str);

        Username:='';
        i:=11;
        While (i<=Length(Temp_Str)) and (Temp_str[i]<>',') do
         Begin
          Username:=Username+Temp_str[i];
          Inc(i);
         End;

        For i:=1 to (Length(Username)-Length(Input))+1 do
         If ToUpcase(Copy(Username,i,Length(Input)))=
            ToUpcase(Input) then
             Begin { found! }
                { show it! }
              EverFound:=True;
              GetMem(Control^.MCI^,SizeOf(MCIRecord));
              AidMCI:=Control^.MCI^;
              AidMCI^.mcistr:=Username;
              AidMCI^.NExt:=NIL;
              TypeMCIFile('NAVFND.PCB');
              AidMCI:=Control^.MCI^;
              
              AidMCI:=Control^.MCI^;
              FreeMem(Control^.MCI^,SizeOf(MCIRECORD));

              C:=AllGetch;
              If Upcase(Chr(C))='Q' then
               Begin;
                EndLoop:=True;
                EndSubLoop:=True;
                AllWriteln('Quit');
                AllWriteln('');
                AllWriteln('');
               End else
              If Upcase(Chr(C))<>'N' then
               Begin
                JustShown:=True;
                AllWriteln('Yes');
                AllWriteln('');
                AllWriteln('');
              TypeMCIFile('NAVHDR.PCB'); { header }
                
                Found:=True;
                 While (Chobstring(Temp_str,5,5,false)<>'\----') and (not Eof(F)) do
                  Begin
                   AllWriteln(Temp_Str);
                   Readln(f,Temp_Str);
                  End;
               {Show;}

              TypeMCIFile('NAVCONT.PCB'); { continue searching ? }
              C:=AllGetch;
              If (ToUpcase(Chr(C))<>'N') and (ToUpcase(Chr(C))<>'Q') then
               Begin
                Allwrite('Yes');
                AllWriteln('');
                AllWriteln('');
                Found:=False;
        GetMem(Control^.MCI^,SizeOf(MCIRecord));
        AidMCI:=Control^.MCI^;
        AidMCI^.mcistr:=ToUpcase(Input);
        AidMCI^.NExt:=NIL;
        TypeMCIFile('NAVSRCH.PCB');
        AidMCI:=Control^.MCI^;

        AidMCI:=Control^.MCI^;
        FreeMem(Control^.MCI^,SizeOf(MCIRECORD));
               End else
                Begin
                 Allwrite('No');
                AllWriteln('');
                AllWriteln('');
                 EndSubloop:=True;
                 EndLoop:=True;
                End;

               End else
                Begin;
                ShowCont:=False;
                Found:=False;
                AllWriteln('No');
                AllMoveUp(3);
                JustShown:=False;
                End;



             End
       End else Readln(f,Temp_str);
     End; { sub }

    Close(f);
   End; { exist }

  Inc(SearchNode);
  If SearchNode>Config.Howmanynodes then EndLoop:=True;
 end; {endloop }

 If not Found then 
  Begin
  If (not JustShown) and (Input<>'') and EverFound then
   Begin
    AllWriteln('');
    AllWriteln('');
    AllWriteln('');
    AllWriteln('');
   End;

  TypeMCIFile('NAVNOT.PCB');
  End;

CloseAll;
End.
-----------------------------------------------------------------------------
ÚÄÄÄÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄÄÄÄÄÄ¿
³  º                                                                     º   ³
³  º                          4. Notes                                   º   ³
³  º                                                                     º   ³
ÀÄÄÄÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄÄÄÄÄÄÙ

  If you have any valuable information that you want to share with other
  developers, send it to xroads@stack.nl and we'll publish it in the next
  issue!

  Thankz, Rapido

-----------------------------------------------------------------------------

                 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
   ÖÄÄÄÄÄÄÄÄÄÄÄÄ[³        [*]  LEADING FORCE  [*]         ³]ÄÄÄÄÄÄÄÄÄÄÄÄÄ·
ÚÄĺÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺÄÄÄ¿
³  º                    Rapido             Alibabba                      º   ³
ÀÄĺÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺÄÄÄÙ
   ÓÄÄÄÄÄÄÄÄÄÄÄÄÄÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄĽ

                 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
   ÖÄÄÄÄÄÄÄÄÄÄÄÄ[³        [*]  ACTIVE MEMBERS  [*]        ³]ÄÄÄÄÄÄÄÄÄÄÄÄÄ·
ÚÄĺÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺÄÄÄ¿
³  º     Alibabba, Ampsul, Breakdown, Gannon, Grim, Highl/\nder, Inm     º   ³
³  º      Ken8, The Killer, Mexx, Mr Bungle, Mushroom, Nighty, Omen,     º   ³
³  º    Ooze, Pascal, Phreak Klass, Phasia, Predator, Rapido, Ripper,    º   ³
³  º                Sludge, Squizzy, Star, Thc, Voyage, Wasted           º   ³
ÀÄĺÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺÄÄÄÙ
   ÓÄÄÄÄÄÄÄÄÄÄÄÄÄÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄĽ

                 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
   ÖÄÄÄÄÄÄÄÄÄÄÄÄ[³        [*] CODING DIVISION [*]         ³]ÄÄÄÄÄÄÄÄÄÄÄÄÄ·
ÚÄĺÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺÄÄÄ¿
³  º           Rapido, Alibabba, Ampsul, Pascal ,Gannon, Inm             º   ³
ÀÄĺÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺÄÄÄÙ
   ÓÄÄÄÄÄÄÄÄÄÄÄÄÄÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄĽ

                 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
   ÖÄÄÄÄÄÄÄÄÄÄÄÄ[³  x R O A D s  H E A D Q U A R T E R S  ³]ÄÄÄÄÄÄÄÄÄÄÄÄÄ·
ÚÄĺÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺÄÄÄ¿
³  º Eternal Damnation .......1 Node......+31...Davadian........WORLD HQ º   ³
³  º Mystical Places .........6 Nodes.....+31...Thc............. EURO HQ º   ³
³  º Rest In Peace ...........1 Node......+54...Sludge..........  ARG HQ º   ³
³  º Central Park ............3 Nodes.....+61...Mr. Bungle........ OZ HQ º   ³
³  º Point Break .............7 Nodes.....+49...Voyage........ GERMAN HQ º   ³
³  º Magic Affair ............4 Nodes.....+7....Omen......... RUSSIAN HQ º   ³
³  º Dead On Time ............2 Nodes.....+47...Nighty..... NORWEGIAN HQ º   ³
³  º High Resolution .........1 Node......+44...Pascal............ UK HQ º   ³
³  º Dark Forces .............3 Nodes.....+46...Gannon/Phasia SWEDISH HQ º   ³
³  º Killertown ..............7 Nodes.....+32...The Killer... BELGIUM HQ º   ³
³  º Unknown Area ............1 Node .....+48...Vibr8......... POLISH HQ º   ³
³  ºÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĺ   ³
³  º                 x R O A D s  M E M B E R S I T E S                  º   ³
³  ºÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĺ   ³
³  º Sector Seven ............2 Nodes.....+46...Inm/Rawlock. SWEDISH MBR º   ³
³  º Tresor ..................1 Node......+46...Ken8........ SWEDISH MBR º   ³
³  º Fireball ................2 Nodes.....+49...Star......... GERMAN MBR º   ³
ÀÄĺÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺÄÄÄÙ
   ÓÄÄÄÄÄÄÄÄÄÄÄÄÄÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄĽ

                 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
   ÖÄÄÄÄÄÄÄÄÄÄÄÄ[³ T H A N K S   G R E E T S    N O T E S ³]ÄÄÄÄÄÄÄÄÄÄÄÄÄ·
ÚÄĺÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺÄÄÄ¿
³  º       xROADs thanks & greets the following groups/persons:          º   ³
³  º                                                                     º   ³
³  º          Food, Goodspeed, Motiv8, Stf and many others               º   ³
³  º                                                                     º   ³
³  ºÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺ   ³
³  º         xROADs thanks & greets the following individuals :          º   ³
³  º                                                                     º   ³
³  º     Davadian, Darktrooper, Inm, Nighty, Mtl, Cyberkid, The Best     º   ³
³  º                  and all others in #FOOD and #STF                   º   ³
³  º                                                                     º   ³
³  ºÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺ   ³
³  º                             N O T E S                               º   ³
³  ºÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĺ   ³
³  º                                                                     º   ³
³  º   xROADs is looking for talented people like you for coding doors,  º   ³
³  º     managing the xROADs doors coding division and for art work.     º   ³
³  º     if you're interested in getting xROADs back up again email      º   ³
³  º      to: xroads@stack.nl or join #xroads on Efnet and contact       º   ³
³  º                       one of the leaders!                           º   ³
³  º                                                                     º   ³
³  º      xROADs changed WHQ! Our new world headquarters will be         º   ³
³  º                Eternal Damnation +31-765-600721                     º   ³
³  º                                                                     º   ³
³  º                 Visit us on the Efnet on #XROADS                    º   ³
³  º              and contact one of the council members                 º   ³
³  º                                                                     º   ³
³  º         You can contact us via E-mail :   xroads@stack.nl           º   ³
³  º                     or call the xROADs WHQ at                       º   ³
³  º                        +31-765-600721 (28K8)                        º   ³
³  º                                                                     º   ³
³  º      All new releases can be downloaded from our www-page at        º   ³
³  º                      www.stack.nl/~xroads                           º   ³
³  º                                                                     º   ³
³  ºÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĺ   ³
³  º  Nfo & Xrd Logo By SQUiZZY. Nfo Last Updated By RaPiDo on 03/23/97  º   ³
ÀÄĺÄÄÄÄÄÄÄÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÄÄÄÄÄÄĺÄÄÄÙ
   ÓÄÄÄÄÄÄÄÄÄÄÄÄij                                        ³ÄÄÄÄÄÄÄÄÄÄÄÄÄĽ
                 ³ Please report bugs! By reporting bugs  ³
                 ³   you help us to improve our work!     ³
                 ³                                        ³
                 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
@BEGIN_FILE_ID.DIZ
     ÛÛÛ     °       °             °
 Ä  ÄÛ²ÛÄ--Ä[Desire Development Mag #1]Ä--
   ° Û²Û ° ° ± °   ° ± °     ° ° ° ± ° °
 ±ÜÜÜÜÜÜ ÜÜÜÜÜÜÜ  ÜÜÜÜÜÜ ÜÜÜ ÜÜÜÜÜÜ  ÜÜÜÜÜÜÜ
 ÛÛÛßßßß ÛÛÛßßßß ÛÛ²ÛÛÛÛ ßßß ÛÛÛßÛÛÛ ÛÛÛßßßß
 Û²Û Û²Û Û²Ûßßß  Û²±ÛÜÜÜ ÛÛÛ Û²ÛÜÛÛß Û²Ûßßß°
 Û²Û Û²Û Û²Û Û²Û ÜÜÜ Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û
 Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û
 ±ßßßßßß ±ßßßßßß° ßßßßßß°ßßß° ßß°ßßß± ßßßßßß
 °.-------------------------------------.sQZ
  |    Desire Development Magazine #1   |² ±
  |     Download XRD-DEV1.ZIP too!      |±
  `-------------------------------------'
@END_FILE_ID.DIZ

file_id.diz

     ÛÛÛ     °       °             °
 Ä  ÄÛ²ÛÄ--Ä--Ä----[xROADs dESiRE util!]Ä--
   ° Û²Û ° ° ± °   ° ± °     ° ° ° ± ° °
 ±ÜÜÜÜÜÜ ÜÜÜÜÜÜÜ  ÜÜÜÜÜÜ ÜÜÜ ÜÜÜÜÜÜ  ÜÜÜÜÜÜÜ
 ÛÛÛßßßß ÛÛÛßßßß ÛÛ²ÛÛÛÛ ßßß ÛÛÛßÛÛÛ ÛÛÛßßßß
 Û²Û Û²Û Û²Ûßßß  Û²±ÛÜÜÜ ÛÛÛ Û²ÛÜÛÛß Û²Ûßßß°
 Û²Û Û²Û Û²Û Û²Û ÜÜÜ Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û
 Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û Û²Û
 ±ßßßßßß ±ßßßßßß° ßßßßßß°ßßß° ßß°ßßß± ßßßßßß
 °.-------------------------------------.sQZ
  |     Desire Development Pack #1      |² ±
  |  Including The Desire Doorkit 1.2!  |±
  |          By RaPiDo/xROADs           |°
  `--[March 29th 1997]------------------'