ASMB,R,L,C,Q * NAME: LSUB1 * SOURCE: 92067-18265 * RELPC: 92067-16260 * PGMR: G.L.M. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. 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 LSUB1,8 92067-16260 REV.2026 800414 * * * EXT $LGON,$SMLK,$SMST,$SMCA,$SMID,$SMGP,$SMDL EXT .ENTR,$CVT1,$CVT3,LCLAS,VERSN,$DSCS,$SMD#,$SMER EXT CCLAS,SESID,INTER,$CL1,$CL2,EXEC ENT INIT,MKSST,CONV,LPARS,FSTAA * SUP * * A EQU 0 B EQU 1 * SKP * SPC 5 * * * * * LGON INITIALIZATION ROUTINE * * LGON NOP ID NOP DIR# NOP CAP NOP EROF NOP UID NOP GID NOP DLMT NOP SSTL NOP DSCS2 NOP * INIT NOP JSB .ENTR DEF LGON * OCT 101724 FETCH BUSY FLAG (XLA) DEF $DSCS+1 STA DSCS2,I AND RETURN IT * CCA PRESET (A) FOR POSSIBLE NOT INITIALIZED ERROR RETURN XLB $LGON FETCH GLOBAL CLASS NUMBER FOR LOGON'S SZB,RSS IF NOT DEFINED,ERROR FOR NOW ***** JMP INIT,I * LDA B * IOR B20K ADD DON'T DEALLOCATE BIT STA LGON,I TO CLASS AND RETURN IT TO CALLER STA LCLAS ALSO DEFINE THE CLASS FOR MESSP * XLA $DSCS FETCH SESSION STATUS FLAG SSA IF NOT UP AND GOING, JMP INIT,I RETURN STATUS IN (A) * * * ALL OFFSETS ARE FROM THE FIRST WORD BUILT BY THE * CALLER OF MKSCB, WHICH IS THE SESSION ID. * * CALCULATE DISTANCE FROM LENGTH WORD TO SESSION ID * LDB $SMLK FETCH -LENGTH FROM SST LENGTH WD TO LINK ADB $SMST ADD POS LENGTH (FROM LINK TO SESSION ID) CMB,INB SET RESULT POSITIVE STB OFF1 SAVE IT FOR "MKSST" * INB ARRAY ARGUMENTS COUNT FROM 1, NOT ZERO. * STB SSTL,I SAVE ELEMENT NUMBER FOR SST LENGTH WORD * * * CALCULATE THE REST OF THE OFFSETS * * LDA $SMD# OFFSET TO DIRECTORY ENTRY NUMBER ADA B STA DIR#,I * LDA $SMCA FETCH CAPABILITY OFFSET ADA B CONVERT IT TO COUNT FROM SESSION IDENTIFIER STA CAP,I RETURN IT * LDA $SMER OFFSET TO ERROR PARAMETER ADA B CONVERT IT STA EROF,I RETURN RESULT * LDA $SMID FETCH USER ID OFFSET ADA B CONVERT IT STA UID,I RETURN IT * LDA $SMGP FETCH GROUP ID OFFSET ADA B CONVERT IT STA GID,I RETURN IT * LDA $SMDL FETCH OFFSET TO DISC LIMIT ADA B CONVERT IT STA DLMT,I RETURN IT * * CLA,INA SCB WORD 1 IS IDENTIFIER STA ID,I * CLA STA VERSN ALLOW SECOND LINE TO BE ISSUED BY MESSP JMP INIT,I GET OUT * SPC 5 B20K OCT 20000 SKP * OFF1 NOP * * * * * * * MAKE AN SST ADDITION * SCBAD NOP NEWSW NOP OFFST NOP STAT NOP * MKSST NOP JSB .ENTR DEF SCBAD * LDA SCBAD FETCH SCB ADDRESS ADA OFF1 POSITION AT SST LENGTH WORD STA SSTLN SAVE THAT LOCATION ADA OFFST,I ADVANCE TO FIRST SWITCH PAST LU 1 DEFINITION STA SCBAD SAVE THAT LOCATION ALSO * LDA DM70 FETCH SIZE OF MAX SST ADA SSTLN,I CHECK CURRENT SIZE SSA,RSS IF ALREADY MAX SIZE, JMP NOROM GET OUT * LDA NEWSW,I FETCH NEW SST ENTRY AND B377 ISOLATE SESSION LU STA SYRES SAVE SESSION LU * NEXT CLA PRESET FOR OK RETURN LDB NEWSW,I FETCH NEW SST ENTRY CPB SCBAD,I COMPARE IT TO AN EXISTING ENTRY JMP MKSST,I IF COMPLETE DUPLICATE, JUST IGNORE IT * LDA SCBAD,I FETCH CURRENT SST ENTRY SZA,RSS IS THIS THE FREE AREA JMP HOLE YEP-YOU WIN * AND B377 ISOLATE SESSION LU CPA SYRES IF DUPLICATE ON SESSION SIDE JMP DUPER RETURN DUP STATUS * ISZ SCBAD BUMP SST POINTER JMP NEXT GO CHECK NEXT SWITCH * * DUPER LDA SCBAD,I RETURN SST VERSION STA STAT,I OF EXISTING DUPLICATE ENTRY CCA SET A < 0 FOR ERROR RETURN JMP MKSST,I RETURN * * HOLE STB SCBAD,I ADD NEW ENTRY ISZ SSTLN,I BUMP SST COUNT CLA,RSS A=0 FOR GOOD RETURN * NOROM CLA,INA FULL STATUS RETURN JMP MKSST,I SPC 10 B377 OCT 377 DM70 DEC -70 DBLKS DEF BLKS BLKS ASC 11, DGEN DEF GEN GEN ASC 4,GENERAL . OCT 56 / OCT 57 D10 DEC 10 D1 DEC 1 D2 DEC 2 D252 DEC 252 D11 DEC 11 D6 DEC 6 D4 DEC 4 D7 DEC 7 NULL OCT 40 * SKP * * * * CONVERT THE SYSTEM AND SESSION LU'S OF AS SST ENTRY * * * SWIT NOP SYRES NOP SERES NOP * CONV NOP TLOG EQU CONV USE ENT FOR TEMP. SSTLN EQU CONV JSB .ENTR DEF SWIT * CLB,CCE SET E FOR DECIMAL CONVERSION LDA SWIT,I FETCH SST ENTRY TO BE CONVERTED ASL 8 PUT SYSTEM LU IN B ALF,ALF REPOSITION SESSION LU INA (INTERNAL STRUCTURE IS LU-1) JSB $CVT1 GO CONVERT SESSION LU STA SERES,I STORE RESULT IN CALLER'S BUFFER LDA B FETCH SYSTEM LU INA (INTERNAL STRUCTURE IS LU-1) JSB $CVT3 INA ADVANCE TO LAST 4 DIGITS DLD A,I AND FETCH THEM DST SYRES,I THEN SET THEM IN USER'S BUFFER JMP CONV,I * * SKP * * * * * PARSE THE USER.GROUP/PASSWORD NAMES * * BUF NOP LEN NOP U/G NOP PASS NOP * LPARS NOP JSB .ENTR DEF BUF * LDA BUF FETCH INPUT BUFFER ADDR RAL GET BYTE ADDRESS STA BUF SAVE FOR SCAN * LDA LEN,I FETCH BYTE COUNT STA LEN SAVE IN LOCAL TEMP SSA IF NEGATIVE, THIS IS A PASSWORD PARSE ONLY JMP PPAS SO GO PARSE THE PASSWORD * CMA,INA,SZA,RSS SET BYTE COUNT NEG AND CHECK FOR ZERO JMP LPARS,I RETURN IF NULL * STA LEN SAVE NEG BYTE COUNT * * PARSE THE USER NAME * LDB U/G FETCH ADDR OF USER/GROUP RESULT FIELD LDA DBLKS FETCH ADDR OF ASCII BLANKS MVW D11 PAD RESULT FIELD WITH BLANKS * LDA U/G FETCH U/G BUFFER ADDR INA ADVANCE PAST COUNT JSB SCAN GO PARSE IT * LDB TLOG FETCH COUNT OF BYTES IN USER NAME BLF,BLF POSITION TO HIGH BYTE STB U/G,I SAVE FOR RETURN SZB,RSS IF USER NAME NOT GIVEN JMP LPARS,I ERROR--RETURN * LDB LEN FETCH REMAINING INPUT BYTE COUNT SZB,RSS IF OUT OF INPUT, GO DEFAULT GROUP NAME JMP MGEN * CPA / FIND GROUP TERMINATOR ? JMP MGEN YES-- GO DEFAULT GROUP NAME * CPA . FIND USER TERMINATOR ? JMP GRUP YES GO SCAN FOR GROUP NAME * * * END OF LINE. DEFAULT GROUP NAME TO "GENERAL" * * * MGEN LDA DGEN FETCH ADDR OF GEN GRUP LDB U/G FETCH USER/GROUP RESULT FIELD ADB D6 ADVANCE TO GROUP LOCATION MVW D4 MOVE THE GENERAL GROUP NAME IN * LDA D7 UPLEN ADA U/G,I SET GROUP LEN AT 7 BYTES STA U/G,I * LDA LEN FETCH REMAINING INPUT COUNT SZA IF PASSWORD TO BE PARSED JMP PPAS GO DO IT * STA PASS,I SET PASSWRD LENGTH AT ZERO JMP LPARS,I GET OUT * JMP LPARS,I GET OUT * SPC 5 * * PASSWORD PARSE * PPAS LDB PASS FETCH RESULT BUFFER LDA DBLKS FETCH ADDR OF ASCII BLANKS MVW D6 BLANK OUT RESULT BUFFER * LDA PASS FET ADDR OF RESULT FIELD INA ADVANCE PAST LENGTH JSB SCAN * LDA TLOG FETCH CHAR COUN OF PASSWORD STA PASS,I SAVE FOR RETURN JMP LPARS,I * * SPC 10 * * PARSE GROUP NAME * GRUP LDA U/G FETCH USER/GROUP RESULT BUFFER ADA D6 ADVANCE TO GROUP LOCATION JSB SCAN GO PARSE IT * CLB IF USER TERMINATOR CPA . FOUND, TERMINATE PARSE STB LEN * LDA TLOG FETCH CHAR COUNT SZA ANY THING FOUND JMP UPLEN WE HAVE A GROUP--GO UPDATE LENGTH JMP MGEN NOTHING-- GO FILL WITH "GENERAL" * * SPC 10 * * * SCAN THE INPUT BUFFER UNTIL A "." OR "/" OR END OF LINE * * * SCAN NOP RAL GET A BYTE ADDR STA SERES SAVE IT * CLA,CCE CLEAR BYTE COUNT STA TLOG NXBYT LDB BUF FETCH INPUT BUFFER BYTE ADDR (CURENT) LBT GET A BYTE STB BUF SET NEXT BYTE ADDR CPA NULL BLANK ? JMP SCAN2 GET NEXT BYTE * CPA . USER TERMINATOR ? JMP SCAN3 YEP-GET OUT * CPA / GROUP TERMINATOR ? JMP SCAN3 YEP - GET OUT * LDB TLOG FETCH CURRENT RESULT BYTE COUNT CPB D10 IS RESULT BUFFER FULL ? JMP SCAN2 YEP - GET NEXT CHARACTER * LDB SERES FETCH RESULT BYTE ADDR SBT SET THE BYTE STB SERES SAVE NEW RESULT ADDR ISZ TLOG BUMP BYTE COUNT * SCAN2 CLE FORCE ANOTHER PASS (UNLESS END OF LINE) * SCAN3 ISZ LEN BUMP INPUT CHAR COUNT SEZ,CCE IF NOT END OF LINE, TERMINATOR FOUND ? JMP SCAN,I EOL OR TERMINATOR FOUND JMP NXBYT * SKP * * BUFX NOP FSTAA NOP JSB .ENTR DEF BUFX * JSB EXEC DEF STF.1 DEF D1 DEF D2 DEF BUFX,I DEF D252 LAST 4 WORDS DON'T CONCERN US DEF $CL1 DEF $CL2 STF.1 EQU * JMP FSTAA,I END