ASMB,Q,C
*     NAME:   FG.LU 
*     SOURCE: 92067-18179 
*     RELOC:  92067-16125 
*     PGMR:   G.A.A.
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
      NAM FG.LU,8 92067-16125 REV.1903 780926 
      ENT FG.LU 
      EXT $SMVE     SCB MOVE ROUTINE
      EXT .ENTP     GUESS 
      EXT $LIBR,$LIBX 
* 
*     THE FG.LU  (FUDGE LU) ROUTINE MODIFIES THE VARIABLE 
*     PART OF THE USERS SST TO IMPLEMENT THE SL (OR LU) 
*     COMMAND.
* 
*     CALLING SEQUENCE: 
* 
*     ERR=FG.LU(SESLU,SYSLU,L3,BUF) 
* 
*     WHERE: ERR   IS THE RETURNED ERROR CODE =0 IMPLIES
*                  NO ERROR - ELSE A STANDARD FMGR ERROR
*            SESLU IS THE SESSION LU TO SET UP OR MODIFY
*            SYSLU IS THE SYSTEM LU THAT IS TO BE CONNECTED 
*                  TO <SESLU>.  IF <SYSLU> IS ASCII "- "
*                  THEN SESLU IS REMOVED FROM THE VARIABLE PART 
*                  OF THE SST.
*                  IF <SYELU> LU IS ALREADY PRESENT AS A SYSTEM 
*                  LU IN THE USERS SST THE NEW CONNECTION IS MADE 
*                  IF <SESLU> IS ALREADY PRESENT IN THE VARIABLE
*                  PART OF THE USERS SST THAT ENTRY IS CHANGED
*                  (OR DELETED IF "- ").
*            L3    IF <SYSLU> IS NOT PRESENT IN THE USERS SST 
*                  THEN <L3> MUST =0 OR A CAPABILITY FAULT WILL BE
*                  DETECTED AND AN ERROR RETURNED.  IF <L3> =0
*                  THE NEW CONNECTION WILL BE MADE. 
*            BUF   IS A 90 (OR SO) WORD BUFFER WHICH THE ROUTINE
*                  USES TO HOLD THE SST WHILE STUDYING IT.
*                  THIS ELIMINATES THE NEED FOR A LOCAL BUFFER IN 
*                  THIS ROUTINE.
* 
* 
SESLU NOP 
SYSLU NOP 
L3    NOP 
BUF   NOP 
FG.LU NOP 
      JSB $LIBR     ROUTINE DOES NOT WANT TO BE INTERRUPTED 
      NOP 
      JSB .ENTP 
      DEF SESLU     FETCH THE PARAMETERS
* 
      CCA           GET THE LU'S INTO WORKABLE FORM 
      STA NGFLG     SET THE NOT "- " FLAG 
      ADA SESLU,I   TABEL ENTRIES ARE -1
      AND B377      KEEP ONLY 8 BITS
      STA SESLU     SAVE THE RESULT 
      STA B         PUT IN B FOR TEST 
      LDA NOSWT     CAN NOT SWITCH LU 1
      SZB,RSS       IF TRYING THEN
      JMP EXIT      EXIT WITH ERROR 
* 
      LDA XEQT      SET UP TO GET THE SESSION WORD
      ADA D32       FROM THE ID 
      XLA A,I       JUST IN CASE
      STA SID       SAVE FOR THE CALL TO $SMVE
      JSB $SMVE     MOVE IN THE SST 
      DEF *+6 
      DEF D1
      DEF SID 
      DEF D0        ZERO OFSET FROM FRONT 
      DEF BUF,I     USE USERS BUFFER
      DEF D90       READ IN 90 WORDS
* 
*     FIRST WE CLASIFY SYSLU AS EITHER "- " OR IN THE SST OR NOT. 
* 
      LDA BUF       SET UP A POINTER
      STA SSTA
      LDA A,I       GET THE LENGTH OF THE SST 
      STA COUNT     SET THE COUNTER 
      LDA SYSLU,I   GET THE DESIRED SYSLU 
      CPA MINUS     IS IT "- "
      JMP FGNEG     YES GO SET THE FLAG TO SHOW IT IS SO. 
* 
      ADA N1        NO ADJUST TO -1 NOTATION
      AND B377      SAVE THE RESULT 
      ALF,ALF       ROTATE TO THE HIGH HALF OF THE WORD 
      STA SYSLU     AND SAVE FOR LATER
      LDB L3,I      GET THE CAPABILITY FLAG 
      SZB           IF HE HAS CABILITY IN ANY CASE OR 
      CPA C377      IF HE IS SETTING A BIT BUCKET 
      JMP FGFND     LET HIM DO IT 
