ASMB,R,L,C
* 
*     NAME: DSVCP 
*     SOURCE: 91750-18102 
*     RELOC:  91750-16102 
*     PGRMR:  D. L. M.
* 
* 
****************************************************************
* COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS RESERVED  *
* NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, REPRODUCED, OR   *
* TRANSLATED INTO ANOTHER PROGRAM LANGUAGE WITHOUT THE PRIOR   *
* WRITTEN CONSENT OF HEWLETT-PACKARD CO.                       *
****************************************************************
* 
      HED DS/1000 L SERIES VCP MASTER PROGRAM 
*************************************** 
*                                     * 
* DSVCP: THE DS/L SERIES VCP INTERFACE* 
*                                     * 
*************************************** 
* 
* 
      NAM DSVCP,19,90 91750-16102 REV.2013 800610 M,4B,L
      ENT DSVCP 
      EXT RMPAR,#NRVS,LOGLU,EXEC,IFBRK,REIO,#NMSC,PARSE 
      EXT KCVT,NAMR,CREAT,WRITF,FTIME,CLOSE,CNUMD,.CBT
      EXT REIO,XLUEX
************************************
*                                  *
*   PROGRAM INITIALIZATION         *
*                                  *
************************************
A     EQU 0 
B     EQU 1 
      SUP PRESS LISTING 
DSVCP JSB RMPAR     GET PARAMETERS
      DEF DSVP1     RETURN
      DEF NODE      ADDRESS OF PARAMETER ARRAY
DSVP1 EQU * 
* 
*  FUTURE ACCESS TO REMOTE NODES SHOULD BE INSERTED HERE
* 
* 
      CCB           STORE A MINUS ONE 
      STB HSTND       SAVE HOST NODE
      JSB LOGLU     GET TERMINAL LU 
      DEF LLU       RETURN
      DEF SCR       SCRATCH AREA
LLU   EQU * 
* 
      SZA,RSS       IS IT ZERO ?? 
      INA           YES SO PUT A ONE AND . . .
      STA #TLU      SAVE TERMINAL LU IN AREA
      ADA =B400     MAKE THE ECHO CNTRL WORD
      STA TRMIS     AND SAVE
      ADA =B1400    MAKE THE OUTPUT CNTRL WORD
      STA TRMOC     AND SAVE
* 
      LDA NODE+1    GET DU FLAG 
      STA DUFL        AND SAVE
* 
* 
*  VERIFY THAT DS NODE IS LEGAL 
* 
* 
FNDDS JSB #NRVS     CHECK FOR LEGAL NETWORK LU
      DEF #N1 
      DEF NODE      NODE NUMBER ENTERED 
      DEF SCR       SCRATCH AREA
      DEF SCR+1       FOR UNNEEDED INFORMATION
      DEF NBR       NEIGHBOR FLAG 
      DEF #NLU      LU NUMBER OF NODE 
#N1   EQU * 
* 
      JMP NONDE     ERROR - POSSIBLE NO NODE
* 
*   VERIFY THE LU 
* 
      LDB NODE      GET THE ORIGINAL PARM 
      CMB,INB       CONVERT IT
      SSB           IS IT POSITIVE? 
      JMP #NDE      NO - NODE NUMBER
      CPA B         ARE THE TWO LU'S THE SAME?
      JMP FOUND     YES - CONTINUE
      LDA B         NO - SAVE ORIGINAL LU 
      JMP NNDE1     AND INDICATE FOUND
#NDE  LDB NODE      GET THE NODE NUMBER 
      STB #NWLU       AND SAVE
      CMA,INA       NEGATE THE LU 
      STA NODE      AND RESTORE 
* 
      JSB #NRVS     CHECK IF LU RETURNS SAME NODE 
      DEF #N2       RETURN
      DEF NODE      NODE NUMBER 
      DEF SCR       SCRATCH AREAS 
      DEF SCR+1 
      DEF NBR       NEIGHBOR FLAG 
      DEF #NLU      NODE NUMBER 
* 
#N2   JMP ERR       NOT FOUND 
      LDB #NWLU     GET THE NODE #
      CPB #NLU      IS IT CORRECT?
      RSS 
      JMP ERR       NO - BAD
* 
      SKP 
* 
*  LU FOUND.  GENERATE CONTROL WORDS AND CHECK DRIVER 
* 
FOUND LDB NBR       GET NEIGHBOR FLAG 
      SZB,RSS       IS IT A NEIGHBOR (ADJACENT?)
      JMP ERR       NO - ERROR
      STA #NWLU      SAVE NETWORK LU NUMBER 
      IOR =B100000  SET SYSTEM BIT FOR XLUEX CALLS
      STA SNDSC     STORE 
      STA SBRFC        CONTROL
      STA SVCPM          WORDS
      STA SDSMC             FOR CALLS 
      STA STAT
      INA           MAKE THE READ CONTROL WORD
      STA RVCPM       AND SAVE
