Changeset 1724


Ignore:
Timestamp:
Feb 16, 2014, 11:25:55 PM (11 years ago)
Author:
John Small
Message:

Ticket 462:
Improved handling of invalid or missing CFG file.
Errors in sending email no longer stop all other notifications for a task.
Other various code improvements.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/ReleaseTool.cmd

    r1610 r1724  
    7070 *          - Added support for FTP and NNTP commands
    7171 *    07 Aug 11 JBS Ticket 462: Fix bug in NNTP "To" code
     72 *    11 Feb 14 JBS Ticket 462: Improved handling of missing cfg file.
    7273 *
    7374 * To Do
     75 *    -  Better error handling for emails/NNTP
     76 *    -  Support multiple description lines for SMTP/NNTP (to improve readabliity on verification screens)
    7477 *    -  Make sure ##macro## key_values are filled before use?
    75  *    -  Better error handling for emails
    7678 *    -  More flexibility for SMTP settings for the "Commit work" (to FM/2 developers)
    7779 *       and the "Please move uplaoded file" (to Netlabs) emails. Currently only the
     
    8082 *    -  Support configurable Hobbes names and email address? via parameter or CFG file?
    8183 *    -  "hidden" display/entry for passwords?
     84 *    -  Prompt for edit to fix or delete the Hobbes TXT file if invalid email address found
    8285 *
    8386*/
     
    8891signal on Failure name Error
    8992signal on Notready name Error
     93signal on Syntax name Error
    9094signal on Novalue name Error
    91 signal on SYNTAX name Error
    9295/* JBS: for debugging */
    9396signal on Novalue
     
    138141         say 'A line that was not:'
    139142         say '  - blank'
    140          say '  - a cooment line'
     143         say '  - a comment line'
    141144         say '  - a section name line (e.g. [FTP])'
    142145         say '  - a "key-name = key-value" line'
     
    378381                  if UploadRelease() = 0 then
    379382                     do
    380                         '@pause'
     383                        say
     384                        say 'Attempting to notify Netlabs of the upload...'
     385                        say
    381386                        call Email user_choice
    382387                     end
    383                   else 
     388                  else
    384389                     say 'Upload(s) failed. Email to Netlabs cancelled.'
    385390                  prev_user_choice = user_choice
     
    387392            when user_choice = mainmenu.Announce_num then
    388393               do /* Announce the release. */
    389                   if Email(user_choice) = 0 then
    390                      call AnnounceToNewsgroups
     394                  call Email user_choice
     395                  call AnnounceToNewsgroups
    391396                  prev_user_choice = user_choice
    392397              end
     
    422427   if cfg.SMTP.0 = 0 then
    423428      do
    424          say 'Error: Cannot send Email. No SMTP sections were found in RELEASETOOL.CFG!'
    425          return -1
     429        if \cfg.file_exists then
     430          say 'Error: Cannot send Email without the configuration file:' cfg.file
     431        else
     432          say 'Error: Cannot send Email. No SMTP sections were found in' cfg.file ||'.'
     433        say
     434        '@pause'
     435        return -1
    426436      end
    427437   rcx = -1
     
    985995         if lines.0 = 1 then
    986996            Hobbes.uploader_email_address = word(lines.1, 3)
    987          else  /* JBS: Prompt for edit to fix or delete the file here? */
     997         else
    988998            Hobbes.uploader_email_address = 'N/A (' || Hobbes.TxtFilename 'has zero or more than one email addresses!)'
    989999      end
     
    11521162
    11531163CfgInit: procedure expose (globals)
    1154    cfg.           = ''
    1155    cfg.file       = 'ReleaseTool.cfg'
     1164   cfg.            = ''
     1165/*
     1166   trace '?i'
     1167*/
     1168   cfg.file        = 'ReleaseTool.cfg'
     1169   cfg.file_exists = (stream(cfg.file, 'c', 'query exists') \= '')
     1170   if  \cfg.file_exists then
     1171     do
     1172       template_file = left(cfg.file, lastpos('.', cfg.file)) || 'tmp'
     1173       /* JBS: Check for missing template file? */
     1174       no_cfg_option = 0
     1175       do until wordpos(no_cfg_option, '1 2 3 4') > 0
     1176         call SysCls
     1177         say
     1178         say 'No' cfg.file 'file found.'
     1179         say
     1180         say 'Options:'
     1181         say '   1. Proceed without FTP, SMTP and NNTP features until one is configured.'
     1182         say '   2. Copy the template file (' || template_file || ') to' cfg.file 'and proceed'
     1183         say '         with (mostly) invalid CFG data.'
     1184         say '   3. Copy the template file to' cfg.file 'and edit it right now with'
     1185         say '         your SVN_EDITOR to suit your environment.'
     1186         say '   4. Exit now, create your own' cfg.file 'and restart ReleaseTool later.'
     1187         say
     1188         call charout , 'Enter the number of your choice: '
     1189         no_cfg_option = SysGetKey()
     1190         say
     1191         select
     1192           when no_cfg_option = 1 then
     1193             cfg.file_exists = 0
     1194           when no_cfg_option = 2 then
     1195             do
     1196               call CopyTemplateFile template_file, cfg.file /* No return on error */
     1197               cfg.file_exists = 1
     1198             end
     1199           when no_cfg_option = 3 then
     1200             do
     1201               call CopyTemplateFile template_file, cfg.file /* No return on error */
     1202               cmd.editor cmd.editorparams cfg.file
     1203               cfg.file_exists = 1
     1204             end
     1205           when no_cfg_option = 4 then
     1206             exit
     1207           otherwise
     1208             nop
     1209         end
     1210       end
     1211     end
     1212
    11561213   cfg.crlf       = '0D0A'x
    11571214   cfg.closing    = cfg.crlf || cfg.crlf || '.'
     
    11771234   linenum = 0
    11781235   node = ''
    1179    do while (lines(cfg.file) > 0 & retval = 0)
    1180       parse value linein(cfg.file) || ';' with line ';'
    1181       linenum = linenum + 1
    1182       line = strip(line)
    1183       select
    1184          when line = '' then
    1185             nop      /* Skip blank/empty lines */
    1186          when left(line, 1) = ';' then
    1187             nop      /* Skip comment lines */
    1188          when left(line, 1) = '[' then
    1189             do
    1190                select
    1191                   when node = 'FTP' then
    1192                      do
    1193                         cfg.node.n.directory.0 = d
    1194                         cfg.node.n.directory.d.file.0 = f
    1195                      end
    1196                   when node = 'SMTP' | node = 'NNTP' then
    1197                      do
    1198                         cfg.node.n.signature.0 = s
    1199                         s = 0
    1200                      end
    1201                   otherwise
    1202                      nop
    1203                end
    1204                parse upper var line '[' node ']'
    1205                cfg.node.0 = cfg.node.0 + 1
    1206                n = cfg.node.0
    1207                d = 0
    1208                f = 0
    1209                s = 0
    1210             end
    1211          when pos('=', line) = 0 then
    1212             retval = 10000 + linenum
    1213          otherwise
    1214             do
    1215                parse var line key_name '=' key_value
    1216                key_name = translate(strip(key_name))
    1217                key_value = strip(key_value)
    1218                p =  lastpos(';', key_value)
    1219                if p = 1 then
    1220                   do
    1221                      retval = 10000 + linenum
    1222                      iterate
    1223                   end
    1224                else if p > 1 then
    1225                   key_value = strip(left(key_value, p - 1))
    1226                select
    1227                   when wordpos(key_name, cfg.node.keys) = 0 then
    1228                      retval = -(10000 + linenum)
    1229                   when (node = 'SMTP' | node = 'NNTP') & key_name = 'SIGNATURE' then
    1230                      do
    1231                         s = s + 1
    1232                         cfg.node.n.signature.s = key_value
    1233                      end
    1234                   when node = 'FTP' & key_name = 'DIRECTORY' then
    1235                      do
    1236                         d = d + 1
    1237                         cfg.node.n.directory.d = key_value
    1238                      end
    1239                   when node = 'FTP' & key_name = 'FILE' then
    1240                      do
    1241                         if d = 0 then
    1242                            do
    1243                               d = 1
    1244                               cfg.node.n.directory.d = ''
    1245                            end
    1246                         f = f + 1
    1247                         cfg.node.n.directory.d.file.f = key_value
    1248                      end
    1249                   otherwise
    1250                      cfg.node.n.key_name = key_value
    1251                end
    1252             end
    1253       end
    1254    end
    1255    if node = 'FTP' then
     1236   if cfg.file_exists then
     1237     do
     1238       do while (lines(cfg.file) > 0 & retval = 0)
     1239          parse value linein(cfg.file) || ';' with line ';'
     1240          linenum = linenum + 1
     1241          line = strip(line)
     1242          select
     1243             when line = '' then
     1244                nop      /* Skip blank/empty lines */
     1245             when left(line, 1) = ';' then
     1246                nop      /* Skip comment lines */
     1247             when left(line, 1) = '[' then
     1248                do
     1249                   select
     1250                      when node = 'FTP' then
     1251                         do
     1252                            cfg.node.n.directory.0 = d
     1253                            cfg.node.n.directory.d.file.0 = f
     1254                         end
     1255                      when node = 'SMTP' | node = 'NNTP' then
     1256                         do
     1257                            cfg.node.n.signature.0 = s
     1258                            s = 0
     1259                         end
     1260                      otherwise
     1261                         nop
     1262                   end
     1263                   parse upper var line '[' node ']'
     1264                   cfg.node.0 = cfg.node.0 + 1
     1265                   n = cfg.node.0
     1266                   d = 0
     1267                   f = 0
     1268                   s = 0
     1269                end
     1270             when pos('=', line) = 0 then
     1271                retval = 10000 + linenum
     1272             otherwise
     1273                do
     1274                   parse var line key_name '=' key_value
     1275                   key_name = translate(strip(key_name))
     1276                   key_value = strip(key_value)
     1277                   p =  lastpos(';', key_value)
     1278                   if p = 1 then
     1279                      do
     1280                         retval = 10000 + linenum
     1281                         iterate
     1282                      end
     1283                   else if p > 1 then
     1284                      key_value = strip(left(key_value, p - 1))
     1285                   select
     1286                      when wordpos(key_name, cfg.node.keys) = 0 then
     1287                         retval = -(10000 + linenum)
     1288                      when (node = 'SMTP' | node = 'NNTP') & key_name = 'SIGNATURE' then
     1289                         do
     1290                            s = s + 1
     1291                            cfg.node.n.signature.s = key_value
     1292                         end
     1293                      when node = 'FTP' & key_name = 'DIRECTORY' then
     1294                         do
     1295                            d = d + 1
     1296                            cfg.node.n.directory.d = key_value
     1297                         end
     1298                      when node = 'FTP' & key_name = 'FILE' then
     1299                         do
     1300                            if d = 0 then
     1301                               do
     1302                                  d = 1
     1303                                  cfg.node.n.directory.d = ''
     1304                               end
     1305                            f = f + 1
     1306                            cfg.node.n.directory.d.file.f = key_value
     1307                         end
     1308                      otherwise
     1309                         cfg.node.n.key_name = key_value
     1310                   end
     1311                end
     1312          end
     1313       end
     1314       if node = 'FTP' then
     1315          do
     1316             cfg.node.n.directory.0 = d
     1317             cfg.node.n.directory.d.file.0 = f
     1318          end
     1319       else if (node = 'SMTP' | node = 'NNTP') then
     1320          cfg.node.n.signature.0 = s
     1321       call stream cfg.file, 'c', 'close'
     1322     end
     1323return retval
     1324
     1325CopyTemplateFile: procedure
     1326  parse arg template_file, cfg_file
     1327  do i = 1 to 2
     1328    if stream(template_file, 'c', 'query exists') = '' then
    12561329      do
    1257          cfg.node.n.directory.0 = d
    1258          cfg.node.n.directory.d.file.0 = f
    1259       end
    1260    else if (node = 'SMTP' | node = 'NNTP') then
    1261       cfg.node.n.signature.0 = s
    1262    call stream cfg.file, 'c', 'close'
    1263 return retval
     1330        say
     1331        say 'Unable to find template file:' template_file
     1332        if i = 1 then
     1333          do
     1334            say 'Trying to get one from the repository...'
     1335            'svn update' template_file
     1336          end
     1337        else
     1338          do
     1339            say 'svn update failed.'
     1340            say 'Exiting...'
     1341            exit
     1342          end
     1343      end
     1344  end
     1345  signal off error
     1346  '@copy' template_file cfg_file '>NUL 2>NUL'
     1347  if rc \= 0 then
     1348    do
     1349      say 'Copy of template file failed.'
     1350      say 'Exiting...'
     1351      exit
     1352    end
     1353  signal on error
     1354return
    12641355
    12651356DisplayMenu: procedure expose (globals)
     
    17101801
    17111802UploadRelease: procedure expose (globals)
    1712    if available.RXFTP = 0 then
     1803  rcx = 0
     1804  select
     1805    when (available.RXFTP = 0 | \cfg.file_exists) then
    17131806      do
    1714          say 'Until RXFTP.DLL is placed in a directory on the LIBPATH,'
    1715          say 'manual uploading will be required.'
    1716          say
    1717          call charout , 'Would you like a commandline session to upload? (Y/n) '
    1718          reply = translate(SysGetKey())
    1719          say
    1720          if reply \= 'N' then
    1721             call Commandline
    1722          say
    1723       end
    1724    else
     1807        if \cfg.file_exists then
     1808          say 'Until' cfg.file ' has been created and customized,'
     1809        else
     1810          say 'Until RXFTP.DLL is placed in a directory on the LIBPATH,'
     1811        say 'manual uploading will be required.'
     1812        say
     1813        call charout , 'Would you like a commandline session to upload? (Y/n) '
     1814        reply = translate(SysGetKey())
     1815        say
     1816        if reply \= 'N' then
     1817           call Commandline
     1818        else
     1819           rcx = 1
     1820        say
     1821      end
     1822    otherwise
    17251823      do
    17261824         retval = 0
     
    18321930         end
    18331931      end
     1932  end
    18341933return rcx
    18351934
    18361935AnnounceToNewsgroups: procedure expose (globals)
    1837    body_file = SysTempFilename('NNTPBody.???')
    1838    call SetDefaultAnnouncementText body_file
    1839    cfg.NNTP.subject = 'FM/2' ver.full 'has been released.'
    1840    _text = '<Standard>'
    1841    do until ((option = 'C') | (option = 'Q'))
    1842       call SysCls
    1843       say
    1844       say 'News: Verify/edit content'
    1845       say
    1846       say 'Subject  :' cfg.NNTP.subject
    1847       say 'Text     :' _text
    1848       say
    1849       say 'Type "C" to confirm the above and proceed.'
    1850       say '     "Q" to abort.'
    1851       say '     "S" to edit the subject.'
    1852       say '     "T" to edit the message text (in an editor).'
    1853       say
    1854       call charout, '==> '
    1855       option = translate(SysGetKey())
    1856       say
    1857       say
    1858       select
    1859          when ((option = 'C') | (option = 'Q')) then
    1860             nop
    1861          when option = 'S' then
    1862             do
    1863                say 'Enter the Subject (followed by the ENTER key):'
    1864                cfg.NNTP.subject = linein()
    1865             end
    1866          when option = 'T' then
    1867             do
    1868                b4_timestamp = SysGetFileDateTime(body_file)
    1869                say 'The current body of the newsgroup message will now be loaded into an editor.'
    1870                say 'Make desired changes, if any, and save the file.'
    1871                say
    1872                call charout, 'Press any key when ready to load the message body into an editor: '
    1873                call SysGetKey
    1874                say
    1875                call ExecCmd cmd.editor body_file
    1876                if b4_timestamp \= SysGetFileDateTime(body_file) then
    1877                   _text = '<Modified>'
    1878             end
    1879          otherwise
    1880             nop
    1881       end
    1882    end
    1883    if option = 'Q' then
    1884       rcx = -1      /* User aborted operation */
    1885    else
    1886       do s = 1 to cfg.NNTP.0
    1887          call SysCls
    1888          say
    1889          do until ((option = 'C') | (option = 'Q'))
    1890             call SysCls
    1891             say
    1892             say 'News: Verify/edit server-specific data for' cfg.NNTP.s.description
    1893             say
    1894             say 'Host     :' cfg.NNTP.s.host
    1895             say 'To       :' cfg.NNTP.s.to
    1896             say 'From     :' cfg.NNTP.s.from
    1897             say 'UserID   :' cfg.NNTP.s.userid
    1898             say 'Password :' cfg.NNTP.s.password
    1899             say
    1900             say 'Type "C" to confirm the above and send.'
    1901             say '     "Q" to abort sending this email.'
    1902             say '     "H" to change the name of the host.'
    1903             say '     "T" to change the list of newsgroups.'
    1904             say '     "F" to change the From address.'
    1905             say '     "U" to change the Userid.'
    1906             say '     "P" to change the Password.'
    1907             say
    1908             call charout, '==> '
    1909             option = translate(SysGetKey())
    1910             say
    1911             say
    1912             say
    1913             select
    1914                when option = 'H' then
    1915                   do
    1916                      say 'Enter the newsgroup host to use (followed by the ENTER key).'
    1917                      cfg.NNTP.s.host = linein()
    1918                   end
    1919                when option = 'T' then
    1920                   do
    1921                      say 'Enter a comma=separated list of newagroup(s) (followed by the ENTER key).'
    1922                      cfg.NNTP.s.to = linein()
    1923                   end
    1924                when option = 'F' then
    1925                   do
     1936  if \cfg.file_exists then
     1937    do
     1938      say 'Unable to post to newsgroups without the configuration file:' cfg.file
     1939      say
     1940      return
     1941    end
     1942  body_file = SysTempFilename('NNTPBody.???')
     1943  call SetDefaultAnnouncementText body_file
     1944  cfg.NNTP.subject = 'FM/2' ver.full 'has been released.'
     1945  _text = '<Standard>'
     1946  do until ((option = 'C') | (option = 'Q'))
     1947     call SysCls
     1948     say
     1949     say 'News: Verify/edit content'
     1950     say
     1951     say 'Subject  :' cfg.NNTP.subject
     1952     say 'Text     :' _text
     1953     say
     1954     say 'Type "C" to confirm the above and proceed.'
     1955     say '     "Q" to abort.'
     1956     say '     "S" to edit the subject.'
     1957     say '     "T" to edit the message text (in an editor).'
     1958     say
     1959     call charout, '==> '
     1960     option = translate(SysGetKey())
     1961     say
     1962     say
     1963     select
     1964        when ((option = 'C') | (option = 'Q')) then
     1965           nop
     1966        when option = 'S' then
     1967           do
     1968              say 'Enter the Subject (followed by the ENTER key):'
     1969              cfg.NNTP.subject = linein()
     1970           end
     1971        when option = 'T' then
     1972           do
     1973              b4_timestamp = SysGetFileDateTime(body_file)
     1974              say 'The current body of the newsgroup message will now be loaded into an editor.'
     1975              say 'Make desired changes, if any, and save the file.'
     1976              say
     1977              call charout, 'Press any key when ready to load the message body into an editor: '
     1978              call SysGetKey
     1979              say
     1980              call ExecCmd cmd.editor body_file
     1981              if b4_timestamp \= SysGetFileDateTime(body_file) then
     1982                 _text = '<Modified>'
     1983           end
     1984        otherwise
     1985           nop
     1986     end
     1987  end
     1988  if option = 'Q' then
     1989     rcx = -1      /* User aborted operation */
     1990  else
     1991     do s = 1 to cfg.NNTP.0
     1992        call SysCls
     1993        say
     1994        do until ((option = 'C') | (option = 'Q'))
     1995           call SysCls
     1996           say
     1997           say 'News: Verify/edit server-specific data for' cfg.NNTP.s.description
     1998           say
     1999           say 'Host     :' cfg.NNTP.s.host
     2000           say 'To       :' cfg.NNTP.s.to
     2001           say 'From     :' cfg.NNTP.s.from
     2002           say 'UserID   :' cfg.NNTP.s.userid
     2003           say 'Password :' cfg.NNTP.s.password
     2004           say
     2005           say 'Type "C" to confirm the above and send.'
     2006           say '     "Q" to abort sending this email.'
     2007           say '     "H" to change the name of the host.'
     2008           say '     "T" to change the list of newsgroups.'
     2009           say '     "F" to change the From address.'
     2010           say '     "U" to change the Userid.'
     2011           say '     "P" to change the Password.'
     2012           say
     2013           call charout, '==> '
     2014           option = translate(SysGetKey())
     2015           say
     2016           say
     2017           say
     2018           select
     2019              when option = 'H' then
     2020                 do
     2021                    say 'Enter the newsgroup host to use (followed by the ENTER key).'
     2022                    cfg.NNTP.s.host = linein()
     2023                 end
     2024              when option = 'T' then
     2025                 do
     2026                    say 'Enter a comma=separated list of newagroup(s) (followed by the ENTER key).'
     2027                    cfg.NNTP.s.to = linein()
     2028                 end
     2029              when option = 'F' then
     2030                 do
    19262031/*
    1927                      say 'F.Y.I. The Hobbes email address is:' Hobbes.uploader_email_address
    1928                      say
    1929                   if reply \= '' then
    1930                      cfg.NNTP.s.from = reply
    1931                   else
    1932                      cfg.NNTP.s.from = Hobbes.uploader_email_address
     2032                    say 'F.Y.I. The Hobbes email address is:' Hobbes.uploader_email_address
     2033                    say
     2034                 if reply \= '' then
     2035                    cfg.NNTP.s.from = reply
     2036                 else
     2037                    cfg.NNTP.s.from = Hobbes.uploader_email_address
    19332038*/
    1934                      say 'Enter the From email address. (followed by the ENTER key).'
    1935                      say '(You may want to disguise the address to avoid spam.)'
    1936                      cfg.NNTP.s.from = linein()
    1937                   end
    1938                when option = 'U' then
    1939                   do
    1940                      say 'Enter the UserID (followed by the ENTER key):'
    1941                      cfg.NNTP.s.userid = linein()
    1942                   end
    1943                when option = 'P' then
    1944                   do
    1945                      say 'Enter the Password (followed by the ENTER key):'
    1946                      cfg.NNTP.s.password = linein()
    1947                   end
    1948                otherwise
    1949                   nop
    1950             end
    1951          end
    1952          if option = 'C' then
    1953             if cfg.NNTP.s.command \= '' then
    1954                do
    1955                   say 'Using external command(s) to post to newsgroup(s)...'
    1956                   _command = cfg.NNTP.s.command
    1957                   do while pos('##HOST##', _command) > 0
    1958                      parse var _command part1 '##HOST##' part2
    1959                      _command = part1 || cfg.NNTP.s.host || part2
    1960                   end
    1961                   do while pos('##PORT##', _command) > 0
    1962                      parse var _command part1 '##PORT##' part2
    1963                      _command = part1 || cfg.NNTP.s.port || part2
    1964                   end
    1965                   do while pos('##USERID##', _command) > 0
    1966                      parse var _command part1 '##USERID##' part2
    1967                      _command = part1 || cfg.NNTP.s.userid || part2
    1968                   end
    1969                   do while pos('##PASSWORD##', _command) > 0
    1970                      parse var _command part1 '##PASSWORD##' part2
    1971                      _command = part1 || cfg.NNTP.s.password || part2
    1972                   end
    1973                   do while pos('##MESSAGE_BODY_FILE##', _command) > 0
    1974                      parse var _command part1 '##MESSAGE_BODY_FILE##' part2
    1975                      _command = part1 || stream(body_file, 'c', 'query exists') || part2
    1976                   end
    1977                   do while pos('##FROM##', _command) > 0
    1978                      parse var _command part1 '##FROM##' part2
    1979                      _command = part1 || cfg.NNTP.s.from || part2
    1980                   end
    1981                   do while pos('##TO##', _command) > 0
    1982                      parse var _command part1 '##TO##' part2
    1983                      _command = part1 || cfg.NNTP.s.to || part2
    1984                   end
    1985                   rcx = ExecCmd(_command)
    1986                end
    1987             else
    1988                do
    1989                   cfg.NNTP.message_body = ''
    1990                   do while lines(body_file) > 0
    1991                      cfg.NNTP.message_body = cfg.NNTP.message_body || linein(body_file) || cfg.crlf
    1992                   end
    1993                   call stream body_file, 'c', 'close'
    1994                   rcx = SendNNTP(s)
    1995                end
    1996          else
    1997             rcx = -1 /* User aborted */
    1998       end
    1999    call SysFileDelete body_file
     2039                    say 'Enter the From email address. (followed by the ENTER key).'
     2040                    say '(You may want to disguise the address to avoid spam.)'
     2041                    cfg.NNTP.s.from = linein()
     2042                 end
     2043              when option = 'U' then
     2044                 do
     2045                    say 'Enter the UserID (followed by the ENTER key):'
     2046                    cfg.NNTP.s.userid = linein()
     2047                 end
     2048              when option = 'P' then
     2049                 do
     2050                    say 'Enter the Password (followed by the ENTER key):'
     2051                    cfg.NNTP.s.password = linein()
     2052                 end
     2053              otherwise
     2054                 nop
     2055           end
     2056        end
     2057        if option = 'C' then
     2058          do
     2059           if cfg.NNTP.s.command \= '' then
     2060              do
     2061                 say 'Using external command(s) to post to newsgroup(s)...'
     2062                 _command = cfg.NNTP.s.command
     2063                 do while pos('##HOST##', _command) > 0
     2064                    parse var _command part1 '##HOST##' part2
     2065                    _command = part1 || cfg.NNTP.s.host || part2
     2066                 end
     2067                 do while pos('##PORT##', _command) > 0
     2068                    parse var _command part1 '##PORT##' part2
     2069                    _command = part1 || cfg.NNTP.s.port || part2
     2070                 end
     2071                 do while pos('##USERID##', _command) > 0
     2072                    parse var _command part1 '##USERID##' part2
     2073                    _command = part1 || cfg.NNTP.s.userid || part2
     2074                 end
     2075                 do while pos('##PASSWORD##', _command) > 0
     2076                    parse var _command part1 '##PASSWORD##' part2
     2077                    _command = part1 || cfg.NNTP.s.password || part2
     2078                 end
     2079                 do while pos('##MESSAGE_BODY_FILE##', _command) > 0
     2080                    parse var _command part1 '##MESSAGE_BODY_FILE##' part2
     2081                    _command = part1 || stream(body_file, 'c', 'query exists') || part2
     2082                 end
     2083                 do while pos('##FROM##', _command) > 0
     2084                    parse var _command part1 '##FROM##' part2
     2085                    _command = part1 || cfg.NNTP.s.from || part2
     2086                 end
     2087                 do while pos('##TO##', _command) > 0
     2088                    parse var _command part1 '##TO##' part2
     2089                    _command = part1 || cfg.NNTP.s.to || part2
     2090                 end
     2091                 rcx = ExecCmd(_command)
     2092              end
     2093           else
     2094              do
     2095                 cfg.NNTP.message_body = ''
     2096                 do while lines(body_file) > 0
     2097                    cfg.NNTP.message_body = cfg.NNTP.message_body || linein(body_file) || cfg.crlf
     2098                 end
     2099                 call stream body_file, 'c', 'close'
     2100                 rcx = SendNNTP(s)
     2101              end
     2102            if rcx \= 0 then 'pause'
     2103          end
     2104        else
     2105           rcx = -1 /* User aborted */
     2106     end
     2107  call SysFileDelete body_file
    20002108return rcx
    20012109
     
    21242232            end
    21252233         call SockSoClose(socket)
     2234
    21262235      end
    21272236return rc
Note: See TracChangeset for help on using the changeset viewer.