TCP/IP Programming Manual

END BLOCK;
?PUSHLIST,NOLIST,SOURCE $SYSTEM.SYSTEM.RTLDECS(convert)
?POPLIST
?PUSHLIST,NOLIST,SOURCE $SYSTEM.ZTCPIP.SOCKPROC( connect
? ,gethostbyname
? ,gethostbyaddr
? ,getservbyname
? ,get_errno
? ,inet_addr
? ,paramcapture
? ,recv
? ,send
? ,socket
? )
?POPLIST
?PUSHLIST,NOLIST,SOURCE $SYSTEM.SYSTEM.EXTDECS0(
? DEBUG
? FILE_CLOSE_
? )
?POPLIST
?PUSHLIST,NOLIST,SOURCE $SYSTEM.SYSTEM.CREDECS( cre_terminator_
? ,cre_log_message_
? )
?POPLIST
?PUSHLIST,NOLIST,SOURCE $SYSTEM.SYSTEM.CLUDECS( SMU_Param_GetText_
? SMU_Startup_GetText_
? )
?POPLIST
?PUSHLIST,NOLIST,SOURCE $SYSTEM.SYSTEM.RTLDECS( RTL_STRLENX_
? RTL_Int16_to_decimal_
? )
?POPLIST
?PUSHLIST,NOLIST,SOURCE $SYSTEM.SYSTEM.TALDECS(tal_cre_initializer_)
?POPLIST
-- Heap directive is necessary either in the MAIN program or in
-- the BIND step. If there is no HEAP directive, then the
-- C Language functions using the heap (malloc, calloc, realloc)
-- fails. The heap directive is put into this program for saftey in a
-- mixed language environment, it is NOT required to make use of the
-- Socket library, which makes no use of HEAP functions for memory
-- management.
?HEAP 20
?EXTENDSTACK 8
PROC term_msg(message);
STRING .EXT message;
BEGIN
INT error := 0;
IF (error := CRE_LOG_MESSAGE_(message:$INT(RTL_STRLENX_(message))))
THEN BEGIN
CALL DEBUG;
END;
END;
PROC PRINT_ERROR(prefix);
STRING .EXT prefix;
BEGIN
STRING .EXT work_buf[0:300];
STRING .EXT s := -1D;
work_buf ':=' prefix FOR $INT(RTL_STRLENX_(prefix))
& " Error = " -> @s;
CALL RTL_Int16_to_decimal_(get_errno,s,6,RTL^Leading^separate);
@s := @s + 6D;
s := 0; -- Null Termination.
CALL term_msg(work_buf);
END;
INT PROC term_read(input_buffer:buffer_length);
STRING .EXT input_buffer;
INT(32) buffer_length;
232 Sample Programs