* 
* CHECK FOR CORRECT DRIVER TYPE (66)
* 
      JSB XLUEX     CHECK FOR CORRECT DVR TYPE
      DEF *+4 
      DEF .13       STATUS
      DEF STAT
      DEF SCR       FIRST WORD
* 
      LDA SCR       GET STATUS
      ALF,ALF       MOVE TO UPPER BYTE
      AND =B77      GET DRIVER TYPE 
      CPA =B66      IS DS DVR?
      RSS 
      JMP ERR       NO - ILLEGAL LU 
* 
      JSB KCVT      LU NUMBER TO ASCII
      DEF *+2 
      DEF #NWLU     LU NUMBER 
      STA LU# 
      LDA #NLU      GET LU NUMBER 
      CPA =A??      IS IT KNOWN?? 
      JMP ZZ        NO
      JSB CNUMD     YES - CONVERT IT TO ASCII 
      DEF *+3 
      DEF #NLU      NODE NUMBER 
      DEF NODE# 
      JMP START     START 
ZZ    STA NODE# 
      STA NODE#+1 
      STA NODE#+2 
      SKP 
* 
* PRINT START MESSAGE 
* 
START JSB EXEC      WRITE PROMPT TO TERMINAL
      DEF *+5 
      DEF NAB2      WRITE 
      DEF TRMOC     TERMINAL OUTPUT CONTROL 
      DEF PRMSG     PROMPT
      DEF PRMSL     AND LENGTH
      NOP 
* 
      JSB EXEC      NOW WRITE LU AND NODE NUMBER
      DEF *+5 
      DEF NAB2      WRITE 
      DEF #TLU      TERMINAL
      DEF ND&LU     MESSAGE 
      DEF N&LLN     AND LENGTH
      NOP 
**
      JSB XLUEX     SET NON DS MODE 
      DEF RDS       RETURN
      DEF NAB3      NO-ABORT CONTROL
      DEF SNDSC     SET FRONT PANEL WAIT
      DEF SECUR     SECURITY CODE 
RDS   EQU * 
* 
      JMP RTEER     RTE ERROR 
      JSB CKNST     GO CHECK NETWORK STATUS 
* 
      LDA DUFL      GET FLAG AGAIN
      CPA =ADU      IS IT A DUMP? 
      JMP DUMP      YES GO DO DUMP
      SKP 
****************************************************
*                                                  *
*  MAIN BODY OF PROGRAM                            *
*                                                  *
****************************************************
* 
PRMPT JSB EXEC      SEND PROMPT TO SCREEN 
      DEF PR1       RETURN
      DEF NAB2
      DEF TRMOC     TERMINAL OUTPUT CONTROL 
      DEF PRMSG     ADDRESS OF PROMPT 
      DEF PRMSL       LENGTH OF PROMPT
PR1   NOP           NO - ABORT
* 
*   NOW READ A STRING FROM THE TERMINAL 
* 
CMMD  JSB RDSTR      READ AN ASCII STRING FROM TERMINAL 
      LDA INBUF     GET FIRST WORD
      CPA BRADR,I   IS IT A BREAK?? 
      JMP BREAK     YES GO DO IT
      CPA EXADR,I   ALL DONE??
      JMP EXIT      YES - CLEAN UP OUR ACT
      CPA RDADR,I   IS IT A READ? 
      JMP READ1     YES 
      CPA WTADR,I   IS IT A WAIT FOR INPUT??
      JMP WAIT      YES 
      AND =B177400  NOT RECOGNIZED - IS IT A COMMAND? 
      CPA .\        FIRST CHR A \?? 
      JMP BDCMD     YES - BAD COMMAND 
      SKP 
* 
*  MUST BE A MESSAGE FOR VCP. SEND IT!! 
* 
* 
SDBUF STB MLEN      SAVE CHARACTER COUNT
      CLE,SLB,ERB   DIVIDE BY TWO WHILE CHECKING IF EVEN
      JMP ODD       MUST BE ODD 
      ADB ADBUF     ADD THE BUFFER ADDRESS TO GET LAST WORD 
      LDA =B6400    PUT A CR-NU INTO LAST WORD
      JMP SB1       AND GO STORE IT 
* 
ODD   ADB ADBUF     ADD BUFFER ADDRESS
      LDA B,I       GET LAST WORD 
      AND =B177400  CLEAR LOWER BYTE
      IOR =B15      LOAD CR INTO IT 
SB1   STA B,I       RESTORE TO BUFFER 
      LDA MLEN      GET LENGTH AGAIN
      CLE,ERA       DIVIDE BY TWO AND CHECK EVEN/ODD
      INA           INCREMENT IF ODD
      STA MLEN      STORE IN LENGTH AREA
