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