ASMB,R,Q,C,Z
      IFZ 
      HED #DSSM 91750-1X006 REV.2013 * (C) HEWLETT-PACKARD CO. 1980 
      NAM #DSSM,7 91750-1X006 REV.2013 800519 RTE-IVB W/S.M.
      XIF 
      IFN 
      HED #DSSM 91750-1X007 REV.2013 * (C) HEWLETT-PACKARD CO. 1980 
      NAM #DSSM,7 91750-1X007 REV.2013 800519 ALL, W/O S.M. 
      XIF 
* 
* "Z" OPTION FOR SESSION MONITOR NODE, "N" OPTION FOR NON-SESSION NODE. 
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS      *
*  * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY.   *
******************************************************************
      SPC 1 
      ENT #DSSM 
* 
      EXT PRNT#,$DSCS 
      IFZ 
      EXT READ#,INBF#,PRNL#,EXFR#,ABRT# 
      EXT .UACT,.DRCT,#DFUN,#PASS 
      EXT .MVW,.LBT,.CBT,.MBT,.SBT
      XIF 
* 
* NAME:   #DSSM 
* SOURCE: 91750-18006 
* RELOC:  PART OF 91750-12014 ("Z"), -12015 ("N") 
* PGMR:   JIM HARTSELL
* 
* SUBROUTINES TO PERFORM OPTIONAL REMOTE SESSION MODIFICATIONS FOR
* THE DS/1000 DSMOD PROGRAM.
* 
*  CALLING SEQUENCES: 
* 
* 
*  PROCESSOR FOR "/U" COMMAND.
* 
*        CLA
*        JSB #DSSM
* 
* 
*  PROCESSOR FOR "/P" COMMAND.
* 
*        CLA,INA
*        JSB #DSSM
      SKP 
      SUP 
PRINT EQU PRNT# 
      IFZ 
READ  EQU READ# 
INBUF EQU INBF# 
PRNTL EQU PRNL# 
ERXFR EQU EXFR# 
ABORT EQU ABRT# 
      XIF 
A     EQU 0 
B     EQU 1 
* 
* CHECK WHETHER THIS IS A SESSION MONITOR NODE. 
* 
#DSSM NOP           ENTRY.
      STA FCODE     SAVE FUNCTION CODE. 
* 
      LDA $DSCS     IF NO SESSION MONITOR 
      SSA             AT THIS NODE, 
      JMP #DSSM,I     RETURN TO CALLER. 
* 
      IFN 
      JSB PRINT     ISSUE "NOT AVAILABLE" MSG IF
      DEF WARN        NON-SESSION MODULE WAS LOADED,
      JMP #DSSM,I       AND IGNORE REQUEST. 
      XIF 
* 
      IFZ 
      JSB .DRCT       GET DIRECT EXTERNAL ADDRESSES.
      DEF INBUF 
      STA DINBF 
      JSB .DRCT 
      DEF #DFUN 
      STA DFUN
      JSB .DRCT 
      DEF #PASS 
      STA PASS
* 
* CHECK #DSSM FUNCTION REQUESTED. 
* 
      LDA FCODE 
      SZA,RSS 
      JMP PR/U
      CPA B1
      JMP PR/P
      JMP #DSSM,I 
* 
* PROCESS "/U" COMMAND - CHANGE DEFAULT SESSION USER NAME.
* 
PR/U  LDA DFUN      MOVE CURRENT NAME 
      LDB SMSG0       TO DISPLAY BUFFER.
      ADB D9
      JSB .MVW
      DEF D11 
      NOP 
* 
      JSB PRINT     DISPLAY CURRENT NAME. 
      DEF SMSG0 
* 
RDNAM JSB READ      ASK THE USER TO "ENTER NEW
      DEF SMSG1       DEFAULT SESSION USER-NAME". 
      CPA B2        IS THE RESPONSE ASCII?
      JMP GTLEN     YES.
ERNAM JSB ERXFR     NO. INFORM USER OF ERROR
      DEF IVRES       AND TRY AGAIN.
      JMP RDNAM 
* 
GTLEN CPB /E        GET OUT 
      JMP #DSSM,I     IF REQUESTED. 
* 
      LDA PRNTL     GET # CHARS INPUT.
      INA           COMPUTE # WORDS.
      ARS 
      STA TEMP      SAVE FOR MOVE.
      ADA N12       IF GREATER THAN 11, 
      SSA,RSS         OUTPUT ERROR MSG
      JMP ERNAM         AND TRY AGAIN.
* 
      LDA PRNTL     VERIFY WHETHER VALID NAME.
      CMA,INA 
      LDB DINBF 
* 
      JSB .UACT 
      DEF BUFR
* 
      SSA 
      JMP ERNAM     INVALID USER NAME.
* 
      LDB BLNKS     BLANK OUT CURRENT NAME. 
      LDA DFUN
      STB A,I 
      LDB A 
      INB 
      JSB .MVW
      DEF D10 
      NOP 
* 
      LDA DINBF     MOVE NEW NAME TO #DFUN (IN RES).
      LDB DFUN
      JSB .MVW
      DEF TEMP
      NOP 
* 
      JMP #DSSM,I   RETURN TO DSMOD.
     SKP
* 
* PROCESS "/P" COMMAND - CHANGE PASSWORD FOR NON-SESSION ACCESS.
* 
PR/P  LDA N10       FIND # CHAR IN CURRENT PASSWORD.
      STA TEMP
      CLA 
      STA CNTR      INIT CHARACTER COUNTER. 
      LDB PASS
      RBL           BYTE ADDR OF #PASS (IN RES).