* 
      JSB XLUEX     SEND THE BUFFER 
      DEF SB2       RETURN
      DEF NAB2           WRITE
      DEF SVCPM     DRIVER CONTROL
      DEF INBUF     BUFFER ADDRESS
      DEF MLEN        AND LENGTH
SB2   EQU * 
      JMP RTEER     RTE ERROR 
      JSB CKNST     CHECK NETWORK STATUS
* 
      JMP READ      GO READ DS
      SKP 
* 
*  IF THIS IS A POSSIBLE COMMAND, 
*  CHECK THE FULL BUFFER OF CHARACTERS FOR CORRECTNESS
* 
CHR2  NOP 
      CPB B2        IS IT ONLY TWO CHARACTERS?? 
      JMP CHR2,I    YES - ALL DONE
      RRR 16        SWAP A & B
      AND =B7       LOOK AT MAX SEVEN CHR 
      RRR 16        SWAP A & B AGAIN
      STB CNTR      STORE 
      LDB ADBUF     GET ADDRESS OF BUFFER 
      RRL 1         MAKE A & B BYTE ADDRESSES 
      JSB .CBT      COMPARE FULL BUFFER 
      DEF CNTR      NUMBER OF BYTES/CHR 
      NOP           FOR USE BY MICROCODE
      JMP CHR2,I    YES - CORRECT COMMAND 
      NOP           NO - INCORRECT COMMAND RETURN 
* 
* BAD COMMAND - PRINT ERROR AND READ ANOTHER COMMAND
* 
BDCMD JSB EXEC      PRINT ERROR MESSAGE 
      DEF BC1       RETURN
      DEF NAB2      WRITE 
      DEF #TLU      TERMINAL OUTPUT CONTROL 
      DEF BDCMM     MESSAGE 
      DEF BMLEN     LENGTH
BC1   NOP 
* 
      JMP PRMPT     GO READ TERMINAL AGAIN
      SKP 
******************************* 
*                             * 
* COMMANDS TO READ THE DS LU  * 
*                             * 
******************************* 
* 
*  READ1 DOES ONLY ONE READ OF THE DS LU AND THEN RETURNS TO USER.
* 
READ1 LDA RDADR     GET ADDRESS 
      JSB CHR2      CHECK FOR CORRECTNESS 
      JSB READS     CORRECT SO DO READ
      JMP PRMPT     TIMEOUT SO ALL DONE 
      JMP PRDSM     MESSAGE RECEIVED SO PRINT 
* 
* WAIT CONTINUES READS FROM DS UNTIL MESSAGE COMES IN 
* 
WAIT  LDA WTADR     GET THE ADDRESS 
      JSB CHR2       AND CHECK FOR COMPLETION 
      JMP READ2    START READING DS FOR MESSAGES
* 
* CHECK FOR BREAK FROM USER 
* 
READ  JSB IFBRK     CHECK FOR BREAK 
      DEF *+1 
* 
      SZA           WAS THERE A BREAK?
      JMP PRMPT     YES - GO READ TERMINAL
READ2 JSB READS     NO - READ LU
      JMP READ      TIME-OUT SO READ DS AGAIN 
* 
* 
*  MESSAGE RECEIVED FROM DS - PRINT IT
* 
PRDSM LDA B         PUT B IN A
      ALS           MULTIPLY LENGTH *2
      CMA,INA       NEGATE
      ADA B2        AND DECREASE BY TWO 
      STA BFLN      SAVE LENGTH 
      ADB M1        ADD -1
      ADB ADMSG     ADD FIRST ADDRESS 
      LDA B,I       GET LAST WORD 
      AND =B377     LOOK AT LOWER BYTE ONLY 
      CPA =B377     IS THIS THE FLAG? 
      JMP UPPER 
      ISZ BFLN      DECREASE COUNT BY ONE MORE
      ADB M1        LOOK AT PREVIOUS WORD 
      LDA B,I       GET IT
PDM1  AND =B377 
      STA RTFLG     SAVE FLAG 
      CPA B1        IS THIS A DUMP??
      JMP DUMP      YES - INITIATE PROCEEDINGS
      LDA BFLN      GET LENGTH AGAIN
      SZA,RSS       IS THIS A ZERO LENGTH REQUEST?? 
      JMP PDM2      YES - DON'T PRINT IT
      SKP 
