summaryrefslogtreecommitdiff
path: root/usr.bin/learn
diff options
context:
space:
mode:
authorIan Darwin <ian@cvs.openbsd.org>1998-09-28 16:01:59 +0000
committerIan Darwin <ian@cvs.openbsd.org>1998-09-28 16:01:59 +0000
commit1083c89a4423b36811471177bbe3abe0b50f3235 (patch)
tree46432d298508cad92b9cdf3320616c3824573d38 /usr.bin/learn
parent5c33bfa47b213f93498fe8c5dc17f90f4d116c06 (diff)
import BTL learn(1) lessons/files
Diffstat (limited to 'usr.bin/learn')
-rw-r--r--usr.bin/learn/lib/files/CHANGELOG3
-rw-r--r--usr.bin/learn/lib/files/L02
-rw-r--r--usr.bin/learn/lib/files/L0.1a20
-rw-r--r--usr.bin/learn/lib/files/L0.1aa32
-rw-r--r--usr.bin/learn/lib/files/L0.1b28
-rw-r--r--usr.bin/learn/lib/files/L0.1c27
-rw-r--r--usr.bin/learn/lib/files/L0.1d30
-rw-r--r--usr.bin/learn/lib/files/L1.1a12
-rw-r--r--usr.bin/learn/lib/files/L1.2a15
-rw-r--r--usr.bin/learn/lib/files/L1.2b25
-rw-r--r--usr.bin/learn/lib/files/L10.1a21
-rw-r--r--usr.bin/learn/lib/files/L10.2a15
-rw-r--r--usr.bin/learn/lib/files/L10.2b18
-rw-r--r--usr.bin/learn/lib/files/L10.3a15
-rw-r--r--usr.bin/learn/lib/files/L10.3b12
-rw-r--r--usr.bin/learn/lib/files/L10.3c15
-rw-r--r--usr.bin/learn/lib/files/L10.3d23
-rw-r--r--usr.bin/learn/lib/files/L11.1a42
-rw-r--r--usr.bin/learn/lib/files/L11.2a16
-rw-r--r--usr.bin/learn/lib/files/L11.2b26
-rw-r--r--usr.bin/learn/lib/files/L11.3a17
-rw-r--r--usr.bin/learn/lib/files/L11.3b13
-rw-r--r--usr.bin/learn/lib/files/L11.3c22
-rw-r--r--usr.bin/learn/lib/files/L12.1a42
-rw-r--r--usr.bin/learn/lib/files/L12.2a25
-rw-r--r--usr.bin/learn/lib/files/L12.2b27
-rw-r--r--usr.bin/learn/lib/files/L12.2c29
-rw-r--r--usr.bin/learn/lib/files/L12.3a21
-rw-r--r--usr.bin/learn/lib/files/L12.3b18
-rw-r--r--usr.bin/learn/lib/files/L12.3c22
-rw-r--r--usr.bin/learn/lib/files/L13.1a16
-rw-r--r--usr.bin/learn/lib/files/L13.1b19
-rw-r--r--usr.bin/learn/lib/files/L13.1c24
-rw-r--r--usr.bin/learn/lib/files/L13.1d17
-rw-r--r--usr.bin/learn/lib/files/L13.1e16
-rw-r--r--usr.bin/learn/lib/files/L13.1f23
-rw-r--r--usr.bin/learn/lib/files/L13.1g20
-rw-r--r--usr.bin/learn/lib/files/L2.1a21
-rw-r--r--usr.bin/learn/lib/files/L2.2a17
-rw-r--r--usr.bin/learn/lib/files/L2.2b24
-rw-r--r--usr.bin/learn/lib/files/L3.1a34
-rw-r--r--usr.bin/learn/lib/files/L3.2a23
-rw-r--r--usr.bin/learn/lib/files/L3.2b32
-rw-r--r--usr.bin/learn/lib/files/L3.3a18
-rw-r--r--usr.bin/learn/lib/files/L3.3b23
-rw-r--r--usr.bin/learn/lib/files/L4.1a17
-rw-r--r--usr.bin/learn/lib/files/L4.2a19
-rw-r--r--usr.bin/learn/lib/files/L4.2b21
-rw-r--r--usr.bin/learn/lib/files/L4.3a20
-rw-r--r--usr.bin/learn/lib/files/L4.3b20
-rw-r--r--usr.bin/learn/lib/files/L4.3c16
-rw-r--r--usr.bin/learn/lib/files/L5.1a34
-rw-r--r--usr.bin/learn/lib/files/L5.1b20
-rw-r--r--usr.bin/learn/lib/files/L5.1c26
-rw-r--r--usr.bin/learn/lib/files/L5.1d14
-rw-r--r--usr.bin/learn/lib/files/L5.1e29
-rw-r--r--usr.bin/learn/lib/files/L6.1a33
-rw-r--r--usr.bin/learn/lib/files/L6.1b14
-rw-r--r--usr.bin/learn/lib/files/L6.1c13
-rw-r--r--usr.bin/learn/lib/files/L6.1d16
-rw-r--r--usr.bin/learn/lib/files/L6.1e19
-rw-r--r--usr.bin/learn/lib/files/L6.2a34
-rw-r--r--usr.bin/learn/lib/files/L6.2b22
-rw-r--r--usr.bin/learn/lib/files/L7.1a38
-rw-r--r--usr.bin/learn/lib/files/L7.2a30
-rw-r--r--usr.bin/learn/lib/files/L7.2b32
-rw-r--r--usr.bin/learn/lib/files/L7.3a28
-rw-r--r--usr.bin/learn/lib/files/L7.3b17
-rw-r--r--usr.bin/learn/lib/files/L7.3c23
-rw-r--r--usr.bin/learn/lib/files/L8.1a25
-rw-r--r--usr.bin/learn/lib/files/L8.2a16
-rw-r--r--usr.bin/learn/lib/files/L8.2b23
-rw-r--r--usr.bin/learn/lib/files/L8.2c27
-rw-r--r--usr.bin/learn/lib/files/L9.1a36
-rw-r--r--usr.bin/learn/lib/files/L9.2a30
-rw-r--r--usr.bin/learn/lib/files/L9.2b22
-rw-r--r--usr.bin/learn/lib/files/L9.2c26
77 files changed, 1720 insertions, 0 deletions
diff --git a/usr.bin/learn/lib/files/CHANGELOG b/usr.bin/learn/lib/files/CHANGELOG
new file mode 100644
index 00000000000..6747934811a
--- /dev/null
+++ b/usr.bin/learn/lib/files/CHANGELOG
@@ -0,0 +1,3 @@
+Fri Sep 25 19:31:00 MDT 1998 ian
+Split L0.1a into two so each fits in a normal 24x80 xterm.
+Removed @ and #, replacing with geneirc ERASE and KILL.
diff --git a/usr.bin/learn/lib/files/L0 b/usr.bin/learn/lib/files/L0
new file mode 100644
index 00000000000..bab7601e708
--- /dev/null
+++ b/usr.bin/learn/lib/files/L0
@@ -0,0 +1,2 @@
+#next
+0.1a 10
diff --git a/usr.bin/learn/lib/files/L0.1a b/usr.bin/learn/lib/files/L0.1a
new file mode 100644
index 00000000000..98a9b33394f
--- /dev/null
+++ b/usr.bin/learn/lib/files/L0.1a
@@ -0,0 +1,20 @@
+$ more L0.1a
+#print
+This course will help you learn about basic file
+handling commands. You should first understand
+the special characters ERASE and KILL:
+ ERASE cancels the previous character typed;
+ KILL cancels the line being typed.
+ERASE and KILL are mapped to two non-text keyboard characters.
+ERASE is usually one of CTRL/H (which means hold down the CTRL or
+Control key WHILE you type the letter H) or the DEL (Delete) key.
+KILL is mapped to some character like CTRL/U.
+
+Type the stty command at the prompt. Examine its output.
+Type "ready" (without the quotes) when you've finished.
+#copyin
+#user
+#uncopyin
+#log
+#next
+0.1aa 5
diff --git a/usr.bin/learn/lib/files/L0.1aa b/usr.bin/learn/lib/files/L0.1aa
new file mode 100644
index 00000000000..f52d54d92b7
--- /dev/null
+++ b/usr.bin/learn/lib/files/L0.1aa
@@ -0,0 +1,32 @@
+#print
+We just saw how to use "stty" to show the ERASE and KILL characters.
+If you make a typing mistake, you can use these characters to
+correct it before you finish the line and the computer won't
+ever know about it. For example, what will the
+computer really receive if you type
+
+st<ERASE>he<KILL>
+thf<ERASE>e
+
+at it? Reply "answer WORD" where WORD is the word
+as it will be interpreted. For example, if
+you think it will get 'dog', type
+
+answer dog
+
+If you think it will receive the word "bark", type
+
+answer bark
+
+Don't forget to leave a space between "answer" and the word
+and to hit RETURN at the end of the line.
+Don't use any quotation marks in your answer.
+#copyin
+#user
+#uncopyin
+#match the
+#bad answerthe
+Leave a space between "answer" and "the".
+#log
+#next
+0.1b 5
diff --git a/usr.bin/learn/lib/files/L0.1b b/usr.bin/learn/lib/files/L0.1b
new file mode 100644
index 00000000000..14c0b30eb88
--- /dev/null
+++ b/usr.bin/learn/lib/files/L0.1b
@@ -0,0 +1,28 @@
+#print
+You should also understand a few simple commands.
+When UNIX types a "$" at you, you can type a command.
+For example, if you type "date" the computer will tell
+you the current date and time. If you see "$" and type "who",
+UNIX will tell you who is logged on at present. There are
+many other commands, too. You must type a RETURN at the
+end of each command line.
+
+Try the "date" command now: find out what
+date it is, and after the computer has responded, type "ready".
+And don't forget the RETURN!
+#copyin
+#user
+#uncopyin
+grep date .copy >/dev/null
+#bad day
+You were supposed to type "date" (without quotes).
+The computer is very intolerant of spelling errors.
+Try again.
+#bad "date"
+Don't type those quote marks. Try again.
+#bad time
+The time command does not tell you the wall-clock time.
+Try date next time.
+#log
+#next
+0.1c 5
diff --git a/usr.bin/learn/lib/files/L0.1c b/usr.bin/learn/lib/files/L0.1c
new file mode 100644
index 00000000000..938f51e18ac
--- /dev/null
+++ b/usr.bin/learn/lib/files/L0.1c
@@ -0,0 +1,27 @@
+#print
+The computer keeps track of information in "files."
+A file might contain a letter to a friend,
+or a memo (or part of it) that you are typing,
+or any number of other things.
+You can list the names of your files
+by typing the command "ls".
+Try "ls" now; then type "ready".
+Remember that each command must go on a separate line
+and each line must be ended with RETURN.
+#create letter
+Dear John:
+
+I'm terribly sorry...
+#create memo
+This is a memo.
+#create memo1
+Another memo.
+#copyin
+#user
+#uncopyin
+grep '^ls' .copy >/dev/null
+#bad "ls"
+Don't type the quotes, please. Try again.
+#log
+#next
+0.1d 10
diff --git a/usr.bin/learn/lib/files/L0.1d b/usr.bin/learn/lib/files/L0.1d
new file mode 100644
index 00000000000..a9e48d31912
--- /dev/null
+++ b/usr.bin/learn/lib/files/L0.1d
@@ -0,0 +1,30 @@
+#print
+File names are essentially arbitrary,
+although usually one names files sensibly:
+the files that make up a memo
+might be called "memo1", "memo2", etc.
+
+The contents of a file are also entirely up to you:
+for example, a file named "memo" could contain
+
+ Analysis of Irregular Statistics
+ John B. Pencilpusher
+
+ Bell Laboratories, Murray Hill, NJ
+ ....
+
+To get at the information in a file,
+you have to use the file name,
+which in this case is "memo".
+
+Is there a difference between the name of a file
+and the contents of a file?
+Type "yes" or "no".
+#copyin
+#user
+#uncopyin
+#match yes
+#log
+#next
+1.1a 10
+1.2a 5
diff --git a/usr.bin/learn/lib/files/L1.1a b/usr.bin/learn/lib/files/L1.1a
new file mode 100644
index 00000000000..26a5d9a199a
--- /dev/null
+++ b/usr.bin/learn/lib/files/L1.1a
@@ -0,0 +1,12 @@
+#print
+The "ls" command will list the names of the files
+in your directory. Is there a file named "junk"
+present? Find out and then type "yes" or "no".
+#copyin
+#user
+#uncopyin
+#match no
+#log
+#next
+2.1a 10
+2.2a 5
diff --git a/usr.bin/learn/lib/files/L1.2a b/usr.bin/learn/lib/files/L1.2a
new file mode 100644
index 00000000000..93d258f0ee8
--- /dev/null
+++ b/usr.bin/learn/lib/files/L1.2a
@@ -0,0 +1,15 @@
+#print
+Use the "ls" command to determine if there is a file
+named for a state in the current directory.
+Find out and type "yes" or "no".
+(Don't use the list you got earlier - I've changed things.)
+#create texas
+dallas, houston, etc.
+#copyin
+#user
+#uncopyin
+#match yes
+#log
+#next
+2.1a 10
+2.2a 5
diff --git a/usr.bin/learn/lib/files/L1.2b b/usr.bin/learn/lib/files/L1.2b
new file mode 100644
index 00000000000..f8017405282
--- /dev/null
+++ b/usr.bin/learn/lib/files/L1.2b
@@ -0,0 +1,25 @@
+#print
+You can use the "ls" command to find out how
+many files you have in your directory.
+How many files are there in the current
+directory now? Make another list - the list of files
+that you made before is no longer right because I added
+some files to the directory. When you find out
+how many files there are in this directory, type
+"answer N" where N is the number of files.
+#create a1
+file a1
+#create a2
+file a2
+#create X1
+file a1
+#copyin
+#user
+#uncopyin
+ls | %s/../lcount >X1
+tail -1 .copy >X2
+#cmp X1 X2
+#log
+#next
+2.1a 10
+2.2a 5
diff --git a/usr.bin/learn/lib/files/L10.1a b/usr.bin/learn/lib/files/L10.1a
new file mode 100644
index 00000000000..a7eeec79bcc
--- /dev/null
+++ b/usr.bin/learn/lib/files/L10.1a
@@ -0,0 +1,21 @@
+#print
+When you are done with something, you will want to know
+how to get rid of the file it is on. The command
+for that is "rm" (remove). For example
+ rm junk
+throws away the file named "junk". Once it
+is gone, it is really gone - there is no way
+to "undo" a remove command. Hence this command
+should be used with caution.
+In this directory there is one file named
+for a baseball player. Remove it.
+Then type "ready".
+#create kernighan
+#create yastrzemski
+#user
+test ! -r yastrzemski && test -r kernighan
+#log
+#next
+11.1a 10
+11.2a 5
+11.3a 2
diff --git a/usr.bin/learn/lib/files/L10.2a b/usr.bin/learn/lib/files/L10.2a
new file mode 100644
index 00000000000..e76c627aa58
--- /dev/null
+++ b/usr.bin/learn/lib/files/L10.2a
@@ -0,0 +1,15 @@
+#print
+The way to get rid of a file you are finished with
+is with the "rm" (remove) command. For example,
+ rm junk
+will get rid of the file named "junk".
+In this directory there is a file named "harry" -
+remove it.
+Then type "ready".
+#create harry
+#user
+test ! -r harry
+#log
+#next
+10.2b 5
+10.3a 2
diff --git a/usr.bin/learn/lib/files/L10.2b b/usr.bin/learn/lib/files/L10.2b
new file mode 100644
index 00000000000..08af6c043e6
--- /dev/null
+++ b/usr.bin/learn/lib/files/L10.2b
@@ -0,0 +1,18 @@
+#print
+You can remove several files at once with the "rm" command.
+And you can use the familiar "*" and "?" characters
+to abbreviate several file names. BUT BE CAREFUL -
+"rm" is irreversible, and it is all too easy to type something
+like "rm *" and get rid of all your files.
+In this directory are two files named
+"part1" and "part2".
+Remove both; then type "ready".
+#create part1
+#create part2
+#user
+test ! -r part1 && test ! -r part2
+#log
+#next
+11.1a 10
+11.2a 5
+11.3a 2
diff --git a/usr.bin/learn/lib/files/L10.3a b/usr.bin/learn/lib/files/L10.3a
new file mode 100644
index 00000000000..b443cad71dc
--- /dev/null
+++ b/usr.bin/learn/lib/files/L10.3a
@@ -0,0 +1,15 @@
+#print
+When you are done with something, you will want to
+get rid of the file containing it. The command for that
+is "rm" (remove). For example
+ rm junk
+throws away the file named "junk". Try that -
+there's a file named "junk" in this directory, as you can
+verify by doing an "ls". Try another "ls" after the "rm junk";
+then type "ready".
+#create junk
+#user
+test ! -r junk
+#log
+#next
+10.3b 2
diff --git a/usr.bin/learn/lib/files/L10.3b b/usr.bin/learn/lib/files/L10.3b
new file mode 100644
index 00000000000..516b558e34c
--- /dev/null
+++ b/usr.bin/learn/lib/files/L10.3b
@@ -0,0 +1,12 @@
+#print
+Often you will use "ls" with "rm"
+to first find the name of a file, and then remove it.
+This directory contains one file whose name begins with "g".
+Find out what it is and remove it.
+Then type "ready".
+#create george
+#user
+test ! -r george
+#log
+#next
+10.3c 2
diff --git a/usr.bin/learn/lib/files/L10.3c b/usr.bin/learn/lib/files/L10.3c
new file mode 100644
index 00000000000..6d5c108ce06
--- /dev/null
+++ b/usr.bin/learn/lib/files/L10.3c
@@ -0,0 +1,15 @@
+#print
+You can remove several files at once with the
+"rm" command; for example,
+ rm tom dick harry
+will remove the files "tom", "dick", and "harry".
+There are two files in this directory named
+for birds: get rid of both.
+Then type "ready".
+#create eagle
+#create bluejay
+#user
+test ! -r eagle && test ! -r bluejay
+#log
+#next
+10.3d 2
diff --git a/usr.bin/learn/lib/files/L10.3d b/usr.bin/learn/lib/files/L10.3d
new file mode 100644
index 00000000000..4b68bea357e
--- /dev/null
+++ b/usr.bin/learn/lib/files/L10.3d
@@ -0,0 +1,23 @@
+#print
+You can also use "*" and "?" with
+the "rm" command. BUT BE VERY CAREFUL
+since, for example, "rm *" will throw away
+ALL the files in a directory.
+In this directory are some files named
+chunk1, chunk2, chunk3 and chunk4.
+Get rid of them. Then type "ready".
+#create X1
+#
+ls >X2
+#create chunk1
+#create chunk2
+#create chunk3
+#create chunk4
+#user
+ls >X1
+#cmp X1 X2
+#log
+#next
+11.1a 10
+11.2a 5
+11.3a 2
diff --git a/usr.bin/learn/lib/files/L11.1a b/usr.bin/learn/lib/files/L11.1a
new file mode 100644
index 00000000000..47e4e53a7fb
--- /dev/null
+++ b/usr.bin/learn/lib/files/L11.1a
@@ -0,0 +1,42 @@
+#print
+To create a second copy of a file, the easiest
+way is to use the "cp" (copy) command.
+If you tell the computer
+ cp x y
+a copy of file "x" is made and named "y".
+Note that this is similar to "mv" in that a new
+file named "y" appears, but the difference is
+that the old file is not removed.
+(If there was already a file named "y", though, the
+old contents are lost; be careful.)
+
+In this directory there is a file which has
+a five letter name whose first four letters
+are "part".
+Print it out; it will tell you to copy
+it and what to call the copy.
+Do that and then type "ready".
+#create X1
+#create george
+#create part00
+this is not the right file and you shouldn't
+have printed it. Use
+ part?
+not
+ part*
+in this example.
+#create part3
+This is the file "part3". I hope you
+used a command like
+ ls part?
+or
+ cat part?
+to find it.
+Make a copy of this file on file "george".
+#user
+#cmp george part3
+#log
+#next
+12.1a 10
+12.2a 5
+12.3a 2
diff --git a/usr.bin/learn/lib/files/L11.2a b/usr.bin/learn/lib/files/L11.2a
new file mode 100644
index 00000000000..7c397e7746e
--- /dev/null
+++ b/usr.bin/learn/lib/files/L11.2a
@@ -0,0 +1,16 @@
+#print
+To make a new copy of a file, the easiest
+way is to use the "cp" command.
+If you type
+ cp x y
+a copy of file "x" is made and named "y".
+This directory contains a file named "george";
+make a copy named "steve".
+Then type "ready".
+#create george
+this is file george
+#user
+#cmp steve george
+#log
+#next
+11.2b 5
diff --git a/usr.bin/learn/lib/files/L11.2b b/usr.bin/learn/lib/files/L11.2b
new file mode 100644
index 00000000000..f4154e99111
--- /dev/null
+++ b/usr.bin/learn/lib/files/L11.2b
@@ -0,0 +1,26 @@
+#print
+Contrast
+ cp old new
+with
+ mv old new
+as commands; both cause "new" to appear,
+but "cp" does not remove "old".
+Both, by the way, destroy anything
+that happened to be around named "new".
+There is a file in this directory
+whose name ends in "x". Use "ls"
+with the "*x" construction to find its name;
+then copy it to file "new", and type "ready".
+#create new
+old new
+#create pix
+new new
+#create xip
+nothing
+#user
+#cmp pix new
+#log
+#next
+12.1a 10
+12.2a 5
+12.3a 2
diff --git a/usr.bin/learn/lib/files/L11.3a b/usr.bin/learn/lib/files/L11.3a
new file mode 100644
index 00000000000..e019f83a078
--- /dev/null
+++ b/usr.bin/learn/lib/files/L11.3a
@@ -0,0 +1,17 @@
+#print
+To make a copy of a file, you can use the
+"cp" (copy) command. For example
+ cp old new
+will make a copy of file "old", named "new".
+This directory contains a file named "old";
+try the "cp" command to make a file named "new".
+Print the file to check on the copy.
+When done, type "ready".
+#create old
+The Brooklyn Museum is at 188 Eastern Parkway,
+Brooklyn, NY 11238.
+#user
+#cmp old new
+#log
+#next
+11.3b 2
diff --git a/usr.bin/learn/lib/files/L11.3b b/usr.bin/learn/lib/files/L11.3b
new file mode 100644
index 00000000000..9b3b47b481d
--- /dev/null
+++ b/usr.bin/learn/lib/files/L11.3b
@@ -0,0 +1,13 @@
+#print
+Now there is a file named "good"
+in this directory. Make a copy named "better",
+then type ready.
+#create good
+This file has
+three lines
+in it.
+#user
+#cmp good better
+#log
+#next
+11.3c 2
diff --git a/usr.bin/learn/lib/files/L11.3c b/usr.bin/learn/lib/files/L11.3c
new file mode 100644
index 00000000000..a76c5515ae0
--- /dev/null
+++ b/usr.bin/learn/lib/files/L11.3c
@@ -0,0 +1,22 @@
+#print
+This is a little trickier. The directions
+for this step are in a file whose
+name begins with "p". Print that file;
+it will tell you what to do. Then type "ready".
+#create delaware
+narrowsburg
+port jervis
+delaware water gap
+easton
+trenton
+philadelphia
+#create pub
+Make a copy of the file "delaware" which is
+named "hudson".
+#user
+#cmp delaware hudson
+#log
+#next
+12.1a 10
+12.2a 5
+12.3a 2
diff --git a/usr.bin/learn/lib/files/L12.1a b/usr.bin/learn/lib/files/L12.1a
new file mode 100644
index 00000000000..5cd4f7c3d54
--- /dev/null
+++ b/usr.bin/learn/lib/files/L12.1a
@@ -0,0 +1,42 @@
+#print
+Another very useful command is the command
+ diff x y
+which compares two files. It will not print
+any output if the two files are the same, but
+if the files are different it will print
+out the lines that are changed in the two files,
+indicating the lines from the first file (x) by a leading "<"
+and the lines from the second file (y) by a leading ">".
+There are two files in this directory named "old" and "new".
+Why don't you first print both files, and then
+try using "diff" to compare them? Suppose the files
+were hundreds of lines long, and you needed to know
+the single difference - do you see how valuable "diff" can be?
+As evidence that you did at least half of this,
+type "answer word" where "word" is the word added to the
+second file.
+#create new
+Four score and seven
+years ago our fathers
+brought forth on this
+continent a new nation,
+conceived in liberty
+and dedicated to the
+proposition that all
+men are created equal.
+#create old
+Four score and seven
+years ago our fathers
+brought forth on this
+continent a new nation,
+conceived in liberty
+and dedicated the
+proposition that all
+men are created equal.
+#copyin
+#user
+#uncopyin
+#match to
+#log
+#next
+13.1a
diff --git a/usr.bin/learn/lib/files/L12.2a b/usr.bin/learn/lib/files/L12.2a
new file mode 100644
index 00000000000..79ee4e19055
--- /dev/null
+++ b/usr.bin/learn/lib/files/L12.2a
@@ -0,0 +1,25 @@
+#print
+To compare two files, you can use the command
+"diff" (differences); the line
+ diff xx yy
+will compare the files xx and yy and tell you about
+any differences between them. If the files are the same,
+the command says nothing. Are the files
+"tom" and "dick" the same in this directory?
+Find out (print them if you feel insecure)
+and reply "yes" or "no".
+#create dick
+This stuff is not only in
+file tom but also
+in file dick
+#create tom
+This stuff is not only in
+file tom but also
+in file dick
+#copyin
+#user
+#uncopyin
+#match yes
+#log
+#next
+12.2b 5
diff --git a/usr.bin/learn/lib/files/L12.2b b/usr.bin/learn/lib/files/L12.2b
new file mode 100644
index 00000000000..bb462a83481
--- /dev/null
+++ b/usr.bin/learn/lib/files/L12.2b
@@ -0,0 +1,27 @@
+#print
+Now are the files "dick" and "harry" the same?
+Again reply "yes" or "no".
+If there are differences between files, "diff" prints
+the lines that are different, indicating those
+from the first file by "<" and those from
+the second file by ">".
+#create dick
+new york
+bridgeport
+new haven
+new london
+providence
+boston
+#create harry
+new york
+bridgeport
+new haven
+providence
+boston
+#copyin
+#user
+#uncopyin
+#match no
+#log
+#next
+12.2c 5
diff --git a/usr.bin/learn/lib/files/L12.2c b/usr.bin/learn/lib/files/L12.2c
new file mode 100644
index 00000000000..e3870bd1307
--- /dev/null
+++ b/usr.bin/learn/lib/files/L12.2c
@@ -0,0 +1,29 @@
+#print
+This directory contains two files named "old" and "new";
+What word is in one file but not the other? Find
+out. Reply "answer WORD" where WORD is that word.
+#create new
+Four score and seven
+years ago our fathers
+brought forth on this
+continent a new nation,
+conceived in liberty
+and dedicated to the
+proposition that all
+men are created equal.
+#create old
+Four score and seven
+years ago our fathers
+brought forth on this
+continent a new nation,
+conceived in liberty
+and dedicated the
+proposition that all
+men are created equal.
+#copyin
+#user
+#uncopyin
+#match to
+#log
+#next
+13.1a
diff --git a/usr.bin/learn/lib/files/L12.3a b/usr.bin/learn/lib/files/L12.3a
new file mode 100644
index 00000000000..4ebd5920669
--- /dev/null
+++ b/usr.bin/learn/lib/files/L12.3a
@@ -0,0 +1,21 @@
+#print
+A very useful command is the command
+ diff x y
+which compares the two files x and y and tells
+you any differences between the files. If the files
+are the same, it says nothing. To test that,
+copy file "george" onto file "harry";
+then say
+ diff george harry
+to verify that the files are the same.
+#create george
+london bridge
+is falling down.
+#copyin
+#user
+#uncopyin
+#match diff george harry
+#match diff harry george
+#log
+#next
+12.3b 2
diff --git a/usr.bin/learn/lib/files/L12.3b b/usr.bin/learn/lib/files/L12.3b
new file mode 100644
index 00000000000..536b593b9f4
--- /dev/null
+++ b/usr.bin/learn/lib/files/L12.3b
@@ -0,0 +1,18 @@
+#print
+Are the files "memo1" and "memo2" the same?
+If they are different, "diff" will print the
+lines that are not the same.
+Reply "yes" or "no".
+#create memo1
+A quick brown fox jumps over the lazy dog.
+We were away a year ago.
+#create memo2
+A quick brown fox jumps over the lazy dog.
+We were away a year ago.
+#copyin
+#user
+#uncopyin
+#match yes
+#log
+#next
+12.3c 2
diff --git a/usr.bin/learn/lib/files/L12.3c b/usr.bin/learn/lib/files/L12.3c
new file mode 100644
index 00000000000..e8afedebe79
--- /dev/null
+++ b/usr.bin/learn/lib/files/L12.3c
@@ -0,0 +1,22 @@
+#print
+Are the files "old" and "new" in this directory the same?
+Again, if they are not, "diff" will print out the differences
+marking the lines in the first file named by "<" and the
+lines in the second file by ">". Check the results of
+diff by printing the files. Then type "yes" or "no".
+#create new
+This file has three
+lines of text in
+it to read.
+and this has one more.
+#create old
+This file has three
+lines of text in
+it to read.
+#copyin
+#user
+#uncopyin
+#match no
+#log
+#next
+12.2c 5
diff --git a/usr.bin/learn/lib/files/L13.1a b/usr.bin/learn/lib/files/L13.1a
new file mode 100644
index 00000000000..2887447aa85
--- /dev/null
+++ b/usr.bin/learn/lib/files/L13.1a
@@ -0,0 +1,16 @@
+#print
+Let's do a quick review of the things covered
+in the files course. To begin, how many files
+are there in the current directory? Type "answer N",
+where N is the number that you found.
+#create X1
+#create X2
+#copyin
+#user
+#uncopyin
+ls | %s/../lcount >X1
+tail -1 .copy >X2
+#cmp X1 X2
+#log
+#next
+13.1b 5
diff --git a/usr.bin/learn/lib/files/L13.1b b/usr.bin/learn/lib/files/L13.1b
new file mode 100644
index 00000000000..1161cc9111e
--- /dev/null
+++ b/usr.bin/learn/lib/files/L13.1b
@@ -0,0 +1,19 @@
+#print
+There is a file in this directory whose name begins
+with 'z'. Do what it tells you to, then type "ready".
+#create X1
+#create X2
+#create zip
+Rename the file named "mary" to "joe".
+#create joe
+I am a file
+#
+rm -f mary
+ls >X1
+mv joe mary
+#user
+ls >X2
+#cmp X1 X2
+#log
+#next
+13.1c 5
diff --git a/usr.bin/learn/lib/files/L13.1c b/usr.bin/learn/lib/files/L13.1c
new file mode 100644
index 00000000000..8a5edf3b203
--- /dev/null
+++ b/usr.bin/learn/lib/files/L13.1c
@@ -0,0 +1,24 @@
+#print
+There are two files in this directory whose names begin with
+the letter 'r'. On what line do they differ?
+Type "answer N", where N is the line number where they
+first are different.
+#create ref
+This is a very short file
+which contains several lines
+some one of which will be changed
+in the other version, and your
+job is to find out which.
+#create refnew
+This is a very short file
+which contains several lines
+some one of which will be changed
+in the other version, and your
+job is to find out which.
+#copyin
+#user
+#uncopyin
+#match 3
+#log
+#next
+13.1d
diff --git a/usr.bin/learn/lib/files/L13.1d b/usr.bin/learn/lib/files/L13.1d
new file mode 100644
index 00000000000..dd55663dbd6
--- /dev/null
+++ b/usr.bin/learn/lib/files/L13.1d
@@ -0,0 +1,17 @@
+#print
+There are several files in this directory whose names
+begin with "easy". Remove them, then type "ready".
+#create X1
+#create X2
+#
+ls >X2
+#create easy1
+#create easyer
+#create easyrider
+#create easyenough
+#user
+ls >X1
+#cmp X1 X2
+#log
+#next
+13.1e
diff --git a/usr.bin/learn/lib/files/L13.1e b/usr.bin/learn/lib/files/L13.1e
new file mode 100644
index 00000000000..03b9b4c3210
--- /dev/null
+++ b/usr.bin/learn/lib/files/L13.1e
@@ -0,0 +1,16 @@
+#print
+This one is tougher than the last one. There are
+several files in this directory whose names
+begin with "hard". Remove them, then type "ready".
+#create X1
+#create X2
+#
+ls >X2
+cp X1 "hard 1"
+cp X1 "hard er"
+#user
+ls >X1
+#cmp X1 X2
+#log
+#next
+13.1f
diff --git a/usr.bin/learn/lib/files/L13.1f b/usr.bin/learn/lib/files/L13.1f
new file mode 100644
index 00000000000..d164bc937f4
--- /dev/null
+++ b/usr.bin/learn/lib/files/L13.1f
@@ -0,0 +1,23 @@
+#print
+Suppose you have two files named "dick" and "jane", and you
+want to interchange them, so that "dick" contains whatever
+was originally in "jane", and "jane" contains what was in "dick".
+Will this sequence of commands do the job?
+
+mv dick jane
+mv jane dick
+
+There are two files named "john" and "mary"
+in this directory, if you wish to experiment.
+When you have decided, type yes or no.
+#create john
+this is originally file john
+#create mary
+this is originally file mary
+#copyin
+#user
+#uncopyin
+#match no
+#log
+#next
+13.1g
diff --git a/usr.bin/learn/lib/files/L13.1g b/usr.bin/learn/lib/files/L13.1g
new file mode 100644
index 00000000000..5c348bf332a
--- /dev/null
+++ b/usr.bin/learn/lib/files/L13.1g
@@ -0,0 +1,20 @@
+#print
+Suppose that we really do want to interchange the contents
+of the files "dick" and "jane". One way to do it is
+to move the contents of "dick" into some temporary file,
+then move "jane" onto "dick" (which of course clobbers
+the old contents of "dick", but we saved them already),
+then finally to move the temporary copy of "dick" to
+"jane". There are two files named "dick" and "jane" in this
+directory. Interchange their contents, then type "ready".
+#create Ref
+short file for dick
+#create dick
+short file for dick
+#create jane
+another file for jane
+#create Ref1
+another file for jane
+#user
+cmp -s jane Ref && cmp -s dick Ref1
+#log
diff --git a/usr.bin/learn/lib/files/L2.1a b/usr.bin/learn/lib/files/L2.1a
new file mode 100644
index 00000000000..3d6a7a30ecf
--- /dev/null
+++ b/usr.bin/learn/lib/files/L2.1a
@@ -0,0 +1,21 @@
+#print
+The "mv" command changes the names of files.
+For example, "mv bob bill" changes the name
+of file "bob" to be "bill". If there was already
+a file named "bill", the old version is destroyed.
+
+There is a file in
+the current directory whose name begins with
+the letter "g", like "grant" or "grover".
+Find out what the file name really is, and
+then change that file to have the name "john".
+Then type "ready".
+#create george
+this should become john
+#user
+test -r john
+#log
+#next
+3.1a 10
+3.2a 5
+3.3a 2
diff --git a/usr.bin/learn/lib/files/L2.2a b/usr.bin/learn/lib/files/L2.2a
new file mode 100644
index 00000000000..b522ee08f7e
--- /dev/null
+++ b/usr.bin/learn/lib/files/L2.2a
@@ -0,0 +1,17 @@
+#print
+The "mv" command changes the names of files.
+For example, "mv thomas james" changes the
+name of the file "thomas" to be "james".
+
+There is a file in the current directory named
+"thomas". Change that file to have the
+name "james". Then type "ready".
+(The "mv" command, by the way, is like many
+UNIX commands in that it is silent unless there is an error.)
+#create thomas
+xx
+#user
+test -r james
+#log
+#next
+2.2b 5
diff --git a/usr.bin/learn/lib/files/L2.2b b/usr.bin/learn/lib/files/L2.2b
new file mode 100644
index 00000000000..e38143cea13
--- /dev/null
+++ b/usr.bin/learn/lib/files/L2.2b
@@ -0,0 +1,24 @@
+#print
+Now your directory contains a file with a name
+that starts with "a" (like "adam", "arthur", etc.).
+Find it and change its name to "martin".
+Then type "ready".
+By the way, if there was already a file around
+named "martin", the old version is clobbered
+by the new one.
+#create andrew
+stuff
+#user
+test -r martin
+#fail
+Do you remember that the "ls" command will
+tell you the names of the files in the current
+directory? Thus you can use "ls" to tell you
+what your file names are; and then you can use
+"mv" to change the name of the file
+beginning with "a" to "martin".
+#log
+#next
+3.1a 10
+3.2a 5
+3.3a 2
diff --git a/usr.bin/learn/lib/files/L3.1a b/usr.bin/learn/lib/files/L3.1a
new file mode 100644
index 00000000000..dfaabeac84f
--- /dev/null
+++ b/usr.bin/learn/lib/files/L3.1a
@@ -0,0 +1,34 @@
+#print
+The "cat" command prints the contents of one or more files.
+In fact, it is named "cat" as an abbreviation
+for "concatenate". To print the files named "dog"
+and "mouse" in succession, you could type either
+ cat dog
+ cat mouse
+or just
+ cat dog mouse
+If you print them with one command,
+the contents are printed in sequence with nothing
+between them.
+
+How many lines are there in all the files
+whose names begin with "b"? Find out, then type
+"answer N" where N is the total number of lines.
+#create ben
+the file ben has
+a total of three
+short lines.
+#create bernie
+this file has
+two lines.
+#create bruce
+only one line here.
+#copyin
+#user
+#uncopyin
+#match 6
+#log
+#next
+4.1a 10
+4.2a 5
+4.3a 2
diff --git a/usr.bin/learn/lib/files/L3.2a b/usr.bin/learn/lib/files/L3.2a
new file mode 100644
index 00000000000..593f8cc98e9
--- /dev/null
+++ b/usr.bin/learn/lib/files/L3.2a
@@ -0,0 +1,23 @@
+#print
+The command "cat" will print files. For example, you
+can print the file named "food" by typing "cat food".
+Your current directory has a file named "sam" and a
+file named "steve". Which is longer? Find out and
+type "answer sam" or "answer steve", giving the name
+of the longer file.
+#create sam
+this is the file sam. it contains
+only two lines of text.
+#create steve
+this file is named steve. it is a
+file which contains five lines of text.
+this is of course a very short file
+by any ordinary standards, although
+on UNIX most files are rather short.
+#copyin
+#user
+#uncopyin
+#match steve
+#log
+#next
+3.2b 5
diff --git a/usr.bin/learn/lib/files/L3.2b b/usr.bin/learn/lib/files/L3.2b
new file mode 100644
index 00000000000..e99f3ba4f35
--- /dev/null
+++ b/usr.bin/learn/lib/files/L3.2b
@@ -0,0 +1,32 @@
+#print
+The "cat" command can also print several files
+at once. In fact, it is named "cat" as an abbreviation
+for "concatenate". To print the files named "dog"
+and "mouse" in succession, you could either
+type:
+ cat dog
+ cat mouse
+or just
+ cat dog mouse
+If you print them with one command,
+the files are listed in sequence with nothing
+between them.
+
+This directory contains two files
+named "chester" and "charley". What is the
+longest word in either file? Type "answer WORD"
+where WORD is the longest word you find.
+#create charley
+most of this file is short but at one place
+there is a surprisingly long word.
+#create chester
+and of the but here now stop go
+#copyin
+#user
+#uncopyin
+#match surprisingly
+#log
+#next
+4.1a 10
+4.2a 5
+4.3a 2
diff --git a/usr.bin/learn/lib/files/L3.3a b/usr.bin/learn/lib/files/L3.3a
new file mode 100644
index 00000000000..1b082b22f9a
--- /dev/null
+++ b/usr.bin/learn/lib/files/L3.3a
@@ -0,0 +1,18 @@
+#print
+A file can be printed on your terminal
+by using the "cat" command. Just say
+"cat file" where "file" is the file name.
+For example, there is a file named
+"food" in this directory. List it
+by saying "cat food"; then type "ready".
+#create food
+ this is the file
+ named food.
+#copyout
+#user
+#uncopyout
+tail -2 .ocopy >X1
+#cmp X1 food
+#log
+#next
+3.3b 2
diff --git a/usr.bin/learn/lib/files/L3.3b b/usr.bin/learn/lib/files/L3.3b
new file mode 100644
index 00000000000..525d4d2d90d
--- /dev/null
+++ b/usr.bin/learn/lib/files/L3.3b
@@ -0,0 +1,23 @@
+#print
+Of course, you can print any file with "cat".
+In particular, it is common to first use
+"ls" to find the name of a file and then "cat"
+to print it. Note the difference between
+"ls", which tells you the name of the files,
+and "cat", which tells you the contents.
+
+One file in the current directory is named for
+a President. Print the file, then type "ready".
+#create roosevelt
+ this file is named roosevelt
+ and contains three lines of
+ text.
+#copyout
+#user
+#uncopyout
+cp .ocopy X2
+tail -3 .ocopy >X1
+#cmp X1 roosevelt
+#log
+#next
+3.2b 2
diff --git a/usr.bin/learn/lib/files/L4.1a b/usr.bin/learn/lib/files/L4.1a
new file mode 100644
index 00000000000..cbc3f2db660
--- /dev/null
+++ b/usr.bin/learn/lib/files/L4.1a
@@ -0,0 +1,17 @@
+#print
+The "ls" command may be given with one
+or more file names. In that case,
+it will tell which which of the files exist.
+How many of the files "doug", "dave", and
+"dennis" exist in this directory? Find out
+and then type "answer N" where N is the number
+you found.
+#create dennis
+#create doug
+#copyin
+#user
+#uncopyin
+#match 2
+#log
+#next
+5.1a 10
diff --git a/usr.bin/learn/lib/files/L4.2a b/usr.bin/learn/lib/files/L4.2a
new file mode 100644
index 00000000000..596ff43afa3
--- /dev/null
+++ b/usr.bin/learn/lib/files/L4.2a
@@ -0,0 +1,19 @@
+#print
+If a file name is given with the "ls" command,
+it tells you whether that file exists.
+The file name is listed if the file exists;
+if it doesn't, a complaint is typed.
+For example,
+ ls george
+will type "george" if the file exists,
+and "george not found" if it is missing.
+
+Is there a file named "alexander" in the
+current directory? Find out, then type "yes" or "no".
+#copyin
+#user
+#uncopyin
+#match no
+#log
+#next
+4.2b 10
diff --git a/usr.bin/learn/lib/files/L4.2b b/usr.bin/learn/lib/files/L4.2b
new file mode 100644
index 00000000000..e0e97bcc343
--- /dev/null
+++ b/usr.bin/learn/lib/files/L4.2b
@@ -0,0 +1,21 @@
+#print
+You can inquire about several files at once
+with the "ls" command. If you type, for example,
+ ls fee fi fo fum
+you will be told which of the four files "fee", "fi", "fo",
+and "fum" exist. In the current directory only one
+of the files "grover", "gerald", or "george" exists.
+Find out which one; then rename it "grant".
+Type "ready" when you are done.
+#create gerald
+file
+#create garbage
+garbage it is.
+#user
+#create X1
+file
+#
+cmp -s X1 grant && test ! -r gerald
+#log
+#next
+5.1a 10
diff --git a/usr.bin/learn/lib/files/L4.3a b/usr.bin/learn/lib/files/L4.3a
new file mode 100644
index 00000000000..fa380b99d4d
--- /dev/null
+++ b/usr.bin/learn/lib/files/L4.3a
@@ -0,0 +1,20 @@
+#print
+You can use the "ls" command to ask whether
+a single file exists without listing the entire
+directory. For example, "ls george" will list
+"george" if there is a file with that name, and
+complain if there is not one. This directory
+contains a file named "arthur" but no file named
+"alan". You can verify that by typing the
+ordinary "ls" command. Then try typing "ls arthur"
+to see what happens, and follow that by "ls alan".
+Then type "ready".
+#create arthur
+xxx
+#copyin
+#user
+#uncopyin
+grep 'ls arthur' .copy >/dev/null && grep 'ls alan' .copy >/dev/null
+#log
+#next
+4.3b 0
diff --git a/usr.bin/learn/lib/files/L4.3b b/usr.bin/learn/lib/files/L4.3b
new file mode 100644
index 00000000000..3aec8729644
--- /dev/null
+++ b/usr.bin/learn/lib/files/L4.3b
@@ -0,0 +1,20 @@
+#print
+With the "ls" command, you can inquire about several
+specific files at once. For example, in the previous
+case, you could type
+
+ls arthur alan
+
+and be told about both files.
+
+Which one of the files "bruce" and "ben" exists?
+Type "answer NAME", where NAME is the one you find.
+#create bruce
+bruce
+#copyin
+#user
+#uncopyin
+#match bruce
+#log
+#next
+4.3c 2
diff --git a/usr.bin/learn/lib/files/L4.3c b/usr.bin/learn/lib/files/L4.3c
new file mode 100644
index 00000000000..11b9adedceb
--- /dev/null
+++ b/usr.bin/learn/lib/files/L4.3c
@@ -0,0 +1,16 @@
+#print
+Your directory contains only one of the following
+files: "richard", "robert", "ralph", "roger". Find out
+which one exists, and print the contents of that file
+on your terminal (remember the "cat" command?).
+Then type "ready".
+#create robert
+this is the contents of file
+robert which you had to print.
+#copyin
+#user
+#uncopyin
+grep 'cat rob' .copy >/dev/null
+#log
+#next
+5.1a 10
diff --git a/usr.bin/learn/lib/files/L5.1a b/usr.bin/learn/lib/files/L5.1a
new file mode 100644
index 00000000000..6e206f480fb
--- /dev/null
+++ b/usr.bin/learn/lib/files/L5.1a
@@ -0,0 +1,34 @@
+#print
+Most UNIX commands, like "ls" and "cat", let you
+specify any number of file names after the command.
+To make this as easy as possible, there are some
+ways to abbreviate file names. This is usually
+faster and more accurate than typing out the list in full.
+
+For example, when the character "?" is used in a file name,
+it will represent any character that might be
+in a file name. That is, the name "a?" is
+an abbreviation for the files "a1", "a2", "aa",
+and so forth. You can say
+ ls a?
+and if there are any file names beginning with
+"a" that are exactly two letters long, the computer
+will tell you their names. Try that here.
+First list all the file names with "ls"; then type
+ ls a?
+to get all the two letter names beginning with "a".
+Then type "ready".
+#create a1
+#create a12
+#create abcdef
+#create ax
+#create aa
+#copyin
+#user
+#uncopyin
+grep '^ls a?$' .copy >/dev/null
+#log
+#next
+5.1b 0
+5.1c 5
+5.1e 10
diff --git a/usr.bin/learn/lib/files/L5.1b b/usr.bin/learn/lib/files/L5.1b
new file mode 100644
index 00000000000..7f4b44c71ae
--- /dev/null
+++ b/usr.bin/learn/lib/files/L5.1b
@@ -0,0 +1,20 @@
+#print
+Will the name
+ xyz
+be selected by the pattern
+ x?
+in an "ls" command?
+Type "yes" or "no". If you
+have trouble, there is such a file
+in the current directory,
+so you can find out by trial and error.
+(For example, you might do an ordinary "ls"
+and then try "ls x?" and compare the results.)
+#create xyz
+#copyin
+#user
+#uncopyin
+#match no
+#log
+#next
+5.1c 0
diff --git a/usr.bin/learn/lib/files/L5.1c b/usr.bin/learn/lib/files/L5.1c
new file mode 100644
index 00000000000..39b88950421
--- /dev/null
+++ b/usr.bin/learn/lib/files/L5.1c
@@ -0,0 +1,26 @@
+#print
+The "?" may appear anywhere in the name.
+For example you can type
+ a?bc
+to match the list of names
+ axbc, aybc, a3bc
+and so forth.
+But the number of characters must always agree.
+How many of the following file names
+are matched by "x?xx"?
+ x1xx, y1xx, x1xxa, xxx
+Type "answer N" where N is the number of matching names.
+You can experiment in the current directory to
+check your answer before typing it.
+#create x1xx
+#create x1xxa
+#create y1xx
+#create xxx
+#copyin
+#user
+#uncopyin
+#match 1
+#log
+#next
+5.1d 0
+5.1e 5
diff --git a/usr.bin/learn/lib/files/L5.1d b/usr.bin/learn/lib/files/L5.1d
new file mode 100644
index 00000000000..38ebe8449fa
--- /dev/null
+++ b/usr.bin/learn/lib/files/L5.1d
@@ -0,0 +1,14 @@
+#print
+Will the name
+ ?xx
+match "axx"? Again, you may
+experiment before typing your
+answer.
+#create axx
+#copyin
+#user
+#uncopyin
+#match yes
+#log
+#next
+5.1e 0
diff --git a/usr.bin/learn/lib/files/L5.1e b/usr.bin/learn/lib/files/L5.1e
new file mode 100644
index 00000000000..03c4142b9cb
--- /dev/null
+++ b/usr.bin/learn/lib/files/L5.1e
@@ -0,0 +1,29 @@
+#print
+Not only may the ? appear anywhere in a name,
+but there may be several ? characters in it.
+For example,
+ g??rge
+will match "george" and "goerge", among others.
+And "a??" will match "abc" or "a11" (but NOT "ax").
+Look at the files in the current directory and decide
+how many names the pattern
+ a?b?c
+will select. Again, you can try this out
+by comparing an ordinary "ls" with "ls a?b?c"
+to see what happens. When you figure
+out how many names are selected,
+type "answer N" where N is the number of file names.
+#create a0b0c
+#create a0bc
+#create a0x0c
+#create a1bxc
+#create aabbc
+#create azbzcz
+#copyin
+#user
+#uncopyin
+#match 3
+#log
+#next
+6.1a 5
+6.2a 2
diff --git a/usr.bin/learn/lib/files/L6.1a b/usr.bin/learn/lib/files/L6.1a
new file mode 100644
index 00000000000..0eead332963
--- /dev/null
+++ b/usr.bin/learn/lib/files/L6.1a
@@ -0,0 +1,33 @@
+#print
+Since the "?" character only matches single characters,
+it isn't useful for such questions as "how many files
+have names beginning with g?" There is another character,
+ *
+which can be used in patterns for file names, and which matches
+any number of characters of any sort. Thus
+ g*
+matches anything beginning with g.
+And
+ *x
+matches anything ending in x.
+There is one file in this directory whose name ends
+in "memo". Find out that file name
+and print the contents of the file. Then type "ready".
+#create mymemo
+This is the 7-line file "mymemo"; you should
+have typed "ls *memo", which would print
+"mymemo", and then typed the
+command "cat mymemo".
+Or just plain "cat *memo" would have worked.
+But whatever you did, you got it right
+and now you can type "ready".
+#copyout
+#user
+#uncopyout
+tail -7 .ocopy >X2
+#cmp mymemo X2
+#log
+#next
+6.1b 0
+6.1c 5
+6.1e 10
diff --git a/usr.bin/learn/lib/files/L6.1b b/usr.bin/learn/lib/files/L6.1b
new file mode 100644
index 00000000000..f7f0d01ea35
--- /dev/null
+++ b/usr.bin/learn/lib/files/L6.1b
@@ -0,0 +1,14 @@
+#print
+Will the file name "abcd"
+be matched by "a*d"? Again,
+if you are not sure, you can experiment
+in this directory with commands like
+"ls" and "ls a*d".
+#create abcd
+#copyin
+#user
+#uncopyin
+#match yes
+#log
+#next
+6.1c
diff --git a/usr.bin/learn/lib/files/L6.1c b/usr.bin/learn/lib/files/L6.1c
new file mode 100644
index 00000000000..bf8d88489c3
--- /dev/null
+++ b/usr.bin/learn/lib/files/L6.1c
@@ -0,0 +1,13 @@
+#print
+There is one file in this directory whose name begins
+with "g". Rename it so the "g" at the beginning
+of the name is replaced by "h".
+Then type ready.
+#create g23
+g23, of course
+#user
+test -r h23 && test ! -r g23
+#log
+#next
+6.1d 0
+6.1e 5
diff --git a/usr.bin/learn/lib/files/L6.1d b/usr.bin/learn/lib/files/L6.1d
new file mode 100644
index 00000000000..dcf8678dc7a
--- /dev/null
+++ b/usr.bin/learn/lib/files/L6.1d
@@ -0,0 +1,16 @@
+#print
+What does "*b*" match? Clearly, any file
+with a "b" anywhere in its name. Similarly,
+how many files in this directory have
+"se" somewhere in their name?
+Type "answer N" when you figure it out.
+#create arise
+#create reset
+#create set
+#copyin
+#user
+#uncopyin
+#match 3
+#log
+#next
+6.1e
diff --git a/usr.bin/learn/lib/files/L6.1e b/usr.bin/learn/lib/files/L6.1e
new file mode 100644
index 00000000000..cc640d4625d
--- /dev/null
+++ b/usr.bin/learn/lib/files/L6.1e
@@ -0,0 +1,19 @@
+#print
+There is exactly one file name which matches both
+ ab*
+and
+ a?d
+in the current directory. What is it?
+Type "answer NAME" where NAME is its name.
+#create abc
+#create abd
+#create add
+#copyin
+#user
+#uncopyin
+#match abd
+#log
+#next
+7.1a 10
+7.2a 5
+7.3a 2
diff --git a/usr.bin/learn/lib/files/L6.2a b/usr.bin/learn/lib/files/L6.2a
new file mode 100644
index 00000000000..b94e7b54f02
--- /dev/null
+++ b/usr.bin/learn/lib/files/L6.2a
@@ -0,0 +1,34 @@
+#print
+Since the '?' character only matches single
+characters in file names, it is not useful for
+questions like "how many files have names which
+begin with the letter g?" There is another character
+ *
+which can be used in patterns for file names
+and matches any number of any kind of characters.
+So
+ g*
+selects all file names beginning with g, and
+ *x
+selects all file names which end in x. Try
+ ls *x
+How many files match?
+Compare with an ordinary
+ ls
+if you like. Type "answer N" eventually where
+N is the number of files whose names end in "x".
+#create abcx
+#create abcxdef
+#create memox
+#create memoy
+#create memoz
+#create x
+#create x53x
+#copyin
+#user
+#uncopyin
+#match 4
+#log
+#next
+6.2b 8
+6.1a 1
diff --git a/usr.bin/learn/lib/files/L6.2b b/usr.bin/learn/lib/files/L6.2b
new file mode 100644
index 00000000000..faaf442be9f
--- /dev/null
+++ b/usr.bin/learn/lib/files/L6.2b
@@ -0,0 +1,22 @@
+#print
+There is one file in this directory whose name ends
+in "memo". Find out that file name and print
+the contents of the file. Then type "ready".
+#create mymemo
+This is the 7-line file "mymemo"; you should
+have typed "ls *memo", which would print
+"mymemo", and then typed the
+command "cat mymemo".
+Or just plain "cat *memo" would have worked.
+But whatever you did, you got it right
+and now you can type "ready".
+#copyout
+#user
+#uncopyout
+tail -7 .ocopy >X2
+#cmp mymemo X2
+#log
+#next
+6.1b 0
+6.1c 5
+6.1e 10
diff --git a/usr.bin/learn/lib/files/L7.1a b/usr.bin/learn/lib/files/L7.1a
new file mode 100644
index 00000000000..871f82f26d4
--- /dev/null
+++ b/usr.bin/learn/lib/files/L7.1a
@@ -0,0 +1,38 @@
+#print
+Sometimes ? is too flexible, and you
+only want to allow a few characters. For example,
+you might want to abbreviate
+ ls memo.ab memo.ac
+without picking up "memo.ad", memo.ae", etc.
+You can match one of a set of particular characters by
+putting them in brackets "[]" in the list you use with "ls".
+For example,
+ [bc]
+matches either b or c but no other letters,
+so "ls memo.a[bc]" is the abbreviation for
+"ls memo.ab memo.ac".
+You can have as many characters as needed between [ and ].
+
+Type the "ls" command that recognizes
+ a1cat
+ a2cat
+ a3cat
+and no other files. Then type "ready".
+#create a1bat
+#create a1cat
+#create a2cat
+#create a3cat
+#create a4cat
+#create acat
+#copyin
+#user
+#uncopyin
+#match ls a[123]cat
+#match ls a[1-3]cat
+#match ls a1cat a2cat a3cat
+You were supposed to use a[123]cat.
+Imagine doing it your way with 10 files.
+#log
+#next
+8.1a 10
+8.2a 5
diff --git a/usr.bin/learn/lib/files/L7.2a b/usr.bin/learn/lib/files/L7.2a
new file mode 100644
index 00000000000..5f51b4bf6e9
--- /dev/null
+++ b/usr.bin/learn/lib/files/L7.2a
@@ -0,0 +1,30 @@
+#print
+Sometimes ? is too flexible, and you
+only want to allow a few characters. For example,
+you might want to abbreviate
+ ls memo.ab memo.ac
+without picking up "memo.ad", "memo.ae", and so forth.
+You can match one of a set of particular characters by
+putting them in brackets "[]" in the list you use with "ls".
+For example,
+ [bc]
+matches either b or c but no other letters. Thus
+ ls memo.a[bc]
+will list exactly "memo.ab" and "memo.ac" if present.
+
+How many of the files
+ xya, xyb, xyc, xyd
+exist in this directory?
+Type "answer N" where N is the number.
+#create xyb
+#create xyc
+#create xye
+#create xyf
+#create xy1
+#copyin
+#user
+#uncopyin
+#match 2
+#log
+#next
+7.2b 10
diff --git a/usr.bin/learn/lib/files/L7.2b b/usr.bin/learn/lib/files/L7.2b
new file mode 100644
index 00000000000..a86c7f8d288
--- /dev/null
+++ b/usr.bin/learn/lib/files/L7.2b
@@ -0,0 +1,32 @@
+#print
+You can put any number of characters between [..]
+characters, as in
+ [abcdef]
+which matches any of the six letters from a to f;
+and you can put something like that anywhere in a pattern
+for a file name. For example,
+ ls [abcd]x
+matches any of
+ ax, bx, cx, dx
+You can also combine this with other operators such as
+* or ?. For example,
+ ls [ab]?
+matches all two-letter names beginning with a or b.
+How would you ask for all names, of any length, ending
+in 1 2 or 3?
+You can experiment in this directory; eventually,
+type the "ls" command you decide on followed by "ready".
+#create a1
+#create a12
+#create a1a
+#create a2
+#create a23
+#create aa1
+#create abc1
+#copyin
+#user
+#uncopyin
+#match ls *[123]
+#log
+#next
+8.1a 10
diff --git a/usr.bin/learn/lib/files/L7.3a b/usr.bin/learn/lib/files/L7.3a
new file mode 100644
index 00000000000..f757a518a0c
--- /dev/null
+++ b/usr.bin/learn/lib/files/L7.3a
@@ -0,0 +1,28 @@
+#print
+Sometimes ? is too flexible, and you
+only want to allow a few characters. For example,
+you might want to abbreviate
+ ls memo.ab memo.ac
+without picking up "memo.ad", "!"memo.ae", and so forth.
+You can match one of a set of particular characters by
+putting them in brackets "[]" in the list you use with "ls".
+For example,
+ [bc]
+matches either b or c but no other letters.
+Thus the command
+ ls memo.a[bc]
+would match "memo.ab", "memo.ac", and nothing else.
+Try that command in this directory: type a plain
+"ls" first, and then "ls memo.a[bc]".
+How many files does "ls memo.a[bc]" match?
+Type "answer N" where N is the number.
+#create memo.ab
+#create memo.abc
+#create memo.bc
+#copyin
+#user
+#uncopyin
+#match 1
+#log
+#next
+7.3b 2
diff --git a/usr.bin/learn/lib/files/L7.3b b/usr.bin/learn/lib/files/L7.3b
new file mode 100644
index 00000000000..1d3b1072f53
--- /dev/null
+++ b/usr.bin/learn/lib/files/L7.3b
@@ -0,0 +1,17 @@
+#print
+You can use the [] characters anywhere you want
+in a file name. For example,
+ ls a[bc]d
+would match abd or acd, right?
+What is the command that finds out how
+many files are named "ax" or "bx"?
+Type that command, then "ready".
+#create ax
+#create bx
+#copyin
+#user
+#uncopyin
+#match ls [ab]x
+#log
+#next
+7.3c 2
diff --git a/usr.bin/learn/lib/files/L7.3c b/usr.bin/learn/lib/files/L7.3c
new file mode 100644
index 00000000000..8b87957631c
--- /dev/null
+++ b/usr.bin/learn/lib/files/L7.3c
@@ -0,0 +1,23 @@
+#print
+You can put any number of characters between the
+brackets. For example,
+ ab[123456789]
+could match up to 9 names, of the sort
+ ab1, ab2, ab3, ab4, ab5, ...
+How many of the following names exist in this
+directory?
+ p1end, p2end, p3end, p4end, p5end
+Check with a ordinary "ls". Type "answer N" when you
+know.
+#once #create p1end
+#once #create p3endx
+#once #create p4end
+#once #create p6end
+#copyin
+#user
+#uncopyin
+#match 2
+#log
+#next
+8.1a 10
+8.2a 5
diff --git a/usr.bin/learn/lib/files/L8.1a b/usr.bin/learn/lib/files/L8.1a
new file mode 100644
index 00000000000..2228490e877
--- /dev/null
+++ b/usr.bin/learn/lib/files/L8.1a
@@ -0,0 +1,25 @@
+#print
+Sometimes you want to request one of a limited
+range of characters. This is possible with an
+expression like
+ [a-d]
+which matches a, b, c, or d. Thus, to take
+some combinations
+ ab[c-f]
+matches
+ abc, abd, abe, abf
+Try typing "ls a[0-9]"
+and see how many files it matches. Type that
+number in the form "answer N".
+#create a0
+#create a1
+#create a5
+#create ax
+#copyin
+#user
+#uncopyin
+#match 3
+#log
+#next
+9.1a 10
+9.2a 4
diff --git a/usr.bin/learn/lib/files/L8.2a b/usr.bin/learn/lib/files/L8.2a
new file mode 100644
index 00000000000..6b59b79f2f2
--- /dev/null
+++ b/usr.bin/learn/lib/files/L8.2a
@@ -0,0 +1,16 @@
+#print
+Will the command
+ ls georg[a-f]
+match the name
+ george
+Type yes or no.
+Experiment first if you want.
+#create george
+#copyin
+#user
+#uncopyin
+#match yes
+#log
+#next
+8.2b 5
+9.1a 10
diff --git a/usr.bin/learn/lib/files/L8.2b b/usr.bin/learn/lib/files/L8.2b
new file mode 100644
index 00000000000..8fd3ef86c29
--- /dev/null
+++ b/usr.bin/learn/lib/files/L8.2b
@@ -0,0 +1,23 @@
+#print
+The command
+ ls [aeiou]*.c
+will match all but one of the following names.
+ e.c
+ alpha.c
+ edward
+ u23.c
+Which one? Type "answer NAME" where NAME
+is the file that doesn't match. You can experiment
+first, as usual.
+#create alpha.c
+#create e.c
+#create edward
+#create u23.c
+#copyin
+#user
+#uncopyin
+#match edward
+#log
+#next
+8.2c 5
+9.1a 10
diff --git a/usr.bin/learn/lib/files/L8.2c b/usr.bin/learn/lib/files/L8.2c
new file mode 100644
index 00000000000..9a8764632a8
--- /dev/null
+++ b/usr.bin/learn/lib/files/L8.2c
@@ -0,0 +1,27 @@
+#print
+As an example more complicated than you will
+probably ever need, consider
+ ?[a-c]*
+which matches what? Well the first character
+can be anything; the second must be a, b, or c; and
+nothing matters thereafter. So it matches
+ aaa
+ abc
+ xa
+ 3c25
+but not
+ a
+ ghi
+and so forth.
+Will it match
+ %a25
+Try some experiments, then type yes or no.
+#create %a25
+#copyin
+#user
+#uncopyin
+#match yes
+#log
+#next
+9.1a 10
+9.2a 4
diff --git a/usr.bin/learn/lib/files/L9.1a b/usr.bin/learn/lib/files/L9.1a
new file mode 100644
index 00000000000..2da6ae37899
--- /dev/null
+++ b/usr.bin/learn/lib/files/L9.1a
@@ -0,0 +1,36 @@
+#print
+The patterns for selecting file names that have been discussed
+can be used with other commands than "ls". For example,
+they can be used with the "cat" command to print files.
+It is common for a memo stored in several
+files to use files named "part1", "part2", etc.
+so that commands like
+ cat part*
+will print everything.
+In this directory there are several
+short files named "sec0", "sec1", "sec3",
+and so forth.
+There are various names of animals in the files;
+find out the largest animal named in the files
+and type "answer NAME" where NAME is that animal.
+#create sec0
+dog mouse cat
+#create sec1
+rabbit weasel
+pig hamster
+#create sec2
+this file doesn't happen
+to have any animal names in it.
+#create sec3
+fox elephant sheep
+duck rat
+#create sec4
+groundhog bobcat
+mole beaver
+#copyin
+#user
+#uncopyin
+#match elephant
+#log
+#next
+10.1a 10
diff --git a/usr.bin/learn/lib/files/L9.2a b/usr.bin/learn/lib/files/L9.2a
new file mode 100644
index 00000000000..eac03df5102
--- /dev/null
+++ b/usr.bin/learn/lib/files/L9.2a
@@ -0,0 +1,30 @@
+#print
+You can use patterns for file names with commands
+other than "ls". For example, you can use them with
+the "cat" command to print files.
+This directory has three files named
+ parta
+ partb
+ partc
+You can use
+ cat part?
+to print all of them. Try that; then
+type "ready".
+#create parta
+This is file parta;
+it has two lines.
+#create partb
+File partb here - has only one line.
+#create partc
+And now in file partc, which has
+the enormous total of
+three lines.
+#create partxxx
+You shouldn't have printed this one.
+#copyin
+#user
+#uncopyin
+grep 'cat part?' .copy >/dev/null
+#log
+#next
+9.2b 5
diff --git a/usr.bin/learn/lib/files/L9.2b b/usr.bin/learn/lib/files/L9.2b
new file mode 100644
index 00000000000..64b9b0970d5
--- /dev/null
+++ b/usr.bin/learn/lib/files/L9.2b
@@ -0,0 +1,22 @@
+#print
+You can also use the "*" operator. For example,
+print the contents of all the files in this
+directory whose names begin with the letter 'p'.
+Use just one "cat" command.
+Then type "ready".
+#create p1
+There are only two such files. This is the first
+one and it is two lines long.
+#create ppx
+
+This is the second file. Its first line
+is blank, and then there are three lines of
+text of which this is the last.
+#copyin
+#user
+#uncopyin
+grep 'cat p\*' .copy >/dev/null
+#log
+#next
+10.1a 10
+9.2c 5
diff --git a/usr.bin/learn/lib/files/L9.2c b/usr.bin/learn/lib/files/L9.2c
new file mode 100644
index 00000000000..ed1c330878a
--- /dev/null
+++ b/usr.bin/learn/lib/files/L9.2c
@@ -0,0 +1,26 @@
+#print
+And as an example of the [] operators again,
+print all the files in this directory whose
+names begin with either 'a' or 'c'.
+That will tell you to type either 'yes'
+or 'no' - do what it says.
+#create a1
+Type
+#create a2
+y
+#create b
+n
+o
+#create cxx
+e
+#create cz23
+s
+(on one line, please)
+#copyin
+#user
+#uncopyin
+#match yes
+#log
+#next
+10.1a 10
+10.3a 2