home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / prmconv.zip / PM2POSTR.CMD next >
OS/2 REXX Batch file  |  1996-01-19  |  27KB  |  682 lines

  1. /* PM2POSTR.CMD -- Convert PmMail address book to Post Road Mailer           */
  2. /*                 address book.                                             */
  3. /* Parameters: PmMail subdirectory.  If no parameter is used, utility prompts*/
  4. /*             user to enter PmMail subdirectory.                            */
  5. /* (c) Copyright, 1995, InnoVal System Solutions, Inc., Luis Reyes           */
  6.  
  7.  /* Possible code values: */
  8.  X.SAVE_FILECARDS        = X2C('0700'); X.SAVE_GROUPS           = X2C('0800')
  9.  X.SAVE_GNAME            = X2C('2000'); X.SAVE_ADDRESSES        = X2C('2200')
  10.  X.SAVE_GADDRESS         = X2C('2400'); X.SAVE_BOOK_NAME        = X2C('3000')
  11.  X.SAVE_FIRST            = X2C('3500'); X.SAVE_CNAME            = X2C('4000')
  12.  X.SAVE_COMPANY          = X2C('4500'); X.SAVE_EMAIL1           = X2C('5000')
  13.  X.SAVE_PHONE1           = X2C('8000'); X.SAVE_PHONE2           = X2C('8500')
  14.  X.SAVE_FAX              = X2C('9000'); X.SAVE_ADDRESS          = X2C('9500')
  15.  
  16.  Signal on HALT
  17.  
  18.  If LoadRexxUtil() then Do
  19.     Say 'Err: Could not load Rexx Library...'
  20.     Exit
  21.  end  /* Do */
  22.  
  23.  If Arg() <> 0 then Do
  24.      Arg subdir
  25.      If subdir = '?' then Signal Help
  26.  end /* If */
  27.  Else Do
  28.        Say "Enter PmMail subdirectory: "
  29.        Pull subdir
  30.  end  /* Else */
  31.  
  32.  If Right( subdir, Length( subdir ) ) = '\' then
  33.    subdir = Left( subdir, Length( subdir ) - 1 )
  34.  
  35.  Call SysCls
  36.  Call GreetingMsg
  37.  
  38.  PostDir = Directory()
  39.  If Stream( PostDir|| '\POSTROAD.EXE','C','QUERY EXISTS') = '' then Signal Err
  40.  If Stream( subdir || '\PMMAIL.EXE','C', 'QUERY EXISTS') = '' then Signal Err1
  41.  If Stream( subdir || '\ADDRESS\ADDRBOOK.INI','C','QUERY EXISTS') = '' then Signal Err1
  42.  If Stream( subdir || '\FOLDERS.INI', 'C', 'QUERY EXISTS') = '' then Signal Err1
  43.  
  44.  inBas = '\' || GetInbasketName( PostDir ) || '\'
  45.  
  46.  Call SetUpAll
  47.  
  48.  Exit
  49. /*------------------------------------------------------------------------*/
  50.  
  51. SETUPALL: Procedure Expose subdir X. inBas PostDir 
  52.  
  53.  fldCount = 0
  54.  BkCount = 0
  55.  
  56.  menu.0 = 3
  57.  menu.1.txt = 'Convert Address Books'
  58.  menu.1.row = 9; menu.1.col = 39 - Length( menu.1.txt ) % 2
  59.  menu.1.act = 'Call BookStart'
  60.  
  61.  menu.2.txt = 'Convert Folders'
  62.  menu.2.row = 10; menu.2.col = 39 - Length( menu.2.txt ) % 2
  63.  menu.2.act = 'Call ConvertFolders'
  64.  
  65.  menu.3.txt = 'Exit'
  66.  menu.3.row = 11; menu.3.col = 39 - Length( menu.3.txt ) % 2
  67.  menu.3.act = 'Call Exiting'
  68.  
  69.  Call DoMenu
  70.  
  71.  Return
  72. /*----------------------------------------------------------------------*/
  73.  
  74. DOMENU:
  75.   colorNormal = '1B'x || '[37;40m'
  76.   colorReverse = '1B'x || '[30;47m'
  77.   keyEnter = '0D'x
  78.   keyUp = '48'x
  79.   keyDown = '50'x
  80.   keyPrefix1 = '00'x
  81.   keyPrefix2 = 'E0'x
  82.  
  83.   Call BringUpMenu
  84.  
  85.   Do Forever
  86.      Call SysCurPos menu.r.row, menu.r.col
  87.      Call CharOut 'CON:', colorReverse || menu.r.txt
  88.      Call CharOut 'CON:', colorNormal
  89.      key = SysGetKey('NoEcho' )
  90.      next = r
  91.      Select
  92.         When key == keyEnter then
  93.            Interpret menu.r.act
  94.         When key == keyPrefix1 | key == keyPrefix2 then Do
  95.            key = SysGetKey( 'NoEcho' )
  96.            Select
  97.               When key == keyUp then
  98.                 If r > 1 then next = r - 1
  99.                 Else next = menu.0
  100.               When key == keyDown then
  101.                 If r < menu.0 then next = r + 1
  102.                 Else next = 1
  103.              Otherwise Nop
  104.            end /* Select */
  105.         end /* When Do */
  106.         Otherwise Nop
  107.      end  /* Select */
  108.      If next <> r then Do
  109.         Call SysCurPos menu.r.row, menu.r.col
  110.         Call CharOut 'CON:', menu.r.txt
  111.         r = next
  112.      end /* If Do */
  113.   end /* Do Forever */
  114.  
  115.   Return
  116. /*--------------------------------------------------------------------------*/
  117. /*            Address Book Conversion Procedures and Functions              */
  118. /*--------------------------------------------------------------------------*/
  119.  
  120. BOOKSTART: Procedure Expose X. subdir BkCount menu. colorNormal r
  121.  /* Start Address Book Conversion */
  122.  
  123.   Call SysCurPos 13,0
  124.   Call SysCurState( 'ON' )
  125.  
  126.   PmAddrFile = subdir || '\ADDRESS\ADDRBOOK.INI'
  127.   Do while lines( PmAddrFile ) > 0
  128.      PmBookName = LineIn( PmAddrFile )
  129.      infile = subdir || '\' || LineIn(PmAddrFile )
  130.      Say;Say 'Do you wish to convert PmMail' Strip( PmBookName ) 'address book? (Y/n)'
  131.      Pull ans
  132.      If Left(ans,1) = 'Y' then Call convertBook
  133.   end /* Do while */
  134.  
  135.   Call LineOut( PmAddrFile )
  136.   Call BringUpMenu
  137.  
  138.   Return
  139. /*------------------------------------------------------------------------*/
  140.  
  141.  CONVERTBOOK: Procedure Expose infile PmBookName X. BkCount
  142.  
  143.  outfile = infile || '.ASC'
  144.  Num = Length( infile ) - LastPos( '\', infile )
  145.  
  146.  PostDir = Directory()
  147.  FileName = PostDir || '\' || Right( infile, Num )
  148.  NewBkName = Right( infile, Num ) || '.ADR'
  149.  
  150.  If Stream(FileName || '.ADR','C','QUERY EXISTS') <> '' then Do
  151.    Say newBkName || ' already exists. Do you want to replace it?(Y/n)'
  152.    Pull ans
  153.    If Left( ans,1) = 'Y' then 
  154.       '@ERASE' FileName || '.ADR'
  155.    Else Do
  156.       Say 'Do you wish to rename destination file? (Y/n)'
  157.       Pull ans
  158.          If Left( ans, 1 ) = 'Y' then
  159.                outfile = CheckFileName( outfile )
  160.          Else Return
  161.    end /* Else Do */
  162.  end /* Main If Do */
  163.  
  164.  /* Write address book name and write to output file */
  165.  Call LineOut outfile, '<BOOK_NAME>' || PmBookName
  166.  Call LineOut outfile, '*Created from PmMail '||PmBookName || ' addressbook'
  167.  Call LineOut outfile, ''
  168.  
  169.  i = 1
  170.  /* Read in entire input file to memory. */
  171.  Do While Lines(infile) > 0
  172.  
  173.    If i = 6 then i = 1
  174.    lin = LineIn(infile)
  175.    Select
  176.       When i = 1 then
  177.         Call NameSave
  178.       When i = 2 then
  179.         Call LineOut outfile, '<EMAIL1>' || lin 
  180.       When i = 3 then
  181.         Call LineOut outfile, '<ORGANIZATION>' || lin
  182.       When i = 4 then
  183.         Call LineOut outfile, '<PHONE1>' || lin
  184.       When i = 5 then do
  185.         Call LineOut outfile, '<COMMENTS>' || lin
  186.         Call LineOut outfile, ''
  187.       end /* When do */
  188.    end /* Select */
  189.   i = i + 1
  190.  end /* Do while */
  191.  
  192.  Call LineOut infile  /* Close infile file */
  193.  Call CharOut outfile /* Close output file */
  194.  Call Asc2Adr
  195.  
  196.  If Stream( outfile, 'C', 'QUERY EXISTS') <> '' then
  197.    '@ERASE' outfile
  198.  
  199.  BkCount = BkCount + 1
  200.  
  201.  Return
  202. /*--------------------------------------------------------------------------*/
  203.  
  204. ASC2ADR: Procedure Expose X. outfile PostDir
  205.  /* Writing to output file. */
  206.  /* Based on code written by Tom Springall, Innoval Systems Solutions, Inc */
  207.  
  208.  CRLF = X2C('0D0A')
  209.  filespec = outfile
  210.  Num = Length( outfile ) - LastPos( '\', outfile )
  211.  AdrFile = Right( outfile, Num )
  212.  AdrFile = PostDir || '\' || Left( AdrFile, LastPos('.', AdrFile) ) ||'ADR'
  213.  Lin = LineIn(filespec)
  214.  
  215.  /* Must be in the first row */
  216.  If Left(lin,11) <> '<BOOK_NAME>' then Signal Err2
  217.  Call SaveIt X.SAVE_BOOK_NAME, Substr(lin,12)
  218.                                                                     
  219.  i = 1 ; activity = 0 ; cards = 0 ; groups = 0 ; data. = ''         
  220.                                                                     
  221.  /* Read in entire input file to memory. */                         
  222.  Do While Lines(filespec) > 0                                       
  223.                                                                     
  224.    lin = LineIn(filespec)                                           
  225.    first = Left(lin,1)                                              
  226.    Select                                                           
  227.      /* blank line means new address or existence of a group */
  228.      When first = ' ' & activity > 0 then do                        
  229.        /* check values since last blank, if any */                  
  230.        Call CheckI                                                  
  231.        activity = 0                                                 
  232.        end /* of When */                                            
  233.      When first = '<' then do                /* it's a tag */       
  234.        Parse var lin '<' tag '>' valu                                                                            
  235.          If tag = 'COMMENTS' then do       /* gotta append these */
  236.            If data.i.COMMENTS <> '' then                            
  237.               data.i.COMMENTS = data.i.COMMENTS || CRLF             
  238.            data.i.COMMENTS = data.i.COMMENTS || valu                
  239.            end                                                      
  240.          Else do                           /* otherwise, just save value */
  241.            /* assign valu to data.i.field */                        
  242.            V = Value('data.i.' || tag, valu)
  243.          end /* of Else Do */
  244.        activity = 1    /* indicate that something has been saved at level i */
  245.        end                                                          
  246.      Otherwise Nop                          /* skip comments, etc. */
  247.      end /* of Select */                                            
  248.    end /* of Do While */                                            
  249.  Call LineOut filespec                      /* close input file */  
  250.                                                                     
  251.  /* entire file read in. check if last i has anything in it */      
  252.  If i <> 0 & activity > 0 then Call CheckI                          
  253.                                                                     
  254.  /* save card and group counts */                                   
  255.  Call SaveIt X.SAVE_FILECARDS, MakeNum(cards)
  256.  Call SaveIt X.SAVE_GROUPS, MakeNum(groups)
  257.                                                                     
  258.  /* write out each level (each level contains an address page) */
  259.  Do j = 1 to i - 1                                                                                                 
  260.      If typ.j = 'CARD' then do
  261.        /* address page must start with last name field */           
  262.        Call SaveIt X.SAVE_CNAME, data.j.LAST_NAME  /* must be 1st */
  263.        Call SaveIt X.SAVE_FIRST, data.j.FIRST_NAME
  264.        Call SaveIt X.SAVE_COMPANY, data.j.ORGANIZATION
  265.        Call SaveIt X.SAVE_EMAIL1, data.j.EMAIL1
  266.        Call SaveIt X.SAVE_PHONE1, data.j.PHONE1
  267.        Call SaveIt X.SAVE_ADDRESS, data.j.COMMENTS
  268.      end /* of If Do */                                                      
  269.  end /* of Do */
  270.  
  271.  Call CharOut AdrFile                /* close output files */
  272.  
  273.  Return
  274. /*--------------------------------------------------------------------------*/
  275.  
  276. NAMESAVE:
  277. /* Extract name */
  278.  
  279.   NameNum = words(lin)
  280.   Select
  281.      When NameNum >= 4 then Do
  282.         first = word( lin, 1 ) || ' ' || word( lin, 2 )
  283.         last = word( lin, NameNum - 1) || ' ' || word( lin, NameNum )
  284.      end  /* Do */
  285.      When NameNum = 3 then Do
  286.         first = word( lin, 1 ) || ' ' || word( lin, 2 )
  287.         last = word( lin, NameNum )
  288.      end  /* Do */
  289.      otherwise Do
  290.        first = word(lin,1)
  291.        last = word( lin, NameNum )
  292.      end /* Do */
  293.   end  /* select */
  294.  
  295.   Call LineOut outfile, '<LAST_NAME>' || last 
  296.   Call LineOut outfile, '<FIRST_NAME>' || first 
  297.   Return
  298. /*--------------------------------------------------------------------------*/
  299.  
  300. SAVEIT: Procedure Expose AdrFile
  301.   /* write field to output file */
  302.   code = Left(Arg(1),4,D2C(0))
  303.   valu = Arg(2)
  304.   len = MakeNum(Length(valu)) 
  305.  
  306.   If 0 <> CharOut(AdrFile, code || len || valu) then Signal Err3
  307.  
  308.   Return
  309. /*--------------------------------------------------------------------------*/
  310.  
  311. MAKENUM: Procedure
  312.  /* Convert integer into 4-byte Intel format */
  313.  
  314.   Return Intel(D2C(Arg(1),4))
  315. /*---------------------------------------------------------------------------*/
  316.  
  317. INTEL:  Procedure
  318. /* Swaps bytes in an Intel 2 or 4 byte number. */
  319.  
  320.   Parse arg x
  321.  
  322.  If Length(x) = 2 then
  323.    Return Right(x,1) || Left(x,1)
  324.  Else
  325.    Return Intel(Right(x,2)) || Intel(Left(x,2))
  326. /*----------------------------------------------------------------------*/
  327.  
  328. CHECKI: Procedure Expose i data. cards typ.                     
  329.                                                                        
  330.   /* Check to see if any real stuff collected at the current level (i) */
  331.   /* is it a card? */                                                  
  332.   If data.i.LAST_NAME <> '' | data.i.ORGANIZATION <> '' then do        
  333.     typ.i = 'CARD'                                                     
  334.     cards = cards + 1                                                  
  335.     i = i + 1                                                          
  336.     end                                                                
  337.   Else                                                               
  338.     data.i. = ''               /* false alarm. reset */              
  339.   Return                                                               
  340. /*--------------------------------------------------------------------------*/
  341.  
  342. CHECKFILENAME: Procedure
  343.  
  344.   Arg outfile
  345.   Do while nfn = ''
  346.     Say 'Enter new file name: '
  347.     Pull nfn
  348.   end /* Do while */
  349.   nfnsav = nfn
  350.  
  351.   If LastPos( '\', nfn ) <> 0 then
  352.      nfn = Right( nfn, Length( nfn ) - LastPos( '\', nfn ) )
  353.   If LastPos( '.', nfn ) <> 0 then
  354.      nfn = Left( nfn, LastPos( '.', nfn ) - 1 )
  355.   If Length( nfn ) > 8 then
  356.      nfn = Left( nfn, 8 )
  357.   nfn = Directory() || '\' || nfn
  358.  
  359.   If Stream( nfn || '.ADR', 'C', 'QUERY EXISTS' ) <> '' then Do
  360.      Say;Say Strip( nfnsav ) 'already exists.'
  361.      nfn = CheckFileName( nfn || '.ADR' )
  362.   If LastPos( '.', nfn ) <> 0 then
  363.      nfn = Left( nfn, LastPos( '.', nfn ) - 1 )
  364.   end  /* Do */
  365.  
  366.   Return( nfn || '.ASC')
  367. /*-------------------------------------------------------------------------*/
  368. /*                  Folder Conversion Procedures and Functions             */
  369. /*-------------------------------------------------------------------------*/
  370.  
  371. CONVERTFOLDERS: Procedure Expose subdir inBas fldCount menu. colorNormal r
  372.  
  373.   curdir = Directory()
  374.   PmFolderLst = subdir || '\FOLDERS.INI'
  375.  
  376.   Call SysCurPos 13,0
  377.   Call SysCurState( 'ON' )
  378.   Say; Say 'Converting folders from PmMail to PostRoad Mailer...'
  379.  
  380.   Do while lines( PmFolderLst ) > 0
  381.      folder = LineIn( PmFolderLst )
  382.      foldsubdir = LineIn( PmFolderLst )
  383.      outfile = curdir || inBas || foldsubdir || '.NLG'
  384.      foldsubdir = subdir || '\folders\' || foldsubdir || '\*.*'
  385.      dummy = LineIn( PmFolderLst )
  386.  
  387.      If Stream( foldsubdir, 'C', 'QUERY EXISTS' ) <> '' then Do
  388.       /* Get the names of the PmMail msgs */
  389.  
  390.         Call SysFileTree foldsubdir, infile, 'FO'
  391.         outfile = CheckFoldName( outfile )
  392.         Call LineOut outfile, D2C(4) || folder || ' PmMail Folder'
  393.                                                                               
  394.         Do y = 1 to infile.0
  395.            To_Flag = 0
  396.            UserTo = ''
  397.  
  398.            Do While Word( Lin,1 ) <> 'Subject:'
  399.               Lin = LineIn( infile.y )
  400.               If To_Flag == 1 & LastPos( ':', Word( Lin, 1 ) ) > 0 then
  401.                  To_Flag = 0
  402.               If To_Flag == 1 then Lin = 'To:' Lin
  403.               Select
  404.                  When Word( Lin,1 ) = 'To:' then Do
  405.                     To_Flag = 1
  406.                     UserTo = UserTo || Right( lin, Length( lin ) - 4 ) || ' '
  407.                  end /* When Do */
  408.                  When Word( Lin,1 ) = 'From:' then
  409.                     UserFrom = Word( Lin, 2 )
  410.                  When Word( Lin,1 ) = 'Subject:' then
  411.                     SubjLine = Right( lin, Length( lin ) - 9 )
  412.                  When Word( Lin,1 ) = 'Date:' then
  413.                     DateLin = Right( lin, Length( lin ) - 6 )
  414.                  When Word( Lin,1 ) = 'Reply-To:' then
  415.                     ReplyLine = Word( Lin, 2 )
  416.                  Otherwise Nop
  417.               end  /* select */
  418.            end /* Do While */
  419.        
  420.            Parse Var UserTo RUser ' ' .
  421.            num = 49 - Length( RUser )
  422.  
  423.            Call LineOut outfile, ''
  424.            Call CharOut outfile, '<<NEW NOTE>> ' || D2C(1) || RUser
  425.            Call CharOut outfile, Copies( ' ', num )
  426.            Call CharOut outfile, DateSwitch(DateLin)
  427.            Call CharOut outfile, Copies( ' ', 12 )
  428.            Call CharOut outfile, '0   ' || UserFrom || D2C(1) || SubjLine
  429.            Call CharOut outfile, D2C(1)|| D2C(1) || UserFrom||D2C(2)||UserTo
  430.            Call LineOut outfile, D2C(3) || ReplyLine
  431.            Call LineOut outfile, 'To: ' || UserTo
  432.            Call LineOut outfile, 'Date: ' || DateLin
  433.            Call LineOut outfile, 'From: ' || UserFrom
  434.            Call LineOut outfile, 'Reply-To: <' ||  ReplyLine || '>'
  435.            Call LineOut outfile, ''
  436.            Call LineOut outfile, 'Subject: ' || SubjLine
  437.            Call LineOut outfile, ''
  438.                                                                                      
  439.            Do While lines( infile.y ) > 0
  440.               Lin = LineIn( infile.y )
  441.               Call LineOut outfile, Lin
  442.            end /* Do While */
  443.                                                                                      
  444.            Call LineOut infile.y  /* Close input file */
  445.            Call LineOut outfile, D2C( 254 ) || D2C( 4 ) || SubjLine
  446.         end /* Do While */
  447.  
  448.         fldCount = fldCount + 1
  449.         Call LineOut outfile, ''
  450.         Call Charout outfile
  451.      end /* If Stream Do */
  452.   end /*Do While */
  453.  
  454.   Call LineOut PmFolderLst
  455.  
  456.   Say;Say fldCount 'Folders converted.'
  457.   '@PAUSE'
  458.  
  459.   Call BringUpMenu
  460.  
  461.   Return
  462. /*-------------------------------------------------------------------------*/        
  463.  
  464. CHECKFOLDNAME: Procedure
  465.  
  466.  Arg outfile
  467.  
  468.  fn = Right( outfile, Length(outfile) - LastPos( '\',outfile ) )
  469.  folddir = Left( outfile, LastPos( '\', outfile ) )
  470.  i = 0
  471.  tokenName = folddir || 'Pm2Post'
  472.  
  473.  If Stream( outfile, 'C', 'QUERY EXISTS') <> '' then Do
  474.     Say;Say fn 'already exists. Rename folder: '
  475.     Pull folderName
  476.     If folderName = '' then Do
  477.       Do until Stream( tokenName || i || '.NLG', 'C', 'QUERY EXISTS') = ''
  478.         i = i +1
  479.         outfile = tokenName || i || '.NLG'
  480.       end /* Do Until */
  481.     end /* If Do */
  482.     Else Do
  483.        Num = Length( folderName ) - LastPos( '\', folderName )
  484.        folderName = Right( folderName, Num )
  485.  
  486.        If folderName > 8 then
  487.           folderName = Left( folderName, 8 )
  488.  
  489.        If LastPos( '.', folderName ) <> 0 then
  490.          Num = LastPos( '.', folderName ) - 1
  491.        Else Num = Length( folderName )
  492.        outfile = folddir || Strip( Left( folderName, Num ) ) || '.NLG'
  493.     end  /* Else Do */
  494.  
  495.  outfile = CheckFoldName( outfile )
  496.  end  /* If Do */
  497.  
  498.  Return( outfile )
  499. /*------------------------------------------------------------------------*/
  500.  
  501. DATESWITCH: Procedure                                                                
  502. /* Function returns a numeric equivalent from the abbreviated month */               
  503.                                                                                      
  504.  Arg Date                                                                            
  505.                                                                                      
  506.  Week = Word( Date, 1 )                                                              
  507.  Day = Word( Date, 2 )                                                               
  508.  Month = Word( Date, 3 )                                                             
  509.  Year = Word( Date, 4 )                                                              
  510.  Time = Word( Date, 5 )                                                              
  511.  Stand = Word( Date, 6 )                                                             
  512.  num = LastPos( ':', Time ) - 1                                                      
  513.  Time = Left( Time, num )                                                            
  514.  If Length( Time ) < 5 then                                                          
  515.     Time = '0' || Time                                                               
  516.                                                                                      
  517.  Select                                                                              
  518.     When Month = 'JAN' then                                                          
  519.        Month = '01'                                                                  
  520.     When Month = 'FEB' then                                                          
  521.        Month = '02'                                                                  
  522.     When Month = 'MAR' then                                                          
  523.        Month = '03'                                                                  
  524.     When Month = 'APR' then                                                          
  525.        Month = '04'                                                                  
  526.     When Month = 'MAY' then                                                          
  527.        Month = '05'                                                                  
  528.     When Month = 'JUN' then                                                          
  529.        Month = '06'                                                                  
  530.     When Month = 'JUL' then                                                          
  531.        Month = '07'                                                                  
  532.     When Month = 'AUG' then                                                          
  533.        Month = '08'                                                                  
  534.     When Month = 'SEP' then                                                          
  535.        Month = '09'                                                                  
  536.     When Month = 'OCT' then                                                          
  537.        Month = '10'                                                                  
  538.     When Month = 'NOV' then                                                          
  539.        Month = '11'                                                                  
  540.     Otherwise Month = '12'                                                           
  541.  end  /* select */                                                                   
  542.  DateString = '0'|| Year || '/' || Month || '/' || Day || Time || Stand 
  543.  
  544.  Return( DateString )
  545. /*----------------------------------------------------------------------*/
  546. /*           Other Supporting Functions and Procedures                  */
  547. /*----------------------------------------------------------------------*/
  548.  
  549. GETINBASKETNAME: Procedure
  550.  
  551.  Arg PostDir
  552.  basfile = PostDir || '\INBASKET.NIX'
  553.  found = 0
  554.  
  555.  Say;Say "Enter your Inbasket name: "
  556.  Pull inName
  557.  
  558.  If inName = '' then
  559.    outName = GetInbasketName( PostDir )
  560.  Else Do
  561.    basfile = PostDir || '\INBASKET.NIX'
  562.    Do While lines(basfile) > 0 & found <> 1
  563.      lin = Translate( LineIn( basfile ) )
  564.      inName = Translate( inName )
  565.      dirName = Word( lin, 1 )
  566.      BasIdent = SubWord( lin,2, Words(lin)-1 )
  567.      If inName = BasIdent then found = 1
  568.    end /* While Do */
  569.  
  570.    Call LineOut basfile
  571.  
  572.    If found <> 1 then Signal Err4
  573.    Else outName = dirName
  574.  
  575.  end  /* Else Do */
  576.  Say; Say;
  577.  
  578.  Return( outName )
  579. /*----------------------------------------------------------------------*/
  580.   
  581. LoadRexxUtil: Procedure
  582.   If rxFuncQuery( 'SysLoadFuncs' ) then Do
  583.     If RxFuncAdd( 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs' ) then Do
  584.        Say "Error: Couldn't load RexxUtil library."
  585.        Return 1
  586.     end /* If Do */
  587.     Call SysLoadFuncs
  588.   end /* If Do */
  589.  Return 0
  590. /*----------------------------------------------------------------------*/
  591.  
  592. BRINGUPMENU:
  593.  
  594.   Call SysCls
  595.   Call GreetingMsg
  596.  
  597.   Call SysCurState 'OFF'
  598.   Call CharOut 'CON:', colorNormal
  599.   Do r = 1 to menu.0
  600.      Call SysCurPos menu.r.row, menu.r.col
  601.      Call CharOut 'CON:', menu.r.txt
  602.   end
  603.   r = 1
  604.  
  605.   Return
  606. /*------------------------------------------------------------------------*/
  607.  
  608. EXITING:
  609.  
  610.  Say;Say;
  611.  Say '      ' BkCount 'Address books converted.'
  612.  Say '      ' fldcount 'Folders converted.'
  613.  EXIT
  614. /*----------------------------------------------------------------------*/
  615.  
  616. HALT:
  617.   Call SysCls
  618.   Say;Say 'Program Interupted..'
  619.   Say 'Ending UML2POST.CMD run...'
  620.  
  621.   Exit
  622. /*----------------------------------------------------------------------*/
  623.  
  624. HELP:
  625.  
  626.  Say ''
  627.  Say 'PM2POSTR.CMD converts PmMail folders and address books for use with the'
  628.  Say 'Post Road Mailer.'
  629.  Say ''
  630.  Say 'Syntax is:  PM2POSTR <path>'
  631.  Say ''
  632.  Say 'All PmMail folders and address books will be visible in PostRoad Mailer'
  633.  Say 'after execution of this utiltity.'
  634.  Say ''
  635.  Say 'The Inbasket name can be found on the Title bar of the PostRoad Mailer'
  636.  Say ''
  637.  Say 'PM2POSTR will prompt for the PmMail subdirectory if a path is not'
  638.  Say '         specified.'
  639.  Say ''
  640.  Exit
  641.  
  642. /*--------------------------------------------------------------------------*/
  643.  
  644. GREETINGMSG:
  645.   Say ''
  646.   Say Center('PM2POSTR.CMD Converting Utility                 (c)Innoval Systems Solutions,Inc', 79)
  647.   Say ''
  648.   Say Center('*--Converts PmMail folders and address books for use with the--*',79)
  649.   Say Center( 'Post Road Mailer', 79 )
  650.   Say ''
  651.   RETURN
  652. /*---------------------------------------------------------------------------*/
  653.  
  654. ERR:
  655.  Say 'Err: This Utility must be run from within PostRoad Mailer root directory.'
  656.  Call Beep 450, 250
  657.  Exit 1
  658. /*--------------------------------------------------------------------------*/
  659. ERR1:
  660.  Say 'Err: PmMail is not installed in this directory or is missing files.'
  661.  Call Beep 450, 250
  662.  Exit 1
  663. /*--------------------------------------------------------------------------*/
  664. ERR2:
  665.  Say 'Err: File' filespec 'does not appear to be in ascii address book format.'
  666.  Call LineOut filespec
  667.  Call Beep 450, 250
  668.  Exit 1
  669. /*---------------------------------------------------------------------------*/
  670. ERR3:
  671.  Say 'Err: Error writing to file' AdrFile
  672.  Call LineOut filespec
  673.  Call CharOut AdrFile
  674.  Call Beep 450, 250
  675.  Exit 1
  676. /*---------------------------------------------------------------------------*/
  677. ERR4:
  678.  Say;Say 'Err:' inName 'is not an inbasket name.'
  679.  Say '     Please review your PostRoad Mailer title bar for the Inbasket name.'
  680.  Call Beep 450, 250
  681.  Exit 1
  682.