|
|
1.1 root 1: /*
2: * coh_intro.c
3: * 6/5/91
4: * Usage: coh_intro
5: * Uses routines in build0.c: cc -o coh_intro coh_intro.c build0.c
6: */
7:
8: #include <stdio.h>
9: #include "build0.h"
10:
11: #define VERSION "1.5"
12: #define DEFPAGER "exec more -d"
13:
14: /* External. */
15: extern char *getenv();
16:
17: /* Forward. */
18: int lcdir();
19: void mycls();
20: void tour();
21:
22: /* Global. */
23: char *pager;
24: int ttyflag;
25:
26: main(argc, argv) int argc; char *argv[];
27: {
28: if (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'V')
29: fprintf(stderr, "%s: V%s\n", argv[0], VERSION);
30: ttyflag = isatty(fileno(stdout));
31: if ((pager = getenv("PAGER")) == NULL || *pager == '\0')
32: pager = DEFPAGER;
33: if (!ttyflag || yes_no("Would you like an introductory tour of COHERENT"))
34: tour();
35: exit(0);
36: }
37:
38: /*
39: * List the contents of a directory.
40: * Flush stdout in case output is redirected.
41: * If pflag is true (big directory), pipe output through PAGER.
42: */
43: int
44: lcdir(dir, msg, pflag) char *dir, *msg; int pflag;
45: {
46: mycls(1);
47: printf(msg);
48: fflush(stdout);
49: if (ttyflag && pflag)
50: sprintf(cmd, "lc %s | %s", dir, pager);
51: else
52: sprintf(cmd, "lc %s", dir);
53: return sys(cmd, S_IGNORE);
54: }
55:
56: /* Print newlines if stdout is redirected; otherwise, clear the screen. */
57: void
58: mycls(flag)
59: {
60: if (ttyflag)
61: cls(flag);
62: else
63: printf("\n\n");
64: }
65:
66: /* Take a walk on the Boardwalk... */
67: void
68: tour()
69: {
70: mycls(0);
71: /* Startup and shutdown. */
72: printf(
73: "When you boot your computer system (by turning on the power,\n"
74: "by hitting the reset switch, or by typing <Ctrl><Alt><Del>),\n"
75: "the bootstrap program by default runs the operating system on\n"
76: "the partition marked as active. To boot an operating system\n"
77: "system on a different partition, type a partition number (0 to 7)\n"
78: "when the boot tries to read the floppy disk.\n"
79: "\n"
80: "When you boot COHERENT, it starts up in single-user mode.\n"
81: "It automatically executes the commands in the file /etc/brc,\n"
82: "which typically check COHERENT filesystems for consistency\n"
83: "using /etc/fsck. If the filesystems check without errors,\n"
84: "the system goes into multi-user mode, automatically executing\n"
85: "the commands in the file /etc/rc. You can interrupt file system\n"
86: "checking by typing <Ctrl-C>.\n"
87: "\n"
88: "To shut down COHERENT from multi-user mode, log in as root and\n"
89: "execute /etc/shutdown to return the system to single-user mode.\n"
90: "Then type sync before rebooting or turning off the power.\n"
91: "Your COHERENT filesystems may be damaged if you reboot or\n"
92: "power down without following this procedure.\n"
93: "\n"
94: );
95:
96: /* Root. */
97: lcdir("/",
98: "Now we will take a quick tour of your COHERENT filesystem.\n"
99: "The root directory / contains:\n\n",
100: 0);
101: printf(
102: "\n"
103: "COHERENT executes file /.profile when the superuser root logs in.\n"
104: "File /coherent (linked to /autoboot) is the COHERENT system image.\n"
105: "Empty directories /f0 and /f1 are used for mounting diskettes.\n"
106: "Empty directory /mnt is used for mounting other devices.\n"
107: "The filesystem checking program /etc/fsck uses empty directory\n"
108: "/lost+found if it finds a problem with the root filesystem.\n"
109: "COHERENT uses directory /tmp for temporary files; it removes files\n"
110: "in /tmp automatically when the system goes multiuser (via /etc/rc).\n"
111: "\n"
112: );
113:
114: /* /bin. */
115: mycls(1);
116: printf(
117: "Directory /bin contains executable programs (commands).\n"
118: "Some of the most commonly used commands are:\n"
119: "\tbc\tinteractive calculator with arbitrary precision\n"
120: "\tcat\tconcatenate/print files\n"
121: "\tcc\tC compiler\n"
122: "\tcmp\tcompare files\n"
123: "\tcp\tcopy files\n"
124: "\tcpdir\tcopy directory hierarchy\n"
125: "\tdiff\tsummarize differences between files\n"
126: "\tdos\ttransfer files to or from MS-DOS\n"
127: "\ted\tinteractive line-oriented text editor\n"
128: "\tegrep\textended pattern search\n"
129: "\thelp\tprint concise command description\n"
130: "\tlc\tcategorize files in a directory\n"
131: "\tls\tlist directory contents\n"
132: "\tmail\tcomputer mail\n"
133: "\tps\tprint process status\n"
134: "\trm\tremove files\n"
135: "\trmdir\tremove directories\n"
136: "\tscat\tsegmented concatenation\n"
137: "\tsort\tsort lines of text\n"
138: "\twc\tcount words, lines, characters in a file\n"
139: "The next screen lists all the commands in /bin.\n"
140: );
141: lcdir("/bin", "", 1);
142: putchar('\n');
143:
144: /* /conf. */
145: lcdir("/conf", "Directory /conf contains:\n\n", 0);
146: putchar('\n');
147:
148: /* /conf/kbd. */
149: lcdir ("/conf/kbd",
150: "Subdirectory /conf/kbd contains keyboard support:\n\n",
151: 0);
152: printf(
153: "\n"
154: "You can change the operation of various keys on your keyboard by changing\n"
155: "the appropriate file in /conf/kbd and running /etc/kbdinstall.\n"
156: );
157:
158: /* /dev. */
159: lcdir("/dev", "Directory /dev contains COHERENT devices:\n\n", 0);
160: putchar('\n');
161: mycls(1);
162: printf(
163: "Some important devices are:\n"
164: "\t/dev/at*\tCooked (block-by-block) hard disk partitions\n"
165: "\t/dev/com*\tSerial port devices (COM1, COM2, COM3, COM4)\n"
166: "\t/dev/console\tConsole terminal\n"
167: "\t/dev/f*\t\tFloppy disk devices\n"
168: "\t/dev/lpt*\tParallel port devices (LPT1, LPT2 and LPT3)\n"
169: "\t/dev/null\tBit bucket\n"
170: "\t/dev/rat*\tRaw (character-by-character) hard disk partitions\n"
171: "\t/dev/rf*\tRaw (character-by-character) floppy disk devices\n"
172: "\n"
173: );
174:
175: /* /drv. */
176: lcdir("/drv", "Directory /drv contains loadable device drivers:\n\n", 0);
177: putchar('\n');
178:
179: /* /etc. */
180: lcdir("/etc",
181: "Directory /etc contains files and programs used in system administration:\n\n",
182: 0);
183: putchar('\n');
184: mycls(1);
185: printf(
186: "Files of particular interest in /etc include:\n"
187: "\t/etc/brc\tExecuted when the system comes up single-user\n"
188: "\t/etc/group\tDefines user group membership information\n"
189: "\t/etc/passwd\tDefines user login information\n"
190: "\t/etc/profile\tExecuted for each shell\n"
191: "\t/etc/rc\t\tExecuted when the system comes up multi-user\n"
192: "\t/etc/ttys\tDefines status of terminals attached to system\n"
193: "\n"
194: );
195:
196: /* /lib. */
197: lcdir("/lib",
198: "Directory /lib contains libraries and C compiler phases:\n\n",
199: 0);
200: putchar('\n');
201:
202: /* /usr. */
203: lcdir("/usr",
204: "Directory /usr contains a number of subdirectories:\n\n",
205: 0);
206: printf(
207: "\n"
208: "\t/usr/adm\tSystem administration files\n"
209: "\t/usr/bin\tAdditional COHERENT commands\n"
210: "\t/usr/dict\tDictionary for spell command\n"
211: "\t/usr/games\tGames\n"
212: "\t/usr/include\tHeader files\n"
213: "\t/usr/lib\tAdditional libraries\n"
214: "\t/usr/man\tCOHERENT online manual pages\n"
215: "\t/usr/msgs\tSystem-wide messages\n"
216: "\t/usr/pub\tPublic information\n"
217: "\t/usr/spool\tWork area for daemon processes\n"
218: "\t/usr/src\tSome sources and sample programs\n"
219: "\t/usr/tmp\tTemporary file directory\n"
220: "\n"
221: );
222:
223: /* File types. */
224: mycls(1);
225: printf(
226: "COHERENT filenames often contain an extension following '.' which\n"
227: "indicates the contents of the file. Some common extensions are:\n"
228: "\n"
229: "\t.a\tarchive (or library) in ar format\n"
230: "\t.b\tbc source\n"
231: "\t.c\tC source\n"
232: "\t.h\tC header\n"
233: "\t.i\tC intermediate file (cpp output)\n"
234: "\t.l\tlex source\n"
235: "\t.m\tmacro assembler source\n"
236: "\t.o\tobject file (unlinked)\n"
237: "\t.r\tnroff or troff input\n"
238: "\t.s\tassembler source\n"
239: "\t.tar\tarchive in tar format\n"
240: "\t.tar.Z\tcompressed tar-format archive, cf. tar, compress\n"
241: "\t.tmp\ttemporary file\n"
242: "\t.y\tyacc source\n"
243: "\t.Z\tcompressed file, cf. compress/uncompress\n"
244: "\n"
245: );
246:
247: /* Diskettes. */
248: mycls(1);
249: printf(
250: "Some commonly used diskette device names and formats are:\n"
251: "\tDevice name Sectors/track Heads Sectors Bytes Format\n"
252: "\t/dev/f9a0 9 2 720 360 KB 5.25\"\n"
253: "\t/dev/fqa0 9 2 1440 720 KB 3.5\"\n"
254: "\t/dev/fha0 15 2 2400 1.2 MB 5.25\"\n"
255: "\t/dev/fva0 18 2 2880 1.44 MB 3.5\"\n"
256: "Device names ending in '0' and '1' indicate drives A: and B:.\n"
257: "\n"
258: );
259: mycls(1);
260: printf(
261: "To use a floppy disk with COHERENT, you must:\n"
262: "\t(1) format it with /etc/fdformat,\n"
263: "\t(2) check it for bad blocks with /etc/badscan,\n"
264: "\t(3) build an empty filesystem on it with /etc/mkfs,\n"
265: "\t(4) mount it with /bin/mount or /etc/mount,\n"
266: "\t(5) copy files to or from it, e.g. with /bin/cp or /bin/cpdir,\n"
267: "and\t(6) unmount it with /bin/umount or /etc/umount.\n"
268: "\n"
269: "For example, to copy directory /dir to a 5.25\" high density diskette in A:\n"
270: "\t/etc/fdformat /dev/fha0\n"
271: "\t/etc/badscan -o /tmp/proto /dev/fha0 2400\n"
272: "\t/etc/mkfs /dev/fha0 /tmp/proto\n"
273: "\t/etc/mount /dev/fha0 /f0\n"
274: "\tcpdir -vd /dir /f0/dir\n"
275: "\t/etc/umount /dev/fha0\n"
276: "/bin/mount and /bin/umount provide handy abbreviations for mount commands.\n"
277: "\n"
278: );
279:
280: /* Done. */
281: mycls(1);
282: printf(
283: "This concludes your brief introduction to COHERENT.\n"
284: "To see this introduction again, type \"/etc/coh_intro\".\n"
285: "To create a file with this information, type \"/etc/coh_intro >/tmp/tour\".\n"
286: "\n"
287: );
288: }
289:
290: /* end of coh_intro.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.