home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / postroad.zip / asc2adr.cmd < prev    next >
OS/2 REXX Batch file  |  1997-10-23  |  8KB  |  208 lines

  1. /*  ASC2ADR.CMD -- Convert ASCII file to Post Road Mailer address book.   */
  2. /*                         Parameters: ASCII_file                         */
  3. /*   (c) Copyright 1995, InnoVal System Solutions, Inc., Tom Springall    */
  4. /*        (c) Copyright 1996, modifications, InnoVal, Kari Jackson        */
  5. /*    InnoVal Systems Solutions, Inc., and the authors cannot be held     */
  6. /*   responsible for damage that might occur while using this program.    */
  7. /*                         Use at your own risk.                          */
  8.  
  9.  CRLF = '0D'x||'0A'x
  10.  
  11.  SAVE_FILECARDS        = X2C('0700') ; SAVE_GROUPS           = X2C('0800')
  12.  SAVE_GNAME            = X2C('2000') ; SAVE_ADDRESSES        = X2C('2200')
  13.  SAVE_GADDRESS         = X2C('2400') ; SAVE_BOOK_NAME        = X2C('3000')
  14.  SAVE_FIRST            = X2C('3500') ; SAVE_CNAME            = X2C('4000')
  15.  SAVE_COMPANY          = X2C('4500') ; SAVE_EMAIL1           = X2C('5000')
  16.  SAVE_EMAIL2           = X2C('7500') ; SAVE_EMAIL3           = X2C('7600')
  17.  SAVE_EMAIL4           = X2C('7700') ; SAVE_EMAIL5           = X2C('7800')
  18.  SAVE_PHONE1           = X2C('8000') ; SAVE_PHONE2           = X2C('8500')
  19.  SAVE_FAX              = X2C('9000') ; SAVE_ADDRESS          = X2C('9500')
  20.  SAVE_NICKNAME1        = X2C('0001') ; SAVE_NICKNAME2        = X2C('0101')
  21.  SAVE_NICKNAME3        = X2C('0201') ; SAVE_NICKNAME4        = X2C('0301')
  22.  SAVE_NICKNAME5        = X2C('0401')
  23.  
  24.  Arg filespec
  25.  If filespec = '' | Pos('?',filespec) <> 0 then Signal Help
  26.  
  27.  If Pos('.', filespec) = 0 then filespec = filespec || '.ASC'
  28.  If Stream(filespec,'C','QUERY EXISTS') = '' then Signal Err1
  29.  
  30.  Parse var filespec file '.' ext
  31.  If ext = 'ADR' then Signal Err2
  32.  
  33.  filename = SubStr(file, LastPos('\',file) + 1)
  34.  outfile = filename || '.ADR'
  35.  groupfile = filename || '.GRP'
  36.  
  37.  If '' <> Stream(outfile,'C','QUERY EXISTS') then do
  38.    Say outfile 'already exists. Do you want to replace it? (Y/n)'
  39.    Pull ans
  40.    If Left(ans,1) <> 'N' then '@ERASE' outfile
  41.    Else Exit 1
  42.    end
  43.  If '' = Stream(groupfile,'C','QUERY EXISTS') then GROUPFILE=''
  44.  
  45.  /* Check for address book name and write to output file. */
  46.  lin = LineIn(filespec)
  47.  parse var lin name ' (Post Road Mailer address book' tail
  48.  If tail='' then Signal Err3
  49.  Call SaveIt SAVE_BOOK_NAME, name
  50.  do until lin=''
  51.     lin=linein(filespec)
  52.  end
  53.  if groupfile<>'' then do until lin=''
  54.     lin=linein(groupfile)
  55.  end
  56.  
  57.  cards = 0 ; groups = 0 ; data. = ''
  58.  
  59.  Do i=1 While Lines(filespec) > 0
  60.    lin = LineIn(filespec)
  61.    Parse var lin data.i.LAST_NAME '09'x data.i.FIRST_NAME '09'x data.i.ORGANIZATION '09'x data.i.EMAIL1 '09'x data.i.NICKNAME1 '09'x data.i.EMAIL2 '09'x data.i.NICKNAME2 '09'x data.i.EMAIL3 '09'x data.i.NICKNAME3 '09'x data.i.EMAIL4 '09'x data.i.NICKNAME4 '09'x data.i.EMAIL5 '09'x data.i.NICKNAME5 '09'x data.i.PHONE1 '09'x data.i.PHONE2 '09'x data.i.FAX '09'x data.i.COMMENTS
  62.    holding=''
  63.    do while data.i.COMMENTS<>''
  64.       parse var data.i.COMMENTS left '09'x data.i.COMMENTS
  65.       if holding='' then holding=left
  66.       else holding=holding||CRLF||left
  67.    end
  68.    data.i.COMMENTS = holding
  69.    if data.i.LAST_NAME<>'' | data.i.ORGANIZATION<>'' then do
  70.       cards=cards+1
  71.       typ.i='CARD'
  72.    end
  73.  end
  74.  Call LineOut filespec                      /* close input file */
  75.  j=i
  76.  if groupfile<>'' then Do i=j While Lines(groupfile) > 0
  77.    lin=''
  78.    do until right(lin,1)<>'09'x
  79.       lin=lin||linein(groupfile)
  80.    end
  81.    Parse var lin data.i.GROUP_NAME '09'x gaddresses
  82.    k=0
  83.    do while gaddresses<>''
  84.       parse var gaddresses left '09'x gaddresses
  85.       k=k+1
  86.       data.i.gaddress.k=left
  87.    end
  88.    data.i.addresses=k
  89.    if data.i.GROUP_NAME<>'' then do
  90.       groups=groups+1
  91.       typ.i='GROUP'
  92.    end
  93.  end
  94.  Call LineOut groupfile                      /* close input file */
  95.  
  96.  /* save card and group counts */
  97.  Call SaveIt SAVE_FILECARDS, MakeNum(cards)
  98.  Call SaveIt SAVE_GROUPS, MakeNum(groups)
  99.  
  100.  /* write out each level (each level contains an address page or group) */
  101.  Do j = 1 to i - 1
  102.    Select
  103.      When typ.j = 'CARD' then do
  104.        Call SaveIt SAVE_CNAME, data.j.LAST_NAME  /* must be 1st */
  105.        Call SaveIt SAVE_FIRST, data.j.FIRST_NAME
  106.        Call SaveIt SAVE_COMPANY, data.j.ORGANIZATION
  107.        Call SaveIt SAVE_EMAIL1, data.j.EMAIL1
  108.        Call SaveIt SAVE_EMAIL2, data.j.EMAIL2
  109.        Call SaveIt SAVE_EMAIL3, data.j.EMAIL3
  110.        Call SaveIt SAVE_EMAIL4, data.j.EMAIL4
  111.        Call SaveIt SAVE_EMAIL5, data.j.EMAIL5
  112.        Call SaveIt SAVE_PHONE1, data.j.PHONE1
  113.        Call SaveIt SAVE_PHONE2, data.j.PHONE2
  114.        Call SaveIt SAVE_FAX, data.j.FAX
  115.        Call SaveIt SAVE_ADDRESS, data.j.COMMENTS
  116.        Call SaveIt SAVE_NICKNAME1, data.j.NICKNAME1
  117.        Call SaveIt SAVE_NICKNAME2, data.j.NICKNAME2
  118.        Call SaveIt SAVE_NICKNAME3, data.j.NICKNAME3
  119.        Call SaveIt SAVE_NICKNAME4, data.j.NICKNAME4
  120.        Call SaveIt SAVE_NICKNAME5, data.j.NICKNAME5
  121.      end /* of When */
  122.  
  123.      When typ.j = 'GROUP' then do         /* it's a group */
  124.        /* group must begin with name of group */
  125.        Call SaveIt SAVE_GNAME, data.j.GROUP_NAME
  126.        /* number of addresses in group */
  127.        Call SaveIt SAVE_ADDRESSES, MakeNum(data.j.addresses)
  128.        /* then, each address */
  129.        Do k = 1 to data.j.addresses
  130.          Call SaveIt SAVE_GADDRESS, data.j.GADDRESS.k
  131.        end
  132.      end /* of When */
  133.      Otherwise Nop
  134.    end /* of Select */
  135.  end /* of Do j... */
  136.  
  137.  Call CharOut outfile                /* close output file */
  138.  
  139.  Say ''
  140.  Say 'The address book version of' filespec
  141.  Say 'is now in' outfile
  142.  Say ''
  143.  Say 'It contains' cards 'name(s) and' groups 'group(s).'
  144.  Say ''
  145.  
  146.  Exit
  147.  
  148. /*----------------------------------------------------------------------*/
  149. HELP:
  150.  
  151.  Say ''
  152.  Say 'ASC2ADR.CMD converts a text file to a Post Road Mailer address book.'
  153.  Say ''
  154.  Say 'Syntax is:  ASC2ADR <path>filename'
  155.  Say ''
  156.  Say 'The output file will have the same filename as the text file and'
  157.  Say 'an .ADR extension, i.e., filename.ADR'
  158.  Say ''
  159.  Exit
  160.  
  161. /*---------------------------------------------------------------------------*/
  162. SAVEIT: Procedure Expose outfile
  163.  
  164.    /* write field to output file */
  165.    code = Left(Arg(1),4,D2C(0))
  166.    valu = Arg(2)
  167.    len = MakeNum(Length(valu))
  168.  
  169.    If 0 <> CharOut(outfile, code || len || valu) then Signal Err4
  170.  
  171.    Return
  172.  
  173. /*---------------------------------------------------------------------------*/
  174. MAKENUM: Procedure   /* Convert integer into 4-byte Intel format */
  175.  
  176.    Return Intel(D2C(Arg(1),4))
  177.  
  178. /*---------------------------------------------------------------------------*/
  179. INTEL:  Procedure    /* Swaps bytes in an Intel 2 or 4 byte number. */
  180.  Parse arg x
  181.  
  182.  If Length(x) = 2 then
  183.    Return Right(x,1) || Left(x,1)
  184.  
  185.  Else
  186.    Return Intel(Right(x,2)) || Intel(Left(x,2))
  187.  
  188. /*---------------------------------------------------------------------------*/
  189. ERR1:
  190.  Say 'File' filespec 'not found.'
  191.  Exit 1
  192. /*---------------------------------------------------------------------------*/
  193. ERR2:
  194.  Say 'The input file' filespec 'should not have an address book (.ADR) extension.'
  195.  Exit 1
  196. /*---------------------------------------------------------------------------*/
  197. ERR3:
  198.  Say 'File' filespec 'does not appear to be in the PRM ASCII file format.'
  199.  Call LineOut filespec
  200.  Exit 1
  201. /*---------------------------------------------------------------------------*/
  202. ERR4:
  203.  Say 'Error writing to file' outfile
  204.  Call LineOut filespec
  205.  Call CharOut outfile
  206.  Exit 1
  207. /*---------------------------------------------------------------------------*/
  208.