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 - metrics - 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 Filesystem
        └─⟦this⟧ »cmd/init.c« 

Hex Dump

0x0000…0020 (0,)  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 (1,)  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 (2,)  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 (3,)  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 (4,)  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 (5,)  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 (6,)  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 (7,)  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 (8,)  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 (9,)  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 (10,) 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 (11,) 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 (12,) 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); } ┆