Trailing-Edge
-
PDP-10 Archives
-
cuspbinsrc_1of2_bb-x128c-sb
-
10,7/login/login.mac
There are 15 other files named login.mac in the archive. Click here to see a list.
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.
; 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==3010
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==<BYTE(3)LGNWHO(9)LGNVER(6)LGNMIN(18)LGNEDT>>
RELOC 400000
COPYRIGHT (c) DIGITAL EQUIPMENT CORPORATION 1969,1986,1988. ALL RIGHTS RESERVED.
\;END COPYRIGHT MACRO
SUBTTL Table of contents
; TABLE OF CONTENTS FOR LOGIN
;
;
; SECTION PAGE
; 1. Table of contents......................................... 2
; 2. Edit history.............................................. 3
; 3. Debugging patch for the monitor........................... 18
; 4. Definitions
; 4.1 Assembly parameters............................... 19
; 4.2 AC assignments.................................... 20
; 4.3 Flags in AC F..................................... 21
; 4.4 Command bits and offsets.......................... 22
; 4.5 Text concatenation macros......................... 23
; 4.6 Message macros.................................... 24
; 5. Program initialization.................................... 25
; 6. Command processing
; 6.1 Initialization and dispatch....................... 28
; 6.2 ATTACH - ATTACH command........................... 29
; 6.3 DOLOG - LOGIN command............................. 30
; 6.4 REATTA - REATTACH command......................... 32
; 6.5 SESSIO - SESSION command.......................... 33
; 6.6 SETPSW - SET PASSWORD command..................... 34
; 6.7 PASSWO - PASSWORD command......................... 35
; 7. Exit routines
; 7.1 DAYMES - Print daily messages..................... 36
; 8. Accounting routines
; 8.1 ACCCHK - Check for a previous valid LOGIN......... 37
; 8.2 ACTCHK - Check for [SYSTEM]ACCOUNTING............. 38
; 8.3 CHGPSW - Change password.......................... 39
; 8.4 PFLCHK - Profile check............................ 40
; 8.5 PSWCHK - Check for a legal password............... 41
; 8.6 PPNEXP - Check for PPN expiration................. 42
; 8.7 SETTNL - Set up terminal designator for USAGE..... 43
; 8.8 STACCT - Read a user profiles..................... 44
; 8.9 TIMCHK - Check for access times................... 47
; 9. File I/O
; 9.1 INIFIL - Initialize I/O data storage.............. 48
; 9.2 NEWFIL - Check file creation time................. 49
; 9.3 NOTE - Print file(s) specified by /NOTE switch.... 50
; 9.4 NOTICE - Print NOTICE.TXT......................... 51
; 9.5 STRMES - Print STR.TXT............................ 52
; 9.6 TYPE - Print a file on the terminal............... 53
; 10. Command dispatch tables................................... 54
; 11. Command scanning routines
; 11.1 ERRUKK/ERREXA/ERRILC - Error messages............. 55
; 11.2 GETUSR - Read PPN/path/user name.................. 56
; 11.3 PSCAN - Init scanning of switches................. 61
; 11.4 PXSCAN - Init scanning one argument............... 62
; 11.5 SCMPMT - SCAN prompt.............................. 63
; 11.6 SWTSCN - Parse switches........................... 64
; 12. Prompt for additional data
; 12.1 ASKACT - Read account string...................... 65
; 12.2 ASKATT - Read detached job# for ATTACH............ 66
; 12.3 ASKLOG - Read detached job# for LOGIN............. 67
; 12.4 ASKNAM - Read user name........................... 68
; 12.5 ASKPSW - Read password(s)......................... 69
; 12.6 ASKRMK - Read remark string....................... 72
; 13. SCAN argument blocks
; 13.1 .ISCAN............................................ 73
; 13.2 .OSCAN............................................ 74
; 13.3 .PSCAN............................................ 75
; 14. SCAN switch tables
; 14.1 ATTACH command.................................... 76
; 14.2 LOGIN command..................................... 78
; 14.3 [SET] PASSWORD COMMAND............................ 80
; 14.4 REATTA command.................................... 82
; 14.5 SESSION command................................... 84
; 14.6 /BATCH switch..................................... 86
; 14.7 /DEFAULT switch................................... 88
; 14.8 /TERMINAL switch.................................. 90
; 15. SCAN switch processing
; 15.1 ACCTSW - /ACCOUNT................................. 92
; 15.2 ASGNSW - /ASSIGN.................................. 93
; 15.3 BATCSW - /BATCH................................... 94
; 15.4 BATNAM - /BATCH:NAME.............................. 95
; 15.5 DEFASW - /DEFAULT................................. 96
; 15.6 DSKPSW - /DSKPRIORITY............................. 97
; 15.7 NOINSW/NOWASW - /NOINFO and /NOWARN............... 98
; 15.8 QUOTSW - /QUOTA................................... 100
; 15.9 RMRKSW - /REMARK.................................. 101
; 15.10 TERMSW - /TERMINAL................................ 102
; 15.11 CHRSWT - Read a character or octal contstant...... 103
; 15.12 HELPTB - Keyword help typeout..................... 104
; 15.13 KEYWRD - Complex switch argument parsing.......... 105
; 15.14 SWITCH - Read SWITCH.INI.......................... 107
; 16. SCAN switch defaulting
; 16.1 TTYDEF - Terminal parameters...................... 108
; 17. Set routines
; 17.1 ASNDEV - Assign devices........................... 109
; 17.2 CRESFD - Create SFDs.............................. 110
; 17.3 PRETMS/POSTMS - Set terminal parameters........... 111
; 17.4 PRVSET - Set all privileged parameters............ 112
; 17.5 USRSET - Set all unprivileged parameters.......... 113
; 17.6 SETACT - Set account string....................... 114
; 17.7 SETCOR - Set core limits.......................... 115
; 17.8 SETDEF - Set DEFAULT.............................. 116
; 17.9 SETDSF - Set DSKFUL............................... 117
; 17.10 SETDSP - Set DSKPRIORITY.......................... 118
; 17.11 SETENQ - Set ENQ/DEQ parameters................... 119
; 17.12 SETGLX - Set GALAXY batch parameters.............. 120
; 17.13 SETIPC - Set IPCF quotas.......................... 121
; 17.14 SETLOC - Set job's location for spooling.......... 122
; 17.15 SETPTH - Set PATH................................. 123
; 17.16 SETSCD - Set scheduler parameters................. 124
; 17.17 SETSPL - Set spooling parameters.................. 125
; 17.18 SETVMX - Set current virtual and physical limits.. 126
; 17.19 SETWAT - Set watch bits........................... 127
; 17.20 SETXXX - Do a SETUUO.............................. 128
; 17.21 TRMOP - TRMOP. UUO loop processor................. 129
; 18. Structure routines
; 18.1 BLDJSL - Build job S/L............................ 131
; 18.2 MNTSTR - Mount structures (set RIPLOG)............ 132
; 18.3 ENTPTH - Create a path............................ 133
; 18.4 STRCHK - Check recomp, empty S/L, etc............. 134
; 18.5 STRPUT - Store structure name..................... 135
; 18.6 STRNXT - Return next structure.................... 136
; 18.7 STRQTA - Check for /QUOTA on structure............ 137
; 19. TTY I/O
; 19.1 TTYPMT - Prompt................................... 138
; 19.2 TTYGET - Read a character......................... 139
; 19.3 Set various terminal parameters................... 140
; 20. UFD setup
; 20.1 UFDSET - Call .UFD to mount/setup STR/UFD......... 141
; 20.2 UFDRCP - Recompute disk usage on random structures 142
; 20.3 UFDTYO - Handle typeout of errors from .UFD....... 143
; 20.4 UFDINI - Initialize block......................... 144
; 20.5 ADDSTR - Add a structure to search list........... 145
; 20.6 GETLOK - Get UFD interlock........................ 146
; 20.7 CLRLOK - Clear the UFD interlock.................. 147
; 21. Usage entry creation
; 21.1 USGATT - Attach................................... 148
; 21.2 USGLOG - Login.................................... 149
; 21.3 USGQUE - Set up QUEUE. UUO blocks................. 150
; 21.4 USGSES - Session.................................. 151
; 21.5 USGVAL - Validate an account string............... 152
; 22. WTO routines
; 22.1 WTOINI - Initialize WTO message................... 153
; 22.2 WTOSND - Send a WTO to OPR........................ 153
; 22.3 WTOCTY - Send text to the CTY if OPR not available 154
; 23. Miscellaneous routines
; 23.1 ACCERR - Process ACCLG. UUO errors................ 155
; 23.2 ATTLGL - Check for a legal ATTACH................. 156
; 23.3 AVLCHK - Check system availability................ 157
; 23.4 BANNER - Print LOGIN banner....................... 158
; 23.5 CVTNAM - Convert 8-bit user name to SIXBIT........ 159
; 23.6 DAYTIM - Print time, date, and weekday............ 160
; 23.7 DETJOB - Report detached jobs..................... 161
; 23.8 DETSTS - Print detached job status................ 162
; 23.9 ERRMSG - Error message handler.................... 163
; 23.10 FAILUR - Check for access failures................ 166
; 23.11 GENTIM - Generate day-of-week and times data...... 167
; 23.12 ISBATC - Determine if a batch job................. 168
; 23.13 ISOPSR - Determine if a subjob of OPSER........... 169
; 23.14 KSYCHK - Check pending KSYS....................... 170
; 23.15 LGLACT/LGLRMK - Check strings..................... 171
; 23.16 MAILCH - Check for mail........................... 172
; 23.17 MAPJOB - Map all jobs with same PPN............... 173
; 23.18 NEWPPN/OLDPPN - Change PPN........................ 175
; 23.19 OTHJOB - Report other jobs same PPN............... 176
; 23.20 PTHCHK - Check a path spec........................ 177
; 23.21 PPNCHK - Check for illegal PPNs................... 178
; 23.22 QUEERR - Process QUEUE. UUO errors................ 179
; 24. OLD LOGIN CRUFT........................................... 180
; 25. OLD END CRUFT............................................. 183
; 26. Keyword lists for /NOINFO and /NOWARN switches............ 187
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).
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.03 MONITOR. IT WILL 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,JBTSTS(J)
TLNE P1,JLOG
POPJ P,
MOVE P1,HAKSTR
MOVEM P1,SGADEV+.JDAT
MOVE P1,HAKPPN
MOVEM P1,SGAPPN+.JDAT
POPJ P,
COMCON$:
SGSET9-FTMP/JRST LOGHAK
GJOB2 5/JFCL
CLOGIN 1/JRST RUNAME
.CPJOB[$Q<JOBNOX:
TTYTAB JOBNOX[
$Q DDBLDB[$Q<LDB:
LOGLDB/LDB
>>>;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,<SIXBIT/DSK/> ;DEFAULT MAIL FILE DEVICE
ND MAILFN,<SIXBIT/MAIL/>;DEFAULT MAIL FILE NAME
ND MAILEX,<SIXBIT/TXT/> ;DEFAULT MAIL FILE EXTENSION
ND MAILPP,<XWD -1,-1> ;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,<New terminal: >,<>
X SES,SESSIO,SESSIO,SESSIO,<> ,<>
X PSW,PASSWO,PASSWO,PASSWO,<> ,<>
X SET,SET ,PASSWO,SETPSW,<> ,<>
X KJB,KJOB ,LOGOUT,KJOB ,<> ,<KJOB,LOGOUT>
>
ZZ==-1
DEFINE X (PFX,NAM,HLP,PRC,PMT,OSC),<
COM'PFX==<ZZ==ZZ+1>
CM.'PFX==1B<COM'PFX>
>
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,<TXT>,FLG,MOR
>
;FATAL ERROR (HOWEVER, SYSTEM IS STILL OK)
DEFINE FATAL(PFX,TXT,FLG,MOR),<
.ERR. EF.ERR,PFX,<TXT>,FLG,MOR
>
;WARNING MESSGAE
;CALL WITH:
; WARN PREFIX,<TEXT>
DEFINE WARN(PFX,TXT,FLG,MOR),<
.ERR. EF.WRN,PFX,<TXT>,FLG,MOR
>
;SEMI-FATAL ERROR--BATCON SHOULD REQUE JOB AND STOP SCHEDULING
;FOR A LITTLE WHILE
;CALL WITH:
; REQUE PREFIX,<TEXT>
; NEVER RETURN
DEFINE REQUE(PFX,TXT,FLG,MOR),<
.ERR. EF.REQ,PFX,<TXT>,FLG,MOR
>
;INFORMATION MESSAGE (PRINTED IN [])
;CALL WITH:
; INFO PREFIX,<TEXT>
DEFINE INFO(PFX,TXT,FLG,MOR),<
.ERR. EF.INF,PFX,<TXT>,FLG,MOR
>
DEFINE .ERR. (TYP,PFX,TXT,FLG,MOR),<
PUSHJ P,[XLIST
PUSHJ P,ERRMSG ;CALL ERROR MESSAGE
IFB <MOR>,<XWD 0,''PFX''>
IFNB <MOR>,<XWD MOR,''PFX''>
IFB <FLG>,<TYP![ASCIZ\TXT\]>
IFNB <FLG>,<TYP!FLG![ASCIZ\TXT\]>
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
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## ;INITIAL TTY
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
TLNN T1,777777 ;DETACHED?
SETOM DETFLG ;YES, SET FLAG
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 '> ,<MOVEM SAVOPR>
XX <%CNSJN> ,<^D64> ,<HRRZM L.MXJB>
XX <%CNSTS> , ,<MOVEM STATES>
XX <%CNST2> , ,<MOVEM STATS2>
XX <%CNTIC> ,<^D60> ,<MOVEM JIFFIE>
XX <%CNDTM> , ,<MOVEM CURDTM>
XX <%CNFLN> , ,<MOVEM FRCLIN>
XX <%CNDAE> , ,<MOVEM MONVER>
XX <%NSHJB> , ,<MOVEM L.HJIU>
XX <%LDMFD> ,<1,,1> ,<MOVEM MFDPPN>
XX <%LDSYS> ,<1,,4> ,<MOVEM SYSPPN>
XX <%LDFFA> ,<1,,2> ,<MOVEM ALPPPN>
XX <%LDHLP> ,<2,,5> ,<MOVEM HLPPPN>
XX <%LDQUE> ,<3,,3> ,<MOVEM QUEPPN>
XX <%LDUFP> ,<775B8> ,<MOVEM UFDPRT>
XX < 0,,.GTLOC> , ,<MOVEM LOCSTA>
XX <-1,,.GTLOC> , ,<MOVEM JOBSTA>
XX <-1,,.GTPPN> , ,<MOVEM PPN>
XX <-1,,.GTPRG> , ,<MOVEM PRGNAM>
XX <-1,,.GTPRV> , ,<MOVEM PRIVWD>
XX <-1,,.GTLPN> , ,<MOVEM LPNPPN>
XX <-1,,.GTNM1> , ,<MOVEM NAME>
XX <-1,,.GTNM2> , ,<MOVEM NAME2>
XX <-1,,.GTCNO> , ,<MOVEM CHGNO>
XX <-1,,.GTKCT> , ,<MOVEM KCTNUM>
XX <-1,,.GTRCT> , ,<MOVEM DSKRDS>
XX <-1,,.GTWCT> , ,<MOVEM DSKWTS>
XX <-1,,.GTTIM> , ,<MOVEM RUNTIM>
XX <-1,,.GTJLT> , ,<MOVEM JLOGTM>
XX <-1,,.GTLIM> , ,<MOVEM BATLIM>
XX <-1,,.GTEQJ> , ,<MOVEM ENQLOK>
LIST
> ;END OF TABS MACRO
; BUILD THE TABLE OF GETTAB ARGUMENTS
;
DEFINE XX (ARG,FAI,XCT),<EXP <ARG>>
GTBARG: TABS
GTBLEN==.-GTBARG
; BUILD THE TABLE OF VALUES TO USE IN CASE OF FAILURE
;
DEFINE XX (ARG,FAI<0>,XCT),<EXP <FAI>>
GTBFAI: TABS
; BUILD THE TABLE OF INSTRUCTIONS TO SAVE THE RESULT
;
DEFINE XX (ARG,FAI,XCT),<EXP <<<XCT>&<777037,,777777>>+<<T1>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,<Please KJOB or DETACH>,EF.SIL
COMMA4: TXNN T2,JB.UJC ;JACCT?
WARN IDJ,<I do not have JACCT>
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,<SFDs illegal in PPN specification >,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,<No job number specified>,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 <QA.IMM!1B17!.UGPPN>] ;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,<Can't clear time limit>
MOVX T1,1 ;
MOVEM T1,CCWAIT ;NO MORE CTRL/C'S ALLOWED
SKIPE ENQLOK ;HAVE ANY OUTSTANDING LOCKS?
FATAL ENQ,<Job has outstanding eternal ENQ. locks set>,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,<Invalid path specification>,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 <QA.IMM!1B17!.UGPPN>] ;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,<No such PPN as >,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,<Device not a physical terminal >,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,<Terminal in use by job >,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,<Terminal is your job's controlling TTY>,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,<Terminal is FRCLIN>,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,<Terminal is slaved; >,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,<From job >,,.TDECW##
MOVEI T1,CRLFPD ;<CRLF>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,<ATTACH to terminal failed>,EF.FMT!EF.SIL
MOVE T1,THSJOB ;GET JOB AGAIN
INFO NAJ,<Now attached to job >,,.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 <QA.IMM!1B17!.UGPPN>] ;QUEUE. BLOCK CODE
MOVE T2,PPN ;PPN THAT WE WANT
PUSHJ P,STACCT ;GET ACCT DATA
FATAL APA,<Accounting profile not available>,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 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,<Can't ATTACH to job>,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,<Invalid entry>,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,<Please wait for Control-C>
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,<LOGIN aborted by Control-C; job is logged in>
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 <KCT>*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 ;
SKIPN 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
SKIPN 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>]
SKIPN DETFLG ;DETACHED?
TRMOP. T1, ;DISCONNECT DATASET
JFCL ;OH WELL, WE TRIED
DMOVE T1,[EXP <2,,T2>,<.TODNT>]
SKIPN 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,CTM,LAT>) ;;NRT, CTERM, LAT
> ;END DEFINE DISC
DEFINE X,(APC),<
IRP APC,<EXP .TO'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,<You are logged in as >,,.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,<Last access to >,,E.LAS
POPJ P, ;RETURN
ACCCH1: WARN LAF,<Last access to >,,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,<Waiting for accounting daemon to start>
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,<Accounting daemon not running>,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 <QA.IMM!1B17!.QBAFN>,<UGCUP$>] ;FUNCTION CODE
DMOVEM T2,(T1)
MOVE T2,[EXP <QA.IMM!2B17!.AEVRS>] ;SET VERSION VALIDATION
MOVEM T2,2(T1) ;STORE
DMOVE T2,[EXP <%AECVN,,0>,<AE.VRS>] ;GET VERSION INFO
DMOVEM T2,3(T1) ;STORE
DMOVE T2,[EXP <XWD 1,.AEPPN!AF.AND>,<PPN>] ;PPN WE ARE GOING TO AFFECT
DMOVEM T2,5(T1) ;STORE
DMOVE T2,[EXP <XWD .AANLW,.AENAM>,<AENTRY+.AENAM>] ;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,<User name has been set>
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 <QA.IMM!1B17!.QBAFN>,<UGCUP$>] ;FUNCTION CODE
DMOVEM T2,(T1)
MOVE T2,[EXP <QA.IMM!2B17!.AEVRS>] ;MUST VALIDATE VERSION
MOVEM T2,2(T1) ;SET IT UP
DMOVE T2,[EXP <%AECVN,,0>,<AE.VRS>] ;GET VERSION INFO
DMOVEM T2,3(T1) ;STORE
DMOVE T2,[EXP <XWD 1,.AEPPN!AF.AND>,<PPN>] ;PPN WE ARE GOING TO AFFECT
DMOVEM T2,5(T1)
DMOVE T2,[EXP <XWD .APWLW,.AEPSW!AF.AND>,<PASSWD>] ;OLD PASSWORD
DMOVEM T2,7(T1)
DMOVE T2,[EXP <XWD .APWLW,.AEPSW>,<NEWPSW>] ;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,<Password has been changed>
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,<Accounting files locked; >,,.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,<May not ATTACH >,EF.SIL,E.MNA
FATAL MNL,<May not LOGIN >,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 <QA.IMM!1B17!.QBAFN>,<UGACC$>]
DMOVEM T2,(T1) ;CHECK PASSWORD AND ACCOUNT STRING
MOVE T2,[EXP <QA.IMM!1B17!.UGPPN>]
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,<Waiting for [SYSTEM]ACCOUNTING response>
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,<PPN has expired>
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,<PPN will expire on >,,.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,<Password will expire on >,,.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 <QA.IMM!1B17!.QBAFN>,<UGOUP$!AF.PRV>]
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,<Waiting for [SYSTEM]ACCOUNTING response>
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,<No profile for batch user>,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,<Wrong profile version; found >,,E.WVR)
HRRZ T1,AENTRY+.AEPPN ;GET PROGRAMMER NUMBER
CAIN T1,UNIPRG ;WILD?
TLO F,FL.WLD ;YES
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,<ACTFMT,,.AEMIN>) ;VERSION AND LENGTH
ADEF (PPN,<1,,2>) ;PPN
ADEF (NAM,<BYTE(8)"O","p","e","r","a","t","o","r">)
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,<JW.WMT>) ;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,<ACTFMT,,.AEMIN>) ;VERSION AND LENGTH
ABAD (PPN,<0,,0>) ;PPN
ABAD (NAM,<BYTE(8)"U","n","k","n","o","w","n"," ","U","s","e","r">)
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,<JW.WMT>) ;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,<PPN not valid for this time of day>
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
RESET ;RESET I/O
MONRT. ;EXIT QUIETLY
JRST .-1 ;WATCH FOR CONTINUE
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,<Too mamy structures - no quota enforcement>
SOSA QTANUM ;
INIQT3: WARN JUF,<JOBSTR UUO failed - no quota enforcement>
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,<Can't clear software write-lock on >,,.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
<SIXBIT /A/>+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,<Cannot delete >,,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
; <NON-SKIP> ;OLD FILE
; <SKIP> ;NEW FILE
NEWFIL: LDB T1,[POINTR(LEB+.RBPRV,RB.CRD)] ;GET LOW DATE
LDB T2,[POINTR(LEB+.RBEXT,RB.CRX)] ;GET HIGH DATE
LSH T2,^D12 ;POSITION
IORI T1,(T2) ;FORM STANDARD 15-BIT DATE
LDB T2,[POINTR(LEB+.RBPRV,RB.CRT)] ;GET CREATE TIME
CAMLE T1,UFDDAT ;FILE NEWER THAN UFD CREATION?
JRST .POPJ1## ;YES
CAMN T1,UFDDAT ;SAME DAY?
CAMGE T2,UFDTIM ;YES--FILE NEWER THAN UFD CREATION?
POPJ P, ;OLDER
JRST .POPJ1## ;A NEW FILE
SUBTTL File I/O -- NOTE - Print file(s) specified by /NOTE switch
NOTE: TLNE F,FL.BYP ;BYPASSING THE ACCOUNTING SYSTEM?
POPJ P, ;YES--PROBABLY DON'T WANT THIS STUFF
MOVEI T1,NOTSPC ;/NOTE FILESPEC
MOVEI P1,FNAME ;PRINT FILE NAME
PJRST TYPE ;DO PRINT IT AND RETURN
SUBTTL File I/O -- NOTICE - Print NOTICE.TXT
NOTICE: TLNE F,FL.BYP ;BYPASSING THE ACCOUNTING SYSTEM?
POPJ P, ;YES--PROBABLY DON'T WANT THIS STUFF
MOVE T1,[DAYSPC] ;PRINT NOTICE.TXT
MOVEI P1,0 ;FLAGS
PJRST TYPE ;GO PRINT IT AND RETURN
; SCAN BLOCK FOR SYS:NOTICE.TXT/PHYSICAL/NOSTR
DAYSPC: SIXBIT /SYS/
SIXBIT /NOTICE/
EXP -1
XWD 'TXT',-1
EXP FX.PHY!FX.NOM
EXP FX.STR!FX.PHY!FX.NOM
BLOCK .FXLEN-<.-DAYSPC>
SUBTTL File I/O -- STRMES - Print STR.TXT
STRMES: SKIPG U.STR ;/STR GIVEN
POPJ P,0 ;NO--RETURN
MOVEI T1,STRSPC ;STR.TXT SPEC
MOVEI P1,MSGOK!FNAME!STONLY ;OK TO TYPE MESSAGE
PJRST TYPE ;GO PRINT IT AND RETURN
; SCAN BLOCK FOR SYS:STR.TXT/PHYSICAL/STRS
STRSPC: SIXBIT /ALL/
SIXBIT /STR/
EXP -1
XWD 'TXT',-1
EXP FX.PHY!FX.STR
EXP FX.PHY!FX.STR
XWD 1,4
XWD -1,-1
BLOCK .FXLEN-<.-STRSPC>
SUBTTL File I/O -- LGNMES - Print LOGIN.TXT
LGNMES: MOVEI T1,LGNSPC ;LOGIN.TXT SPEC
MOVEI P1,MSGOK ;ALWAYS TYPE MESSAGE
PJRST TYPE ;GO PRINT IT AND RETURN
; SCAN BLOCK FOR SYS:WELCOM.TXT/PHYSICAL/NOSTR
LGNSPC: SIXBIT /SYS/
SIXBIT /LOGIN/
EXP -1
XWD 'TXT',-1
EXP FX.PHY!FX.NOM
EXP FX.STR!FX.PHY!FX.NOM
BLOCK .FXLEN-<.-LGNSPC>
SUBTTL File I/O -- TYPE - Print a file on the terminal
;SUBROUTINE TO TYPE A FILE
;CALL: MOVEI T1,ADDRESS-OF-SCAN-STYLE-FILESPEC
; MOVEI P1,FLAGS
; PUSHJ P,TYPE
; RETURN HERE
TYPE: SKIPN .FXNAM(T1) ;ANY NAME OR MASK SPECIFIED?
POPJ P, ;NO - SKIP IT
HRLZ T1,T1 ;FLIP AROUND
HRRI T1,TYPSPC ;ADDRESS OF OUT SPEC
BLT T1,TYPSPC+.FXLEN-1 ;COPY THE FILESPEC
SETZM WILDPT ;CLEAR MEMORY FOR FIRST CALL
MOVX T1,FX.NOM!FX.PRT ;/OKNONE AND /OKPROT
IORM T1,TYPSPC+.FXMOD;FORCE SWITCH TO BE
IORM T1,TYPSPC+.FXMOM; SET ON ALL CALLS TO WILD
TYPE1: PUSHJ P,INIFIL ;INIT STORAGE FOR FILE I/O
MOVEI T1,B.DC## ;SET UP ADDRESS OF BUFFER HEADER
MOVEM T1,OPN+.OPBUF ;SAVE
MOVE T1,[4,,[[TYPSPC],,0
OPN,,LEB
.FXLEN,,.RBMAX
IOC,,WILDPT]]
PUSHJ P,.LKWLD## ;LOOK FOR FILE
POPJ P,0 ;ALL DONE
OPEN IOC,OPN ;OPEN THE FILE
PJRST E.DFO## ;CAN'T
LOOKUP IOC,LEB ;LOOKUP FILE
JRST [PUSHJ P,E.DFL## ;REPORT ERROR
JRST TYPE1] ;LOOK FOR NEXT FILE
MOVE T1,[2,,T2] ;SET UP UUO AC
MOVE T2,[IOC,,.FOFIL] ;CHANNEL,,FUNCTION CODE
MOVE T3,[.FOFMX,,RFS] ;LENGTH,,ADDR
FILOP. T1, ;READ LOOKUP'ED FILESPEC
JFCL ;CAN'T FAIL
IFN SUPNOT,<
TRNE P1,MSGOK ;WANT MESSAGE ALWAYS?
JRST TYPE3 ;YES--GO TYPE IT
SKIPE UFDNDL ;SKIP IF UFD CAN BE DELETED
JRST TYPE2 ; SAW THE MESSAGE
PUSHJ P,NEWFIL ;A NEW FILE?
JRST TYPE2 ;NO
JRST TYPE3 ;YES--GO PRINT
TYPE2: MOVE T1,U.NOTC ;GET /NOTICE VALUE
CAIL T1,2 ;[450,453] SOMETIMES OR NEVER?
JRST TYPE1 ;YES -LOOK FOR NEXT FILE
>
TYPE3: MOVE T1,U.NOTC ;GET /NOTICE VALUE
CAIN T1,3 ;NEVER PRINT?
JRST TYPE1 ;YES - SKIP IT
MOVEI T1,RFS ;POINT TO RETURNED FILESPEC BLOCK
TXNE P1,FNAME ;WANT TO SEE FILE NAME?
INFO FIL,<File: >,,.TFRFS##
TYPE4: PUSHJ P,.NXDTW## ;GET A BYTE
JRST TYPE1 ;END OF FILE
PUSHJ P,.TCHAR## ;TYPE IT
JRST TYPE4
SUBTTL Command dispatch tables
DEFINE X (PFX,NAM,HLP,PRC,PMT,OSC),<<SIXBIT/NAM/>>
COMLST: CMDS
COMLEN==.-COMLST
DEFINE X (PFX,NAM,HLP,PRC,PMT,OSC),<EXP PRC>
COMDSP: CMDS
DEFINE X (PFX,NAM,HLP,PRC,PMT,OSC),<XWD PFX'PL,PFX'PB>
COMPBK: CMDS
DEFINE X (PFX,NAM,HLP,PRC,PMT,OSC),<XWD PFX'OL,PFX'OB>
COMOBK: CMDS
DEFINE X (PFX,NAM,HLP,PRC,PMT,OSC),<EXP [ASCIZ \'PMT\]>
COMPMT: CMDS
SUBTTL Command scanning routines -- ERRUKK/ERREXA/ERRILC - Error messages
; THESE ERROR MESSAGE EXIST BECAUSE WE CAN'T DISPATCH TO SCAN.
; SCAN WANTS TO RESTART .PSCAN WHICH GOES INTO AN INFINITE LOOP.
ERRUKK: EXCH T1,N ;SWAP KEYWORD WITH VALUE
SKIPGE N ;UNKNOWN OR AMBIGUOUS?
FATAL UKW,<Unknown keyword >,EF.SIL,.TSIXN##
FATAL AKW,<Ambiguous keyword >,EF.SIL,.TSIXN##
ERREXA: FATAL EXA,<Excess arguments starting with >,EF.SIL,E.EXA
ERRILC: FATAL ILC,<Illegal character >,EF.SIL,E.ILC
E.EXA:!
E.ILC: MOVEI T1,"""" ;GET DOUBLE QUOTES
PUSHJ P,.TCHAR## ;PRINT THEM
MOVE T1,C ;GET CHARACTER IN ERROR
PUSHJ P,.TFCHR## ;PRINT POSSIBLE FUNNY CHARACTER
SKIPE .LASWD## ;HAVE A TYPEOUT ROUTINE?
SKIPN .NMUL## ;HAVE A WORD SCANNING RESULT?
JRST E.ILC1 ;NO TO EITHER
MOVEI T1,[ASCIZ /" following word "/]
PUSHJ P,.TSTRG## ;PRINT STRING
MOVE T1,.NMUL## ;GET LAST WORD INPUT
SKIPGE T2,.LASWD## ;A STRING PERHAPS?
MOVEI T1,.NMUL## ;YES--GET ADDRESS INSTEAD
PUSHJ P,(T2) ;PRINT WORD (OR STRING) IN ERROR
E.ILC1: MOVEI T1,"""" ;DOUBLE QUOTE
PJRST .TCHAR## ;PRINT IT AND RETURN
SUBTTL Command scanning routines -- GETUSR - Read PPN/path/user name
GETUSR: PUSHJ P,.SAVE2## ;SAVE P1 AND P2
SETZB PP,USERID ;CLEAR TARGET
SETZM USERID ;CLEAN OUT BLOCK BEFORE START
MOVE T1,[USERID,,USERID+1] ;BLT POINTER
BLT T1,USERID+.AANLW-1 ;CLEAN IT
SKIPA ;ALREADY HAVE FIRST CHARACTER
GETUS1: PUSHJ P,.TICHE## ;GET FIRST CHARACTER
JUMPLE C,.POPJ## ;ALLOW BLANK LINES
CAIE C,.CHTAB ;TAB?
CAIN C," " ;SPACE?
JRST GETUS1 ;IGNORE THEM
CAIN C,"""" ;QUOTED STRING?
JRST GETUS2 ;MUST BE A USER NAME
PUSHJ P,.TICAN## ;SEE IF ALPHANUMERIC
JRST GETUS3 ;IT'S NOT
MOVEI T1,USRPPN ;ASSUME A PPN ON THE WAY
CAIL C,"0" ;RANGE
CAILE C,"9" ; CHECK
GETUS2: MOVEI T1,USRNAM ;A USER NAME
PUSHJ P,(T1) ;PARSE PPN OR USER NAME
DMOVE P1,T1 ;COPY ARGUMENTS TO VALIDATE PPN OR USER NAME
JUMPLE C,GETUS4 ;JUMP IF EOL
GETUS3: PUSHJ P,SWTSCN ;CHECK FOR SWITCHES
JUMPLE C,GETUS4 ;JUMP IF EOL
CAIE C,"[" ;PATH SPEC?
CAIN C,"<" ;2741 STYLE?
SKIPA ;YES
JRST GETUS4 ;ELSE ALMOST DONE HERE
PUSHJ P,USRPAT ;READ PATH AND PARSE SWITCHES
DMOVE P1,T1 ;COPY ARGUMENTS TO VALIDATE PPN
GETUS4: PUSHJ P,USRDEF ;PERFORM PPN DEFAULTING AND /BYPASS CHECKING
DMOVE T1,P1 ;GET ARGUMENTS TO VALIDATE PPN/PATH/USER NAME
PUSHJ P,STACCT ;GET USER'S PROFILE
SETOM FAILFL ;NO SUCH PPN OR USER
SKIPN PP ;HAVE A PPN ALREADY?
MOVE PP,AENTRY+.AEPPN;GET PPN
TLNE F,FL.BYP ;BYPASSING THE ACCOUNTING SYSTEM?
MOVEM PP,AENTRY+.AEPPN;USE THE PPN WE JUST PARSED
SKIPE T1,LSTPPN ;HAVE A PREVIOUS PPN?
CAME T1,PP ;SAME AS LOGGING-IN PPN?
SKIPA T1,AENTRY+.AEPPN ;GET LAST ACCESS PPN
POPJ P, ;ALREADY HAVE LAST FAILURE INFO
MOVEM T1,LSTPPN ;SAVE
MOVE T1,AENTRY+.AEFAI ;GET LAST ACCESS UDT
MOVEM T1,LSTACC ;SAVE IT NOW
MOVE T1,AENTRY+.AEFLG ;GET LAST ACCESS FLAGS
MOVEM T1,LSTFLG ;SAVE
POPJ P, ;RETURN
USRPPN: PUSHJ P,.OCTNC## ;GET PROJECT NUMBER (FIRST DIGIT IN C)
JUMPGE C,USRPP1 ;JUMP IF NOT EOL
JUMPE N,.POPJ## ;IGNORE BLANK LINES
PJRST ERRILC ;REPORT ILLEGAL CHARACTER
USRPP1: CAIE C,"/" ;SLASH BREAK?
CAIN C,"," ;ORDINARY COMMA BREAK?
SKIPA ;EITHER IS OK
PJRST ERRILC ;REPORT ILLEGAL CHARACTER
MOVE T1,N ;INCASE OF ERROR
TRNE N,377777 ;MUST HAVE A NON-ZERO PROJECT NUMBER
TDNE N,[-1,,400000] ;ALSO ONLY 6 DIGITS
FATAL IPJ,<Illegal project number >,EF.FMT,.TOCTW##
HRLZ PP,N ;PUT IN AC PP
PUSHJ P,.TIAUC## ;LOOK AT NEXT CHAR
CAIE C,UNISYM ;WANT UNIQUE PPN?
JRST USRPP2 ;NO, COLLECT PROGRAMMER NO
PUSHJ P,.TIAUC## ;GET SEPARATOR INTO CH
MOVEI N,UNIPRG ;PUT UNIQUE CODE INTO N
TLOA F,FL.WLD ;NOTE UNIQUE PROGRAMMER NO
USRPP2: PUSHJ P,.OCTNC## ;COLLECT PROGRAMMER, 1ST CHAR IN CH
MOVE T1,N ;INCASE OF ERROR
TRNE N,777777 ;MUST HAVE A NON-ZERO PROGRAMMER NUMBER
TLNE N,777777 ;ALLOW ONLY 6 DIGITS
FATAL IPG,<Illegal programmer number >,EF.FMT,.TOCTW##
HRR PP,N ;MAKE AN XWD
USRPP3: PUSHJ P,PPNCHK ;CHECK LEGALITY OF THE TARGET PPN
USRPP4: MOVE T1,[EXP <QA.IMM!1B17!.UGPPN>] ;QUEUE. BLOCK CODE
MOVE T2,PP ;PPN THAT WE WANT
POPJ P, ;RETURN
USRPAT: PUSHJ P,.REEAT## ;BACK UP ONE CHARACTER
PUSHJ P,.FILIN## ;GO SCAN OFF THE PATH
MOVEI T1,U.PATH ;NOW GO COPY THE SPEC
MOVEI T2,.FXLEN ; INTO LOGIN'S CORE
PUSHJ P,.GTSPC## ; AREA
JUMPN PP,USRPP4 ;RETURN IF ALREADY CHECKED OUT PPN
SKIPE USERID ;HAVE A USER NAME?
PJRST USRNA3 ;YES--DON'T WORRY ABOUT THE PPN NOW
MOVE T1,[2,,U.PATH+.FXDIR] ;INCASE OF ERROR
SKIPN PP,U.PATH+.FXDIR ;GET THE PPN FROM THE PATH
FATAL NPP,<No PPN in path specification >,EF.FMT,.TDIRB##
TLNE PP,777777 ;MUST HAVE NON-ZERO PROJECT NUMBER
TRNN PP,777777 ; AND A NON-ZERO PROGRAMMER NUMBER
FATAL IPP,<Illegal PPN in path specification >,EF.FMT,.TDIRB##
MOVE T2,U.PATH+.FXDIM ;GET MASK
AOSE T2 ;CHECK IT
FATAL WPP,<Wildcarded PPN in path specification >,EF.FMT,.TDIRB##
PJRST USRPP3 ;FINISH UP
USRNAM: CAIE C,"""" ;QUOTED NAME?
TDZA T1,T1 ;NO
MOVEI T1,1 ;REMEMBER FOR LATER
PUSH P,T1 ;SAVE FLAG
PUSHJ P,.AS8QC## ;PARSE A POSSIBLY QUOTED ASCII STRING
POP P,T1 ;GET FLAG BACK
SKIPN T1 ;NOTHING SPECIAL IF A QUOTED STRING
CAIE C,":" ;STOPPED ON A COLON?
JRST USRNA2 ;NO--JUST A NORMAL NAME
MOVE T1,.NMUL## ;PICK UP FIRST WORD
TDNE T1,[BYTE(8)0,0,377,0] ;LESS THAN THREE CHARACTERS OR
TRNE T1,7760 ; MORE THAN THREE CHARACTERS IS JUST TEXT
JRST USRNA2 ;GO PROCESS USER NAME
MOVE T3,[POINT 8,.NMUL##] ;POINT TO STRING
MOVEI T4,3 ;INIT COUNTER
SETZ T1, ;CLEAR STORAGE
USRNA1: ILDB T2,T3 ;GET A CHARACTER
ANDI T2,177 ;REDUCE TO 7-BITS
SUBI T2," " ;CONVERT TO SIXBIT
LSH T2,36 ;POSITION
LSHC T1,6 ;STORE
SOJG T4,USRNA1 ;LOOP
HRLZS T1 ;PUT IN LH
DEVPPN T1,UU.PHY ;COULD THIS BE AN ERSATZ DEVICE?
JRST USRNA2 ;NO
MOVE PP,T1 ;COPY PPN
PUSHJ P,.TIALT## ;EAT ONE CHARACTER BEYOND THE COLON
PJRST USRPP4 ;PRETEND WE PARSED A PPN
USRNA2: MOVE T1,[.NMUL##,,USERID] ;SET UP BLT
BLT T1,USERID+.AANLW ;COPY IT
USRNA3: MOVE T1,[XWD .AANLW,.UGUSR] ;QUEUE. BLOCK CODE
MOVEI T2,USERID ;POINT TO THE USERNAME WE JUST READ
SETZ PP, ;CAN'T DETERMINE PPN
POPJ P, ;RETURN
; HERE TO DO /BYPASS LEGALITY CHECKING AND PPN DEFAULTING
; THE USER IS ALLOWED TO BYPASS THE ACCOUNTING SYSTEM IF
; ANY OF THE FOLLOWING CONDITIONS ARE TRUE:
;
; 1. LOGIN/BYPASS WAS TYPED ON ANY CTY (REMOTE CTYS EXCLUDED)
; 2. LOGIN/BYPASS WAS TYPED ON OPR:
; 3. LOGIN/BYPASS WAS TYPED ON A SUBJOB OF A [1,2] JOB
; 4. LOGIN/BYPASS WAS TYPED ON A LOCAL TERMINAL
; 5. LOGIN/BYPASS WAS TYPED ON ANY TERMINAL AND SCHED 10 IS IN EFFECT
;
; FOR ANY OTHER CASE, /BYPASS IS NOT VALID AND A FATAL ERROR MESSAGE
; IS ISSUED.
USRDEF: TLZ F,FL.BYP ;DEFAULT TO OFF (A LITTLE PARANOIA HERE)
SKIPG U.BYPA ;BYPASSING THE ACCOUNTING SYSTEM?
JRST USRDE2 ;NO
; CHECK FOR ANY CTY
TLNN F,FL.CTY ;ONE OF THE CTYS?
; CHECK FOR OPR OR SUBJOB OF OPR
TLNE F,L.OPR!L.SOPR ;PERHAPS OPR OR SUBJOB OF OPR?
JRST USRDE1 ;GO BYPASS ACCOUNTING SYSTEM
; CHECK FOR A LOCAL TERMINAL
MOVX T1,GL.REM!GL.DSL ;BITS TO TEST
TDNN T1,TTBITS ;SOME FLAVOR OF LOCAL?
JRST USRDE1 ;YES
; CHECK FOR SCHED 10
MOVE T1,STATES ;GET MONITOR'S STATES WORD
TXNE T1,ST%NRL ;OR DEBUGGING THE MONITOR (SCHED 10)?
JRST USRDE1 ;KEEP JMF, DPM, SPIDER, AND KBY HAPPY
FATAL NPB,<No privileges to bypass the accounting system>,EF.FMT!EF.SIL
USRDE1: TLO F,FL.BYP ;OK TO BYPASS ACCOUNTING SYSTEM
USRDE2: MOVE T1,U.PATH+.FXDIR;GET NORMAL DEFAULT PPN FROM PATH BLOCK
TLNE F,FL.BYP ;BYPASSING THE ACCOUNTING SYSTEM?
MOVE T1,DEFACT+.AEPPN ;GET DEFAULT PPN
SKIPE USERID ;BUT IS THERE A USER-ID?
POPJ P, ;YES--CAN'T TRUST THE PPN FROM THE PATH
SKIPN PP ;HAVE A PPN?
MOVE PP,T1 ;USE DEFAULT
POPJ P, ;RETURN
SUBTTL Command scanning routines -- PSCAN - Init scanning of switches
; ROUTINE TO DO PARTIAL LINE SCANNING AND LEADING SWITCH HANDLING
; CALL: PUSHJ P,PSCAN
PSCAN: SETOM REPARS ;INIT REPARSE FLAG
HRRZ T1,COMIDX ;GET INVOKING COMMAND INDEX
MOVE T1,COMPBK(T1) ;POINT TO SCAN ARGUMENTS
PUSH P,.OPTN## ;SAVE /OPTION
PUSH P,.FLVRB## ;SAVE /MESSAGE
PUSHJ P,.PSCAN## ;SET UP PARTIAL LINE SCANNER
TDZA T1,T1 ;WANTS TO PROMPT
MOVEI T1,1 ;JUST PARSE
SKIPL REPARS ;DID SCAN RESTART .PSCAN (/HELP MAYBE)?
JRST .MONRT## ;YES, EXIT
POP P,.FLVRB## ;RESTORE /MESSAGE
POP P,.OPTN## ;RESTORE /OPTION
JUMPN T1,PSCAN1 ;JUMP IF NO PROMPT NEEDED
HRRZ T1,COMIDX ;GET INVOKING COMMAND INDEX
MOVE T1,COMPMT(T1) ;AND IT'S ASSOCIATED PROMPT STRING
SKIPN (T1) ;NULL STRING?
POPJ P, ;NEVER PROMPT--JUST EXIT
PUSHJ P,TTYPMT ;PROMPT
PSCAN1: PUSHJ P,.TIAUC## ;PRIME THE PUMP
PJRST SWTSCN ;ENTER SWITCH SCANNER
SUBTTL Command scanning routines -- PXSCAN - Init scanning one argument
; INITIALIZE SCANNING OF A SINGLE ARGUMENT. THIS IS NOT TO BE
; USED FOR FILESPEC OR SWITCH SCANNING.
; CALL: MOVE T1, INPUT TIMEOUT TEXT ADDRESS
; MOVE T2, PROMPT STRING TEXT ADDRESS
; PUSHJ P,PXSCAN
PXSCAN: MOVEM T1,HELP ;SAVE INPUT TIMEOUT TEXT
PUSHJ P,.SAVE1## ;SAVE P1
MOVE P1,T2 ;COPY PROMPT STRING
PUSHJ P,.PSH4T## ;SAVE T1-T4
PUSH P,.OPTN## ;SAVE /OPTION
PUSH P,.FLVRB## ;SAVE /MESSAGE
SETZ T1, ;NO ARGUMENTS
PUSHJ P,.PSCAN## ;INITIALIZE
PUSHJ P,[MOVE T1,P1 ;COPY PROMPT STRING
PJRST TTYPMT];TYPE IT
POP P,.FLVRB## ;RESTORE /MESSAGE
POP P,.OPTN## ;RESTORE /OPTION
PUSHJ P,.POP4T## ;RESTORE T1-T4
POPJ P, ;RETURN
SUBTTL Command scanning routines -- SCMPMT - SCAN prompt
SCNPMT: PUSHJ P,TTYECH ;SET TTY ECHO
MOVEI T1,"#" ;ALWAYS PROMPT WITH "#" WHETHER
PUSHJ P,.TCHAR## ;FIRST OR CONTINUATION LINE
PJRST .TOOUT## ;FORCE OUTPUT AND RETURN
SUBTTL Command scanning routines -- SWTSCN - Parse switches
; ROUTINE TO DO SWITCH SCANNING
; CALL: PUSHJ P,SWTSCN
SWTSCN: CAIN C," " ;A SPACE?
PUSHJ P,.TIAUC## ;YES--GET A REAL CHAR
TLNE F,FL.LGN ;JOB LOGGED IN?
CAIE C,"@" ;YES--SEE IF INDIRECT CMD FILE
JRST SWTSC1 ;IT ISN'T
PUSHJ P,.GTIND## ;YES--SETUP FOR IT
JUMPLE C,SWTSC1 ;LOOP IF EOL
JRST E.ILSC## ;ELSE ERROR
SWTSC1: CAIE C,"/" ;SWITCH COMING?
POPJ P, ;NO
AOS REPARS ;FIRST TIME THROUGH
PUSHJ P,.KEYWD## ;YES--GO PROCESS IT
FATAL NSS,<No switch specified>
AOS REPARS ;INDICATE A SWITCH TYPED
JUMPLE C,.POPJ## ;RETURN IF EOL
CAIN C," " ;A SPACE?
PUSHJ P,.TIAUC## ;YES--EAT IT
JRST SWTSC1 ;LOOP BACK FOR ANOTHER SWITCH
SUBTTL Prompt for additional data -- ASKACT - Read account string
ASKACT: SKIPE FAILFL ;DO WE ALREADY KNOW WE'RE GOING TO FAIL?
POPJ P, ;YES--DON'T BOTHER WITH THIS STUFF
MOVE T1,U.ACTS ;GET FIRST WORD OF /ACCOUNT STORAGE
AOJN T1,ASKAC5 ;JUMP IF /ACCOUNT HAS BEEN SEEN
SETZM .NMUL## ;CLEAR FIRST WORD
MOVE T1,[.NMUL##,,.NMUL##+1] ;SET UP BLT
BLT T1,.NMUL##+7 ;CLEAR ENTIRE ACCOUNT STRING
MOVX T1,AE.ACT ;BIT TO TEST
TLNN F,FL.BYP ;BYPASSING THE ACCOUNTING SYSTEM?
TDNN T1,AENTRY+.AEREQ ;IS AN ACCOUNT REQUIRED?
JRST ASKAC2 ;NO--FINISH UP
MOVX T1,GL.ITY ;ANOTHER BIT TO TEST
TDNE T1,TTBITS ;DON'T CONFUSE BATCON OR OPSER
JRST ASKAC3 ;TRY TO GET CONTROLLING JOB'S ACCOUNT STRING
PUSHJ P,TTYECH ;SET TTY ECHO
MOVEI T1,[ASCIZ /an account string/]
MOVEI T2,[ASCIZ /Account: /]
PUSHJ P,PXSCAN ;INIT PARTIAL LINE SCANNING AND PROMPT
MOVE T1,[POINT 7,.NMUL##]
ASKAC1: PUSHJ P,.TICHE## ;GET A CHARACTER
JUMPLE C,ASKAC2 ;JUMP IF EOL OR EOF
CAME T1,[POINT 7,.NMUE##,34] ;ABOUT TO OVERFLOW BUFFER?
IDPB C,T1 ;NO--STORE CHARACTER
JRST ASKAC1 ;LOOP
ASKAC2: PUSHJ P,LGLACT ;CHECK THE ACCOUNT STRING FOR LEGAL CHARACTERS
MOVE T1,[.NMUL##,,U.ACTS] ;SET UP BLT
BLT T1,U.ACTS+7 ;COPY ACCOUNT STRING
JRST ASKAC5 ;AND PROCEED
ASKAC3: MOVNI T3,1 ;-1 TO START THINGS OFF
CTLJOB T3, ;GET CONTROLLING JOB NUMBER
MOVNI T3,1 ;THERE ISN'T ONE
JUMPLE T3,ASKAC4 ;JUMP IF NONE
HRL T1,T3 ;GET JOB NUMBER
HRRI T1,.GTPPN ;GETTAB TABLE NUMBER
GETTAB T1, ;READ PPN
SETZ T1, ;CAN'T
CAME T1,PPN ;SAME PPN?
JRST ASKAC4 ;NO
MOVE T1,[.ACTRD,,T2] ;SET UP UUO AC
MOVEI T2,2 ;TWO WORDS FOLLOWING (JOB NUMBER IN T3)
MOVEI T4,U.ACTS ;POINT TO STORAGE
ACCT. T1, ;READ CONTROLLING JOB'S ACCOUNT STRING
ASKAC4: FATAL NAS,<No account string specified>,EF.FMT
ASKAC5: PJRST USGVAL ;SEND VALIDATION MESSAGE TO [SYSTEM]ACCOUNTING
SUBTTL Prompt for additional data -- ASKATT - Read detached job# for ATTACH
ASKATT: SKIPE ATTJBN ;HAVE A JOB TO ATTACH TO YET?
JRST .POPJ1## ;YES--NOTHING TO DO
MOVEI T1,ATTMAP ;SUBROUTINE TO VALIDATE JOB NUMBER
PUSHJ P,MAPJOB ;SEE IF OTHER JOBS EXIST
SKIPN T1,JOBCNT ;FOUND ANY JOBS?
POPJ P, ;NO
SOJN T1,ASKAT1 ;JUMP IF MORE THAN ONE
PUSHJ P,MAPNXT ;FIND THE JOB
POPJ P, ;JOB MUST EXIST BUT DOESN'T??
MOVEM T1,ATTJBN ;SAVE JOB NUMBER
JRST .POPJ1## ;AND RETURN
MOVE T1,JOBCNT ;GET COUNT OF JOBS MAPPED
SOJN T1,ASKAT1 ;JUMP IF MORE THAN ONE
PUSHJ P,MAPNXT ;FIND THE JOB
POPJ P, ;JOB MUST EXIST BUT DOESN'T??
MOVEM T1,ATTJBN ;SAVE JOB NUMBER
JRST .POPJ1## ;AND RETURN
ASKAT1: PUSHJ P,DETJOB ;REPORT DETACHED JOBS
ASKAT2: PUSHJ P,TTYECH ;SET TTY ECHO
MOVEI T1,[ASCIZ /a job number/] ;INPUT TIMEOUT TEXT
MOVEI T2,[ASCIZ /Type a job number to attach to: /] ;PROMPT
PUSHJ P,PXSCAN ;INIT PARTIAL LINE SCANNING
PUSHJ P,.SWDEC## ;READ A DECIMAL NUMBER
JUMPG C,ERRILC ;ERROR IF NOT EOL
JUMPE N,ASKAT2 ;USER IS UNDECIDED
MOVEM N,ATTJBN ;STORE JOB NUMBER AWAY
JRST .POPJ1## ;AND RETURN
ATTMAP: MOVE T2,T1 ;COPY JOB NUMBER
TRMNO. T2, ;DETACHED?
SKIPA ;YES
POPJ P, ;CANNOT BE ATTACHED
HRLZ T2,T1 ;GET JOB NUMBER
HRRI T2,.GTDFL ;GET DEFAULT
GETTAB T2, ;FIND OUT IF USER WANTED TO BE ASKED
MOVEI T2,0 ;ALWAYS DEFAULT TO ASK THE USER
TXNN T2,JD.DAD ;DOES THIS JOB WANT TO PROMPT?
AOS (P) ;PUT THIS JOB IN THE MAP
POPJ P, ;RETURN
SUBTTL Prompt for additional data -- ASKLOG - Read detached job# for LOGIN
ASKLOG: MOVE T1,U.ATT ;GET /ATTACH ARGUMENT
TLNN F,FL.WLD ;WILDCARDED PPN?
CAIN T1,ATTIGN ;DID THE USER TYPE /ATTACH:INGORE?
JRST .POPJ1## ;YES--DON'T PROMPT
MOVX T1,GL.ITY ;BIT TO TEST
MOVE T2,PPN ;GET PPN
TDNN T1,TTBITS ;A PTY?
CAMN T2,ALPPPN ;OR [1,2]?
JRST .POPJ1## ;DON'T ASK
ASKLOX: MOVEI T1,LOGMAP ;SUBROUTINE TO VALIDATE JOB NUMBER
PUSHJ P,MAPJOB ;SEE IF OTHER JOBS EXIST
SKIPN T2,JOBCNT ;FOUND ANY JOBS?
JRST .POPJ1## ;NO
PUSHJ P,TTYECH ;SET TTY ECHO
CAIE T2,1 ;JUST ONE JOB?
JRST ASKLO2 ;NO
ASKLO1: PUSHJ P,DETJOB ;REPORT DETACHED JOB
MOVEI T1,[ASCIZ /LOGIN or ATTACH preference/]
MOVEI T2,[ASCIZ /Do you want to ATTACH to this job? [Y] /]
PUSHJ P,PXSCAN ;INIT PARTIAL LINE SCANNING
PUSHJ P,.SIXSW## ;READ A SIXBIT WORD
JUMPG C,ERRILC ;ERROR IF NOT EOL
JUMPE N,[MOVE N,JOBNUM ;GET TARGET JOB NUMBER
JRST ASKLO3] ;GO ATTACH
MOVE T1,[IOWD YNLEN,YNTBL] ;POINT TO ANSWERS
PUSHJ P,.NAME## ;CHECK THEM OUT
JRST ERRUKK ;ERROR
MOVE N,JOBNUM ;GET LAST JOB NUMBER FOUND BY MAPNXT
MOVEI T1,-YNTBL(T1) ;FORM INDEX
JUMPN T1,.POPJ1## ;JUMP IF USER SAID NO
JRST ASKLO3 ;ELSE GO FAKE UP AN ATTACH COMMAND
ASKLO2: PUSHJ P,DETJOB ;REPORT DETACHED JOBS
MOVEI T1,[ASCIZ /LOGIN or ATTACH preference/]
MOVEI T2,[ASCIZ /Type a job number to ATTACH or return to LOGIN a new job: /]
PUSHJ P,PXSCAN ;INIT PARTIAL LINE SCANNING
PUSHJ P,.SWDEC## ;READ A DECIMAL NUMBER
JUMPG C,ERRILC ;ERROR IF NOT EOL
JUMPE N,.POPJ1## ;USER WANTS TO LOGIN A NEW JOB
MOVX T1,%NSHJB ;
GETTAB T1, ;GET THE HIGHEST JOB IN USE
TRNA ;ERROR - BE SAFE: DON'T ALLOW IT
CAMGE T1,N ;IS THIS A VALID JOB NUMBER?
JRST ASKLO4 ;NO - TELL THE USER
MOVEI T1,.GTPPN ;CHECK TO SEE THAT THIS
HRL T1,N ; JOB HAS THE PPN HE
GETTAB T1, ; CLAIMS IT DOES
TRNA ;ERROR - DON'T ALLOW THE ATTACH
CAME T1,PPN ;DOES THE PPN MATCH?
JRST ASKLO4 ;NO - TELL THE USER
ASKLO3: MOVEM N,ATTJBN ;STORE JOB NUMBER AWAY
MOVEI T1,1 ;GET A "YES"
MOVEM T1,U.MODE ;MAKE IT LOOK LIKE /USER WAS TYPED
MOVE T1,[CM.ATT+COMATT] ;MUST DUMMY UP INVOKING COMMAND
MOVEM T1,COMIDX ; WORD TO LOOK LIKE AN ATTACH COMMAND
SETOM NOWBIT ;ALL ACCESS TIMES ARE LEGAL
MOVEI T1,[ASCIZ /.ATTACH /]
PUSHJ P,.TSTRG## ;PRINT A REASSURING MESSAGE
MOVE T1,ATTJBN ;GET TARGET JOB NUMBER
PUSHJ P,.TDECW## ;PRINT IT
MOVE T1,PPN ;GET TARGET PPN
PUSHJ P,.TPPNW## ;PRINT IT TOO
PJRST .TCRLF## ;END LINE WITH A CRLF AND TAKE ATTACH RETURN
ASKLO4: WARN IJN,<Invalid job number; try again>
JRST ASKLOX
LOGMAP: MOVE T2,T1 ;COPY JOB NUMBER
TRMNO. T2, ;DETACHED?
SKIPA ;YES
POPJ P, ;CANNOT BE ATTACHED
HRLZ T2,T1 ;GET JOB NUMBER
HRRI T2,.GTDFL ;GET DEFAULT
GETTAB T2, ;FIND OUT IF USER WANTED TO BE ASKED
MOVEI T2,0 ;ALWAYS DEFAULT TO ASK THE USER
TXNN T2,JD.DAD ;DOES THIS JOB WANT TO PROMPT?
AOS (P) ;PUT THIS JOB IN THE MAP
POPJ P, ;RETURN
YNTBL: SIXBIT /YES/
SIXBIT /NO/
YNLEN==.-YNTBL
SUBTTL Prompt for additional data -- ASKNAM - Read user name
ASKNAM: MOVE T1,U.NAME ;GET THE USER NAME
MOVE T2,U.NAME+1 ;GET THE SECOND HALF
MOVE T3,T1 ;COPY FIRST WORD
IOR T3,T2 ;MERGE THE TWO
CAMN T1,[EXP -1] ;NAME GIVEN?
CAME T2,[EXP -1] ;MUST CHECK BOTH WORDS
JUMPN T3,ASKNA6 ;JUMP IF WE HAVE A NAME
MOVE T1,CNTLJP ;GET CONTROLLING JOB'S PPN
CAME T1,ALPPPN ;OK IF [1,2]
TLNE F,FL.BYP!L.SOPR ;BYPASS OR SON OF OPR?
JRST ASKNA4 ;NEVER ASK FOR A NAME
MOVX T1,AE.NCH ;BIT TO TEST
MOVX T2,AE.NRT ;GET NAME REQUIRED BIT
TDNN T1,AENTRY+.AEFLG ;NAME REQUIRED BY SYSTEM ADMINISTRATOR?
JRST ASKNA1 ;NO
PUSHJ P,LOKCHK ;CHECK FOR LOCKED ACCOUNTING FILES
JRST ASKNA4 ;CAN'T CHANGE NAME
IORM T2,AENTRY+.AEREQ ;SET THE BIT
WARN NCR,<A name is required for accounting purposes>
ASKNA1: TDNN T2,AENTRY+.AEREQ ;NAME REQUIRED?
JRST ASKNA4 ;NO--USE WHAT'S IN THE PROFILE
PUSHJ P,TTYECH ;SET TTY ECHO
MOVEI T1,[ASCIZ /your name/]
MOVEI T2,[ASCIZ/Name: /]
PUSHJ P,PXSCAN ;INIT PARTIAL LINE SCANNING AND PROMPT
MOVE T1,[AENTRY+.AENAM,,AENTRY+.AENAM+1] ;SET UP BLT
SETZM AENTRY+.AENAM ;CLEAR FIRST WORD
BLT T1,AENTRY+.AENAM+.AANLW-1 ;CLEAR NAME STORAGE
MOVE T1,[POINT 8,AENTRY+.AENAM] ;BYTE POINTER TO STORAGE
MOVEI T2,.AANLC ;MAXIMUM NUMBER OF CHARACTERS
ASKNA2: PUSHJ P,.TICHE## ;GET A CHARACTER
JUMPLE C,ASKNA3 ;EOL?
IDPB C,T1 ;PUT A CHARACTER
SOJG T2,ASKNA2 ;LOOP
ASKNA3: SKIPE AENTRY+.AENAM ;MUST BE NON-ZERO
JRST ASKNA5 ;IT IS
SETOM FAILFL ;ELSE FORCE A FAILURE
ASKNA4: MOVX T1,AE.NCH ;BIT TO CLEAR
ANDCAM T1,AENTRY+.AEFLG ;DON'T ALLOW NAME CHANGES
ASKNA5: SETZM NAME ;CLEAR WORD 1
SETZM NAME2 ;CLEAR NAME 2
MOVEI T1,AENTRY+.AENAM ;ADDRESS OF ACCOUNTING NAME
MOVE T2,[POINT 6,NAME];BYTE POINTER TO DESTINATION
MOVEI T3,^D12 ;NAME IS 12 CHARACTERS LONG
PJRST CHRTRN ;TRANSLATE STRING AND RETURN
ASKNA6: DMOVEM T1,NAME ;STORE IT
POPJ P, ;RETURN
SUBTTL Prompt for additional data -- ASKPSW - Read password(s)
ASKPSW: MOVE T1,COMIDX ;GET COMMAND FLAGS
TXNE T1,CM.PSW!CM.SET ;PASSWORD OR SET PASSWORD COMMANDS?
JRST ASKPS1 ;YES--ALWAYS ASK
SKIPE FAILFL ;GOING TO FAIL?
JRST ASKPS1 ;ASK FOR PASSWORD ANYWAY
JUMPG C,ASKPS1 ;ALSO ASK IF PASSWORD ON ATTACH OR LOGIN LINE
MOVE T2,CNTLJP ;GET CONTROLLING JOB'S PPN
CAME T2,ALPPPN ;OK IF [1,2]
TLNE F,FL.CTY!FL.BYP!FL.BAT!L.SOPR ;PASSWORD REQUIRED?
POPJ P, ;NO
JUMPE PP,ASKPS1 ;IF NO PPN, THEN LOGIN WON'T SUCCEED, SO ASK
CAMN T2,PP ;OK IF US
POPJ P, ;RETURN IF NOT ORDINARY UNPRIV'ED ATTACH/LOGIN
TXNE T1,CM.ATT ;ATTACH COMMAND?
JRST ASKPS1 ;ALWAYS ASK FOR A PASSWORD
MOVX T1,AE.PRT ;BIT TO TEST
TDNN T1,AENTRY+.AEREQ ;IS A PASSWORD REQUIRED?
POPJ P, ;NO--RETURN
ASKPS1: MOVEI T1,[ASCIZ /your password/]
MOVEI T2,[ASCIZ /Password: /]
MOVEI T3,PASSWD ;BUFFER ADDRESS
PUSHJ P,GETPSW ;READ PASSWORD
PUSHJ P,.GTNOW## ;GET CURRENT UDT
SKIPN T2,AENTRY+.AEPCT ;GET PASSWORD CHANGE TIME
MOVE T2,T1 ;ZERO MEANS NOT YET
CAMLE T1,T2 ;TIME TO CHANGE PASSWORD?
SETOB T1,AENTRY+.AEPCT ;YES
SKIPG U.PASS ;USER ASK FOR A PASSWORD CHANGE?
CAME T1,[EXP -1] ;PASSWORD CHANGE REQUIRED?
JRST ASKPS2 ;DON'T BOTHER USER WITH USELESS CHATTER
PUSHJ P,LOKCHK ;CHECK FOR A LOCKED FILE
JRST ASKPS3 ;GIVE UP
WARN PCR,<A password change is required by the system administrator>
MOVEI T1,1 ;NOW FAKE STORAGE
MOVEM T1,U.PASS ;SO IT LOOKS LIKE /PASSWORD:YES WAS TYPED
ASKPS2: SKIPG U.PASS ;/PASSWORD SEEN?
POPJ P, ;NO--DONE
MOVEI T1,[ASCIZ /password may not be changed/]
PUSHJ P,LOKWRN ;CHECK FOR A LOCKED FILE
SKIPA ;GIVE UP
JRST ASKPS4 ;ONWARD
ASKPS3: SETZM U.PASS ;NO PASSWORD CHANGE
POPJ P, ;RETURN
ASKPS4: MOVX T1,AE.PCP ;GET "PASSWORD CHANGE PROHIBITED" BIT
SKIPN FAILFL ;BYPASS CHECKS IF LOGIN WON'T SUCCEED
TDNN T1,AENTRY+.AEREQ ;PASSWORD CHANGE PROHIBITED?
JRST ASKPS5 ;NO, PROCEED
MOVE T1,AENTRY+.AEPCT ;GET THE PASSWORD CHANGE REQUIRED FLAG
AOJE T1,ASKPS5 ;REQUIRED BY SYSTEM ADMINISTRATOR: PROCEED
WARN PCP,<Password change prohibited>
JRST ASKPS3 ;NO PASSWORD CHANGE
ASKPS5: MOVEI T1,[ASCIZ /your new password/]
MOVEI T2,[ASCIZ /New password: /]
MOVEI T3,NEWPSW ;BUFFER ADDRESS
PUSHJ P,GETPSW ;READ NEW PASSWORD
MOVEI T1,[ASCIZ /your new password/]
MOVEI T2,[ASCIZ /Verification: /]
MOVEI T3,CHKPSW ;BUFFER ADDRESS
PUSHJ P,GETPSW ;READ NEW PASSWORD AGAIN
MOVSI T1,-.APWLW ;-WORD COUNT
MOVE T2,NEWPSW(T1) ;GET A WORD
CAMN T2,CHKPSW(T1) ;A MATCH?
AOBJN T1,.-2 ;LOOP
JUMPGE T1,.POPJ## ;RETURN IF ALL WORDS CHECK OUT
WARN PNV,<The new password did not verify; try again>,,
JRST ASKPS5 ;LOOP BACK
; READ A ONE PASSWORD
; CALL: MOVE T1, TIME-OUT HELP TEXT
; MOVE T2, ADDRESS OF PROMPT STRING
; MOVE T3, ADDRESS OF BUFFER
; PUSHJ P,GETPSW
GETPSW: SETZM 0(T3) ;CLEAR FIRST WORD OF BUFFER
MOVSI T4,0(T3) ;POINT TO START OF BUFFER
HRRI T4,1(T3) ;MAKE A BLT POINTER
BLT T4,.APWLW-1(T3) ;CLEAR ENTIRE BUFFER
JUMPG C,GETPS1 ;JUMP IF ALREADY HAVE A CHARACTER
PUSHJ P,.PSH4T## ;SAVE T1-T4
PUSH P,.OPTN## ;SAVE /OPTION
PUSH P,.FLVRB## ;SAVE /MESSAGE
MOVEI T1,0 ;NO ARGUMENTS
PUSHJ P,.PSCAN## ;CALL PARTIAL LINE SCANNER
JFCL ;MUST ALWAYS PROMPT
POP P,.FLVRB## ;RESTORE /MESSAGE
POP P,.OPTN## ;RESTORE /OPTION
PUSHJ P,.POP4T## ;RESTORE T1-T4
MOVEM T1,HELP ;SAVE INCASE INPUT TIMEOUT
PUSHJ P,TTYNEC ;SET TTY NO ECHO
PUSHJ P,PMTPSW ;PROMPT THE USER
GETPS1: MOVE T2,T3 ;GET PASSWORD BUFFER ADDRESS
HRLI T2,(POINT 8,) ;MAKE A BYTE POINTER
MOVEI T3,.APWLC ;MAXIMUM NUMBER OF CHARACTERS
GETPS2: PUSHJ P,.TICHE## ;GET A CHARACTER
JUMPLE C,GETPS3 ;DONE?
SOSG T3 ;WATCH FOR OVERFLOW
FATAL PTL,<Password too long>
IDPB C,T2 ;STORE
JRST GETPS2 ;LOOP
GETPS3: MOVEI T1,.CHNUL ;GET TERMINATOR
IDPB T1,T2 ;MAKE ASCIZ
PJRST .TNEWL## ;PRINT A CRLF IF NEEDED AND RETURN
; ROUTINE TO ISSUE PASSWORD PROMPT
PMTPSW: PUSH P,T2 ;SAVE PROMPT STRING
PUSH P,T3 ;SAVE BUFFER ADDRESS
PUSHJ P,.TNEWL## ;START ON A NEW LINE
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?
JRST PMTPS2 ;YES
MOVEI T2,3 ;NUMBER OF TIMES TO OVERSTRIKE LINE
PMTPS1: MOVE T1,-1(P) ;GET PROMPT STRING
PUSHJ P,.TSTRG## ;TYPE IT
MOVEI T3,.APWLC ;LENGTH OF PASSWORD IN CHARACTERS
MOVE T1,[EXP "*","#","@"]-1(T2) ;GET MASK CHARACTER
PUSHJ P,.TCHAR## ;TYPE MASK CHARACTER
SOJG T3,.-1 ;LOOP
MOVEI T1,.CHCRT ;RETURN THE
PUSHJ P,.TCHAR## ; CARRIAGE
SOJG T2,PMTPS1 ;LOOP
PMTPS2: MOVE T1,-1(P) ;GET PROMPT STRING ONCE MORE
PUSHJ P,.TSTRG## ;TYPE IT
PUSHJ P,.TOOUT## ;FORCE OUTPUT
POP P,T3 ;RESTORE BUFFER ADDRESS
POP P,T2 ;RESTORE PROMPT STRING
POPJ P, ;RETURN
SUBTTL Prompt for additional data -- ASKRMK - Read remark string
ASKRMK: SKIPE FAILFL ;DO WE ALREADY KNOW WE'RE GOING TO FAIL?
POPJ P, ;YES--DON'T BOTHER WITH THIS STUFF
MOVE T1,U.RMRK ;GET FIRST WORD OF /REMARK STORAGE
AOJN T1,.POPJ## ;RETURN IF A /REMARK SWITCH HAS BEEN SEEN
MOVEI T1,1 ;SET FLAG TO ASSUME REMARK NEEDED
MOVX T2,AE.RMK ;BIT TO TEST
MOVX T3,GL.ITY ;ANOTHER BIT TO TEST
TDNN T3,TTBITS ;DON'T CONFUSE BATCON OR OPSER
TDNN T2,AENTRY+.AEREQ ;IS A REMARK REQUIRED?
MOVEI T1,0 ;NO--SET FLAG ACCORDINGLY
SETZM .NMUL## ;CLEAR FIRST WORD
MOVE T2,[.NMUL##,,.NMUL##+1] ;SET UP BLT
BLT T2,.NMUL##+7 ;CLEAR ENTIRE REMARK STRING
JUMPE T1,.POPJ## ;RETURN IF NO REMARK NEEDED
TLNE F,FL.BYP ;BYPASSING THE ACCOUNTING SYSTEM?
POPJ P, ;YES
PUSHJ P,TTYECH ;SET TTY ECHO
MOVEI T1,[ASCIZ/a remark string/]
MOVEI T2,[ASCIZ/Remark: /]
PUSHJ P,PXSCAN ;INIT PARTIAL LINE SCANNING AND PROMPT
MOVE T1,[POINT 7,.NMUL##]
ASKRM1: PUSHJ P,.TICHE## ;GET A CHARACTER
JUMPLE C,ASKRM2 ;JUMP IF EOL OR EOF
CAME T1,[POINT 7,.NMUE##,34] ;ABOUT TO OVERFLOW BUFFER?
IDPB C,T1 ;NO--STORE CHARACTER
JRST ASKRM1 ;LOOP
ASKRM2: PUSHJ P,LGLRMK ;CHECK THE REMARK STRING FOR LEGAL CHARACTERS
MOVE T1,[.NMUL##,,U.RMRK] ;SET UP BLT
BLT T1,U.RMRK+7 ;COPY REMARK STRING
POPJ P,
SUBTTL SCAN argument blocks -- .ISCAN
SCIBLK: IOWD COMLEN,COMLST ;POINTER TO INVOKING COMMAND NAMES
XWD SAOFST,'LGN' ;CCL OFFSET,,CCL FILE NAME
XWD TTYGET,TTYPUT ;TTY INPUT ROUTINE,,TTY OUTPUT ROUTINE
XWD 0,0 ;POINTER TO INDIRECT COMMAND FILE SCAN BLOCK
XWD SCNPMT,FLUSH ;PROMPT ROUTINE,,EXIT ROUTINE
EXP FS.ICL ;FLAGS,,RESERVED
SCILEN==.-SCIBLK ;LENGTH OF BLOCK
SUBTTL SCAN argument blocks -- .OSCAN
DEFINE X (PFX,NAM,HLP,PRC,PMT,OSC),<
PFX'OB:
IFE PFX'SWL,<EXP 0,0,0>
IFN PFX'SWL,<
IOWD PFX'SWL,PFX'SWN
XWD PFX'SWD,PFX'SWM
XWD 0,PFX'SWP
>
<SIXBIT /'HLP/>
IFB <OSC>,<
XWD 1,COMNAM
>
IFNB <OSC>,<
ZZ==0
IRP OSC,<ZZ==ZZ+1>
XWD ZZ,[
IRP OSC,<SIXBIT /OSC/>
]
>
PFX'OL==.-PFX'OB
>
CMDS
SUBTTL SCAN argument blocks -- .PSCAN
DEFINE X (PFX,NAM,HLP,PRC,PMT,OSC),<
PFX'PB:
IFE PFX'SWL,<EXP 0,0,0>
IFN PFX'SWL,<
IOWD PFX'SWL,PFX'SWN
XWD PFX'SWD,PFX'SWM
XWD 0,PFX'SWP
>
<SIXBIT /'HLP/>
PFX'PL==.-PFX'PB
>
CMDS
SUBTTL SCAN switch tables -- ATTACH command
DEFINE SWTCHS,<
SN BYPASS,U.BYPA,
SS MONITOR,U.MODE,0
SP TERMINAL,,TERMSW,,FS.VRQ!FS.HEL
SS USER,U.MODE,1
>
; TABLE EXPANSION
DOSCAN(ATTSW)
SUBTTL SCAN switch tables -- KJOB command
DEFINE SWTCHS,<
SS *BATCH,U.KJOB,0
SN *CLEAR,U.CLEA,
SN *DISCONNECT,U.DISC,
SS FAST,U.KJOB,1
SS *NOMESSAGE,U.NMSG,0
SN *TEMP,U.TEMP,
>
; TABLE EXPANSION
DOSCAN(KJBSW)
SUBTTL SCAN switch tables -- LOGIN command
DM COR,^D0,^D262143,^D262143
DM DPR,3,0,1
DM FIL,.FXLEN,0,0
DM LOC,77,0,0
DM QTA,1,0,0
DM TIM,0,0,^D60
DM YN,1,0,1
KEYS ATT,<ASK,IGNORE>
KEYS DSKF,<ERROR,PAUSE>
KEYS SPOL,<LPT,PLT,PTP,CDP,CDR>
KEYS NOTC,<ALWAYS,SOMETIMES,NEVER>
KEYS WTCH,<FILES,MTA,VERSION,WRITE,READ,WAIT,RUN,DAY,CONTEXTS>
WCHLSH==^D17-WTCHDA ;AMOUNT TO SHIFT BITS FOR SETUUO
DEFINE SWTCHS,<
SP ACCOUNT,<POINT ^D65-^D8,U.ACTS>,ACCTSW,,FS.VRQ!FS.HEL
SP ASSIGN,DEVTAB,ASGNSW,,FS.VRQ!FS.HEL
SL ATTACH,U.ATT,ATT,ATTASK
SP BATCH,,BATCSW,,FS.VRQ!FS.HEL
SN BYPASS,U.BYPA,
SP CORE,U.CORE,.SWCOR##,COR,FS.VRQ
SN DEFER,U.DFER,
SP DEFAULT,,DEFASW,,FS.VRQ!FS.HEL
SL DSKFUL,U.DFUL,DSKF,DSKFPA
SP DSKPRI,U.DPRI,DSKPSW,DPR,FS.VRQ!FS.HEL
SN GUIDELINE,U.GUID
SP LIB,LIBSPC,.SWFIL##,FIL,FS.VRQ
SN LIMIT,U.LIMIT
SP LOCATE,U.STA,.SWOCT##,LOC