This page contains a collection of topics on using Multics.
Once you connect to a Multics system, you will see a prompt like this:
`
Multics MR12.8: Installation and location (Channel d.h000)
Load = 5.0 out of 90.0 units: users = 5, 08/18/23 1126.6 pst Fri
`
You can type "help" here, in which you'll get a list of the most common commands available here:
`
help
Examples of correct login:
login Person_name projectid
enterp Special_name projectid
enter Special_name projectid
Upper and lower case letters are different.
Check any typing conventions for your terminal.
Contact your administrator for more help.
Please try to login again or type "help" for instructions.
`
If you have an account on the system, you should use the "login" command to log in. For anonymous access, you can use either the "enter" or "enterp" commands. There are other options available at this prompt, including the "ttp" command, which will display your current "terminal type" or set your terminal type.
To login, enter a command such as:
login Repair
You will be prompted for a the password for the "personid" Repair. If the password is correct, you will be logged in as "Repair" in whatever project is the default project for "Repair".
You can use "l" as a shortcut for "login".
For the first login to a cold-booted (or QuickStart) Multics system, the only interactive login accounts available are Repair.SysAdmin and Repair.SysDaemon. The password for the "Repair" personid is "repair". The first time you login as "Repair" you will be required to change the password.
`
l Repair
Password:
You must use the -change_password option to change your password.
Please try to login again or type "help" for instructions.
`
To change your password during login, use either the -change_password or -cpw control argument to the login command. You will be prompted for the old password, and (twice) for the new password.
`
l Repair -cpw
Password:
New Password:
New Password Again:
Password changed.
You are protected from preemption.
Repair.SysAdmin logged in 03/22/16 1648.8 pst Tue from ASCII terminal "none".
New messages in message_of_the_day:
Welcome to the Multics System.
print_motd: Created >user_dir_dir>SysAdmin>Repair>Repair.value.
r 16:48 1.056 31
`
Note that the default project for Repair is SysAdmin. Repair is also registered on the SysDaemon project. You should refrain from logging in as Repair.SysDaemon, as users on the SysDaemon project have read/write access to virtually everything and can very easily damage the file system in ways that make it unbootable. Of course, there may be times when you need to login to this project.
If you don't want to login with the default project, you can specify another project during login:
`
Multics MR12.7: Installation and location (Channel d.h000)
Load = 5.0 out of 90.0 units: users = 5, 07/28/21 1551.4 pst Wed
l Repair SysDaemon
Password:
You are protected from preemption.
Repair.SysDaemon logged in 07/28/21 1552.6 pst Wed from ASCII terminal "none".
New messages in message_of_the_day:
Welcome to the Multics System.
print_motd: Created >user_dir_dir>SysDaemon>Repair>Repair.value.
r 15:52 0.362 21
`
Note that upon login, Multics will display a "ready message", indicating that it is ready for you to enter commands:
r 16:52 1.253 21
if you don't have an account on a Multics system, the administrator may have enabled Guest logins. There are two kinds of Guest logins: those that require a password and those that don't. We will explore those without passwords here.
To login to Multics on the Guest project as an anonymous user, use the "enter" or "e" login command:
`
Multics MR12.7: Installation and location (Channel d.h001)
Load = 6.0 out of 90.0 units: users = 6, 07/28/21 1618.9 pst Wed
enter Swenson Guest
You are protected from preemption until 16:19.
Anonymous user Swenson.Guest logged in 07/28/21 1619.0 pst Wed from ASCII terminal "none".
r 16:19 0.319 19
`
You may use any Personid you like. I used my real Personid, above, but I really am logged in anonymously. You can verify this with the "who" command:
`
Multics MR12.7, load 7.0/90.0; 7 users, 2 interactive, 5 daemons.
Absentee users 0/3
Repair.SysAdmin
anonymous.Guest
r 16:19 0.041 2
`
In this case, you may or may not have access to write to your home directory. If your project has been setup such that your home directory is your project directory (e.g. >udd>Guest), you will likely not have access to write to this directory. If, however, the administrator has set up your project directory to be somewhere else (e.g. >udd>Guest>anonymous), then you will likely be able to write to this directory.
To find out your home directory use the "home_dir" or "hd" command:
`
hd
>udd>Guest>anonymous
r 16:22 0.017 0
`
In the above example, your home directory is ">udd>Guest>anonymous", and you probably have write access. If, however, you see this:
`
hd
>udd>Guest
r 16:22 0.017 0
`
you will not most likely not have write access to your home directory. If you wish to create files, you will have to use your process directory. Your process directory will have a pathname like:
>process_dir_dir>!BLLDlXdBBBBBBB
You can use the command/active function "process_dir" or "pd" to determine your process directory. To change directories to your process directory, for example, use this command:
`
cwd [pd]
r 17:43 0.113 2
pwd
>process_dir_dir>!BLLDlXdBBBBBBB
r 17:43 0.069 0
`
You will have write access to your process directory, where you can create, edit, etc. files. Note, however, that your process directory will be deleted upon logout. If you wish to have permanent file storage, either use a non-Guest account or ask your system administrator (which may be you!) to create a writeable home directory for Guest anonymous logins. See Giving Guest Users a Writeable Home Directory.
If you are like most of us, you haven't used Multics in decades. Or you might never have used Multics before. Probably the most important few things to learn immediately are these:
When you first login, you will find yourself in your home directory. Your home directory is located under your project directory. And the project directory is located under the directory >user_dir_dir (or >udd). Your home directory will therefore generally have this form:
>udd>Project>Personid
If user Personid is Swenson and your Project is SysAdmin, your home directory will (by default) be:
>udd>SysAdmin>Swenson
If you want to change directories to your project directory, you can use relative or absolute pathnames. Using absolute pathnames, you would type:
cwd >udd>SysAdmin
If your working directory is currently >udd>SysAdmin>Swenson, and you wish to change to the parent (Project) directory, you can use relative paths:
cwd <
To create a directory, use the "create_dir" or "cd" command. For example:
cd exciting_project
To list the contents of a directory, use the "ls" command. Note, however, that Multics, unlike most systems these days, will "ls" exactly what you ask it to. If you just type:
ls >udd>SysAdmin
it will dutifully show you:
`
ls >udd>SysAdmin
Directories = 1.
sma SysAdmin
sa
r 18:57 0.110 0
`
To list the contents of the >udd>SysAdmin directory, type:
ls >udd>SysAdmin>**
However, this is probably still not quite what you want, since typing that command will result in:
`
ls >udd>SysAdmin>**
Segs=0;Msfs=0;Dmfs=0;Dirs=15;Links=0.
r 18:58 0.225 1
`
This is because you didn't tell the "ls" command what you wanted to list, and it, by default, only shows you segments, and if there are none, gives you the totals of all the various "entry" types.
To see everything under the >udd>SysAdmin directory, use this:
`
ls >udd>SysAdmin>** -a
Directories = 4.
sma admin
a
sma library
lib
l
sma Repair
sma SA1
sa1
r 18:01 0.215 0
`
This shows you that under this directory, there only exist directories.
Each directory entry name (e.g. segments, directories, MSFs, and links) can have 1 or more names. The first name is typically called the "primary name" and the other names are called "addnames". In the example, above, you can see that the "admin" directory has an "addname" or "a" and the "library" directory has two addnames: "lib" and "l".
To add a new name to an entry, use the "add_name" or "an" command. For example:
`
cd foo
r 18:03 0.041 1
an foo bar
r 18:03 0.077 3
ls foo
Directories = 1.
sma foo
bar
r 18:03 0.065 0
`
When get a new process, either by logging in or executing the "new_proc" command, by default, Multics will look for and execute your start up script, called start_up.ec. The "ec" stands for "exec_com", which is the scripting language available on Multics. Process initialization looks for this script in your home directory. If it doesn't find one there, it looks in your project directory, and if it doesn't find one there looks in >system_control_1>start_up.ec.
If it finds a start_up.ec, it executes it, passing it two parameters. The first parameter is either "login" or "new_proc". While many start_up.ec scripts ignore their parameters, these can be used to differentiate between the two ways you can get a new process. The second parameter is either "interactive" or "absentee". Interactive processes are those attached to a terminal and initially created through a login. Absentee processes are background processes that you can schedule. You do not need to be logged in interactively in order to have absentee processes running on your behalf.
Unless you or someone else has created a start_up.ec for you in your home or project directory, the system will execute the start_up.ec found in >system_control_1>start_up.ec. The contents of this segment are shown below:
`
pr >sc1>start_up.ec
start_up.ec 03/22/16 1812.0 pst Tue
& ******************************************************
& * *
& * Copyright, (C) Honeywell Bull Inc., 1987 *
& * *
& * Copyright (c) 1972 by Massachusetts Institute of *
& * Technology and Honeywell Information Systems, Inc. *
& * *
& ******************************************************
&
&
& HISTORY COMMENTS:
& 1) change(87-08-12,GDixon), approve(88-08-15,MCR7969),
& audit(88-08-03,Lippard), install(88-08-29,MR12.2-1093):
& Change to call print_motd instead of using the print command to print
& the message of the day. (phx15921)
& END HISTORY COMMENTS
&
&
& start_up.ec -- default start_up for >sc1
& this exec com just prints the motd to duplicate the old behavior of
& process_overseer_.
&
& It is executed by all users (with standard process overseers) who
& lack start_up.ec in their homedir and project dir.
&
&command_line off
&goto &ec_name
&label start_up
&if [equal &1 login] &then print_motd
&quit
r 18:12 0.449 0
`
You will notice that this start_up.ec uses "&1" to access the first parameter ("login" or "new_proc"). In this case, it only prints the message of the day ("print_motd" or "pmotd") upon login, and not for new_proc.
The second thing you may notice is the contruction:
`
&goto &ec_name
`
Any exec_com can have multiple "addnames" on it. This &goto command will transfer control to the "&label" whose name is equal to the name used to invoke the exec_com. This allows you to group multiple exec_com scripts into one segment and branch to the correct one depending on which name was used to invoke it. Of course, to make this work, you must add names to the segment for each of these "entrypoints".
For info on exec_com syntax and functionality, type "help exec_com" or see the documentation on "exec_com" in the "Commands and Active Functions" manual, AG92.
Below, you will find another example of a start_up.ec.
`
&version 2
&trace &command off
&-
&- Enable abbreviations in commands
&-
abbrev
&-
&- Add >doc>privileged to your info search paths
&-
asp info >doc>privileged
&-
&- Make C compiler accessible/usable
&-
asr >sl3p>c_compiler>e
asp info >sl3p>c_compiler>info
&-
&- For interactive logins:
&-
&if [equal &2 interactive] &then &do
&-
&- Set terminal type;
&-
stty -ttp VT102_132C_50L
&-
&- invoke video system;
&-
wdc invoke
&-
&- and Turn on command line history editing and recall.
&-
ih attach
&-
&- On systems with several users registered:
&- - Accept interactive messages
&-
accept_messages
&-
&- - Check for mail/messages
&-
have_mail
&-
&end
&-
&quit
`
The comments in the above start_up.ec explain what the corresponding commands do. Note that this exec_com starts with "&version 2". This enables the "new" (version 2) functionality of exec_com. As you can guess, there was a more limited "version 1" before the "new" version. (Yes, I mean "new" in the 1980s). See the documentation on "exec_com" for details.
When you login, the command processor (command_processor_$command_processor_) evaluates command as you type them on your terminal. You can enable an alternate command processor, abbrev$abbrev_processor that expands abbreviations in your command lines before passing them to command_processor_$command_processor_. You enable "abbrevs" by typing the "abbrev" command, or, more practically, by putting the "abbrev" command in your start_up.ec.
To add an abbrev, you use a command like the following:
.ab cd format_line "You really don't want to type 'cd' do you?"
This defines an abbrev called "cd" that, when typed at the beginning of the line (".ab" rather than ".a") will expand to the command:
format_line "You really don't want to type 'cd' do you?"
format_line is a command and active function that will format a string (with substitutions) and display it on the terminal (or return it as a string when invoked as an active function).
To list your abbrevs, use the ".l" command:
To execute a command without expanding abbrevs, preface the command with ". " (that is, a "." followed by a SPACE).
For more information on abbrev, type "help abbrev"
You have multiple editors available to choose from on Multics. Here is a list of a few:
Emacs is, well, Emacs. If you don't know what Emacs is, or how to use it, you are one very sad individual. Of course, the Emacs that you probably know and love is a lot more feature rich than the one on Multics. But yes, Multics Emacs is written in MacLisp and runs quite well.
You invoke emacs with the "emacs" command, and exit it with the Control-x Control-c key binding. For help with emacs, type "help emacs" (outside of emacs). You can type Escape-x help <CR> inside emacs for some brief help and pointers to more documentation. Of course, you can also learn lots more about Emacs by reading the various Multics Emacs manuals.
Emacs works best when you have enabled the "video system". You do that with the "wdc invoke" command. You can only use the video system if your terminal type supports it. One that does is "VT102_132C_50L". As an example of setting your teminal type, enabling the video system, and enabling command line editing and recall, use these commands (or put them in your start_up.ec so that they are executed automatically when you login):
`
stty -ttp VT102_132C_50L
wdc invoke
ih attach
`
If for some reason you don't want to use the video system, and haven't set your terminal type to one that Emacs will support ("help stty"), then emacs will prompt you for a terminal type upon startup. Assuming you are connected to Multics via telnet, answer "vt102" if you haven't set up any better terminal types.
In this case, you may wish to have an abbrev to invoke emacs:
.ab emacs emacs -ttp vt102 -ll 132 -pl 50
This tells emacs to use the "vt102" terminal type and to set the line length to 132 characters and the page length to 50 characters.
The preferred method of invoking emacs, however, is with the video system enabled ("wdc invoke").
QEDX is a simple non-WYSIWYG editor. Do a "help qedx" for help or see the documentation on QEDX in the "Commands and Active Functions" manual, AG92.
As a simple example, to create a new file with the contents:
`
&version 2
&trace &command off
&print hello there
&quit
`
You could do the following:
`
qedx
a
&version 2
&trace &command off
&print hello there
&quit
f
w foo.ec
q
`
The "a" command puts you in append mode. The following lines up to the "\f" are the desired contents of the segment. The "\f" command ends input. The "w" command saves the contents of the edit buffer to a segment whose name is specified as the argument to the "w" command. And the "q" command quits qedx.
Other useful commands are:
This editor is like qedx. Do a "help edm" for details.
I'm not going to touch this with a 10-foot pole. Only crazy hackers use Teco. (By the way, the first Emacs i ever used was written in Teco. And you wrote customizations to Emacs in Teco. I learned Teco so that I could customize Emacs. Thank goodness Emacs was rewritten in MacLisp.
If you really want to use Teco, do a "help teco" or see the documentation on this editor in the manuals.
All the commands and active functions, as well as many (most/) of the subroutines are documented online in what are called "info segments". These are text files so you can read them into Emacs or display their contents with the "pr" command. However, a much more useful command is "help", which will look for an info segment of the specified name (e.g. "help abbrev") and prompt you to display the various parts of the documentation. Try it.
If you are trying to locate an info segment, but don't know its name, try the "list_help" or "lh" command. This will display the names of all the info segments whose names include the substring you provide as a parameter to "lh".
When you first login, the system responds with a "ready" message. This "ready" message looks like this, by default:
r 18:54 2.000 90
To find out how to customize it, type "help general_ready" or "help gr". You can also find more info with "lh ready".
When you get an error, a "condition" is signaled and a recursive command level is entered. The ready message shows this in the following way:
r 18:56 0.097 0 level 2
The number after "level" is the depth of the command levels. You can also get to a new command level, interrupting the executing program, by pressing the Control-c command. Doing so causes Multics to display:
`
QUIT
r 18:57 0.068 0 level 3
`
To throw away the current program execution (stack frames), you can use the "release" or "rl" command. To release all recursive command levels and return to level 1, you can type "rl -all".
If you have interrupted a program (with Control-C) and wish to resume it, use the "start" or "sr" command.
As an example of a signaled condition causing a recursive command level, consider the following PL/1 program:
`
pr foo.pl1
foo.pl1 03/22/16 1900.7 pst Tue
foo: procedure options(variable);
dcl a fixed bin;
dcl b fixed bin;
a = 10;
b = a/0;
end foo;
r 19:00 0.148 0
`
If you compile this program:
`
pl1 foo.pl1
PL/1 33e
r 19:01 0.272 13
`
and run it:
`
foo
Error: Attempt to divide by zero at >user_dir_dir>SysAdmin>Repair>foo|11 (line 7)
(while in operator divide_fx1)
system handler for error returns to command level
r 19:01 0.168 0 level 2
`
you will get a recursive command level.
If you try to "start" this command,
`
sr
Error: Attempt to divide by zero at >user_dir_dir>SysAdmin>Repair>foo|11 (line
c 7)
(while in operator divide_fx1)
system handler for error returns to command level
r 19:02 0.204 0 level 2
`
You will not be able to and will be returned to the current command level. To release this command level, do:
`
rl
r 19:02 0.022 0
`
If you do get a recursive command level due to an error that you don't think is your own fault and can't otherwise explain -- especially if you think it is due to an simulator error -- you can invoke the "probe" command, and within "probe", the "stack" ("sk") command to get a bit more info as to the cause of the error. See below:
`
foo
Error: Attempt to divide by zero at >user_dir_dir>SysAdmin>Repair>foo|11 (line
c 7)
(while in operator divide_fx1)
system handler for error returns to command level
r 14:57 0.250 0 level 2
probe
Condition zerodivide raised at line 7 of foo (level 4).
sk
11 command_processor_
10 release_stack
9 unclaimed_signal
8 wall
7 any_other.2
6 wall error
5 any_other.2
4 foo (line 7) zerodivide
3 command_processor_
2 listen_
1 initialize_process_
`
As you can see, the zerodivide condition was raised as a result of the code at line 7 in the "foo" executable, which was invoked from the command_processor_. You can exit out of "probe" with the "q" command or hunt around for more info.
You can also use the "trace_stack" ("ts") command to trace the stack after an exception. See below for example output:
`
ts
system handler for error returns to command level
Machine conditions not available.
234|5160 default_error_handler_$wall|2671 (bound_error_handlers_|2671)
Cannot get line number in default_error_handler_
2671 000622700100 tsx0 pr0|622 call_ext_out_desc
Argument list pointer: 234|5136
No arguments.
234|5060 initialize_process_$any_other.2|426 (bound_process_init_|426)
Cannot get line number in initialize_process_
426 000617700100 tsx0 pr0|617 call_ent_var
Argument list pointer: 234|5006
ARG 1: 234|4160 stack_4|4160
ARG 2: "zerodivide"
ARG 3: 77777|1 null pointer|1
ARG 4: 77777|1 null pointer|1
ARG 5: "0"b
234|4520 signal_$signal_|1467 (bound_library_1_|11205)
Cannot get line number in signal_
11205 000616700100 tsx0 pr0|616 call_ent_var_desc
Argument list pointer: 234|4246
Warning: arg 1 packed mismatch: 0 supplied, 1 expected.
ARG 1: "zerodivide"
ARG 2: 234|4160 stack_4|4160
ARG 3: 77777|1 null pointer|1
ARG 4: 77777|1 null pointer|1
234|4100 return_to_ring_0_|0
Bad argument pointer.
on "cleanup" call restart_fault|1
Attempt to divide by zero at >user_dir_dir>SysAdmin>Repair>foo|11 (line 7)
(while in operator divide_fx1) (zerodivide condition)
foo.pl1 (line 7): b = a/0;
11 001262700100 tsx0 pr0|1262 divide_fx1
Machine registers at time of fault
pr0 (ap) 234|3760 stack_4|3760
pr1 (ab) 234|3734 stack_4|3734
pr2 (bp) 374|17 foo|17
pr3 (bb) 234|3640 stack_4|3640
pr4 (lp) 247|54376 !BBBKKPFblfpMpH.area.linker|54376 (linkage|0 for
c foo)
pr5 (lb) 247|4052 !BBBKKPFblfpMpH.area.linker|4052 (internal stati
cc|0 for init_vol_header_)
pr6 (sp) 234|3640 stack_4|3640
pr7 (sb) 234|0 stack_4|0
x0 12 x1 0 x2 66 x3 26724
x4 21 x5 2 x6 0 x7 26362
a 000000000000 q 000050000000 e 0
Timer reg - 41477, Ring alarm reg - 0
SCU Data:
4210 400257050040 000000000035 400234000000 000000000000
026731400200 003776000000 000016507100 200000371502
Divide Check Fault (35)
By: 257|26731 pl1_operators_|6421 (bound_library_wired_|26731)
Referencing: 234|3776 stack_4|3776
On: cpu a (#0)
Indicators: zero, ^bar
APU Status: sd-on, pt-on, fap
Instructions:
4216 0 00016 5071 00 dvf pr0|16
4217 2 00000 3715 02 epp5 pr2|0,qu
Time stored: 03/23/16 1457.1 pst Wed (147262037442100574)
Ring: 4
234|3640 foo$foo|11 (line 7) in operator divide_fx1
foo.pl1 (line 7): b = a/0;
11 001262700100 tsx0 pr0|1262 divide_fx1
Argument list pointer: 234|3206
Command name: foo
No arguments.
234|2700 command_processor_$command_processor_|2101 (bound_multics_bce_|2101
c)
Cannot get line number in command_processor_
2101 000623700100 tsx0 pr0|623 call_ext_out
Argument list pointer: 234|2564
ARG 1: 234|2640 stack_4|2640
ARG 2: 4
ARG 3: 0
on "command_abort_" call command_processor_|1140 (bound_multics_bce_
c|1140)
234|2400 listen_$listen_|554 (bound_command_loop_|34522)
Cannot get line number in listen_
34522 000623700100 tsx0 pr0|623 call_ext_out
Argument list pointer: 234|2242
ARG 1: "exec_com >user_dir_dir>SysAdmin>Repair>start_up.ec new_proc
cinteractive"
on "cleanup" call listen_|271 (bound_command_loop_|34237)
234|2000 initialize_process_$initialize_process_|704 (bound_process_init_|70
c4)
Cannot get line number in initialize_process_
704 000616700100 tsx0 pr0|616 call_ent_var_desc
Argument list pointer: 234|0
No arguments.
on "any_other" call initialize_process_|411 (bound_process_init_|411
c)
End of trace.
r 14:58 2.000 4 level 2
`
Any information that you're willing to post to the relevant mailing list to help us find and fix simulator bugs would be greatly appreciated. Use the dps8m-users@lists.sourceforge.net mailing list to report such errors.
In order to queue a segment for printing, use the "enter_output_request" ("eor") command. For help on this command, type "help eor". Segments queued for printing will be printed when the printer becomes idle, as long as the printer daemon is running. After a cold boot of Multics, or when running the QuickStart, there is one printer daemon configured for the device "prta". However, unless you specifically start the daemon, no printer requests will be served. To start the printer daemon, you can use the Initializer command:
x io
This will send the appropriate commands to the IO.SysDaemon (prta) daemon to begin processing requests from the queue.
Note: the "old" way to queue a segment for printing was to use the "dprint" ("dp") command. While this command still works, it has been functionally replaced with the preferred "enter_output_request" command.
The DPS8M simulator supports the printer devices (e.g. prta) creating files on the host system, in the directory where you started the simulator (e.g. in the QuickStart_MR12.6f directory). The file will have a filename following the pattern: <device-name>.spool.<request-id>.<personid>.<projectid>.<tag>.<random-string>. For example:
prta.spool.10001.Repair.SysAdmin.a.TP02yP
The simulator doesn't actually print the file for you, it just creates it. You are free to "print" it any way you'd like. One option is to use the "enscript" program to convert the "lineprinter" output to a PDF, and then use your operating system facilities for printing the PDF.
You shut down Multics by entering commands on the operator console. First, get the attention of the Initializer process by typing the Esc key. The operator console should respond with:
M->
Then, log out all the daemons:
`
M-> logout * * *
Ready
M->
`
Press the Esc key to "give up the console" so that the Initializer process can logout all the daemons. If you don't press Esc, you'll have to wait a bit before the console times out.
You should see output similar to this:
`
CONSOLE: RELEASED
1603 as LOGOUT IO.SysDaemon.z dmn cord 0: 0 $0.02 (looc)
1603 as LOGOUT Backup.SysDaemon.z dmn bk 0: 0 $0.03 (looc)
1603 as LOGOUT IO.SysDaemon.z dmn prta 0: 0 $0.02 (looc)
1603 as LOGOUT Utility.SysDaemon.z dmn ut 0: 2 $1.82 (looc)
1603 as LOGOUT Volume_Dumper.Daemon.z dmn vinc 0: 0 $0.03 (looc)
`
Give the system a few seconds to log out all the daemons, and then shut it down (remember to type Esc to get the attention of the operator console):
`
M-> shut
1605 as act_ctl_: shutdown, 5 0.02 0.02 0.00 1.22 0:0:3 $1.91
1605.9 shutdown complete
bce (boot) 1605.9:
`
Multics is now shut done, however, you have not yet exited from the Bootload Command Environment (BCE) to the simulator. Press Esc again to get the operator console's attention and issue the "die" command, confirming with "y":
`
M-> die
Do you really wish bce to die? M-> y
BCE DIS causes CPU halt
simCycles = 6122989885622
cpuCycles = 491386437
Timer runout faults = 2332
Derail faults = 1
Lockup faults = 65
Connect faults = 1656
Illegal procedure faults = 5
Directed fault 0 faults = 584
Directed fault 1 faults = 6576
Access violation faults = 267
Fault tag 2 faults = 2301
Halt, IC: 000012 (000000000000)
sim>
`
You have been returned to the simulator's prompt. You may exit the simulator with:
`
sim> quit
Goodbye
$
`
You are now back at your terminal (shell) prompt.
One of the most useful features of MR12.6f, courtesy of Gary Dixon, is the new input_history (ih) command. This command, intended to be used with the video system, allows you to recall previously entered commands and input, search for previous input, and edit input using Emacs-like keybindings. For detailed documentation, while logged in, use the "help input_history" command.
To help you get started, perform the following steps:
Now, type a few commands at the command processor. Then, use Control-P to recall your previous input, and Control-N to move toward more recent input. Use Control-R to search backward in your input history for a string (to find a previous command).
Use Control-A to go to the beginning of a line, and Control-E to go the end of the line. Control-F moves forward a character and Control-B moves backward. Control-D deletes forward a character, and Escape-D deletes forward a word. Escape-F moves forward a word, and Escape-B moves backward a word. There are lots of other key bindings for editing lines -- see the input_history (ih) help file as well as the video system help ("help video_editing.gi").
In order to use the video system, you need to set your terminal type to one of the terminal types that supports the video system. If you are simulator user, any of the VT102 terminal types will work, but if you want a larger screen than 24 lines by 80 columns (the default), you should choose a terminal type such as VT102_132C_50L, which gives you a 50 line by 132 column, VT102-compatible terminal type. Many terminal simulators today support VT102 (or VT100) compatibility and, therefore, will work fine with this terminal type.
The Terminal Type Table (TTT) and the source file for this binary table, the TTF (>udd>SysAdmin>a>TTF.ttf) define the terminal types available to you on your system. If your system is a newly-installed MR12.6f system, you will have the VT102_132C_50L terminal type defined. If your system is running an older release, or was upgraded from an older release, you may have to merge the new VT102_132C_50L terminal type into your TTF, rebuild the TTF (cv_ttf TTF) and install the new TTT (install TTF.ttt) in order to use it.
If you look through the TTF, any entries that define a "video_info" section are compatible with the video system. Choose one of these terminal types (or VT102_132C_50L if you have it). Set your terminal type thus:
stty -ttp vt102_132c_50l
Now that your terminal type is set, you can invoke the video system with:
wdc invoke
There are two mechanism Multics uses to find executables or other segments based on rules you can defined (and system defaults): Search Rules and Search Paths
Search rules are a list of directories that are searched to find a command, subroutine, or data item referenced symbolically. Each directory is examined, in order, to find the given external name. Search rules are not used when a segment is addressed by its pathname, which explicitly specifies the directory containing the segment.
Default search rules are defined by the system administrator and these can be overridden by users with the add_search_rules (asr), delete_search_rules (dsr), and set_search_rules (ssr) commands. You can display your search rules with the print_search_rules (psr) command.
See the help files for these commands for more details and consult the documentation for greater depth. Special search rules names include initiated_segments, referencing_dir, working_dir, process_dir, and home_dir. Read about these in the help segment for add_search_rules.
While search rules are used to find executable segments, search paths are used to find other types of segments, including info segments, include files, compose macros, exec_coms, forums, etc. In fact the set of search paths is extensible to new kinds of segment.
Search paths are manipulated with the following commands: add_search_paths (asp), delete_search_paths (dsp), print_search_paths (psp), set_search_paths (ssp), and where_search_paths (wsp). See the help files for these commands for more info or consult the Multics documentation set.
As an example, when you invoke an exec_com with a command such as "ec foo", Multics uses the exec_com search paths to locate your exec_com. To determine your current exec_com search path, you could use this command:
`
psp exec_com
exec_com
-working_dir
>user_dir_dir>SysAdmin>Swenson>exec_com
r 08:45 0.068 0
`
This means that Multics will first look in your working directory and then in >udd>SysAdmin>Swenson>exec_com.
Whether you are using the video system (do "help video_editing.gi" for more help on the video system) or not, Multics, if it knows about your terminal type and believes that it is a video terminal, will perform "more processing'. When output reaches the bottom of the screen, it presents a prompt (EOP iwhen not in the video system, and "More? (RETURN for more; DEL to discard output.)", when in the video system), and waits for you to hit Return or Enter to display the next page.
More processing is controlled by a TTY mode called "more". You can disable more processing temporarily with "stty -modes ^more" and turn it back on with "stty -modes more". The terminal type you have chosen will define the number of rows and columns, and the number of rows determines when more processing occurs. If you don't like where Multics is paginating, change your TTY type. To find out your current TTY type, do this:
`
stty -pr
Type: VT102_132C_50L
Modes: more_mode=scroll,more,ll=131,pl=49,^vertsp,can,erkl,esc,^rawo,^red,^ctl_char,^edited
r 08:52 0.057 0
`
You can see from the above example, that the page length (number of rows) is represented as "pl=49", meaning there are 49 rows (1 row is reserved for the more prompt, so this is a 50-line display). You can set your terminal type with the "stty -ttp xxx" command. For more help, see the info segment on the set_tty (stty) and print_terminal_types (ptt) commands, and or get general info on TTY modes by typing "help tty_modes.gi".
If you would like to change the time zone for just your own process (as opposed to the whole Multics system), the set_time_default (std) command will let you do this. To set your local time zone to "est" do the following:
`
set_time_default zone est
`
In order to read a card deck, you need to have a card reader daemon logged in. By default, the rdra card daemon has been setup, but is not running. In order to get it running, issue the following command on the operator console:
`
x read_cards
`
You can also use:
`
x rc
`
You should get output similar to this:
`
clean_card_pool -age 7
All entries older than 7 days have been removed.
sc_command login IO SysDaemon rdra
pause 10
1225 as LOGIN IO.SysDaemon dmn rdra (create)
1225 rdra Enter command: coordinator, driver, or logout:
--> rdra
sc_command r rdra driver
sc_command r rdra rdra
sc_command r rdra read_cards
Ready
M->
CONSOLE: RELEASED
1225.1 RCP: Attached rdra for IO.SysDaemon.z
1225 rdra
1225 rdra IO Daemon Driver Version: 5.7
1225 rdra
1225 rdra Enter command or device/request_type:
1225 cord New driver for device rdra, request type dummy (series = 50000)
1225 rdra
1225 rdra rdra driver ready for station reader at 07/11/24 1225.2 pdt Thu
`
Now, prepare a card deck and put it in the "rdra" subdirectory dps8 simulator directory, or, if you have defined a different directory for your cards, place it in the "rdra" subdirectory of that configured directory.
To specify a directory for your cards, you can put something like this in your dps8 ini directory:
`
set rdr path=/home/eswenson/GoldHillMultics/cards
set rdr debug
set rdr0 watch
`
None of those is required, except, perhaps the "set rdr0 watch" command.
In any case, once dps8 notices that you have a card deck in your "rdra" subdirectory, you will see something like this on the console:
`
1225 rdra
1225 rdra Card input started.
1225 rdra rdra: ***** Device Attention.
1225 rdra ***** Hopper empty or Stacker full.
1225 rdra
1226 rdra *Begin deck*
1226 rdra Reading test.txt.0 (mcc) for Swenson.SysAdmin.
1226 rdra *Successful read*
1226 rdra rdra: ***** Device Attention.
1226 rdra ***** Hopper empty or Stacker full.
1226 rdra
`
This shows that cards were read and made available to Swenson.SysAdmin. Your user process should have received a message such as this:
`
42) IO.SysDaemon (reader) 07/11/24 1226.4 pdt Thu:
Successful read of card deck: test.txt
`
In order to actually "get" the read cards, you have to issue the copy_cards command (in your normal user session):
`
copy_cards test.txt
1 card decks copied.
GHM 12:28 0.146 0 level 2 Swenson
`
Now you should see your card deck (test.txt, in this case) in your home directory.
`
ls test.txt
Segments = 1, Lengths = 1.
rew 1 test.txt
GHM 12:38 0.056 0 level 2 Swenson
`
In my case, the contents of this segment is:
`
pr test.txt
test.txt 07/11/24 1228.9 pdt Thu
This is a test of card reading.
This is a test of card reading.
This is a test of card reading.
GHM 12:28 0.046 0 level 2 Swenson
`
Now, the card deck file (in my case, "sdeck.test.txt"), that I created on the host and placed in the "rdra" subdirectory of the appropriate directory looked like this:
`
++data test.txt Swenson SysAdmin
++password <redacted>
++format mcc noaddnl notrim
++control overwrite
++input
This is a test of card reading.
This is a test of card reading.
This is a test of card reading.
`
Note that is a "data" card. It is intended to simply be read into a segment on Multics. The actual contents begins below the ++input card.
There are other kinds of card decks that can be read too. For example, an RJE deck. One of these might look like this and be called "sdeck.rje.1":
`
++RJE foo Swenson SysAdmin
++PASSWORD <redacted>
++INPUT
who
`
This deck, if read in, will cause an absentee job to be create with the contents after the ++input as the body. Placing this card in your "rdra" directory should provoke this response on the console:
`
1243 rdra *Begin deck*
1243 rdra Reading foo.0.absin (mcc) for Swenson.SysAdmin.
1243 rdra *Successful read*
1243 rdra rdra: ***** Device Attention.
1243 rdra ***** Hopper empty or Stacker full.
1243 rdra
1243 as LOGIN Swenson.SysAdmin Q 3 abs1 [foo.0] (create)
1243 as LOGOUT Swenson.SysAdmin.p Q 3 abs1 0: 1 $0.06 (logo)
1243 prta Request 10492 printer q3: >user_dir_dir>SysAdmin>Swenson>foo.0.absout
1243 prta from Swenson.SysAdmin.p
1243 prta Charge for request 10492: $0.03 (16 lines, 1 pages)
1243 prta prta driver: No requests, driver is idle.
`
It shows that the card deck was read in and that an absentee job was logged in, run, and logged out. It shows that the output from the absentee job was sent to the printer (prta).
You would have received a message such as this in your user process:
`
From IO.SysDaemon (reader) 07/11/24 1243.0 pdt Thu:
RJE job: "foo", queued for absentee.
`
The .absin segment created in your home directory will have been deleted, but there should be an .absout segment. In the case of the RJE job referenced above, it should look something like this:
`
ls **.absout
Segments = 1, Lengths = 1.
r w 1 foo.0.absout
GHM 12:46 0.046 0 level 2 Swenson
pr foo.0.absout
foo.0.absout 07/11/24 1246.2 pdt Thu
Absentee user Swenson SysAdmin logged in: 07/11/24 1243.0 pdt Thu, request_id: 240711194301.771460
GHM 12:43 0.780 0 Swenson
set_epilogue_command "dp -dl -rqt [rje_args prt_rqt] [user absout]";rdn
GHM 12:43 0.069 0 Swenson
who
Multics MR12.9a, load 14.0/90.0; 14 users, 2 interactive, 11 daemons.
Absentee users 1/3
Swenson.SysAdmin
Green.Multics
Swenson.SysAdmin*
GHM 12:43 0.026 0 Swenson
logout
Absentee user Swenson SysAdmin logged out 07/11/24 1243.0 pdt Thu
CPU usage 1 sec, memory usage 0.0 units
1 request signalled, 0 already in printer queue 3
GHM 12:46 0.085 0 level 2 Swenson
<nowki>
As you can see, the "who" command was executed and the output written to the .absout segment. Further, you can see, from the absentee epilog command that was created:
<nowiki>
set_epilogue_command "dp -dl -rqt [rje_args prt_rqt] [user absout]";rdn
`
that the .absout segment was sent to to the printer.
Decks are submitted by copying the deck file into the queue directory (see Card Reader configuration to determine where the reader directory is located).
There are three card formats recognized by the simulator: 'card', 'stream' and '7 punch'.
In 'card' format, each line of text is treated as a 80 column card image. Newlines in the file are treated as card separators. Lines longer the 80 characters are silently extended to the next card image.
In 'stream' format, each byte of input is read and translated to MCC punch codes grouped into collections of 80 columns. No newline processing is done by the simulator.
In '7 punch' format, after the '++INPUT' card the input is treated as a bit stream and is intended to pass binary files (in 7 punch format) to '++DATA' decks for copying the file to a Multics segment.
The deck format is determined by the prefix of the filename being submitted:
`
Card Format: cdeck.*
Stream Format: sdeck.*
7 Punch Format: 7deck.*
`
Any file in the card reader directory that doesn't start with one of these prefixes will be ignored (other than a file named 'discard', see restarting the card reader below).
Note that the simulator "peeks" at the cards as it needs to know when to start using a specific encoding. The simulator always starts by translating the cards into MCC punch codes for the job control cards (those that start with a "++"). When it detects a "++input" card, it will switch to processing the rest of the input based on the deck format as specified by the filename prefixes given above.
If the card reader gets stuck due to an error in a deck, use the following process to clear and reset it:
1) On the host system, create an empty file in the card reader directory named "discard". On Linux the simplest way is just "touch discard". 2) On the Multics console:
`
r rdra reinit
r rdra read_cards
`
(replaced rdra with the correct card reader name if you have more than one card reader configured)
The above should close out the card reader file in the simulator and restart the card reader in Multics.
When working with card decks, it is important to understand how Multics is going to process them. The "Multics Programmer's Reference Manual" (AG91-04A) describes what you need to know in pages 5-50 to 5-60 on "Bulk Input and Output" as well as Appendix C: "Punched-Card Input Output and Returned Output Control".
Some simple examples follow but reference AG91-04A for complete details. Other than the deck format prefix above, the rest of this information does not involve the simulator, only Multics.
It's important to note that, when dealing with card decks, you are using a simulated media that is limited to a maximum of 80 characters per line. Having lines longer than this can cause unexpected behavior and will likely not result in what you want to happen.
The '++FORMAT' card should read '++format mcc addnl trim'. This tells the card reader processor to trim trailing blanks and add newlines to each card image.
This example loads a data file into Multics:
`
++data bootload_1.alm Anthony SysEng
++password XXX
++format mcc addnl trim
++control overwrite
++input
[contents of file]
`
Things to note:
- Since card input gets translated into lower case, there needs to be a method of designating upper case letters because Multics is case-sensitive and Person IDs and Project IDs will typically have mixed-case names. Therefore, prefixing a letter with a backslash (\) will cause that character to be translated as upper case.
- The ++format card above will tell Multics to trim trailing blanks and add newlines to each card image. The "mcc" tells it that the cards are punched with MCC codes (this is done by the simulator when using cdeck or sdeck formats). You always want to include a ++format card so you know how Multics will process your deck (even though it is optional).
This example executes an absentee job:
`
++rje test.absin Anthony SysEng
++password XXX
++format mcc addnl trim
++input
ccd bootload_1.alm
alm -list bootload_1
`
Things to note:
This deck will log in as Anthony.SysEng and execute the two commands after the ++input card. When done, a print job containing the results of executing these commands will be queued.
This example is the same as the first cdeck example except formatted to use stream format:
`
++data bootload_1.alm Anthony SysEng
++password XXX
++format mcc noaddnl notrim
++control overwrite
++input
[contents of file]
`
Things to note:
- The ++format card specifics not to add newlines for each card and not to trim trailing spaces.
- The ++control card specifies overwrite which will truncate an existing file with the same name if it already exists.
- With this example and the one for cdeck format, there is no significant reason to choose cdeck or sdeck format. Just pick one and use the correct ++format card.
7 punch format is used when you need to transfer a binary file. The simulator will just read raw bytes after the ++input card and transfer them to Multics. Using Multics, you can create a 7 punch output deck on the card punch and use the punutil utility to extract just the binary cards from the punched deck. The resulting file can be loaded by prefixing it with:
`
++data bound_segment_ Anthony SysEng
++password XXX
++format viipunch noaddnl notrim
++control overwrite
++input
[7 punch contents]
`
Things to note:
Suppose you want to dump elements of the pds as a structure using rzd. The pds segment is an object segment with named entry points created by create_data_segment (cds) compiler. So using the resultant object segment in >ldd>h>o>pds, you could get a list of those entry point names using print_link_info (pli) command. But since you know nothing about the data type stored at each entry point, you don’t know how much data to display at that entry point, or how to format it for display.
Instead, the following process can be used.
Extract source for the segment using library_fetch (lf): lf pds.cds
Rename that extracted segment to have a pl1 suffix: rn pds.cds pds.pl1
Compile with -table: pl1 -tb pds
Just for clarification, add a name to distinguish this intermediate object from the real pds object: an pds pds_with_table
Examine the pds.cds to learn name of the structure which declares the data items of interest. For pds.cds, the structure is handily named: pds
Use ring_zero_dump (rzd) to display all (or selected) elements of the pds segment.
rzd pds -as pds.access_name -in pds_with_table
000000
access_name @ 545|3162
, user = "GDixon" || (26)" "
, project = "Multics" || (25)" "
, tag = "a\000\000\000" || (28)" "
rzd pds -as pds -in pds_with_table -lg
000000
pds @ 544|0
page_fault_data @ 544|0
prs (0) = 41|21766 >sl1>bound_library_wired_
prs (1) = 230|720 (Invalid segment number)
prs (2) = 130|107345 bound_file_system (ring 0)
prs (3) = 544|0 [pd]>!BBBKbZhNLnhKQW.temp.0544
prs (4) = 16|6450 as_linkage (ring 0)
prs (5) = 71|0 [Inzr PD]>pds
prs (6) = 230|220 (Invalid segment number)
prs (7) = 544|0 [pd]>!BBBKbZhNLnhKQW.temp.0544
regs @ 544|20
x (0) = "011317"b3
x (1) = "000006"b3
x (2) = "000416"b3
x (3) = "004735"b3
x (4) = "000000"b3
x (5) = "003357"b3
x (6) = "000015"b3
x (7) = "000500"b3
a = "000000000000"b3
q = "000000040000"b3
e = "00"b4
t = "000043564"b3
ralr = "0"b3
scu (0) = "000130050201"b3
scu (1) = "000000000043"b3
scu (2) = "400544000100"b3
scu (3) = "000000576000"b3
scu (4) = "107555000240"b3
scu (5) = "000000000000"b3
scu (6) and scu (7) = "000140100540"b3
mask = "031460000014631460000003"b3
ips_temp = "000000000000"b3
errcode = 0
fim_temp @ 544|44
unique_index = "000000"b3
resignal = "0"b
fcode = "00000000000000000"b
fault_reg = "000000000000"b3
cpu_type = 1
ext_fault_reg = "00000"b3
fault_time = "160372524543062071"b3
eis_info (0) = "000400000000"b3
eis_info (1) through eis_info (7) = "000000000000"b3
fim_data @ 544|60
prs (0) = 260|21766 pl1_operators_$operator_table
prs (1) = 546|0 [pd]>!BBBKbZhNLnhfzm.temp.0546
prs (2) = 576|1536 (Invalid segment number)
prs (3) = 573|0 [pd]>!BBBKbZhNPbfQQQ.temp.0573
prs (4) = 247|244004 [pd]>!BBBKbZhKMDlzbG.area.linker
prs (5) = 546|0 [pd]>!BBBKbZhNLnhfzm.temp.0546
prs (6) = 234|30040 [pd]>stack_4
prs (7) = 552|0 [pd]>!BBBKbZhNMPqGWl.temp.0552
regs @ 544|100
x (0) = "000000"b3
x (1) = "000132"b3
x (2) = "000001"b3
x (3) = "000004"b3
x (4) and x (5) = "000001"b3
x (6) = "000015"b3
x (7) = "001556"b3
a = "000000000001"b3
q = "000000036304"b3
e = "00"b4
t = "000073502"b3
ralr = "0"b3
scu (0) = "400437050405"b3
scu (1) = "000000000041"b3
scu (2) = "400576000000"b3
scu (3) = "000000352000"b3
scu (4) = "436640002240"b3
scu (5) = "010000000000"b3
scu (6) = "000140100540"b3
scu (7) = "300000000006"b3
mask = "000000000000000000000000"b3
ips_temp = "000000000000"b3
errcode = 0
fim_temp @ 544|124
unique_index = "000000"b3
resignal = "0"b
fcode = "00000000000000000"b
fault_reg = "000000000000"b3
cpu_type = 1
ext_fault_reg = "00000"b3
fault_time = "160372524273434420"b3
eis_info (0) = "000400031210"b3
eis_info (1) through eis_info (7) = "000000000000"b3
signal_data @ 544|140
prs (0) = 234|66510 [pd]>stack_4
prs (1) = 67|230 [Inzr PD]>kst_seg
prs (2) = 454|207[2] >sss>dm_gate_
prs (3) = 67|0 [Inzr PD]>kst_seg
prs (4) and prs (5) = 335|12542[2] [pd]>!BBBKbZhKMFJfbD.area.linker
prs (6) = 232|2000[2] [pd]>stack_2
prs (7) = 232|0[2] [pd]>stack_2
regs @ 544|160
x (0) = "006352"b3
x (1) = "000006"b3
x (2) = "001303"b3
x (3) = "000460"b3
x (4) and x (5) = "000000"b3
x (6) = "000017"b3
x (7) = "000001"b3
a = "000454000002"b3
q = "000207000000"b3
e = "00"b4
t = "000007706"b3
ralr = "0"b3
scu (0) = "200454250011"b3
scu (1) = "000000000061"b3
scu (2) = "200335000000"b3
scu (3) = "000031000000"b3
scu (4) = "001304000200"b3
scu (5) = "013010000000"b3
scu (6) = "013010352020"b3
scu (7) = "700036670120"b3
mask = "000000000000000000000000"b3
ips_temp = "000000000000"b3
errcode = 0
fim_temp @ 544|204
unique_index = "000031"b3
resignal = "0"b
fcode = "00000000000011000"b
fault_reg = "000000000000"b3
cpu_type = 1
ext_fault_reg = "00000"b3
fault_time = "160372502335557206"b3
eis_info (0) = "000400000011"b3
eis_info (1) through eis_info (7) = "000000000000"b3
history_reg_data (1) through history_reg_data (64) = 0
process_group_id = "GDixon.Multics.a "
cpu_time = 3957875251161000 2026-06-02 10:47:31.161000 pdt
virtual_delta = 1442649
virtual_time_at_eligibility = 17628087
temp_1 = 2355706864287940083712
temp_2 = 0
time_1 = 3957875270247481 2026-06-02 10:47:50.247481 pdt
time_v_temp = 169
fim_v_temp = 18965106
fim_v_delta = 1437233
save_history_regs = "0"b
hregs_saved = "0"b
last_sp = 230|2660 (Invalid segment number)
apt_ptr = 112|5500 tc_data (ring 0)
arg_1 = 42181121891
arg_2 = 498660428176290742277
arg_3 = -1770797358843047182336
arg_4 = 0
access_authorization @ 544|470
categories = "000000000000"b3
level = 0
privileges @ 544|471(18)
ipc = "0"b
dir = "0"b
seg = "0"b
soos = "0"b
ring1 = "0"b
rcp = "0"b
comm = "0"b
base_addr_reg = "000000"b3
alarm_ring = 0
pxss_args_invalid = "003254000200"b3
processid = "0"b3
process_id = "005500724435"b3
vtime_count = -1
pstep = "0"b3
dstep = "071260"b3
wakeup_flag = "777777777776"b3
pc_call = "000000000001"b3
audit_flags = "000000000000"b3
quota_inhib = 0
covert_event_count = -256
page_waits = 1415
number_of_pages_in_use = 2
post_purged = 0
connect_pending = "0"b
segment_faults = 346
bounds_faults = 47
vtoc_reads = 123
vtoc_writes = 93
mc_trace_seg = 0
mc_trace_sw = "00"b
stack_0_sdwp = 0|460 dseg (ring 0)
stack_0_ptr = 230|0 (Invalid segment number)
tc_argp = 230|476 (Invalid segment number)
tc_mask = "031460000014631460000003"b3
exp_undfl_rest = "00"b
exp_ovfl_rest = "00"b
eovfl_value = "376777777777777777777777"b3
hex_eovfl_value = "376777777777777777777777"b3
cpar_err_data = "000000000000000000000000"b3
cpar_mem_data = "000000000000000000000000"b3
cpar_info = "000000000000"b3
hfp_exponent_enabled = "0"b
pre_empt_poll_return = 0(0) [invalid]
block_lock_count = 0
throttle_segment_state_changes = "0"b
first_covert_event_time =
3957871723948817 2026-06-02 09:48:43.948817 pdt
trace (1) = 158334976
trace (2) = 3957875270247531 2026-06-02 10:47:50.247531 pdt
trace (3) = 319201969438720
trace (4) = 8142508126285856768
trace (5) = 5044031588023664642
trace (6) = 4294967296
trace (7) = 5062045986533146625
trace (8) = 4294967296
trace (9) = 5368709153
trace (10) = 4294967297
trace (11) = 5080060385042628611
trace (12) = 4295032831
trace (13) = 3639757052382806041
trace (14) = 3640010557458743302
trace (15) = 3136113931530010628
trace (16) = 3639896758005268482
trace (17) = 3512865851395014660
trace (18) = 3639996676124442635
trace (19) = 3224588264962785284
trace (20) = 3639991178566303784
trace (21) = 3136072150088155140
trace (22) = 3639879371977654290
trace (23) = 3224588402401738755
trace (24) = 3639817868045975579
trace (25) = 3478007553223294980
trace (26) = 3640018941234905096
trace (27) = 3171017515836899339
trace (28) = 3639850097480564789
trace (29) = 3478566586166542365
trace (30) = 3640013649835196422
trace (31) = 3171016828642131971
trace (32) = 4295032831
trace (33) = 25497073352725
trace (34) = 25498147094535
trace (35) = 6683821651773095967
trace (36) = 6683825842587435009
trace (37) = 3135277409339703300
trace (38) = 6683831065267666945
trace (39) = 3135278440131854340
trace (40) = 6683973177145556997
trace (41) = 3135561358217576451
trace (42) = 6683918613881028611
trace (43) = 3512809020387753990
trace (44) = 6683920263148470285
trace (45) = 3136113931530010627
trace (46) = 6683929677716783105
trace (47) = 3136112076104138755
trace (48) = 6683935725030735875
trace (49) = 3136196532341047299
trace (50) = 6683935999908642818
trace (51) = 3494796752182050820
trace (52) = 6683959364530733061
trace (53) = 4575711171566370820
trace (54) = 4575933959036207123
trace (55) = 3224578712955518980
trace (56) = 202949017493379088478
trace (57) = 4295032831
trace (58) = 3638930357077671956
trace (59) = 3638978253479215112
trace (60) = 3512809020387753994
trace (61) = 3638986843413807150
trace (62) = 3135465013511192584
trace (63) = 4294967312
trace (64) = 5044031588023664643
trace (65) = 4294967296
trace (66) = 5062045986533146627
trace (67) = 4294967296
trace (68) = 5368709177
trace (69) = 4294967297
trace (70) = 5080060385042628611
trace (71) = 202950231354216218700
trace (72) = 202949470698271146184
trace (73) = 202949470698287923206
trace (74) = 330939621463397105672
trace (75) = 330889804790565896230
trace (76) = 25565792829516
trace (77) = 25566866571275
trace (78) = 330892777870007468175
trace (79) = 330889483733170716830
trace (80) = 331030247609804587265
trace (81) = 331031307539014353095
trace (82) = 331030247609804652701
trace (83) = 330892777870007664770
trace (84) = 330892777870007730226
trace (85) = 330892777870007795757
trace (86) = 330892777870007861297
trace (87) = 330892777870007926832
trace (88) = 24470576169008
trace (89) = 24471649910800
trace (90) = 24466281201664
trace (91) = 24467354943494
trace (92) = 330892777870007992321
trace (93) = 330891053835791433952
trace (94) = 330890552458489233566
trace (95) = 330891053835791564983
trace (96) = 330892777870008057891
trace (97) = 25634512306378
trace (98) = 25635586048008
trace (99) = 25703231783118
trace (100) = 25704305524744
trace (101) = 330888714075031863348
trace (102) = 25771951259820
trace (103) = 25773025001479
trace (104) = 25840670736563
trace (105) = 25841744478218
trace (106) = 330888714075031928924
trace (107) = 330892777870008254563
trace (108) = 330888714075032060198
trace (109) = 330892777870008385583
trace (110) = 330888714075032191023
trace (111) = 330892777870008516652
trace (112) = 330888714075032322221
trace (113) = 25909390213328
trace (114) = 25910463954951
trace (115) = 331031307539015401511
trace (116) = 330892777870008713294
trace (117) = 26252987596961
trace (118) = 26254061338631
trace (119) = 330892777870008778848
trace (120) = 330888714075032584351
trace (121) = 330892777870008909900
trace (122) = 330888714075032715323
trace (123) = 330888714075047723043
trace (124) = 330888714075032780824
trace (125) = 330889417762474623034
trace (126) = 330892777870009172024
trace (127) = 330888714075032977478
trace (128) = 330890552458489431314
trace (129) = 330930183255586242679
trace (130) = 330892777870009369816
trace (131) = 330892777870009434322
trace (132) = 330892777870009499844
trace (133) = 330888714075033305328
trace (134) = 330889417762475147516
trace (135) = 330888714075047854115
trace (136) = 330892777870009696514
trace (137) = 330888714075047919643
trace (138) = 330892777870009762033
trace (139) = 330892452414582423711
trace (140) = 330897646507497619816
trace (141) = 330897646507497685426
trace (142) = 330890622827233870336
trace (143) = 4665973928307458923
trace (144) = 3224589227035459588
trace (145) = 96852777667043459121
trace (146) = 330946178950845432004
trace (147) = 330946192145253400577
trace (148) = 330946645143708499971
trace (149) = 330946662735928098817
trace (150) = 25290914922524
trace (151) = 25291988664325
trace (152) = 331532289017294880769
trace (153) = 330939999695782543368
trace (154) = 330992683894955835403
trace (155) = 330991601975497392215
trace (156) = 331562318879074091079
trace (157) = 330995533828695392267
trace (158) = 330991601975497457693
trace (159) = 331562318879074156563
trace (160) = 330991065413823168608
trace (161) = 330995520634555924552
trace (162) = 331562318879074222094
trace (163) = 331527279642536837147
trace (164) = 26321707073550
trace (165) = 26322780815372
trace (166) = 331422632523885182977
trace (167) = 331356516690248204787
trace (168) = 331534316516736566638
trace (169) = 331534316516736630786
trace (170) = 331534316516736696322
trace (171) = 25295209889794
trace (172) = 25296283631624
trace (173) = 25290914922496
trace (174) = 25291988664325
trace (175) = 331534316516736761871
trace (176) = 4295032831
trace (177) = 3638930357077671943
trace (178) = 3639063396910891107
trace (179) = 3206582044071034884
trace (180) = 3206585478971129857
trace (181) = 3135277821656563716
trace (182) = 3206585960007467008
trace (183) = 3135278233973424131
trace (184) = 3206590014456594432
trace (185) = 3135278440131854339
trace (186) = 3206591457565605888
trace (187) = 3135553455477751812
trace (188) = 3206602109084499970
trace (189) = 3171027067844165635
trace (190) = 3206612279567056897
trace (191) = 3134958894565031939
trace (192) = 4294967300
trace (193) = 5044031588023664641
trace (194) = 4294967296
trace (195) = 5062045986533146625
trace (196) = 4294967296
trace (197) = 5368709165
trace (198) = 4294967297
trace (199) = 5080060385042628613
trace (200) = 237713424518912427106
trace (201) = 3206621762854846564
trace (202) = 3494817299305594884
trace (203) = 4295032831
trace (204) = 5172507941181325316
trace (205) = 202949470698271146070
trace (206) = 202949470698287923202
trace (207) = 330939621463397105666
trace (208) = 330889804790565896201
trace (209) = 25290914922531
trace (210) = 25291988664326
trace (211) = 330892777870007468108
trace (212) = 330889483733170716764
trace (213) = 331030247609804587170
trace (214) = 331031307539014353006
trace (215) = 331030247609804652647
trace (216) = 330892777870007664769
trace (217) = 330892777870007730231
trace (218) = 330892777870007795755
trace (219) = 330892777870007861296
trace (220) = 330892777870007926831
trace (221) = 330892777870007992365
trace (222) = 330891053835791433922
trace (223) = 330890552458489233576
trace (224) = 330891053835791564984
trace (225) = 330892777870008057888
trace (226) = 25565792829632
trace (227) = 25566866571274
trace (228) = 25634512306379
trace (229) = 25635586048007
trace (230) = 330888714075031863343
trace (231) = 25703231783075
trace (232) = 25704305524743
trace (233) = 25771951259813
trace (234) = 25773025001479
trace (235) = 330888714075031928922
trace (236) = 330892777870008254557
trace (237) = 330888714075032060194
trace (238) = 330892777870008385582
trace (239) = 330888714075032191022
trace (240) = 330892777870008516651
trace (241) = 330888714075032322214
trace (242) = 25840670736574
trace (243) = 25841744478215
trace (244) = 331031307539015401510
trace (245) = 330892777870008713290
trace (246) = 25909390213277
trace (247) = 25910463954951
trace (248) = 330892777870008778847
trace (249) = 330888714075032584335
trace (250) = 330892777870008909878
trace (251) = 330888714075032715314
trace (252) = 330888714075047723040
trace (253) = 330888714075032780821
trace (254) = 330889417762474623031
trace (255) = 330892777870009172019
trace (256) = 330888714075032977473
trace (257) = 330890552458489431269
trace (258) = 330930183255586242676
trace (259) = 330892777870009369756
trace (260) = 330892777870009434316
trace (261) = 330892777870009499837
trace (262) = 330888714075033305323
trace (263) = 330889417762475147513
trace (264) = 330888714075047854114
trace (265) = 330892777870009696507
trace (266) = 330888714075047919643
trace (267) = 330892777870009762030
trace (268) = 330892452414582423716
trace (269) = 330897646507497619822
trace (270) = 330897646507497685434
trace (271) = 330890622827233870345
trace (272) = 330946178950845432922
trace (273) = 330946192145253400577
trace (274) = 330946645143708499971
trace (275) = 330946662735928098817
trace (276) = 26252987596828
trace (277) = 26254061338634
trace (278) = 331532289017529761793
trace (279) = 330939999695782543368
trace (280) = 330992683894955835402
trace (281) = 330991601975497392214
trace (282) = 331562318879074091076
trace (283) = 330995533828695392267
trace (284) = 330991601975497457693
trace (285) = 331562318879074156563
trace (286) = 330991065413823168635
trace (287) = 330995520634555924559
trace (288) = 331562318879074222095
trace (289) = 331527279642536837146
trace (290) = 331422632523885182990
trace (291) = 331356516690248204793
trace (292) = 331534316516971447642
trace (293) = 331534316516971511810
trace (294) = 331534316516971577346
trace (295) = 26257282564098
trace (296) = 26258356305928
trace (297) = 26252987596800
trace (298) = 26254061338630
trace (299) = 331534316516971642882
trace (300) = 4295032831
trace (301) = 6683858897729486869
trace (302) = 202950231354216349786
trace (303) = 4295032831
trace (304) = 4721095333499633669
trace (305) = 202949470698271146011
trace (306) = 101618575839458230344
timer_time_out = 0
timer_channel = 0
term_channel = 2193556272464961471504
term_proc = "003000777777"b3
pl1_machine = 1
validation_level = 4
condition_name @ 544|1735
len = 19
chars = "not_in_read_bracket\000\000\000\000\000\000\000\000\000\000\000\000"
ips_mask (0) through ips_mask (3) =
"00000000000000000000000000000000000"b
ips_mask (4) = "11111111111000000000000000000000000"b
ips_mask (5) through ips_mask (7) =
"11111111111111111111111111111111111"b
auto_mask (0) through auto_mask (3) = "000000000000"b3
auto_mask (4) = "300000000000"b3
auto_mask (5) through auto_mask (7) = "000000000000"b3
ring_alarm_val (0) through ring_alarm_val (7) = 0
lock_id = "603521324664"b3
mc_trace_buf = null
pathname_am @ 544|2000
fp = 71|2354 [Inzr PD]>pds
bp = 71|2640 [Inzr PD]>pds
sets = 139
gets = 1631
hits = 1399
getps = 330
hitps = 218
rejects = 0
clears = 10
cleared = 3
flushes = 4
flushed = 4
overflows = 0
overflow_uids = 0
initial_flush_level = 906
flush_level = 910
search (1) @ 544|2020
fp = 71|2544 [Inzr PD]>pds
bp = 71|2734 [Inzr PD]>pds
segno = 166
name_len = 9
name = ">udd>m>gdystem>r1_initializer" || (39)"\000"
search (2) @ 544|2044
fp = 71|2450 [Inzr PD]>pds
bp = 71|2664 [Inzr PD]>pds
segno = 162
name_len = 32
name = ">process_dir_dir>!BPLFhGXbBBBBBB" || (36)"\000"
search (3) @ 544|2070
fp = 71|3030 [Inzr PD]>pds
bp = 71|2544 [Inzr PD]>pds
segno = 367
name_len = 11
name = ">doc>ss>bceurceio_daemon" || (44)"\000"
search (4) @ 544|2114
fp = 71|2234 [Inzr PD]>pds
bp = 71|2210 [Inzr PD]>pds
segno = 315
name_len = 18
name = ">doc>ss>accountingcutive_mail" || (39)"\000"
search (5) @ 544|2140
fp = 71|2304 [Inzr PD]>pds
bp = 71|2710 [Inzr PD]>pds
segno = 234
name_len = 4
name = ">ldd>subsystem>emacs" || (48)"\000"
search (6) @ 544|2164
fp = 71|2400 [Inzr PD]>pds
bp = 71|2260 [Inzr PD]>pds
segno = 313
name_len = 15
name = ">doc>privilegeddfast" || (48)"\000"
search (7) @ 544|2210
fp = 71|2114 [Inzr PD]>pds
bp = 71|3030 [Inzr PD]>pds
segno = 325
name_len = 17
name = ">doc>ss>io_daemonrum" || (48)"\000"
search (8) @ 544|2234
fp = 71|2330 [Inzr PD]>pds
bp = 71|2114 [Inzr PD]>pds
segno = 334
name_len = 22
name = ">doc>ss>r1_initializerGDixon>work>vptr" || (30)"\000"
search (9) @ 544|2260
fp = 71|2164 [Inzr PD]>pds
bp = 71|3004 [Inzr PD]>pds
segno = 231
name_len = 4
name = ">doc>m>gd>w" || (57)"\000"
search (10) @ 544|2304
fp = 71|2520 [Inzr PD]>pds
bp = 71|2140 [Inzr PD]>pds
segno = 165
name_len = 12
name = ">udd>Multicsem>mail_system>read_mail" || (32)"\000"
search (11) @ 544|2330
fp = 71|3004 [Inzr PD]>pds
bp = 71|2234 [Inzr PD]>pds
segno = 333
name_len = 16
name = ">doc>ss>operatorltics>GDixon>worksystem_multi_segment_area_4.1\000\000\000\000\000\000"
search (12) @ 544|2354
fp = 71|2710 [Inzr PD]>pds
bp = 71|2000 [Inzr PD]>pds
segno = 258
name_len = 40
name = ">user_dir_dir>Multics>GDixon>work>vptr>t" || (28)"\000"
search (13) @ 544|2400
fp = 71|2474 [Inzr PD]>pds
bp = 71|2164 [Inzr PD]>pds
segno = 365
name_len = 13
name = ">doc>iml_infodir" || (52)"\000"
search (14) @ 544|2424
fp = 71|2734 [Inzr PD]>pds
bp = 71|2760 [Inzr PD]>pds
segno = 165
name_len = 21
name = ">user_dir_dir>Multics" || (47)"\000"
search (15) @ 544|2450
fp = 71|3100 [Inzr PD]>pds
bp = 71|2044 [Inzr PD]>pds
segno = 166
name_len = 19
name = ">udd>Multics>GDixon_out" || (45)"\000"
search (16) @ 544|2474
fp = 71|3054 [Inzr PD]>pds
bp = 71|2400 [Inzr PD]>pds
segno = 364
name_len = 14
name = ">udd>m>gd>info" || (54)"\000"
search (17) @ 544|2520
fp = 71|2664 [Inzr PD]>pds
bp = 71|2304 [Inzr PD]>pds
segno = 370
name_len = 21
name = ">udd>m>gd>lib>include" || (47)"\000"
search (18) @ 544|2544
fp = 71|2070 [Inzr PD]>pds
bp = 71|2020 [Inzr PD]>pds
segno = 312
name_len = 9
name = ">doc>info_dirptr" || (52)"\000"
search (19) @ 544|2570
fp = 71|3124 [Inzr PD]>pds
bp = 71|2614 [Inzr PD]>pds
segno = 306
name_len = 16
name = ">ldd>hard>sourceail_system>send_mail" || (32)"\000"
search (20) @ 544|2614
fp = 71|2570 [Inzr PD]>pds
bp = 71|3054 [Inzr PD]>pds
segno = 165
name_len = 6
name = ">udd>mubsystem>operatorint" || (42)"\000"
search (21) @ 544|2640
fp = 71|2000 [Inzr PD]>pds
bp = 71|3124 [Inzr PD]>pds
segno = 273
name_len = 9
name = ">ldd>hardystem>mail_system" || (42)"\000"
search (22) @ 544|2664
fp = 71|2044 [Inzr PD]>pds
bp = 71|2520 [Inzr PD]>pds
segno = 226
name_len = 13
name = ">udd>m>gd>libm>kermit" || (47)"\000"
search (23) @ 544|2710
fp = 71|2140 [Inzr PD]>pds
bp = 71|2354 [Inzr PD]>pds
segno = 309
name_len = 12
name = ">ldd>include>source_system>read_mail>forward_requests\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"
search (24) @ 544|2734
fp = 71|2020 [Inzr PD]>pds
bp = 71|2424 [Inzr PD]>pds
segno = 164
name_len = 4
name = ">udd>subsystem>deckfile_manager" || (37)"\000"
search (25) @ 544|2760
fp = 71|2424 [Inzr PD]>pds
bp = 71|3100 [Inzr PD]>pds
segno = 169
name_len = 25
name = ">system_library_unbundledbBBBBBB>system_multi_segment_area_4.1\000\000\000\000\000\000"
search (26) @ 544|3004
fp = 71|2260 [Inzr PD]>pds
bp = 71|2330 [Inzr PD]>pds
segno = 366
name_len = 13
name = ">doc>aml_infom>executive_forum" || (38)"\000"
search (27) @ 544|3030
fp = 71|2210 [Inzr PD]>pds
bp = 71|2070 [Inzr PD]>pds
segno = 232
name_len = 7
name = ">doc>ssbsystem>rmdbcs" || (47)"\000"
search (28) @ 544|3054
fp = 71|2614 [Inzr PD]>pds
bp = 71|2474 [Inzr PD]>pds
segno = 227
name_len = 11
name = ">udd>m>gd>wtem>report_writer_info_dirs" || (30)"\000"
search (29) @ 544|3100
fp = 71|2760 [Inzr PD]>pds
bp = 71|2450 [Inzr PD]>pds
segno = 166
name_len = 28
name = ">user_dir_dir>Multics>GDixonBBBB" || (36)"\000"
search (30) @ 544|3124
fp = 71|2640 [Inzr PD]>pds
bp = 71|2570 [Inzr PD]>pds
segno = 349
name_len = 62
name = ">process_dir_dir>!BPLFhGXbBBBBBB>system_multi_segment_area_4.1\000\000\000\000\000\000"
initial_procedure = 140|4767 bound_process_creation (ring 0)
account_id = (32)"\000"
access_name @ 544|3162
user = "GDixon" || (26)" "
project = "Multics" || (25)" "
tag = "a\000\000\000" || (28)" "
home_dir = ">user_dir_dir>Multics>GDixon" || (140)" "
process_dir_name = ">process_dir_dir>!BPLFhGXbBBBBBB"
wdir (0) through wdir (3) = null
wdir (4) = 402|0 >user_dir_dir>Multics>GDixon>work>vptr>t
wdir (5) through wdir (7) = null
wdir_uid (0) through wdir_uid (3) = "000000000000"b3
wdir_uid (4) = "573026005142"b3
wdir_uid (5) through wdir_uid (7) = "000000000000"b3
transparent = "000000000000"b3
itt_head = "000000"b3
max_access_authorization @ 544|3326
categories = "600000000000"b3
level = 2
privileges @ 544|3327(18)
ipc = "0"b
dir = "0"b
seg = "0"b
soos = "0"b
ring1 = "0"b
rcp = "0"b
comm = "0"b
stacks (0) = 230|0 (Invalid segment number)
stacks (1) = 231|0 [pd]>stack_1
stacks (2) = 232|0 [pd]>stack_2
stacks (3) = null
stacks (4) = 234|0 [pd]>stack_4
stacks (5) through stacks (7) = null
kstp = 67|0 [Inzr PD]>kst_seg
events_pending = "000000000000"b3
special_channels = "400000000000"b3
event_masks (1) through event_masks (3) = "000000000000"b3
event_masks (4) = "400000000000"b3
event_masks (5) through event_masks (7) = "000000000000"b3
initial_ring = 4
interrupt_ring = 4
highest_ring = 5
prelinked_ring = "00"b4
unique_scu_index = "000000000031"b3
max_lot_size (0) through max_lot_size (7) = 1024
lot_stack_size (0) through lot_stack_size (7) = 512
clr_stack_size (0) through clr_stack_size (7) = 0
link_meters_bins (1) = 1508
link_meters_bins (2) through link_meters_bins (4) = 0
link_meters_times (1) = 765278
link_meters_times (2) through link_meters_times (4) = 0
link_meters_pgwaits (1) = 41
link_meters_pgwaits (2) through link_meters_pgwaits (4) = 0
dmpr_copy_dirsegp = null
dmpr_pvid = "000000000000"b3
dmpr_pvtx = 0
first_call = 0
mc_save_area = "003500"b3
mc_save_ptr = "003560"b3
mc_save_limit = "010000"b3
useable_lot = "68"b4
ring_events = "000000000000"b3
force_write_limit (0) through force_write_limit (7) = 1
ipc_vars @ 544|3456
ap = 234|41302 [pd]>stack_4
retsw = 9699456
save_entry_ret = 3407872
truncated_stacks = 0
chan = 0
block_start_steps = 0
stk_temp = 0
ipc_block_return = "000147000115"b3
avg_block_steps = 0.000000
admin_privileges = "000000000000"b3
no_audit_ring1_fs_object_ops = "0"b
data = "4"b3
r 10:48 4.060 14 level 2