* 
FGSSH ISZ SSTA      ELSE SEARCH FOR THE TARGET LU 
      LDA SSTA,I    IN HIS SST ALREADY
      AND C377      ISOLATE 
      CPA SYSLU     THIS IT?
      JMP FGFND     YES ALL IS OK 
* 
      ISZ COUNT     NOPE  ANY MORE TO TRY?? 
      JMP FGSSH     YES TRY THE NEXT ONE
* 
      LDA CAPER     OH NO HE DID A NO NO  SLAP HIS
      JMP EXIT      HAND
* 
B377  OCT 377 
NOSWT DEC 42
D32   DEC 32
CAPER DEC 46        CAPABILITY ERROR
D1    DEC 1 
D0    NOP 
D90   DEC 90
SID   NOP 
SSTA  NOP 
COUNT NOP 
MINUS ASC 1,- 
N1    DEC -1
C377  OCT 177400    COMPLEMENT OF 377 
TADD  NOP 
* 
*     WE ARE FREE TO DO WHAT NEEDS TO BE DONE SO NOW CHECK THE
*     USERS SIDE IN THE TEMP AREA FOR A PRIOR DEF OF THIS LU. 
*     WE ASSUME THAT ANY IMPLICATIONS SUCH AS LOSS OF A SPOOL LU
*     OR AN EXISTING ENTRY OF THE SAME TYPE ARE ALREADY TAKEN 
*     CARE OF.  (CAN'T FIX HERE ANYWAY BECAUSE WE ARE PRIVILEDGED 
*     AND PRIVILEDGED FOLKS DON'T DO ANY MORE THAN THEY WANT TO.) 
* 
FGNEG ISZ NGFLG     THE "- " FLAG IS SET
NGFLG OCT -1        SET TO -1 ON ENTRY
* 
FGFND CLA           SET UP TO 
      STA TADD      SCAN THE VARIABLE SST 
      STA L3        DON'T NEED PERMISSION ANY MORE
      LDB BUF       GET THE BUFFER ADDRESS TO B 
FGUSH INB           STEP TO THE FIRST ENTRY 
      LDA B,I       GET IT
      AND B377      AND ISOLATE THE SESSION SIDE
      CPA B377      IF EMPTY
      STB L3        SAVE AS A POSSIBLE PLACE FOR THE NEW SWITCH 
      CPA SESLU     ENTRY ALREADY IN THE TABLE? 
      STB TADD      YES SAVE THE ADDRESS - WE WILL OVER WRITE 
      SZA           THIS THE END OF THE VARIABLE PART?
      JMP FGUSH     NO  CONTINUE THE SEARCH 
* 
      LDA NOTHR     GET THE NOT FOUND ERROR CODE
      LDB NGFLG     IF THE NEGATIVE FLAG IS SET 
      ADB TADD      AND THE ENTRY NOT FOUND 
      SZB,RSS       THEN
      JMP EXIT      WHINE ABOUT IT
* 
      LDA SSTFU     GET THE SST FULL ERROR
      LDB TADD      CHECK IF WE EITHER FOUND
      SZB,RSS       AN OLD ONE OR 
      LDB L3        AN EMPTY ONE
      SZB,RSS       WELL? 
      JMP EXIT      SO SORRY NO ROOM NOW
* 
*     OK LETS DO IT  B= ADDRESS TO MODIFY, FIGURE NEXT ENTRY
*     -1 IF "- " OPTION 
* 
      ISZ NGFLG     IF "- " FLAG SET WE DON'T SKIP
      CCA,RSS       -1 FOR "- " OPTION
      LDA SESLU     ELSE SET UP THE DESIRED SWITCH
      IOR SYSLU 
      STA B,I       SET THE NEW ENTRY 
      STB BUFAD     SET UP TO WRITE BACK ONE SST WORD 
      CMB,INB       COMPUTE THE OFFSET
      ADB BUF 
      CMB,INB       SET IT POSITIVE FOR THE CALL
      STB OFF       AND SET IT
      JSB $SMVE     SEND THE WORD BACK TO THE SST 
      DEF *+6 
      DEF D2        THIS IS A WRITE 
      DEF SID 
      DEF OFF 
BUFAD NOP 
      DEF D1         ONE WORD 
      CLA           WOW! AN OK EXIT 
EXIT  JSB $LIBX     EXIT
      DEF FG.LU 
* 
SSTFU DEC 66        SST FULL ERROR
NOTHR DEC 2068      LU NOT FOUND (68) +2000 (NOT A SEVERER ERROR) 
D2    DEC 2 
OFF   NOP 
A     EQU 0 
B     EQU 1 
XEQT  EQU 1717B 
      END 
                                                    