ASMB,R,L,C,Q * NAME: LSUB2 * SOURCE: 92067-18266 * RELPC: 92076-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 LSUB2,8 92067-16260 REV.1903 790326 * * ENT INIT2,VALID,IDSCH,CLEAC,SQUZ,DADD,FCPU,DCNCT,NAMT EXT SESID,SCBAD,INTER,NAM.. EXT EXEC,IDRPD,MESSP * * EXT $LGOF,.ENTR,ISMVE,$SMCP,$SMID,$SMGP,$LIBR,$LIBX EXT MESSS,$SMII,VSCBA,.DAD,.DMP,LCLAS,$DSCS,$SMD# * * * * A EQU 0 B EQU 1 KYWRD EQU 1657B D1 DEC 1 D2 DEC 2 D5 DEC 5 B200 OCT 200 B17 OCT 17 D18 DEC 18 B20K OCT 20000 * * SPC 5 * * * * * * * * RETURNS LOG-OFF CLASS # OR 0 * * INIT2 NOP LDB INIT2,I FETCH RETURN ADDR ISZ INIT2 ADVANCE TO PARM LOC LDA INIT2,I AND FETCH ADDR OF PARM STA INIT2 OCT 101724 FETCH ACCTS BUSY FLAG (XLA **ASSEMBLER BUG) DEF $DSCS+1 STA INIT2,I AND RETURN IT * XLA $DSCS FETCH SESSION STATUS FLAG SSA IF NOT UP AND RUNNING JMP B,I RETURN STATUS IN (A) * LDA $LGOF FETCH COMMUNICATION CLASS NUMBER FOR LGOFF SZA IF NOT DEFINED, RETURN A ZERO IOR B20K ADD THE DON'T DEALLOCATE CLASS BIT STA LCLAS DEFINE THE CLASS FOR MESSP AND JMP B,I RETURN TO CALLER * * SPC 10 * * * RETURNS A= 0 IF BAD PARMS * A= 1 IF OK * SPC 5 * CPU NOP PID NOP GID NOP DENT NOP * VALID NOP JSB .ENTR FET PARM ADDRESSES DEF CPU * JSB VSCBA GO VERIFY SCB ADDRESS (DEFINED IN COMMON) DEF *+2 DEF SCBAD,I RETURNS SESSION ID OR ZERO IN (A). * CPA SESID,I MUST MATCH SPECIFIED SESSION IDENTIFIER JMP VAL1 OK--GO FETCH INFO FROM SCB CLA RETURN A=0 FOR FAILURE JMP VALID,I RETURN * * VAL1 JSB ISMVE GO FETCH CPU INFORMATION FROM SCB DEF VAL2 DEF SCBAD,I READ FROM LOCATION DEFINED BY SCBAD DEF $SMCP USING THIS OFFSET DEF CPU,I PLACE THE RESULT HERE DEF D2 MOVE 2 WORDS VAL2 EQU * * JSB ISMVE DEF VAL3 DEF SCBAD,I READ DEF $SMID THE PRIVATE DISC ID FROM THE SCB DEF PID,I AND PUT IT HERE DEF D1 DO 1 WORD VAL3 EQU * * JSB ISMVE DEF VAL4 DEF SCBAD,I DEF $SMGP READ GROUP ID FROM SCB DEF GID,I AND PUT IT HERE DEF D1 DO ONE WORD VAL4 EQU * JSB ISMVE DEF VAL5 DEF SCBAD,I DEF $SMD# FETCH DIRECTORY ENTRY NUMBER DEF DENT,I FROM SCB AND PLACE IT HERE. DEF D1 VAL5 EQU * CLA,INA OK RETURN JMP VALID,I A = 1 * * SPC 10 * * * RETURNS A=0 IF END OF ID'S * A=1 AND "OF, PGNAM ,8(OR ,1)" IF ACTIVE SESSION PGRM FOUND. * * * IDNO NOP OFPRG NOP * IDSCH NOP JSB .ENTR DEF IDNO * NXID LDB IDNO,I FETCH STARTING ID # ISZ IDNO,I BUMP ID OFFSET FOR NEXT TIME * ADB KYWRD ADVANCE TO ADDRESS OF NEXT ID LDA B,I FETCH THE ID ADDRESS SZA,RSS IF END OF LIST JMP IDSCH,I RETURN A=0 * STA TEMP1 SAVE ID ADDR STA B PREPARE FOR WALK THROUGH ID SEG ADB D14 ADVANCE TO TYPE WORD LDA B,I AND FETCH IT AND B20 ISOLATE SHORT SEGMENT BIT SZA AND CHECK IT JMP DONE IF SHORT SEG, ALL DONE * ADB D18 ADVANCE TO SESSION WORD LDA B,I AND FETCH IT CPA SCBAD,I SAME AS SESSION LOGGING OFF ? JMP ACTID YES- * JMP NXID GO TRY THE NEXT ONE * ACTID LDA OFPRG FETCH ADDRESS OF NAME BUFFER LDB TEMP1 FETCH ID ADDRESS JSB SNAM GO SET UP "OF, PROGM ,8" ((B) IS SAVED) * ADB D31 ADVANCE TO ID OWNER FLAG (LOW BYTE WD 31) LDA B,I FETCH AND B377 AND ISOLATE IT CPA SESID,I IF SESSION LOGGING OFF OWNS THE ID JMP OUT GO EXIT * LDA OFPRG THE SESSION DOESN'T OWN THIS ONE ADA D5 SO REPLACE THE "OF,PRG,8" WITH LDB C1 "OF,PRG,1" STB A,I * OUT CLA,INA,RSS ACTIVE PROGRAM FOUND, RETURN A=1 DONE CLA NO ACTIVE PROGRAMS FOUND, RETURN A=0 JMP IDSCH,I * SPC 10 TEMP0 NOP TEMP1 NOP TEMP2 NOP TEMP3 NOP D14 DEC 14 KYPNT NOP D32 DEC 32 B20 OCT 20 N1 DEC -1 ND14 DEC -14 RE ASC 2,REMO VE ASC 2,VED WHR OCT 10001 B40 OCT 40 HBYTE OCT 177400 B377 OCT 377 D31 DEC 31 D12 DEC 12 * * * CLEAC NOP LDA CLEAC,I FETCH RETURN ADDRESS STA CLEAC AND SAVE FOR EXIT * LDB KYWRD FETCH TOP OF ID SEGMENT LIST STB TEMP0 SAVE FOR NEXT TIME LDB B,I FETCH FIRST ID * CL.2 STB KYPNT SAVE CURRENT ADDRESS SZB,RSS CHECK FOR END OF LIST JMP CLEAC,I IF DONE-- GET OUT * ADB D14 ADVANCE TO ID TYPE WORD AND LAST CHAR OF NAME LDA B,I SEE IF ANYONE IS HOME AND B200 MUST BE A TEMP LOAD SZA,RSS IF TEMP LOAD BIT NOT SET JMP NEXT DON'T BOTHER WITH THIS ID LDA B,I ISOLATE SHORT SEGMENT BIT (#4) AND B20 IF SHORT SEGMENT SZA JMP CLEAC,I WERE ALL DONE * LDA B,I ONE LAST CHECK AND B17 ISOLATE TYPE CPA D5 CHECK FOR SHORT SEG IN LONG ID JMP NEXT TRY NEXT ONE * LDB KYPNT FETCH CURRENT ID ADDRESS LDA DKBUF FETCH ADDRESS OF "OF " BUFFER JSB SNAM GO SET UP "OF, PRGRM,8" (B RETURNED UNCHANGED) * ADB D31 ADVANCE TO ID OWNER FLAG LDA B,I AND FETCH IT AND B377 NOW SEE IF IT BELONGS CPA SESID,I TO THIS SESSION INB,RSS IT BELONGS TO US -- ADVANCE TO CURRENT SESSION WORD JMP NEXT NOT OURS -- GO CHECK THE NEXT ONE * * * AT THIS POINT, NONE OF THIS SESSION'S PROGRAMS MAY BE ACTIVE (THE * ROUTINE IDSCH TOOK CARE OF THAT). THEREFORE, ID 32 MUST BE ZERO (AS * IT IS CLEARED BY THE OP-SYSTEM UPON GOING DORMAT), UNLESS ANOTHER * SESSION IS USING THE ID. IF THIS IS THE CASE, THE ID IS GIVEN TO * THE SESSION CURRENTLY USING THE ID. * * LDA B,I FETCH SESSION WORD SZA IS SOMEONE ELSE USING THIS PROGRAM ? JMP GIFT YES -- SO GIVE IT TO THEM * KILL JSB IDRPD DEF ID.1D RELEASE THE ID DEF KNAM ID.1D EQU * SZA,RSS WAS THE RELEASE OK ? JMP TRKS YES- GO GIVE UP ANY TRACKS HE MAY HAVE OWNED * * JSB MESSS GO REMOVE THE ID FROM THE SYSTEM DEF KRTN DEF KBUF KILL BUFFER DEF D12 KRTN EQU * * TELL DLD RE ISSUE DST KNAM+3 PROG REMOVED DLD VE TO SESSION DST KNAM+5 TERMINAL JSB MESSP DEF MESS1 DEF WHR DEF KNAM DEF ND14 MESS1 EQU * * NEXT ISZ TEMP0 ADVANCE KYWRD POINTER LDB TEMP0,I FETCH NEXT POSSIBLE ID ADDRESS JMP CL.2 GO TRY NEXT ONE * * TRKS JSB EXEC DEF ID.2D DEF D5 DEF N1 ID.2D EQU * JMP TELL * * SPC 5 * * * NOTE B=ID 32 ADDRESS * * GIFT JSB $LIBR GO PRIV NOP * LDA B,I MAKE SURE PROGRAM IS SZA STILL ACTIVE TO DIFFERENT SESSION JMP GIFT2 STILL ACTIVE -- MAKE A GIFT OF IT * JSB $LIBX NOPE -- HE MUST HAVE JUST FINISHED DEF *+1 DEF KILL GO KILL THE ID * * GIFT2 ADB N1 BACK UP TO ID 31 STB TEMP2 SAVE FOR UPDATING * SSA CHECK FOR POSSIBLE MTM USER JMP MTM * STA TEMP1 SAVE SCB ADDRESS FOR FETCH * JSB ISMVE DEF GIFT3 DEF TEMP1 READ FROM LOCATION DEFINED HERE DEF $SMII OFFSET BACK TO SESSION IDENTIFIER DEF TEMP1 PUT IT THERE DEF D1 MOVE ONE WORD GIFT3 EQU * * LDA TEMP1 FETCH SESSION ID AND B377 ISOLATE GIFT4 STA TEMP1 AND SAVE FOR UPDATING ID SEGMENT * LDA TEMP2,I FETCH CURENT OWNER FLAG (ID 31) AND HBYTE CLEAR OWNER FLAG IOR TEMP1 THEN UPDATE WITH NEW OWNER ID STA TEMP2,I * JSB $LIBX DEF *+1 DEF NEXT * * MTM CLA ID GOES BACK TO THE SYSTEM JMP GIFT4 * * * * SPC 10 * * NOTE: (B) MUST BE RETURNED UNCHANGED * * * SNAM NOP STA TEMP2 SAVE BUFFER ADDRESS STB TEMP3 SAVE ID ADDRESS * DLD OF FETCH ASCII "OF, " DST TEMP2,I AND DUMP IT INTO USER BUFFER ISZ TEMP2 ADVANCE BUFFER POINTER ISZ TEMP2 ADVANCE BUFFER POINTER * LDA TEMP3 FETCH ID ADDRESS ADA D12 ADVANCE TO FIRST WORD OF NAME LDB A,I FETCH IT STB TEMP2,I AND DROP IT IN INA ADVANCE TO LAST TWO WORDS OF NAME ISZ TEMP2 BUMP BUFFER POINTER DLD A,I FETCH LAST TWO WORDS STA TEMP2,I SET SECOND WORD INTO BUFFER ISZ TEMP2 ADVANCE TO LAST WORD OF NAME LDA B MOVE FINAL CHARACTER TO (A) AND HBYTE SAVE THE HIGH BYTE ONLY ADA B40 ADD ASCII BLANK FOR LOW BYTE STA TEMP2,I ISZ TEMP2 BUMP TO WORD 6 OF BUFFER LDA C8 ADD ",8" TO STA TEMP2,I MESSAGE BUFFER LDB TEMP3 RESTORE ID ADDRES JMP SNAM,I EXIT * DKBUF DEF KBUF OF ASC 2,OF, KBUF BSS 9 MINIMUM BUFFER SIZE C8 ASC 1,,8 C1 ASC 1,,1 * KNAM EQU KBUF+2 SKP * * * * CALL DADD( ARG1 &RESULT ADDR, ARG2 ) * RSLT NOP ARG2 NOP DADD NOP JSB .ENTR DEF RSLT * DLD RSLT,I FETCH OLD VALUE JSB .DAD GO DO DOUBLE WORD ADD DEF ARG2,I DST RSLT,I SAVE RESULT BACK JMP DADD,I RETURN * SPC 5 * * CALL DCNCT(DSEC,HRS,DYS) * * DSEC NOP HRS NOP DYS NOP DCNCT NOP JSB .ENTR DEF DSEC * CLA CLEAR HIGH BITS LDB DYS,I FETCH CONNECT DAYS OF THIS SESSION JSB .DMP DEF DYSEC NUMBER OF SECONDS IN A DAY * DST RSLT SAVE THE RESULT IN TEMPS * CLA CLEAR HIGH BITS LDB HRS,I FETCH CONNECT HOURS JSB .DMP CALULATE SECONDS DEF D3600 (NUMBER OF SECONDS IN 1 HOUR) * JSB .DAD ADD NUMBER OF DAYS (IN SECONDS) DEF RSLT * JSB .DAD ADD CONNECT SECONDS DEF DSEC,I * DST DSEC,I RETURN RESULT JMP DCNCT,I * * SPC 5 * * * CALL FCPU(DOUBLE WORD 10'S OF MS, 4 WORD BUFFER FOR RESULT) * DCPU NOP RBUF NOP FCPU NOP JSB .ENTR DEF DCPU * DLD DCPU,I FETCH CPU USAGE SWP DIV D6000 A=MIN, B=SEC & 10'S OF MS STB RSLT SAVE SEC AND MS CLB DIV D60 NOW GET # HOURS STA RBUF,I AND RETURN IT * ISZ RBUF MOVE TO MINUTES STB RBUF,I AND RETURN THEM * ISZ RBUF ADVANCE TO SECONDS CLB LDA RSLT DIV D100 GET # OF SEC AND 10'S OF MS STA RBUF,I SET SECONDS ISZ RBUF STB RBUF,I SET MS JMP FCPU,I * * D100 DEC 100 D6000 DEC 6000 D60 DEC 60 *************** DOUBLE INTEGER FORMAT D3600 NOP DEC 3600 *************** ******************** DYSEC OCT 1 DEC 86400 OCT 50602 ******************** * * SKP * BUF NOP CNT NOP SQUZ NOP JSB .ENTR DEF BUF * LDA CNT,I CMA,INA STA CNT * * IF NOTHING PASSED, GET OUT * SZA,RSS GOT ANYTHING ? JMP SQUZ,I NO SO GET OUT ! * LDB BUF CLE,ELB * NXT LBT CPA N JMP SQUZ,I * ISZ CNT JMP NXT JMP SQUZ,I N OCT 116 * SPC 5 * * * PROVIDES AN INTERFACE TO NAM.. FOR LGOFF * * NAMT1 NOP NAMT NOP JSB .ENTR DEF NAMT1 * JSB NAM.. DEF NAM.1 DEF NAMT1,I NAM.1 EQU * * JMP NAMT,I * END