Google
 

Trailing-Edge - PDP-10 Archives - tops20-v7-ft-dist1-clock - 7-sources/mxnrsp.req
There are 6 other files named mxnrsp.req in the archive. Click here to see a list.
! NET:<PECKHAM.DEVELOPMENT>NMRSP.REQ.2 24-May-82 17:55:52, Edit by PECKHAM
!
!    Set proper default for ERROR DETAIL to -1.
!    Optimize string access for MCB.
!
! NET:<VOBA.NML.DEVELOPMENT>NMRSP.REQ.7 18-Feb-82 15:49:32, Edit by VOBA
!
!    Clean up code and update copyright date.
!
! NET:<DECNET20-V3P1.BASELEVEL-2.SOURCES>NMRSP.REQ.5 16-Oct-81 16:04:12, Edit by PECKHAM
!
!    Optimize various macros for MCB.
!
! NET:<DECNET20-V3P1.NML>NMRSP.REQ.2  8-Aug-81 11:56:02, Edit by GUNN
!
!    Change $RESPONSE macro to provide for error numbers in MCB.
!
! NET:<DECNET20-V3P1.NMU>NMRSP.REQ.3 24-Jun-81 08:53:13, Edit by JENNESS
!
!    Readability improvements.  Copyright page insertion.
!
! NET:<DECNET20-V3P1.BASELEVEL-2.SOURCES>NMRSP.REQ.2 12-Jun-81 15:26:07, Edit by GUNN
!
!    Made calls to NMU$TEXT be under $MCB conditional.
!
%title 'NMRSP -- NICE Response Generation Macros'

!                     COPYRIGHT (C) 1981, 1982 BY
!     DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS  01754
!
! THIS SOFTWARE IS FURNISHED  UNDER A LICENSE FOR USE ONLY ON A SINGLE
! COMPUTER  SYSTEM AND  MAY BE  COPIED ONLY WITH  THE INCLUSION OF THE
! ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE, OR ANY OTHER COPIES  THEREOF
! MAY NOT BE PROVIDED OR  OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON
! EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE
! TERMS.  TITLE TO AND  OWNERSHIP OF THE  SOFTWARE  SHALL AT ALL TIMES
! REMAIN IN DEC.
!
! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
! AND SHOULD  NOT BE CONSTRUED  AS A COMMITMENT  BY DIGITAL  EQUIPMENT
! CORPORATION.
!
! DEC ASSUMES  NO  RESPONSIBILITY  FOR  THE USE OR  RELIABILITY OF ITS
! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
!

!++
! Facility: LSG DECnet Network Management
!
! Abstract:
!
!        This set of macros is used to manipulate error strings used
!        in NICE processing.  The error string format is the same as
!        that used in a NICE response message.
!
! Environment: Bliss-36, Bliss-32 and Bliss-16.
!
! Author: Steven M. Jenness, Creation date: 18-Mar-81
!
!--
! macro: $CLEAR_RESPONSE
!
!		This macro clears the response string.
!
!    e.x. $CLEAR_RESPONSE (RESPONSE_POINTER);


macro
     $CLEAR_RESPONSE (PTR) =
         begin
         local STRPTR;

         STRPTR = PTR;
         PUTB (0, STRPTR);              ! Clear response code
%if $MCB
%then
         ch$wchar (-1, .STRPTR);        ! Clear error detail
         ch$wchar_a (ch$rchar_a (STRPTR), STRPTR);
%else
         PUTB (-1, STRPTR);             ! Clear error detail
         PUTB (-1, STRPTR);
%fi
         PUTB (0, STRPTR);              ! Clear text length
         PUTB (0, STRPTR);
         end %;


! macro: $RESPONSE
!
!		This macro puts the appropriate values
!		into the fields in a error response string.
!
!	$RESPONSE (PTR, CODE, DET [,TXT] {,PRM ...});
!
!	PTR	Byte pointer to error string buffer
!	CODE	Nice return code
!	DET	Nice error detail
!	TXT	Error text string
!	PRM	Parameters to fill in text string
!
!    e.x.    $RESPONSE (.BUFPTR, NICE$_FOE, 1, "No such device");


macro
     $RESPONSE (PTR, CODE, DET, TXT) =
         begin
         local STRPTR;

         STRPTR = PTR;
         PUTB (CODE, STRPTR);

         %if not %NULL (DET)
         %then %if %ctce (DET)
               %then
                    PUTB ((DET and %o'377'), STRPTR);
                    PUTB ((DET^-8 and %o'377'), STRPTR);
               %else
                    begin
                    local DETAIL;

                    DETAIL = DET;
                    PUTW (DETAIL, STRPTR);
                    end;
               %fi
         %else
%if $MCB
%then
               ch$wchar (-1, .STRPTR);
               ch$wchar_a (ch$rchar_a (STRPTR), STRPTR);
%else
               PUTB (-1, STRPTR);
               PUTB (-1, STRPTR);
%fi
         %fi

         %if not %null (TXT)
         %then %if not $MCB
               %then
                    begin
                    local TXTPTR, CNT;
                    external routine NMU$TEXT;

                    TXTPTR = .STRPTR;
                    PUTB (0, STRPTR);
                    CNT = $NMU$TEXT (STRPTR, 72, %string (TXT, '%N')
                                     %if %length gtr 4
                                     %then , %remaining %fi);
                    PUTB (.CNT, TXTPTR);
                    end;
              %fi
	%else PUTB (0, STRPTR);
	%fi

	ch$diff (.STRPTR, PTR)
	end %;


