home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / nstomr2.zip / nsm2mr2.cmd < prev    next >
OS/2 REXX Batch file  |  1999-03-12  |  20KB  |  586 lines

  1. /* Netscape Navigator for OS/2 mail conversion to MR2ICE utility
  2.    Freeware by Art Heimsoth <heimsoth@doglover.com>
  3.    Copyright (c) Art Heimsoth 1997 - all rights reserved                   */
  4.  
  5. /* REXX command file to convert Netscape Navigator for OS/2 mail to
  6.    the folder and mail item format for MR/2 ICE.  It is assumed that
  7.    NETSCAPE.EXE can be found either in the current directory, or in the
  8.    PATH.  The location of NETSCAPE.EXE is also assumed to be the location
  9.    of the NETSCAPE.INI file containing the location for the Netscape
  10.    mail.  It is further assumed that MR2i.EXE can also be found in
  11.    either the current directory or in the PATH.  The location of MR2i is
  12.    used to find the MR/2 ICE mail folder directories.
  13.  
  14.    The above means that this command can be executed from the Navigator/2
  15.    directory, in which case the MR2i must be found via the PATH statement,
  16.    or if executed from the MR2i directory, then NETSCAPE must be found
  17.    via tha PATH statement.
  18.  
  19.    If neither is the case, then both directories can be temporarily added
  20.    to the current path using the form:
  21.       set path=%path%;[drive]:\netscape;[drive]:\mr2i;
  22.    substituting the string "[drive]:\netscape;" or the string "[drive]:\mr2i;"
  23.    with the drive and directory location for the respective program.
  24.  
  25.    Any existing mail entries will be kept in the current MR2i mail folders.
  26.    Mail from the Netscape files will be added to existing folders if their
  27.    names match those of the existing (if any) MR/2 folders.  If the folders
  28.    do not exist, then new folders with the Netscape names will be created.
  29.    The Netscape Inbox mail will be added to the MR/2 In box folder, and the
  30.    Netscape Sent mail will be added to the MR/2 Out box folder.
  31.  
  32.    An optional parameter of test can be passed to indicate to run only in
  33.    test mode, in which case the real MR2i mail files will not be altered.
  34.    Temporary mail folders and files will be created in a directory named
  35.    "tempmail" in the mr2i directory.  This temporary directory will contain
  36.    the full result of what would have been created without destroying any
  37.    existing MR/2 mail folders or items.                                 */
  38.  
  39.  
  40. version = '1.03'
  41. if (rxfuncquery('rexxutil') = 1) then do
  42.   Say 'Loading the Rexx Utilities package'
  43.   call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  44.   call SysLoadFuncs
  45.   end
  46.  
  47. signal on error name synerr
  48. signal on syntax name synerr
  49. signal on failure name synerr
  50. signal on novalue name synerr
  51. parse source . . ourname .              /* find out our name to use later   */
  52. ourname = FileSpec('Name',ourname)
  53. parse var ourname ourname '.' x
  54.  
  55. /* program variables                                                        */
  56. nets = ''
  57. mr2i = ''
  58. netini  = 'netscape.ini'                /* Netscape Navigator .INI file     */
  59. mr2mail = 'mail\folders.ndx'            /* MR/2 ICE mail directory          */
  60. mr2nmail= 'tempmail'                    /* test mode mail directory         */
  61. nsmailf. = ''
  62. nsmailf.0 = 0                           /* stem for Netscape Mail info      */
  63. nfldr.=''                               /* folder indexes created           */
  64. nfldr.0 = 0
  65. date = 0
  66. month = 'JAN 31 FEB 28 MAR 31 APR 30 MAY 31 JUN 30'
  67. month = month 'JUL 31 AUG 31 SEP 30 OCT 31 NOV 30 DEC 31'
  68.  
  69. parse arg a1
  70. if wordpos('?',a1) > 0 then signal tell
  71. if wordpos('TEST',translate(a1)) > 0 then
  72.   testmode = 'x'
  73. else
  74.   testmode = ''
  75. if wordpos('DEBUG',translate(a1)) > 0 then
  76.   debug = 'x'
  77. else
  78.   debug = ''
  79. if debug <> '' then
  80.   testmode = 'x'
  81.  
  82. db = 'mdebug.dat'
  83. if debug <> '' then
  84.   if stream(db,'c','query exists') <> '' then
  85.     call SysFileDelete db
  86.  
  87. /* testmode <> '' means do not change existing mail files/folders           */
  88.  
  89. Say 'Convert Netscape for OS/2 mail to MR/2 ICE format - version' version
  90. Say '  Copyright (c) Art Heimsoth - 1997 - all rights reserved.'
  91. if testmode <> '' then
  92.   Say 'Will run in test mode, i.e., will not alter the existing MR/2 ICE files.'
  93. call dbout 'Parameters:' a1
  94.  
  95. call getmaildir                         /* locate existing MR/2 mail locns  */
  96. call cantemps                           /* get rid of any prior tempmail    */
  97. call getnsmailf                         /* get the NS mail folder info      */
  98. call movemr2                            /* move existing MR/2 mail if test  */
  99.                                         /* and build new folder index info  */
  100. call copynsm                            /* now copy the Netscape mail       */
  101. call savefldr                           /* add the new entries to folder.ndx*/
  102.  
  103. if debug <> '' then
  104.   call lineout db                       /* close the debug file             */
  105. Say ''
  106. Say 'Conversion complete.'
  107.  
  108. exit
  109.  
  110. dbout:
  111.  
  112.   /* output the passed string if debug is active                          */
  113.  
  114.   if debug = '' then
  115.     return
  116.   parse arg dataline
  117.   call lineout db,dataline
  118.   return
  119.  
  120. savefldr:
  121.  
  122.   /* add the new mail folder items to the folder.ndx file for MR/2         */
  123.  
  124.   mr2m = mr2i || 'folders.ndx'
  125.   call stream mr2m,'c','open write'
  126.   do i=1 to nfldr.0
  127.     parse var nfldr.i dirname fldr '"' name '"' popup .
  128.     fldr = strip(fldr)
  129.     lineoutp = name || '01'x || fldr || '01'x || dirname || '01'x || 'Y' || '01'x || '0'
  130.     if popup = '' then do
  131.       call lineout mr2m,lineoutp
  132.       call dbout 'Added to folders.ndx:' lineoutp
  133.       end
  134.     end
  135.   call stream mr2m,'c','close'
  136.   return
  137.  
  138. copynsm:
  139.  
  140.   /* copy the Netscape mail from the Netscape files into separate files    */
  141.   /*  in the MR/2 mail directory with an appropriate timestamp name.       */
  142.  
  143.   do i=1 to nfldr.0
  144.     mr2m = mr2i || word(nfldr.i,1) || '\'
  145.     ns2m = ''
  146.     fldrn = 'folder.ndx'
  147.     do k=1 to nsmailf.0
  148.       if translate(FileSpec('Name',nsmailf.k)) = translate(word(nfldr.i,2)) then
  149.         ns2m = nsmailf.k
  150.       end
  151.     if ns2m = '' then
  152.       iterate
  153.     call dbout 'Processing' ns2m 'to' mr2m
  154.     call copyfldr               /* generate and copy the mail items       */
  155.     end
  156.   ns2m = FileSpec('Drive',nets) || FileSpec('Path',nets || 'x') || 'Sent'
  157.   mr2m = mr2i
  158.   fldrn = 'mr2i.out'
  159.   call dbout 'Processing' ns2m 'to' mr2m
  160.   call copyfldr                 /* generate and copy the outbox items     */
  161.   ns2m = FileSpec('Drive',nets) || FileSpec('Path',nets || 'x') || 'Inbox'
  162.   mr2m = mr2i
  163.   fldrn = 'mr2i.ndx'
  164.   call dbout 'Processing' ns2m 'to' mr2m
  165.   call copyfldr                 /* generate and copy the Inbox items      */
  166.   return
  167.  
  168. copyfldr:
  169.  
  170.   /* copy the mail items from the *ns2m* location to the *mr2m* location  */
  171.   index.=''
  172.   index.0=0
  173.   tosub.=''
  174.   fldrea=''
  175.   eatype=''
  176.   ealen=''
  177.   eadata=''
  178.   mon=''
  179.   day=''
  180.   year=''
  181.   time=''
  182.   call loadndx                  /* loadup any existing index info         */
  183.   call stream ns2m,'c','open read'
  184.   mr2mf = ''
  185.   do forever
  186.     if stream(ns2m,'state') <> 'READY' then
  187.       leave
  188.     lineinp = linein(ns2m)
  189.     if (words(lineinp) = 7) & ,
  190.        (translate(subword(lineinp,1,2)) = 'FROM -') then do
  191.       if mr2mf <> '' then do
  192.         call stream mr2mf,'c','close'
  193.         k = index.0
  194.         index.k = index.k stream(mr2mf,'c','query size') || 'o'
  195.         mr2mf = ''
  196.         end
  197.       repos = stream(ns2m,'c','seek + 0')
  198.       search = 'x'
  199.       datehold = subword(lineinp,4)
  200.       k=index.0+1
  201.       index.0=k
  202.       temail = ' '
  203.       subj = ' '
  204.       femail = ' '
  205.       msgid = ' '
  206.       do while(search <> '')
  207.         lineinp = linein(ns2m)
  208.         if stream(ns2m,'state') <> 'READY' then
  209.           search = ''
  210.         else if lineinp = '' then
  211.           search = ''
  212.         else if translate(word(lineinp,1)) = 'SUBJECT:' then
  213.           subj = subword(lineinp,2)
  214.         else if translate(word(lineinp,1)) = 'MESSAGE-ID:' then
  215.           msgid = subword(lineinp,2)
  216.         else if translate(word(lineinp,1)) = 'APPARENTLY-TO:' then
  217.           temail= subword(lineinp,2)
  218.         else if translate(word(lineinp,1)) = 'TO:' then
  219.           temail= subword(lineinp,2)
  220.         else if translate(word(lineinp,1)) = 'FROM:' then
  221.           femail= subword(lineinp,2)
  222.         else if translate(word(lineinp,1)) = 'DATE:' then do
  223.           if pos(',',lineinp) > 0 then
  224.             parse var lineinp . ',' day mon year time .
  225.           else if pos(':',subword(lineinp,2)) > 0 then do
  226.             ti = pos(':',subword(lineinp,2))
  227.             dt = substr(subword(lineinp,2),1,ti)
  228.             if words(dt) > 3 then do
  229.               day = word(dt,words(dt)-3)
  230.               mon = word(dt,words(dt)-2)
  231.               year = word(dt,words(dt)-1)
  232.               time = word(lineinp,words(dt)+1)
  233.               end
  234.             end
  235.           if length(time) > 8 then
  236.             time = left(strip(time),8)
  237.           if length(year) < 3 then
  238.             if year < 70 & year <> '' then
  239.               year = '20' || year
  240.             else
  241.               year = '19' || year
  242.           if mon <> '' & day <> '' & time <> '' & year <> '' then
  243.             datehold = mon day time year
  244.           end
  245.         end
  246.       call stream ns2m,'c','seek =' repos
  247.       if words(datehold) <> 4 then
  248.         datehold = 'Jan 1 00:00:00 1970'
  249.       call datetime datehold
  250.       k = index.0
  251.       h1 = '01'x
  252.       tosub.k = femail || h1 || subj || h1 || h1 || temail || h1 || msgid
  253.       if length(mon) > 2 then
  254.         do l=1 to words(month)
  255.           if left(translate(mon),3) = word(month,(l*2)-1) then
  256.             mon = l
  257.           end
  258.       if translate(right(ns2m,4)) = 'SENT' then do
  259.         mr2mf = mr2m || date || '.OUT'
  260.         do while(stream(mr2mf,'c','query exists') <> '')
  261.           date = x2d(date)+1
  262.           date = right(d2x(date),8,'0')
  263.           mr2mf = mr2m || date || '.OUT'
  264.           end
  265.         index.k = date 'OUT' right(year,2) || '/' || right(mon,2,'0') || '/' ,
  266.                   || right(day,2,'0') left(time,5) 'S'
  267.         end
  268.       else do
  269.         mr2mf = mr2m || date || '.RCV'
  270.         do while(stream(mr2mf,'c','query exists') <> '')
  271.           date = x2d(date)+1
  272.           date = right(d2x(date),8,'0')
  273.           mr2mf = mr2m || date || '.RCV'
  274.           end
  275.         index.k = date 'RCV' right(year,2) || '/' || right(mon,2,'0') || '/' ,
  276.                   || right(day,2,'0') left(time,5) 'Y'
  277.         end
  278.       call stream mr2mf,'c','open write'
  279.       call dbout 'Copying mail item' mr2mf
  280.       lineinp = linein(ns2m)
  281.       end
  282.     call lineout mr2mf,lineinp
  283.     end
  284.   call stream ns2m,'c','close'
  285.   if mr2mf <> '' then do
  286.     call stream mr2mf,'c','close'
  287.     k = index.0
  288.     index.k = index.k stream(mr2mf,'c','query size') || 'o'
  289.     end
  290.   mr2mf = ''
  291.   call bldndx
  292.   return
  293.  
  294. bldndx:
  295.  
  296.   /* build a new folder from all info collected.. name is in fldrn         */
  297.   fldrea = ''
  298.   eadata = index.0
  299.   call dbout 'EA data entry (dec) not reversed:' eadata
  300.   eadata = right(d2x(eadata),8,'0')
  301.   do l=length(eadata) to 2 by -2
  302.     fldrea = fldrea || substr(eadata,l-1,2)
  303.     end
  304.   call dbout 'built EA count (hex) reversed:' fldrea
  305.   fldrea = x2c('FEFF0400' || fldrea)
  306.   mr2mf = mr2m || fldrn
  307.   sortea = ''
  308.   if stream(mr2mf,'c','query exists') <> '' then do
  309.     call SysGetEA mr2mf,'SORTSPEC','sortea'
  310.     call SysFileDelete mr2mf
  311.     end
  312.   call stream mr2mf,'c','open write'
  313.   do l=1 to index.0
  314.     parse var index.l fn ext date time status size .
  315.     if pos('.',fn) > 0 then do
  316.       parse var index.l fn date time status size .
  317.       parse var fn fn '.' ext
  318.       end
  319.     if date = '.' then
  320.       date = ''
  321.     if time = '.' then
  322.       time = ''
  323.     if status = '.' then
  324.       status = ''
  325.     lineoutp = right(fn,35,' ') ext right(size,12,' ') left(date,8,' ') ,
  326.                left(time,5,' ') right(status,10,' ') '   ' tosub.l
  327.     call dbout lineoutp
  328.     call lineout mr2mf,lineoutp
  329.     end
  330.   call stream mr2mf,'c','close'
  331.   call SysPutEA mr2mf,'MESSAGECTR',fldrea
  332.   if sortea <> '' then
  333.     call SysPutEA mr2mf,'SORTSPEC',sortea
  334.   call dbout index.0 'Entries built for:' mr2m || fldrn
  335.   return
  336.  
  337. loadndx:
  338.  
  339.   /* load the index info (if any) from the index file for the working
  340.      folder... the name will be in fldrn                                   */
  341.  
  342.   k=index.0
  343.   fldrr = stream(mr2m || fldrn,'c','query exists')
  344.   if fldrr = '' then do
  345.     call dbout 'No index entries found in:' mr2m || fldrn
  346.     return
  347.     end
  348.   call stream fldrr,'c','open read'
  349.   do forever
  350.     lineinp = linein(fldrr)
  351.     if stream(fldrr,'state') <> 'READY' then
  352.       leave
  353.     if lineinp = '' then
  354.       iterate
  355.     k=k+1
  356.     parse var lineinp firstp 84 tosub.k
  357.     parse var firstp fn ext size date time 78 status .
  358.     if pos('.',fn) > 0 then do
  359.       parse var firstp fn size date time 78 status .
  360.       parse var fn fn '.' ext
  361.       end
  362.     if date = '' then
  363.       date = '.'
  364.     if time = '' then
  365.       time = '.'
  366.     if status = '' then
  367.       status = '.'
  368.     index.k = fn ext date time status size
  369.     end
  370.   call stream fldrr,'c','close'
  371.   index.0 = k
  372.   call SysGetEA fldrr,'MESSAGECTR','fldrea'
  373.   tempea = c2x(fldrea)
  374.   call dbout 'EA Data (hex) reversed:' tempea
  375.   eatype = substr(tempea,3,2) || substr(tempea,1,2)
  376.   ealen = substr(tempea,7,2) || substr(tempea,5,2)
  377.   eadata = ''
  378.   do ea=length(tempea) to 9 by -2
  379.     eadata = eadata || substr(tempea,ea-1,2)
  380.     end
  381.   call dbout 'EA for MessageCTR is: type=' eatype 'length=' ealen 'data='eadata
  382.   call dbout index.0 'index entries found in fldr:' fldrr
  383.   return
  384.  
  385. datetime:
  386.  
  387.   /* convert the date/time stamp to an 8 hex character value for file name*/
  388.   parse arg mon day time year .
  389.   date = 0
  390.   j = year-1
  391.   do while(j > 1969)
  392.     if (j // 4) = 0 then
  393.       date = date+366
  394.     else
  395.       date = date+365
  396.     j = j-1
  397.     end
  398.   if (year // 4) = 0 then
  399.     month = subword(month,1,3) 29 subword(month,5)
  400.   else
  401.     month = subword(month,1,3) 28 subword(month,5)
  402.   do j=1 to 12
  403.     if left(translate(mon),3) = word(month,((i*2)-1)) then
  404.       j=12
  405.     else
  406.       date = date + word(month,2)
  407.     end
  408.   date = date + day
  409.   date = date * 86400
  410.   parse var time hr ':' min ':' sec .
  411.   date = date + (hr * 3600) + (min * 60) + sec
  412.   date = d2x(date)
  413.   date = right(date,8,'0')
  414.   call dbout mon day time year '==>' date
  415.   return
  416.  
  417. movemr2:
  418.  
  419.   /* create directories for new folders and move existing MR/2 mail if test */
  420.   if testmode <> '' then do
  421.     mr2it = left(mr2i,length(mr2i)-1)
  422.     mr2it = FileSpec('Drive',mr2it) || FileSpec('Path',mr2it) || mr2nmail || '\*'
  423.     copycmd = '@xcopy' mr2i || '*.*' mr2it '/h/o/t/s/e/r/v'
  424.     call dbout copycmd
  425.     copycmd '> nul:'
  426.     mr2i = FileSpec('Drive',mr2it) || FileSpec('Path',mr2it)
  427.     end
  428.   lists.0 = 0
  429.   call SysFileSearch 'F',mr2i || 'folders.ndx','lists'
  430.   hex01    = '01'x
  431.   findx = 1
  432.   do i=1 to lists.0
  433.     parse var lists.i name (hex01) fldr (hex01) dirnam (hex01) popup (hex01) .
  434.     k=nfldr.0+1
  435.     nfldr.k = dirnam fldr '"' || name || '"' popup
  436.     nfldr.0 = k
  437.     fldr = substr(dirnam,2) +0
  438.     findx = max(findx,fldr)
  439.     end
  440.   call dbout nfldr.0 'existing MR/2 folders found.'
  441.   call dbout findx 'is highest mail directory found.'
  442.   findx = findx+1
  443.   if length(findx) < 3 then
  444.     findx = right(findx,3,'0')
  445.   do i=1 to nsmailf.0
  446.     newfldr = FileSpec('Name',nsmailf.i)
  447.     do k=1 to nfldr.0
  448.       if translate(word(nfldr.k,2)) = translate(newfldr) then
  449.         newfldr = ''
  450.       end
  451.     if newfldr = '' then
  452.       iterate
  453.     k=nfldr.0+1
  454.     nfldr.k = 'F' || findx newfldr '"' || newfldr || '"'
  455.     call SysMkDir mr2i || 'F' || findx
  456.     call dbout 'Added folder for:' nfldr.k
  457.     findx = findx+1
  458.     if length(findx) < 3 then
  459.       findx = right(findx,3,'0')
  460.     nfldr.0 = k
  461.     end
  462.   call dbout nfldr.0 '= total folders after adding Netscape Mail.'
  463.   return
  464.  
  465. getnsmailf:
  466.  
  467.   /* get the folder info for the Netscape mail to be moved...               */
  468.   call SysFileTree nets || '*.','lists','FO'
  469.   do i=1 to lists.0
  470.     if translate(FileSpec('Name',lists.i)) <> 'TRASH' & ,
  471.        translate(FileSpec('Name',lists.i)) <> 'OUTBOX' & ,
  472.        translate(FileSpec('Name',lists.i)) <> 'SENT' & ,
  473.        translate(FileSpec('Name',lists.i)) <> 'INBOX' then do
  474.       k=nsmailf.0 +1
  475.       nsmailf.k = lists.i
  476.       nsmailf.0 = k
  477.       end
  478.     end
  479.   return
  480.  
  481. cantemps:
  482.  
  483.   /* clean out the tempmail directory if it exists                      */
  484.   mr2it = left(mr2i,length(mr2i)-1)
  485.   mr2it = FileSpec('Drive',mr2it) || FileSpec('Path',mr2it) || mr2nmail
  486.   call dbout 'Cleaning out:' mr2it
  487.   call SysFileTree mr2it || '\*.*','lists','FO'
  488.   do i=1 to lists.0
  489.     call SysFileDelete lists.i
  490.     end
  491.   clean = lists.0
  492.   do while(clean <> '')
  493.     call SysFileTree mr2it || '\*.','lists','DO'
  494.     if lists.0 = 0 then
  495.       clean = ''
  496.     else
  497.       clean = 0
  498.     do i=1 to lists.0
  499.       call SysFileTree lists.i || '\*.*','files','FO'
  500.       do k=1 to files.0
  501.         call SysFileDelete files.k
  502.         end
  503.       xx = SysRmDir(lists.i)
  504.       if xx > 2 then
  505.         clean = clean -1
  506.       end
  507.     if clean < 1 then
  508.       clean = ''
  509.     end
  510.   return
  511.  
  512. getmaildir:
  513.  
  514.   /* find the directories needed for the mail folders....                    */
  515.   nets = stream(netini,'c','query exists')
  516.   mr2i = stream(mr2mail,'c','query exists')
  517.   if nets = '' then
  518.     nets = SysSearchPath('PATH',netini)
  519.   if mr2i = '' then
  520.     mr2i = SysSearchPath('PATH',mr2mail)
  521.   if nets = '' | mr2i = '' then
  522.     Say ''
  523.   if mr2i = '' then do
  524.     mr2i = stream('mr2i.exe','c','query exists')
  525.     if mr2i = '' then
  526.       mr2i = SysSearchPath('PATH','mr2i.exe')
  527.     if mr2i = '' then do
  528.       Say 'Cannot find the directory for the' mr2mail 'file.  Please insure'
  529.       Say 'the MR/2 directory is in your PATH environment and retry.'
  530.       exit 8
  531.       end
  532.     else do
  533.       mr2path = FileSpec('Drive',mr2i) || FileSpec('Path',mr2i)
  534.       mr2i = mr2path || mr2mail
  535.       Say 'Cannot find the MR2i' mr2mail 'file - a new one will be created.'
  536.       end
  537.     end
  538.   if nets = '' then do
  539.     Say 'Cannot find the Netscape' netini 'file.'
  540.     Say 'Please insure the Netscape directory is in your PATH environment'
  541.     Say 'and retry.'
  542.     exit 8
  543.     end
  544.   nsmail = SysIni(nets,'Mail','MailDirectory')
  545.   if nsmail = '' then do
  546.     Say 'Cannot find the Mail information in the Netscape INI file at:'
  547.     Say '   ' nets
  548.     exit 8
  549.     end
  550.   nets = nsmail || '\'
  551.   mr2i = FileSpec('Drive',mr2i) || FileSpec('Path',mr2i)
  552.   call dbout 'NS Mail:' nets
  553.   call dbout 'MR/2 Mail:' mr2i
  554.   return
  555.  
  556. synerr:
  557.   errline = sigl
  558.   linenbr= errline
  559.   Say 'Unexpected error occurred.'
  560.   if datatype(rc,'W') then
  561.     if errortext(rc) = ' ' then
  562.       Say 'Error on line' linenbr
  563.     else
  564.       Say 'Error on line' linenbr 'was 'errortext(rc)
  565.   else
  566.     Say 'Error on line' linenbr
  567.   Say 'Error line: 'sourceline(errline)
  568.   exit 8
  569.  
  570. tell:
  571.   Say 'Convert Netscape for OS/2 mail to MR/2 ICE format - version' version
  572.   Say '  Copyright (c) Art Heimsoth - 1997 - all rights reserved.'
  573.   Say ''
  574.   Say 'Calling syntax:'
  575.   Say ' ' ourname '[?] [update] [test]'
  576.   Say '    where ?      = display this help information'
  577.   Say '          test   = do not alter existing MR/2 ICE mail direcories,'
  578.   Say '                   but create new directories in the' mr2nmail
  579.   Say '                   directory tree.'
  580.   Say ''
  581.   Say ' This program will convert the mail from Netscape for OS/2'
  582.   Say ' to a format compatable with MR/2 ICE.  See the NSToMR2.DOC file'
  583.   Say ' in this package for additional detailed information.'
  584.   Say ''
  585.   exit 100
  586.