Este codigo me funciona a mi
#include "FileIO.ch"
/* Estas pseudofunciones podrian ser utiles
#define FilePos(nHandle);
(FSeek(nHandle, 0, FS_RELATIVE))
#define FileBottom(nHandle);
(FSeek(nHandle, 0, 2))
#define FileTop(nHandle);
(FSeek(nHandle, 0))
*/
#define crlf chr(13)+chr(10)
#DEFINE ctrlz chr(26)
#define buffer 128
Function Main()
Local nHandle,aParams,datos:=space(buffer),i ,puertos:="",pto:=""
Local tel:="333" //numero de telefono al cual se envia el sms (en este caso 333 es para pedir saldo en telcel)
Local msg:="Saldo"
/*Ver puertos com disponibles, busca para 10 puertos*/
for i=1 to 10
pto:="Com"+alltrim(str(i))+":"
nHandle := FOpen( pto,2 )
If nHandle != F_ERROR
puertos+=pto+","
FClose( nHandle )
ELSE
EndIf
next i
? puertos
/* Abrimos el puerto de mi Nokia Internet Stick CS-10. (en mi computadora el

*/
nHandle := FOpen( "Com8:",2 )
If nHandle != F_ERROR
/* Establecemos los parámetros del puerto y salvamos los actuales. */
aParams := FDcb( nHandle, 9600, ; // Velocidad.
8 , ; // Bits.
0, ; // Sin paridad.
0 ) // 1 bit de parada.
/* Comando para ver la descripcion del modem. */
Fwrite(nHandle,"ATI"+crlf)
FCommit( nHandle ) //Vaciamos el buffer
sleep(500) //Esperamos al puerto
/* comando para enviar sms */
Fwrite(nHandle,"AT+CMGF=1"+crlf) //Establecemos modo texto
FCommit( nHandle )
sleep(500)
Fwrite(nHandle,"AT+CMGS="+Chr(34)+tel+Chr(34)+chr(13)+msg+ctrlz)
FCommit( nHandle )
sleep(500)
// fREAD(nHandle,@datos,buffer) // <<<<---- leemos un buffer de bytes con fread [forma 1]
datos=freadstr(nHandle,buffer) // o leemos un string
? alltrim(datos)
/* Restauramos los parámetros. */
aparams:=FDcb( nHandle, aParams[ 1 ], aParams[ 2 ], aParams[ 3 ], aParams[ 4 ] )
/* Cerramos el puerto. */
FClose( nHandle )
ELSE
? "No se pudo abrir el puerto"
EndIf
Return Nil
/*
Basado en la informacion del siguiente enlace
https://www.ajpdsoft.com/modules.php?na ... nt&sid=562y modificando el proyecto puertos que viene en C3
*/