DataMuseum.dk

Presents historical artifacts from the history of:

Commodore CBM-900

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Commodore CBM-900

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦70af5fb21⟧

    Length: 6185 (0x1829)
    Notes: UNIX file
    Names: »init.c«

Derivation

└─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code
    └─⟦f4b8d8c84⟧ UNIX V7 Filesystem
        └─ ⟦this⟧ »cmd/init.c« 

Hex Dump

0x0000…0020 2f 2a 0a 20 2a 20 49 6e 69 74 2e 0a 20 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 3c 64 69 72 2e 68 3e   ┆/*  * Init.  */ #include <dir.h>┆
0x0020…0040 0a 23 69 6e 63 6c 75 64 65 20 3c 73 69 67 6e 61 6c 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 75   ┆ #include <signal.h> #include <u┆
0x0040…0060 74 6d 70 2e 68 3e 0a 0a 2f 2a 0a 20 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 63 6f 6e 73   ┆tmp.h>  /*  * Miscellaneous cons┆
0x0060…0080 74 61 6e 74 73 2e 0a 20 2a 2f 0a 23 64 65 66 69 6e 65 09 4e 55 4c 4c 09 28 28 63 68 61 72 20 2a   ┆tants.  */ #define NULL ((char *┆
0x0080…00a0 29 30 29 0a 0a 2f 2a 0a 20 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20   ┆)0)  /*  * Structure containing ┆
0x00a0…00c0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20 74 65 72 6d 69 6e 61 6c 2e   ┆information about each terminal.┆
0x00c0…00e0 0a 20 2a 2f 0a 73 74 72 75 63 74 20 74 74 79 20 7b 0a 09 73 74 72 75 63 74 09 20 74 74 79 20 2a   ┆  */ struct tty {  struct  tty *┆
0x00e0…0100 74 5f 6e 65 78 74 3b 09 09 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6e 65 78 74 20 65 6e 74 72   ┆t_next;  /* Pointer to next entr┆
0x0100…0120 79 20 2a 2f 0a 09 69 6e 74 09 20 74 5f 70 69 64 3b 09 09 09 2f 2a 20 50 72 6f 63 65 73 73 20 69   ┆y */  int  t_pid;   /* Process i┆
0x0120…0140 64 20 2a 2f 0a 09 69 6e 74 09 20 74 5f 66 6c 61 67 3b 09 09 2f 2a 20 46 6c 61 67 20 2a 2f 0a 09   ┆d */  int  t_flag;  /* Flag */  ┆
0x0140…0160 63 68 61 72 09 20 74 5f 62 61 75 64 5b 32 5d 3b 09 09 2f 2a 20 42 61 75 64 20 64 65 73 63 72 69   ┆char  t_baud[2];  /* Baud descri┆
0x0160…0180 70 74 6f 72 20 2a 2f 0a 09 63 68 61 72 09 20 74 5f 74 74 79 5b 35 2b 44 49 52 53 49 5a 2b 31 5d   ┆ptor */  char  t_tty[5+DIRSIZ+1]┆
0x0180…01a0 3b 09 2f 2a 20 74 74 79 20 6e 61 6d 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 20 2a 20 45 6e 76 69 72   ┆; /* tty name */ };  /*  * Envir┆
0x01a0…01c0 6f 6d 65 6e 74 20 6c 69 73 74 20 66 6f 72 20 74 68 65 20 73 68 65 6c 6c 2e 0a 20 2a 2f 0a 63 68   ┆oment list for the shell.  */ ch┆
0x01c0…01e0 61 72 20 2a 65 6e 76 6c 5b 5d 20 3d 7b 0a 09 22 50 41 54 48 3d 3a 2f 62 69 6e 22 2c 0a 09 22 48   ┆ar *envl[] ={  "PATH=:/bin",  "H┆
0x01e0…0200 4f 4d 45 3d 2f 65 74 63 22 2c 0a 09 22 50 53 31 3d 23 20 22 2c 0a 09 22 50 53 32 3d 3e 20 22 2c   ┆OME=/etc",  "PS1=# ",  "PS2=> ",┆
0x0200…0220 0a 09 4e 55 4c 4c 0a 7d 3b 0a 0a 2f 2a 0a 20 2a 20 46 75 6e 63 74 69 6f 6e 73 2e 0a 20 2a 2f 0a   ┆  NULL };  /*  * Functions.  */ ┆
0x0220…0240 65 78 74 65 72 6e 09 69 6e 74 09 73 69 67 68 61 6e 67 28 29 3b 0a 65 78 74 65 72 6e 09 69 6e 74   ┆extern int sighang(); extern int┆
0x0240…0260 09 73 69 67 71 75 69 74 28 29 3b 0a 65 78 74 65 72 6e 09 73 74 72 75 63 74 09 74 74 79 20 2a 66   ┆ sigquit(); extern struct tty *f┆
0x0260…0280 69 6e 64 74 74 79 28 29 3b 0a 0a 2f 2a 0a 20 2a 20 56 61 72 69 61 62 6c 65 73 2e 0a 20 2a 2f 0a   ┆indtty();  /*  * Variables.  */ ┆
0x0280…02a0 73 74 72 75 63 74 09 74 74 79 20 2a 74 74 79 70 3b 09 09 09 2f 2a 20 54 65 72 6d 69 6e 61 6c 20   ┆struct tty *ttyp;   /* Terminal ┆
0x02a0…02c0 6c 69 73 74 20 2a 2f 0a 69 6e 74 09 73 69 6e 66 6c 61 67 3b 09 09 09 2f 2a 20 47 6f 20 74 6f 20   ┆list */ int sinflag;   /* Go to ┆
0x02c0…02e0 73 69 6e 67 6c 65 20 75 73 65 72 20 2a 2f 0a 69 6e 74 09 74 74 79 66 6c 61 67 3b 09 09 09 2f 2a   ┆single user */ int ttyflag;   /*┆
0x02e0…0300 20 53 63 61 6e 20 74 74 79 20 66 69 6c 65 20 2a 2f 0a 0a 6d 61 69 6e 28 61 72 67 63 2c 20 61 72   ┆ Scan tty file */  main(argc, ar┆
0x0300…0320 67 76 29 0a 72 65 67 69 73 74 65 72 20 69 6e 74 20 61 72 67 63 3b 0a 63 68 61 72 20 2a 61 72 67   ┆gv) register int argc; char *arg┆
0x0320…0340 76 5b 5d 3b 0a 7b 0a 09 72 65 67 69 73 74 65 72 20 73 74 72 75 63 74 20 74 74 79 20 2a 74 70 3b   ┆v[]; {  register struct tty *tp;┆
0x0340…0360 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 6e 3b 0a 09 75 6e 73 69 67 6e 65 64 20 73 74 61 74   ┆  register int n;  unsigned stat┆
0x0360…0380 75 73 3b 0a 0a 09 69 66 20 28 28 6e 20 3d 20 63 72 65 61 74 28 22 2f 65 74 63 2f 62 6f 6f 74 74   ┆us;   if ((n = creat("/etc/boott┆
0x0380…03a0 69 6d 65 22 2c 20 30 36 34 34 29 29 20 3e 3d 20 30 29 0a 09 09 63 6c 6f 73 65 28 6e 29 3b 0a 09   ┆ime", 0644)) >= 0)   close(n);  ┆
0x03a0…03c0 69 66 20 28 61 72 67 63 20 3e 3d 20 32 29 0a 09 09 6c 6f 61 64 73 77 70 28 61 72 67 76 5b 31 5d   ┆if (argc >= 2)   loadswp(argv[1]┆
0x03c0…03e0 29 3b 0a 09 66 6f 72 20 28 6e 3d 32 3b 20 6e 3c 61 72 67 63 3b 20 6e 2b 2b 29 0a 09 09 6c 6f 61   ┆);  for (n=2; n<argc; n++)   loa┆
0x03e0…0400 64 64 72 76 28 61 72 67 76 5b 6e 5d 29 3b 0a 09 70 75 74 77 74 6d 70 28 22 7e 22 2c 20 22 22 29   ┆ddrv(argv[n]);  putwtmp("~", "")┆
0x0400…0420 3b 0a 09 73 69 67 6e 61 6c 28 53 49 47 48 55 50 2c 20 73 69 67 68 61 6e 67 29 3b 0a 09 73 69 67   ┆;  signal(SIGHUP, sighang);  sig┆
0x0420…0440 6e 61 6c 28 53 49 47 51 55 49 54 2c 20 73 69 67 71 75 69 74 29 3b 0a 09 66 6f 72 20 28 3b 3b 29   ┆nal(SIGQUIT, sigquit);  for (;;)┆
0x0440…0460 20 7b 0a 09 09 77 68 69 6c 65 20 28 61 74 74 65 6e 64 63 28 29 20 3d 3d 20 30 29 20 7b 0a 09 09   ┆ {   while (attendc() == 0) {   ┆
0x0460…0480 09 6e 20 3d 20 73 70 61 77 6e 28 22 2f 64 65 76 2f 63 6f 6e 73 6f 6c 65 22 2c 0a 09 09 09 09 22   ┆ n = spawn("/dev/console",     "┆
0x0480…04a0 2f 62 69 6e 2f 73 68 22 2c 20 22 2d 73 68 22 2c 20 4e 55 4c 4c 29 3b 0a 09 09 09 77 61 69 74 63   ┆/bin/sh", "-sh", NULL);    waitc┆
0x04a0…04c0 28 6e 29 3b 0a 09 09 09 69 66 20 28 73 69 6e 66 6c 61 67 29 20 7b 0a 09 09 09 09 73 69 6e 66 6c   ┆(n);    if (sinflag) {     sinfl┆
0x04c0…04e0 61 67 20 3d 20 30 3b 0a 09 09 09 09 6b 69 6c 6c 28 2d 31 2c 20 39 29 3b 0a 09 09 09 09 63 6f 6e   ┆ag = 0;     kill(-1, 9);     con┆
0x04e0…0500 74 69 6e 75 65 3b 0a 09 09 09 7d 0a 09 09 09 69 66 20 28 61 63 63 65 73 73 28 22 2f 65 74 63 2f   ┆tinue;    }    if (access("/etc/┆
0x0500…0520 72 63 22 2c 20 30 29 20 3d 3d 20 30 29 20 7b 0a 09 09 09 09 6e 20 3d 20 73 70 61 77 6e 28 22 2f   ┆rc", 0) == 0) {     n = spawn("/┆
0x0520…0540 64 65 76 2f 6e 75 6c 6c 22 2c 0a 09 09 09 09 09 22 2f 62 69 6e 2f 73 68 22 2c 20 22 73 68 22 2c   ┆dev/null",      "/bin/sh", "sh",┆
0x0540…0560 20 22 2f 65 74 63 2f 72 63 22 2c 20 4e 55 4c 4c 29 3b 0a 09 09 09 09 77 61 69 74 63 28 6e 29 3b   ┆ "/etc/rc", NULL);     waitc(n);┆
0x0560…0580 0a 09 09 09 7d 0a 09 09 09 73 63 61 6e 74 74 79 28 29 3b 0a 09 09 7d 0a 09 09 6e 20 3d 20 77 61   ┆    }    scantty();   }   n = wa┆
0x0580…05a0 69 74 28 26 73 74 61 74 75 73 29 3b 0a 09 09 69 66 20 28 73 69 6e 66 6c 61 67 29 20 7b 0a 09 09   ┆it(&status);   if (sinflag) {   ┆
0x05a0…05c0 09 73 69 6e 66 6c 61 67 20 3d 20 30 3b 0a 09 09 09 66 6f 72 20 28 74 70 3d 74 74 79 70 3b 20 74   ┆ sinflag = 0;    for (tp=ttyp; t┆
0x05c0…05e0 70 21 3d 4e 55 4c 4c 3b 20 74 70 3d 74 70 2d 3e 74 5f 6e 65 78 74 29 0a 09 09 09 09 74 70 2d 3e   ┆p!=NULL; tp=tp->t_next)     tp->┆
0x05e0…0600 74 5f 66 6c 61 67 20 3d 20 30 3b 0a 09 09 09 6b 69 6c 6c 28 2d 31 2c 20 39 29 3b 0a 09 09 7d 0a   ┆t_flag = 0;    kill(-1, 9);   } ┆
0x0600…0620 09 09 69 66 20 28 74 74 79 66 6c 61 67 29 20 7b 0a 09 09 09 74 74 79 66 6c 61 67 20 3d 20 30 3b   ┆  if (ttyflag) {    ttyflag = 0;┆
0x0620…0640 0a 09 09 09 73 63 61 6e 74 74 79 28 29 3b 0a 09 09 09 6e 20 3d 20 30 3b 0a 09 09 7d 0a 09 09 69   ┆    scantty();    n = 0;   }   i┆
0x0640…0660 66 20 28 6e 20 3e 20 30 29 20 7b 0a 09 09 09 66 6f 72 20 28 74 70 3d 74 74 79 70 3b 20 74 70 3b   ┆f (n > 0) {    for (tp=ttyp; tp;┆
0x0660…0680 20 74 70 3d 74 70 2d 3e 74 5f 6e 65 78 74 29 20 7b 0a 09 09 09 09 69 66 20 28 6e 20 21 3d 20 74   ┆ tp=tp->t_next) {     if (n != t┆
0x0680…06a0 70 2d 3e 74 5f 70 69 64 29 0a 09 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 09 74 70 2d   ┆p->t_pid)      continue;     tp-┆
0x06a0…06c0 3e 74 5f 70 69 64 20 3d 20 30 3b 0a 09 09 09 09 70 75 74 77 74 6d 70 28 26 74 70 2d 3e 74 5f 74   ┆>t_pid = 0;     putwtmp(&tp->t_t┆
0x06c0…06e0 74 79 5b 35 5d 2c 20 22 22 29 3b 0a 09 09 09 09 63 6c 72 75 74 6d 70 28 26 74 70 2d 3e 74 5f 74   ┆ty[5], "");     clrutmp(&tp->t_t┆
0x06e0…0700 74 79 5b 35 5d 29 3b 0a 09 09 09 09 63 68 6d 6f 64 28 74 70 2d 3e 74 5f 74 74 79 2c 20 30 37 30   ┆ty[5]);     chmod(tp->t_tty, 070┆
0x0700…0720 30 29 3b 0a 09 09 09 09 63 68 6f 77 6e 28 74 70 2d 3e 74 5f 74 74 79 2c 20 30 2c 20 31 29 3b 0a   ┆0);     chown(tp->t_tty, 0, 1); ┆
0x0720…0740 09 09 09 09 69 66 20 28 28 73 74 61 74 75 73 3e 3e 38 29 20 3d 3d 20 30 33 37 37 29 0a 09 09 09   ┆    if ((status>>8) == 0377)    ┆
0x0740…0760 09 09 74 70 2d 3e 74 5f 66 6c 61 67 20 3d 20 30 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 7d 0a   ┆  tp->t_flag = 0;    }   }  } } ┆
0x0760…0780 0a 2f 2a 0a 20 2a 20 43 61 6c 6c 65 64 20 77 68 65 6e 20 77 65 20 67 65 74 20 61 20 68 61 6e 67   ┆ /*  * Called when we get a hang┆
0x0780…07a0 75 70 2e 0a 20 2a 2f 0a 73 69 67 68 61 6e 67 28 29 0a 7b 0a 09 73 69 67 6e 61 6c 28 53 49 47 48   ┆up.  */ sighang() {  signal(SIGH┆
0x07a0…07c0 55 50 2c 20 73 69 67 68 61 6e 67 29 3b 0a 09 73 69 6e 66 6c 61 67 20 3d 20 31 3b 0a 7d 0a 0a 2f   ┆UP, sighang);  sinflag = 1; }  /┆
0x07c0…07e0 2a 0a 20 2a 20 43 61 6c 6c 65 64 20 77 68 65 6e 20 61 20 71 75 69 74 20 69 73 20 72 65 63 65 69   ┆*  * Called when a quit is recei┆
0x07e0…0800 76 65 64 2e 0a 20 2a 2f 0a 73 69 67 71 75 69 74 28 29 0a 7b 0a 09 73 69 67 6e 61 6c 28 53 49 47   ┆ved.  */ sigquit() {  signal(SIG┆
0x0800…0820 51 55 49 54 2c 20 73 69 67 71 75 69 74 29 3b 0a 09 74 74 79 66 6c 61 67 20 3d 20 31 3b 0a 7d 0a   ┆QUIT, sigquit);  ttyflag = 1; } ┆
0x0820…0840 0a 2f 2a 0a 20 2a 20 4c 6f 61 64 20 74 68 65 20 73 77 61 70 70 65 72 2e 0a 20 2a 2f 0a 6c 6f 61   ┆ /*  * Load the swapper.  */ loa┆
0x0840…0860 64 73 77 70 28 6e 70 29 0a 63 68 61 72 20 2a 6e 70 3b 0a 7b 0a 09 69 66 20 28 6e 70 5b 30 5d 20   ┆dswp(np) char *np; {  if (np[0] ┆
0x0860…0880 3d 3d 20 27 5c 30 27 29 0a 09 09 72 65 74 75 72 6e 3b 0a 09 69 66 20 28 66 6f 72 6b 28 29 20 21   ┆== '\0')   return;  if (fork() !┆
0x0880…08a0 3d 20 30 29 0a 09 09 72 65 74 75 72 6e 3b 0a 09 65 78 65 63 76 65 28 6e 70 2c 20 4e 55 4c 4c 2c   ┆= 0)   return;  execve(np, NULL,┆
0x08a0…08c0 20 4e 55 4c 4c 29 3b 0a 09 70 61 6e 69 63 28 22 43 61 6e 6e 6f 74 20 6c 6f 61 64 20 22 2c 20 6e   ┆ NULL);  panic("Cannot load ", n┆
0x08c0…08e0 70 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 4c 6f 61 64 20 74 68 65 20 67 69 76 65 6e 20 64 72 69 76   ┆p); }  /*  * Load the given driv┆
0x08e0…0900 65 72 2e 0a 20 2a 2f 0a 6c 6f 61 64 64 72 76 28 6e 70 29 0a 63 68 61 72 20 2a 6e 70 3b 0a 7b 0a   ┆er.  */ loaddrv(np) char *np; { ┆
0x0900…0920 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 70 69 64 3b 0a 09 69 6e 74 20 73 74 61 74 75 73 3b 0a   ┆ register int pid;  int status; ┆
0x0920…0940 0a 09 70 69 64 20 3d 20 73 70 61 77 6e 28 22 2f 64 65 76 2f 6e 75 6c 6c 22 2c 20 22 2f 65 74 63   ┆  pid = spawn("/dev/null", "/etc┆
0x0940…0960 2f 6c 6f 61 64 22 2c 20 22 6c 6f 61 64 22 2c 20 6e 70 2c 20 4e 55 4c 4c 29 3b 0a 09 77 68 69 6c   ┆/load", "load", np, NULL);  whil┆
0x0960…0980 65 20 28 77 61 69 74 28 26 73 74 61 74 75 73 29 20 21 3d 20 70 69 64 29 0a 09 09 3b 0a 09 69 66   ┆e (wait(&status) != pid)   ;  if┆
0x0980…09a0 20 28 73 74 61 74 75 73 20 21 3d 20 30 29 0a 09 09 65 78 69 74 28 73 74 61 74 75 73 29 3b 0a 7d   ┆ (status != 0)   exit(status); }┆
0x09a0…09c0 0a 0a 2f 2a 0a 20 2a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 74 65 72 6d 69 6e 61   ┆  /*  * If there are any termina┆
0x09c0…09e0 6c 73 20 77 68 69 63 68 20 6e 65 65 64 20 74 6f 20 62 65 20 73 65 72 76 69 63 65 64 2c 20 73 65   ┆ls which need to be serviced, se┆
0x09e0…0a00 72 76 69 63 65 20 74 68 65 6d 2e 0a 20 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72   ┆rvice them.  * Return the number┆
0x0a00…0a20 20 6f 66 20 61 63 74 69 76 65 20 74 65 72 6d 69 6e 61 6c 73 2e 0a 2a 2f 0a 61 74 74 65 6e 64 63   ┆ of active terminals. */ attendc┆
0x0a20…0a40 28 29 0a 7b 0a 09 72 65 67 69 73 74 65 72 20 73 74 72 75 63 74 20 74 74 79 20 2a 74 70 3b 0a 09   ┆() {  register struct tty *tp;  ┆
0x0a40…0a60 72 65 67 69 73 74 65 72 20 69 6e 74 20 6e 3b 0a 0a 09 6e 20 3d 20 30 3b 0a 09 66 6f 72 20 28 74   ┆register int n;   n = 0;  for (t┆
0x0a60…0a80 70 3d 74 74 79 70 3b 20 74 70 21 3d 4e 55 4c 4c 3b 20 74 70 3d 74 70 2d 3e 74 5f 6e 65 78 74 29   ┆p=ttyp; tp!=NULL; tp=tp->t_next)┆
0x0a80…0aa0 20 7b 0a 09 09 69 66 20 28 74 70 2d 3e 74 5f 70 69 64 20 3d 3d 20 30 29 20 7b 0a 09 09 09 69 66   ┆ {   if (tp->t_pid == 0) {    if┆
0x0aa0…0ac0 20 28 74 70 2d 3e 74 5f 66 6c 61 67 20 3d 3d 20 30 29 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b   ┆ (tp->t_flag == 0)     continue;┆
0x0ac0…0ae0 0a 09 09 09 65 6c 73 65 0a 09 09 09 09 6c 6f 67 69 6e 28 74 70 29 3b 0a 09 09 7d 0a 09 09 6e 2b   ┆    else     login(tp);   }   n+┆
0x0ae0…0b00 2b 3b 0a 09 7d 0a 09 72 65 74 75 72 6e 20 28 6e 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 57 61 69 74   ┆+;  }  return (n); }  /*  * Wait┆
0x0b00…0b20 20 66 6f 72 20 74 68 65 20 67 69 76 65 6e 20 70 72 6f 63 65 73 73 20 74 6f 20 63 6f 6d 70 6c 65   ┆ for the given process to comple┆
0x0b20…0b40 74 65 2e 0a 20 2a 2f 0a 77 61 69 74 63 28 70 31 29 0a 72 65 67 69 73 74 65 72 20 69 6e 74 20 70   ┆te.  */ waitc(p1) register int p┆
0x0b40…0b60 31 3b 0a 7b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 70 32 3b 0a 0a 09 77 68 69 6c 65 20 28   ┆1; {  register int p2;   while (┆
0x0b60…0b80 28 70 32 3d 77 61 69 74 28 4e 55 4c 4c 29 29 3e 3d 30 20 26 26 20 70 32 21 3d 70 31 29 0a 09 09   ┆(p2=wait(NULL))>=0 && p2!=p1)   ┆
0x0b80…0ba0 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 63 61 6e 20 74 68 65 20 74 74 79 20 66 69 6c 65 2e 0a 20 2a   ┆; }  /*  * Scan the tty file.  *┆
0x0ba0…0bc0 2f 0a 73 63 61 6e 74 74 79 28 29 0a 7b 0a 09 72 65 67 69 73 74 65 72 20 73 74 72 75 63 74 20 74   ┆/ scantty() {  register struct t┆
0x0bc0…0be0 74 79 20 2a 74 70 3b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 66 64 3b 0a 09 72 65 67 69 73   ┆ty *tp;  register int fd;  regis┆
0x0be0…0c00 74 65 72 20 69 6e 74 20 6e 66 6c 61 67 3b 0a 09 73 74 72 75 63 74 20 74 74 79 20 74 74 79 3b 0a   ┆ter int nflag;  struct tty tty; ┆
0x0c00…0c20 09 65 78 74 65 72 6e 20 63 68 61 72 20 2a 6d 61 6c 6c 6f 63 28 29 3b 0a 0a 09 69 66 20 28 28 66   ┆ extern char *malloc();   if ((f┆
0x0c20…0c40 64 3d 6f 70 65 6e 28 22 2f 65 74 63 2f 74 74 79 73 22 2c 20 30 29 29 20 3c 20 30 29 0a 09 09 72   ┆d=open("/etc/ttys", 0)) < 0)   r┆
0x0c40…0c60 65 74 75 72 6e 3b 0a 09 77 68 69 6c 65 20 28 72 65 61 64 74 74 79 28 26 74 74 79 2c 20 66 64 29   ┆eturn;  while (readtty(&tty, fd)┆
0x0c60…0c80 20 21 3d 20 30 29 20 7b 0a 09 09 69 66 20 28 28 74 70 3d 66 69 6e 64 74 74 79 28 26 74 74 79 29   ┆ != 0) {   if ((tp=findtty(&tty)┆
0x0c80…0ca0 29 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 74 70 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65   ┆) == NULL) {    tp = malloc(size┆
0x0ca0…0cc0 6f 66 28 2a 74 70 29 29 3b 0a 09 09 09 2a 74 70 20 3d 20 74 74 79 3b 0a 09 09 09 74 70 2d 3e 74   ┆of(*tp));    *tp = tty;    tp->t┆
0x0cc0…0ce0 5f 6e 65 78 74 20 3d 20 74 74 79 70 3b 0a 09 09 09 74 74 79 70 20 3d 20 74 70 3b 0a 09 09 09 63   ┆_next = ttyp;    ttyp = tp;    c┆
0x0ce0…0d00 6f 6e 74 69 6e 75 65 3b 0a 09 09 7d 0a 09 09 6e 66 6c 61 67 20 3d 20 30 3b 0a 09 09 69 66 20 28   ┆ontinue;   }   nflag = 0;   if (┆
0x0d00…0d20 74 70 2d 3e 74 5f 66 6c 61 67 20 21 3d 20 74 74 79 2e 74 5f 66 6c 61 67 29 20 7b 0a 09 09 09 6e   ┆tp->t_flag != tty.t_flag) {    n┆
0x0d20…0d40 66 6c 61 67 20 3d 20 31 3b 0a 09 09 09 74 70 2d 3e 74 5f 66 6c 61 67 20 3d 20 74 74 79 2e 74 5f   ┆flag = 1;    tp->t_flag = tty.t_┆
0x0d40…0d60 66 6c 61 67 3b 0a 09 09 7d 0a 09 09 69 66 20 28 74 70 2d 3e 74 5f 62 61 75 64 5b 30 5d 20 21 3d   ┆flag;   }   if (tp->t_baud[0] !=┆
0x0d60…0d80 20 74 74 79 2e 74 5f 62 61 75 64 5b 30 5d 29 20 7b 0a 09 09 09 6e 66 6c 61 67 20 3d 20 31 3b 0a   ┆ tty.t_baud[0]) {    nflag = 1; ┆
0x0d80…0da0 09 09 09 74 70 2d 3e 74 5f 62 61 75 64 5b 30 5d 20 3d 20 74 74 79 2e 74 5f 62 61 75 64 5b 30 5d   ┆   tp->t_baud[0] = tty.t_baud[0]┆
0x0da0…0dc0 3b 0a 09 09 7d 0a 09 09 69 66 20 28 6e 66 6c 61 67 21 3d 30 20 26 26 20 74 70 2d 3e 74 5f 70 69   ┆;   }   if (nflag!=0 && tp->t_pi┆
0x0dc0…0de0 64 21 3d 30 29 0a 09 09 09 6b 69 6c 6c 28 74 70 2d 3e 74 5f 70 69 64 2c 20 39 29 3b 0a 09 7d 0a   ┆d!=0)    kill(tp->t_pid, 9);  } ┆
0x0de0…0e00 09 63 6c 6f 73 65 28 66 64 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 52 65 61 64 20 61 20 6c 69 6e 65   ┆ close(fd); }  /*  * Read a line┆
0x0e00…0e20 20 66 72 6f 6d 20 74 68 65 20 74 65 72 6d 69 6e 61 6c 20 66 69 6c 65 20 61 6e 64 20 73 61 76 65   ┆ from the terminal file and save┆
0x0e20…0e40 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 69 65 6c 64 73 20 69 6e 0a 20 2a 20 74 68   ┆ the appropriate fields in  * th┆
0x0e40…0e60 65 20 74 65 72 6d 69 6e 61 6c 20 73 74 72 75 63 74 75 72 65 2e 0a 20 2a 2f 0a 72 65 61 64 74 74   ┆e terminal structure.  */ readtt┆
0x0e60…0e80 79 28 74 70 2c 20 66 64 29 0a 72 65 67 69 73 74 65 72 20 73 74 72 75 63 74 20 74 74 79 20 2a 74   ┆y(tp, fd) register struct tty *t┆
0x0e80…0ea0 70 3b 0a 7b 0a 09 72 65 67 69 73 74 65 72 20 63 68 61 72 20 2a 6c 70 3b 0a 09 63 68 61 72 20 63   ┆p; {  register char *lp;  char c┆
0x0ea0…0ec0 5b 31 5d 3b 0a 09 63 68 61 72 20 6c 69 6e 65 5b 32 2b 44 49 52 53 49 5a 2b 31 5d 3b 0a 0a 09 6c   ┆[1];  char line[2+DIRSIZ+1];   l┆
0x0ec0…0ee0 70 20 3d 20 6c 69 6e 65 3b 0a 09 66 6f 72 20 28 3b 3b 29 20 7b 0a 09 09 69 66 20 28 72 65 61 64   ┆p = line;  for (;;) {   if (read┆
0x0ee0…0f00 28 66 64 2c 20 63 2c 20 73 69 7a 65 6f 66 28 63 29 29 20 21 3d 20 73 69 7a 65 6f 66 28 63 29 29   ┆(fd, c, sizeof(c)) != sizeof(c))┆
0x0f00…0f20 0a 09 09 09 72 65 74 75 72 6e 20 28 30 29 3b 0a 09 09 69 66 20 28 63 5b 30 5d 20 3d 3d 20 27 5c   ┆    return (0);   if (c[0] == '\┆
0x0f20…0f40 6e 27 29 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 69 66 20 28 6c 70 20 3c 20 26 6c 69 6e 65 5b 32   ┆n')    break;   if (lp < &line[2┆
0x0f40…0f60 2b 44 49 52 53 49 5a 5d 29 0a 09 09 09 2a 6c 70 2b 2b 20 3d 20 63 5b 30 5d 3b 0a 09 7d 0a 09 2a   ┆+DIRSIZ])    *lp++ = c[0];  }  *┆
0x0f60…0f80 6c 70 2b 2b 20 3d 20 27 5c 30 27 3b 0a 09 69 66 20 28 6c 70 20 3c 20 26 6c 69 6e 65 5b 32 5d 29   ┆lp++ = '\0';  if (lp < &line[2])┆
0x0f80…0fa0 0a 09 09 72 65 74 75 72 6e 20 28 30 29 3b 0a 09 6c 70 20 3d 20 6c 69 6e 65 3b 0a 09 74 70 2d 3e   ┆   return (0);  lp = line;  tp->┆
0x0fa0…0fc0 74 5f 66 6c 61 67 20 3d 20 2a 6c 70 2b 2b 20 2d 20 27 30 27 3b 0a 09 74 70 2d 3e 74 5f 70 69 64   ┆t_flag = *lp++ - '0';  tp->t_pid┆
0x0fc0…0fe0 20 3d 20 30 3b 0a 09 74 70 2d 3e 74 5f 62 61 75 64 5b 30 5d 20 3d 20 2a 6c 70 2b 2b 3b 0a 09 74   ┆ = 0;  tp->t_baud[0] = *lp++;  t┆
0x0fe0…1000 70 2d 3e 74 5f 62 61 75 64 5b 31 5d 20 3d 20 27 5c 30 27 3b 0a 09 73 74 72 63 70 79 28 74 70 2d   ┆p->t_baud[1] = '\0';  strcpy(tp-┆
0x1000…1020 07 01 10 00 04 00 30 00 00 00 8e 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 36 00 00 00 00 00   ┆      0                   6     ┆
0x1020…1040 00 00 00 00 00 00 dc 00 00 00 fe 00 00 00 00 00 03 0f 00 14 1c e9 06 07 a1 fd 4c d8 00 10 4d d4   ┆                          L   M ┆
0x1040…1060 00 18 e6 62 61 d1 00 18 a9 1e 07 01 ff f8 6f d1 00 18 54 0a 80 00 02 92 5c 08 80 00 02 8e e6 32   ┆   ba         o   T     \      2┆
0x1060…1080 27 a0 ee 28 14 a2 92 a2 a1 3c 6f dc 00 12 61 d1 00 18 8b c1 eb 1f 61 d1 00 18 a9 17 4b d1 00 12   ┆'  (     <o   a       a     K   ┆
0x1080…10a0 ef 0d 94 a0 41 d1 00 18 94 08 14 a0 1d 80 37 8a 00 04 14 a6 a9 73 94 80 1d 60 1d a0 14 a0 5d 00   ┆    A         7      s   `    ] ┆
0x10a0…10c0 80 00 02 92 14 a0 a5 00 1d a0 34 a0 00 08 07 00 7f 00 e8 6c 14 a0 07 00 ff fe 94 0a 50 0a 80 00   ┆          4        l        P   ┆
0x10c0…10e0 02 92 ee ce 60 d9 00 10 68 d0 00 10 8c 94 e6 08 14 00 00 00 02 96 91 e0 5f 00 80 00 01 f8 a9 f3   ┆    `   h               _       ┆
0x10e0…1100 61 d1 00 18 01 01 02 07 07 01 fe 00 6f d1 00 12 93 e1 5f 00 80 00 00 00 a9 f1 94 0a 9c a8 e6 04   ┆a           o     _             ┆
0x1100…1120 a1 bc 0b 0c ff ff ee 02 92 00 e8 40 5c 08 80 00 02 8e ee 04 5d 0a 80 00 02 8e e8 11 54 04 80 00   ┆           @\       ]       T   ┆
0x1120…1140 02 8e a9 53 14 46 94 68 a9 77 90 6a ee 02 94 8a e8 06 1d 8a 37 a8 00 04 14 80 a5 00 1d 80 61 dc   ┆   S F h w j        7         a ┆
0x1140…1160 00 12 01 0c ff f8 94 a0 81 c1 94 08 1d a8 37 8a 00 04 54 00 80 00 02 8e 1d 80 54 06 80 00 02 8e   ┆              7   T       T     ┆
0x1160…1180 a9 73 1d 68 14 80 a5 00 1d 80 35 a0 00 04 94 06 94 02 14 24 a7 40 5e 0e 80 00 00 28 1d 68 94 60   ┆ s h      5        $ @^    ( h `┆
0x1180…11a0 94 0a 37 80 00 04 5e 08 80 00 00 28 1c e1 06 07 01 0f 00 14 9e 08 ab ff 1c e9 06 07 a1 fd 54 da   ┆  7   ^    (                  T ┆
0x11a0…11c0 00 14 ab b7 a1 b1 a7 10 ee 1e 50 0a 80 00 02 8e e7 1a 54 04 80 00 02 8e a9 53 14 40 90 a0 e3 13   ┆          P       T      S @    ┆
0x11c0…11e0 35 a0 00 04 94 08 94 04 14 40 07 00 ff fe 90 a0 ee 0a 14 a4 07 04 ff fe 94 46 a9 53 14 40 90 a0   ┆5        @               F S @  ┆
0x11e0…1200 ee 02 27 a0 ee 08 14 00 00 00 02 af 91 e0 5f 00 80 00 01 f8 a9 f3 14 a0 07 00 ff fe 1d a0 27 60   ┆  '           _               '`┆
0x1200…1220 72 65 67 69 73 74 65 72 20 69 6e 74 20 70 69 64 3b 0a 0a 09 70 69 64 20 3d 20 73 70 61 77 6e 28   ┆register int pid;   pid = spawn(┆
0x1220…1240 74 70 2d 3e 74 5f 74 74 79 2c 20 22 2f 65 74 63 2f 67 65 74 74 79 22 2c 20 22 2d 22 2c 20 74 70   ┆tp->t_tty, "/etc/getty", "-", tp┆
0x1240…1260 2d 3e 74 5f 62 61 75 64 2c 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 28 70 69 64 20 3c 20 30 29 0a 09   ┆->t_baud, NULL);  if (pid < 0)  ┆
0x1260…1280 09 74 70 2d 3e 74 5f 66 6c 61 67 20 3d 20 30 3b 0a 09 65 6c 73 65 0a 09 09 74 70 2d 3e 74 5f 70   ┆ tp->t_flag = 0;  else   tp->t_p┆
0x1280…12a0 69 64 20 3d 20 70 69 64 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 53 70 61 77 6e 20 6f 66 66 20 61 20 63   ┆id = pid; }  /*  * Spawn off a c┆
0x12a0…12c0 6f 6d 6d 61 6e 64 2e 0a 20 2a 2f 0a 73 70 61 77 6e 28 74 70 2c 20 6e 70 2c 20 61 70 29 0a 63 68   ┆ommand.  */ spawn(tp, np, ap) ch┆
0x12c0…12e0 61 72 20 2a 74 70 3b 0a 63 68 61 72 20 2a 6e 70 3b 0a 63 68 61 72 20 2a 61 70 3b 0a 7b 0a 09 72   ┆ar *tp; char *np; char *ap; {  r┆
0x12e0…1300 65 67 69 73 74 65 72 20 69 6e 74 20 70 69 64 3b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 66   ┆egister int pid;  register int f┆
0x1300…1320 64 3b 0a 0a 09 69 66 20 28 28 70 69 64 3d 66 6f 72 6b 28 29 29 20 21 3d 20 30 29 0a 09 09 72 65   ┆d;   if ((pid=fork()) != 0)   re┆
0x1320…1340 74 75 72 6e 20 28 70 69 64 29 3b 0a 09 69 66 20 28 28 66 64 3d 6f 70 65 6e 28 74 70 2c 20 32 29   ┆turn (pid);  if ((fd=open(tp, 2)┆
0x1340…1360 29 20 3c 20 30 29 0a 09 09 70 61 6e 69 63 28 22 43 61 6e 6e 6f 74 20 6f 70 65 6e 20 22 2c 20 74   ┆) < 0)   panic("Cannot open ", t┆
0x1360…1380 70 2c 20 4e 55 4c 4c 29 3b 0a 09 64 75 70 32 28 30 2c 20 31 29 3b 0a 09 64 75 70 32 28 30 2c 20   ┆p, NULL);  dup2(0, 1);  dup2(0, ┆
0x1380…13a0 32 29 3b 0a 09 65 78 65 63 76 65 28 6e 70 2c 20 26 61 70 2c 20 65 6e 76 6c 29 3b 0a 09 70 61 6e   ┆2);  execve(np, &ap, envl);  pan┆
0x13a0…13c0 69 63 28 22 43 61 6e 6e 6f 74 20 65 78 65 63 75 74 65 20 22 2c 20 6e 70 2c 20 4e 55 4c 4c 29 3b   ┆ic("Cannot execute ", np, NULL);┆
0x13c0…13e0 0a 09 72 65 74 75 72 6e 20 28 70 69 64 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 57 72 69 74 65 20 61   ┆  return (pid); }  /*  * Write a┆
0x13e0…1400 6e 20 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68 65 20 77 74 6d 70 20 66 69 6c 65 2e 0a 20 2a 2f 0a   ┆n entry onto the wtmp file.  */ ┆
0x1400…1420 70 75 74 77 74 6d 70 28 6c 70 2c 20 6e 70 29 0a 7b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20   ┆putwtmp(lp, np) {  register int ┆
0x1420…1440 66 64 3b 0a 09 73 74 72 75 63 74 20 75 74 6d 70 20 75 74 6d 70 3b 0a 09 65 78 74 65 72 6e 20 74   ┆fd;  struct utmp utmp;  extern t┆
0x1440…1460 69 6d 65 5f 74 20 74 69 6d 65 28 29 3b 0a 0a 09 69 66 20 28 28 66 64 3d 6f 70 65 6e 28 22 2f 75   ┆ime_t time();   if ((fd=open("/u┆
0x1460…1480 73 72 2f 61 64 6d 2f 77 74 6d 70 22 2c 20 31 29 29 20 3c 20 30 29 0a 09 09 72 65 74 75 72 6e 3b   ┆sr/adm/wtmp", 1)) < 0)   return;┆
0x1480…14a0 0a 09 73 74 72 6e 63 70 79 28 75 74 6d 70 2e 75 74 5f 6c 69 6e 65 2c 20 6c 70 2c 20 38 29 3b 0a   ┆  strncpy(utmp.ut_line, lp, 8); ┆
0x14a0…14c0 09 73 74 72 6e 63 70 79 28 75 74 6d 70 2e 75 74 5f 6e 61 6d 65 2c 20 6e 70 2c 20 44 49 52 53 49   ┆ strncpy(utmp.ut_name, np, DIRSI┆
0x14c0…14e0 5a 29 3b 0a 09 75 74 6d 70 2e 75 74 5f 74 69 6d 65 20 3d 20 74 69 6d 65 28 4e 55 4c 4c 29 3b 0a   ┆Z);  utmp.ut_time = time(NULL); ┆
0x14e0…1500 09 6c 73 65 65 6b 28 66 64 2c 20 30 4c 2c 20 32 29 3b 0a 09 77 72 69 74 65 28 66 64 2c 20 28 63   ┆ lseek(fd, 0L, 2);  write(fd, (c┆
0x1500…1520 68 61 72 20 2a 29 26 75 74 6d 70 2c 20 73 69 7a 65 6f 66 28 75 74 6d 70 29 29 3b 0a 09 63 6c 6f   ┆har *)&utmp, sizeof(utmp));  clo┆
0x1520…1540 73 65 28 66 64 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 43 6c 65 61 72 20 6f 75 74 20 61 20 75 74 6d   ┆se(fd); }  /*  * Clear out a utm┆
0x1540…1560 70 20 65 6e 74 72 79 2e 0a 20 2a 2f 0a 63 6c 72 75 74 6d 70 28 74 74 79 29 0a 63 68 61 72 20 2a   ┆p entry.  */ clrutmp(tty) char *┆
0x1560…1580 74 74 79 3b 0a 7b 0a 09 72 65 67 69 73 74 65 72 20 69 6e 74 20 66 64 3b 0a 09 73 74 72 75 63 74   ┆tty; {  register int fd;  struct┆
0x1580…15a0 20 75 74 6d 70 20 75 74 6d 70 3b 0a 09 73 74 61 74 69 63 20 73 74 72 75 63 74 20 75 74 6d 70 20   ┆ utmp utmp;  static struct utmp ┆
0x15a0…15c0 63 74 6d 70 3b 0a 0a 09 69 66 20 28 28 66 64 3d 6f 70 65 6e 28 22 2f 65 74 63 2f 75 74 6d 70 22   ┆ctmp;   if ((fd=open("/etc/utmp"┆
0x15c0…15e0 2c 20 32 29 29 20 3c 20 30 29 0a 09 09 72 65 74 75 72 6e 3b 0a 09 77 68 69 6c 65 20 28 72 65 61   ┆, 2)) < 0)   return;  while (rea┆
0x15e0…1600 64 28 66 64 2c 20 26 75 74 6d 70 2c 20 73 69 7a 65 6f 66 28 75 74 6d 70 29 29 20 3d 3d 20 73 69   ┆d(fd, &utmp, sizeof(utmp)) == si┆
0x1600…1620 7a 65 6f 66 28 75 74 6d 70 29 29 20 7b 0a 09 09 69 66 20 28 73 74 72 6e 63 6d 70 28 75 74 6d 70   ┆zeof(utmp)) {   if (strncmp(utmp┆
0x1620…1640 2e 75 74 5f 6c 69 6e 65 2c 20 74 74 79 2c 20 38 29 20 21 3d 20 30 29 0a 09 09 09 63 6f 6e 74 69   ┆.ut_line, tty, 8) != 0)    conti┆
0x1640…1660 6e 75 65 3b 0a 09 09 6c 73 65 65 6b 28 66 64 2c 20 28 6c 6f 6e 67 29 2d 73 69 7a 65 6f 66 28 75   ┆nue;   lseek(fd, (long)-sizeof(u┆
0x1660…1680 74 6d 70 29 2c 20 31 29 3b 0a 09 09 77 72 69 74 65 28 66 64 2c 20 26 63 74 6d 70 2c 20 73 69 7a   ┆tmp), 1);   write(fd, &ctmp, siz┆
0x1680…16a0 65 6f 66 28 63 74 6d 70 29 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 09 63 6c 6f 73 65 28 66   ┆eof(ctmp));   break;  }  close(f┆
0x16a0…16c0 64 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a 20 50 72 69 6e 74 20 6f 75 74 20 61 20 6c 69 73 74 20 6f 66   ┆d); }  /*  * Print out a list of┆
0x16c0…16e0 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64 20 65 78 69 74 2e 0a 20 2a 2f 0a 70 61   ┆ error messages and exit.  */ pa┆
0x16e0…1700 6e 69 63 28 63 70 29 0a 63 68 61 72 20 2a 63 70 3b 0a 7b 0a 09 72 65 67 69 73 74 65 72 20 63 68   ┆nic(cp) char *cp; {  register ch┆
0x1700…1720 61 72 20 2a 2a 63 70 70 3b 0a 0a 09 63 6c 6f 73 65 28 30 29 3b 0a 09 6f 70 65 6e 28 22 2f 64 65   ┆ar **cpp;   close(0);  open("/de┆
0x1720…1740 76 2f 63 6f 6e 73 6f 6c 65 22 2c 20 32 29 3b 0a 09 66 6f 72 20 28 63 70 70 3d 26 63 70 3b 20 2a   ┆v/console", 2);  for (cpp=&cp; *┆
0x1740…1760 63 70 70 21 3d 4e 55 4c 4c 3b 20 63 70 70 2b 2b 29 0a 09 09 70 72 69 6e 74 6c 28 2a 63 70 70 29   ┆cpp!=NULL; cpp++)   printl(*cpp)┆
0x1760…1780 3b 0a 09 70 72 69 6e 74 6c 28 22 5c 6e 22 29 3b 0a 09 65 78 69 74 28 30 33 37 37 29 3b 0a 7d 0a   ┆;  printl("\n");  exit(0377); } ┆
0x1780…17a0 0a 2f 2a 0a 20 2a 20 50 72 69 6e 74 20 6f 75 74 20 61 20 73 74 72 69 6e 67 20 6f 6e 20 74 68 65   ┆ /*  * Print out a string on the┆
0x17a0…17c0 20 73 74 61 6e 64 61 72 64 20 6f 75 74 70 75 74 2e 0a 20 2a 2f 0a 70 72 69 6e 74 6c 28 63 70 31   ┆ standard output.  */ printl(cp1┆
0x17c0…17e0 29 0a 72 65 67 69 73 74 65 72 20 63 68 61 72 20 2a 63 70 31 3b 0a 7b 0a 09 72 65 67 69 73 74 65   ┆) register char *cp1; {  registe┆
0x17e0…1800 72 20 63 68 61 72 20 2a 63 70 32 3b 0a 0a 09 66 6f 72 20 28 63 70 32 3d 63 70 31 3b 20 2a 63 70   ┆r char *cp2;   for (cp2=cp1; *cp┆
0x1800…1820 32 3b 20 63 70 32 2b 2b 29 0a 09 09 3b 0a 09 77 72 69 74 65 28 30 2c 20 63 70 31 2c 20 63 70 32   ┆2; cp2++)   ;  write(0, cp1, cp2┆
0x1820…1829 2d 63 70 31 29 3b 0a 7d 0a   ┆-cp1); } ┆