home *** CD-ROM | disk | FTP | other *** search
File List | 1988-05-01 | 25.7 KB | 497 lines |
- Clist version 05.01.88 on 05/01/88 Source file DESKTOP.C
- Author: Kernighan & Ritchie
- Clist demonstration using K&R pages 74-79
-
- 1/1 /*.t|Clist demonstration using K&R pages 74-79*//*.function .author Kernighan & Ritchie*/
- 2/2 /* A $2,000 desktop calculator that isn't even programmable! */
- 3/3 /* This listing produced using the following command line:
- 4/4 CL -G -H -C -PBI DESKTOP
- 5/5 */
- 6/6
- 7/7 /* .noin Don't include the (long) standard headers */
- 8/8 #include <stdio.h>
- 9/9 #include <math.h>
- 10/10 /* .incl Include the other files */
- 11/11
- 12/12 #define MAXOP 20
- 13/13 #define NUMBER '0'
- 14/14 #define TOOBIG '9'
- 15/15
- 16/16 #include <stack.c>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 001 Clist version 05.01.88 on 05/01/88 Include file STACK.C Source file DESKTOP.C
- Author: Kernighan & Ritchie
- Clist demonstration using K&R pages 74-79
- stack routines for the desktop calculator
-
- STACK.C:
- 17/1 /* .subt | stack routines for the desktop calculator */
- 18/2
- 19/3 #define MAXVAL 100
- 20/4
- 21/5 EintF sp = 0;
- 22/6 EdoubleF val[MAXVAL];
- 23/7
- 24/8 EdoubleF push(f)
- 25/9 EdoubleF f;
- 26/10 ┌─────── {
- 27/11 │ EifF (sp < MAXVAL)
- 28/12 │ EreturnF(val[sp++] = f);
- 29/13 │┌──────── EelseF {
- 30/14 ││ printf("error: stack full\n");
- 31/15 ││ clear();
- 32/16 ││ EreturnF(0.0);
- 33/17 │└──────── }
- 34/18 └─────── }
- 35/19
- 36/20 EdoubleF pop()
- 37/21 ┌─────── {
- 38/22 │ EifF (sp > 0)
- 39/23 │ EreturnF(val[--sp]);
- 40/24 │┌──────── EelseF {
- 41/25 ││ printf("error: stack empty\n");
- 42/26 ││ clear();
- 43/27 ││ EreturnF(0.0);
- 44/28 │└──────── }
- 45/29 └─────── }
- 46/30
- 47/31 clear()
- 48/32 ┌─────── {
- 49/33 │ sp = 0;
- 50/34 └─────── }
- 51/35
- 52/36 /* .subt < end of file, stack.c */
- 53/37
-
- DESKTOP.C:
- 54/17 #include <getop.c>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 002 Clist version 05.01.88 on 05/01/88 Include file GETOP.C Source file DESKTOP.C
- Author: Kernighan & Ritchie
- Clist demonstration using K&R pages 74-79
- Get operation type for desktop calculator
-
- GETOP.C:
- 55/1 /* .subt |Get operation type for desktop calculator */
- 56/2
- 57/3 getop(s,lim)
- 58/4 EcharF s[];
- 59/5 EintF lim;
- 60/6 ┌─────── {
- 61/7 │ EintF i, c;
- 62/8 │
- 63/9 │ EwhileF ((c = getch()) == ' ' || c == '\t' || c == '\n')
- 64/10 │ ;
- 65/11 │ EifF (c != '.' && (c < '0' || c > '9'))
- 66/12 │ EreturnF(c);
- 67/13 │ s[0] = c;
- 68/14 │ EforF (i = 1; (c = getchar()) >= '0' && c <= '9'; i++)
- 69/15 │ EifF (i < lim)
- 70/16 │ s[i] = c;
- 71/17 │┌──────── EifF (c == '.') {
- 72/18 ││ EifF (i < lim)
- 73/19 ││ s[i] = c;
- 74/20 ││ EforF (i++; (c = getchar()) >= '0' && c <= '9'; i++)
- 75/21 ││ EifF (i<lim)
- 76/22 ││ s[i] = c;
- 77/23 │└──────── }
- 78/24 │┌──────── EifF (i < lim) {
- 79/25 ││ ungetch(c);
- 80/26 ││ s[i] = '\0';
- 81/27 ││ EreturnF(NUMBER);
- 82/28 │└──────── }
- 83/29 │┌──────── EelseF {
- 84/30 ││ EwhileF (c != '\n' && c != EOF)
- 85/31 ││ c = getchar();
- 86/32 ││ s[lim-1] = '\0';
- 87/33 ││ EreturnF(TOOBIG);
- 88/34 │└──────── }
- 89/35 └─────── }
- 90/36
- 91/37 /* .subt < end of file, file getop.c */
- 92/38
-
- DESKTOP.C:
- 93/18 #include <getch.c>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 003 Clist version 05.01.88 on 05/01/88 Include file GETCH.C Source file DESKTOP.C
- Author: Kernighan & Ritchie
- Clist demonstration using K&R pages 74-79
- Get and save character routines for desktop calculator
-
- GETCH.C:
- 94/1 /* .subt | Get and save character routines for desktop calculator */
- 95/2
- 96/3 #define BUFSIZE 100
- 97/4
- 98/5 EcharF buf[BUFSIZE];
- 99/6 EintF bufp = 0;
- 100/7
- 101/8 getch()
- 102/9 ┌─────── {
- 103/10 │ EreturnF((bufp > 0) ? buf[--bufp] : getchar());
- 104/11 └─────── }
- 105/12
- 106/13 ungetch(c)
- 107/14 EintF c;
- 108/15 ┌─────── {
- 109/16 │ EifF (bufp > BUFSIZE)
- 110/17 │ printf("ungetch: too many characters\n");
- 111/18 │ EelseF
- 112/19 │ buf[bufp++] = c
- 113/20 └─────── }
- 114/21
- 115/22 /* .subt < end of file, file getch.c */
- 116/23
-
- DESKTOP.C:
- 117/19
- 118/20 main()
- 119/21 ┌─────── {
- 120/22 │ EintF type;
- 121/23 │ EcharF s[MAXOP];
- 122/24 │ EdoubleF op2, atof(), pop(), push();
- 123/25 │
- 124/26 │┌──────── EwhileF ((type = getop(s,maxop)) != EOF) {
- 125/27 ││
- 126/28 ││┌───────── EswitchF (type) {
- 127/29 │││
- 128/30 │││ EcaseF NUMBER:
- 129/31 │││ push(atof(s));
- 130/32 │││ EbreakF;
- 131/33 │││ EcaseF '+':
- 132/34 │││ push(pop() + pop());
- 133/35 │││ EbreakF;
- 134/36 │││ EcaseF '*':
- 135/37 │││ push(pop() * pop());
- 136/38 │││ EbreakF;
- 137/39 │││ EcaseF '-':
- 138/40 │││ op2 = pop();
- 139/41 │││ push(pop() - op2);
- 140/42 │││ EbreakF;
- 141/43 │││ EcaseF '/':
- 142/44 │││ op2 = pop();
- 143/45 │││ EifF (op2 != 0.0)
- 144/46 │││ push(pop() / op2);
- 145/47 │││ EelseF
- 146/48 │││ printf("Zero divisor popped\n");
-
- Page 004 Clist version 05.01.88 on 05/01/88 Source file DESKTOP.C
- Author: Kernighan & Ritchie function main()
- Clist demonstration using K&R pages 74-79
-
- 147/49 │││ EbreakF;
- 148/50 │││ EcaseF '=':
- 149/51 │││ printf("\t%f\n",push(pop()));
- 150/52 │││ EbreakF;
- 151/53 │││ EcaseF 'c':
- 152/54 │││ clear();
- 153/55 │││ EbreakF;
- 154/56 │││ EcaseF TOOBIG:
- 155/57 │││ printf("%.20s ... is too long\n");
- 156/58 │││ EbreakF;
- 157/59 │││ EdefaultF:
- 158/60 │││ printf("unknown command %c\n",type);
- 159/61 │││ EbreakF;
- 160/62 ││└──────── }
- 161/63 │└────── }
- 162/64 │
- 163/65 │ /* end of program, desktop.c */
- 164/66 │
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 005 Clist version 05.01.88 on 05/01/88 Source file DESKTOP.C
- Cross-reference listing
- Functions
-
- atof(): page 004, line 122; file DESKTOP.C, line 24 in function main()
- page 004, line 129; file DESKTOP.C, line 31 in function main()
- clear(): page 002, line 31; file STACK.C, line 15 in function push()
- page 002, line 42; file STACK.C, line 26 in function pop()
- page 002, line 47; file STACK.C, line 31 defined
- page 005, line 152; file DESKTOP.C, line 54 in function main()
- getch(): page 003, line 63; file GETOP.C, line 9 in function getop()
- page 004, line 101; file GETCH.C, line 8 defined
- getchar(): page 003, line 68; file GETOP.C, line 14 in function getop()
- page 003, line 74; file GETOP.C, line 20 in function getop()
- page 003, line 85; file GETOP.C, line 31 in function getop()
- page 004, line 103; file GETCH.C, line 10 in function getch()
- getop(): page 003, line 57; file GETOP.C, line 3 defined
- page 004, line 124; file DESKTOP.C, line 26 in function main()
- main(): page 004, line 118; file DESKTOP.C, line 20 defined
- pop(): page 002, line 36; file STACK.C, line 20 defined
- page 004, line 122; file DESKTOP.C, line 24 in function main()
- page 004, line 132; file DESKTOP.C, line 34 in function main()
- page 004, line 135; file DESKTOP.C, line 37 in function main()
- page 004, line 138; file DESKTOP.C, line 40 in function main()
- page 004, line 139; file DESKTOP.C, line 41 in function main()
- page 004, line 142; file DESKTOP.C, line 44 in function main()
- page 004, line 144; file DESKTOP.C, line 46 in function main()
- page 005, line 149; file DESKTOP.C, line 51 in function main()
- printf(): page 002, line 30; file STACK.C, line 14 in function push()
- page 002, line 41; file STACK.C, line 25 in function pop()
- page 004, line 110; file GETCH.C, line 17 in function ungetch()
- page 004, line 146; file DESKTOP.C, line 48 in function main()
- page 005, line 149; file DESKTOP.C, line 51 in function main()
- page 005, line 155; file DESKTOP.C, line 57 in function main()
- page 005, line 158; file DESKTOP.C, line 60 in function main()
- push(): page 002, line 24; file STACK.C, line 8 defined
- page 004, line 122; file DESKTOP.C, line 24 in function main()
- page 004, line 129; file DESKTOP.C, line 31 in function main()
- page 004, line 132; file DESKTOP.C, line 34 in function main()
- page 004, line 135; file DESKTOP.C, line 37 in function main()
- page 004, line 139; file DESKTOP.C, line 41 in function main()
- page 004, line 144; file DESKTOP.C, line 46 in function main()
- page 005, line 149; file DESKTOP.C, line 51 in function main()
- ungetch(): page 003, line 79; file GETOP.C, line 25 in function getop()
- page 004, line 106; file GETCH.C, line 13 defined
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 006 Clist version 05.01.88 on 05/01/88 Source file DESKTOP.C
- Cross-reference listing
- Variables and Constants
-
- BUFSIZE: page 004, line 96; file GETCH.C, line 3 defined
- page 004, line 98; file GETCH.C, line 5 defined
- page 004, line 109; file GETCH.C, line 16 in function ungetch()
- EOF: page 003, line 84; file GETOP.C, line 30 in function getop()
- page 004, line 124; file DESKTOP.C, line 26 in function main()
- MAXOP: page 001, line 12; file DESKTOP.C, line 12 defined
- page 004, line 121; file DESKTOP.C, line 23 in function main()
- MAXVAL: page 002, line 19; file STACK.C, line 3 defined
- page 002, line 22; file STACK.C, line 6 defined
- page 002, line 27; file STACK.C, line 11 in function push()
- NUMBER: page 001, line 13; file DESKTOP.C, line 13 defined
- page 003, line 81; file GETOP.C, line 27 in function getop()
- page 004, line 128; file DESKTOP.C, line 30 in function main()
- TOOBIG: page 001, line 14; file DESKTOP.C, line 14 defined
- page 003, line 87; file GETOP.C, line 33 in function getop()
- page 005, line 154; file DESKTOP.C, line 56 in function main()
- buf: page 004, line 98; file GETCH.C, line 5 defined
- page 004, line 103; file GETCH.C, line 10 in function getch()
- page 004, line 112; file GETCH.C, line 19 in function ungetch()
- bufp: page 004, line 99; file GETCH.C, line 6 defined
- page 004, line 103; file GETCH.C, line 10 in function getch()
- page 004, line 109; file GETCH.C, line 16 in function ungetch()
- page 004, line 112; file GETCH.C, line 19 in function ungetch()
- c: page 003, line 61; file GETOP.C, line 7 in function getop()
- page 003, line 63; file GETOP.C, line 9 in function getop()
- page 003, line 65; file GETOP.C, line 11 in function getop()
- page 003, line 66; file GETOP.C, line 12 in function getop()
- page 003, line 67; file GETOP.C, line 13 in function getop()
- page 003, line 68; file GETOP.C, line 14 in function getop()
- page 003, line 70; file GETOP.C, line 16 in function getop()
- page 003, line 71; file GETOP.C, line 17 in function getop()
- page 003, line 73; file GETOP.C, line 19 in function getop()
- page 003, line 74; file GETOP.C, line 20 in function getop()
- page 003, line 76; file GETOP.C, line 22 in function getop()
- page 003, line 79; file GETOP.C, line 25 in function getop()
- page 003, line 84; file GETOP.C, line 30 in function getop()
- page 003, line 85; file GETOP.C, line 31 in function getop()
- page 004, line 106; file GETCH.C, line 13 defined
- page 004, line 107; file GETCH.C, line 14 defined
- page 004, line 112; file GETCH.C, line 19 in function ungetch()
- f: page 002, line 24; file STACK.C, line 8 defined
- page 002, line 25; file STACK.C, line 9 defined
- page 002, line 28; file STACK.C, line 12 in function push()
- i: page 003, line 61; file GETOP.C, line 7 in function getop()
- page 003, line 68; file GETOP.C, line 14 in function getop()
- page 003, line 69; file GETOP.C, line 15 in function getop()
- page 003, line 70; file GETOP.C, line 16 in function getop()
- page 003, line 72; file GETOP.C, line 18 in function getop()
- page 003, line 73; file GETOP.C, line 19 in function getop()
- page 003, line 74; file GETOP.C, line 20 in function getop()
- page 003, line 75; file GETOP.C, line 21 in function getop()
- page 003, line 76; file GETOP.C, line 22 in function getop()
- page 003, line 78; file GETOP.C, line 24 in function getop()
- page 003, line 80; file GETOP.C, line 26 in function getop()
- lim: page 003, line 57; file GETOP.C, line 3 defined
- page 003, line 59; file GETOP.C, line 5 defined
- page 003, line 69; file GETOP.C, line 15 in function getop()
-
- Page 007 Clist version 05.01.88 on 05/01/88 Source file DESKTOP.C
- Cross-reference listing
- Variables and Constants - "lim" cont'd
-
- page 003, line 72; file GETOP.C, line 18 in function getop()
- page 003, line 75; file GETOP.C, line 21 in function getop()
- page 003, line 78; file GETOP.C, line 24 in function getop()
- page 003, line 86; file GETOP.C, line 32 in function getop()
- maxop: page 004, line 124; file DESKTOP.C, line 26 in function main()
- op2: page 004, line 122; file DESKTOP.C, line 24 in function main()
- page 004, line 138; file DESKTOP.C, line 40 in function main()
- page 004, line 139; file DESKTOP.C, line 41 in function main()
- page 004, line 142; file DESKTOP.C, line 44 in function main()
- page 004, line 143; file DESKTOP.C, line 45 in function main()
- page 004, line 144; file DESKTOP.C, line 46 in function main()
- s: page 003, line 57; file GETOP.C, line 3 defined
- page 003, line 58; file GETOP.C, line 4 defined
- page 003, line 67; file GETOP.C, line 13 in function getop()
- page 003, line 70; file GETOP.C, line 16 in function getop()
- page 003, line 73; file GETOP.C, line 19 in function getop()
- page 003, line 76; file GETOP.C, line 22 in function getop()
- page 003, line 80; file GETOP.C, line 26 in function getop()
- page 003, line 86; file GETOP.C, line 32 in function getop()
- page 004, line 121; file DESKTOP.C, line 23 in function main()
- page 004, line 124; file DESKTOP.C, line 26 in function main()
- page 004, line 129; file DESKTOP.C, line 31 in function main()
- sp: page 002, line 21; file STACK.C, line 5 defined
- page 002, line 27; file STACK.C, line 11 in function push()
- page 002, line 28; file STACK.C, line 12 in function push()
- page 002, line 38; file STACK.C, line 22 in function pop()
- page 002, line 39; file STACK.C, line 23 in function pop()
- page 002, line 49; file STACK.C, line 33 in function clear()
- type: page 004, line 120; file DESKTOP.C, line 22 in function main()
- page 004, line 124; file DESKTOP.C, line 26 in function main()
- page 004, line 126; file DESKTOP.C, line 28 in function main()
- page 005, line 158; file DESKTOP.C, line 60 in function main()
- val: page 002, line 22; file STACK.C, line 6 defined
- page 002, line 28; file STACK.C, line 12 in function push()
- page 002, line 39; file STACK.C, line 23 in function pop()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page 008@