/* * Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved. * * This software may be freely used, copied, modified, and distributed * provided that the above copyright notice is preserved in all copies of the * software. */ /* -*-C-*- * * $Revision$ * $Date$ * * * msgbuild.h - utilities for assembling and interpreting ADP messages */ #ifndef angel_msgbuild_h #define angel_msgbuild_h #include <stdarg.h> #include "channels.h" /* * msgbuild * -------- * We use a "varargs" function to enable a description of how the * final message should look to be provided. We use a function rather * than in-line macros to keep the size of Angel small. * * The "buffer" pointer is the starting point from where the data will * be written. Note: If a NULL pointer is passed then no data will be * written, but the size information will be returned. This allows * code to call this routine with a NULL "buffer" pointer to ascertain * whether the pointer they are passing contains enough space for the * message being constructed. * * The "format" string should contain sequences of the following * tokens: * %w - insert 32bit word value * %p - insert 32bit target pointer value * %h - insert 16bit value * %b - insert 8bit byte value * * The return parameter is the final byte length of the data written. */ unsigned int msgbuild(unsigned char *buffer, const char *format, ...); unsigned int vmsgbuild(unsigned char *buffer, const char *format, va_list args); /*---------------------------------------------------------------------------*/ /* * msgsend * ------- * As for msgbuild except that it allocates a buffer, formats the data as * for msgbuild and transmits the packet. Returns 0 if successful non 0 if ot * fails. * Not for use on cooked channels e.g. debug channels only. */ extern int msgsend(ChannelID chan, const char *format, ...); /*---------------------------------------------------------------------------*/ /* * Unpack_message * -------------- * This basically does the opposite of msg_build, it takes a message, and * a scanf type format string (but much cut down functionality) and returns * the arguments in the message. */ extern unsigned int unpack_message(unsigned char *buffer, const char *format, ...); #endif /* ndef angel_msgbuild_h */ /* EOF msgbuild.h */