IDENT MISC EXT SYSRET,PUTCAP,GETCAP,DISASTR,E.ERROR ECSMAC XTEXT CBLOCK MICRO 1,,*/EMISC/* TITLE CLASS CODES AND MISCELLANEOUS ROUTINES INTSYS XTEXT PROCSYM XTEXT TYPES XTEXT TITLE MKCLSCD: MAKE A NEW CLASS CODE ECSCODE MKCCD * EXT CLASCNT * * MKCLSCD SA1 B1+P.PARAM . C-LIST INDEX NG X1,NEGINDX . NEGATIVE C-LIST INDEX SA2 B1+P.CLIST SA2 B1+X2 BX3 X1 . SAVE INDEX MX7 59 . -1 IX3 X3-X2 NG X3,MKCLSCD2 . INDEX OK MKCLSCD1 SA2 A2+2 ZR X2,BIGINDX . INDEX TOO LARGE IX3 X3-X2 PL X3,MKCLSCD1 MKCLSCD2 SX0 CLASCNT READ LAST CLASS CODE FROM BUFFER SA0 B1+P.SCR2 + RE 1 RJ E.ECS SA2 A0 IX7 X2-X7 LX7 30 NG X7,BADNEWS SA7 B1+1 . STORE INTO SCRATCH AREA LX7 30 SA7 A2 + WE 1 WRITE OUT CLASS COUNT RJ E.ECS SB5 B1 MX7 42 SX2 T.CLSCD BX7 X2+X7 SA7 B1 . STORE FIRST WORD OF CLASS CODE SB6 SYSRET . ^RETURN^ LINK FROM PUTCAP EQ PUTCAP BADNEWS RJ DISASTR ENDECS MKCCD TITLE NWTMP: SET THE TEMPORARY PART OF A CLASS CODE ECSCODE NWTMP * * * SET TEMPORARY PART OF CLASS CODE * * AP1 = C: CLASS CODE (OB.TEMP) * AP2 = D: INDEX TO RETURN NEW CLASS CODE * AP3 = D: NEW TEMPORARY PART (30 BITS) * * NWTMP SA1 B1+P.PARAM+2 CHECK C-LIST INDEX NG X1,NEGINDX ERROR: NEGATIVE INDEX SA2 B1+P.CLIST SA2 B1+X2 BX3 X1 IX3 X3-X2 NG X3,NWTMP2 JP IF IN LOCAL C-LIST * NWTMP1 SA2 A2+2 LENGTH OF NEXT C-LIST ZR X2,BIGINDX ERROR: INDEX TOO LARGE IX3 X3-X2 PL X3,NWTMP1 * NWTMP2 SA2 B1+P.PARAM+1 DATA PART OF CLASS CODE MX6 30 BX2 X2*X6 SA3 B1+P.PARAM+3 NEW TEMPORARY PART BX3 -X6*X3 BX6 X3+X2 SA6 A2 * SB5 B1+P.PARAM ABS ADDR OF CAPABILITY SB6 SYSRET X1 = INDEX FOR NEW CLASS CODE JP PUTCAP * ENDECS NWTMP EJECT RECS MACRO X RE X RJ =XE.ECS ENDM WECS MACRO X WE X RJ =XE.ECS ENDM TITLE GENERATE A CAPABILITY CREATING AUTHORIZATION EJECT ECSCODE CAGEN EXT AUTHCNT * * PARAMETERS- * AP1 = D: INDEX TO RETURN AUTHORIZATION (ITS A CAPABILITY) * * THE RETURNED CAP IS OF A SPECIAL TYPE AND MAY BE * PRESENTED FOR MANUFACTURING YOUR OWN PRIVATE TYPE * OF CAPABILITY. THE SECOND WORD OF THE AUTHORIZATION * IS THE TYPE OF CAPABILITY WHICH WILL BE MANUFACTURED * UNDER THIS AUTHORIZATION. * SA1 B1+P.PARAM CHECK OUT C-LIST INDEX NG X1,NEGINDX SA2 B1+P.CLIST GO THROUGH THE PAIN OF SEEING SA2 B1+X2 THAT ITS IN THE FULL C-LIST BX3 X1 SAVE THROUGH CHECK MX7 59 IX3 X3-X2 NG X3,CAPAGEN1 HOORAY, ITS IN THE LOCAL C-LIST CAPAGEN2 SA2 A2+2 GET LENGTH OF NEXT C-LIST ZR X2,BIGINDX SHUCKS, THERE ARENT ANYMORE IX3 X3-X2 PL X3,CAPAGEN2 ITS NOT IN THIS ONE EITHER CAPAGEN1 SX0 AUTHCNT READ LAST AUTHORIZATION THAT SA0 B1+P.SCR2 WAS PASSED OUT RECS 1 SX4 9 SA2 A0 GET LAST AUTH ISSUED CAPAGEN3 IX2 X2-X7 FIND THE NEXT ONE CX3 X2 IX3 X3-X4 NZ X3,CAPAGEN3 BX6 X2 GOT ONE AX2 18 NZ X2,HORRORS BUT ITS OUT OF RANGE SA6 A2 PUT THE NEW ONE BACK WECS 1 SA6 B1+1 SAVE IT FOR PUTCAP SX2 T.CAUTH GENERATE THE FIRST WORD MX6 42 OF THE CAPABILITY AUTHORIZATION BX6 X2+X6 SA6 B1 SB5 B1 ADDRESS OF CAP FOR PUTCAP SB6 SYSRET EQ PUTCAP GIVE HIM HIS SHINY NEW AUTHORIZATION HORRORS SX6 E.MISCE NO AUTHORIZATIONS AVAILABLE SX7 E.NOAUTH EQ E.ERROR ENDECS CAGEN TITLE GENERATE A CAPABILITY OF THE AUTHORIZED TYPE EJECT ECSCODE CGEN * * PARAMETERS- * AP1 = D: INDEX FOR RETURN OF CAPABILITY * AP2 = C: A CAPABILITY CREATING AUTHORIZATION * AP3 = D: DATA WORD TO BE USED AS SECOND WORD OF * RETURNED CAPABILITY * * A CAPABILITY WITH ALL OPTION BITS ON, OF THE TYPE SPECIFIED * IN THE AUTHORIZATION, AND WITH SECOND WORD EQUAL * TO THE PROVIDED DATA WORD IS RETURNED TO THE USER. * SA1 B1+P.PARAM CHECK OUT C-LIST INDEX NG X1,NEGINDX SA2 B1+P.CLIST GO THROUGH THE PAIN OF SEEING SA2 B1+X2 THAT THE INDEX IS IN THE * FULL C-LIST BX3 X1 SAVE INDEX IX3 X3-X2 NG X3,CAPGEN1 ITS IN THE LOCAL C-LIST CAPGEN2 SA2 A2+2 LENGTH OF NEXT C-LIST ZR X2,BIGINDX THERE ISNT A NEXT C-LIST IX3 X3-X2 PL X3,CAPGEN2 KEEP TRYING CAPGEN1 SA2 B1+P.PARAM+2 GET THE TYPE FOR THE NEW CAP MX6 42 BX6 X6+X2 BOY , THERE BETTER HADNT BE SA6 B1 ANY EXTRA BITS IN THE AUTHORIZATION SA2 B1+P.PARAM+3 GET THE SECOND WORD OF THE CAP BX6 X2 SA6 B1+1 SB5 B1 ADDRESS OF NEW CAP FOR PUTCAP SB6 SYSRET EQ PUTCAP GIVE IT TO HIM AND SPLIT ENDECS CGEN TITLE ECS ACTION TO DISPLAY USER CLOCKS IN USER CORE EXT S.MASTR,S.QUANT ENTRY DSPCLOX DSPCLOX SA1 B1+P.PARAM SB7 DSPCLOX1 TAKE RETLINK AND BUFSIZ SB6 5 TO CHKPTR EQ CHKPTR DSPCLOX1 SA5 S.MASTR REAL TIME CLOCK BX6 X5 SA6 A0 SA5 B1+P.USRTIM USER CLOCK BX6 X5 SA6 A6+1 SA5 B1+P.SYSTIM SYSTEM CLOCK BX6 X5 SA6 A6+1 SA5 B1+P.SWPTIM SWAPPING CLOCK BX6 X5 SA6 A6+1 SA5 S.QUANT QUANTUM CLOCK BX6 X5 SA6 A6+1 JP SYSRET TITLE ECS ACTION TO DISPLAY SYSTEM CLOCKS IN USER CORE EXT S.MASTR,S.IDLTM,S.USRTM,S.SYSTM,S.SWPTM,S.CHARG ENTRY DSPSCLX DSPSCLX SA1 B1+P.PARAM . CHECK OUT THE BUFFER SB7 DSPSCLX1 SB6 6 EQ CHKPTR DSPSCLX1 SA4 S.MASTR . MOVE REAL TIME BX6 X4 SA6 A0 SA5 S.IDLTM . MOVE THE IDLE TIME BX6 X5 SA6 A6+1 SA5 S.USRTM . MOVE THE USER TIME BX6 X5 SA6 A6+1 SA5 S.SYSTM . MOVE THE SYSTEM TIME BX6 X5 SA6 A6+1 SA5 S.SWPTM . MOVE THE SWAPPING TIME BX6 X5 SA6 A6+1 SA5 S.CHARG . CALCULATE THE INTERRUPT TIME IX6 X4-X5 SA6 A6+1 EQ SYSRET TITLE ECS ACTION TO RETURN OPERATOR TIME AND DATE * * * * USER X6 = TIME (HH:MM:SS) * USER X7 = DATE (MM/DD/YY) * * BOTH ARE IN SYSTEXT ASCII * * ENTRY TIMDT ECSCODE TIMDT * EXT S.DATE,S.TIME * TIMDT SA1 S.TIME+1 . GET SECONDS SA2 A1+1 . GET TENS OF SECONDS SX1 X1+ASCII0 . MAKE ASCII SX2 X2+ASCII0 LX2 7 BX6 X2+X1 . SECONDS IN X6 SA1 A2+1 . GET MINUTES SX1 X1+ASCII0 . MAKE ASCII SA2 A1+1 . GET TENS OF MINUTES SX2 X2+ASCII0 LX2 7 BX2 X2+X1 LX2 21 . POSITION MINUTES BX6 X6+X2 . ADD TO X6 SA1 A2+1 . GET HOURS SB6 TIMDT1 . RETURN EQ TIMDT. . CONVERT BASE 10 TIMDT1 LX2 42 . POSITION HOURS BX6 X2+X6 . ADD TO X6 * SA1 S.DATE . GET DAY SB6 TIMDT2 EQ TIMDT. . CONVERT BASE 10 TIMDT2 LX2 21 . POSITION DAY BX7 X2 . START IN X7 SA1 A1+1 . GET MONTH SB6 TIMDT3 EQ TIMDT. . CONVERT TIMDT3 LX2 42 . POSITION BX7 X7+X2 . ADD TO X7 SA1 A1+1 . GET YEAR SB6 TIMDT4 EQ TIMDT. . CONVERT TIMDT4 BX7 X7+X2 . ADD TO X7 SA1 TIMDTC . GET COLON MASK BX6 X6+X1 . ADD COLONS TO TIME SA2 TIMDTS . GET SLASH MASK BX7 X7+X2 . ADD SLASHES TO DATE SA6 B1+P.XPACK+14 . USER X6 SA7 B1+P.XPACK+15 . USER X7 EQ SYSRET . RETURN * * TIMDTC VFD 4/0,14/0,7/32B,14/0,7/32B,14/0 . COLONS TIMDTS VFD 4/0,14/0,7/17B,14/0,7/17B,14/0 . SLASHES * ASCII0 EQU 20B * TIMDT. SX2 0 SX3 10 TIMDT.1 IX4 X1-X3 . SUBTRACT 10 NG X4,TIMDT.2 . DONE ON NEG BX1 X4 . REPLACE X1 SX2 X2+1 . INCREMENT ANSWER EQ TIMDT.1 . LOOP * TIMDT.2 SX1 X1+ASCII0 . ANSWER IN ASCII SX2 X2+ASCII0 LX2 7 BX2 X2+X1 JP B6 . RETURN * * ENDECS TIMDT TITLE SAVE REGISTERS IN USER SPECIFIED BUFFER ENTRY SAVREG SAVREG SA1 B1+P.PARAM . CM ADDRESS SB6 16 . LENGTH OF EXCHANGE JUMP PADKAGE SB7 SAVREG1 . GO CHECK FOR LEGAL BUFFER EQ CHKPTR SAVREG1 SB2 A0 . MOVE BUFFER ADDR TO B2 SA0 B1+P.XPACK SX0 =XPACKBUF WECS 16 SA0 B2 RECS 16 EQ SYSRET TITLE RESTORE THE A,B,AND X REGISTERS ENTRY RESTORE * CALL RESTORE(D: ADDRESS OF SAVE AREA) * ERROR IF ADDRESS THROUGH ADDRESS+15 NOT IN SUBPROC FL RESTORE SA1 B1+P.PARAM AP1 - D: ADDRESS OF SAVE AREA SB6 16 TAKE BUF ADDR AND SIZE FOR CHECKING SB7 RESTORE3 EQ CHKPTR RESTORE3 SX1 A0 MOVE BUFFER ADDR FO X1 MX0 60-36 SB2 7 SB3 B1+P.XPACK SB4 15 RESTORE1 SA2 X1+B4 MOVE NO BX6 X2 AN SA6 B3+B4 X-REGISTER SB4 B4-1 GT B4,B2,RESTORE1 RESTORE2 SA2 X1+B4 MOVE BX6 -X0*X2 AN SA3 B3+B4 A- BX3 X0*X3 AND BX6 X3+X6 B-REGISTER SA6 A3 PAIR SB4 B4-1 PL B4,RESTORE2 EQ SYSRET EJECT TITLE BUFFER LEGALITY CHECKER * * ENTRY PARAMETERS - * * X1 = BUFFER POINTER RELATIVE TO USER RA * (JUST LIKE THE USER SUPPLIES IT) * B6 = SIZE OF BUFFER * B7 = RETURN LINK * * AT EXIT - * * A0 = ABSOLUTE ADDRESS OF BUFFER * BUT THE APPROPRIATE ERROR IS GENERATED IF * THE POINTER OR SIZE IS NEGATIVE OR IF THE * BUFER EXCEEDS THE USERS CORE * ENTRY CHKPTR CHKPTR NG X1,NEGPTR ERROR IF POINTER IS NEGATIVE LE B6,B0,NEGSIZ ERROR IF BUFFER SIZE NOT POS SA2 B1+P.XPACK+2 GET USER FL AX2 36 POSITION FL SB6 -B6 A POX ON INCOMPLETE INST SETS SX2 X2+B6 DECREMENT FL BU BUFSIZ IX2 X2-X1 COMPARE WITH BUFADR NG X2,BIGPTR ERROR IF BUFFER EXCEEDS USER CORE SA2 B1+P.XPACK+1 GET USER RA AX2 36 POSITION IT SB6 X2 POX AGAIN SA0 X1+B6 GET ABSOLUTE BUFADR JP B7 EXIT TITLE TEST C-LIST INDEX WITHIN FULL C-LIST * * PARAMETERS - * X1 = INDEX TO CHECK * B7 = RETURN LINK * ENTRY CAPCHK CAPCHK NG X1,NEGINDX . INDEX OUGHTNT BE NEGATIVE SA2 B1+P.CLIST SA2 B1+X2 IX1 X1-X2 NG X1,CAPCHKX . ITS IN THE LOCAL CLIST CAPCHK1 SA2 A2+2 . LENGTH OF NEXT CLIST ZR X2,BIGINDX . OOOPS, NO MORE CLISTS IX1 X1-X2 PL X1,CAPCHK1 . JUMP IF NOT IN THIS CLIST CAPCHKX JP B7 . EXIT - INDEX WAS JUST FINE EJECT TITLE ERROR JUNK * * THATS RIGHT, THIS OPERATION NO LONGER EXISTS * ENTRY CHNGWD CHNGWD SX6 E.OPER SX7 E.IP0 EQ E.ERROR ERRNUMS XTEXT NEGPTR SX7 E.NEGPT EQ CL2 NEGSIZ SX7 E.NEGPAR EQ CL2 BIGPTR SX7 E.BIGPT EQ CL2 NEGINDX SX7 E.NEGIX EQ CL2 BIGINDX SX7 E.BIGIX CL2 SX6 E.PARMS EQ E.ERROR END