COUNT JSB .LBT      GET NEXT BYTE IN #PASS. 
      CPA BLANK     BLANK?
      JMP ASKCR     YES.
      ISZ CNTR      NO. COUNT # CHAR IN #PASS,
      ISZ TEMP          CHECK IF LIMIT REACHED, 
      JMP COUNT         AND GO TRY NEXT CHARACTER.
* 
ASKCR LDA CNTR      IF ODD NUMBER OF CHARACTERS,
      SLA             MAKE COUNT EVEN TO ACCOUNT
      ISZ CNTR        FOR TRAILING BLANK ON INPUT.
      SZA,RSS       IF NO CURRENT PASSWORD, 
      JMP ASKNW       DON'T ASK USER FOR IT.
* 
      JSB READ      ASK THE USER TO "ENTER CURRENT
      DEF SMSG2       PASSWORD FOR NON-SESSION ACCESS". 
      CPA B2        IS THE RESPONSE ASCII?
      JMP CMPAR     YES.
ERCUR JSB PRINT     NO. INFORM USER 
      DEF IVRES        AND
      JMP ABORT        ** ABORT DSMOD **
* 
CMPAR LDA PRNTL     CHECK # CHAR INPUT AGAINST
      CPA CNTR        CURRENT PASSWORD LENGTH.
      RSS 
      JMP ERCUR     NO MATCH.  ERROR. 
      LDA DINBF     OK.  COMPARE PASSWORD.
      RAL 
      LDB PASS
      RBL 
      JSB .CBT
      DEF CNTR
      NOP 
      JMP ASKNW     INPUT MATCHES CURRENT PASSWORD. 
      JMP ERCUR     MISMATCH. 
      JMP ERCUR     MISMATCH. 
* 
ASKNW JSB READ      ASK THE USER TO "ENTER NEW
      DEF SMSG3       PASSWORD FOR NON-SESSION ACCESS". 
      CPA B2        IS THE RESPONSE ASCII?
      JMP CKLEN     YES--GO PROCESS.
ERNEW JSB ERXFR     NO. INFORM USER 
      DEF IVRES        AND
      JMP ASKNW        TRY AGAIN. 
* 
CKLEN CLA 
      CPB /D        IF USER WANTS "NO PASSWORD",
      STA PRNTL       SET INPUT LENGTH = ZERO.
* 
      LDA PRNTL     GET # BYTES INPUT.
      ADA N11       IF GREATER THAN 10, 
      SSA,RSS         INFORM USER 
      JMP ERNEW       AND TRY AGAIN.
* 
      LDA DINBF     MOVE NEW PASSWORD TO #PASS. 
      RAL 
      LDB PASS
      RBL 
      JSB .MBT
      DEF PRNTL 
      NOP           (B) = ADDR OF NEXT BYTE IN #PASS. 
* 
      LDA PRNTL     NEED TO PAD OUT WITH BLANKS?
      CMA,INA 
      ADA D10       # BYTES TO PAD. 
      SSA,RSS 
      SZA,RSS 
      JMP #DSSM,I   NO PADDING NEEDED. RETURN.
      ADA N1        (A) = + #BYTES -1 REMAINING 
      STA TEMP         IN #PASS.
      SZA,RSS 
      JMP #DSSM,I 
      LDA  BLANK
      JSB .SBT
      LDA B         (B) = ADDR OF NEXT BYTE IN #PASS. 
      ADA N1
      JSB .MBT      PAD IT OUT. 
      DEF TEMP
      NOP 
* 
      JMP #DSSM,I   RETURN TO DSMOD.
      SKP 
* 
* CONSTANTS AND STORAGE.
* 
B1    OCT 1 
B2    OCT 2 
D9    DEC 9 
D10   DEC 10
D11   DEC 11
N1    DEC -1
N10   DEC -10 
N11   DEC -11 
N12   DEC -12 
BLANK OCT 40
BLNKS ASC 1,
/D    ASC 1,/D
/E    ASC 1,/E
BUFR  BSS 128 
TEMP  NOP 
CNTR  NOP 
DINBF NOP           RESOLVED "DEF INBUF". 
DFUN  NOP           RESOLVED "DEF #DFUN". 
PASS  NOP           RESOLVED "DEF #PASS". 
* 
IVRES DEF *+2 
      DEF D9
      ASC 9, INVALID RESPONSE!
* 
SMSG0 DEF *+2 
      DEF D20 
      ASC 20, CURRENT NAME =   UUUUUUUUUU.GGGGGGGGGG
* 
SMSG1 DEF *+2 
      DEF D20 
      ASC 20, ENTER NEW DEFAULT SESSION USER-NAME:  _      *
* 
SMSG2 DEF *+2 
      DEF D20 
      ASC 20, CURRENT PASSWORD FOR NON-SESSION?     _      *
* 
SMSG3 DEF *+2 
      DEF D20 
      ASC 20, ENTER NEW PASSWORD FOR NON-SESSION    _      *
      XIF 
* 
D20   DEC 20
FCODE NOP 
* 
      IFN 
WARN  DEF *+2 
      DEF D20 
      ASC 20, NOT AVAILABLE IN NON-SESSION VERSION! 
      XIF 
* 
      BSS 0         SIZE OF #DSSM.
* 
      END 
                                                                                                    