TITLE LOGIN - Program to access the DECsystem-10 SUBTTL DLC/TW/DJB/DAL/RCC/JSL/DAL/LC/HRB/BAH/WCL/KPY/MSL/WSM/DPM/Tarl ; COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION ;1969,1974,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990. ; ALL RIGHTS RESERVED. ; ; ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED ;ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE ;INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER ;COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY ;TRANSFERRED. ; ;THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ;AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT ;CORPORATION. ; ;DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS ;SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL. LGNVER==65 LGNMIN==0 LGNEDT==3016 LGNWHO==0 SEARCH UUOSYM,MACTEN,SCNMAC,ACTSYM,UFDPRM .REQUEST REL:SCAN,REL:WILD,REL:HELPER,REL:UFDSET SALL .DIRECT FLBLST TWOSEG LOC 137 EXP <%%LGN==> RELOC 400000 COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1969,1990. ALL RIGHTS RESERVED. \;END COPYRIGHT MACRO ; TABLE OF CONTENTS FOR LOGIN ; ; ; SECTION PAGE ; 1. Table of contents......................................... 2 ; 2. Edit history.............................................. 3 ; 3. Debugging patch for the monitor........................... 19 ; 4. Definitions ; 4.1 Assembly parameters............................... 20 ; 4.2 AC assignments.................................... 21 ; 4.3 Flags in AC F..................................... 22 ; 4.4 Command bits and offsets.......................... 23 ; 4.5 Message macros.................................... 24 ; 5. Program initialization.................................... 25 ; 6. Command processing ; 6.1 Initialization and dispatch....................... 30 ; 6.2 ATTACH - ATTACH command........................... 31 ; 6.3 KJOB - KJOB command............................... 32 ; 6.4 DOLOG - LOGIN command............................. 33 ; 6.5 REATTA - REATTACH command......................... 35 ; 6.6 SESSIO - SESSION command.......................... 36 ; 6.7 SETPSW - SET PASSWORD command..................... 37 ; 6.8 PASSWO - PASSWORD command......................... 38 ; 6.9 TRANSL - TRANSL command........................... 39 ; 7. EXIT routines ; 7.1 FLUSH - Special error processing.................. 41 ; 8. Exit routines ; 8.1 MONRET - Exit program............................. 42 ; 8.2 RICC - Control-C trapping......................... 43 ; 8.3 SUMARY - Print KJOB summary....................... 44 ; 8.4 XITMON - Code to exit to the monitor.............. 48 ; 8.5 XITRUN - Code to do a RUN UUO..................... 49 ; 8.6 DAYMES - Print daily messages..................... 50 ; 9. Accounting routines ; 9.1 ACCCHK - Check for a previous valid LOGIN......... 51 ; 9.2 ACTCHK - Check for [SYSTEM]ACCOUNTING............. 52 ; 9.3 CHGNAM - Change name.............................. 53 ; 9.4 CHGPSW - Change password.......................... 54 ; 9.5 LOKCHK/LOKWRN - Check for locked files............ 55 ; 9.6 PFLCHK - Profile check............................ 56 ; 9.7 PSWCHK - Check for a legal password............... 57 ; 9.8 PPNEXP - Check for PPN/PSW expiration............. 58 ; 9.9 SETTNL - Set up terminal designator for USAGE..... 59 ; 9.10 STACCT - Read a user profiles..................... 60 ; 9.11 TIMCHK - Check for access times................... 64 ; 10. KJOB routines ; 10.1 CHKQTA - Main quota checking loop................. 65 ; 10.2 INIQTA - Initialize the list of structures........ 66 ; 10.3 NXTQTA - Get next structure in search list........ 67 ; 10.4 RESQTA - Restore this job's search list........... 68 ; 10.5 LGTBAT - Batch deletion algorithm................. 69 ; 10.6 STEP1 - Delete files that are too large........... 70 ; 10.7 STEP2 - Delete FIRST files........................ 71 ; 10.8 STEP3 - Get all other unIMPORTant files........... 72 ; 10.9 STEP4 - Delete rest of FIRST files................ 73 ; 10.10 STEP5 - Delete unprotected IMPORTant files........ 74 ; 10.11 STEP6 - Delete rest of unIMPORTant files.......... 75 ; 10.12 STEP7 - Delete the rest of the files.............. 76 ; 10.13 BATLKP - Routine to LOOKUP a file................. 77 ; 10.14 BATDEL - Routine to DELETE a file................. 78 ; 10.15 BATALL - Setup to LOOKUP STR:[,,**]............... 81 ; 10.16 BATEXT - Setup to read *.EXT[*,*,*,*,*]........... 82 ; 10.17 BATNXT - Routine to call .LKWLD................... 83 ; 11. File I/O ; 11.1 DELFIL - Delete a single file..................... 84 ; 11.2 INIFIL - Initialize I/O data storage.............. 86 ; 11.3 NEWFIL - Check file creation time................. 87 ; 11.4 NOTE - Print file(s) specified by /NOTE switch.... 88 ; 11.5 NOTICE - Print NOTICE.TXT......................... 89 ; 11.6 STRMES - Print STR.TXT............................ 90 ; 11.7 LGNMES - Print LOGIN.TXT.......................... 91 ; 11.8 TYPE - Print a file on the terminal............... 92 ; 12. Command dispatch tables................................... 93 ; 13. Command scanning routines ; 13.1 ERRUKK/ERREXA/ERRILC - Error messages............. 94 ; 13.2 GETUSR - Read PPN/path/user name.................. 95 ; 13.3 PSCAN - Init scanning of switches................. 100 ; 13.4 PXSCAN - Init scanning one argument............... 101 ; 13.5 SCMPMT - SCAN prompt.............................. 102 ; 13.6 SWTSCN - Parse switches........................... 103 ; 14. Prompt for additional data ; 14.1 ASKACT - Read account string...................... 104 ; 14.2 ASKATT - Read detached job# for ATTACH............ 105 ; 14.3 ASKLOG - Read detached job# for LOGIN............. 106 ; 14.4 ASKNAM - Read user name........................... 107 ; 14.5 ASKPSW - Read password(s)......................... 108 ; 14.6 ASKRMK - Read remark string....................... 111 ; 15. SCAN argument blocks ; 15.1 .ISCAN............................................ 112 ; 15.2 .OSCAN............................................ 113 ; 15.3 .PSCAN............................................ 114 ; 16. SCAN switch tables ; 16.1 ATTACH command.................................... 115 ; 16.2 KJOB command...................................... 117 ; 16.3 LOGIN command..................................... 119 ; 16.4 [SET] PASSWORD COMMAND............................ 121 ; 16.5 REATTA command.................................... 123 ; 16.6 SESSION command................................... 125 ; 16.7 TRANLS command.................................... 127 ; 16.8 /BATCH switch..................................... 129 ; 16.9 /DEFAULT switch................................... 131 ; 16.10 /TERMINAL switch.................................. 133 ; 17. SCAN switch processing ; 17.1 ACCTSW - /ACCOUNT................................. 135 ; 17.2 ASGNSW - /ASSIGN.................................. 136 ; 17.3 BATCSW - /BATCH................................... 137 ; 17.4 BATNAM - /BATCH:NAME.............................. 138 ; 17.5 DEFASW - /DEFAULT................................. 139 ; 17.6 DSKPSW - /DSKPRIORITY............................. 140 ; 17.7 QUOTSW - /QUOTA................................... 141 ; 17.8 RMRKSW - /REMARK.................................. 142 ; 17.9 TERMSW - /TERMINAL................................ 143 ; 17.10 HELPTB - Keyword help typeout..................... 144 ; 17.11 KEYWRD - Complex switch argument parsing.......... 145 ; 17.12 SWITCH - Read SWITCH.INI.......................... 147 ; 18. SCAN switch defaulting ; 18.1 TTYDEF - Terminal parameters...................... 148 ; 19. Set routines ; 19.1 ASNDEV - Assign devices........................... 149 ; 19.2 CRESFD - Create SFDs.............................. 150 ; 19.3 PRETMS/POSTMS - Set terminal parameters........... 151 ; 19.4 PRVSET - Set all privileged parameters............ 152 ; 19.5 USRSET - Set all unprivileged parameters.......... 153 ; 19.6 SETACT - Set account string....................... 154 ; 19.7 SETCOR - Set core limits.......................... 155 ; 19.8 SETCTX - Set context quotas....................... 156 ; 19.9 SETDEF - Set DEFAULT.............................. 157 ; 19.10 SETDSF - Set DSKFUL............................... 158 ; 19.11 SETDSP - Set DSKPRIORITY.......................... 159 ; 19.12 SETENQ - Set ENQ/DEQ parameters................... 160 ; 19.13 SETGLX - Set GALAXY batch parameters.............. 161 ; 19.14 SETIPC - Set IPCF quotas.......................... 162 ; 19.15 SETLOC - Set job's location for spooling.......... 163 ; 19.16 SETPTH - Set PATH................................. 164 ; 19.17 SETSCD - Set scheduler parameters................. 165 ; 19.18 SETSPL - Set spooling parameters.................. 166 ; 19.19 SETVMX - Set current virtual and physical limits.. 167 ; 19.20 SETWAT - Set watch bits........................... 168 ; 19.21 SETXXX - Do a SETUUO.............................. 169 ; 19.22 TRMOP - TRMOP. UUO loop processor................. 170 ; 20. Structure routines ; 20.1 BLDJSL - Build job S/L............................ 172 ; 20.2 MNTSTR - Mount structures (set RIPLOG)............ 173 ; 20.3 SSLCOP - Copy the system search list.............. 174 ; 20.4 ENTPTH - Create a path............................ 175 ; 20.5 STRCHK - Check recomp, empty S/L, etc............. 176 ; 20.6 STRPUT - Store structure name..................... 177 ; 20.7 STRNXT - Return next structure.................... 178 ; 20.8 STRQTA - Check for /QUOTA on structure............ 179 ; 21. TTY I/O ; 21.1 TTYPMT - Prompt................................... 180 ; 21.2 TTYGET - Read a character......................... 181 ; 21.3 TTYPUT - Write a character........................ 182 ; 22. PSI routines ; 22.1 PSINIT - Initialization........................... 183 ; 22.2 PSIDET - Handle ATTACH/DETACH conditions.......... 184 ; 23. UFD setup ; 23.1 UFDSET - Call .UFD to mount/setup STR/UFD......... 185 ; 23.2 UFDRCP - Recompute disk usage on random structures 186 ; 23.3 UFDDMO - Dismount a structure..................... 187 ; 23.4 UFDTYO - Handle typeout of errors from .UFD....... 188 ; 23.5 UFDINI - Initialize block......................... 189 ; 23.6 ADDSTR - Add a structure to search list........... 190 ; 23.7 GETLOK - Get UFD interlock........................ 191 ; 23.8 CLRLOK - Clear the UFD interlock.................. 192 ; 24. Usage entry creation ; 24.1 USGATT - Attach................................... 193 ; 24.2 USGLOG - Login.................................... 194 ; 24.3 USGQUE - Set up QUEUE. UUO blocks................. 195 ; 24.4 USGSES - Session.................................. 196 ; 24.5 USGVAL - Validate an account string............... 197 ; 25. WTO routines ; 25.1 WTOINI - Initialize WTO message................... 198 ; 25.2 WTOSND - Send a WTO to OPR........................ 199 ; 25.3 WTOCTY - Send text to the CTY if OPR not available 200 ; 26. Miscellaneous routines ; 26.1 ACCLOG - Perform LOGMAX and BATMAX checking....... 201 ; 26.2 ATTJOB - ATTACH the job........................... 202 ; 26.3 ATTLGL - Check for a legal ATTACH................. 203 ; 26.4 AVLCHK - Check system availability................ 204 ; 26.5 BANNER - Print LOGIN banner....................... 205 ; 26.6 CHRTRN - Translate 8-bit ASCII strings............ 206 ; 26.7 CTXINI/CTXUUO - Execute context UUOs.............. 209 ; 26.8 CTYCHK - Check CTY status......................... 210 ; 26.9 DAYTIM - Print time, date, and weekday............ 211 ; 26.10 TRMCLS - Clear screen function.................... 212 ; 26.11 DELTMP - Delete TMP files......................... 215 ; 26.12 DETJOB - Report detached jobs..................... 217 ; 26.13 DETSTS - Print detached job status................ 218 ; 26.14 ERRMSG - Error message handler.................... 219 ; 26.15 FAILUR - Check for access failures................ 222 ; 26.16 GENTIM - Generate day-of-week and times data...... 223 ; 26.17 ISBATC - Determine if a batch job................. 224 ; 26.18 ISOPSR - Determine if a subjob of OPSER........... 225 ; 26.19 KSYCHK - Check pending KSYS....................... 226 ; 26.20 LGLACT/LGLRMK - Check strings..................... 227 ; 26.21 LOGJOB - LOGIN the job............................ 228 ; 26.22 MAILCH - Check for mail........................... 229 ; 26.23 MAPJOB - Map all jobs with same PPN............... 230 ; 26.24 NEWPPN/OLDPPN - Change PPN........................ 232 ; 26.25 CHKLPN - check Logged-in PPN...................... 233 ; 26.26 OTHJOB - Report other jobs same PPN............... 234 ; 26.27 PTHCHK - Check a path spec........................ 235 ; 26.28 PRTPLR - Pluralize strings........................ 236 ; 26.29 PRTPPN - Print a PPN.............................. 237 ; 26.30 PRTUSR - Print a PPN and name..................... 238 ; 26.31 PPNCHK - Check for illegal PPNs................... 239 ; 26.32 QUEERR - Process QUEUE. UUO errors................ 240 ; 27. Old LOGIN cruft........................................... 241 ; 28. Low segment variables..................................... 244 SUBTTL Edit history ;316) FIX TEST FOR WEEKEND TO PREVENT NON-PRIME-TIME USERS FROM ; LOGGING IN DURING PRIME TIME (SPRS 10-14,021 AND 10-14,046) ;317) ENLARGE PARAMETER BLOCK FOR STRUUO SO POINTER TO AUXACC ; ENTRY (RDHED) DOESN'T GET OVERWRITTEN. ; SPRS 10-14,219 AND 10-14,083 ;320) MAKE LOGIN PREFIX EACH STR.TXT TYPEOUT WITH THE NAME OF THE ; FILE STRUCTURE FROM WHICH IT CAME. SPR 10-14,031 ;321) REALLY IMPLEMENT /HELP (SPR 10-14,031) ;322) CHANGE PREFIX FOR WARNING ERROR MESSAGES FROM ? TO % ; TO PREVENT BATCH JOBS FROM FLUSHING. ; SPRS 10-14,145 AND 10-14,172. ;323) FIX SECURITY BREACH WHERE BOTH NAME AND PSWD ARE REQUIRED AND ; NEITHER IS ASKED FOR. SPR 10-14,306. ;324) PUT IN TEST SO SETUUO IS SKIPPED IF NO BITS WANT TO BE SET. ; SPR 10-14190. ;325) FIX ?LGNIPS IF NO SPACE BETWEEN PPN AND SWITCHES. ; SPR 10-14,031 ;326) MOVE MISPLACED CLOSE CONDITIONAL (SPR 10-14,244) ;327) MAKE LOGIN LOOK AT PHYSICAL CORE LIMIT EVEN IN KA MONITORS. ; SPR 10-14,264. ;330) ALLOW PPN TO BE ENCLOSED IN SQUARE BRACKETS ON LOGIN. ;331) REMOVE ALL REFERENCES TO FL.BRK -- OBSOLETE BATCH HACK. ; SPR 10-14,021. ;332) IMPLEMENT /NOWATCH SPR 10-14,145 ;333) FIX EDITS 221 AND 226 SO LOGIN REALLY WON'T PRINT NOTICE.TXT ; TO AN OPSER SUBJOB. ;334) MAKE LOGIN SLEEP BETWEEN RETRIES AFTER BAD PASSWORDS ONLY ; ONLY ON PTY'S. SPR 10-14,021. ;335) CLEAR TMPCOR AT BEGINNING OF FLOW RATHER THAN END ; SO /TMPCOR SWITCH WORKS. ;336) FIX EDIT 332, WHICH ONLY DID HALF THE JOB. ;337) FIX EDIT 333, WHICH COMPLETELY MADE NOTICE.TXT GO AWAY, OPSER ; SUBJOB OR NOT! ;340) MAKE ISOPSR ONLY LOOK AT IMMEDIATELY CONTROLLING JOB SO ; NOTICE.TXT WILL GET PRINTED FOR BATCH JOBS. ;341) ANOTHER FIX TO THE INFAMOUS EDIT 333, WHICH SOMETIMES ; TURNED THE TTY INTO A LOCAL COPY TERMINAL ; (SUPER NO-ECHO). ;342) WHEN SETTING UP TEMP SEARCH LIST TO READ SWITCH.INI, ONLY LOOK ; AT STRS WHOSE NAMES BEGIN WITH DSK (DSKA, DSKB, ETC.). ;343) EXIT ON ^Z. ;344) IMPLEMENT SWITCHES TO SET TERMINAL CHARACTERISTICS. ;345) FIX TO EDIT 344 WHERE JOBS WHICH DIDN'T NEED PASSWORDS ; DIDN'T GET TTY CHARACTERISTICS SET. ;346) WHEN SETTING UP TO READ SWITCH.INI, ENABLE SYS (IN CASE ; OF SYSTEMS WITH FUNNY-NAMED FILE STRUCTURES). ;347) PRINT NOTICE.TXT AND /NOTE:FILE EVEN IF CAN'T LOG IN ; (SYS NOT AVAILABLE, BATCH ONLY, ETC.) ;350) MAKE LOGIN GET NAME IF REQUIRED ON ATTACH ; (SPR 10-14,593) ;351) MISCELLANEOUS CODE CLEANUP AND SPEEDUP. ;352) ADD CODE TO SET ENQ/DEQ QUOTAS. ;353) MAKE SURE RP.LOG GETS SET WHEN RECOMPUTING DISK USAGE. ;354) ADD "SYSTEM IS UNATTENDED" MESSAGE ;355) MAKE /NAME LOGIC WORK RIGHT. ;356) ADD CHECK FOR ACCT.SYS FORMAT VERSION 4 AND DON'T ; SET ENQ/DEQ QUOTAS IF NOT VERSION 4. ;357) MISCELLANEOUS CODE CLEANUP ON SUGGESTIONS BY DAL. ;360) MORE CODE CLEANUP. ;361) IF DEVPPN ON SYS FAILS, WE USE GARBAGE. LET'S USE [1,4]. ;362) MAKE /NOTE PRINT OUT BEFORE NOTICE.TXT. ;363) DO ALL NON-PRIV. SETUUO'S AFTER PRINTING NOTICES. THIS IS SO ; THE TRMOP.'S (LIKE SPEED) WON'T SCREW UP PRINTING NOTES. ;364) DON'T SETUUO THE SPOOL BITS IF SYSTEM DOESN'T HAVE SPOOLING. ;365) ADD /DEFER AND /NODEFER SWITCHES, AND PREVENT /SPOOL:ALL FROM ; SETTING BIT FOR DEFERRED SPOOLING. ;366) FIX BUG INTRODUCED BY EDIT 324 WHERE /DSKFUL:PAUSE NO LONGER ; WORKS. ;367) ADD CODE TO SLEEP UNTIL OUTPUT BUFFER EMPTY BEFORE DOING ; TRMOP.S WHICH MIGHT GARBLE TTY OUTPUT. ;370) REMOVE ALL REFERENCES TO DATE75 CONDITIONAL ;371) CODE CLEANUP. ;372) MAKE LGNUNV INTO A SEPARATE (UNIVERSAL) FILE TO SPEED ASSEMBLY. ;373) ADD ERROR MESSAGE IN CASE SETUUO FOR DEFER BIT FAILS. ;374) CHECK ST%GAL (GALAXY) BIT IN 2ND STATES WORD AND DON'T TRY ; TO SET DEFER BIT IF ZERO. ;375) IMPROVE ERROR MESSAGE IF TRMOP. FAILS TO TELL FUNCTION CODE. ;376) IF USER TYPES BAD PATH OR PSWD AND RETRIES, HIS PATH ; IS SCREWED UP. FIX: CLEAR PATH BLOCK EACH TIME AROUND. ;377) DON'T DOUBLE-SPACE /NOTE OR /STR TYPEOUT ;400) ADD FTINHOUSE CONDITIONAL AND ENCLOSE IN IT THE CODE ; WHICH WILL ONLY ALLOW FILE STRUCTURES WHOSE NAMES BEGIN WITH ; 'DSK' TO GO INTO YOUR SEARCH LIST WHEN READING SWITCH.INI. ; THIS CODE FIXES THE BUG IN WHICH SWITCH.INI WAS NOT READ ; IF 7 OR 8 PRIVATE PACKS PRECEDE THE PUBLIC PACKS IN THE ; RETURNS FROM SYSSTR. SINCE THIS IS ONLY A PROBLEM IN ; SYSTEMS WITH 9 OR MORE FILE STRUCTURES, THE CODE WILL BE ; CONDITIONED OUT IN FIELD-IMAGE. ;401) PREVENT /MESSAGE:ALL FROM TURNING ON RANDOM WATCH BITS ;402) RANDOM CODE CLEANUP -- ALSO REMOVE CODE FOR ENQ/DEQ SO IT ; CAN BE PUT INTO V57 ALONG WITH SCHED. STUFF IN ; ONE FELL SWOOP ;403) IMPROVE LOGIC FOR READING AUXACC.SYS ;404) (SIGH) FIX EDIT 333 AGAIN. ;405) REMOVE EDIT 372. ;406) SLEEP ON DATASETS AS WELL AS PTY'S FOR RETRIES. ;**** RELEASE VERSION 56 -- -- START VERSION 57 **** ; NEXT EDIT NUMBER WILL BE 420 TO LEAVE ROOM FOR ; MAINTENANCE EDITS. ;420) CHECK LINE NUMBER JUST BEFORE ATTACH UUO SO JOB WHICH ; BECOMES DETACHED DURING ATTACH COMMAND CAN'T STEAL TTY0 ; [SPR 15329] ;421) FIX TEST FOR DETACHED LINE. [SPR 15330] ;422) FIX BUG IN RECOMPUTING LOGIC. [SPR 15396] ;423) ADD /RTCOMPATABILITY SWITCH. ;424) MAKE LOGIN USE ALL OF HIGH SEG FOR ACCT.SYS (LOGIN ; USED TO ALWAYS EXPAND CORE EVEN IF NOT NECESSARY) ;425) ADD CODE TO READ SCDMAP.SYS AND SET SCHEDULER CLASSES. ;426) FIX ENQ/DEQ QUOTA ROUTINE. ;427) CHECK FOR END OF STR LIST IN SYSTEMS WITHOUT FENCE AT USRST1. ;430) MAKE A -1 ENQ QUOTA ENTRY MEAN DON'T SET THE QUOTA SO ON THE ; FIRST ENQ UUO MONITOR WILL SUPPLY SYSTEM-WIDE DEFAULT QUOTA ;431) JUMP AROUND ABOUT 30 INSTRUCTIONS IF NON-6.02 MONITOR ; WHICH ONLY APPLY TO 6.02. AREA AFFECTED: PRVSET, PRSET3. ;432) DO A CRLF AFTER TYPING "NO OPERATOR COVERAGE." ;433) FIX POSSIBLE BUG IN SCHED. TABLE BUILDING LOGIC, AND CLEAN ; UP SOME CODE AND ERROR MESSAGES. ;434) ALLOW /HELP TO BE TYPED WITHOUT A PPN ;435) ALLOW CR IN RESPONSE TO # PROMPT WITHOUT NASTY ERROR MESSAGE ;436) ADD CODE TO CALL TSKCHK MODULE. THIS IS USED ON OUR IN-HOUSE ; TIMESHARING SYSTEM TO ASK FOR AND RECORD IN THE FACT FILE ; A COST CENTER AND TASK FOR ACCOUNTING PURPOSES. THIS CODE ; IS UNDER THE FTTASK SWITCH WHICH WILL REMAIN 0 IN FIELD IMAGE. ; THIS CODE IS FOR INFORMATIONAL PURPOSES ONLY AND IS NOT ; SUPPORTED. [NOTE SWITCH REMOVED AS PART OF EDIT 716] ;437) WHEN LOGIN BELIEVES IN ENQ/DEQ AND SCHED. CLASSES, IT ; FORGETS ALL ABOUT VM. FIX - SET NEWACT=-1 IF ACCT.SYS ; VERSION NUMBER IS 3 OR GREATER (NOT JUST 3). ;440) WHEN SAYING "OTHER JOBS SAME PPN", TELL HIM WHAT JOBS. ;441) MAKE START ADDRESS AND PROGRAM NAME WORK RIGHT. ;442) MOVE CALL TO .OSCAN SO A) USER HAS SEARCH LIST WHEN IT IS ; CALLED AND B) /NAME SWITCH WORKS CORRECTLY WITHOUT THE ; NECESSITY OF HACKS LIKE EDIT 355. ;443) FINISH THE JOB OF EDIT 442 BY REMOVING (AT LAST!) SETTMP ; AND CLRTMP. ;444) ADD TWO ROUTINES: LOCK TO WRITE-ENABLE HI SEG AND LOCK ; OUT CTRL-C AND OTHER JOBS WHO WANT TO MODIFY HI SEG, AND ; UNLOCK TO DO THE REVERSE. ;445) DON'T TELL [1,2] JOBS WHICH JOBS ARE ALSO LOGGED IN UNDER ; [1,2] - THERE'RE USUALLY VERY MANY AND YOU DON'T WANT TO KNOW ;446) FIX SPURIOUS ERROR MESSAGE IN TINY MONITOR, AND DO SOME ; RANDOM CODE CLEANUP ;447) MAKE .LOGIN [PROJ,PROG,SFD,SFD,..]/SWITCH WORK ;450) ADD /NOTICE:ARG SWITCH TO CONTROL PRINTING OF NOTICE.TXT ; ARG=ALWAYS TO ALWAYS SEE NOTICE ; ARG=SOMETIMES TO WORK LIKE PROJ/PPN ; ARG=NEVER TO NEVER SEE IT ;451) ALLOW USER TO SPECIFY DIFFERENT DEFAULT PATH THEN LOGGED-IN ; PPN ;452) USE SECOND 512 ENTRIES OF SCDMAP.SYS FOR BATCH JOBS. ;453) MAKE DEFAULT FOR /NOTICE BE SOMETIMES. ;454) FIX BUG IN SFD LOGIC AND TYPO IN /NOTICE LOGIC. ;455) MAKE /VERBOSITY WORK RIGHT. ;456) USE BUFFERED TTY OUTPUT. THIS WILL SPEED UP LOGIN IN ; REAL TIME ON HEAVILY-LOADED DUAL-CPU SYSTEMS. ;457) ADD /PATH SWITCH TO DO THE OBVIOUS THING. THIS WILL OVERRIDE ; A PATH TYPED ON THE LOGIN COMMAND LINE - I.E., ; .LOG [34,35,FOO]/PATH:[24,25,BAR] WILL LOG THE USER IN ; TO [34,35] WITH A PATH OF [24,25,BAR]. ;460) WHEN RECOMPUTING DISK USAGE, DO AN OUTPUT TTY AFTER EACH ; STR SO USER THINKS SYSTEM IS STILL ALIVE ;461) SPRINKLE A FEW OUTPUT TTY,S THROUGHOUT LOGIN SO STUFF ; GETS TYPED A LITTLE AT A TIME, RATHER THAN A LONG ; WAIT AND THEN A GUSH OF TTY OUTPUT. ALSO, RELEASE TTY ; BEFORE ATTACH SO 2,5 JOBS DON'T GET LEFT LYING AROUNG ; IN TO WAIT. ;462) WHEN ATTACHING TO A JOB WHOSE PPN REQUIRES NAME, ONLY ASK ; NAME IF THERE IS ONE IN ACCT.SYS TO CHECK IT AGAINST ;463) FIX POSSIBLE BUG IN SCHED. TABLE LOGIC ;464) REMEMBER TO RESERVE BATMIN JOBS FOR BATCH - I.E., FOR A T/S JOB, ; ALLOW LOGIN ONLY IF LOGMAX-BATMIN-LOGNUM+BATNUM>0 [SPR 10-15847] ;465) ADD OUTPUT TTY, TO TYPE RTN TO KEEP USERS PATIENT. ;466) SAVE ERROR CODE OVER CALL TO UFDSMB AT LGNCAS. [SPR 10-15873] ;467) MAKE /PATH IN SWITCH.INI WORK. ;470) ADD /ASSIGN:PHYS:LOG SWITCH TO DO THE OBVIOUS. ;471) IN EDIT 467, AT NOZAP-1, THE BLT DIDN'T HAVE A -1 AFTER IT ; SO IT BLT'ED THE SPOOL BITS. FIX: ADD A -1. ;472) SPLIT TRMOP.S INTO TWO CLASSES - THOSE WHICH SHOULD BE DONE ; BEFORE PRINTING NOTICE.TXT, AND THOSE WHICH SHOULD BE DONE ; AFTER. CURRENTLY ONLY SPEED IS SET AFTER PRINTING NOTICES. ;473) /ASSIGN:DEV (NO LOG. NAME) MAKES SCAN HALT. FIX: IF EOL IS ; SEEN WHILE PROCESSING /ASSIGN, SET FLAG (R.EOL) SO NO MORE ; INPUT WILL BE DONE AND REEAT ONE CHAR SO SCAN WILL SEE EOL. ;474) FIX POSSIBLE STACK PHASE PROBLEM IN PARSE. ;475) ADD TIMEOUT TO WAITO ROUTINE IN LGNSET & CLEAN UP SOME CODE ;476) FIX BAD RETURN FROM ERROR RECOVERY ROUTINE IN LGNDSK (UFDSE3) ;477) CHECK LOGMAX FOR BATCH JOBS AND ADD A NEW CLASS OF ERROR MESSAGE ; FOR BATCON: REQUE, ERROR CODE 5, MEANING REQUE THIS JOB AND ; DON'T SCHEDULE ANYBODY ELSE FOR A LITTLE WHILE ;500) REMOVED BY EDIT 505. ;501) WHEN SCANNING THRU ALL JOB NUMBERS, SCAN UP TO HIGHJOB, NOT ; LOGNUM. ;502) IN A SEQUENCE OF /ASSIGNS, THE LAST ONE IS NOT DONE. ; CURE: CHANGE AOJL TO AOJLE. ;503) WHEN LOGMAX IS EXCEEDED LOGIN TELLS YOU AND THEN CLEVERLY ; PROCEEDS TO LOG YOU IN. FIX: TREAT REQUE AS A FATAL ERROR. ;504) EQACT WAS MISTAKENLY PUT IN THE LOW SEG. PUT IT IN THE HI SEG. ;505) REMOVE EDIT 500, AND CHECK BATMAX RATHER THAN LOGMAX FOR BATCH ; JOBS. LOGMAX IS NOW DEFINED TO MEAN THE GREATEST NUMBER OF ; INTERACTIVE, USER JOBS LOGGED IN. ALSO ADD CONDITIONAL ASSEMBLY ; SWITCH BATMAX WHICH WILL TURN ON THE NEW BATMAX/LOGMAX ; CODE. THIS REQUIRES EDIT 1055 IN BATCON. ;506) MAKE .LOG 3,4[5,6] WORK. ;507) ADD AN ERROR MESSAGE IF THE ENQC. UUO FAILS. ;510) CLEAN UP SOME ERROR MESSAGES AND ADD SOME HUMAN ENGINEERING. ;511) FIX BUG IN /CORE LOGIC; ADD SOME ERROR MESSAGES FOR 'THIS ; CAN NEVER HAPPEN' TYPE STUFF; DO SOME CODE CLEANUP. ;512) ADD A CHECK IN TYPE ROUTINE TO POPJ RIGHT OUT IF NAME ; OF FILE IS 0 (NO NAME, NO WILDCARDS) TO AVOID AN ; INCREDIBLY BIZARRE BUG IN WILD. ;513) DON'T TURN ECHO OFF UNTIL ENTIRE COMMAND LINE(S) TYPED, ; SO CONTINUATION LINES WILL ECHO. ;514) IF UFD INTERLOCK IS BUSY TOO LONG GET NASTY AND BREAK ; THE DOOR DOWN. ;515) MAKE SURE RP.LOG ALWAYS GETS SET [QAR 3638] ;516) CODE CLEANUP. ;517) DON'T TYPE 'NO OPERATOR COVERAGE' ON EVERY RETRY. ;520) DON'T BOTHER CLEARING TMPCOR, CLEAN UP SOME COSMETICS. ; ALSO LOCK OUT CTRL-C WHILE WE HAVE UFD INTERLOCK. ;521) FIX HANDLING OF /CORE. ; THIS WILL BE LAST EDIT IN VERSION 57. NEXT EDIT NUMBER ; WILL BE 540 TO LEAVE ROOM FOR MAINTENANCE EDITS. ;540) CHECK CREATION DATE-TIME OF ACCOUNTING FILES AND REBUILD ; HIGH SEGMENT DATA BASE IF THEY HAVE CHANGED. ;541) IF NOT JACCTED, GIVE WARNING MESSAGE. ;542) FIX /VERB AND /MESSAG. ;543) MOVE CALL TO RNMAIL TO BEFORE THE LOGIN UUO SO IT HAS ; JACCT AND CAN RENAME MAIL TO USER'S AREA. ;544) .REQUEST SCAN, WILD, AND HELPER TO SIMPLIFY ASSEMBLY & LOADING ;545) FIX ONE MORE BUG IN /CORE. ;546) DETERMINE WHETHER TTY IS A 2741 EARLIER SO IF WE DO THE ; NUMBER-SIGN PROMPT WE GO INTO TI WAIT RATHER THAN ; HIBERNATING SO THE KEYBOARD UNLOCKS. ;547) ALLOW /QUOTA TO FORCE RECOMPUTING EVEN IF OTHER JOBS SAME PPN. ;550) ADD /SFDPROT:055 SWITCH TO DO THE OBVIOUS. ;551) REWROTE CODE AT NSPOOL+1 SO /CORE WILL FINALLY WORK CORRECTLY ;552) REORDERED CODE AROUND ACCT1 THRU ACCT3 AND MOVED ; CODE FOR TYPING DATE AND TIME TO DAYMES, ; WHERE IT BELONGS ;553) FIX BUG IN WAITO ROUTINE. ;554) ADD /UFDPROT:N SWITCH TO DO THE OBVIOUS. ;555) DON'T ALLOW ATTACHES AFTER KSYS UNLESS OPR OR SON-OF-OPR ;556) CLEAN UP THE LISTING ;557) ADD 2 SECURITY FEATURES. ASSEMBLY SWITCH NCRYPT CAUSES CODE TO ; BE GENERATED TO ENCRYPT PASSWORDS BEFORE COMPARING THEM TO THE ; PASSWORD IN ACCT.SYS (WHICH WAS ENCRYPTED BY REACT ALREADY). ; THE ENCRYPTION FUNCTION IS A NON-INVERTIBLE FUNCTION SO HACKERS ; CAN READ ACCT.SYS ALL THEY WANT AND NOT GET INTO SOMEONE'S PPN. ; ASSEMBLY SWITCH PSWCHG ALLOWS USERS TO CHANGE THEIR OWN PSWDS ; AT LOGIN TIME BY SPECIFYING THE /PASSWORD SWITCH IN THE LOGIN ; COMMAND LINE. THIS CAUSES LOGIN TO PROMPT FOR A NEW PASSWORD ; AND WRITE IT INTO ACCT.SYS. NOTE: THE ENCRYPTION FEATURE ; REQUIRES VERSION 32 OF REACT. ;560) REMOVE THE SIGNIFICANCE OF SLASH IN PPN (REPLACED BY /NOTICE) ;561) DO AN EXTENDED LOOKUP OF THE FACT FILES SO WE ALWAYS GET ; THE FILE'S LENGTH IN WORDS AND DON'T MAKE FACT.SYS SEEM ; TO BE MESSED UP (HIATUS RECORDS). ;562) IF WE GET THE SKIP RETURN FROM THE IN UUO THAT READS ; ACCT.SYS, CHECK THE ERROR CODE RATHER THAN ASSUMING THAT IT ; IS END-OF-FILE. IF IT ISN'T, GIVE A MORE ILLUMINATING ERROR ; MESSAGE THAN "INVALID ENTRY - TRY AGAIN". ;563) DON'T ENABLE CONTROL-C IF THE USER IS LOCKED INTO RUNNING ; A PROGRAM BY ACCT.SYS. ;564) CLEAN UP THE EXIT SEQUENCE. ;565) RE-INIT STACK EVERY TIME THROUGH LOGIN3. ;566) TURN RP.LOG OFF IF USER CONTROL-C'S DURING RECOMPUTING ; SO HE WON'T RECOMPUTE NEEDLESSLY NEXT TIME. ;567) IF EITHER HALF OF LIB PPN IS ZERO, USE USER'S HALF AS DEFAULT. ;570) CLEAN UP THE CODE. ;571) REMOVE FACT FILE CODE FROM LOGIN. MOVE IT TO A SEPARATE MODULE ; CALLED FACTOR AND CALL THIS MODULE FROM LOGIN. ;572) ADD CHECK TO BYPASS BLANK AUXACC.SYS ENTRIES. ;573) FIX ?LGNSND ERROR IN MONITORS WITH LIMLVL=5. ;574) SAVE M, N, AND CH OVER STUFBS IF THE MESSAGE IS TYPED ; SO GARBAGE QUOTAS ARE NOT TYPED. ;575) MAKE BATCH JOBS WAIT TWICE AS LONG ON UFD INTERLOCKS ; AS INTERACTIVE JOBS, AND DON'T LET THEM BREAK IT DOWN. ;576) FIX ?ILL MEM REF WHEN CUSP-TO-RUN DOESN'T EXIST ;577) ALLOW LOGIN WITH NO AUXACC.SYS IF OPR OR HIS OFFSPRING ;600) DON'T TYPE ERROR SEVERITY TO ANYTHING BUT A BATCH JOB. ;601) ADD TWOSEG TO LGNDCL MACRO SO LOGIN COMPILES WITH ; MACRO V.51 ;602) CHECK JBTLIM TO SEE IF BATCH JOB SO WE DON'T DEPEND ; ON BATCON BEING CALLED BATCON ;603) CHECK TIMES-TO-LOG IN FOR BATCH JOBS AND AC.BAT ;604) FIX PROBLEM WITH 2ND TRY AT LOGGING IN WITH /ASSIGN ; GIVES ? NULL DEVICE ILLEGAL FROM SCAN ;605) REWRITE CODE AT NOJBMS THRU TTYDET TO FIX BUG ; INTRODUCED BY EDITS 602 AND 603 ;606) ALLOW ATTACH AND LOGIN AFTER KSYS FROM LOCAL TTY'S ;607) FIX PROBLEM IN EDIT 605. ;610) PASSWORDS IN ACCT.SYS ENTRIES WHICH SPAN DISK BLOCKS CANNOT ; BE CHANGED. CURE: REMEMBER ONLY POINTER TO PASSWORD, ; DON'T WORRY IF WHOLE ENTRY CAN'T BE READ IN ONE DSK READ ;611) PREVENT STRANGE RACES IN ATTACHES ;612) MAKE ?MAY NOT LOGIN REMOTE/DATASET/BATCH/BATCH SUBJOB ; ERRORS FATAL SO BATCON WON'T WASTE TIME ; TRYING TO LOG THE JOB IN ;613) CLEAN UP THE LISTING; REMOVE UNREACHABLE CODE AND ; UNREFERENCED DATA ;614) EDIT 573 IS MISSING A POPJ. CURE: YES. ;615) SETNAM TO LOGIN RATHER THAN FLUSH TO EVADE KLUDGE IN STOP1C. ;616) DON'T CHANGE UFD PROTECTION UNLESS /UFDPROTECT SPECIFIED. ;617) MORE CHANGES TO CONFORM TO MACRO 52. ;620) IMPLEMENT /DEFPROT:NNN TO SET DEFAULT FILE PROTECTION. ;621) DON'T PRINT STRANGE GARBAGE IF USER TYPES .R LOGIN ;622) DON'T LOG IN A USER WHOSE SCHEDULER CLASS HAS A ZERO ; CPU QUOTA IF THE CLASS SCHEDULER IS RUNNING. ;623) ENTRY POINT TO FACTOR IS NOW CALLED .FACTR ;624) PICK UP WHERE EDIT 610 LEFT OFF AND REALLY FIX /PASSWORD. ;625) SLEEP BEFORE TYPING ?LGNIET TO MAKE IT HARDER TO BREAK ; SECURITY (EASIER THAN SLEEPING BEFORE ASKING FOR PASSWORD ; AND TRAPPING FOR CONTROL-C'S WHILE SLEEPING) ;626) IF WE DON'T HAVE JACCT, WE'RE BEING DEBUGGED - SO DON'T ; RECOMPUTE DISK USAGE ;627) /ASSIGN:PHYS-NAME WITH NO LOGICAL NAME LOSES. FIX IT. ;630) MAKE "NO OPR COVERAGE" INFORMATIONAL RATHER THAN WARNING. ;631) LAST-MINUTE CODE CLEANUP. THIS WILL BE THE LAST EDIT ; IN VERSION 60. ;632) DON'T TRY TO SET SCHEDULER CLASS QUOTAS IF 6.03 SCHEDULER ; RUNNING IN WMU MODE ;633) LOCATE USER AT CENTRAL SITE IF LOGGING IN ON A NODE WITHOUT ; AN LPT ;634) SEE EDIT HISTORY FOR 672 EDIT ;%60A(634) SHIPPED WITH 6.03A ;635-637) RESERVED FOR DEC 6.03 SUPPORT ;640) DO PHYSICAL-ONLY RUN UUO FOR CUSP-TO-RUN (SECURITY) ;641) DISABLE CONTROL-C JUST BEFORE LOGIN UUO AND ENABLE ONLY IF ; NO CUSP-TO-RUN SPECIFIED ;642) IF A LINE OF SWITCH.INI ENDS WITH A /ASSIGN, AND THE NEXT LINE ; CONTAINS A /ASSIGN, YOU GET ?SCNILC ILLEGAL CHAR IN CMD ; FIX: CLEAR R.EOL EACH TIME THROUGH ASSIGN ;643) ENQ QUOTA DOESN'T GET SET UP; SENSE OF TEST INSTRUCTION IS BACKWARDS ; AT PRSET3+5 ;644) FIX YET ANOTHER CASE OF OFF-BY-ONE ARITHMETIC AT UFDEX1-2 ;645) DELETE SEARCH LIST IF USER TYPES ^C WHILE LOGGED OUT ;646) ?LGNCWR UNDESERVEDLY - WRONG GETTAB VALUE BEING USED ;647) FIX SWITCH.INI NOT BEING READ IF FACTSW TURNED OFF ;650) RESERVE BATMIN JOB SLOTS FOR BATCON'S USE ;651) FIX BUG IN /PASSWORD (BUG ONLY IF NCRYPT TURNED ON) ;652) DON'T ATTEMPT TO CREATE SFD'S ON STRS THAT ARE WRITE-LOCKED ;653) REMOVE EDIT 547 WHICH ALLOWS USERS TO AVOID QUOTAS ;654) FIX EDIT 650 SO ATTACH WORKS DESPITE BATMIN. SPR#10-23336 ;655) SUPPORT "<" AS PPN DELIMITER ON ATTACH. THIS IS FOR 2741. ; SPR #10-23335 ;656) TEACH LOGIN ABOUT FIXED VS. UNFIXED CLASS QUOTAS. SPR#10-23094. ;657) DON'T PERMIT DATA-SET LOGINS AFTER KSYS. ;660) PERMIT DETACHED [1,2] JOB TO LOGIN PTY SUBJOBS. SPR #10-23725. ; NOTE: ONLY PERMITS SON OF [1,2] NOT SON OF DETACHED OPR OR CTY. ;661) MOVE LOGIN UUO AFTER MESSAGE TYPE-OUT TO PERMIT PROPER /STR ; OPERATION. SPR #10-23847 ;662) EDIT 661 WAS NOT VERY GOOD. REMOVE IT AND TRY AGAIN. ;663) FIX UP ALL DATES AND COPYRIGHT STATEMENTS ;664) DON'T PERMIT MORE THAN LOGMAX JOBS IF BATMAX TESTING ; IS DISABLED. SPR #10-24354. ;665) LOGMAX+1 JOBS CAN LOGIN; SHOULD BE LOGMAX. SPR #10-24354 ;666) IMPLEMENT ACCOUNT AND REMARK PROMPTS TO ENTER AN ACCOUNT STRING ; AND A REMARK ;667) DO UFD ZERO COMPRESSION WHEN RECOMPUTING QUOTA. ; THIS USES THE DISK. UUO FUNCTION CODE 7 WHICH IS NEW FOR ; 7.01. THE EFFECT OF UFD COMPRESSION IS TO SPEED UP ; LOOKUPS AND ENTERS. ;670) FIX BAD POPJ ON ERROR RETURN FROM CTLJOB UUO. SPR #10-24481 ;671) FIX SOME PROBLEMS INTRODUCED BY EDIT 666. ;672) ADD BACKROUND BATCH SUPPORT. ;673) IMPLEMENT ACCOUNT VALIDATION ;674) PUT IN TEMPORARY FIX SO BATCH JOBS CAN RUN WITH ACCOUNT VALIDATION ;675) IMPLEMENT /TYPE SWITCH TO SET TERMINAL TYPE. ;676) SPR # 10-25342 WCL JUNE-27-78 ; Fix code that checks for necessary job slots for Batch so it checks ; how many Batch jobs are already logged in ; Areas affected: PPNGO ;677) FIX BUG IN 675. AT NOTTYP INSERT POP T,T1. ;700) FIX BUG WHERE CODE AT BACHEK NEVER GETS EXECUTED. ;701) IMPLEMENT USAGE ACCOUNTING, SPECIFICALLY ACCOUNT VALIDATION (LGNUSG MODULE) ;702) FIX A VALIDATION ERROR. ALSO MAKE THE LOGIN MESSAGE REPORT THE TIME ; AS HH:MM INSTEAD OF HHMM. ;703) FIX BUGS INTRODUCED WITH 702 ;704) DON'T LOSE OWNER PPN FOR NESTED PTY SUBJOBS. SPR #10-27223 ;705) MAKE /PATH[,,SFD] USE LOGGED-IN PPN AS DEFAULT. SPR #10-27073 ;706) /BAH ; 1) ADD ATTACH, LOGIN, AND SESSION IPCF MESSAGES SO THE ACCOUNT ; DAEMON CAN DO USAGE ACCOUNTING WITH SESSION ENTRIES. ; 2) ADD /BATSEQ, /BATNAM, AND /REQID SWITCHES SO BATCON CAN PASS ; BATCH JOB INFORMATION TO THE ACCOUNT DAEMON VIA LOGIN IPCF MESSAGES ;707) /BAH ADD SETUUO FUNCTION TO SET OPERATOR PRIVILEGES FOR GALAXY 4 SUPPORT ; 3) FIX UP EDIT 701'S ERROR MESSAGES ;710 REPEAT LOGMAX CHECK JUST PRIOR TO LOGIN UUO ; SPR 10-27195 ;711 CHECK THAT STR NAME IN AUXACC IS "FULL FILE STRUCTURE NAME" ; SPR 10-27402 ;712 /MSL/BAH 22-MAY-79 Display SEARCH, .REQUEST info during compilation ;713) /MSL/BAH 22-MAY-79 Limit /DSKPRI value by ACCT.SYS ;714) /MSL/BAH 22-MAY-79 Warn user if account expires within one month ;715) /MSL/BAH 22-MAY-79 Let user logging in attach if PPN already has detached job ;716) /MSL/BAH 22-MAY-79 Set up search list before calling OSCAN (for SWITCH.INI), thus ; allowing account switches, UFD defaults, etc. in SWITCH.INI ; This rewrite completely changes the order of things (such as ; where account validation and accounting is done). As a result, ; the FTTASK switch (an unsupported switch used by our in-house ; systems) no longer applied as written and has been removed. ;717) /MSL/BAH 22-MAY-79 No NOTICE.TXT if Job Capacity Exceeded ;720) /MSL/BAH 22-MAY-79 Clear search list before LOGOUT when flushing (c.f. ed.645) ;721) /MSL/BAH 22-MAY-79 Fix so last error try also gets a FACT entry ;722) /MSL/BAH 22-MAY-79 Make ENCODE global (SPR 10-23055) ;723) /MSL/BAH 22-MAY-79 Clear FL.ACC when done with ACCT instead of waiting for AUXACC ;724) /MSL/BAH 22-MAY-79 Fill AUXACC pointer table, even if early EOF ;725) /BAH 31-MAY-79 IF A JOB REQUIRES AN ACCOUNT AND/OR REMARK AND THE ; TERMINAL IS A PTY AND AN ACCOUNT/REMARK WAS NOT SUPPLIED, USE THE ; CONTROLLING JOB'S ACCOUNT (IF IT EXISTS) AND ALLOW A NULL REMARK. ;726 IF A USER HAS ZERO LOGGED-IN QUOTA ON A STR IN HIS SEARCH LIST ; DON'T TRY TO CREATE AN SFD ON IT. ;727 COMMAND LIST IS ONE TOO LONG. ALSO FIX A PJRST P,.USAGE ;730 SEARCH OF AUXACC.SYS FOR PPN IS OFF BY 1. ; SPR 10-28333. ;731 REMOVE EDIT 730 ;732 20-SEP-79/BAH CORE UUO TO EXPAND HIGH SEGMENT CAN FAIL IF 1) SOMEONE ; IS SAVING LOGIN OR IF 2) IN AN SMP ENVIRONMENT, ANOTHER CPU IS ; EXECUTING THE SAME CODE WITH THE HIGH SEGMENT WRITE-ENABLED. ; TO GIVE THE MONITOR TIME TO CATCH UP, SLEEP A SECOND AND TRY AGAIN ; (3 TIMES) IF THE CORE UUO FAILS. ;733 4-OCT-79/BAH ADD ATTACH:ARG SWITCH. IF ATTACH:IGNORE IS IN SWITCH.INI OR TYPED, ; THEN DON'T PROMPT USER FOR ATTACH MESSAGE IF ANY DETACHED ; JOBS UNDER HIS PPN. IF ATTACH:ASK IS IN SWITCH.INI OR TYPED, THEN ; ASK USER IF HE WANTS TO ATTACH OR LOGIN. THE DEFAULT IS ; ALWAYS ASK IF ANY DETACHED JOBS. SEE EDIT 715. ;734 22-OCT-79/BAH SET U.ACTS AND U.RMRK TO -1 FOR SCAN. ALSO ZERO THEM ; BEFORE FILLING IN THE CHARACTERS SO THE USAGE FILES GET THEM RIGHT. ;735 7-NOV-79/BAH MAKE LOGIN SEARCH ACTSYM.UNV INSTEAD OF ACCSYM.UNV. ;736 25-JAN-80/BAH EDIT 723 CLEARED FL.ACC TOO SOON CAUSING PASSWORDS ; NOT TO BE CHANGED. ALSO EDIT 716 DELETED THE CALL TO .USAGE THAT ; SENT A LOGIN MESSAGE TO THE ACCOUNT DAEMON. ALSO CHANGE THE CALL TO ; .SIXSW FOR THE /BATNAM SWITCH TO .SIXQW. ;737 14-FEB-80/BAH IF A USER TRIES TO LOGIN WITH AN ILLEGAL PROGRAMMER ; NUMBER, THEN LOGIN GOES INTO A LOOP READING ACCT.SYS AND REBUILDING ; ITS TABLE. ;740 SPR 10-28750 Edit 627 caused SCAN to read the slash after a name ; twice in an /ASSIGN switch if there were more switches. ;741 11-Apr-80/BAH QAR 10-03985 Don't type out error message setting ; operator privileges if the monitor version number is earlier than ; 7.00. ;742 24-Apr-80/BAH LOGIN doesn't send the terminal designator in its ; LOGIN and ATTACH IPCF messages to the account daemon. Include ; a common routine to find the terminal designator, line number and ; node name of the job -- SETTNL. Also include a switch to defer ; TTY output /TTDEFER. ;743 29-april-80/FRS SPR 10-28831 ; Change put in FACTOR to check to see if job being attached to ; is DAEMON and [1,2]. If so, skip trying to write FACT entry. ;744 5-May-80/WSM Allow new form for specifing settty switches for LOGIN. ; ie /TERMINAL:(NOPAGE,SPEED:300,WIDTH:80,TYPE:VT52) instead of a ; random set of several switches. Also, cleanup some SCAN switch ; handling. Use standard version macro from MACTEN. ; Fix recovery from %LGNTTI Terminal type invalid errors ;745 6-May-80/WSM Improve command scanning especially for SESSION ;746 6-MAY-80/WSM Fix the bug that didnt set path to area that ; already existed if user had no login quota or software write-locked ; Also, type warning if any PATH. uuo fails. ;747 1-Jun-80/WSM Complete implementation of /TERMINAL by adding ; keywords [no]UC, NOFILL and [no]TIDY. Also, dont prompt with ; password if the user types it on the same line. ;750 2-Jun-80/WSM Include debugged DDT patch for testing LOGIN under 7.01 ; (QAR 10-04145) Add /DEFBUFFER:n switch to set default number ; of disk buffers, like .SET DEFAULT BUFFER n command ;751 3-Jun-80/WSM (QARs 10-42046, 10-04172) LOGIN loops if invalid PPN given. ; Edit 737 didnt fix the problem as reported. ; ;;61(751) released with 7.01 ;Start V62 for Galaxy 4.1 ; ;752 17-Jun-80/WSM Fix the usage accounting entries for ATTACH and ; SESSION commands. Remove unreachable code. ;753 27-Jun-80/DPM ; Add /BATINT:[NO/YES] and /BATSTR:ooo so BATCON can set the Batch ; operator intervention values and Batch stream numbers. This is ; required for Galaxy 4.1 and later versions of QUASAR and ORION. ; These switches apply only to Batch jobs and are ignored for ; timesharing jobs. Also before we open the TTY, determine if the job ; is a Batch job and don't turn off echoing. Note: SCNSER must also ; check this at TTYRS1 plus a few and not turn off echoing when an ; unlogged in job starts running LOGIN. ;754 8-Jul-80/WSM Add some fixes for accounting support ; 1) Include expiration date in UFD (.RBDED) ; 2) Dont type NOTICE.TXT on errors with SESSION command ; 3) Expand ATTACH message to include target job number ; 4) Dont allow retries on SESSION command ; 5) Dont do checks to see if user can LOGIN if SESSION command ; 6) Flush receive queue correctly when waiting for ACK ; Improve date/time printing (use SCANs routines) ; Add lost instruction @RICC to fix ^C problems ;755 SPR #10-29629 RKB 14-Jul-80 ; (published 15-Jul as edit 752) Fix a bug in edit 651 so /PASSWORD ; will work properly with NCRYPT set. ;756 Be consistant in handling account string and remark. If its ; -1 (for SCAN and ACTDAE's benifit) it hasnt been specified. ; Anything else should be treated as ASCIZ text ;757 SPR #10-29879 12 AUG 80 ; Creating SFDs on all structures is annoying, so lets let the ; user say whether he wants it to happen or not. Install the ; /[NO]SFDCREATE switch, which allows him to say 'DONT CREATE' ;760 If you logged in and recomputed disk usage at or before 4 minutes ; 22.192 seconds after midnight, LOGIN would die with ?Illegal ; address in UUO trying to compress the UFD. ; Also, change REPEAT 0 to IFN FTMAIL for RNMAIL routine. ;761 23-Sep-80/WSM Convert to more UUOSYM and ACTSYM symbols ; Allow /LOCATE to take sixbit node name ; Improve usage accounting routines--Dont let user in if account ; validation is required, and ACTDAE isnt around or talking to us ;762 28-Sep-80/WSM Cleanup error messages and interface with BATCON. ; In the process, fix ?Job capacity errors from dumping the job. ; Dont output ^D when you fail to login. Thats old stuff. ; Define new bit in error macros to WTO to operator. This removes ; all the "Please call the operator" messages. If ORION isnt running ; that text is appended to the users output. ;763 30-Sep-80/WSM (QAR 10-04663) Improve ATTACH query logic. Give ; a small SYSTAT output (job, program, state), and if/when we ; attach to a job, preserve the user/monitor state. ;764 Use ND to set number of days for warning on %PPN will expire message ;765 6-Oct-80/WSM (QAR 10-04728) Improve things a little ; bit if the unsupported PSWCHG feature test is turned on ; by asking for new password twice with echo off ;766 20-Oct-80/WSM Remove part of edit 761 which allowed LOCATE to take SIXBIT name. ; It requires more monitor/GALAXY support than was thought. ; Dont create a UFD of AUXACC says its write-locked. ; (QAR 10-04816) Change BLANK to BLANKS to be consistent with ; INITIA and monitor SET TTY commands ;767 24-Nov-80/WSM (QAR 10-04969) LOGIN is too hard to be debugged. ; Add more tests for R.DBUG ;770 24-Nov-80/WSM LOGIN loses /OPTION when asking for detached jobs. ; Save /OPTION around second .PSCAN call. Requires kludge that assumes ; SCANs OPTION storage is .NMUL##-3 (until OPTION made global) ;771 16-Dec-80/WSM Add support for ACTDAE returning an account string ; from a validation request. (It may be a default, or case changed) ;772 15-Jan-81/WSM (QAR 10-05259) Allow switches on ATTACH to attach to ; the job in either user or monitor mode. ;773 15-Jan-81/WSM Allow OPR[1,2] to login in w/o an account string if ; the PID of ACTDAE doesnt exist in 5 seconds. ; Dont complain if the LOCATE UUO fails and he is trying to locate ; to the central site (node 0) ;774 30-JAN-81/WSM (QAR 10-05356) Allow SESSION command to be invoked ; from CCL entry point and look for TMP:LGN. Always send account ; string to ACTDAE for possible defaulting. ; (QAR 10-05356) Path not also set correctly if we cant create an ; SFD in the path. Get around SCAN bug with .LOGIN/ACCOUNT:"" using ; SWITCH.INI when it shouldnt ;775 17-Feb-81/WSM (QAR 10-05478) Fix up more scanning problems with ; the /ACCOUNT switch. Change some UUOSYM symbols that changed. ; Allow indirect command files for SESSION command. ;776 19-Mar-81/WSM (QAR 10-05786) Fix blanks in TERMINAL scanning ; (QAR 10-05797) Dont type expiration date on ATTACH ;777 7-Apr-81/WSM (QAR 10-05931) Fix a one instruction race ; (QAR 10-05925) Remove checks for level C disk service! ; (QAR 10-05942) Check response from ATTACH question for YES/NO ; (no QAR) Remove checks for old scanner service ;1000 9-Apr-81/WSM Move setting batch stream number before STRUUOs ; to change search list so we dont confuse QUASAR. ; ;1001 9-Jul-81/WSM Increase MAXFS to 7.01 defined value of 10; handle ; more AUXACC entries than can fix in a S/L more gracefully. ;1002 16-Nov-81/WSM Bypass accounting if we are attaching to the ; ACTDAE job so we dont get hung if ACTDAE is ^Ced. ; Improve ATTACH job query logic to show default and preserve ; /OPTION around .PSCAN better. ;1003 23-Nov-81/WSM Insert fix for ^C, and removed window where user ; can ^C out of cusp-to-run. This was incorrectly published as ; edit 754 to LOGIN as CMCO 571.1. ;1004 9-Mar-82/WSM (QAR 10-06880) Explicitly BLT scan block words to ; zero in routine PARSE. ; (QAR 10-06495) /SCAN not set /NOSFDCREATE and the SFD doesnt exist. ;1005 27-Aug-82/DPM (QAR #10-02018) Correct logic to GETTAB ACTDAE pid. ;Start of version 63 for 7.02 ; ;1100 14-JUL-81/WSM Add support for new terminal switches, and /DEFAULT:(BIGBUF) ; Allow new batch switch syntax of /BATCH:(args) too. ;1101 30-Jul-81/BCM (SPR 10-30609) Add a new UUO to do LOGMAX/BATMAX ; quota checking. This is necessary to eliminate race between two ; simultaneous LOGINs where LOGNUM could be 1 greater than LOGMAX. ;1102 21-Aug-81/BCM (SPR 10-30832) Correct test for no ; class scheduler at PRSET4 and NOTHER. ;1103 8-Sep-81/WSM Add (under FTMAIL) /[no]MAILCHECK switch to control ; scanning for new mail. Check for mail on ATTACH too. ;1104 3-Feb-82/WSM Add new TRMOP. to see if we are on a full-SCNSER-PTY ; so we know we can turn the echo off. ;1105 26-Apr-82/WSM Rip out lots of code, and call DPM's new UFDSET routine ; to handle UFD setup. This is the same routines that PULSAR/MDA ; use, so it should all do it the same way. ;1106 29-Jun-82/WSM Fix up all error messages and macros (This also ; fixing the ^C ?Ill mem ref bug introduced with edit 1105) ; ;1107 22-Apr-83/DPM ; 1. Turn on echo if called by SCAN for continuation lines. ; 2. Don't make junk FACT file entries on LOGIN failures. ; 3. Allow /QUOTA:(str,...). ; 4. If a name is required, make sure it's non-zero. ; ;1110 26-Apr-83/DPM ; Eliminate problems with I/O to unassigned channel by doing buffered ; OUTSTRs to the TTY. This is a lot more efficient than doing buffered ; I/O and saves lots of OUTPUT TTY, instructions. ; ;1111 8-Jul-83/DPM ; 1. Add a few missing calls to TTYOUT. ; 2. Disconnect line if too many command format errors. ; 3. Call .ISLGI to determine logged-in/out status in FLUSH routine. ; 4. Finally after all these years, add verbosity checking in ERRMSG ; routine. Attn. future LOGIN hackers: calls to .PSCAN wipe .FLVRB! ; 5. Fix up listing stuff in .ERR. macro. ; ;1112 31-Aug-83/DPM ; Don't set UFD protection to <000> when recomputing disk usage on ; structures not in AUXACC. ; ;1113 12-Sep-83/DPM ; 1. FATAL, WARN, INFO, etc. still don't list. ; 2. Make references to .POPJ1 external in LGNMS. ; ;1114 21-Sep-83 /DPM ; 1. Remove ZEROSL. No longer needed now that the LOGOUT UUO does this. ; 2. Remove unreferenced and non-existant symbols from GLOB macros. ; 3. Remove unreferenced low seg locations. ; 4. Repeated ^Cs typed while recomputing disk usage gives ill mem ref. ; ERRMSG isn't recursive. Fix Control-C trap. ; ;1115 12-Jan-84 /DPM ; Add missing AC in test instruction (UFDSET + a bunch). ; ; ;1116 18-Feb-84 /DPM ; If a logging in job is located at a station with an MCR, then locate ; it at the central station to allow spooled LPT output to get printed. ; ;63(1115) released with 7.02 ; Start V64 for 7.03 ; ;2000 5-Apr-84 /DPM ; 1. Remove old FACT file code. ; 2. Re-write /ASSIGN switch processor to eliminate all bugs. ; R.NXSW and R.EOL crock flags also go away. ; ;2001 7-July-84 /Tarl ; Start massive changes to move all validation into ACTDAE. ; For today, remove edit 557. This edit (PSWCHG and NCRYPT) ; is no longer relevant; Encryption is entirely handled by ; ACTDAE, and password changing is handled by the .SET PASSWORD ; monitor command. ; ;2002 1-Sep-84 /Tarl ; More massive changes to move validation into ACTDAE. ; Move code around so that we don't check password until ACCT, ; which will lead to slightly different behaviour under some ; conditions. Remove all logic to keep files in hiseg, remove ; all logic to read ACCT, AUXACC, SCDMAP. Add code to ask ; for profile from ACCT. ; ;2003 7-Sep-84 /Tarl ; Allow username as well as PPN on login lines, allow attach ; without giving PPN. ; ;2004 26-Dec-84 /DPM ; Rewrite code added by edit 2003 to make LOGIN/BYPASS work. ; Add /WATCH:CONTEXTS. ; ;2005 27-Dec-84 /DPM ; Merge LGNMS into LOGIN. Default FTMAIL on. Define MAILFN and ; MAILEX to be the mail file name and extension respectively, with ; the defaults being 'MAIL ' and 'TXT' for compatibility with DEC's ; mail system (MS). ; ;2006 2-Jan-85 /DPM ; Add /TERMINAL:(EIGHTBIT,ESCAPE,QUOTE,UNPAUSE). Put all old TTY ; switched under OLDTTY conditional. Put all old DEFAULT switches ; under OLDDEF conditional. These conditionals will be removed in ; the next release of LOGIN (version 65). ; ;2007 2-Jan-85 /DPM ; Fix password echoing problem created by edit 2003. ; ;2010 3-Jan-85 /DPM ; Add support for [SET] PASSWORD command and /PASSWORD switch. ; Fix password parsing problems (8-bit stuff) caused by edit 2003. ; ;2011 7-Jan-85 /DPM ; Fix numerous bugs relating to SESSION command scanning and setting ; bogus account strings. Completely separate SESSION handling from ; the mainstream code for reading clarity and cleanliness. This has ; the somewhat undesirable side effect of breaking some user's /ACCOUNT ; defaults in SWITCH.INI, but no one really uses usage accounting, do ; they? ; ;2012 14-Jan-85 /DPM ; Fix bugs introduced by editg 2003 that prevented logging in with ; user names and losing a path spec (i.e. LOGIN DPM[,,FOO] didn't ; work). Also allow ATTACH [PPN] or user name without job number. ; Turn on /TERMINAL switch for ATTACH command. Do lots of general ; clean up work. ; ;2013 16-Jan-85 /DPM ; Begin massive code cleanup. ; ;2014 18-Jan-85 /DPM ; Lots more code cleanup. Rearrange lots of code into subroutines so ; it may eassily be called from several places. Support SWITCH.INI ; processing on ATTACH commands. Remove old stand-alone batch switches ; now superseded by /BATCH:(args). ; ;2015 22-Jan-85 /DPM ; Merge all modules into one. Remove the need for LGNUNV universal. ; Fix bugs associated with setting paths. ; ;2016 24-Jan-85 /DPM ; Replace all IPCF code to create usage entries with QUEUE. UUOs. ; Look at the OTS and application words of the extended LOOKUP ; block to determine if new mail exists. ; ;2017 28-Jan-85 /DPM ; SWITCH.INI won't get scanned and the user is needlessly prompted ; for an account string if: ; 1. The first attempt at LOGIN failed and ... ; 2. The PPN typed was valid but wasn't the intended one and ... ; 3. The PPN typed didn't require an account string but ... ; 4. The correct PPN did require an account string which would ; normally be found in SWITCH.INI ; SETOM .OPTN because SCAN zeroed it the last time it failed to find ; SWITCH.INI, causing all subsequent calls to .OSCAN to fail. A real ; bitch to figure out. Also fix numerous bugs caused by edits 2001, ; 2002, and 2003 which caused /PATH not to work any more. ; ;2020 30-Jan-85 /DPM ; Add code to change user names to support multiple PPN insertions ; in REACT. ; ;2021 6-Feb-85 /DPM ; Set context and saved page quotas. Set the job's search list to ; the system search list if /BYPASS. Also set infinite FCFS and ; logged out quotas. ; ;2022 8-Feb-85 /DPM ; People are wondering what job and PPN are being attached to these ; days since the new ATTACH command syntax allows just a job number, ; PPN, or a user name. Therefore, always type "Attaching to job ..." ; message. Also do a better job chosing monitor or user mode. ; ;2023 11-Feb-85 /DPM ; Add support for locked accounting files. Make .LOGIN 10,# work. ; Plug holes in program-to-run logic by cleaning up exit code. Also ; remove definitions for ACs M and WD as they're no longer used. ; ;2024 15-Feb-85 /DPM ; Use correct AC when testing for LOGIN after KSYS times out. ; Prevent loop typing KJOB in FLUSH. Fix bug that expected passwords ; to be typed on the CTY. ; ;2025 20-Feb-85 /DPM ; If a user hosts into the -10 and is physically located at a node ; that has an MCR, then locate the job at the central site to which ; will cause queued output to be spooled. Also fix problem that ; prevented watch bits in the profile from getting set. ; ;2026 28-Feb-85 /DPM ; Fix up usage of /CORE switch argument by removing .STCLM SETUUO. ; Dynamically determine if BATMAX checking should be done by GETTABing ; the MPB feature test (BATMAX is meaningful only in an MPB environment). ; ;2027 7-Mar-85 /DPM ; Add support for files-only PPNs and password expiration dates. ; ;2030 20-Mar-85 /DPM ; Fix account string validation bug. Make /LOCATE with no argument ; default to the central station. Increase MAXFS to 12. ; ;2031 4-Apr-85 /DPM ; Report ACCT. UUO error codes when we fail to set the account string. ; Fix ATTACH, LOGIN, and SESSION message generation. ; ;2032 17-Apr-85 /DPM ; Respect /NAME when used with /BYPASS. ; ;2033 26-Apr-85 /LWS ; Include account string arg block when doing UGACC$ function ; with QUEUE. ACTDAE expects an account string when doing ; access checking, especially when an account string is required. ; ;2034 7-May-85 /DPM ; Add support for QUEUE. UUO timeout. Incorporate CHAR8 into LOGIN. ; This table is only needed when running LOGIN under a 7.02 monitor. ; 8-bit character translation is done using the CHTRN. UUO under ; later monitors (** no supporting code in LOGIN yet **). Also fix ; a few minor problems reported in QARs. ; ;2035 10-May-85 /DPM ; Be more defensive against logging into [10,777776]. ; ;2036 14-May-85 /DPM ; Add routine CHRTRN to do 8-bit chraracter translation via UUO ; or old-style translation table. ; ;2037 22-May-85 /DPM ; Forgot to include account string in ATTACH validation message. ; ;2040 22-Jul-85 /DPM ; Include IPCFS. and IPCFR. UUO error codes in SETIPC errors ; ;2041 15-Aug-85 /LEO ; Do copyrights. ; ;2042 27-AUG-85 /DPM ; Remove references to AE.PCH and key off .AEPCT being -1 to ; indicate a password change is required. ; ;2043 3-Sep-85 /DPM ; Fix off-by-one bug when checking PTY line number. ; ;2044 12-Sep-85 /DPM ; Can't attach to jobs 36, 72, 108, ... ; ;2045 14-Sep-85 /DPM ; Warn when password expiration will happen soon. ; ;2046 23-Oct-85 /DPM ; Setup ALLPPN early so /BYPASS works under OPSER. ; ;2047 28-Oct-85 /DPM ; Re-init switch storage on restarts. ; ;2050 11-Nov-85 /DPM ; Upgrade to version 6 profile format. ; ;2051 22-Jan-86 /DPM ; /WATCH doesn't work because the watch bits belong in the RH ; half of the SETUUO AC, not in the LH. ; ;2052 19-Mar-86 /DPM ; Edit 2051 fixed the watch bits coming from the profile, not the ; command line switch. ; ;2053 19-Mar-86 /DPM ; LOGIN 10,# syntax appears not to create a UFD. Not true. LOGIN ; just creates another unique PPN after the UFD(s) have already ; been created. Remove left over cruft from V63. ; ;2054 9-Apr-86 /DPM ; Move call to CHGPSW back before the LOGIN UUO. If the password ; change fails, you really want to abort the login. Also correct ; ordering of similar calls in the ATTACH and LOGIN code for the ; same reasons. ; ;2055 14-Apr-86 /DPM ; Fix test for CTY by setting up GETLCH bits before storing DEVOPR. ; ;2056 16-Apr-86 /DPM ; Never prompt for a name if L.SOPR is set; works like passwords. ; ;2057 27-Aug-86 /DPM ; Check FAILFL in ASKPSW to avoid letting a malicious user know ; the target PPN really doesn't exist. ; ;2060 22-Jan-87 /KDO ; Defend against QUEUE. UUO hangs. ; ;2061 04-Feb-87 /KDO ; Fix a race condition between MONRET and CTRL/C intercept code. ; ;2062 13-Feb-87 /KDO ; Verify the job number on an attach before telling ACTDAE. ; ;2063 11-Mar-87 /KDO ; Fix edit 2060. ; ;2064 04-May-87 /KDO ; Always type SYS:LOGIN.TXT after successfully logging in. ; ;2065 09-Sep-87 /LWS ; Bomb if batch job and profile does not exist. ; Start Version 65(3000) for 7.04 ; ; 3001 30-Dec-87/JJF ; Add support for "Logged-in PPN" GETTAB. Allows LOGIN to ; determine if the user's current PPN isn't the one s/he actually ; logged in under, and to "pivot" back home before logging out. ; ; 3002 13-Jan-88/KDO ; Fix the loop in GETPSW to allow a password that is thirty-nine ; characters long. ; ; 3003 17-Mar-88/KDO ; If SCAN restarts .PSCAN, whether its for /HELP or after an error, ; jump to .MONRT to exit. ; ; 3004 26-Apr-88/KDO ; Fix KJOB/BATCH processing. ; ; 3005 4-Jul-88/KDO ; Allow LOGIN to run with JLOG turned off for 7.03 compatibility. ; In case of a FATAL error, use the LOGIN UUO to get back in. ; ; 3006 3-Aug-88/DPM ; Don't bomb out login if user says /PASSWORD but accounting file ; prohibits password changes. ; ;3007 3-Aug-88/DPM ; Remove local definition of .GTLPN GETTAB table. 7.04 UUOSYM ; has this symbol now. ; ;3010 3-Aug-88/KDO ; Allow password changes if a password change is required (even if ; password changes are prohibited). ; ;3011 28-Sep-88/KDO ; Check to see if we are already detached after setting up the ; PSI vector. Also clear buffered output on a DETACH interrupt. ; ;3012 28-Sep-88/KDO ; Save P1 in ERRMSG before the call to the continuation routine. ; (It is needed by ERRWTO.) ; ;3013 5-Jan-89/DPM (SPR 10-35597) ; Correct problems with unique (10,#) PPNs. ; ;3014 9-Jan-89/DPM ; If LOGIN is run under pre-7.04 monitors as the logout CUSP, ; and the user is over quota, control is returned to the monitor ; via a MONRT. and COMCON logs the job out and bypassing quota ; enforcement. Use the MONRET routine instead. It handles this ; case. ; ;3015 1-Sep-89/JC ; Added TRANSL command to translate PPNs/usernames ; ;3016 29-Nov-89/DPM ; Do not use %CNDAE for checking the monitor version; that is for ; use only by DAEMON. Use %CNDVN instead. SUBTTL Debugging patch for the monitor ; THIS PATCH WILL ALLOW YOU TO DEBUG LOGIN UNDER NORMAL TIMESHARING. ; THE PATCH IS EXECUTED VIA FILDDT AND CAUSES YOUR TERMINAL TO RUN ; LOGIN FROM HAKSTR/HAKPPN WHILE ALL OTHER TERMINALS USE SYSPPN. ; NOTE THAT THE "$" ARE DOLLAR SIGNS. BEFORE EDITING THIS PATCH OUT ; AND APPLYING IT WITH FILDDT, CHANGE THE DOLLARS SIGNS TO ESCAPES. ; ; THIS PATCH HAS BEEN TESTED UNDER THE 7.04 MONITOR. IT MAY NOT WORK ; WITH PREVIOUS MONITORS. REPEAT 0,< PATCH/HAKPPN:10,,56 HAKSTR:$"/DSKB/ LOGLDB:-1 LOGHAK:PUSHJ P,. 2 JRST MSTART CAME U,LOGLDB POPJ P, PUSHJ P,SAVE1 MOVE P1,SGANAM+.JDAT CAME P1,LOGTXT POPJ P, MOVE P1,HAKSTR MOVEM P1,SGADEV+.JDAT MOVE P1,HAKPPN MOVEM P1,SGAPPN+.JDAT POPJ P, COMCON$: SGSET9-FTMP/JRST LOGHAK GJOB2 7/JFCL CLOGIN 1/JRST RUNAME .CPJOB[$Q>>;END REPEAT 0 SUBTTL Definitions -- Assembly parameters ND ACTFMT,6 ;ACCOUNTING FILE/PROFILE FORMAT NUMBER ND SUPNOT,1 ;SUPPRESS NOTICE.TXT IF / IN PPN ND UFDSEC,^D5*^D60 ;SECONDS TO WAIT FOR UFD INTERLOCK ND OLDTTY,0 ;INCLUDE OLD-STYLE TTY SWITCHES NOW SUPERSEDED BY ; /TERMINAL:(A,B,C...) ND OLDDEF,0 ;INCLUDE OLD-STYLE DEFAULT SWITCHES NOW SUPERSEDED BY ; /DEFAULT:(A,B,C,...) ND CLSDEF,0 ;MAKE KJOB/CLEAR THE DEFAULT ND CTXDLN,20 ;CONTEXT UUO DATA BUFFER LENGTH ND MAILDV, ;DEFAULT MAIL FILE DEVICE ND MAILFN,;DEFAULT MAIL FILE NAME ND MAILEX, ;DEFAULT MAIL FILE EXTENSION ND MAILPP, ;DEFAULT MAIL FILE PPN (-1 MEANS USE PPN) ND MAILBT,1 ;BIT IN APPLICATION FIELD OF EXTENDED LOOKUP ; BLOCK THAT INDICATES NEW MAIL EXISTS ND DATLEN,50 ;LENGTH OF QUEUE. UUO DATA BLOCK ND QUELEN,50 ;LENGTH OF QUEUE. UUO ARGUMENT BLOCK ND RSPLEN,20 ;LENGTH OF QUEUE. UUO RESPONSE BLOCK ND ACCTIM,^D20 ;TIMEOUT FOR REQUESTING ACCOUNTING INFO ND ACCTI2,^D60 ;TIMEOUT FOR RETRIES ON ACCOUNTING INFO ND ACCTRY,^D10 ;RETRY LIMIT FOR ACCOUNTING INFO REQUESTS ND CHGTIM,^D20 ;TIMEOUT FOR CHANGING PARAMETERS ND USGTIM,^D60 ;TIMEOUT FOR MAKING USAGE ENTRIES ND RETRYM,^D10 ;NUMBER OF RETRIES A USER IS GIVEN TO TYPE THE PPN, ; PASSWORD, ETC. ND RETRYN,^D5 ;NUMBER OF RETRIES BEFORE UNCONDITIONALLY DISALLOWING ; ACCESS WHETHER OR NOT PPN, PASSWORD, ETC. ARE VALID ND RETRYS,^D3 ;NUMBER OF SECONDS TO SLEEP BETWEEN RETRIES ; THIS MAKES IT HARD FOR A USER TO TELL WHAT FAILED ; (SECURITY THROUGH OBSCURITY) ND TTYSLP,2 ;NUMBER OF MINUTES TO SLEEP BEFORE INPUT TIMEOUT ND PDLSIZ,60 ;DEPTH OF STACK ND DVICES,20 ;NUMBER OF DEVICES ASSIGNABLE BY /ASSIGN ND EXPWRN,^D31 ;DAYS TO WARN IF PPN WILL EXPIRE SOON ND PSWWRN,^D7 ;DAYS TO WARN IF PASSWORD WILL EXPIRE SOON ND STRMAX,^D36 ;MAXIMUM NUMBER OF STRS IN SYSTEM ND MAXFS,^D12 ;MAXIMUM NUMBER OF FILE STRUCTURES PER USER ND WTOCHN,^D240 ;NUMBER OF CHARACTERS MAXIMUM IN WTO BUFFER SUBTTL Definitions -- AC assignments F=0 ;FLAGS T1=1 ;FOUR T2=T1+1 ; PRESERVED T3=T2+1 ; ACS T4=T3+1 ; ... P1=5 ;FOUR P2=6 ; PRESERVED P3=7 ; ACS P4=10 ; ... N=P3 ;LAST SCANNING WORD RESULT C=P4 ;LAST SCANNING CHARACTER RESULT PP=12 ;PROJECT PROGRAMMER PAIR P=17 ;PUSHDOWN POINTER IOC==1 ;RANDOM I/O CHANNEL MSGOK==1 ;FLAG TO TYPE MEESSAGE EVEN IF USER HAS SEEN IT FNAME==2 ;FLAG TO REQUEST FILE NAME PRINTING STONLY==4 ;FLAG TO PRINT STR NAME ONLY SUBTTL Definitions -- Flags in AC F ;LEFT HALF FL.LGN==1 ;JOB IS LOGGED IN L.MANY==2 ;ON IF MORE THAN ONE CONTROLLING JOB IN CHAIN FL.WKD==4 ;ON IF THIS IS A WEEKDAY FL.BYP==10 ;SET IF BYPASSING THE ACCOUNTING SYSTEM FL.BSJ==20 ;SET IF BATCH JOB SUBJOB FL.BAT==40 ;SET IF THIS JOB IS A BATCH JOB FL.GPN==100 ;GENERATE A PROGRAMMER NUMBER L.OPR== 200 ;SET IF MY TTY IS OPR OR CTY L.SOPR==400 ;SET IF I AM ON PTY UNDER OPR, CTY OR A [1,2] JOB FL.WLD==1000 ;WILD CARD PROGRAMER FL.CTY==2000 ;TTY IS A CTY ;RH OF F R.ACRE==1 ;SET IF ANY CREATES ALLOWED ON ANY STR'S R.ASTR==2 ;SET IF ANY STR'S IN THIS JOB'S SEARCH LIST R.PTYJ==10 ;PTY JOB R.COMA==20 ;COMMA HAS BEEN TYPED WHEN TELLING OTHER JOBS ;SPECIAL PPN CHARACTERS UNISYM=="#" ;CHARACTER FOR CREATE UNIQUE PPN UNIPRG==777776 ;INTERNAL VALUE FOR UNIQUE PPN DEFPRG==777777 ;DEFAULT (INTERNAL TO REACT) PPN SUBTTL Definitions -- Command bits and offsets DEFINE CMDS,< ;; PFX, NAME , HELP ,PROCES,PROMPT,OSCNAM X LOG,LOGIN ,LOGIN ,DOLOG ,<#> ,<> X ATT,ATTACH,ATTACH,DOATT ,<#> ,<> X RTA,REATTA,REATTA,REATTA,,<> X SES,SESSIO,SESSIO,SESSIO,<> ,<> X PSW,PASSWO,PASSWO,PASSWO,<> ,<> X SET,SET ,PASSWO,SETPSW,<> ,<> X KJB,KJOB ,LOGOUT,KJOB ,<> , X TRN,TRANSL,TRANSL,TRANSL,<#> ,<> > ZZ==-1 DEFINE X (PFX,NAM,HLP,PRC,PMT,OSC),< COM'PFX== CM.'PFX==1B > CMDS SUBTTL Definitions -- Message macros ;ERROR CODES FOR TYPES OF LOGIN ERRORS (FOR PTY JOBS) ;**** NOTE ERROR COMMENTS SHOULD ALL BEGIN WITH A QUESTION MARK ;**** AND FOR PTY JOBS INCLUDE AN ERROR TYPE OF THE FORM ;**** (#) WHERE # IS ONE OF THE FOLLOWING: ;ERR.NF==1 ;NON FATAL (Not used by BATCON or LOGIN) ;ERR.SF==2 ;SEMI FATAL (Not used by BATCON or LOGIN) ERR.FT==3 ;FATAL - CANCEL JOB ERR.SS==4 ;STOP SCHEDULING (Shutdown batch stream but requeue job) ERR.RQ==5 ;REQUE JOB (Requeue job) IF1,< ;FLAGS IN LEFT HALF OF EF EF.SYS==1B1 ;SYSTEM ERROR EF.ERR==1B2 ;FATAL ERROR EF.WRN==1B3 ;WARNING EF.INF==1B4 ;INFORMATION LINE (IN []) EF.REQ==1B5 ;REQUE JOB EF.WTO==1B6 ;WTO ERROR TO OPERATOR (ANY ERROR MESSAGE TYPE) EF.SIL==1B7 ;SUPPRESS NOTICE.TXT TYPEOUT ON FATAL ERRORS EF.FMT==1B8 ;FORMAT ERROR (USER GETS TO RETRY) EF.ACF==1B9 ;ACCESS FAILURE ;SUPER FATAL ERROR -- NEVER RETURNS ;THE BATCH STREAM IS SHUTDOWN, AND THE JOB IS REQUEUED DEFINE STOP(PFX,TXT,FLG,MOR),< .ERR. EF.SYS,PFX,,FLG,MOR > ;FATAL ERROR (HOWEVER, SYSTEM IS STILL OK) DEFINE FATAL(PFX,TXT,FLG,MOR),< .ERR. EF.ERR,PFX,,FLG,MOR > ;WARNING MESSGAE ;CALL WITH: ; WARN PREFIX, DEFINE WARN(PFX,TXT,FLG,MOR),< .ERR. EF.WRN,PFX,,FLG,MOR > ;SEMI-FATAL ERROR--BATCON SHOULD REQUE JOB AND STOP SCHEDULING ;FOR A LITTLE WHILE ;CALL WITH: ; REQUE PREFIX, ; NEVER RETURN DEFINE REQUE(PFX,TXT,FLG,MOR),< .ERR. EF.REQ,PFX,,FLG,MOR > ;INFORMATION MESSAGE (PRINTED IN []) ;CALL WITH: ; INFO PREFIX, DEFINE INFO(PFX,TXT,FLG,MOR),< .ERR. EF.INF,PFX,,FLG,MOR > DEFINE .ERR. (TYP,PFX,TXT,FLG,MOR),< PUSHJ P,[XLIST PUSHJ P,ERRMSG ;CALL ERROR MESSAGE IFB , IFNB , IFB , IFNB , LIST] > > ;END IF1 SUBTTL Program initialization START: TDZA 17,17 ;CLEAR AC17 ON A NORMAL START MOVEI 17,1 ;SETUP A 1 ON A CCL START SETZB 0,ZZBEG ;PREPARE TO CLEAR CORE MOVEI 16,1 ;CLEAR THE AC'S BLT 16,16 ; .. MOVE T1,[ZZBEG,,ZZBEG+1] ;CLEAR OUT THE LOWSEG BLT T1,ZZMAX-1 ; .. MOVEM 17,SAOFST ;SAVE STARTING OFFSET MOVE P,PDPLST ;SET UP THE STACK PUSHJ P,GTTABS ;GET INFORMATION PUSHJ P,ISLGO ;CHECK TO SEE IF WE ARE LOGOUT (BEFORE 7.04) MOVE T1,[4,,RICC] ;LOAD UP JOBINT BLOCK MOVEM T1,INTBLK ; .. MOVX T1,ER.ICC ;ASK FOR CONTROL-C MOVEM T1,INTBLK+1 ; INTERCEPT MOVEI T1,INTBLK ;CONTROL-C INTERCEPT BLOCK MOVEM T1,.JBINT## ;STORE FOR THE MONITOR RESET ; PUSHJ P,PSINIT ;INITIALIZE PSI PJOB T1, ;Get our job number MOVEM T1,THSJOB ;Store for later PUSHJ P,ISBATC ;Is this a Batch job ? SKIPA ;No TLO F,FL.BAT!L.SOPR ;This guy is a real son of a batch PUSHJ P,.TOINI## ;INITIALIZE TTY OUTPUT PUSHJ P,TTYNEC ;SET TTY NO ECHO PUSHJ P,.T8BIT## ;ENABLE 8-BIT TTY I/O PUSHJ P,GENTIM ;GENERATE DAY-OF-WEEK AND TIMES DATA PUSHJ P,NOTBAT ;INIT TTY/JOB STATUS BITS PUSHJ P,CTYCHK ;CHECK CTY STATUS GETLIN T1, ;GET MY TTY NAME MOVEM T1,MYTTY ;SAVE IT MOVE T3,TTBITS ;GET TTY BITS TXNN T3,GL.CTY ;IS MY TTY THE CTY? CAMN T1,SAVOPR ;OR THE OPR? TLO F,L.OPR ;YES. REMEMBER THAT IN FLAG AC MOVE T3,THSJOB ;GET OUR JOB NUMBER TRMNO. T3, ;GET TTY UDX SETZ T3, ;SO WHAT? MOVEM T3,TTYUDX ;SALT AWAY FOR TRMOP. STUFF SETOM OOBEG ;SET SCAN SWITCH BLOCK TO -1 MOVE T1,[XWD OOBEG,OOBEG+1] BLT T1,OOMAX-1 MOVEI T1,RETRYM ;GET MAX NUMBER OF RETRIES MOVEM T1,LOGTRY DATE T1, MOVEM T1,TDATE ;SAVE FOR LATER PJRST COMMAN GTTABS: MOVSI T2,-GTBLEN ;MAKE AOBJN POINTER GTTAB1: MOVE T1,GTBARG(T2) ;GET AN ARGUMENT GETTAB T1, ;DO THE GETTAB MOVE T1,GTBFAI(T2) ;FAILED: USE THIS VALUE XCT GTBXCT(T2) ;STORE THE RESULT AOBJN T2,GTTAB1 ;GET ALL OF THE INFORMATION LDB T1,[POINTR UFDPRT,RB.PRV] MOVEM T1,UFDPRT ;RIGHT-JUSTIFY THE UFD PROTECTION CODE POPJ P, ;RETURN WHEN DONE ; THE ARGUMENTS TO THE TABS MACRO ARE: ; ; 1) GETTAB ARGUMENT ; 2) VALUE TO USE SHOULD THE GETTAB FAIL ; 3) INSTRUCTION TO STORE THE RESULT (WITHOUT THE AC) DEFINE TABS,< XLIST XX <%CNOPR> ,<'CTY '> , XX <%CNSJN> ,<^D64> , XX <%CNSTS> , , XX <%CNST2> , , XX <%CNTIC> ,<^D60> , XX <%CNDTM> , , XX <%CNFLN> , , XX <%CNDVN> , , XX <%NSHJB> , , XX <%LDMFD> ,<1,,1> , XX <%LDSYS> ,<1,,4> , XX <%LDFFA> ,<1,,2> , XX <%LDHLP> ,<2,,5> , XX <%LDQUE> ,<3,,3> , XX <%LDUFP> ,<775B8> , XX < 0,,.GTLOC> , , XX <-1,,.GTLOC> , , XX <-1,,.GTPPN> , , XX <-1,,.GTPRG> , , XX <-1,,.GTPRV> , , XX <-1,,.GTLPN> , , XX <-1,,.GTNM1> , , XX <-1,,.GTNM2> , , XX <-1,,.GTCNO> , , XX <-1,,.GTKCT> , , XX <-1,,.GTRCT> , , XX <-1,,.GTWCT> , , XX <-1,,.GTTIM> , , XX <-1,,.GTJLT> , , XX <-1,,.GTLIM> , , XX <-1,,.GTEQJ> , , LIST > ;END OF TABS MACRO ; BUILD THE TABLE OF GETTAB ARGUMENTS ; DEFINE XX (ARG,FAI,XCT),> GTBARG: TABS GTBLEN==.-GTBARG ; BUILD THE TABLE OF VALUES TO USE IN CASE OF FAILURE ; DEFINE XX (ARG,FAI<0>,XCT),> GTBFAI: TABS ; BUILD THE TABLE OF INSTRUCTIONS TO SAVE THE RESULT ; DEFINE XX (ARG,FAI,XCT),&<777037,,777777>>+<B12>>> GTBXCT: TABS ISLGO: MOVE T1,PRGNAM ;GET THE NAME OF THIS PROGRAM CAMN T1,['LOGOUT'] ;IS IT LOGOUT? SKIPN JLOGTM ;HAS THIS JOB EVER LOGGED IN? POPJ P, ;NO--RETURN PUSHJ P,.ISLGI## ;IS THE JOB CURRENTLY LOGGED IN? SETOM IAMLGO ;NO--MUST BE BEFORE 7.04 POPJ P, ;RETURN SUBTTL Command processing -- Initialization and dispatch COMMAN: MOVE T1,[SCILEN,,SCIBLK] ;POINT TO SCAN ARGUMENTS PUSHJ P,.ISCAN## ;CALL SCAN TO GET COMMAND JUMPGE T1,COMMA2 ;JUMP IF WE HAVE A COMMAND SKIPN SAOFST ;CCL ENTRY? JRST COMMA1 ;NO PUSHJ P,.SIXSW## ;READ COMMAND NAME FROM TMPCOR JUMPE N,COMMA1 ;GIVE UP IF NO KEYWORD MOVE T1,[IOWD COMLEN,COMLST] ;POINT TO LIST OF COMMANDS MOVE T2,N ;GET KEYWORD PUSHJ P,.LKNAM## ;SOME FLAVOR OF PASSWORD? COMMA1: TLOA T1,(1B0) ;STILL DON'T KNOW WHAT THE COMMAND IS MOVEI T1,-COMLST(T1) ;CONVERT FROM -M,,COMLST+N TO N COMMA2: MOVN T2,THSJOB ;MAKE NEGATIVE JOBSTS T2, ;READ JOB STATUS SETZ T2, ;??? JUMPGE T1,COMMA3 ;SKIP THIS STUFF IF COMMAND IS KNOWN MOVEI T1,COMLOG ;ASSUME A LOGIN COMMAND TXNN T2,JB.ULI ;JOB LOGGED IN? SKIPE IAMLGO ;RUNNING LOGOUT? MOVEI T1,COMKJB ;YES--THEN MUST BE A KJOB COMMAND COMMA3: TXNE T2,JB.ULI ;JOB LOGGED IN? TLO F,FL.LGN ;REMEMBER FOR LATER MOVE T3,COMLST(T1) ;GET COMMAND NAME MOVEM T3,COMNAM ;SAVE IT MOVN T3,T1 ;SAVE COMMAND VALUE MOVNM T3,COMIDX ;SAVE FOR LATER MOVSI T4,400000 ;GET A BIT LSH T4,(T3) ;POSITION IT HLLM T4,COMIDX ;SAVE IT TOO MOVSI T3,(CM.LOG) ;BIT TO TEST TLNE F,FL.LGN ;ALREADY LOGGED IN? TDNN T3,COMIDX ;YES--LOGIN COMMAND? JRST COMMA4 ;LET IT GO SKIPN .JBDDT## ;SKIP IF DDT LOADED FATAL KOD,,EF.SIL COMMA4: TXNN T2,JB.UJC ;JACCT? WARN IDJ, HRRZ T1,COMIDX ;GET COMMAND INDEX MOVE T2,COMNAM ;GET COMMAND NAME MOVEM T2,.NMUL## ;INCASE OF ERROR MOVEI T2,.TSIXN## ;TYPEOUT ROUTINE MOVEM T2,.LASWD## ;SAVE IT TOO PJRST @COMDSP(T1) ;DISPATCH SUBTTL Command processing -- ATTACH - ATTACH command DOATT: SETOM NOWBIT ;CAN ALWAYS ATTACH PUSHJ P,TTYECH ;SET TTY ECHO PUSHJ P,PSCAN ;INIT PARTIAL LINE SCANNER CAIL C,"0" ;RANGE CAILE C,"9" ; CHECK JRST ATTAC1 ;NOT A JOB NUMBER PUSHJ P,.REEAT## ;BACKUP ONE CHARACTER MOVEI T1,[ASCIZ /a job number/] MOVEM T1,HELP PUSHJ P,.DECNW## ;READ JOB NUMBER TO BE ATTACHED TO MOVEM N,ATTJBN ;SAVE JOB NUMBER PUSHJ P,SWTSCN ;CHECK FOR SWITCHES CAIN C," " ;SITTING ON A SPACE? PUSHJ P,.TIAUC## ;PRIME THE PUMP HRLZ PP,ATTJBN ;GET TARGET JOB NUMBER HRRI PP,.GTPPN ;GETTAB TABLE GETTAB PP, ;READ THE PPN MOVEI PP,0 ;SHOULDN'T FAIL PUSHJ P,USRDEF ;DO /BYPASS LEGALITY CHECKING CAIN C,"," ;ATTACH JOB,PASSWORD? JRST ATTACX ;YES JUMPG C,ATTAC1 ;EOL? JRST ATTAC2 ;ONWARD ATTAC1: MOVEI T1,[ASCIZ /a PPN or user name/] MOVEM T1,HELP ;SAVE INCASE INPUT TIMEOUT PUSHJ P,GETUSR ;READ USER ID (PPN/PATH/NAME) SKIPE FAILFL ;ACCESS FAILURE? JRST ATTAC2 ;YES SKIPN AENTRY+.AEPPN ;DID WE GET A REASONABLE PROFILE? JRST DOATT ;NO--PROBABLY THE RESULT OF A SCAN ERROR JUMPE PP,DOATT ;IGNORE BLANK LINES ATTAC2: MOVE T1,[2,,U.PATH+.FXDIR] ;INCASE OF ERROR SKIPE U.PATH+.FXDIR+2 ;ANY SFDS GIVEN? FATAL SIP,,EF.FMT,.TDIRB## ATTACX: PUSHJ P,ASKPSW ;READ PASSWORD SKIPE PP ;REALLY HAVE A PPN? PUSHJ P,ASKATT ;YES--SEE IF OTHER JOBS SAME PPN FATAL NJS,,EF.SIL MOVX T1,%NSHJB ; GETTAB T1, ;GET THE HIGHEST JOB IN USE TRNA ;ERROR - BE SAFE: DON'T ALLOW IT CAMGE T1,ATTJBN ;IS THIS A VALID JOB NUMBER? JRST NOATT ;NO - TELL THE USER MOVEI T1,.GTPPN ;CHECK TO SEE THAT THIS HRL T1,ATTJBN ; JOB HAS THE PPN HE GETTAB T1, ; CLAIMED IT DOES. THE MONITOR SETZ T1, ; MAKES THIS CHECK BUT LOGIN CAMN T1,PPN ; COULD HAVE A BUG WHICH WOULD JRST ATTAC3 ; ZAP A USER. MOVE PP,T1 MOVEM PP,PPN ATTAC3: SKIPE AENTRY+.AEPPN ;ALREADY HAVE PROFILE? JRST ATTAC4 ;YES MOVE T1,[EXP ] ;QUEUE. BLOCK CODE MOVE T2,PPN ;PPN THAT WE WANT PUSHJ P,STACCT ;GET ACCT DATA SETOM FAILFL ;NO SUCH PPN ATTAC4: MOVE T1,[.ACTRD,,T2] ;SET UP UUO AC MOVEI T2,2 ;TWO WORDS FOLLOWING (JOB NUMBER IN T3) MOVE T3,ATTJBN ;GET TARGET JOB NUMBER MOVEI T4,U.ACTS ;POINT TO STORAGE ACCT. T1, ;READ CONTROLLING JOB'S ACCOUNT STRING JFCL ;LET ACTDAE WORRY ABOUT IT SETZM AENTRY+.AEPCT ;CLEAR PASSWORD CHANGE REQUIREMENTS PUSHJ P,PSWCHK ;CHECK FOR A LEGAL PASSWORD SKIPE FAILFL ;ANY FAILURES? JRST NOATT ;TOO BAD PUSHJ P,PFLCHK ;PERFORM PROFILE CHECKS PUSHJ P,NEWPPN ;CHANGE PPN PUSHJ P,BLDJSL ;BUILD JOB SEARCH LIST SKIPA ;FAILED PUSHJ P,SWITCH ;READ SWITCH.INI ATTAC5: SKIPLE U.PASS ;/PASSWORD SEEN (LOGIN TURNED INTO ATTACH)? PUSHJ P,CHGPSW ;YES--REQUEST CHANGE PUSHJ P,AVLCHK ;CHECK FOR SYSTEM AVAILABILITY PUSHJ P,KSYCHK ;CHECK FOR PENDING KSYS MOVE T3,CNTLJT ;GET CONTROLLING JOB'S BITS (PROBABLY OURS) TXNN T3,GL.LCP!GL.CNE!GL.HDP ;LOCAL COPY, COMMAND NO ECHO OR HDX? PUSHJ P,TTYECH ;SET TTY ECHO PUSHJ P,MAILCH ;CHECK FOR MAIL PUSHJ P,OLDPPN ;SWITCH BACK TO OUR OLD PPN ([2,5]) PUSHJ P,USGATT ;SEND USAGE MESSAGE TO [SYSTEM]ACCOUNTING PUSHJ P,PRETMS ;DO PRE-MESSAGE TRMOPS PUSHJ P,LGNMES ;TYPE SYS:LOGIN.TXT PUSHJ P,POSTMS ;DO POST MESSAGE TRMOPS PUSHJ P,ATTLGL ;SEE IF TARGET JOB AND PPN AGREE PUSHJ P,ATTJOB ;ATTACH TO THE TARGET JOB PJRST MONRET ;GO FINISH UP SUBTTL Command processing -- KJOB - KJOB command KJOB: PUSHJ P,GTTABS ;FILL IN ALL THE GETTABS PUSHJ P,CHKLPN ;CHECK TO SEE IF WE'RE PIVOTED PUSHJ P,PSCAN ;INIT PARTIAL LINE SCANNER AND EAT SWITCHES JUMPG C,ERREXA ;CHECK FOR JUNK ON COMMAND LINE SKIPN REPARS ;ANYTHING TYPED? JRST MONLGO ;JUST /HELP PUSHJ P,SWITCH ;DO SWITCH.INI PROCESSING SKIPGE T1,U.KJOB ;GET TYPE OF KJOB MOVEI T1,1 ;ASSUME /FAST TLNE F,FL.BAT ;BATCH JOB? SETZ T1, ;YES MOVEM T1,U.KJOB ;UPDATE MOVE T1,TTBITS ;GET TTY BITS TXNN T1,GL.ITY ;PTY? TLNE F,FL.BAT ;OR BATCH? CLRBFI ;CLEAR TYPEAHEAD GETPPN PP, ;GET OUR PPN JFCL ;JACCT MOVSI T1,.STTLM ;FUNCTION,,ZERO SETUUO T1, ;CLEAR TIME LIMIT WARN CCT, MOVX T1,1 ; MOVEM T1,CCWAIT ;NO MORE CTRL/C'S ALLOWED SKIPE ENQLOK ;HAVE ANY OUTSTANDING LOCKS? FATAL ENQ,,EF.SIL PUSHJ P,TRMCLS ;CLEAR SCREEN PUSHJ P,TYPLPN ;TELL USER WE PIVOTED BACK IF NEEDED SKIPE U.NMSG ;/NOMESSAGE? PUSHJ P,OTHJOB ;CHECK FOR OTHER JOBS SAME PPN PUSHJ P,DELTMP ;DELETE TMP FILES PUSHJ P,SETPTH ;SET PATH TO [,] PUSHJ P,CHKQTA ;CHECK QUOTAS PUSHJ P,SUMARY ;PRINT SUMMARY SKIPE T1,.JBDDT## ;DEBUGGING? JRST (T1) ;YES, GO TO DDT SETZB T3,T4 ;BLOCK FOR TMPCOR UUO MOVE T1,[.TCRDD,,T3] ;DELETE DIRECTORY TMPCOR T1, ;DO IT JFCL ;DOESN'T MATTER LOGOUT ;****END OF JOB**** SUBTTL Command processing -- DOLOG - LOGIN command DOLOG: PUSHJ P,BANNER ;TYPE LOGIN BANNER RESTAR: MOVE T1,[OOBEG,,OOBEG+1] ;SET UP BLT SETOM OOBEG ;INIT FIRST WORD BLT T1,OOMAX ;INIT SWITCH STORAGE MOVE T1,[N.ZER##,,N.ZER##+1] ;SET UP BLT SETZM N.ZER## ;CLEAR FIRST WORD BLT T1,N.EZER## ;ZERO SCAN'S SCAN BLOCK FOR /RUN SETOM .OPTN## ;INIT /OPTION INCASE RESTART MOVE P,PDPLST ;RE-INIT STACK PUSHJ P,ACCLOG ;DO LOGMAX CHECKING PUSHJ P,FAILUR ;CHECK LOGIN FAILURE FLAG PUSHJ P,GENTIM ;GENERATE DAY-OF-WEEK AND TIMES DATA PUSHJ P,PARSE ;GO PARSE LOGIN LINE PUSHJ P,ASKPSW ;READ PASSWORD(S) PUSHJ P,NEWPPN ;CHANGE PPN SKIPN FAILFL ;DON'T BOTHER WITH SEARCH LIST STUFF IF FAILING PUSHJ P,BLDJSL ;BUILD JOB SEARCH LIST SKIPA ;FAILED PUSHJ P,SWITCH ;READ SWITCH.INI PUSHJ P,ASKNAM ;READ USER NAME IF REQUIRED PUSHJ P,ASKACT ;READ ACCOUNT STRING IF REQUIRED PUSHJ P,ASKRMK ;READ REMARK STRING IF REQUIRED PUSHJ P,PSWCHK ;CHECK VALAIDITY OF PASSWORD PUSHJ P,PPNEXP ;CHECK FOR PPN/PSW EXPIRATION PUSHJ P,PFLCHK ;CHECK USER'S PROFILE PUSHJ P,TIMCHK ;CHECK FOR LEGAL ACCESS TIMES SKIPE FAILFL ;ANY FAILURES? JRST TRYAGN ;TOO BAD PUSHJ P,ASKLOG ;ASK LOGIN/ATTACH PREFERENCE IF DETACHED JOBS JRST ATTAC5 ;USER ATTACHING INSTEAD OF LOGGING IN A NEW JOB PUSHJ P,AVLCHK ;CHECK FOR SYSTEM AVAILABILITY PUSHJ P,KSYCHK ;CHECK FOR PENDING KSYS MOVE T1,AENTRY+.AEPRV;AND PRIV WD MOVEM T1,PRIVWD ;STORE PRIV WORD PUSHJ P,SETGLX ;SETUP GALAXY BATCH PARAMETERS PUSHJ P,OTHJOB ;REPORT OTHER JOBS SAME PPN PUSHJ P,MNTSTR ;MOUNT ALL STRS (SET RIPLOG) PUSHJ P,CHGNAM ;CHANGE USER NAME IF NECESSARY SKIPLE U.PASS ;/PASSWORD SEEN? PUSHJ P,CHGPSW ;YES--REQUEST CHANGE PUSHJ P,USGLOG ;SEND USAGE MESSAGE TO [SYSTEM]ACCOUNTING PUSHJ P,STRCHK ;CHECK NEED TO RECOMPUTE, EMPTY S/L, ETC. PUSHJ P,PRVSET ;SET PRIV'ED JOB PARAMETERS PUSHJ P,ACCCHK ;CHECK LAST VALIDATION FAILURE PUSHJ P,MAILCH ;CHECK FOR MAIL PUSHJ P,STRMES ;DO /STR IF DESIRED PUSHJ P,LOGJOB ;LOG THE JOB IN PUSHJ P,USRSET ;SET UNPRIV'ED JOB PARAMETERS PUSHJ P,DAYMES ;PRINT OUT DAILY MESSAGES PUSHJ P,POSTMS ;DO POST-MESSAGE TRMOP.S (SPEED) PJRST MONRET ;EXIT ;SUBROUTINE TO PARSE THE LOGIN COMMAND LINE ;CALL WITH: ; PUSHJ P,PARSE ; RETURN HERE IF OK ; PARSE: TLZ F,FL.WLD SETZM Z.STRT ;INIT SOME SWITCHES TO 0 MOVE T1,[XWD Z.STRT,Z.STRT+1];SETUP BLT BLT T1,Z.END-1 ;CLEAR THEM OUT SETOM OOBEG ;CLEAR OUT SWITCH BLOCK MOVE T1,[XWD OOBEG,OOBEG+1] BLT T1,OOMAX-1 MOVE T1,[IOWD DVICES*2+1,DEVTAB] ;INIT PTR TO DEV TABLE MOVEM T1,DEVPTR ;.. PUSHJ P,PSCAN ;INIT PARTIAL LINE SCANNER MOVEI T1,[ASCIZ /a PPN, path, or user name/] MOVEM T1,HELP ;SAVE INCASE INPUT TIMEOUT PUSHJ P,GETUSR ;READ USER ID (PPN/PATH/NAME) SKIPE FAILFL ;ACCESS FAILURE? JRST PARSE1 ;YES SKIPN AENTRY+.AEPPN ;DID WE GET A REASONABLE PROFILE? JRST PARSE ;NO--PROBABLY THE RESULT OF A SCAN ERROR JUMPE PP,PARSE ;IGNORE BLANK LINES MOVEM PP,PPN ;YES - SALT PPN AWAY FOR LOGIN UUO PARSE1: MOVEI T1,U.PATH ;GET ADDR OF PATH SPEC TO CHECK PUSHJ P,PTHCHK ;MAKE SURE IT'S A NICE PATH SPEC BADPTH: FATAL IPS,,EF.FMT SKIPN U.PATH+.FXDEV ;WAS A PATH TYPED? POPJ P, ;NO SKIPN T4,U.PATH+.FXDIR ;WAS A PPN TYPED IN THE PATH? MOVE T4,PP ;NO--USE TARGET PPN TLNN T4,-1 ;IS PROJECT NUMBER ZERO? HLL T4,PP ;DEFAULT TO USER'S TRNN T4,-1 ;IS PROGRAMMER NUMBER ZERO? HRR T4,PP ;DEFAULT TO USER'S MOVEM T4,U.PATH+.FXDIR ;UPDATE IN PATH BLOCK POPJ P, ;RETURN SUBTTL Command processing -- REATTA - REATTACH command REATTA: GETPPN PP, ;GET OUR PPN JFCL ;INCAES OF JACCT PUSHJ P,USRDEF ;DO /BYPASS LEGALITY CHECKING MOVE T1,[EXP ] ;QUEUE. BLOCK CODE MOVE T2,PP ;PPN THAT WE WANT PUSHJ P,STACCT ;READ OUR ACCOUNTING PROFILE SETOM FAILFL ;??? PUSHJ P,TTYECH ;SET TTY ECHO MOVE T1,PP ;INCASE OF ERROR SKIPE FAILFL ;ERRORS ALREADY? FATAL NSP,,EF.FMT!EF.SIL,.TPPNW## PUSHJ P,PSCAN ;INIT PARTIAL LINE SCANNER AND EAT SWITCHES PUSHJ P,.TICAN## ;CHECK FOR ALPHANUMERICS JUMPG C,ERREXA ;CHECK FOR JUNK ON COMMAND LINE SKIPN REPARS ;ANYTHING TYPED JRST MONRET ;JUST /HELP PUSHJ P,.SIXSC## ;READ TARGET TTY NAME CAIN C,":" ;DEVICE TERMINATOR? PUSHJ P,.TIAUC## ;EAT IT JUMPE N,REATTA ;REPROMPT IF NO INPUT JUMPL N,REATT1 ;HAVE A REAL NAME? HLRZS N ;PUT IN RH HRLI N,'TTY' ;MAKE IT TTYNNN REATT1: MOVEM N,NEWTTY ;SAVE TARGET TTY NAME PUSHJ P,SWTSCN ;CHECK FOR TRAILING SWITCHES JUMPG C,ERREXA ;CHECK FOR JUNK ON THE LINE PUSHJ P,SWITCH ;DO SWITCH.INI PROCESSING MOVE N,NEWTTY ;GET TTY NAME BACK MOVE T1,N ;GET TTY NAME (SAVE FOR ERRORS) MOVE T2,T1 ;MAKE A WORKING COPY IONDX. T2,UU.PHY ;REAL TTY? REATT2: FATAL DNT,,EF.FMT!EF.SIL,.TSIXN## MOVEM T2,TTYUDX ;SAVE TARGET UDX GETLCH T2 ;READ TTY BITS MOVEM T2,TTBITS ;SAVE MOVE T3,TTYUDX ;GET NAME AGAIN DEVCHR T3, ;GET DEVICE CHARACTERISTICS TXNN T3,DV.DSK ;A DSK? TXNN T3,DV.TTY ;A TTY? JRST REATT2 ;NOT A PHYSICAL TTY MOVX T1,UU.PHS ;PHYSICAL MOVE T2,N ;DEVICE NAME SETZ T3, ;NO BUFFERS OPEN IOC,T1 ;SEE IF AVAILABLE SKIPA T1,N ;FAILED JRST REATT3 ;ONWARD MOVE T1,TTYUDX ;GET TARGET UDX DEVTYP T1, ;READ OWNING JOB NUMBER JRST REATT1 ;FAILED LDB T1,[POINTR T1,TY.JOB] ;GET OWNER JOB FATAL TIU,,EF.FMT!EF.SIL,.TDECW## REATT3: MOVEI T1,IOC ;CHANNEL NUMBER IONDX. T1, ;GET UDX JRST REATT1 ;FAILED MOVSI T2,'TTY' ;GET OUR TTY IONDX. T2,UU.PHY ;CONVERT TO UDX JFCL ;CAN'T FAIL CAMN T1,T2 ;SAME? FATAL TIY,,EF.FMT!EF.SIL MOVE T3,[%CNFLN] ;ARGUMENT GETTAB T3, ;READ FRCLIN LINE NUMBER JFCL TRO T3,.UXTRM ;MAKE INTO A UDX CAMN T3,TTYUDX ;SAME? FATAL TIF,,EF.FMT!EF.SIL!EF.WTO!EF.ACF MOVE T1,N ;RESET NAME INCASE OF ERRORS MOVX T2,GL.SLV ;BIT TO TEST TDNE T2,TTBITS ;SLAVED? FATAL TIS,,EF.FMT!EF.SIL,.TSIXN## MOVX T1,JP.POK ;BIT TO TEST CAME PP,ALPPPN ;GOD CAN DO ANYTHING TDNE T1,AENTRY+.AEPRV ;AND SO MAY HIS APPOSTLES JRST REATT4 ;GO REATTACH TO ANOTHER TTY PUSHJ P,PFLCHK ;CHECK PROFILE FOR LEGAL TTY TYPES REATT4: MOVE T1,THSJOB ;GET OUR JOB NUMBER INFO FJN,,,.TDECW## MOVEI T1,CRLFPD ;DOT PUSHJ P,.TSTRG## ;TYPE IT PUSHJ P,.TOOUT## ;FORCE OUTPUT MOVE T2,TTYUDX ;GET TARGET UDX TRZ T2,.UXTRM ;STRIP OFF UDX OFFSET HRLZS T2 ;PUT IN LH TXO T2,AT.UUM ;ATTACH IN USER MODE HRR T2,THSJOB ;INCLUDE OUR JOB NUMBER ATTACH T2, ;DO THE ATTACH FATAL ATF,,EF.FMT!EF.SIL MOVE T1,THSJOB ;GET JOB AGAIN INFO NAJ,,,.TDECW## RELEAS IOC, ;GIVE UP CHANNEL PJRST MONRET ;CLEAN UP SUBTTL Command processing -- SESSIO - SESSION command SESSIO: PUSHJ P,TTYECH ;SET TTY ECHO GETPPN PP, ;GET OUR PPN JFCL ;INCASE OF JACCT MOVEM PP,PPN ;SAVE PUSHJ P,PSCAN ;INIT PARTIAL LINE SCANNER AND EAT SWITCHES JUMPG C,ERREXA ;CHECK FOR JUNK ON COMMAND LINE SKIPN REPARS ;ANYTHING TYPED? JRST MONRET ;JUST /HELP PUSHJ P,SWITCH ;DO SWITCH.INI PROCESSING MOVE T1,[EXP ] ;QUEUE. BLOCK CODE MOVE T2,PPN ;PPN THAT WE WANT PUSHJ P,STACCT ;GET ACCT DATA FATAL APA,,EF.FMT!EF.SIL PUSHJ P,ASKACT ;READ ACCOUNT STRING IF REQUIRED PUSHJ P,ASKRMK ;READ REMARK STRING IF REQUIRED PUSHJ P,SETACT ;SET ACCOUNT STRING PUSHJ P,USGSES ;SEND USAGE MESSAGE TO [SYSTEM]ACCOUNTING PJRST MONRET ;DONE SUBTTL Command processing -- SETPSW - SET PASSWORD command SETPSW: PUSHJ P,PSCAN ;INIT PARTIAL LINE SCANNER AND EAT SWITCHES JUMPLE C,SETPS1 ;ERROR IF EOL PUSHJ P,.SIXSC## ;GET NEXT WORD MOVE T1,[IOWD 1,['PASSWO']] MOVE T2,N ;GET KEYWORD PUSHJ P,.LKNAM## ;SOME FLAVOR OF PASSWORD? SETPS1: FATAL PMS,<"PASSWORD" missing in SET PASSWORD command>,EF.SIL PUSHJ P,SWTSCN ;SCAN SWITCHES (MAYBE THE CLOWN TYPED /H) JRST PASSW0 ;JOIN COMMON CODE SUBTTL Command processing -- PASSWO - PASSWORD command PASSWO: PUSHJ P,PSCAN ;INIT PARTIAL LINE SCANNER AND EAT SWITCHES PASSW0: JUMPG C,ERREXA ;CHECK FOR JUNK ON COMMAND LINE SKIPN REPARS ;ANYTHING TYPED? JRST MONRET ;JUST /HELP MOVEI T1,[ASCIZ /password may not be changed/] PUSHJ P,LOKWRN ;CHECK FOR LOCKED ACCOUNTING FILES PJRST MONRET ;GIVE UP MOVEI T1,1 ;GET A "YES" MOVEM T1,U.PASS ;FORCE /PASSWORD:YES GETPPN T1, ;GET OUR PPN JFCL ;INCASE OF JACCT MOVEM T1,PPN ;SAVE PASSW1: MOVEI T1,[ASCIZ /your old password/] MOVEI T2,[ASCIZ /Old password: /] MOVEI T3,PASSWD ;BUFFER ADDRESS PUSHJ P,ASKPSW ;READ PASSWORDS PUSHJ P,CHGPSW ;REQUEST PASSWORD CHANGE PJRST MONRET ;FINISH UP SUBTTL Command processing -- TRANSL - TRANSL command TRANSL: SETZM TRNCNT ;ZERO COUNT SETZM PMTFLG ;ZERO FLAG PUSHJ P,TTYECH ;SET TTY ECHO PUSHJ P,PSCAN ;INIT PARTIAL LINE SCANNER SKIPA ;ALREADY HAVE FIRST CHARACTER TRANS1: PUSHJ P,.TICHE## ;GET FIRST CHARACTER TRANS2: SETZB USERID ;ZERO USER NAME SETZ PP,LSTPPN ;ZERO PPN PUSHJ P,GETUSR ;GET PPN/USERNAME MOVE T1,[2,,U.PATH+.FXDIR] ;SAVE IN CASE OF ERROR SKIPE U.PATH+.FXDIR+2 ;ANY SFDs GIVEN? FATAL SIP,,EF.FMT,.TDIRB## MOVEM PP,LSTPPN ;SAVE INCASE OF FAILURE MOVE T1,AENTRY+.AEPPN ;GET PPN IOR T1,AENTRY+.AENAM ;AND NAME JUMPN T1,TRANS3 ;HAVE EITHER JUMPL C,TRNXIT ;EOL? PJRST ERRILC ;ILLEGAL CHARACTER ON COMMAND LINE TRANS3: AOS TRNCNT ;ADD ONE TO COUNT PUSHJ P,TRNPRT ;PRINT TRANSLATION LINE CAIN C,"," ;ANOTHER SPEC ON THE WAY? JRST TRANS1 ;YES, LOOP JUMPG C,ERREXA ;CHECK FOR EXCESS DATA ON COMMAND LINE HRRZ T1,TRNCNT ;GET THE TOTAL COUNT CAILE T1,1 ;DON'T PRINT OUT TOTALS ON DULL RESULTS PUSHJ P,TRNPR2 ;PRINT TOTALS TRNXIT: SKIPN PMTFLG ;SKIP IF NO REPROMPT AOJGE C,TRANSL ;EOF? PUSHJ P,MONRET ;EXIT TO MONITOR JRST START ;THE FOOL TYPED CONTINUE TRNPRT: PUSHJ P,.TCRLF## ;START WITH A BLANK LINE SKIPE T1,AENTRY+.AEPPN ;MUST HAVE A PPN SKIPN AENTRY+.AENAM ;AND A NAME SKIPA ;TRANSLATION FAILED JRST TRNPR1 ;DISPLAY RETURNED DATA MOVE T2,[1,,0] ; ADDM T2,TRNCNT ;ADD TO ERROR COUNT SKIPE T1,LSTPPN ;A PPN? WARN (NTF,,,PRTPPN) JUMPN T1,TRNDON ;PRINT IT MOVEI T1,USERID ;POINT TO NAME WARN (PTF,,,.T8STR##) TRNDON: POPJ P, ;RETURN TRNPR1: MOVEI T1,2 ;TWO PUSHJ P,.TSPAN## ;SPACES PUSHJ P,PRTUSR ;PRINT USER-ID PUSHJ P,.TCRLF## ;APPEND A CRLF POPJ P, TRNPR2: PUSHJ P,.TCRLF## ;PRINT A CRLF MOVEI T1,[ASCIZ / A total of /] PUSHJ P,.TSTRG## ;START SUMMARY LINE HRRZ T1,TRNCNT ;GET TOTAL COUNT HLRZS TRNCNT ;GET FAILURE COUNT SUB T1,TRNCNT ;GET SUCCESS COUNT JUMPE T1,TRNPR3 ;JUMP IF NO TRANSLATIONS MOVEI T2,[ASCIZ /translation/] PUSHJ P,PRTPLS ;PRINT PLURALIZED STRING SKIPE TRNCNT ;ANY ERRORS? JUMP .TCRLF## ;NO, ALL DONE MOVEI T1,[ASCIZ / and /] PUSHJ P,.TSTRG## ;PRINT TEXT TRNPR3: MOVE T1,TRNCNT ;GET ERROR COUNT AGAIN MOVEI T2,[ASCIZ /error/] PUSHJ P,PRTPLS ;PRINT PLURALIZED STRING PJRST .TCRLF## ;END LINE AND RETURN SUBTTL EXIT routines -- FLUSH - Special error processing FLUSH: PUSHJ P,.CLRBF## ;CLEAR TYPE-AHEAD SKIPE IAMLGO ;ARE WE RUNNING LOGOUT BEFORE 7.04? JRST MONLGO ;YES--EXIT PUSHJ P,.ISLGI## ;ARE WE LOGGED IN? SKIPA T1,[KLGMSG] ;POINT TO KJOB TEXT JRST MONRET ;GO FINISH UP PUSHJ P,.TSTRG## ;PRINT TEXT PUSHJ P,.TOOUT## ;FORCE OUTPUT SKIPN .JBDDT## ;DEBUGGING? SKIPLE LOGTRY ;FAILED SEVERAL TIMES TO LOGIN? JRST MONRET ;DON'T DISCONNECT THE LINE MOVEI T1,3 ;WAIT A BIT SO THE SLEEP T1, ; KJOB TEXT GETS OUT MOVE T1,[.NDTDS,,T2] ;SET UP UUO MOVEI T2,2 ;TWO WORDS MOVE T3,MYTTY ;SIXBIT TTY NAME NODE. T1, ;DISCONNECT OUR LINE JFCL ;OK IF DISCONNECT FAIELD PJRST MONRET ;FINISH UP NOATT: FATAL CAJ,,EF.SIL TRYAGN: TLNE F,FL.BAT ;BATCH JOB? TDZA T1,T1 ;DON'T WASTE TIME MOVEI T1,RETRYS ;GET SECONDS TO SNOOZE ON RETRY SKIPE T1 ;ZERO? SLEEP T1, ;ZZZZZZ FATAL IET,,EF.FMT!EF.SIL, SUBTTL Exit routines -- MONRET - Exit program MONRET: MOVSI T1,(AC.DCR) ;GET THE DECREMENT BIT ACCLG. T1, ;TRY TO COUNT DOWN JFCL ;IF ERROR IGNORE AND CONTINUE MONLGO: SKIPE T1,.JBDDT## ;SKIP IF NO DDT JRST (T1) ;GO TO DDT RESET ;STOP I/O MOVX T1,CM.ATT ;BIT TO TEST TDNE T1,COMIDX ;ATTACH? JRST MONRE1 ;YES--IT'S SPECIAL PUSHJ P,.TOOUT## ;FORCE OUT ANY REMAIN TEXT IN OUTPUT BUFFER PUSHJ P,.ISLGI## ;ARE WE LOGGED IN? JRST MONRE1 ;NO SKIPN RUNBLK+.RNDEV ;SKIP IF USER IS LOCKED INTO A PROGRAM PUSHJ P,.RUNCM## ;PROCESS /RUN IF ANY MONRE1: SKIPE IAMLGO ;ARE WE RUNNING LOGOUT BEFORE 7.04? PUSHJ P,RELOGN ;YES--RELOGIN THE JOB MOVX T1,PS.FOF ; PISYS. T1, ;TURN OFF THE PSI INTERRUPT SYSTEM JFCL ;OH WELL, WE TRIED SETZM .JBSA## ;CLEAR START ADDRESS SETZM .JBREN## ;CLEAR REENTER ADDRESS SETZM .JBINT## ;CLEAR INTERCEPTS (JACCT STILL ON) MOVSI 17,XITMON ;ASSUME NORMAL PROGRAM EXIT SKIPE RUNBLK+.RNDEV ;PROGRAM-TO-RUN? MOVSI 17,XITRUN ;YES BLT 17,17 ;LOAD THE ACS JRST 0 ;JUMP INTO THE ACS AND FINISH UP RELOGN: SKIPN JLOGTM ;JUST TO BE SURE, WERE WE EVER LOGGED IN? POPJ P, ;NO--RETURN MOVE T1,[-5,,LGNBLK] ;SET UP UUO AC LOGIN T1, ;GET BACK IN POPJ P, ; SUBTTL Exit routines -- RICC - Control-C trapping ; SUBROUTINE TO ALLOW CONTROL-C'S TO WORK AGAIN ; CALL WITH: ; PUSHJ P,CTLCOK ; RETURN HERE IF NO CONTROL-C TYPED ; CTLCOK: SETZM CCWAIT ;CLEAR THE CONTROL-C DELAY FLAG AOSE CCTYPED ;WAS A CONTROL-C TYPED? POPJ P,0 ;NO--RETURN TO CALLER ;YES--FALL INTO RICC ;HERE WHEN A CONTROL-C TYPED RICC: PUSH P,INTBLK+2 ;SAVE OLD PC SKIPN CCWAIT ;DO WE WANT CONTROL-C HELD UP? JRST RICC1 ;NO--CHARGE AHEAD SKIPG CCWAIT ;DO WE WANT THIS MESSAGE? INFO WFC, SETZM INTBLK+2 ;REENABLE INTERRUPTS SETOM CCTYPED ;SET THE FLAG POPJ P,0 ;RETURN RICC1: SKIPE IAMLGO ;ARE WE RUNNING LOGOUT BEFORE 7.04? JRST MONLGO ;YES--EXIT PUSHJ P,.ISLGI## ;ARE WE LOGGED IN? AOJE T1,.MNRET## ;NO--EXIT HRRZ T1,COMIDX ;GET INVOKING COMMAND INDEX CAIN T1,COMLOG ;LOGIN? WARN LAC, JRST MONRET ;EXIT QUICKLY SUBTTL Exit routines -- SUMARY - Print KJOB summary SUMARY: SKIPE U.KJOB ;/BATCH? SKIPE U.NMSG ;OR NOT /NOMESSAGE? TRNA ;YES, SHOW THE SUMMARY JRST SUMAR3 ;NO, EXIT QUICKLY MOVE T1,RUNTIM ;GET RUNTIME IN TICKS IMULI T1,^D1000 ;CONVERT TO MILLI-TICKS IDIV T1,JIFFIE ;CONVERT TO MILLI-SECONDS MOVEM T1,RUNTIM ;AND STORE RUNTIME MOVE T1,KCTNUM ;GET CTI IN KCTS IMULI T1,^D100 ;GET CTI IN *100 IDIV T1,JIFFIE ;DIVIDE BY JIFSEC MOVEM T1,KCTNUM ;YIELDING KILO-CORE-CENTI-SECS MOVSI T1,777700 ;MASK FOR INCREMENTAL READS AND WRITES ANDCAM T1,DSKRDS ;TURN OFF INCREMENTAL READS ANDCAM T1,DSKWTS ;TURN OFF INCREMENTAL WRITES MOVEI T1,[ASCIZ /Job /] PUSHJ P,.TSTRG## MOVE T1,THSJOB ;JOB NUMBER PUSHJ P,.TDECW## MOVEI T1,[ASCIZ / User /] PUSHJ P,.TSTRG## SKIPE T1,NAME ;GET FIRST HALF OF MY NAME PUSHJ P,.TSIXN## ;TYPE IT SKIPN T1,NAME ;GET FIRST HALF OF MY NAME BACK MOVEI T1,77 ;MAKE THE FOLLOWING TEST FAIL TRNN T1,77 ;WAS THE LAST CHARACTER A SPACE? PUSHJ P,.TSPAC## ;YES, TYPE A SPACE SKIPE T1,NAME2 ;GET SECOND HALF PUSHJ P,.TSIXN## ;TYPE IT PUSHJ P,.TSPAC## ;TYPE A SPACE MOVE T1,PP ;GET PPN PUSHJ P,.TPPNW## ;AND TYPE IT PUSHJ P,.TCRLF## ;TYPE A CRLF MOVEI T1,[ASCIZ /Logged-off /] PUSHJ P,.TSTRG## ;TYPE THE STRING MOVE T1,MYTTY ;GET THE TTY NAME PUSHJ P,.TSIXN## ;AND TYPE IT MOVEI T1,[ASCIZ / at /] PUSHJ P,.TSTRG## ;TYPE IT MOVE T1,CURDTM ;GET DATE AND TIME PUSHJ P,.CNTDT## ;TAKE APART ADDI T1,^D500 ;ROUND TO SECOND FOR PRINTING CAMG T1,[^D24*^D60*^D60*^D1000];PAST MIDNIGHT? JRST SUMAR1 ;NO, NORMAL CASE ADDI T2,1 ;WAS 23:59:59.835, BUMP DAY SUB T1,[^D24*^D60*^D60*^D1000];MAKE TIME 0:0:0 SUMAR1: PUSH P,T2 ;SAVE DATE PUSHJ P,.TTIME## ;TYPE TIME MOVEI T1,[ASCIZ / on /] PUSHJ P,.TSTRG## POP P,T1 ;GET DATE PUSHJ P,.TDATE## ;TYPE DATE PUSHJ P,.TCRLF## ;AND A CRLF MOVEI T1,[ASCIZ /Runtime:/] PUSHJ P,.TSTRG## ;AND A LABEL MOVE T1,RUNTIM ;GET RUNTIME IN MILLI-SECONDS PUSHJ P,.TTIME## ;TYPE IT MOVEI T1,[ASCIZ /, KCS:/] PUSHJ P,.TSTRG## MOVE T1,KCTNUM ;GET CORE-TIME INTEGRAL IN KCS*100 IDIVI T1,^D100 ;CONVERT TO KCS PUSHJ P,.TDECW## ;TYPE IT MOVEI T1,[ASCIZ /, Connect time:/] PUSHJ P,.TSTRG## ;TYPE IT MOVE T1,CURDTM ;GET TIME OF DAY NOW SUB T1,JLOGTM ;SUBTRACT JOB LOGIN TIME MULI T1,^D86400 ;CONVERT TO SECONDS ASHC T1,^D17 ;SHIFT IT IN IMULI T1,^D1000 ;CONVERT TO MILLISECS PUSHJ P,.TTIME## ;AND TYPE IT PUSHJ P,.TCRLF## ;AND A CRLF MOVEI T1,[ASCIZ /Disk Reads:/] PUSHJ P,.TSTRG## ;TYPE A LINE MOVE T1,DSKRDS ;GET NUMBER OF READS PUSHJ P,.TDECW## ;AND TYPE IT MOVEI T1,[ASCIZ /, Writes:/] PUSHJ P,.TSTRG## MOVE T1,DSKWTS ;GET NUMBER OF WRITES PUSHJ P,.TDECW## ;TYPE IT SKIPE L.OJCS ;OTHER JOB CONTAIN CONFLICTING STR? JRST SUMAR2 ;YES, WE DIDN'T COUNT EVERYTHING THEN MOVEI T1,[ASCIZ /, Blocks saved:/] PUSHJ P,.TSTRG## MOVE T1,TOTBLK ;GET TOTAL NUMBER OF BLOCKS PUSHJ P,.TDECW## ;AND TYPE IT SUMAR2: PUSHJ P,.TCRLF## ;AND A CRLF SUMAR3: MOVX T1,GL.ITY ; SKIPL DETFLG ;DETACHED? TDNE T1,TTBITS ;USING A PTY? POPJ P, ;YES - FINISHED PUSHJ P,.TCRLF## ;TYPE A CRLF MOVEI T1,"." ; PUSHJ P,.TCHAR## ;TYPE A DOT PUSHJ P,.TOOUT## ;FORCE OUT THE LAST OUTPUT SETO T3, ;THIS TERMINAL SKIPL U.DISC ;/DISCONNECT OR /NODISCONNECT? JRST SUMAR4 ;YES - NO DEFAULT TO FILL IN DMOVE T1,[EXP <2,,T2>,<.TOAPC>] TRMOP. T1, ;GET APC CODE JRST SUMAR4 ;ERROR MOVEI T4,1 ; MOVSI T2,-DISLEN ;-LENGTH OF TABLE CAME T1,DISTAB(T2) ;MATCH? AOBJN T2,.-1 ;LOOP SKIPG T2 ;FOUND A MATCH? MOVEM T4,U.DISC ;YES - /DISCONNECT SUMAR4: MOVEI T2,.TOSOP ;FUNCTION SUMAR5: MOVX T1,<2,,T2> ;LENGTH,,ADDRESS SKIPL DETFLG ;DETACHED? TRMOP. T1, ;OUTPUT COMPLETE? JRST SUMAR6 ;YES - HANG UP THE PHONE MOVEI T1,1 ;SLEEP TIME SLEEP T1, ;ZZZZZZ JRST SUMAR5 ;TRY AGAIN SUMAR6: SKIPG U.DISC ;WANT TO DISCONNECT LINE? POPJ P, ;NO, FINISHED MOVEI T1,1 ;OK NOW GIVE THE OUTPUT A CHANCE TO SLEEP T1, ; MAKE IT THROUGH THE REMOTE STATION DMOVE T1,[EXP <2,,T2>,<.TODSF>] SKIPL DETFLG ;DETACHED? TRMOP. T1, ;DISCONNECT DATASET JFCL ;OH WELL, WE TRIED DMOVE T1,[EXP <2,,T2>,<.TODNT>] SKIPL DETFLG ;DETACHED? TRMOP. T1, ;DISCONNECT NETWORK TERMINAL JFCL ;OH WELL, WE TRIED POPJ P, ;RETURN ; MACRO TO DEFINE APC CODES FOR LINES WHICH WILL GET AUTOMATICALLY ; DISCONNECTED. DEFINE DISC,< X () ;;NRT, CTERM, LAT > ;END DEFINE DISC DEFINE X,(APC),< IRP APC, > DISTAB: DISC DISLEN==.-DISTAB SUBTTL Exit routines -- XITMON - Code to exit to the monitor XITMON: PHASE 0 SETZM .JBDA ;(00) CLEAR FIRST WORD MOVSI 0,.JBDA ;(01) START OF LOW SEGMENT TO ZERO HRRI 0,.JBDA+1 ;(02) MAKE A BLT POINTER BLT 0,.JBDA!777 ;(03) CLEAR MOST OF FIRST PAGE MOVEI 0,.JBDA!777 ;(04) END OF LOW SEG TO ZERO HRLI 0,1 ;(05) KILL THE HIGH SEGMENT TOO CORE 0, ;(06) RELEASE MOST OF LOW SEG + ALL OF HIGH SEG JFCL ;(07) SHOULDN'T FAIL SETZ 0, ;(10) ZAP AC SETNAM 0 ;(11) CLEAR PROGRAM NAME AND JACCT LOGOUT 1, ;(12) DIE QUIETLY JRST .-1 ;(13) STAY DEAD EXP 0 ;(14) FREE AC EXP 0 ;(15) FREE AC EXP 0 ;(16) FREE AC EXP 0 ;(17) FREE AC DEPHASE SUBTTL Exit routines -- XITRUN - Code to do a RUN UUO XITRUN: PHASE 0 SETZM Z.XITE ;(00) CLEAR FIRST WORD MOVSI 0,Z.XITE ;(01) START OF LOW SEGMENT TO ZERO HRRI 0,Z.XITE+1 ;(02) MAKE A BLT POINTER BLT 0,Z.XITE!777 ;(03) CLEAR MOST OF FIRST PAGE MOVEI 0,Z.XITE!777 ;(04) END OF LOW SEG TO ZERO HRLI 0,1 ;(05) KILL THE HIGH SEGMENT TOO CORE 0, ;(06) RELEASE MOST OF LOW SEG + ALL OF HIGH SEG JFCL ;(07) SHOULDN'T FAIL SETZ 0, ;(10) ZAP AC SETNAM 0 ;(11) CLEAR PROGRAM NAME AND JACCT MOVEI 0,RUNBLK ;(12) POINT TO RUN UUO BLOCK RUN 0,UU.PHY ;(13) CHAIN TO PROGRAM-TO-RUN LOGOUT 1, ;(14) FAILED--DIE QUIETLY EXP 0 ;(15) FREE AC EXP 0 ;(16) FREE AC EXP 0 ;(17) FREE AC DEPHASE SUBTTL Exit routines -- DAYMES - Print daily messages DAYMES: PUSHJ P,.SAVE1## ;SAVE P1 MOVE T1,PPN ;GET PPN TLNE F,FL.WLD ;WILD PPN? INFO LIA,,,.TPPNW## PUSHJ P,DAYTIM ;TYPE DAYTIME, DATE, DAY MOVX T1,CM.LOG ;BIT TO TEST TDNE T1,COMIDX ;LOGIN COMMAND? PUSHJ P,LGNMES ;YES--TYPE SYS:LOGIN.TXT MOVEI T1,2 ;GET DEFAULT FOR /NOTICE MOVE P1,U.NOTC ;GET SWITCH TYPED AOSN P1 ;WAS A SWITCH TYPED? MOVEM T1,U.NOTC ;NO - USE DEFAULT PUSHJ P,NOTE ;PRINT NOTES MOVSI T1,(CM.LOG!CM.ATT) ;BITS TO TEST TDNN T1,COMIDX ;LOGIN OR ATTACH COMMAND? POPJ P, ;NO PUSHJ P,ISOPSR ;IS THIS AN OPSER SUBJOB? PUSHJ P,NOTICE ;NO--PRINT NOTICE.TXT POPJ P, ;DON'T TYPE NOTICE.TXT SUBTTL Accounting routines -- ACCCHK - Check for a previous valid LOGIN ACCCHK: TLNN F,FL.WLD ;WILDCARDED PPN? SKIPN LSTACC ;HAVE A LAST ACCESS UDT? POPJ P, ;MAYBE THIS IS THE FIRST TIME MOVX T1,AE.FAI ;BIT TO TEST TDNE T1,LSTFLG ;WAS IT A FAILURE? JRST ACCCH1 ;YES--WARN USER INFO LAS,,,E.LAS POPJ P, ;RETURN ACCCH1: WARN LAF,,,E.LAF POPJ P, ;RETURN E.LAF:! E.LAS: MOVE T1,PPN ;GET PPN PUSHJ P,.TPPNW## ;PRINT IT MOVEI T1,[ASCIZ / succeeded on /] MOVX T2,AE.FAI ;GET FAILURE BIT TDNE T2,LSTFLG ;WAS IT A FAILURE? MOVEI T1,[ASCIZ / failed on /] PUSHJ P,.TSTRG## ;PRINT DELIMITER MOVE T1,LSTACC ;GET UFD OF LAST ACCESS PJRST .TDTTM## ;TYPE IT AND RETURN SUBTTL Accounting routines -- ACTCHK - Check for [SYSTEM]ACCOUNTING ACTCHK: TLNE F,FL.BYP ;BYPASSING THE ACCOUNTING SYSTEM? POPJ P, ;YES--RETURN NOW MOVEI T1,^D5 ;TRY 5 TIMES MOVEI T2,^D1 ;WAITING 1 SECOND PUSHJ P,ACTCH1 ;SEE IF PID FOR [SYSTEM]ACCOUNTING EXISTS POPJ P, ;IT IS INFO WFA, MOVEI T1,^D30 ;TRY 30 TIMES MOVEI T2,^D10 ;WAITING 10 SECONDS PUSHJ P,ACTCH1 ;SEE IF PID FOR [SYSTEM]ACCOUNTING EXISTS POPJ P, ;IT IS STOP ADN,,EF.WTO ACTCH1: MOVE T3,[%SIACT] ;GETTAB ARGUMENT GETTAB T3, ;GET PID FROM MONITOR JRST .POPJ1## ;NOT THERE JUMPN T3,.POPJ## ;RETURN IF THERE'S A PID SOJLE T1,.POPJ1## ;COUNT DOWN SLEEP T2, ;ZZZZ JRST ACTCH1 ;AND TRY AGAIN SUBTTL Accounting routines -- CHGNAM - Change name CHGNAM: MOVX T1,AE.NCH ;BIT TO TEST TDNN T1,AENTRY+.AEFLG ;CHANGING THE NAME? POPJ P, ;NO PUSHJ P,ACTCHK ;WAIT FOR [SYSTEM]ACCOUNTING TO START MOVEI T1,.QUMAE ;ACCOUNTING FUNCTION MOVEI T2,0 ;CENTRAL STATION OPR MOVE T3,[RSPLEN,,RSPBLK] ;RESPONSE BLOCK POINTER MOVEI T4,CHGTIM ;TIMEOUT PUSHJ P,QUEINI ;SET UP QUEUE. UUO ARGUMENT BLOCK DMOVE T2,[EXP ,] ;FUNCTION CODE DMOVEM T2,(T1) MOVE T2,[EXP ] ;SET VERSION VALIDATION MOVEM T2,2(T1) ;STORE DMOVE T2,[EXP <%AECVN,,0>,] ;GET VERSION INFO DMOVEM T2,3(T1) ;STORE DMOVE T2,[EXP ,] ;PPN WE ARE GOING TO AFFECT DMOVEM T2,5(T1) ;STORE DMOVE T2,[EXP ,] ;NEW NAME DMOVEM T2,7(T1) HRLI T1,-QUEBLK+11(T1) ;GET LENGTH HRRI T1,QUEBLK ;AND ADDRESS PUSH P,CCWAIT ;PRESERVE THE SETTING OF ^C FLAG SETOM CCWAIT ;DON'T LET THE GUY ^C OUT QUEUE. T1, ;REQUEST PASSWORD CHANGE PJRST QUEERR ;REPORT QUEUE. UUO ERROR INFO UNS, POP P,CCWAIT ;RESTORE POPJ P, ;RETURN SUBTTL Accounting routines -- CHGPSW - Change password CHGPSW: PUSHJ P,ACTCHK ;WAIT FOR [SYSTEM]ACCOUNTING TO START MOVEI T1,.QUMAE ;ACCOUNTING FUNCTION MOVEI T2,0 ;CENTRAL STATION OPR MOVE T3,[RSPLEN,,RSPBLK] ;RESPONSE BLOCK POINTER MOVEI T4,CHGTIM ;TIMEOUT PUSHJ P,QUEINI ;SET UP QUEUE. UUO ARGUMENT BLOCK DMOVE T2,[EXP ,] ;FUNCTION CODE DMOVEM T2,(T1) MOVE T2,[EXP ] ;MUST VALIDATE VERSION MOVEM T2,2(T1) ;SET IT UP DMOVE T2,[EXP <%AECVN,,0>,] ;GET VERSION INFO DMOVEM T2,3(T1) ;STORE DMOVE T2,[EXP ,] ;PPN WE ARE GOING TO AFFECT DMOVEM T2,5(T1) DMOVE T2,[EXP ,] ;OLD PASSWORD DMOVEM T2,7(T1) DMOVE T2,[EXP ,] ;NEW PASSWORD DMOVEM T2,11(T1) HRLI T1,-QUEBLK+13(T1) ;GET LENGTH HRRI T1,QUEBLK ;AND ADDRESS PUSH P,CCWAIT ;PRESERVE THE SETTING OF ^C FLAG SETOM CCWAIT ;DON'T LET THE GUY ^C OUT QUEUE. T1, ;REQUEST PASSWORD CHANGE PJRST QUEERR ;REPORT QUEUE. UUO ERROR INFO PHC, POP P,CCWAIT ;RESTORE POPJ P, ;RETURN SUBTTL Accounting routines -- LOKCHK/LOKWRN - Check for locked files LOKCHK: SETZ T1, ;NO MESSAGE LOKWRN: PUSH P,T1 ;SAVE T1 AOS -1(P) ;ASSUME NOT LOCKED MOVX T1,AE.LOK ;BIT TO TEST TDNN T1,AENTRY+.AEFLG ;ACCOUNTING FILE LOCKED? JRST LOKWR1 ;NO SOS -1(P) ;COMPENSATE FOR AOS SKIPE T1,0(P) ;SKIP IF NO MESSAGE WANTED WARN AFL,,,.TSTRG## LOKWR1: POP P,T1 ;RESTORE T1 POPJ P, ;AND RETURN SUBTTL Accounting routines -- PFLCHK - Profile check PFLCHK: SKIPE FAILFL ;ABOUT TO FAIL? POPJ P, ;YES--LET USER THINK ALL IS WELL MOVE T3,AENTRY+.AEACC ;GET ACCESS BITS MOVE T1,TTBITS ;AND OUR TTY BITS TXNN T1,GL.ITY ;SKIP IF PTY JRST PFLCH1 ;SEE IF MAY LOGIN AT THIS TERMINAL TLNE F,FL.BSJ ;SKIP IF NOT BATCH JOB SUBJOB TXNE T3,AE.SBJ ;SKIP IF MAY NOT LOGIN AS SUBJOB SKIPA ;OK JRST PFLCH2 ;NO GOOD TLNE F,FL.BAT ;BATCH JOB? TXNE T3,AE.BAT ;YES - ALLOWED TO BE ONE? SKIPA ;NOT BATCH OR BATCH & ALLOWED TO BE JRST PFLCH2 ;BATCH & SHOULDN'T BE - COMPLAIN TLNE F,FL.BAT ;BATCH JOB? POPJ P, ;YES--RETURN MOVE T2,CNTLJP ;CONTROL JOB PPN CAME T2,ALPPPN ;OK IF RUN BY JOB WITH ALL PRIVILEGES CAMN T2,PPN ;OK IF RUN BY SAME PPN POPJ P, ;NO MORE CHECKS NEEDED MOVE T1,CNTLJT ;GET LINE BITS FOR CONTROL JOB PFLCH1: TLNE F,FL.BYP!L.OPR!L.SOPR ;OK IF /BYPASS, OPR, SUB OF OPR, OR [1,2] POPJ P, ;LET HIM THROUGH MOVX T2,AE.LOC ;LOCAL BIT TXNE T1,GL.REM ;SKIP IF NOT REMOTE HARDWIRED TTY MOVX T2,AE.RMT ;REMOTE BIT TXNE T1,GL.DSL ;SKIP IF NOT DATA SET TTY MOVX T2,AE.DST TDNN T2,T3 ;SKIP IF MAY LOGIN AT THIS TERMINAL JRST PFLCH2 ;NO GOOD TXNN T3,AE.FIO ;SKIP IF FILES-ONLY POPJ P, ;RETURN MOVX T2,AE.FIO ;FIX BIT PFLCH2: MOVX T1,CM.ATT ;BIT TO TEST TDNE T1,COMIDX ;ATTACH COMMAND? FATAL MNA,,EF.SIL,E.MNA FATAL MNL,,EF.SIL,E.MNL E.MNL:! E.MNA: MOVEI T1,[ASCIZ/files-only PPN/] TXNN T2,AE.FIO ;FILES-ONLY? MOVEI T1,[ASCIZ/local/] TXNE T2,AE.RMT ;SKIP IF NOT REMOTE HARDWIRED TTY MOVEI T1,[ASCIZ/remote/] TXNE T2,AE.DST ;SKIP IF NOT DATA SET TTY MOVEI T1,[ASCIZ/data set/] TXNE T2,AE.ROP ;SKIP IF NOT REMOTE CTY OR OPR MOVEI T1,[ASCIZ/remote CTY or OPR/] TLNE F,FL.BSJ ;SKIP IF NOT BATCH JOB SUBJOB MOVEI T1,[ASCIZ/as a batch job subjob/] TLNE F,FL.BAT ;BATCH JOB? MOVEI T1,[ASCIZ/as a batch job/] PJRST .TSTRG## ;TYPE AND RETURN SUBTTL Accounting routines -- PSWCHK - Check for a legal password PSWCHK: SKIPN FAILFL ;IGNORE PSW CHECK IF GOING TO FAIL ANYWAY TLNE F,FL.CTY!FL.BYP!FL.BAT!L.SOPR ;PASSWORD REQUIRED? POPJ P, ;NO MOVE T2,CNTLJP ;CONTROL JOB PPN CAME T2,ALPPPN ;OK IF RUN BY JOB WITH ALL PRIVILEGES CAMN T2,PPN ;OK IF RUN BY SAME PPN POPJ P, ;DON'T NEED TO CHECK PASSWORD MOVEI T1,.QUMAE ;ACCOUNTING FUNCTION MOVEI T2,0 ;CENTRAL STATION OPR MOVE T3,[RSPLEN,,RSPBLK] ;RESPONSE BLOCK POINTER MOVEI T4,ACCTIM ;TIMEOUT PUSHJ P,QUEINI ;SET UP QUEUE. UUO ARGUMENT BLOCK DMOVE T2,[EXP ,] DMOVEM T2,(T1) ;CHECK PASSWORD AND ACCOUNT STRING MOVE T2,[EXP ] MOVE T3,PPN ;PPN THAT WE WANT DMOVEM T2,2(T1) ; DMOVE T2,[EXP <.APWLW,,.UGPSW>,PASSWD] DMOVEM T2,4(T1) ;POINT TO PASSWORD DMOVE T2,[EXP <.AACLW,,.UGACT>,U.ACTS] DMOVEM T2,6(T1) ;POINT TO ACCOUNT STRING MOVEI T3,ACCTRY ;INITIALIZE RETRY COUNTER HRLI T4,-QUEBLK+10(T1) ;GET LENGTH HRRI T4,QUEBLK ;AND ADDRESS PSWCH1: MOVE T1,T4 ;COPY LENGTH,,ADDRESS QUEUE. T1, ;DO THE QUEUE. TRNA ;EXAMINE THE ERROR POPJ P, ;NO ERROR: RETURN CAIE T1,QUTMO% ;TIMEOUT ERROR? JRST PSWCH2 ;NO, FAILED SOJL T3,PSWCH2 ;TOO MANY RETRIES: FAILURE INFO WAR, MOVEI T1,ACCTI2 ;TIMEOUT FOR RETRIES MOVEM T1,QUEBLK+.QUTIM JRST PSWCH1 ;TRY AGAIN PSWCH2: SETOM FAILFL ;FAILED POPJ P, ;RETURN SUBTTL Accounting routines -- PPNEXP - Check for PPN/PSW expiration PPNEXP: SKIPE FAILFL ;ABOUT TO FAIL? POPJ P, ;YES MOVE T2,[%CNDTM] ;DATE TIME IN INTERNAL FORMAT GETTAB T2, ;GET IT POPJ P, ;IF FAILS, GIVE THE GUY A BREAK MOVE T1,AENTRY+.AEEXP ;GET EXPIRATION DATE/TIME OF PPN MOVEM T1,XPDDTM ;SAVE JUMPLE T1,PPNEX1 ;DON'T CHECK IF NO EXPIRATION DATE CAMG T1,T2 ;SKIP IF NOT EXPIRED YET FATAL PHE, SUB T1,[EXPWRN,,0] ;SUBTRACT OFF THRESHOLD CAML T1,T2 ;SKIP IF WE'RE CLOSE JRST PPNEX1 ;NO NEED FOR WARNING MOVE T1,XPDDTM ;GET EXPIRATION DATE WARN PPE,,,.TDTTM## PPNEX1: SKIPG T1,AENTRY+.AEPCT ;GET PSW EXIPRATION DATE/TIME POPJ P, ;WON'T EXPIRE OR ALREADY EXPIRED SUB T1,[PSWWRN,,0] ;SUBTRACT OFF THRESHOLD CAML T1,T2 ;SKIP IF WE'RE CLOSE POPJ P, ;NO NEED FOR WARNING MOVE T1,AENTRY+.AEPCT ;GET DATE/TIME AGAIN WARN PSE,,,.TDTTM## POPJ P, ;RETURN SUBTTL Accounting routines -- SETTNL - Set up terminal designator for USAGE SETTNL: PUSHJ P,.PSH4T## ;SAVE TEMPS MOVSI T4,(ASCIZ/D/) ;ASSUME DETACHED MOVNI T1,1 ;-1 FOR OUR JOB TRMNO. T1, ;GET TERMINAL DESIGNATOR JRST SETTN1 ;DETACHED DPB T1,[POINT 9,MONLNO,35] ;STORE IN CASE NO NETWORKS MOVE T1,TTBITS ;GET OUR TTY BITS MOVSI T4,(ASCIZ/T/) ;ASSUME REGULAR TTY TXNE T1,GL.CTY ;THE SYSTEM CTY MOVSI T4,(ASCIZ/C/) ;YES TXNE T1,GL.ITY ;INVISIBLE (PSEUDO) TTY MOVSI T4,(ASCIZ/P/) ;YES HRRZS T1 ;GET RID OF GETLCH BITS GTNTN. T1, ;CONVERT TO NODE AND LINE JRST SETTN1 ;NO NETWORKS HRRZM T1,MONLNO ;STORE REAL LINE NUMBER HLRZ T3,T1 ;ISOLATE NODE NUMBER HRRI T2,2 ;NUMBER OF ARGUMENTS MOVE T1,[.NDRNN,,T2] ;RETURN NODE NAME FOR NUMBER NODE. T1, ;ASK TODD SKIPA ;FAILED? MOVEM T1,MONNOD ;STORE SIXBIT NODE NAME SETTN1: MOVEM T4,MONTDE ;STORE TERMINAL DESIGNATOR PUSHJ P,.POP4T## ;RESTORE TEMPS POPJ P, ;AND RETURN SUBTTL Accounting routines -- STACCT - Read a user profiles ; HERE TO ASK [SYSTEM] ACCOUNTING FOR USER'S PROFILE ; CALL: ; T1/ QA.IMM!.UGPPN OR LEN,,.UGUSR ; T2/ PPN OR POINTER TO USER'S NAME ; RETURN ; NON SKIP - NO SUCH USER ; SKIP - ENTRY IS STORED IN AENTRY STACCT: TLNE F,FL.BYP ;SUPPOSED TO BYPASS ACCOUNTING? JRST STACC1 ;YES, DON'T WAIT FOR HIM TO START PUSH P,T2 ;SAVE PPN OR POINTER TO USER'S NAME PUSH P,T1 ;SAVE QA.IMM!.UGPPN OR LEN,,.UGUSR PUSHJ P,TTYNEC ;SET TTY NO ECHO PUSHJ P,ACTCHK ;WAIT FOR [SYSTEM]ACCOUNTING TO START MOVEI T1,.QUMAE ;ACCOUNTING FUNCTION MOVEI T2,0 ;CENTRAL STATION OPR MOVE T3,[.AEMAX,,AENTRY] ;RESPONSE BLOCK POINTER MOVEI T4,ACCTIM ;TIMEOUT PUSHJ P,QUEINI ;SET UP QUEUE. UUO ARGUMENT BLOCK DMOVE T2,[EXP ,] DMOVEM T2,(T1) ;OBTAIN PROFILE POP P,2(T1) ;RESTORE QA.IMM!.UGPPN OR LEN,,.UGUSR POP P,3(T1) ;RESTORE PPN OR POINTER TO USER'S NAME MOVEI T3,ACCTRY ;INITIALIZE RETRY COUNTER HRLI T4,-QUEBLK+4(T1) ;GET LENGTH HRRI T4,QUEBLK ;AND ADDRESS STACC3: MOVE T1,T4 ;COPY LENGTH,,ADDRESS QUEUE. T1, ;DO THE QUEUE. TRNA ;EXAMINE THE ERROR JRST STACC2 ;ONWARD CAIE T1,QUTMO% ;TIMEOUT ERROR? JRST STACC4 ;NO, FAILED SOJL T3,STACC4 ;TOO MANY RETRIES: FAILURE INFO WAR, MOVEI T1,ACCTI2 ;TIMEOUT FOR RETRIES MOVEM T1,QUEBLK+.QUTIM JRST STACC3 ;TRY AGAIN STACC4: MOVE T1,[BADACT,,AENTRY] ;NO SUCH USER BLT T1,AENTRY+.AEMIN ;COPY SETOM FAILFL ;REMEMBER THE FAILURE TLNE F,FL.BAT ;BATCH JOB? FATAL NPB,,EF.WTO POPJ P, ;GIVE UP STACC1: MOVE T1,[DEFACT,,AENTRY] ;COPY DEFAULT FOR /BYPASS TO AENTRY BLT T1,AENTRY+.AEMIN ;COPY AS FAR AS THE DEC RESERVED WORDS PUSHJ P,SSLCOP ;COPY THE SSL STACC2: HLRZ T1,AENTRY+.AEVRS ;GET VERSION NUMBER CAIE T1,ACTFMT ;CURRENT? STOP (WVR,,,E.WVR) JRST .POPJ1## ;RETURN E.WVR: PUSHJ P,.TOCTW## ;PRINT BAD VERSION NUMBER MOVEI T1,[ASCIZ / when expecting /] PUSHJ P,.TSTRG## ;PRINT TEXT MOVEI T1,ACTFMT ;GET GOOD NUMBER PJRST .TOCTW## ;PRINT IT AND RETURN ; MACRO TO GENERATE WORDS IN THE DEFAULT (/BYPASS) PROFILE DEFINE ADEF (OFS,DAT),< RELOC DEFACT+.AE'OFS DAT > DEFACT: ADEF (VRS,) ;VERSION AND LENGTH ADEF (PPN,<1,,2>) ;PPN ADEF (NAM,) ADEF (PRV,<-1,,0>) ;PRIVILEGE WORD 1 ; ALL DEC PRIVS ADEF (PRX,<<.OBSOP>B1>) ;PRIVILEGE WORD 2 ; SYSTEM OPERATOR PRIVS ADEF (LGT,<-1>) ;LOGIN TIMES ; ALL HOURS (WEEKDAYS AND WEEKENDS) ADEF (COR,<40000,,40000>) ;PHYSICAL,,VIRTUAL CORE LIMITS ; 16384K ADEF (IPC,<777,,-1>) ;IPCF QUOTAS ; 512 PIDS, 512 SENDS, 512 RECEIVES ADEF (CTX,<4B8!1000>) ;CONTEXT QUOTAS ; 4 SAVED CONTEXTS, 512 SAVED PAGES ADEF (WCH,) ;WATCH MTA ADEF (ACC,<-1>) ;ALL ACCESS TYPES ADEF (ENQ,<777>) ;ENQ/DEQ QUOTA ADEF (EXP,<-1>) ;EXPIRATION DATE/TIME RELOC DEFACT+.AEMIN ; MACRO TO GENERATE WORDS IN THE BAD PROFILE DEFINE ABAD (OFS,DAT),< RELOC BADACT+.AE'OFS DAT > BADACT: ABAD (VRS,) ;VERSION AND LENGTH ABAD (PPN,<0,,0>) ;PPN ABAD (NAM,) ABAD (PRV,<0,,0>) ;PRIVILEGE WORD 1 ; NO PRIVS ABAD (PRX,<0>) ;PRIVILEGE WORD 2 ; NO PRIVS ABAD (LGT,<-1>) ;LOGIN TIMES ; ALL HOURS (WEEKDAYS AND WEEKENDS) ABAD (COR,<1000,,1000>) ;PHYSICAL,,VIRTUAL CORE LIMITS ABAD (IPC,<0>) ;IPCF QUOTAS ; 0 PIDS, 0 SENDS, 0 RECEIVES ABAD (CTX,<1B8!1000>) ;CONTEXT QUOTAS ; 1 SAVED CONTEXT, 512 SAVED PAGES ABAD (WCH,) ;WATCH BITS - MTA ABAD (EXP,<-1>) ;EXPIRATION DATE/TIME RELOC BADACT+.AEMIN SUBTTL Accounting routines -- TIMCHK - Check for access times TIMCHK: SKIPE FAILFL ;ABOUT TO FAIL? POPJ P, ;YES--LET USER THINK ALL IS WELL MOVE T2,AENTRY+.AELGT;PICK UP TIME TO LOGIN TIMES WORD TDNN T2,NOWBIT ;IS HE ALLOWED NOW? REQUE SOT, POPJ P, ;RETURN SUBTTL KJOB routines -- CHKQTA - Main quota checking loop CHKQTA: PUSHJ P,.SAVE1## ;SAVE P1 SETZ P1, ;INITIALIZE ERROR COUNT PUSHJ P,INIQTA ;INITIALIZE STRUCTURE LIST SETZM TOTBLK ;INITIALIZE TOTAL BLOCKS USED SETOM RDUFLG ;SET SO WE GET A RECOMPUTING MSG SETOM QTACNT ;START AT THE BEGINNING CHKQT1: PUSHJ P,NXTQTA ;GET THE NEXT STRUCTURE IN THE S/L JRST CHKQT3 ;DONE SETZ T1, ;CHECK QUOTAS PUSHJ P,UFDDMO ;DISMOUNT THE STRUCTURE JRST CHKQT2 ;ERROR MOVE T1,UFDARG+.UFUSD ;GET THE NUMBER OF BLOCKS USED ADDM T1,TOTBLK ;UPDATE THE TOTAL NUMBER OF BLOCKS JRST CHKQT1 ;FIND NEXT STRUCTURE CHKQT2: MOVE T1,UFDARG+.UFERR ;GET THE ERROR CODE CAIN T1,UFSND% ;STRUCTURE NOT DISMOUNTED (OVER QUOTA) SKIPE U.KJOB ;AND DOING /BATCH? AOJA P1,CHKQT1 ;NO, UNRECOVERABLE ERRORS PUSHJ P,LGTBAT ;YES, ENFORCE LOGGED-OUT QUOTA ADDM T1,TOTBLK ;UPDATE THE TOTAL NUMBER OF BLOCKS SETOM U.NMSG ;SHOW SUMMARY, EVEN IF /NOMESSAGE MOVX T1,UF.NOQ ;DO NOT CHECK QUOTAS PUSHJ P,UFDDMO ;DISMOUNT THE STRUCTURE AOJA P1,CHKQT1 ;ERROR: FIND THE NEXT STRUCTURE JRST CHKQT1 ;FIND NEXT STRUCTURE CHKQT3: JUMPE P1,.POPJ## ;NO UNRECOVERABLE ERRORS: RETURN PUSHJ P,RESQTA ;RESTORE THIS JOB'S SEARCH LIST PJRST MONRET ;GO EXIT SUBTTL KJOB routines -- INIQTA - Initialize the list of structures ;CALL INIQTA TO RECORD THE JOB SEARCH LIST IN QTATAB AND SET UP FOR ; SUBSEQUENT CALLS TO NXTSTR TO RETURN NEXT STRUCTURE IN JOB'S ; SEARCH LIST. INIQTA: SETZM QTANUM ;CLEAR NUMBER OF STRUCTURES IN JSL SETO T2, ;START WITH FIRST STRUCTURE INIQT1: MOVE T1,[3,,T2] ;GET POINTER TO ARGUMENTS JOBSTR T1, ;ASK FOR NEXT STR IN JOB SEARCH LIST JRST INIQT3 ;ERROR CAMN T2,[-1] ;END OF LIST IF -1 POPJ P, ;RETURN AOS T1,QTANUM ;BUMP NUMBER OF STRUCTURES CAILE T1,STRMAX ;TOO MANY STRUCTURES? JRST INIQT2 ;YES, ERROR SUBI T1,1 ;WE WANT AN OFFSET IMULI T1,.DFJBL ;TIMES LENGTH OF AN ENTRY MOVEM T2,QTATAB+.DFJNM(T1) ;STORE STRUCTURE NAME MOVEM T3,QTATAB+.DFJDR(T1) ;STORE RESERVED QUOTA MOVEM T4,QTATAB+.DFJST(T1) ;STORE STATUS BITS JRST INIQT1 ;ON TO NEXT STRUCTURE INIQT2: WARN TMS, SOSA QTANUM ; INIQT3: WARN JUF, POPJ P, ; SUBTTL KJOB routines -- NXTQTA - Get next structure in search list ;CALL NXTQTA WILL THE CURRENT STRUCTURE NAME IN QTATAB TO RETURN ; THE NEXT STRUCTURE IN THE SEARCH LIST IN QTATAB. ; ;WHEN THE END OF THE SEARCH LIST IS REACHED (OR IF JOBSTR FAILS), ; THE NON-SKIP RETURN IS TAKEN. NXTQTA: AOS T4,QTACNT ;ADVANCE TO NEXT STRUCTURE CAML T4,QTANUM ;GONE PAST THE END? POPJ P, ;YES, TAKE DONE RETURN IMULI T4,.DFJBL ;TIMES LENGTH OF AN ENTRY SKIPN T1,QTATAB+.DFJNM(T4) ;GET STRUCTURE NAME JRST NXTQTA ;SKIP THE FENCE MOVEM T1,UFDFSN ;SAVE FOR POSTERITY ; MOVE T2,QTATAB+.DFJDR(T4) ;GET RESERVED QUOTA MOVE T3,QTATAB+.DFJST(T4) ;GET STATUS BITS TXZN T3,DF.SWL ;WAS SOFTWARE WRITE LOCK SET? JRST .POPJ1## ;NO, SKIP RETURN MOVX T1,.FSMNW ;LOAD FUNCTION CODE INTO T1 MOVE T2,UFDFSN ;PICK UP STRUCTURE NAME AGAIN MOVE T4,[3,,T1] ;POINT AT ARGUMENTS STRUUO T4, ;CLEAR SOFTWARE WRITE-LOCK SKIPA T1,UFDFSN ;ERROR JRST .POPJ1## ;NOERROR: SKIP RETURN WARN CCW,,,.TSIXN## POPJ P, ;ERROR RETURN SUBTTL KJOB routines -- RESQTA - Restore this job's search list RESQTA: SKIPG QTANUM ;ANY STRUCUTURES IN S/L? POPJ P, ;NO, NOTHING TO RESTORE MOVX T1,.FSDSL ;FUNCTION TO DEFINE S/L MOVEM T1,QTAUUO+.FSFCN MOVE T1,THSJOB ;MY JOB NUMBER MOVEM T1,QTAUUO+.FSDJN MOVE T1,.MYPPN## ;MY PPN MOVEM T1,QTAUUO+.FSDPP SETZM QTAUUO+.FSDFL ;NO FLAGS MOVE T1,QTANUM ;GET NUMBER OF STRUCTURES IMULI T1,.DFJBL ;TIMES LENGTH OF AN ENTRY ADDI T1,.FSDSO ;ADD IN HEADER LENGTH HRLI T1,QTAUUO ;POINT AT ARGUMENTS MOVSS T1 ;... STRUUO T1, ;PUT S/L BACK IN ORIGINAL ORDER JFCL ;WE TRIED POPJ P, ;RETURN SUBTTL KJOB routines -- LGTBAT - Batch deletion algorithm LGTBAT: PUSHJ P,.SAVE1## ;SAVE P1 SETZM BATTOT ;CLEAR TOTAL BLOCKS SETZM BATNQC ;CLEAR TOTAL NQC BLOCKS SETZM BATDFL ;CLEAR NUMBER OF FILES DELETED MOVE T1,UFDARG+.UFQTO MOVEM T1,BATQTO ;QUOTA OUT PUSHJ P,STEP1 ;GO TO STEP 1 RELEAS IOC, ;RELEASE THE CHANNEL MOVE T1,BATTOT ;RETURN THE TOTAL NUMBER OF BLOCKS ADD T1,BATNQC ; (BOTH CHECKED AND UNCHECKED) POPJ P, ; SUBTTL KJOB routines -- STEP1 - Delete files that are too large ;STEP 1 OF THE FILE-DELETION ALGORITHM DOES A RECOMP OF THE SPECIFIED ; UFD, AND DELETES ALL FILES WHICH ARE STRICTLY LARGER THAN THE ; LOGGED-OUT QUOTA. STEP1: PUSHJ P,BATALL ;SETUP TO GET *.* STEP1A: PUSHJ P,BATNXT ;GET A FILE TO WORK ON JRST STEP1C ;NO MORE FILES OPEN IOC,OPN ;OPEN THE CHANNEL JRST STEP1A ;LOSE, IGNORE IT LOOKUP IOC,LEB ;LOOKUP THE FILE JRST STEP1A ;LOSE, IGNORE IT MOVX T4,RP.NQC ;GET NQC BIT TDNE T4,LEB+.RBSTS ;IS IT SET? JRST STEP1D ;YES, COUNT THE FILE MOVE T3,LEB+.RBALC ;GET BLOCKS ALLOCATED SKIPE LEB+.RBSIZ ;CHECK FOR ZERO BLOCK FILES CAMLE T3,BATQTO ;LARGER THAN QUOTA? JRST STEP1B ;YES, DELETE IT ADDM T3,BATTOT ;NO, ACCUMLATE THE TOTAL JRST STEP1A ;AND LOOP STEP1B: PUSHJ P,BATDEL ;DELETE THE FILE JRST STEP1A ;AND LOOP STEP1C: MOVE T1,BATTOT ;GET TOTAL BLOCKS CAMG T1,BATQTO ;GREATER THAN QUOTA? POPJ P, ;NO, EXIT THE ALGORITHM JRST STEP2 ;YES, GO ON TO STEP 2 STEP1D: MOVE T3,LEB+.RBALC ;GET BLOCKS ALLOCATED ADDM T3,BATNQC ;ADD TO TOTAL JRST STEP1A ;AND LOOP AROUND SUBTTL KJOB routines -- STEP2 - Delete FIRST files ;STEP 2 OF THE FILE-DELETION ALGORITHM LOOPS THRU THE 'FIRST' TABLE ; OF EXTENSIONS IN ORDER, AND FOR EACH EXTENSION, 'EXT', WE ; BEGIN DELETING ALL UNPROTECTED (<200) *.EXT UNTIL WE ARE ; UNDER QUOTA. IF WE DELETE *.EXT AND ARE STILL OVER QUOTA ; WE GO ON TO THE NEXT EXTENSION. IF WE REACH THE END OF THE ; TABLE, ON TO STEP 3. STEP2: MOVEI P1,FIRST ;START ADR OF TABLE HRLI P1,-FIRLEN ;AND NEGATIVE LENGTH STEP2A: MOVE T1,(P1) ;GET EXT,,MASK PUSHJ P,BATEXT ;SETUP TO GET *.EXT STEP2B: PUSHJ P,BATNXT ;GET A FIND JRST STEP2C ;THAT'S ALL FOLKS MOVEI T1,177 ;MAX PROTECTION PUSHJ P,BATLKP ;LOOKUP AND DELETE MOVE T1,BATTOT ;GET TOTAL BLOCKS USED CAMG T1,BATQTO ;STILL OVER QUOTA? POPJ P, ;NO, RETURN JRST STEP2B ;YES, LOOP STEP2C: AOBJN P1,STEP2A ;FINISHED THAT EXT, ; ON TO THE NEXT JRST STEP3 ;NO NEXT EXT, ON TO STEP 3 SUBTTL KJOB routines -- STEP3 - Get all other unIMPORTant files ;STEP 3 DELETES ALL REMAINING UNPROTECTED FILES WHOSE EXTENSIONS DON'T ; APPEAR IN THE "IMPORT" TABLE. STEP3: PUSHJ P,BATALL ;SETUP TO READ ABSOLUTELY EVERYTHING STEP3A: PUSHJ P,BATNXT ;GET A FILE TO LOOKUP JRST STEP4 ;NO MORE, ON TO STEP 4 MOVE P1,[-IMPLEN,,IMPORT] ;POINT TO IMPORT TABLE HLLZ T3,LEB+.RBEXT ;GET THE EXTENSION OF THE FILE STEP3B: CAMN T3,(P1) ;MATCH??? JRST STEP3A ;YES, IT'S IMPORTANT, SKIP IT AOBJN P1,STEP3B ;NO, KEEP LOOPING STEP3C: MOVEI T1,177 ;MAX PROTECTION PUSHJ P,BATLKP ;AND LOOKUP AND DELETE MOVE T1,BATTOT ;GET THE TOTAL CAMG T1,BATQTO ;STILL OVER QUOTA? POPJ P, ;NO, DONE!! JRST STEP3A ;YES, KEEP GOING SUBTTL KJOB routines -- STEP4 - Delete rest of FIRST files ;STEP FOUR OF THE FILE-DELETION ALGORITHM DELETES ALL REMAINING ; FILES WHOSE EXTENSION IS IN THE "FIRST" TABLE. THE TABLE ; IS, AS IN STEP 2, SCANNED IN ORDER AND THE ALGORITHM STOPS ; AS SOON AS WE ARE UNDER QUOTA. STEP4: MOVEI P1,FIRST ;START ADR OF TABLE HRLI P1,-FIRLEN ;AND NEGATIVE LENGTH STEP4A: MOVE T1,(P1) ;GET EXT,,MASK PUSHJ P,BATEXT ;SETUP TO GET *.EXT STEP4B: PUSHJ P,BATNXT ;GET A FIND JRST STEP4C ;THAT'S ALL FOLKS MOVEI T1,1000 ;SUPER MAX PUSHJ P,BATLKP ;LOOKUP AND DELETE MOVE T1,BATTOT ;GET TOTAL BLOCKS USED CAMG T1,BATQTO ;STILL OVER QUOTA? POPJ P, ;NO, RETURN JRST STEP4B ;YES, LOOP STEP4C: AOBJN P1,STEP4A ;FINISHED THAT EXT, ; ON TO THE NEXT JRST STEP5 ;NO NEXT EXT, ON TO STEP 5 SUBTTL KJOB routines -- STEP5 - Delete unprotected IMPORTant files ;STEP FIVE DELETES ALL FILES WHOSE EXTENSIONS APPEAR IN ; THE "IMPORT" TABLE WHICH ARE UNPROTECTED. STEP5: MOVEI P1,IMPORT ;START ADR OF TABLE HRLI P1,-IMPLEN ;AND NEGATIVE LENGTH STEP5A: HLLO T1,(P1) ;GET EXT,,MASK PUSHJ P,BATEXT ;SETUP TO GET *.EXT STEP5B: PUSHJ P,BATNXT ;GET A FIND JRST STEP5C ;THAT'S ALL FOLKS MOVEI T1,177 ;MAX PROTECTION PUSHJ P,BATLKP ;LOOKUP AND DELETE MOVE T1,BATTOT ;GET TOTAL BLOCKS USED CAMG T1,BATQTO ;STILL OVER QUOTA? POPJ P, ;NO, RETURN JRST STEP5B ;YES, LOOP STEP5C: AOBJN P1,STEP5A ;FINISHED THAT EXT, ; ON TO THE NEXT JRST STEP6 ;NO NEXT EXT, ON TO STEP 6 SUBTTL KJOB routines -- STEP6 - Delete rest of unIMPORTant files ;STEP 6 IS SIMILAR TO STEP 3 IN THAT IT GETS FILES WHOSE EXTENSIONS ; DON'T APPEAR IN THE "IMPORT" TABLE, EXCEPT THAT NOW IT ; IGNORES THE PROTECTION AND JUST DELETES THE FILE. STEP6: PUSHJ P,BATALL ;SETUP TO READ ABSOLUTELY EVERYTHING STEP6A: PUSHJ P,BATNXT ;GET A FILE TO LOOKUP JRST STEP7 ;NO MORE, ON TO STEP 7 MOVE P1,[-IMPLEN,,IMPORT] ;POINT TO IMPORT TABLE HLLZ T3,LEB+.RBEXT ;GET THE EXTENSION OF THE FILE STEP6B: CAMN T3,(P1) ;MATCH??? JRST STEP6A ;YES, IT'S IMPORTANT, SKIP IT AOBJN P1,STEP6B ;NO, KEEP LOOPING STEP6C: MOVEI T1,1000 ;SUPER MAX PROTECTION PUSHJ P,BATLKP ;LOOKUP IT AND DELETE MOVE T1,BATTOT ;GET THE TOTAL CAMG T1,BATQTO ;STILL OVER QUOTA? POPJ P, ;NO, DONE!! JRST STEP6A ;YES, KEEP GOING SUBTTL KJOB routines -- STEP7 - Delete the rest of the files ;STEP 7 SIMPLY DELETES EVERYTHING STEP7: PUSHJ P,BATALL ;SETUP TO GET EVERYTHING STEP7A: PUSHJ P,BATNXT ;GET A FILE POPJ P, ;WE'RE DONE... MOVEI T1,1000 ;GET THEM ALL!!! PUSHJ P,BATLKP ;LOOKUP AND DELETE MOVE T1,BATTOT ;GET TOTAL CAMG T1,BATQTO ;DONE YET? POPJ P, ;YES, RETURN JRST STEP7A ;NO, LOOP SUBTTL KJOB routines -- BATLKP - Routine to LOOKUP a file ;BATLKP IS CALLED WITH T1 CONTAINING A PROTECTION, AND T2 CONTAINING ; THE ADDRESS OF A LOOKUP BLOCK. THE FILE IS LOOK-ED UP, AND ; IF THE PROTECTION IS .LE. THAN THE PROTECTION SPECIFIED ; BY THE USER IN T1, THE FILE IS DELETED, AND ALL COUNTS ; ARE UPDATED. ; ;IF THE FILE IS ANY SFD, TRY TO DELETE IT IN ANY CASE BATLKP: OPEN IOC,OPN ;OPEN THE CHANNEL POPJ P, ;FAILED, FORGET IT LOOKUP IOC,LEB ;LOOKUP THE FILE POPJ P, ;FAILED, FORGET IT MOVX T2,RP.NQC ;GET NQC BIT TDNE T2,LEB+.RBSTS ;IS IT AN NQC FILE? POPJ P, ;YES, IGNORE IT HLRZ T2,LEB+.RBEXT ;GET THE FILE EXTENSION MOVEI T3,0 ;LOAD A SMALL PROTECTION CAIE T2,'SFD' ;SKIP IF ITS AN SFD LDB T3,[POINT 9,LEB+.RBPRV,8] ;GET THE PROTECTION CAMLE T3,T1 ;IS IT LESS? POPJ P, ;YES, JUST RETURN MOVN T1,LEB+.RBALC ;NO, GET RIBALC ADDM T1,BATTOT ;AND DECREMENT TOTAL PJRST BATDEL ;DELETE THE FILE SUBTTL KJOB routines -- BATDEL - Routine to DELETE a file ;BATDEL IS CALLED WITH T1 CONTAINING THE ADDRESS OF THE LOOKUP BLOCK. ; A MESSAGE IS TYPED AND THE FILE (WHICH IS ASSUMED TO BE ; LOOK'ED UP) IS DELETED. BATDEL: SETZB T1,T2 ;CLEAR A RENAME BLOCK SETZB T3,T4 ; " " RENAME IOC,T1 ;DELETE THE FILE JRST BATDE2 ;FAILED? SKIPE BATDFL ;DID WE DELETE ANY ALREADY? JRST BATDE1 ;YES, SKIP THE EXTRA MESSAGE MOVEI T1,[ASCIZ /Files deleted: /] PUSHJ P,.TSTRG## ;NO, TYPE THE MESSAGE BATDE1: AOS BATDFL ;ANOTHER ONE DELETED MOVEI T1,[ASCIZ / /] ;LOAD SOME SPACES PUSHJ P,.TSTRG## ;AND TYPE THEM MOVEI T1,OPN ;GET ADR OF OPEN BLOCK MOVEI T2,LEB ;GET ADR OF LKP BLOCK PUSHJ P,.TOLEB## ;TYPE A FILESPEC MOVEI T1,[ASCIZ / /] ;LOAD SEVEN SPACES PUSHJ P,.TSTRG## ;TO LINE UP TAB STOPS PUSHJ P,.TTABC## ;A TAB MOVE T1,LEB+.RBALC ;GET BLOCKS ALLOCATED PUSHJ P,.TDECW## ;TYPE IT MOVEI T1,[ASCIZ / blocks freed/] PUSHJ P,.TSTRG## ;AND TYPE IT PJRST .TCRLF## ;AND A CRLF AND RETURN BATDE2: MOVE T1,LEB+.RBALC ;GET BLOCKS ALLOCATED ADDM T1,BATTOT ;ADD BACK IN HRRZS T2 ;GET ONLY THE ERROR CODE IN T2 CAIE T2,ERPRT% ;IS IT PROTECTION FAILURE? ADDM T1,BATQTO ;NO, MAKE HIS QUOTA BIGGER (SORT OF) CAIN T2,ERDNE% ;TRYING TO DELETE NON-EMPTY DIRECTORY? POPJ P, ;YES - JUST RETURN PUSH P,T2 ;SAVE ERROR CODE MOVX T1,'LGNCDF' ;GET PREFIX MOVE T2,["%",,[ASCIZ |Cannot delete file: |]] PUSHJ P,.ERMSG## ;TYPE IT MOVEI T1,OPN ;GET ADDRESS OF OPEN BLOCK MOVEI T2,LEB ;GET ADDRESS OF LOOKUP BLOCK PUSHJ P,.TOLEB## ;TYPE A FILESPEC MOVEI T1,[ASCIZ | ; error code |] ;MORE TEXT PUSHJ P,.TSTRG## ;TYPE IT POP P,T1 ;GET ERROR CODE PUSHJ P,.TOCTW## ;TYPE IT PJRST .TCRLF## ;TYPE A CRLF AND RETURN DEFINE FIRMAC,< X TMP,777777 X TEM,777777 X SFD,777777 X BAK,777777 X Q??,770000 X MAP,777777 X CRF,777777 X LSD,777777 X LSQ,777777 X LST,777777 X LIS,777777 X LPT,777777 X PTP,777777 X PLT,777777 X CDP,777777 X Z??,770000 X FOO,777777 X LOG,777777 X BIN,777777 X DMP,777777 X FIN,777777 > ;END DEFINE FIRMAC ;NOW GENERATE THE "FIRST" TABLE DEFINE X(A,B),< XLIST +B LIST > ;END DEFINE X FIRST: FIRMAC FIRLEN==.-FIRST DEFINE IMPMAC,< X RNO X RND X RNH X CMD X KBD X CED X MCR X SNO X FAI X FOR X F4 X MAC X ALG X AID X BLI X B10 X B11 X COB X CBL X BAS X PAL X P11 X SRC X IDA X IDX X DAT X DBS X B16 X B32 X B36 X REQ X R16 X R36 X PAS X INI > ;END DEFINE IMPMAC ;NOW GENERATE THE "IMPORT" TABLE DEFINE X(A),< XLIST SIXBIT /A/ LIST > ;END DEFINE X IMPORT: IMPMAC IMPLEN==.-IMPORT SUBTTL KJOB routines -- BATALL - Setup to LOOKUP STR:[,,**] ;THIS ROUTINE WAS ORIGINALLY WRITTEN BY DON LEWINE FOR LOGIN VERSION ; 55. MY THANKS TO HIM FOR SUPPLYING IT FULLY DEBUGGED./LSS BATALL: MOVE T1,[WILDBK,,WILDBK+1] ;BLT POINTER TO WILD BLOCK SETZM WILDBK ;CLEAR THE FIRST WORD BLT T1,WILDBK+.FXLEN-1 ;AND CLEAR THE REST MOVE T1,UFDARG+.UFSTR ; MOVEM T1,WILDBK+.FXDEV ;SAVE THE STRUCTURE MOVE T1,.MYPPN## ; MOVEM T1,WILDBK+.FXDIR ;SAVE THE PPN SETOM WILDBK+.FXDIM ;AND SET DIRECTORY MASK MOVX T1,FX.DIR!FX.PHY!FX.NOM!FX.PRT MOVEM T1,WILDBK+.FXMOD ;STORE ALL THE STATUS BITS TXO T1,FX.STR ;SET ANOTHER BIT MOVEM T1,WILDBK+.FXMOM ;AND THE MASK FOR THE MOD WORD MOVSI T1,'* ' ;CLASSICAL WILDCARD MOVEM T1,WILDBK+.FXNAM ;STORE AS FILENAME MOVEM T1,WILDBK+.FXEXT ; EXTENSION MOVEM T1,WILDBK+.FXDIR+2 ; 1ST SFD MOVEM T1,WILDBK+.FXDIR+4 ; 2ND SFD MOVEM T1,WILDBK+.FXDIR+6 ; 3RD SFD MOVEM T1,WILDBK+.FXDIR+10 ; 4TH SFD MOVEM T1,WILDBK+.FXDIR+12 ; 5TH SFD SETOM WILDBK+.FXBFR ;NO /BEFORE SETOM WILDBK+.FXSNC ;NO /SINCE SETZM WILDPT ;WILD'S POINTER POPJ P, ;RETURN SUBTTL KJOB routines -- BATEXT - Setup to read *.EXT[*,*,*,*,*] ;BATALL IS CALLED TO SETUP A WILD BLOCK TO LOOKUP EVERY FILE ON A ; STRUCTURE WITH A GIVEN EXTENSION,,MASK (IN T1). USES T1. BATEXT: PUSH P,T1 ;SAVE EXT,,MASK PUSHJ P,BATALL ;SETUP TO READ *.* POP P,WILDBK+.FXEXT ;STORE EXT,,MASK POPJ P, ;AND RETURN SUBTTL KJOB routines -- BATNXT - Routine to call .LKWLD ;BATNXT IS CALLED WITH T1 CONTAINING THE ADDRESS OF AN OPEN BLOCK, ; AND T2 CONTAIN XWD SIZE,,ADR WHERE ADR IS THE ADDRESS OF A ; LOOKUP BLOCK, AND SIZE IS THE LENGTH OF THE BLOCK - 1 ; (I.E. THE NUMBER OF RIB WORDS DESIRED). IF ANY OF THESE ; FIELDS ARE ZERO UPON CALLING BATNXT, IT IS FILLED IN WITH ; DEFAULT PARAMETERS. BATNXT ALL CALLS .LKWLD TO SETUP ; THE LOOKUP AND OPEN BLOCK FOR THE NEXT FILE (.LGTSA SHOULD ; BE CALLED TO SET EVERYTHING UP BEFORE THE FIRST CALL). ; RETURNS T1 AND T2 UNCHANGED (WITH MISSING FIELDS FILLED). ; SKIP RETURN WITH NEXT FILE, NON-SKIP IF NO MORE FILES. BATNXT: MOVSI T1,[WILDBK] ; MOVEM T1,WLDARG+0 ;FIRST FILE SPEC,,LAST FILE SPEC MOVE T1,[OPN,,LEB] ; MOVEM T1,WLDARG+1 ;OPEN BLOCK,,LOOKUP BLOCK MOVE T1,[.FXLEN,,.RBMAX] MOVEM T1,WLDARG+2 ;FILE SPEC SIZE,,LOOKUP BLOCK SIZE MOVEI T1,WILDPT ; MOVEM T1,WLDARG+3 ;ADDRESS OF POINTER (NO CHANNEL) MOVE T1,[4,,WLDARG] ;LENGTH,,ADDRESS PUSHJ P,.LKWLD## ;CALL WILD POPJ P, ;NO MORE!! PJRST .POPJ1## ;SKIP RETURN SUBTTL File I/O -- DELFIL - Delete a single file DELFIL: MOVE T1,[.FOMAX,,FOP] ;SET UP UUO AC HRRZ T2,FOP+.FOLEB ;POINT TO LOOKUP/ENTER BLOCK FOR LATER FILOP. T1, ;DELETE THE FILE TDZA T2,T2 ;ERROR JRST DELFI1 ;RETURN WITH FILE SIZE CAIE T1,ERPRT% ;PROTECTION FAILURE? WARN CDF,,,E.CDF DELFI1: LDB T1,[POINTR (FOP+.FOFNC,FO.CHN)] ;GET CHANNEL RESDV. T1, ;RELEASE CHANNEL JFCL ;... JUMPE T2,.POPJ## ;ERROR: RETURN MOVE T1,.RBALC(T2) ;RETURN WITH ALLOCATED FILE SIZE PJRST .POPJ1## ; E.CDF: PUSH P,T1 ;SAVE ERROR CODE MOVEI T1,FOP ;POINT TO FILOP BLOCK PUSHJ P,.TOFEB## ;TYPE FILESPEC MOVEI T1,[ASCIZ /; error /] PUSHJ P,.TSTRG## ;PRINT TEXT POP P,T1 ;GET ERROR CODE BACK PJRST .TOCTW## ;PRINT IT AND RETURN SUBTTL File I/O -- INIFIL - Initialize I/O data storage ; ZERO I/O DATA STORAGE AND DEFAULT THE FILESPEC TO ; DSK:[,]/PHYSICAL/ASCII ; CALL: PUSHJ P,INIFIL INIFIL: SETZM IO.ZB ;CLEAR FIRST WORD MOVE T1,[IO.ZB,,IO.ZB+1] ;SET UP BLT BLT T1,IO.ZE-1 ;CLEAR I/O DATA STORAGE ; FILOP BLOCK INIFOP: MOVE T1,[RNB,,LEB] ;RENAME AND LOOKUP/ENTER BLOCKS MOVEM T1,FOP+.FOLEB MOVE T1,[.FOFMX,,RFS] ;RETURNED FILESPEC BLOCK MOVEM T1,FOP+.FOFSP ; OPEN BLOCK INIOPN: MOVE T1,[UU.PHS+.IOASC] ;DEFAULT IS ASCII /PHYSICAL MOVEM T1,FOP+.FOIOS MOVSI T1,'DSK' ;DEFAULT DEVICE MOVEM T1,FOP+.FODEV ; LOOKUP/ENTER BLOCK INILEB: MOVEI T1,.RBMAX ;LENGTH OF BLOCK MOVEM T1,LEB+.RBCNT MOVE T1,AENTRY+.AEPPN ;PPN MOVEM T1,LEB+.RBPPN POPJ P, ;RETURN SUBTTL File I/O -- NEWFIL - Check file creation time ; ROUTINE TO COMPARE CREATIONS DATES OF A FILE VS. THE ; UFD CREATION TIME. ; CALL: PUSHJ P,NEWFIL ;