.TITLE INIOVR .IDENT /V7.07/ ;******************************************************************* ; ; THIS OVERLAY IS LOADED AND CALLED ONLY ONCE WHEN LOG... ; IS STARTED. IT DETERMINES THE AMOUNT OF SPACE BETWEEN THE ; END OF LOG... CODE AND THE END OF THE PARTITION, WHERE ; USER ACCOUNTING BLOCKS (UABS) ARE ALLOCATED. THIS AMOUNT ; OF SPACE CAN BE INCREASED BY RE-TASKBUILDING FOR A ; LARGER PARTITION (USER-CONTROLLED) OR BY INSTALLING WITH ; AN INCREMENT (SYSTEM-CONTROLLED PARTITION). ; ; VERSION: V6 MAY 1979 ; VERSION: V7 JANUARY 1981 ; ; STEVE THOMPSON SCHOOL OF CHEMICAL ENGINEERING ; OLIN HALL ; CORNELL UNIVERSITY ; ITHACA NY 14853 ; ; REVISION HISTORY ; ---------------- ; ; SMT707 7-JULY-81 SIMULATE A LOGON WHEN LOG... IS STARTED ; SO THAT THE STARTUP FILE DOES NOT HAVE TO ; PERFORM THE LOGOFF/LOGON SEQUENCE. ; ; SMT751 24-SEP-81 CHANGED SIMULATED LOGON FEATURE SO THAT ALL ; TERMINALS IN THE SYSTEM ARE EXAMINED, NOT ; JUST TI: (WHICH DOESN'T WORK IF WE ARE CO:) ; SYSTEM MAY COME UP WITH MORE THAN ONE ; LOGGED-IN TERMINAL. ; ; SMT753 7-OCT-81 CHANGED NAMES OF CONDITIONAL ASSEMBLY ; PARAMETERS; SEE THE FILES MODIFY.TXT AND ; CONDEF.MAC FOR DETAILS. ; ; SMT761 8-OCT-81 ATTACH TO TERMINAL DURING STARTUP. ; ; SMT821 23-APR-82 CHANGED ENTRY POINT NAMES OF ACCOUNTING ; SUPPORT ROUTINES (SEE MODIFY.TXT) ; ;****************************************************************** .MCALL GTSK$S,EXST$S,QIOW$S ; ; ERROR MESSAGES ; .NLIST BEX ERR1: .ASCII /LOG... -- NO BUFFER SPACE/ ERR1SZ=.-ERR1 ; ; TEXT MESSAGES ; .ENABL LC USBF: .ASCII /LOG... -- Maximum number of users = / USBF1: .BLKB 4. .EVEN $INIEP:: ; OVERLAY TRANSFER ADDRESS QIOW$S #IO.ATT,#1,#1 ; ATTACH TI: GTSK$S #$BUF ; GET TASK PARAMETERS BCS 10$ ; JUST IN CASE MOV $BUF+G.TSTS,R0 ; GET TASK SIZE ADD #$$APR,R0 ; CALC. HIGHEST AVAILABLE ADDRESS SUB #<5*2>,R0 ; ALLOCATE A 5 WORD SAFETY ZONE 5$: MOV TASKSZ+2,R1 ; GET ADDRESS OF END OF TASK CODE ADD #2,R1 ; BUMP UP BY TWO MOV R1,$BKBUF ; SET START OF USER BUFFER SUB R1,R0 ; GET SIZE OF USER BUFFER BGT 15$ ; ONLY POSITIVE IS GOOD 10$: MOV #ERR1,$QIO+Q.IOPL ; SET ERROR MESSAGE ADDRESS MOV #ERR1SZ,$QIO+Q.IOPL+2 ; AND MESSAGE SIZE CALL $PRINT ; SEND OUT MESSAGE ; LUN IS ALREADY ASSIGNED TO CO: EXST$S #EX$SEV ; EXIT WITH SEVERE ERROR 15$: MOV R0,-(SP) ; SAVE BUFFER LENGTH MOV #L$LGTH,R1 ; GET LENGTH OF EACH USER PACKET CALL $DIV ; CALCULATE NUMBER OF PACKETS MOV R0,$MXUSR ; SET MAX. NUMBER OF USERS BLE 10$ ; ZERO IS NOT ENOUGH! MOV R0,R1 ; COPY MAXIMUM NO. OF USERS TO R1 MOV #USBF1,R0 ; GET BUFFER ADDRESS FOR STRING CALL DE.CML ; CONVERT TO DECIMAL SUB #USBF,R0 ; CALCULATE STRING LENGTH MOV #USBF,$QIO+Q.IOPL ; SET MESSAGE ADDRESS IN DPB MOV R0,$QIO+Q.IOPL+2 ; AND MESSAGE SIZE CALL $PRINT ; TYPE IT OUT MOV $BKBUF,R0 ; RESTORE BUFFER ADDRESS MOV (SP)+,R1 ; RETRIEVE BUFFER LENGTH ASR R1 ; CONVERT TO WORDS (DIVIDE BY TWO) 20$: CLR (R0)+ ; ZERO A WORD DEC R1 ; ANY LEFT? BNE 20$ ; IF NE YES, LOOP ; ; SIMULATE A LOGON FROM THE INITIATING TERMINAL. WE SCAN THE DEVICE TABLES ; AND LOOK AT EACH LOGGED-ON TERMINAL IN THE SYSTEM. ; MOV $BKBUF,R5 ; GET ADDRESS OF FIRST AVAILABLE UAB (THE ; FIRST ONE IN THE LIST) MOV $MXUSR,R4 ; SET MAXIMUM NUMBER OF UAB'S CALL $SWSTK,30$ ; SWITCH STACKS MOV #$DEVHD,R0 ;; GET DCB CHAIN LISTHEAD ADDRESS 22$: MOV (R0),R0 ;; GET NEXT DCB ADDRESS BEQ 28$ ;; IF EQ, NONE LEFT MOV D.UCB(R0),R1 ;; POINT TO FIRST UCB BIT #DV.TTY,U.CW1(R1) ;; TERMINAL DEVICE? BEQ 22$ ;; IF EQ NO, DO NEXT DCB MOVB D.UNIT+1(R0),-(SP) ;; CALCULATE NUMBER OF UCB'S TO SCAN SUB D.UNIT(R0),(SP) ;; INCB (SP) ;; 24$: BIT #U2.LOG,U.CW2(R1) ;; THIS TERMINAL LOGGED ON? BNE 26$ ;; IF NE NO, SKIP IT MOV R1,L$UCB(R5) ; SAVE THE UCB ADDRESS MOV U.LUIC(R1),L$UIC(R5) ; AND THE LOGON UIC ; THE ACCOUNT NUMBER FIELD AND THE CHAIN ; WORD FIELD REMAIN ZERO. .IF DF AA$CPU ! AA$ENA .IF DF AA$PUO .IF NDF AA$ENB MOV #,L$OPT(R5) ;; CPU /ON AND /DS .IFF MOV #AC.RPT,L$OPT(R5) ;; CPU /ON AND /EN .ENDC ;; NDF AA$ENB .IFF .IF NDF AA$ENB MOV #AC.DIS,L$OPT(R5) ;; CPU /OFF AND /DS .IFF CLR L$OPT(R5) ;; CPU /OFF AND /EN .ENDC ;; NDF AA$ENB .ENDC ;; DF AA$PUO .ENDC ;; DF AA$CPU ! AA$ENA ADD #L$LGTH,R5 ;; POINT TO NEXT UAB DEC R4 ;; ARE THERE ANY LEFT? BEQ 28$ ;; IF EQ NO, ABORT THE SCAN 26$: ADD D.UCBL(R0),R1 ;; POINT TO NEXT UCB DECB (SP) ;; ANY MORE UCBS TO LOOK AT? BNE 24$ ;; IF NE YES TST (SP)+ ;; NO, CLEAN THE STACK BR 22$ ;; AND GO TO THE NEXT DCB 28$: RETURN ;; RETURN TO USER STATE 30$: QIOW$S #IO.DET,#1,#1 ; DETACH TI: RETURN ; RETURN TO ROOT .END