* 
* PRINTING RECEIVED MESSAGE (CON'T) 
* 
      JSB EXEC      WRITE TO TERMINAL 
      DEF PDM2      RETURN
      DEF NAB2      WRITE 
      DEF TRMOC     TERMINAL OUTPUT CONTROL 
      DEF MSGBF     MESSAGE BUFFER
      DEF BFLN      MESSAGE LENGTH
PDM2  NOP 
* 
      LDA RTFLG     GET FLAG AGAIN
      SZA,RSS       REQUESTING INPUT??
      JMP PRMPT     YES - GO READ COMMAND 
      JMP READ      NO - GO READ DS 
* 
UPPER LDA B,I       GET THE WORD AGAIN
      ALF,ALF       AND MOVE FLAG TO LOWER BYTE 
      JMP PDM1      BACK TO CODE
      SKP 
* 
*     THE SLAVE L IS REQUESTING A DUMP. ASK THE USER FOR A FILENAME 
*     AND CREATE IT ON THE DISC.  THEN REQUEST 128 WORDS BLOCKS FROM
*     THE SLAVE AND WRITE TO THE DISC. AT THE END OF THE FILE, ASK
*     FOR A FILE TAG AND POST THE TIME.  ALSO ALLOW USER TO APPEND HIS
*     OWN COMMENTS AT THE END.
* 
DUMP  JSB EXEC      WRITE TO TERMINAL DUMP REQUEST MESSAGE
      DEF *+5 
      DEF NAB2      WRITE 
      DEF TRMOC     OUTPUT CONTROL
      DEF DPMSG     BUFFER MESSAGE
      DEF DPMLN       AND LENGTH
      NOP 
* 
RDFIL JSB RDSTR     READ THE STRING FROM THE TERMINAL 
      STB SCR       SAVE LENGTH 
      LDA B1        GET STARTING LOCATION 
      STA SCR+1     AND SAVE
* 
      SZB,RSS       IS IT ZERO (DON'T DUMP) 
      JMP NODMP     YES - NO DUMP!!!!!! 
* 
      JSB NAMR      PARSE THE NAME STRING 
      DEF *+5 
      DEF FILNM     FILENAME STRING 
      DEF INBUF     BUFFER NAME 
      DEF SCR         AND LENGTH
      DEF SCR+1     STARTING LOCATION 
* 
* 
      JSB CREAT     CREATE THE FILE 
      DEF *+8 
      DEF DCB       DATA CONTROL BLOCK
      DEF FERR      ERROR LOCATION
      DEF FILNM     FILENAME
      DEF .257      FILE SIZE IN BLOCKS 
      DEF B1        TYPE ONE
      DEF FILNM+4   SECURITY CODE 
      DEF FILNM+5   CARTRIDGE 
* 
      SSA           WAS THERE AN ERROR? 
      JMP FMPER     YES - FMP ERROR 
      CCA           SET THE CLOSE FLAG
      STA CLSFL 
      SKP 
* 
* THIS LOOP IS EXECUTED 256 TIMES FOR THE DUMP
* 
      LDA =D-256
      STA DPCNT     STORE DUMP COUNT IN REGISTER
DMLOP LDA =D128     GET A COUNT OF 128
      ALF,ALF       MOVE TO UPPER BYTE
      STA MSGBF     STORE IN MESSAGE BUFFER 
      JSB XLUEX     WRITE COUNT TO SLAVE
      DEF *+5 
      DEF NAB2      NO-ABORT WRITE
      DEF SVCPM     CONTROL 
      DEF MSGBF     MESSAGE BUFFER
      DEF B1        AND LENGTH
* 
      JMP RTEER     RTE ERROR 
      JSB READS     GET A BUFFER FROM DS
      JMP DPTMO     TIME-OUT ON LINK
      CMA           ADD -1
      ADA ADMSG     TO ADDRESS OF BUFFER
      ADB A         ADD LENGTH
      LDA B,I       GET LAST WORD 
      ALF,ALF       SWAP BYTES
      AND =B377 
      CPA B1        IS IT STILL DUMPING?
      JMP DPTMO     NO - DUMP TIMEOUT 
      JSB WRITF     WRITE THE BUFFER TO THE FILE
      DEF *+4 
      DEF DCB       DATA CONTROL BLOCK
      DEF FERR      ERROR 
      DEF MSGBF     MESSAGE BUFFER
* 
      SSA           WAS THERE AN ERROR? 
      JMP FMPER     YES - REPORT IT 
      ISZ DPCNT     INCREMENT DUMP COUNT
      JMP DMLOP     DO IT AGAIN 
* 
* DUMP IS FINISHED. TELL SLAVE
* 
      CLA 
      STA MSGBF     STORE A ZERO IN BUFFER
      JSB XLUEX       AND TRANSMIT IT 
      DEF *+5 
      DEF NAB2      NO-ABORT WRITE
      DEF SVCPM     CONTROL 
      DEF MSGBF 
      DEF B1          AND LENGTH
* 
      JMP RTEER     ERROR 
      LDB ADMSG     GET ADDRESS OF MESSAGE BUFFER 
      LDA =D-129    NUMBER OF WORDS 
      JSB CLRBF     CLEAR BUFFER
      JSB FTIME     GET TIME IN A STRING
      DEF *+2 
      DEF MSGBF     ADDRESS OF BUFFER 
* 
* NOW ASK FOR INPUT OF A STRING FROM THE TERMINAL FOR THE COMMENT 
* 
      JSB EXEC      WRITE QUESTION
      DEF *+5 
      DEF NAB2      WRITE 
      DEF #TLU      TO TERMINAL 
      DEF ASKMS     ASK MESSAGE 
      DEF ASKML     AND LENGTH
      NOP           IGNORE RETURN 
      JSB REIO     GET THE STRING 
      DEF *+5 
      DEF NAB1          INPUT 
      DEF TRMIS     CONTROL 
      DEF MSGBF+16  MESSAGE BUFFER
      DEF ILEN        AND LENGTH
      NOP 
* 
      JSB WRITF     WRITE LAST FILE 
      DEF *+4 
      DEF DCB       DATA CONTROL BLOCK
      DEF FERR      ERROR MESSAGE 
      DEF MSGBF     MESSAGE BUFFER
* 
      CLA           CLEAR THE CLOSE FLAG
      STA CLSFL 
      JSB CLOSE     ALL DONE SO CLOSE THE FILE
      DEF *+3       RETURN
      DEF DCB       DATA CONTROL BLOCK
      DEF FERR      ERROR MESSAGE 
* 
      LDA DUFL      GET FLAG
      CPA =ADU      WAS THIS A DIRECT DUMP
      JMP PRMPT     YES - READ COMMAND
      JMP READ      NO - GO BACK AND READ SLAVE 
* 
* THIS ROUTINE HANDLES ANY FMP ERRORS 
* 
FMPER LDA FERR      GET NUMBER OF ERROR 
      CMA,INA       MAKE POSITIVE 
      STA FERR      RESTORE 
      JSB CNUMD     CONVERT IT TO AN ASCII NUMBER 
      DEF *+3 
      DEF FERR
      DEF #FMP        AND STORE IT IN STRING
      JSB EXEC      PRINT THE ERROR MESSAGE 
      DEF *+5 
      DEF NAB2      WRITE 
      DEF #TLU      CONTROL 
      DEF FMPMS     MESSAGE 
      DEF FMPEL       AND LENGTH
      NOP 
* 
      LDA CLSFL     GET THE CLOSE FLAG
      CMA,SZA       WAS IT SET??
      JMP FPER2     NO - JUST GET NAME AGAIN
      JSB CLOSE     CLOSE THE FILE
      DEF *+3 
      DEF DCB       DATA CONTROL BLOCK
      DEF FERR      ERROR CODE
* 
FPER2 JMP DUMP      START REQUEST AGAIN 
* 
*  THE USER INDICATES HE DOESN'T WANT TO DUMP!
*  LET'S GO TELL THE SLAVE ABOUT IT 
* 
NODMP LDA =B177400  SEND THE NO DUMP COMMAND
      STA MSGBF       IN THE MESSAGE BUFFER 
      JSB XLUEX     SEND TO VCP 
      DEF *+5 
      DEF B2        WRITE 
      DEF SVCPM     TRANSMIT
      DEF MSGBF     MESSAGE BUFFER
      DEF B1          AND LENGTH
* 
      JMP READ      READ FAILURE INDICATION 
* 
* THE LINK TIMED OUT DURING A DUMP. LETS CLEAN UP OUR ACT!! 
* 
DPTMO JSB CLOSE     JUST CLOSE THE FILE 
      DEF *+3 
      DEF DCB       DATA CONTROL BLOCK
      DEF FERR      ERROR CODE
* 
      LDA M1        SEND ALL ONE'S TO SLAVE 
      STA MSGBF 
      JSB XLUEX     CALL EXEC 
      DEF *+5 
      DEF NAB2      NO ABORT WRITE
      DEF SVCPM     SEND VCP
      DEF MSGBF     MESSAGE BUFFER
      DEF B1        ONE WORD
* 
      JMP RTEER     RTE ERROR 
      JSB CKNST     CHECK NETWORK STATUS
* 
      JSB EXEC     NOW TELL USER
      DEF *+5 
      DEF NAB2      WRITE 
      DEF #TLU       TO TERMINAL
      DEF ABDSD     ABORT DUMP MESSAGE
      DEF ABDSL       AND LENGTH
      NOP 
* 
      JMP PRMPT     DO A PROMPT 
      SKP 
* 
*   BREAK SENDS A BREAK FRAME TO THE SLAVE
* 
BREAK LDA BRADR     GET ADDRESS OF STRING 
      JSB CHR2        AND CHECK COMMAND 
BRK1  LDA BRPSW     GET PASSWORD FLAG 
      CMA,SZA,RSS   IS IT SET?
      JMP BR2       YES - SEND BREAK
* 
* PASSWORD NOT DETECTED - READ PASSWORD 
* 
      JSB EXEC      SEND PASSWORD PROMPT
      DEF BR1       RETURN ADDRESS
      DEF NAB2      WRITE 
      DEF TRMOC     TERMINAL CONTROL
      DEF PSMSG     PASSWORD MESSAGE
      DEF PSMLN     PASSWORD LENGTH 
BR1   NOP 
* 
      LDA =D-40 
      LDB ADBUF     GET ADDRESS OF INPUT BUFFER 
      JSB CLRBF     AND CLEAR IT
      JSB REIO      READ PASSWORD 
      DEF PSW       RETURN
      DEF NAB1      READ
      DEF #TLU      NO ECHO 
      DEF INBUF     INPUT BUFFER
      DEF ILEN
PSW   NOP 
* 
      CPB B2        ONLY TWO CHARCTERS? 
      RSS 
      JMP BDCMD     NO - BAD COMMAND
      LDA INBUF     GET FIRST WORD
      ALF,ALF       SWAP BYTES
      CMA             AND COMPLEMENT
      CPA #NMSC     IS IT CORRECT PASSWORD? 
      RSS 
      JMP BDCMD     NO - BAD COMMAND
BR2   CCA           YES - SET FLAG
      STA BRPSW 
      LDA #NWLU     GET NETWORK LU
      CCE           SET E 
      ALF,ELA       MULTIPLY BY 32 AND ADD 1
      STA SCR 
      SKP 
* 
* GO SEND BREAK 
* 
      JSB XLUEX     SEND THE BREAK
      DEF BR3       RETURN
      DEF NAB2      WRITE 
      DEF SBRFC     SEND BREAK FRAME
      DEF PSMSG     IRRELEVANT BUFFER 
      DEF PSMLN       AND LENGTH
      DEF SECUR     SECURITY CODE 
      DEF SCR       LU*32+1 
BR3   EQU * 
      JMP RTEER 
* 
* GO BACK TO READING DS 
* 
      JMP READ      NO - NORMAL TIMEOUT 
      SKP 
* 
* EXIT - PROGRAM ALL DONE !!
* 
EXIT  LDA EXADR     GET EXIT ADDRESS
      JSB CHR2        AND CHECK FOR CORRECTNESS 
EXIT1 CLA 
      STA BRPSW     CLEAR BREAK FLAG
      LDA CLSFL     HAS THE FILE BEEN CLOSED??
      CMA,SZA 
      JMP CLOS
      JSB CLOSE     NO - CLOSE IT 
      DEF *+3 
      DEF DCB 
      DEF FERR
* 
CLOS  JSB XLUEX     SET DRIVER INTO DS MODE 
      DEF EX1       RETURN
      DEF B3           CONTROL
      DEF SDSMC     SET DS MODE 
      DEF SECUR     SECURITY CODE 
EX1   EQU * 
* 
      JSB EXEC      PRINT ALL DONE MESSAGE
      DEF EX2       RETURN
      DEF NAB2      WRITE 
      DEF #TLU      TERMINAL OUTPUT CONTROL 
      DEF ENMSG 
      DEF ENMLN 
EX2   NOP 
* 
      JSB EXEC      ALL DONE!!! 
      DEF EX3 
      DEF B6
EX3   NOP 
      SKP 
* 
* ERROR ROUTINE FOR ILLEGAL DS NODES OR USER ERRORS 
* 
* 
ERR   JSB EXEC      SEND ERROR MESSAGE TO TERMINAL
      DEF ERR1
      DEF NAB2
      DEF TRMOC 
      DEF ERMSG 
      DEF ERRLN 
ERR1  NOP 
* 
      JSB RDSTR     READ A NEW COMMAND STRING!
* 
      SZB,RSS       IF ZERO LENGTH TERMINATE PROGRAM
      JMP EX1       ALL DONE FOR NOW
      STB SCR       STORE LENGTH IN SCRATCH AREA
      JSB PARSE     PARSE THE INPUT STRING
      DEF PRS1      RETURN
      DEF INBUF     INPUT BUFFER
      DEF SCR       LENGTH
      DEF NODE      TARGET BUFFER 
PRS1  EQU * 
* 
      LDA NODE      GET FIRST CHARACTER 
      CPA B1        IS IT A NUMBER??
      RSS           YES 
      JMP ERR       NO - REPRINT ERROR MESSAGE
      LDA NODE+1    GET NODE INPUT
      STA NODE      AND STORE IN PROPER POSITION
      JMP FNDDS     GO FIND DS LU 
      SKP 
****************************************************
*                                                  *
* SUBROUTINES                                      *
*                                                  *
****************************************************
* 
RDSTR NOP 
      LDA =D-40 
      LDB ADBUF     GET ADDRESS OF BUFFER 
      JSB CLRBF     CLEAR THE INPUT BUFFER
      JSB REIO      MAKE THE CALL 
      DEF RDST1     RETURN
      DEF NAB1      READ
      DEF TRMIS     INPUT AN ASCII STRING 
      DEF INBUF     INPUT BUFFER
      DEF ILEN      INPUT LENGTH
RDST1 NOP 
* 
      JMP RDSTR,I   BACK WE GO! 
* 
* THIS SUBROUTINE READS THE DS LU 
* 
READS NOP 
      LDA =D-129    CLEAR 129 LOCATIONS 
      LDB ADMSG     STARTING AT THIS ADDRESS
      JSB CLRBF     CLEAR IT
      JSB XLUEX     NOW DO READ OF DS 
      DEF RDS1      RETURN
      DEF NAB1      NO ABORT READ 
      DEF RVCPM     CONTROL WORD
      DEF MSGBF     BUFFER
      DEF MSGLN      AND LENGTH 
RDS1  EQU * 
      JMP RTEER     RTE ERROR RETURN
      STB SCR       SAVE LENGTH 
      JSB CKNST     CHECK NETWORK STATUS
      LDB SCR       GET LENGTH AGAIN
      CPA B2        WAS IT A TIMEOUT??
      RSS 
      ISZ READS     NO - RETURN + 1 
      JMP READS,I   RETURN
      SKP 
* 
* THIS SUBROUTINE CLEARS ALL MESSAGE BUFFERS
* 
CLRBF NOP 
      STA CNTR        IN THE WORD COUNT 
      CLA           CLEAR A 
CLR1  STA B,I       STORE IN BUFFER 
      INB           INCREMENT ADDRESS 
      ISZ CNTR        AND COUNT 
      JMP CLR1      DO IT AGAIN 
      JMP CLRBF,I   ALL DONE
* 
* 
* 
NONDE LDA NODE      GET ORIGINAL NUMBER 
      SSA,RSS       WAS IT NEGATIVE?
      JMP ERR       NO - DOESN'T EXIST
      CMA,INA       YES - CONVERT TO LU 
NNDE1 LDB =A??      DON'T KNOW WHAT IT IS 
      STB #NLU        SO INDICATE 
      JMP FOUND     AND INDICATE FOUND
* 
      SKP 
* 
* ERROR ROUTINE FOR ABORTED EXEC CALLS BY SYSTEM
* 
RTEER STA IOER      STORE TYPE OF ERROR 
      LDA IOERA     GET ERROR MESSAGE 
      STA NERMS       AND PUT IN PROPER LOCATION
      JMP PRNER     GO DO IT
* 
*  THIS SUBROTINE CHECKS DS STATUS. IF THERE IS A TIME-OUT OR NO ERROR
*  SUBROUTINE RETURNS, IF THERE IS, PROGRAM PRINTS ERROR MESSAGE AND
*  RETURNS TO PROGRAM PROMPT. 
* 
CKNST NOP 
      CLB           CLEAR B 
      ARS,SLA       WAS THERE AN ERROR??
      RSS 
      JMP CKNST,I   NO - RETURN 
      RAR,RAR       MOVE A REGISTER 
      RAR             TO LOOK AT ERROR CODE 
      AND =B17      GET ERROR CODE
      CPA B1        IS IT 1?
      LDB LNFLA     YES- LINE FAILURE 
      CPA B2        IS IT 2?
      JMP CKNST,I   YES IT'S LEGAL
      CPA B11       IS IT DRIVER ERROR??
      JMP SUSP        YES - SUSPEND FOR A FEW 
      CPA =B5       IS IT 5?
      LDB BSYA      YES - LINE BUSY 
      CPA B10       IS IT 10B?
      LDB NINTA     YES - NO INTERRUPT
      CPA =B13      IS IT 13B?
      LDB CDFLA     YES - CARD FAILURE
      CPA =B17      IS IT 17B?
      LDB BDINA     YES - BAD INTERRUPT 
      SZB,RSS       ANY OTHER CODE? 
      LDB IOERA       GETS THIS MESSAGE 
      STB NERMS     SAVE IT 
      STA IOER        AND STORE IN STRING 
      JSB KCVT      CHANGE TO ASCII 
      DEF *+2 
      DEF IOER
      STA IOER      STORE CONVERSION AGAIN
* 
* NOW PRINT DS ERROR MESSAGE
* 
PRNER JSB EXEC      PRINT DSVCP PREFIX
      DEF *+5 
      DEF NAB2
      DEF TRMOC 
      DEF PRMSG     BUFFER MESSAGE AND LENGTH 
      DEF PRMSL 
      NOP 
      JSB EXEC      NOW PRINT MESSAGE 
      DEF *+5 
      DEF NAB2
      DEF #TLU
NERMS BSS 1 
      DEF B10 
      NOP 
      JMP PRMPT     ALL DONE
* 
SUSP  JSB EXEC      SUSPEND THE PROGRAM FOR FIVE SECONDS
       DEF *+6
       DEF .12
       DEF B0 
       DEF B2 
       DEF B0 
       DEF M5 
      LDA B2
      JMP CKNST,I   JUMP BACK 
      SKP 
*********************************************** 
*                                             * 
* CONTROL WORD AREA                           * 
*                                             * 
*********************************************** 
* 
*    NETWORK CONTROL WORDS WITH LU:  THESE ARE DOUBLE WORD
*       FIRST WORD IS THE LU WITH BIT 15 SET FOR SYSTEM LU
*       SECOND WORD IS DS CONTROL 
* 
STAT  BSS 1 
      OCT 0        STATUS OF DRIVER 
SNDSC BSS 1 
      OCT 23500    SET FRONT PANEL WAIT 
SBRFC BSS 1 
      OCT 20700    SEND BREAK 
SVCPM BSS 1 
      OCT 20500    SEND VCP MESSAGE 
SDSMC BSS 1 
      OCT 23400    CLEAR FRONT PANEL WAIT 
RVCPM BSS 1 
      OCT 60400    RECEIVE VCP MESSAGE
* 
*    TERMINAL CONTROL WORDS WITH LU 
* 
TRMIS BSS 1 
TRMOC BSS 1 
      SKP 
************************************
*                                  *
*  STRING AREA                     *
*                                  *
************************************
PRMSG ASC  5,/DSVCP:
PRMSL ABS *-PRMSG 
BDCMM ASC 12,/DSVCP: ILLEGAL COMMAND
BMLEN DEF *-BDCMM 
PSMSG ASC 6,PASSWORD?:
PSMLN DEF *-PSMSG 
ERMSG ASC 10,/DSVCP: ILLEGAL NODE 
CRLF  OCT 6412       CARRIAGE RETURN-LINE FEED
      ASC 18,INPUT DS NODE (CR TERMINATES DSVCP)
ERRLN DEF *-ERMSG 
ENMSG ASC  6,/DSVCP: END
ENMLN DEF *-ENMSG 
DPMSG ASC 18,DUMP REQUEST, ENTER NEW FILENAME:
DPMLN DEF *-DPMSG 
FMPMS ASC 10,/DSVCP: FMP ERROR -
#FMP  BSS 3 
      ASC 7, ON DUMP FILE 
FMPEL DEF *-FMPMS 
ABDSD ASC 18,/DSVCP: LINE TIMEOUT - DUMP ABORTED
ABDSL DEF *-ABDSD 
ASKMS ASC 10,TYPE COMMENTS BELOW
ASKML DEF *-ASKMS 
LNFLA DEF LNFLR 
BSYA  DEF BUSY
NINTA DEF NOINT 
CDFLA DEF CRDFL 
BDINA DEF BDINT 
IOERA DEF IOERM 
BRADR DEF *+1 
      ASC 3,\BREAK
EXADR DEF *+1 
      ASC 2,\END
RDADR DEF *+1 
      ASC 3,\READ 
WTADR DEF *+1 
      ASC 3,\WAIT 
LNFLR ASC 8,LINE FAILURE
BUSY  ASC 8,LINE BUSY 
NOINT ASC 8,NOT INITIALIZED 
CRDFL ASC 8,CARD FAILURE
BDINT ASC 8,BAD INTERRUPT 
IOERM ASC 7,DRIVER ERROR
IOER  BSS 1 
ND&LU ASC 3, NODE 
NODE# BSS 3 
      ASC 4, AND LU 
LU#   BSS 1 
N&LLN DEF *-ND&LU 
      SKP 
******************************* 
*                             * 
*   CONSTANT AREA             * 
*                             * 
******************************* 
* 
NBR   BSS 1         NEIGHBOR FLAG 
#NWLU BSS 1         NETWORK WRITE LU
#NRLU BSS 1         NETWORK READ LU 
#NLU  BSS 1         NETWORK 
#TLU  BSS 1         TERMINAL LU NUMBER
HSTND NOP           HOST NODE OF SYSTEM 
FILNM BSS 10        FILE PARAMETERS 
SECUR DEC 29150     NETWORK SECURITY CODE 
NODE  NOP           NODE FOR PARSE
      NOP 
      NOP 
      BSS 30
CNTR  BSS 2 
SCR   BSS 2 
BRPSW NOP           PASSWORD FLAG 
CLSFL NOP           CLOSE FLAG
RTFLG NOP           READ TERMINAL FLAG
DPCNT BSS 1 
.\    OCT 56000 
DUFL  NOP           DUMP FLAG 
B0    OCT 0 
B1    OCT 1 
B2    OCT 2 
B3    OCT 3 
B6    OCT 6 
B10   OCT 10
B11   OCT 11
.12   DEC 12
M5    DEC -5
.13   DEC 13
.257  DEC 257 
M1    DEC -1
NAB1  OCT 100001
NAB2  OCT 100002
NAB3  OCT 100003
ADMSG DEF *+1 
MSGBF BSS 129 
MSGLN DEC 129 
BFLN  BSS 1 
ADBUF DEF *+1 
INBUF BSS 40
ILEN  DEC -78 
MLEN  BSS 1 
DCB   BSS 144       DATA CONTROL
      BSS 10
FERR  BSS 1 
      SKP 
      UNS 
      END DSVCP 
                                                                                            