mirror of
https://github.com/PDP-10/stacken.git
synced 2026-03-03 09:56:03 +00:00
381 lines
9.7 KiB
Plaintext
381 lines
9.7 KiB
Plaintext
! 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]
|