You are browsing the archive for Programación.

Avatar of admin

by admin

[REXX] Conexión a serenity system puerto 25

08/12/2010 in Codigo Fuente


signal on Error
signal on FAILURE name Error
signal on Halt
signal on NOTREADY name Error
signal on NOVALUE name Error
signal on SYNTAX name Error

call Initialize

Main:

  /* Load socket functions */
  rc = RxFuncAdd('SockLoadFuncs','rxSock','SockLoadFuncs')

  rc = SockLoadFuncs(0)

  parse arg sz

  /* Preset */
  Gbl.Version = '0.10';
  Gbl.HostName = 'mail.earthlink.net';
  Gbl.HostName = 'Serenity-Systems.com';
  Gbl.HostName = 'mail.augustmail.com'
  Gbl.HostName = 'mail02.k50.net'

  Gbl.Port = 25                         /* service 25 = */

  call ScanArgs(sz)

  /* Do connect */

  rc = DoConnect()

  exit 0

/* end main */

/*=== DoConnect(): Send packet ===*/

DoConnect: procedure expose Gbl.

  achPkt = 'Hello'x2c('0d0a') 

  rc = SockGetHostByName(Gbl.HostName,'theHost.!')
  if rc \= 1 then
    call TCPFatal 'SockGetHostByName'

  say Gbl.HostName 'is' theHost.!addr

  sckt = SockSocket('AF_INET', 'SOCK_STREAM', 'IPPROTO_TCP')
  if sckt = -1 then
    call TCPFatal 'Socket'

  /* SockSetSockOpt is broken on object rexx so bypass if testing under OREXX */

  parse version szRexxVer .

  if szRexxVer == 'OBJREXX' then
    say 'Running OREXX.  Bypassing SockSetSockOpt'
  else do
    /* setsockopt(S, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt :$!"; */
    rc = SockSetSockOpt(sckt, 'SOL_SOCKET', 'SO_BROADCAST', 1)
    if rc = -1 then
      call TCPFatal 'SockSetSockOpt'
  end

  say 'Connecting'

  theHost.!family = 'AF_INET'
  theHost.!port = Gbl.Port

  rc = SockConnect(sckt, 'theHost.!')
  if rc = -1 then
    call TCPFatal 'SockConnect'

  say 'Receiving'

  rc = SockRecv(sckt, 'achRsp', 512)
  if rc = -1 then
    call TCPFatal 'SockRecv'

  say 'rc' rc
  say 'Received' achRsp

  say 'Sending packet'

  rc = SockSend(sckt, achPkt)
  if rc = -1 then
    call TCPFatal 'SockSend'

  say 'Closing'

  rc = SockClose(sckt)
  if rc = -1 then
    call TCPFatal 'SockClose'

  return 0

/* end DoConnect */

/*=== Initialize: Intialize globals ===*/

Initialize:

  call LoadFuncs 

  /* Set:
      Gbl.szCmdName

      Gbl.Opt.fDebug - default = 0
  */

  parse source . . Gbl.szCmdName
  Gbl.szCmdName = filespec('N', Gbl.szCmdName)
  c = pos('.', Gbl.szCmdName)
  if c > 1 then
    Gbl.szCmdName = ToLower(substr(Gbl.szCmdName, 1, c - 1))

  Gbl.Opt.fDebug = 0

  return

/* end Initialize */

/*=== ScanArgs(argLine): scan command line arguments and switches ===*/

