home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / pascal / rmdoor30.zip / RMDOOR.DOC < prev    next >
Text File  |  1992-08-18  |  19KB  |  991 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.                                      RMDoor
  33.                                    Version 3.0
  34.              Copyright (c) 1991-1992 By Mark Goodwin and Randy Hunt
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.      RMDoor                                                               i
  74.  
  75.                                 COPYRIGHT NOTICE
  76.                                 ----------------
  77.  
  78.      RMDoor is a copyrighted program  being distributed under the shareware
  79.      concept.  As such you  may use RMDoor for a period of  30 days without
  80.      registering the  software.   After the 30  day evaluation  period, you
  81.      must register  your copy  of RMDoor  or you  will be  in violation  of
  82.      United States and International copyright laws.
  83.  
  84.      As a  shareware program,  RMDoor may be  freely distributed  through a
  85.      BBS.  Shareware  distributors may distribute copies of  RMDoor on disk
  86.      for a modest disk duplication charge not to exceed $6 per disk.
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.      RMDoor                                                              ii
  140.  
  141.                                     WARRANTY
  142.                                     --------
  143.  
  144.      RMDoor is distributed without warranty.  In no event will Mark Goodwin
  145.      or Randy  Hunt be  liable to you  for damages,  including any  loss of
  146.      profits,  lost savings, or  other incidental or  consequential damages
  147.      arising  out of your use  of or inability to  use the program, even if
  148.      Mark Goodwin,  Randy Hunt,  or an  authorized representative  has been
  149.      advised of the possibility  of such damages.   Mark Goodwin and  Randy
  150.      Hunt will not be liable for any such claim by any other party.
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.      RMDoor                                                             iii
  206.  
  207.                                 TABLE OF CONTENTS
  208.                                 -----------------
  209.  
  210.  
  211.      INTRODUCTION  . . . . . . . . . . . . . . . . . . . . . . . . . .    1
  212.  
  213.      USING RMDOOR  . . . . . . . . . . . . . . . . . . . . . . . . . .    2
  214.  
  215.      RUNNING AN RMDOOR DOOR  . . . . . . . . . . . . . . . . . . . . .    3
  216.  
  217.      SPECIAL KEYS  . . . . . . . . . . . . . . . . . . . . . . . . . .    4
  218.  
  219.      THE RMDOOR VARIABLES  . . . . . . . . . . . . . . . . . . . . . .    5
  220.           ansicolor  . . . . . . . . . . . . . . . . . . . . . . . . .    5
  221.           baudrate . . . . . . . . . . . . . . . . . . . . . . . . . .    5
  222.           bbsname  . . . . . . . . . . . . . . . . . . . . . . . . . .    5
  223.           callingfrom  . . . . . . . . . . . . . . . . . . . . . . . .    5
  224.           doorname . . . . . . . . . . . . . . . . . . . . . . . . . .    5
  225.           lockedrate . . . . . . . . . . . . . . . . . . . . . . . . .    5
  226.           minutesleft  . . . . . . . . . . . . . . . . . . . . . . . .    5
  227.           phonenumber  . . . . . . . . . . . . . . . . . . . . . . . .    6
  228.           seclevel . . . . . . . . . . . . . . . . . . . . . . . . . .    6
  229.           sysopname  . . . . . . . . . . . . . . . . . . . . . . . . .    6
  230.           userfirstname  . . . . . . . . . . . . . . . . . . . . . . .    6
  231.           username . . . . . . . . . . . . . . . . . . . . . . . . . .    6
  232.  
  233.      THE RMDOOR PROCEDURES AND FUNCTIONS . . . . . . . . . . . . . . .    7
  234.           rmclrscr . . . . . . . . . . . . . . . . . . . . . . . . . .    7
  235.           rmdisplayfile  . . . . . . . . . . . . . . . . . . . . . . .    7
  236.           rmgetbackground  . . . . . . . . . . . . . . . . . . . . . .    7
  237.           rmgetforeground  . . . . . . . . . . . . . . . . . . . . . .    7
  238.           rmgotoxy . . . . . . . . . . . . . . . . . . . . . . . . . .    7
  239.           rmreadi  . . . . . . . . . . . . . . . . . . . . . . . . . .    7
  240.           rmreadkey  . . . . . . . . . . . . . . . . . . . . . . . . .    7
  241.           rmreadl  . . . . . . . . . . . . . . . . . . . . . . . . . .    8
  242.           rmreads  . . . . . . . . . . . . . . . . . . . . . . . . . .    8
  243.           rmsetcolor . . . . . . . . . . . . . . . . . . . . . . . . .    8
  244.           rmtimeleft . . . . . . . . . . . . . . . . . . . . . . . . .    9
  245.           rmtimeon . . . . . . . . . . . . . . . . . . . . . . . . . .    9
  246.           rmwrite  . . . . . . . . . . . . . . . . . . . . . . . . . .    9
  247.           rmwritei . . . . . . . . . . . . . . . . . . . . . . . . . .    9
  248.           rmwritel . . . . . . . . . . . . . . . . . . . . . . . . . .    9
  249.           rmwriteln  . . . . . . . . . . . . . . . . . . . . . . . . .    9
  250.           rmwritelni . . . . . . . . . . . . . . . . . . . . . . . . .    9
  251.           rmwritelnl . . . . . . . . . . . . . . . . . . . . . . . . .   10
  252.  
  253.      SUPPORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   11
  254.  
  255.      REGISTRATION  . . . . . . . . . . . . . . . . . . . . . . . . . .   12
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.      RMDoor                                                               1
  272.  
  273.                                   INTRODUCTION
  274.                                   ------------
  275.  
  276.      RMDoor is  a comprehensive  set of Turbo  Pascal routines  designed to
  277.      enable programmers to easily write doors for BBSes.  The following are
  278.      some of RMDoor's many features:
  279.  
  280.           Assembly language  serial input/output routines  for maximum
  281.           speed.
  282.  
  283.           Fully supports high  speed modems: 16550 FIFO  buffering and
  284.           locked serial ports.
  285.  
  286.           Built in ANSI  terminal emulator.  No need  to have ANSI.SYS
  287.           loaded in memory.
  288.  
  289.           Supports all  of the  most popular  door data  file formats:
  290.           TriBBS, PCBoard, GAP  (DOOR.SYS), Spitfire, WildCat!,  RBBS,
  291.           and WWIV.   Thus, a  door built around RMDoor  is compatible
  292.           with a wide range of BBS software.
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.      RMDoor                                                               2
  338.  
  339.                                   USING RMDOOR
  340.                                   ------------
  341.  
  342.      Because RMDoor  comes  supplied  is a  Turbo  Pascal unit  it  can  be
  343.      seamlessly integrated with your door  program by simply including  the
  344.      following two lines in your door program:
  345.  
  346.      {$M $4000,0,0}
  347.      uses rmdoor;
  348.  
  349.      The first line is a {$M} compiler directive and is necessary to enable
  350.      RMDoor's  Drop to DOS function.  If  you omit this line from your door
  351.      program, RMDoor will not be  able to drop to  DOS and will display  an
  352.      appropriate  error message  to the  sysop.   NOTE:  The {$M}  compiler
  353.      directive  also affects your program's  heap space.   Be sure that the
  354.      final  two values  are  set accordingly  if  you dynamically  allocate
  355.      memory.
  356.  
  357.      The  second line  is a  "uses"  statement and  simply instructs  Turbo
  358.      Pascal to include the RMDOOR.TPU unit in your compiled door program.
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.      RMDoor                                                               3
  404.  
  405.                              RUNNING AN RMDOOR DOOR
  406.                              ----------------------
  407.  
  408.      An RMDoor-based door program  is run by entering a  command similar to
  409.      the following:
  410.       
  411.      door config
  412.  
  413.      In the  above command line, "door" is the name of your door's EXE file
  414.      and the  "config" parameter  is the name  of the  door's configuration
  415.      file.  The configuration file can have any name the sysop chooses, but
  416.      it must reside in  the same directory as the door.   The configuration
  417.      file is an ASCII text file with the following format:
  418.  
  419.      Line 1:   Door data file type.
  420.      Line 2:   Path to the door data file(s).
  421.      Line 3:   BBS name.
  422.      Line 4:   Sysop's name.
  423.      Line 5:   Locked baud rate.
  424.  
  425.      As illustrated above, the door's data file type is specified in line 1
  426.      and can be PCB for PCBoard,  GAP for GAP (DOOR.SYS), SF for  Spitfire,
  427.      RBBS for  RBBS, WC for WildCat!, TRIBBS for  TriBBS, or WWIV for WWIV.
  428.      The  locked baud rate  is specified in  line 5.   If the sysop doesn't
  429.      lock  his serial  port, he must  specify 0  for the locked  baud rate.
  430.      NOTE: Although  many door formats do pass the  locked baud rate in the
  431.      door  data  files,  some older  formats  such  as RBBS  do  not.   For
  432.      conformity, RMDoor requires  that you specify the locked  baud rate in
  433.      line 5 and ignores any value passed in the door data files.
  434.  
  435.      The following is a sample door configuration file:
  436.  
  437.      PCB
  438.      C:\tribbs\
  439.      The Lobster Buoy
  440.      Mark Goodwin
  441.      38400
  442.  
  443.      RMDoor can be  run locally  without a  door data file  (handy for  the
  444.      sysop to  use the door  without logging on  to the BBS)  by specifying
  445.      LOCAL after the configuration file  parameter in the DOS command line.
  446.      RMDoor will  request the  user to enter  his name  before running  the
  447.      door.
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.      RMDoor                                                               4
  470.  
  471.                                   SPECIAL KEYS
  472.                                   ------------
  473.  
  474.      While a door is running, the  sysop can press certain special keys  to
  475.      perform  a variety  of functions.    The following  is a  list  of the
  476.      functions that the RMDoor special keys perform:
  477.  
  478.      Key(s)              Function
  479.  
  480.      HOME                Toggles  between the user status window and a help
  481.                          display that lists the RMDoor special keys.
  482.  
  483.      F6                  Takes 5 minutes away from the caller.
  484.                          NOTE:  This will NOT be returned to BBS.
  485.  
  486.      F7                  Gives 5 minutes to the caller.
  487.                          NOTE:  This will NOT be returned to the BBS.
  488.  
  489.      F9                  Quit the door and return the caller to the BBS.
  490.  
  491.      F10                 Enter  chat mode.  Pressing  the ESC key exits the
  492.                          chat mode.
  493.  
  494.      Alt+D               Drop to DOS.
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.      RMDoor                                                               5
  536.  
  537.                               THE RMDOOR VARIABLES
  538.                               --------------------
  539.  
  540.      The following  are the global  variables that RMDoor supplies  for the
  541.      door author's convenience:
  542.  
  543.  
  544.      ansicolor : boolean;
  545.  
  546.      The ansicolor variable  is set to True  for a caller using  ANSI color
  547.      graphics or to False for a monochrome caller.
  548.  
  549.  
  550.      baudrate : longint;
  551.  
  552.      The baudrate  variable holds  the caller's  baud rate.    This is  the
  553.      callers actual  connection rate and not  the locked baud rate.   NOTE:
  554.      RMDoor will set baudrate to 0 for local calls.
  555.  
  556.  
  557.      bbsname : string;
  558.  
  559.      The bbsname variable holds the BBS's name.
  560.  
  561.  
  562.      callingfrom : string;
  563.  
  564.      The callingfrom  variable holds the user's  city and state.   This may
  565.      not be supported by all door formats  and will be set to a null string
  566.      if not.
  567.  
  568.  
  569.      doorname : string;
  570.  
  571.      The doorname variable holds the door's name.  The door's name  will be
  572.      displayed in the  user status window.   NOTE: It is the  door author's
  573.      responsibility to assign a value to this variable.
  574.  
  575.  
  576.      lockedrate : longint;
  577.  
  578.      The lockedrate variable  holds the serial port's locked  baud rate, if
  579.      any.
  580.  
  581.  
  582.      minutesleft : integer;
  583.  
  584.      The minutesleft  variable holds the  number of minutes the  caller had
  585.      remaining when he entered the door.
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.      RMDoor                                                               6
  602.  
  603.  
  604.      phonenumber : string;
  605.  
  606.      The  phonenumber variable holds the user's phone number.  This may not
  607.      be supported by all door  formats and will be set to a  null string if
  608.      not.
  609.  
  610.  
  611.      seclevel : integer;
  612.  
  613.      The seclevel variable holds the caller's security level.
  614.  
  615.  
  616.      sysopname : string;
  617.  
  618.      The sysopname variable holds the sysop's name.
  619.  
  620.  
  621.      userfirstname : string;
  622.  
  623.      The userfirstname variable holds the user's first name.
  624.  
  625.  
  626.      username : string;
  627.  
  628.      The username variable holds the user's name.
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.      RMDoor                                                               7
  668.  
  669.                        THE RMDOOR PROCEDURES AND FUNCTIONS
  670.                        -----------------------------------
  671.  
  672.      The following is a explanation of procedures and functions that RMDoor
  673.      provides:
  674.  
  675.  
  676.      procedure rmclrscr;
  677.  
  678.      The rmclrscr procedure clears both the local and remote displays.
  679.  
  680.  
  681.      procedure rmdisplayfile(filename : string; pause : boolean);
  682.  
  683.      The  rmdisplayfile procedure displays a file to both the local and the
  684.      remote displays.  The file to be displayed is specified by "filename".
  685.      The "pause"  parameter specifies whether or  not the display is  to be
  686.      paused every 24 lines.
  687.  
  688.  
  689.      function rmgetbackground : integer;
  690.  
  691.      The rmgetbackground function returns the current background color.
  692.  
  693.  
  694.      function rmgetforeground : integer;
  695.  
  696.      The rmgetforeground function returns the current foreground color.
  697.  
  698.  
  699.      procedure rmgotoxy(x, y : integer);
  700.  
  701.      The rmgotoxy  procedure positions  the cursor for  both the  local and
  702.      remote displays.  The cursor's new column position is specified by the
  703.      "x" parameter  and  its new  row  position  is specified  by  the  "y"
  704.      parameter.  NOTE:  This will only  work if the  user has ANSI  enabled
  705.      (RMDoor  will ignore this statement  if called when  the user does not
  706.      have ANSI enabled).
  707.  
  708.  
  709.      function rmreadi : integer;
  710.  
  711.      The rmreadi function returns the  value of an integer that  is entered
  712.      either locally or remotely.
  713.  
  714.  
  715.      function rmreadkey : char;
  716.  
  717.      The rmreadkey  function waits  for either  a key  to be  pressed or  a
  718.      character to come in through the serial port.  As soon as  a character
  719.      is available, its value will be returned by rmreadkey.
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.  
  733.      RMDoor                                                               8
  734.  
  735.      function rmreadl : longint;
  736.  
  737.      The rmreadl function  returns the value  of a longint that  is entered
  738.      either locally or remotely.
  739.  
  740.  
  741.      function rmreads : string;
  742.  
  743.      The  rmreads function returns  the value of  a string that  is entered
  744.      either locally or remotely.
  745.  
  746.  
  747.      procedure rmsetcolor(f, b : integer);
  748.  
  749.      The rmsetcolor procedure sets the foreground color (the "f" parameter)
  750.      and the background  color (the "b" parameter)  for both the  local and
  751.      remote displays.   NOTE: The colors will only be set if the caller has
  752.      ANSI color graphics enabled.  The foreground colors are as follows:
  753.  
  754.            0 - Black
  755.            1 - Blue
  756.            2 - Green
  757.            3 - Cyan
  758.            4 - Red
  759.            5 - Magenta
  760.            6 - Brown
  761.            7 - White
  762.            8 - Dark grey
  763.            9 - Light blue
  764.           10 - Light green
  765.           11 - Light cyan
  766.           12 - Light red
  767.           13 - Light magenta
  768.           14 - Yellow
  769.           15 - Bright white
  770.  
  771.      The background colors are as follows:
  772.  
  773.            0 - Black
  774.            1 - Blue
  775.            2 - Green
  776.            3 - Cyan
  777.            4 - Red
  778.            5 - Magenta
  779.            6 - Brown
  780.            7 - White
  781.            8 - Black with blinking foreground
  782.            9 - Blue with blinking foreground
  783.           10 - Green with blinking foreground
  784.           11 - Cyan with blinking foreground
  785.           12 - Red with blinking foreground
  786.           13 - Magenta with blinking foreground
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.      RMDoor                                                               9
  800.  
  801.           14 - Yellow with blinking foreground
  802.           15 - White with blinking foreground
  803.  
  804.  
  805.      function rmtimeleft : integer;
  806.  
  807.      The rmtimeleft function  returns the number of minutes  the caller has
  808.      remaining.
  809.  
  810.  
  811.      function rmtimeon : integer;
  812.  
  813.      The rmtimeon  function returns the  number of minutes that  the caller
  814.      has been in the door.
  815.  
  816.  
  817.      procedure rmwrite(s:string);
  818.  
  819.      The rmwrite procedure displays a string both locally and remotely.
  820.  
  821.  
  822.      procedure rmwritei(i : integer);
  823.  
  824.      The rmwritei procedure displays an integer both locally and remotely.
  825.  
  826.  
  827.      procedure rmwritel(l : longint);
  828.  
  829.      The rmwritel procedure displays a longint both locally and remotely.
  830.  
  831.  
  832.      procedure rmwriteln(s:string);
  833.  
  834.      The rmwriteln procedure displays  a string both locally and  remotely.
  835.      After  displaying the string,  RMDoor will  send a  CR/LF pair  to the
  836.      local and remote displays.
  837.  
  838.  
  839.      procedure rmwritelni(i : integer);
  840.  
  841.      The   rmwritelni  procedure  displays  an  integer  both  locally  and
  842.      remotely.  After displaying the integer, RMDoor will send a CR/LF pair
  843.      to the local and remote displays.
  844.  
  845.  
  846.      procedure rmwritelnl(l : longint);
  847.  
  848.      The rmwritelnl procedure displays a longint both locally and remotely.
  849.      After displaying  the longint,  RMDoor will send  a CR/LF pair  to the
  850.      local and remote displays.
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.      RMDoor                                                              10
  866.  
  867.                                      SUPPORT
  868.                                      -------
  869.  
  870.      You may  obtain assistance  with a RMDoor  related problem  by calling
  871.      either The Lobster Buoy at 207-941-0805.
  872.  
  873.  
  874.  
  875.  
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.  
  900.  
  901.  
  902.  
  903.  
  904.  
  905.  
  906.  
  907.  
  908.  
  909.  
  910.  
  911.  
  912.  
  913.  
  914.  
  915.  
  916.  
  917.  
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.      RMDoor                                                              11
  932.  
  933.                                   REGISTRATION
  934.                                   ------------
  935.  
  936.      Registration of  RMDoor is only  $25.00.  Please  use the form  in the
  937.      file  REGISTER.TXT.   When you  register  RMDoor, you  will receive  a
  938.      letter  of verification  and  a note  on how  to  turn your  shareware
  939.      version of RMDoor into a registered version.
  940.  
  941.  
  942.  
  943.  
  944.  
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962.  
  963.  
  964.  
  965.  
  966.  
  967.  
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983.  
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.