home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / lsmt213c.zip / setalias.cmd < prev    next >
OS/2 REXX Batch file  |  1996-10-09  |  12KB  |  394 lines

  1. /*---------------------------------------------------------------------------*\
  2. |   SET all ALIAS to a LAN Server 3.0 and higher                              |
  3. |   from an ASCII File                                                        |
  4. |                                   (C) Alain Rykaert IBM Belgium SEP95-MAY96 |
  5. \*---------------------------------------------------------------------------*/
  6.  
  7.     Parse Arg Option
  8.  
  9.     Call INIT                    /* Initialisation of DLL's and other stuff*/
  10.     Call CHKOPT                          /* Check Options & display Welcome*/
  11.     Call CHKPWS                               /* Check the PWS & Admin name*/
  12.     Call MAIN                                            /* do the main job*/
  13.     Call QUIT                                                       /* Quit*/
  14.  
  15.  MAIN:/* ------------------------------------------------------ MAIN: -------*/
  16.  
  17.     Call Time('R')
  18.    'if exist' CHKF 'del' CHKF
  19.  
  20.     AC = 0
  21.     DC = 0
  22.     EC = 0
  23.     ExitCode = X2D('FE00')                          /* Good CID Return code*/
  24.  
  25.     do while Lines(INPF)
  26.        LLINE = LineIN(INPF)
  27.        OLINE = LLINE
  28.        parse value LLINE with OPT ';' LLINE
  29.        select
  30.         when OPT = '',
  31.          | LLINE = '',
  32.          | Left(Strip(OPT),1) = '*' then Iterate
  33.         when Translate(OPT) = 'OPT' then Call COLUMNS
  34.         when Translate(OPT) = 'A'   then Call ADDALIAS
  35.         when Translate(OPT) = 'D'   then Call DELALIAS
  36.         when Translate(OPT) = 'U'   then Call UPDALIAS
  37.         otherwise Iterate
  38.        end
  39.        if EC
  40.         then do
  41.                  Call LineOut CHKF, OLINE
  42.                  EC = 0
  43.                  ExitCode = X2D('1604')              /* Bad CID return code*/
  44.              end
  45.         else Nop
  46.     end
  47.     say '0909'x 'Total Time  =' Trunc(Time('E'),2)
  48.  
  49.     if AC then do
  50.                  Topic_List = 'CHKAPPL'
  51.                  Call GETANS
  52.                                        /* if an Alias is Added, Apply !     */
  53.                end
  54.     if DC then do
  55.                  Topic_List = 'CHKASSGN'
  56.                  Call GETANS
  57.                                        /* if an Alias is delete, CHKASG     */
  58.                end
  59.  
  60.     Return
  61.  
  62.  ADDALIAS:/* -------------------------------------------------- ADDALIAS: ---*/
  63.  
  64.     EC = 0                                                   /* Error Check*/
  65.     RCode = 0          /* Return code can be set to 1 by the CHKDIR routine*/
  66.  
  67.     i  = 0
  68.     do while LLINE <> ''
  69.        i = i + 1
  70.        COLNAME = Strip(COLNAME.i)
  71.        parse value LLINE with VALUE ';' LLINE
  72.        ALIASINFO.COLNAME = Strip(VALUE)
  73.     end
  74.  
  75.     if TRACE
  76.      then do j = 1 to COLT
  77.              COLNAME = Strip(COLNAME.j)
  78.              say '09'x '>'ALIASINFO.COLNAME'<' C2X(ALIASINFO.COLNAME)
  79.           end
  80.      else Nop
  81.  
  82.     Dest_Dir = ALIASINFO.PATH
  83.     DRIVE  = Left(Dest_Dir,1)
  84.  
  85.     hi = 0
  86.     do while Dest_Dir <> ''
  87.        hi = hi + 1
  88.        parse value Dest_Dir with DIR.hi '\' Dest_Dir /*                          */
  89.     end
  90.  
  91.     if Left(ALIASINFO.SERVER,2) = '\\'              /* older LS 3.0 use this */
  92.      then Dest_Dir =     ALIASINFO.SERVER'\'DRIVE'$'
  93.      else Dest_Dir = '\\'ALIASINFO.SERVER'\'DRIVE'$'
  94.  
  95.     do hj = 2 to hi
  96.        Dest_Dir = Dest_Dir'\'DIR.hj
  97.        Call ChkDir Dest_Dir               /* Check the destination Directory */
  98.     end
  99.  
  100.     if RCode           /* if an error occured while cheking the destination  */
  101.      then Return       /*  leave the Add routine */
  102.      else Nop
  103.  
  104.     RC = NetAdd(20, 'ALIASINFO', '\\'SRVNAME)
  105.     if RC = 0
  106.        then do
  107.                RC = ''
  108.                AC = 1
  109.             end
  110.        else EC = 1
  111.     Call LOGIT 'Add Alias', ALIASINFO.NAME, RC
  112.  
  113.     Return
  114.  
  115.  DELALIAS: /*-------------------------------------------------- DELALIAS: ---*/
  116.  
  117.     EC = 0           /* Error Check */
  118.     RCode = 0        /* Return code can be set to 1 by the CHKDIR routine */
  119.  
  120.     i  = 0
  121.     do while LLINE <> ''
  122.        i = i + 1
  123.        COLNAME = Strip(COLNAME.i)
  124.        parse value LLINE with VALUE ';' LLINE
  125.        ALIASINFO.COLNAME = Strip(VALUE)
  126.     end
  127.  
  128.     RC = NetDelete(20, '\\'SRVNAME, ALIASINFO.NAME)
  129.     if RC = 0
  130.        then do
  131.                RC = ''
  132.                DC = 1        /* if an ALIAS is delete, warn the ADMIN ! */
  133.             end
  134.        else EC = 1
  135.  
  136.     Call LOGIT 'Delete Alias', ALIASINFO.NAME, RC
  137.  
  138.     Return
  139.  
  140.  UPDALIAS: /*-------------------------------------------------- UPDALIAS: ---*/
  141.  
  142.     EC = 0           /* Error Check */
  143.     RCode = 0        /* Return code can be set to 1 by the CHKDIR routine */
  144.  
  145.     i  = 0
  146.     do while LLINE <> ''
  147.        i = i + 1
  148.        COLNAME = Strip(COLNAME.i)
  149.        parse value LLINE with VALUE ';' LLINE
  150.        ALIASINFO.COLNAME = Strip(VALUE)
  151.     end
  152.  
  153.     if TRACE
  154.      then do j = 1 to COLT
  155.              COLNAME = Strip(COLNAME.j)
  156.              say '09'x '>'ALIASINFO.COLNAME'<' C2X(ALIASINFO.COLNAME)
  157.           end
  158.      else Nop
  159.  
  160.     RC = NetGetInfo(20, 'OLDINFO', '\\'SRVNAME, ALIASINFO.NAME) /* Get OLD ALIAS setting */
  161.     if RC = 0
  162.        then Nop
  163.        else do
  164.                Call LOGIT 'Get Alias', ALIASINFO.NAME, RC
  165.                Return
  166.             end
  167.  
  168.     do j = 1 to COLT
  169.        COLNAME = Strip(COLNAME.j)
  170.        if OLDINFO.COLNAME <> ALIASINFO.COLNAME
  171.         then do
  172.                 select
  173.                  when COLNAME = 'NAME'     |,
  174.                       COLNAME = 'SERVER'   |,
  175.                       COLNAME = 'PATH'     |,
  176.                       COLNAME = 'NETNAME'  |,
  177.                       COLNAME = 'LOCATION'
  178.                   then Call LOGIT 'Update Alias', ALIASINFO.COLNAME COLNAME '- Update not allowed', ''
  179.                  otherwise Call SETINFO
  180.                 end
  181.              end
  182.         else Nop
  183.     end
  184.  
  185.     Return
  186.  
  187.  CHKDIR: /*---------------------------------------------------- CHKDIR: ----*/
  188.  
  189.     Parse Arg Dir_Name
  190.  
  191.     RCode = 0   /* Reset the Return Code */
  192.  
  193.     if Stream(Dir_Name, 'C', 'QUERY EXIST') <> '' /* is this a file ? */
  194.      then RCode = 1  /* Bad RC, there already exist a file with this name */
  195.      else do
  196.              Call SysFileTree Dir_Name, 'DIREXIST', 'DO' /* does this DIR exist ? */
  197.              if DIREXIST.0 = 0
  198.               then do
  199.                       RC = SysMKDir(Dir_Name)
  200.                       if RC <> 0
  201.                        then RCode = 1
  202.                        else Nop
  203.                    end
  204.               else Nop
  205.           end
  206.  
  207.     if RCode = 1
  208.      then do
  209.              LOG_Text = 'Error while creating' Dir_Name
  210.              Call Logit 'Create Directory', LOG_Text, RCode
  211.           end
  212.      else Nop
  213.  
  214.     Return
  215.  
  216.  SETINFO: /*--------------------------------------------------- SETINFO: ----*/
  217.  
  218.     RC = NetSetInfo(20, COLNAME, ALIASINFO.COLNAME, '\\'SRVNAME, ALIASINFO.NAME)
  219.      if RC = 0
  220.       then RC = ''
  221.       else Nop
  222.     Call LOGIT 'Update Alias', ALIASINFO.NAME '-' ALIASINFO.COLNAME, RC
  223.  
  224.     Return
  225.  
  226.  COLUMNS: /*--------------------------------------------------- COLUMNS: ----*/
  227.  
  228.     i = 0
  229.     do while LLINE <> ''
  230.        i = i + 1
  231.        parse value LLINE with COLNAME.i ';' LLINE
  232.        if OPTION = 1
  233.           then say '09'x ESC'[0;1;35m' COLNAME.i ESC'[0m'
  234.           else Nop
  235.     end
  236.  
  237.     if COLNAME.1 <> 'NAME'
  238.      then do
  239.              OUT = 'Error reading' INPF ': Column 2 MUST be NAME, Column 3 MUST be PASSWORD'
  240.              say ESC'[0;1;31m' OUT  ESC'[0m'
  241.              Call LOGIT OUT
  242.              Exit
  243.           end
  244.      else Nop
  245.  
  246.     COLT = i                      /* Total numbers of columns */
  247.  
  248.     Return
  249.  
  250.  CHKOPT: /*---------------------------------------------------- CHKOPT: -----*/
  251.  
  252.     SRVNAME = '';
  253.     INPF = 'ALIAS.CSV';
  254.     LOGF = 'LSMT.LOG';
  255.     CHKF = 'ALIAS.CHK';
  256.     PIPE = '';
  257.     TRACE = 0;
  258.     MUTE = 0;
  259.  
  260.     OPTION = Translate(OPTION)
  261.     do while OPTION <> ''
  262.        Parse value OPTION with ARGUMENT ' ' OPTION
  263.        select
  264.         when Left(ARGUMENT,5) = '/SRV:' then SRVNAME = Substr(ARGUMENT,6)
  265.         when Left(ARGUMENT,5) = '/INP:' then INPF    = Substr(ARGUMENT,6)
  266.         when Left(ARGUMENT,5) = '/LOG:' then LOGF    = Substr(ARGUMENT,6)
  267.         when Left(ARGUMENT,5) = '/CHK:' then CHKF    = Substr(ARGUMENT,6)
  268.         when Left(ARGUMENT,5) = '/PIP:' then PIPE    = Substr(ARGUMENT,6)
  269.         when Left(ARGUMENT,2) = '/M'    then MUTE    = 1
  270.         when Left(ARGUMENT,2) = '/T'    then TRACE   = 1
  271.         otherwise Nop
  272.        end
  273.     end
  274.  
  275.     if SRVNAME = '' then signal GETHELP
  276.  
  277.     if \MUTE
  278.      then do
  279.              Topic1 = 'SETWELCOME'
  280.              Topic_String.Topic1.1 = SRVNAME
  281.              Topic_String.Topic1.2 = INPF
  282.              Topic_String.Topic1.3 = LOGF
  283.              Topic_String.Topic1.4 = CHKF
  284.              Topic_String.Topic1.5 = PIPE' '
  285.              Topic_List = 'WELCOMELOGO' Topic1 'SETALIAS'
  286.              Call GETANS
  287.              Parse VALUE SysCurPos() With Old_R Old_C; '@pause'
  288.              Call SysCurPos Old_R, Old_C; say ESC'[K'
  289.           end
  290.      else do
  291.              say 'ServerName =' SRVNAME
  292.              say 'InputFile  =' INPF
  293.              say 'LogFile    =' LOGF
  294.              say 'CheckFile  =' CHKF
  295.           end
  296.  
  297.     Return
  298.  
  299.  CHKPWS: /*---------------------------------------------------- CHKPWS: -----*/
  300.  
  301.     RC = NetGetInfo(350, 'WKSTAINFO','')
  302.     if RC = 0
  303.      then do
  304.              ADMNAME = WKSTAINFO.UserName
  305.              PWSNAME = WKSTAINFO.ComputerName
  306.           end
  307.      else do
  308.             Call LOGIT 'Get PWS Info', ,RC
  309.             Call Quit
  310.           end
  311.  
  312.     Return
  313.  
  314.  INIT: /*------------------------------------------------------ INIT: -------*/
  315.  
  316.     Call RgUtil   '/m' /* Rexx Utilities        */
  317.     Call RgUtils  '/m' /* Rexx Utilities        */
  318.     Call RgLSRXUT '/m' /* Lan Server Rexx Utils */
  319.  
  320.     Parse Upper Source . . P_NAME
  321.     PRGN = Filespec('N', Left(P_NAME, Length(P_NAME) -4))
  322.  
  323.    '@echo off'
  324.     ESC   = '1B'x
  325.     REDIR = '>NUL 2>NUL'
  326.  
  327.     Resource_File = 'LSMT.RSC'
  328.     Call CHKFILE Resource_File
  329.  
  330.     Return
  331.  
  332.  GETANS: /*---------------------------------------------------- GETANS: -----*/
  333.  
  334.     Vars_List = Ansi_Say(Resource_File Topic_List)
  335.  
  336.     Parse VALUE SysCurPos() With Old_R Old_C
  337.  
  338.     Do While Vars_List <> ''
  339.        Parse VALUE Vars_List With Topic_Id ';' Var_Id ';' Row ';' Column ';' Color ';' Vars_List
  340.        Call SysCurPos Row, Column
  341.        Say x2c(Color) || Topic_String.Topic_Id.Var_Id || '1B'x || '[0m'
  342.        End
  343.     Call SysCurPos Old_R, Old_C
  344.  
  345.     Return
  346.  
  347.  GETHELP: /*--------------------------------------------------- GETHELP: ----*/
  348.  
  349.     if \MUTE
  350.      then do
  351.              Topic1 = 'SETHELP'
  352.              Topic_String.Topic1.1 = PRGN ;
  353.              Topic_List = Topic1
  354.              Call GETANS
  355.           end
  356.      else say 'Incorrect options.'
  357.  
  358.     Call QUIT
  359.  
  360.     Return
  361.  
  362.  CHKFILE: /*--------------------------------------------------- CHKFILE: ----*/
  363.  
  364.     Parse Arg FILE
  365.  
  366.     RC = Stream(FILE, 'C', 'QUERY EXIST')
  367.     if RC = ''
  368.      then do
  369.              say ' File' FILE 'not found.'
  370.              Call QUIT
  371.           end
  372.      else Nop
  373.     Call Stream FILE, 'C', 'CLOSE'
  374.  
  375.     Return
  376.  
  377.  LOGIT: /*----------------------------------------------------- LOGIT: ------*/
  378.  
  379.     FUNC = ARG(1); INFO = ARG(2); RCOD = ARG(3)
  380.     RC = LLOGIT(LOGF, PIPE, ADMNAME, PRGN, FUNC, INFO, RCOD)
  381.  
  382.     Return
  383.  
  384.  QUIT: /*------------------------------------------------------ QUIT: -------*/
  385.  
  386.     Call LineOut 'LSMT.END', PRGN, 1
  387.     Call Stream  'LSMT.END', 'C', 'CLOSE'
  388.     Call Stream   INPF,      'C', 'CLOSE'
  389.     Call Stream   LOGF,      'C', 'CLOSE'
  390.     Call Stream   CHKF,      'C', 'CLOSE'
  391.     Exit ExitCode
  392.  
  393.  /*--------------------------------------------------------------------------*/
  394.