1 /* copy.c 1.8 83/05/13 */
2
3 #include <stdio.h>
4 #include "cpmio.h"
5 #include "cpmfio.h"
6
7 #define CTRL_Z 0x1a /* CP/M end-of-file */
8
9 /*
10 * copy cpmfile to unix file
11 */
12
copyc(cmdline,bin)13 copyc(cmdline, bin)
14 char cmdline[];
15 {
16
17 char *index(), *i;
18
19 if ((i = index(cmdline,' ')) == NULL) {
20 printf("too few arguments: %s\n", cmdline);
21 return;
22 }
23 *i = '\0';
24 copy(cmdline, i+1, bin);
25 }
26
copy(cpmfile,unixfile,bin)27 copy(cpmfile, unixfile, bin)
28 char cpmfile[], unixfile[];
29 {
30 extern char *getenv();
31 FILE *ufid;
32 char name[9], ext[4];
33 char *pager = 0;
34 C_FILE *cid;
35
36 if (!(namesep(cpmfile, name, ext)))
37 return;
38 if ((cid = c_open(name, ext, READ)) == NULL)
39 return;
40
41 if ( unixfile == (char *)stdout ) {
42 if ((pager = getenv("PAGER")) != 0 && *pager) {
43 /* try opening a pipe to the pager */
44 if((ufid = popen(pager, "w")) == NULL)
45 /* failed, use stdout */
46 ufid = stdout;
47 } else
48 ufid = stdout;
49 } else {
50 if (access(unixfile,0) == 0) {
51 printf("%s already exists\n", unixfile);
52 return;
53 }
54 if ((ufid = fopen(unixfile, "w")) == NULL) {
55 printf("can't open %s\n", unixfile);
56 return;
57 }
58 }
59 if (bin)
60 copybin(cid, ufid);
61 else
62 copytext(cid, ufid);
63 c_close(cid);
64 if (pager && *pager)
65 pclose(ufid);
66 }
67
copytext(cid,ufid)68 copytext(cid, ufid)
69 FILE *ufid;
70 C_FILE *cid;
71 {
72 int c = 0;
73
74 while (((c = c_getc(cid)) != EOF) && (c != CTRL_Z)) {
75 if ( c != '\r')
76 putc(c, ufid);
77 }
78 if (isatty(fileno(ufid)))
79 printf("\n");
80 else
81 fclose(ufid);
82 }
83
copybin(cid,ufid)84 copybin(cid, ufid)
85 FILE *ufid;
86 C_FILE *cid;
87 {
88 int c = 0;
89
90 while ((c = c_getc(cid)) != EOF)
91 putc(c, ufid);
92 fclose(ufid);
93 }
94