;
; FILE UserRqLabel.asm 
;
; COPYRIGHT 1988 CONVERGENT TECHNOLOGIES, INC.
; ALL RIGHTS RESERVED
;
;
;There are two ways for an application program to access a server.
;
;        1.  It can issue the Request primitive and then issue either a
;            the Check primitive or the Wait primitive.
;            This method requires that the application allocate space for
;            a request block, fill in the fields, and know
;            the request code of the service.  If this is the way you wish
;            to access your server, then you do not need to use this file.
;
;        2.  If the request code starts with an even hexadecimal digit
;            (e.g. 0CxxxH or 0ExxxH) it can use the procedural interface.
;            In this method, the application simply makes a procedure call.
;            The OS allocates space on the user's stack for a
;            request block, determines the proper request code,
;            fills in the fields using the parameters supplied by the user
;            along with derived information, calls Request, then calls Wait.
;            Note that unlike method 1, this method does not allow the
;            application program to run while the server is processing the
;            request.  This is referred to as a synchronous interface.
;
;
;Method 1 is completely sufficient for accessing a server.  Method 2 is
;nothing more than a more convienient way to obtain the same services.  Most
;userwritten servers do not use method 2.  If, however, you have a server for
;which you would like to provide a procedural interface, this module is
;provided to make that job easier.  But note that only request codes which
;start with an even hexadecimal digit can be made to have a procedural ;interface and thus make use of this file.
;
;
;The steps in creating a procedural interface to a server are as follows:
;
;        1.  Decide on procedure names for the requests which will be served
;            by your new server.
;            For this example, we'll call them MyFunction1 and
;            MyFunction2.  Moreover, assume the parameters are of the form:
;
;                    MyFunction1(pointer, word, returned pointer, word)
;                    MyFunction2(pointer, word)
;
;        2.  Choose a request code(s) within the range available for
;            customer use.  There are two ranges:
;
;                The first range (0C000h0FFE0h) is available to
;                all users.  This means that if you pick
;                request codes in this range, there is no guarantee that other
;                users will not choose the same request code.  Two such
;                servers could obviously never run on the same machine.  So,
;                if you expect to run your server along with servers written
;                by other customers, you can avoid conficts by getting your
;                request codes out of the second range.
;
;                The second range (06000h07FFFh) are registered by
;                Convergent.  CT Technical Support maintains the
;                registry by assigning codes in this range only upon request.
;                So in order to use codes in this range, you must contact
;                CT Technical Support to arrange to have codes reserved for
;                your exclusive use.  The codes given to you will
;                be given out to no one else, thus preventing any conflict.
;
;                There are two ways to receive such codes.  If you are
;                connected to the CTMail network, send a Mail message to
;                REQUESTTS2 specifying your name, address, and how many codes
;                you require.  Codes will be registered in your company's name
;                and you will receive an EMail response to inform you of which
;                codes were assigned to you.  Alternatively, you may call CT
;                Technical support at (800) 8588255 and explain that you wish
;                to register a CTOS request code.  In a return call, you will
;                be informed of the codes which have been registered in your
;                name.  Remember to specify whether you want a request code
;                beginning with an even or odd hexadecimal digit.
;
;        3.  Use RequestTemplate.txt to create a new file Request.?.txt
;            which will associate the chosen request codes with the parameter
;            lists.
;
;    :RequestCode:0C000h
;    :RequestName:MyFunction1
;    :Version:1    
;    :LclSvcCode:0000h
;    :ServiceExch:exchInstalledLocal
;    :sCntInfo:0
;    :nReqPbCb:1    
;    :nRespPbcb:1
;    :Params:p(12),w(16),p(18),w(22)
;    :NetRouting:NoRouting
;    :SrpRouting:NoRouting
;
;    :RequestCode:0C001h
;    :RequestName:MyFunction2
;    :Version:1    
;    :LclSvcCode:0000h
;    :ServiceExch:exchInstalledLocal
;    :sCntInfo:0
;    :nReqPbCb:1    
;    :nRespPbcb:0
;    :Params:p(12),w(16)
;    :NetRouting:NoRouting
;    :SrpRouting:NoRouting
;
;        4.  Write the code which will implement MyFunction1 and MyFunction2.
;            This code should have an initialization section which is
;            responsible for installing.  This code should make the following
;            call for each request code:
;
;                erc = ServeRq(XXXX, exch)
;
;            This notifies CTOS of the location of the code which will
;            implement the XXXXth request code.  The initialization
;            code should then call ConvertToSys and wait on an exchange set up
;            for deinstallation.
;
;        5.  Create a command called InstallMyServer to install the server.
;
;For an application program to actually make use of this new server via a
;procedural interface, the following steps should be taken:
;
;        1.  In the source of the application, call MyFunction1 and
;            MyFunction2, both declared EXTERNAL.
;
;        2.  Edit this file by adding a macro call of the following form:
;
'               RqName(XXXXXX, MyFunction1)
'               RqName(XXXXXX, MyFunction2)
;                ^
;                \
;                |
;                |
;             Start in column 1
;
;            These macro calls cause ABSOLUTE PUBLIC symbols of MyFunction1
;            and MyFunction2 to be created.
;            Their values will be resolved at load time to the correct
;            addresses of the procedural interface for MyFunction1 and
;            MyFunction2.
;
;
;        3.  Link the application program modules with the module created by
;            assembling this module.
;
;        4.  Run InstallMyServer
;
;        5.  Run your application program.
;
;




;
; The syntax of the macro is:
;
'    RqName(Request code, routine name)
;
;
$INCLUDE([Sys]<Sys>RqLabl.mdf)


;***************************************************************
;  EXAMPLE                                                     *
;                                                              *
'          RqName(815Fh, ReScheduleMarkedQueueEntry)       *
;***************************************************************
;
; **** Put RqName macros below this line



;
; The following are for backwards compatability with object
; modules compiled using old names for CTOS procedures.  The
; syntax is:
;
'        Same(RqName, Alias)
;
; You will not need to worry about this unless you are replacing
; an existing request code which was known by two names.
;
;***************************************************************
;  EXAMPLE                                                     *
;                                                              *
'     Same(ReScheduleMarkedQueueEntry, PauseSpooler)     *
;                                                              *
;                                                              *
;***************************************************************
;
; **** Put Same macros below this line


END
nficts by getting your
;                request codes out of the second range.
;
;                The second range (06000h07FFFh) are registered by
;                Convergent.  CT Technical Support maintains the
;       