! macro: $RESPONSE_X
!
!		This macro puts the appropriate values
!		into the fields in a error response string.
!
!	$RESPONSE_X (PTR, CODE, DET [,TXT,ERR] {,PRM ...});
!
!	PTR	Byte pointer to error string buffer
!	CODE	NICE return code
!	DET	NICE error detail
!	TXT	Error text string
!       ERR     Error text number for MCB environment
!	PRM	Parameters to fill in text string
!
!    e.x.    $RESPONSE_X (.BUFPTR, NICE$_FOE, 1, "No such device", 101);


macro
     $RESPONSE_X (PTR, CODE, DET, TXT, ERR) =
         begin
         local STRPTR;

         STRPTR = PTR;

         PUTB (CODE, STRPTR);

         %if not %NULL (DET)
         %then %if %ctce (DET)
               %then
                    PUTB ((DET and %o'377'), STRPTR);
                    PUTB ((DET^-8 and %o'377'), STRPTR);
               %else
                    begin
                    local DETAIL;

                    DETAIL = DET;
                    PUTW (DETAIL, STRPTR);
                    end;
               %fi
         %else
%if $MCB
%then
               ch$wchar (-1, .STRPTR);
               ch$wchar_a (ch$rchar_a (STRPTR), STRPTR);
%else
               PUTB (-1, STRPTR);
               PUTB (-1, STRPTR);
%fi
         %fi

         %if not %null (TXT)
         %then %if not $MCB
               %then
                    begin
                    local TXTPTR, CNT;
                    external routine NMU$TEXT;

                    TXTPTR = .STRPTR;
                    PUTB (0, STRPTR);
                    CNT = $NMU$TEXT (STRPTR, 72, %string (TXT, '%N')
                                     %if %length gtr 4
                                     %then , %remaining %fi);
                    PUTB (.CNT, TXTPTR);
                    end;
               %else
                    begin
                    linkage CBDSG = JSR (register=0,register=1,register=2;
                                         register=0) : nopreserve (1,2);
                    external routine $CBDSG : CBDSG novalue;

                    PUTB (5, STRPTR);   ! 5 digit ASCII signed decimal number
                    $CBDSG (.STRPTR,
                            %if not %null (ERR)
                            %then ERR %else 99999 %fi,
                            1;
                            STRPTR);
                    end;
               %fi
        %else PUTB (0, STRPTR);
	%fi

	ch$diff (.STRPTR, PTR)
	end %;


! macro: $RESPONSE_CODE
!
!		This macro puts the reponse code into the
!		specified response string.
!
!    e.x.    $RESPONSE_CODE (RESPONSE_POINTER, NICE$_UFO);

macro
     $RESPONSE_CODE (PTR, CODE) =
         begin
         ch$wchar (CODE, PTR);
         end %;


! macro: $RESPONSE_DETAIL
!
!		This macro puts the error detail into the
!		specified response string.
!
!    e.x.    $RESPONSE_DETAIL (RESPONSE_POINTER, 11);


macro
     $RESPONSE_DETAIL (PTR, DET) =
         begin
         local STRPTR;

         STRPTR = ch$plus (PTR, 1);

         %if %ctce (DET)
         %then
              PUTB ((DET and %o'377'), STRPTR);
              PUTB ((DET^-8 and %o'377'), STRPTR);
         %else
              begin
              local DETAIL;

              DETAIL = DET;
              PUTW (DETAIL, STRPTR);
              end;
         %fi
         end %;


! macro: $RESPONSE_TEXT
!
!		This macro puts the error text into
!		the specified response string.  The
!		format of the arguments is the same as
!		as that taken by $NMU$TEXT.
!
!    e.x.    $RESPONSE_TEXT (RESPONSE_POINTER, 'Bad error:', .WHY);


macro
     $RESPONSE_TEXT (PTR, TXT) =
         %if $MCB
         %then
              begin
              local STRPTR, TXTPTR;

              TXTPTR = ch$plus (PTR, 3);
              STRPTR = ch$plus (.TXTPTR, 1);
              PUTB ($NMU$TEXT (STRPTR, 72, %string (TXT, '%N')
                               %if %length gtr 2
                               %then , %remaining %fi),
                    TXTPTR);
              end
         %fi %;


! macro: $RESPONSE_LENGTH
!
!		This macro returns the length (in bytes) of
!		the response string.  It assumes that an response
!		code, error detail and counted text string
!		exist.
!
!    e.x.    LENGTH = $RESPONSE_LENGTH (RESPONSE_POINTER);


macro
     $RESPONSE_LENGTH (PTR) =
         begin
         local STRPTR;

         STRPTR = ch$plus (PTR, 3);
         4 + GETB (STRPTR)
         end %;


! macro: $GET_CODE
!
!		This macro fetches the response code field in the
!		specified error string.
!
!    e.x.    CODE = $GET_CODE (RESPONSE_POINTER);


macro
     $GET_CODE (PTR) =
         begin
         ch$rchar (PTR)
         end %;


! macro: $GET_DETAIL
!
!		This macro gets the error detail from the
!		specified response string.
!
!    e.x.    DETAIL = $GET_DETAIL (RESPONSE_POINTER);


macro
     $GET_DETAIL (PTR) =
         GETW_NA (ch$plus (PTR, 1)) %;


! macro: $GET_TEXT
!
!		This macro gets a pointer to the text field
!		in specified the response string.
!
!    e.x.    TEXT_PTR = $GET_TEXT (RESPONSE_POINTER);
!	     TEXT_LENGTH = GETB (TEXT_PTR);


macro
     $GET_TEXT (PTR) =
         ch$plus (PTR, 3)) %;
%title ''
%sbttl ''

!
! [End of NMRSP.REQ]