ScanArgs: procedure expose Gbl.

  /* Evaluate arguments - override
     Return Gbl.Opt. and aArgs.
     fixme to do quotes
     Uses work stem Z
  */

  parse arg szRest
  szRest = strip(szRest)

  szSwCtl = 'fip'                       /* Switches that take args */
  szArg = ''
  szSw = ''
  fSwEnd = 0                            /* End of switches */

  do while szRest \== '' | szArg \== '' | szSw \== ''

    /* If arg buffer empty, refill */
    if szArg == '' then
      parse var szRest szArg szRest

    /* If switch buffer empty, refill */
    if szSw == '' then do
      if left(szArg, 1) == '-' then do
        if fSwEnd then
          call Usage 'switch '''szArg''' unexpected'
        else if szArg == '--' then
          fSwEnd = 1
        else
          szSw = substr(szArg, 2)
        parse var szRest szArg szRest
      end
    end

    /* If switch in progress */
    if szSw \== '' then do
      sz = left(szSw, 1)                /* Next switch */
      szSw = substr(szSw, 2)            /* Drop from pending */
      /* Check switch requires argument */
      if pos(sz, szSwCtl) \= 0 then do
        if szSw \== ''  then do
          szOpt = szSw
          szSw = ''
        end
        else if szArg \== '' & left(szArg, 1) \= '-' then do
          szOpt = szArg
          parse var szRest szArg szRest
        end
        else
          call Usage 'Switch' sz 'requires argument'
      end
      select
      when sz == '?' then
        signal UsageHelp
      when sz == 'd' then
        Gbl.Opt.fDebug = 1
      when sz == 'f' then
        Gbl.FileName = szOpt
      when sz == 'h' then
        signal UsageHelp
      when sz == 'i' then
        Gbl.HostName = szOpt
      when sz == 'p' then
        Gbl.Port = szOpt
      when sz == 'p' then
        Gbl.Port = szOpt
      when sz == 'v' then do
        say 'Serentity25' Gbl.Version
        exit
      end
      otherwise
        call Usage 'switch '''sz''' unexpected'
      end /* select */
    end /* if switch */

    /* If arg */
    else if szArg \== '' then do
      fSwEnd = 1                        /* No more switches */
      /* Got non switch arg */
      szArg = ''
    end

  end /* while szRest */

  return

/* end ScanArgs */

/*=== TCPFatal(szReq): Report TCPFatal Error... ===*/

TCPFatal:

  parse arg szReq

  call Fatal szReq 'failed, errno:' errno ', h_errno:' h_errno
  say 'Ooops'

  if sckt \= -1 then do
    say 'Closing socket' sckt
    call SockClose sckt
  end

  exit 253

/* end TCPFatal */

/*=== Usage(szMsg): Report Usage Error... ===*/

Usage:

  parse arg szMsg

  say szMsg
  say 'Usage:' Gbl.szCmdName 'hvp:i:f:'

  exit 255

/* end Usage */

/*=== Usage: Display help ===*/

UsageHelp:

  say
  say 'Usage:' Gbl.szCmdName 'hvp:i:f:'
  say
  say ' -h       This message'
  say ' -i IP    IP address (ddd.ddd.ddd.ddd, default 255.255.255.255)'
  say ' -p Port  Port address, default = 9'
  say ' -f File  File of hardware addresses xx:xx:xx:xx:xx:xx - no implemented'
  say ' -v       Report version'

  exit 255

/* end UsageHelp */

/*========================================================================== */
/*=== Standard functions - Delete unused.  Move modified above this mark === */
/*========================================================================== */

/*=== Error: Trap ERROR, FAILURE etc. conditions ===*/

Error:

  /*=== Returns szCondition or Exits ===*/

  say
  parse source . . szThisCmd
  say condition('C') 'signaled at' SIGL 'of' szThisCmd
  drop szThisCmd
  say 'Source =' sourceline(SIGL)
  call SysSleep 2
  if condition('I') == 'CALL' then do
    szCondition = condition('C')
    say 'Returning'
    return
  end
  else do
    trace '?A'
    say 'Exiting'
    call SysSleep 2
    exit 255
  end

/* end Error */

/*=== Fatal: Report fatal error and exit ===*/

Fatal:

  parse arg szMsg

  say
  say Gbl.szCmdName':' szMsg

  exit 254

/* end Fatal */

/*=== Halt: Trap HALT condition ===*/

Halt:

  /*=== Returns szCondition or Exits ===*/

  say
  parse source . . szThisCmd
  say condition('C') 'signaled at' SIGL 'of' szThisCmd
  drop szThisCmd
  say 'Source = ' sourceline(SIGL)
  call SysSleep 2
  if condition('I') == 'CALL' then do
    szCondition = condition('C')
    say 'Returning'
    return
  end
  else do
   say 'Exiting'
   exit
  end

/* end Halt */

/*=== LoadFuncs: Load fuctions ===*/

LoadFuncs:

  /* Add all Rexx functions */
  if RxFuncQuery('SysLoadFuncs') then do
    call RxFuncAdd 'SysLoadFuncs', 'REXXUTIL', 'SysLoadFuncs'
    if RESULT then do
      say 'Cannot load SysLoadFuncs'
      exit
    end
    call SysLoadFuncs
  end /* end do */

  return

/* end LoadFuncs */

/*=== ToLower(sz): Convert to lower case ===*/

ToLower: procedure

  parse arg sz

  return translate(sz, xrange('a', 'z'), xrange('A', 'Z'))

/* end ToLower */

/* The end */
Avatar of admin

by admin

Comunicado RInside 0.2.3

07/08/2010 in Software

Una nueva versión de 0.2.3 RInside está ahora en CRAN . RInside es un conjunto de clases de conveniencia que facilitan la incorporación de R en el interior de aplicaciones C + + y los programas. RInside funciona particularmente bien con RCPP y ahora depende de él.

Este es el primer lanzamiento desde marzo, cuando lanzamos 0.2.2 . Algunas cosas se iban agregando a la RCPP en el ínterin, y RInside se aprovecha de algunas de estas como se ilustra en varios de los ejemplos incluidos.

Más detalles y la lista de cambios están en el RInside página que también conduce