!TITLE Source of NEWUSERS !< %external %integer %fn %spec OUTPOS %external %integer %fn %spec UINFI (%integer I) %external %string (255) %fn %spec UINFS (%integer I) %const %integer SYS PROCS = 5; ! Number of system processes %const %integer OCP TYPE = 10 %const %integer TERMINAL WIDTH = 15 %system %routine %spec FOR ALL USERS (%routine USE) %system %string (255) %fn %spec USERNAME (%string(255) USER, %integer MACHINE) %system %integer %fn STOI (%string (255) S) %integer SYM %if LENGTH(S)>0 %start %result = - STOI (SUB STRING (S, 2, LENGTH(S))) %if CHARNO(S,1)='-' %and LENGTH(S)>1 SYM = CHARNO(S,LENGTH(S))-'0' LENGTH(S) = LENGTH(S)-1 %result = 10*STOI(S)+SYM %finish %result = 0 %end %const %string (32) %array COMPUTER SCIENTIST(00:99) = %c "ECSC00 A Ghost", "ECSC01 Jeff Tansley", "ECSC02 Andrew Morton", "ECSC03 Sidney Michaelson", "ECSC04 David Rees", "ECSC05 Peter Schofield", "ECSC06 George Ross", "ECSC07 Robin Milner", "ECSC08 Alex Wight", "ECSC09 Nick Shelness", "ECSC10 Hamish Dewar", "ECSC11 W. Walker", "ECSC12 Kate Duncan", "ECSC13 Paul Cockshott", "ECSC14 Rod Burstall", "ECSC15 Peter Lindsay", "ECSC16 Rosemary Candlin", "ECSC17 Gordon Hughes", "ECSC18 L. Damas", "ECSC19 Mike Warburton", "ECSC20 Rob Proctor", "ECSC21 Moira Norrie", "ECSC22 Vera Noethe", "ECSC23 A Ghost", "ECSC24 Alex Deas", "ECSC25 K. Kyriakos", "ECSC26 Kathy Humphry", "ECSC27 Ian Thomson", "ECSC28 I. Nixon", "ECSC29 Frank Stacey", "ECSC30 A. Hoddinott", "ECSC31 G. Brelstaff", "ECSC32 Jimmy Johnstone", "ECSC33 Rainer Thonnes", "ECSC34 Andrew Morton", "ECSC35 Fred King", "ECSC36 Koos-hutas", "ECSC37 M. Hennesey", "ECSC38 A Ghost", "ECSC39 George Cleland", "ECSC40 Ken Chisholm", "ECSC41 Jeff Tansley", "ECSC42 Brian Woodroffe", "ECSC43 J. Ireland", "ECSC44 Pedro Hepp", "ECSC45 Steve Holtzman", "ECSC46 Carl Sturtivant", "ECSC47 Lee Dan Smith", "ECSC48 Paul McLellan", "ECSC49 A Ghost", "ECSC50 Irene Buchanan", "ECSC51 A. Smailajic", "ECSC52 John Scott", "ECSC53 Malcom Atkinson", "ECSC54 Gordon Brebner", "ECSC55 J. Cardin", "ECSC56 Richard Marshall", "ECSC57 Ordinary Alex", "ECSC58 Clive Davenhall", "ECSC59 Mark Jerrum", "ECSC60 Walter Scott", "ECSC61 Krishna Kulkarni", "ECSC62 John Butler", "ECSC63 Don Sanella", "ECSC64 John Gray", "ECSC65 G. Owoso", "ECSC66 Tom Horton", "ECSC?? A new CS face" (*) %external %routine NEW USERS (%string (255) PARAM) %string (255) %fn SPECIAL(%string(255) USER) %constinteger MAX USERS =19 %constinteger MAX GROUPS = 40 ! Take the mailer names if available %const %string (31) %array USERS (1:Max Users) = "SUBSYS A subsystem hacker", "LOADER Some extra system load", "CONLIB Contributed software", "KNTLIB Kent's software store", "METLIB Meteorology software", "ECSLIB EUCSD's software store", "ERCLIB ERCC's software store", "CHMENG a Chemical Engineer", "MANAGR The System Manager", "SYSMAN The System Manager", "SPOOLR The Device Manager", "REMOTE A remote Operator", "FTRANS The File Transporter", "JOURNL The Captain's log", "LIBRAR A book worm", "DIRECT The Director", "UTILTY an unknown user", "VOLUMS The Archive Manager", "MAILER The Postman" %CONSTSTRING(31)%ARRAY Groups(1:Max Groups) = %C "EBFR A forestry person", "EBFU A forestry student", "EBOT A botany user", "EDCB A chemical person", "EDCU A chemistry student", "EFDU A maths student", "EFEU A maths student", "EGMU A meteorology student", "EGNP A physical person", "EGNU A physics student", "EGPU A geophysics student", "EHJU A busy studying student", "EHJV A busy studying student", "EJAA An Economical user", "EJJU A geography student", "EJUA A psychological person", "EJUU A psychological student", "ELEU An Elect. Eng. student", "EMCU A Chem. Eng. student", "EMEU A Mech. Eng. student", "EMFU A Mech. Eng. student", "EMTU A Chem. Eng. student", "ENCU A Civil Eng. student", "ECPY An IMPish hacker", "ECTU A CS2 student", "ECXU A CS1 student", "ECYU A CS1 student", "ECZU A CS1 student", "ECUU An IS1 student", "ECVU An IS1 student", "ECMU An artificial student", "ERFY A Fortran Coarse hacker!", "ERCC A nameless ERK!", "ERCI A micro person", "ERCM A talkative person", "ERCS A compiler person", "ERIY A little IMP", "ERSY S.Paperwasting.S.S. user", "JOBR A batch server", "PLUL A CASTaway" %const %string (23) %array PLACES ('A':'Z') = %c " an unknown", " a St. Andrews", " a Strathclyde", " an unknown", " an Edinburgh", " a Stirling", " a Glasgow", " a Heriot-Watt", " an unknown" (3), " an agricultural", " a medical", " an unknown" (2), " a Leeds", " a Newcastle", " an Essex", " an Unknown" (2), " a Open University", " an unknown", " a Cardiff", " an unknown" (*) %string (255) USERNO,GROUP,NAME %integer I Userno = User; LENGTH (Userno) = 6 Group = Userno; LENGTH (Group) = 4 %cycle I=1,1,MAX USERS %result = USERS (I) %if USERS(I) -> (USERNO) %repeat %cycle I=1,1,MAX GROUPS %result = USERNO.NAME %if GROUPS(I) -> (GROUP).NAME %repeat %if CHARNO(GROUP,4)='U' %then USER = " student" %else USER = " user" %result = USERNO.PLACES(CHARNO(GROUP,1)).USER %end %const %byte %integer %array REASON (1:4) = 'b', 's', '?', ' ' %integer MACHINE, FORE, BACK, INVOC MAP, WIDTH %string (127) MASK, FORM, INVOCS %integer %fn INTERESTING (%string (31) USER) %integer I %result = 0 %if MASK = "??????" %for I=1,1,6 %cycle %result = -1 %if CHARNO(MASK,I)#'?' %and CHARNO(USER,I)#CHARNO(MASK,I) %repeat %result = 0 %end %routine NORMAL OUTPUT (%string(255) USER,%integer MODE) %string(255) S %integer I ! Over-ride the mailer names for a selected few... %const %integer MAX OVER RIDES = 3 %const %string (31) %array Overrides (1:Max Overrides) = %C "REMOTE A remote Operator", "JOURNL The Captain's log", "JOBR00 b A batch jobber" %if MODE&4#0 %then MODE=1 %and BACK = BACK + 1 %else MODE=4 %and FORE = FORE + 1 MODE = 2 %if USER="DIRECT" %or USER="VOLUMS" %c %or USER="SPOOLR" %or USER="MAILER" %or USER="FTRANS" %return %if INTERESTING(USER)#0 %or MODE&INVOC MAP = 0 %if USER->("ECSC").S %start S = COMPUTER SCIENTIST(STOI(S)) %finish %else %start S="" %cycle I=1,1,MAX OVERRIDES S = OVERRIDES(I) %and %exit %if OVERRIDES(I) -> (User) %repeat S=USER." ".USERNAME (USER,MACHINE) %if S="" S = SPECIAL (S) %if CHARNO(S,LENGTH(S))='?' %finish CHARNO (S, 8) = REASON (MODE) %if MODE # 4 PRINT STRING (S) SPACES (40-LENGTH(S)) NEWLINE %if OUTPOS + 40 > WIDTH %end %routine BRIEF OUTPUT (%string (255) USER, %integer MODE) %if MODE&4#0 %then MODE=1 %and BACK=BACK+1 %else MODE=4 %and FORE=FORE+1 MODE=2 %if USER="DIRECT" %or USER="SPOOLR" %c %or USER="VOLUMS" %or USER="MAILER" %or USER="FTRANS" %return %if INTERESTING(USER)#0 %or MODE&INVOC MAP=0 PRINT STRING (USER) PRINT SYMBOL (REASON(MODE)) SPACE NEWLINE %if OUTPOS + 8 > WIDTH %end %routine VERY BRIEF OUTPUT (%string (255) USER, %integer MODE) %if MODE&4#0 %then BACK = BACK + 1 %else FORE = FORE + 1 %end MASK = PARAM FORM = "N" %unless MASK -> MASK.(",").FORM INVOCS = "FB" %unless FORM -> FORM.(",").INVOCS MASK = MASK."??????" LENGTH (MASK) = 6 LENGTH (FORM) = 1 INVOC MAP = 0 INVOC MAP = INVOC MAP ! 1 %if INVOCS -> ("B") INVOC MAP = INVOC MAP ! 2 %if INVOCS -> ("S") INVOC MAP = INVOC MAP ! 4 %if INVOCS -> ("F") INVOC MAP = 4 %if INVOC MAP = 0 ! Establishes default params "??????",NORMAL,F PARAM = UINFS (OCP Type) MACHINE = '2' MACHINE = '0' %if PARAM = "2980" WIDTH = UINFI (TERMINAL WIDTH) FORE = 0; BACK = 0 %if FORM="V" %then %start FOR ALL USERS (VERY BRIEF OUTPUT) %finishelseif FORM="B" %start FOR ALL USERS (BRIEF OUTPUT) %finishelsestart FOR ALL USERS (NORMAL OUTPUT) %finish NEWLINE %if OUTPOS > 1 FORE = FORE - SYS PROCS; ! Loose the system processes %if FORE#0 %then WRITE(FORE,0) %else PRINT STRING ("No") PRINT STRING (" user") PRINT SYMBOL ('s') %if FORE#1 %if BACK#0 %then %start PRINT STRING (" (+") WRITE(BACK,0) PRINT STRING (" batch)") %finish NEWLINE %end %endoffile !>