/[rdesktop]/sourceforge.net/trunk/rdesktop/parallel.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /sourceforge.net/trunk/rdesktop/parallel.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 602 - (show annotations)
Sat Feb 7 17:32:21 2004 UTC (20 years, 2 months ago) by stargo
File MIME type: text/plain
File size: 3054 byte(s)
Cleanup some warnings (from SUNWspro-compiler)

1 #define MAX_PARALLEL_DEVICES 1
2
3 #define FILE_DEVICE_PARALLEL 0x22
4
5 #define IOCTL_PAR_QUERY_RAW_DEVICE_ID 0x0c
6
7 #include "rdesktop.h"
8 #include <unistd.h>
9 #include <fcntl.h>
10
11 extern RDPDR_DEVICE g_rdpdr_device[];
12
13 PARALLEL_DEVICE *
14 get_parallel_data(HANDLE handle)
15 {
16 int index;
17
18 for (index = 0; index < RDPDR_MAX_DEVICES; index++)
19 {
20 if (handle == g_rdpdr_device[index].handle)
21 return (PARALLEL_DEVICE *) g_rdpdr_device[index].pdevice_data;
22 }
23 return NULL;
24 }
25
26
27 /* Enumeration of devices from rdesktop.c */
28 /* returns numer of units found and initialized. */
29 /* optarg looks like ':LPT1=/dev/lp0' */
30 /* when it arrives to this function. */
31 int
32 parallel_enum_devices(uint32 *id, char *optarg)
33 {
34 PARALLEL_DEVICE *ppar_info;
35
36 char *pos = optarg;
37 char *pos2;
38 int count = 0;
39
40 // skip the first colon
41 optarg++;
42 while ((pos = next_arg(optarg, ',')) && *id < RDPDR_MAX_DEVICES)
43 {
44 ppar_info = (PARALLEL_DEVICE *) xmalloc(sizeof(PARALLEL_DEVICE));
45
46 pos2 = next_arg(optarg, '=');
47 strcpy(g_rdpdr_device[*id].name, optarg);
48
49 toupper_str(g_rdpdr_device[*id].name);
50
51 g_rdpdr_device[*id].local_path = xmalloc(strlen(pos2) + 1);
52 strcpy(g_rdpdr_device[*id].local_path, pos2);
53 printf("PARALLEL %s to %s\n", optarg, pos2);
54
55 // set device type
56 g_rdpdr_device[*id].device_type = DEVICE_TYPE_PARALLEL;
57 g_rdpdr_device[*id].pdevice_data = (void *) ppar_info;
58 count++;
59 (*id)++;
60
61 optarg = pos;
62 }
63 return count;
64 }
65
66 static NTSTATUS
67 parallel_create(uint32 device_id, uint32 access, uint32 share_mode, uint32 disposition,
68 uint32 flags, char *filename, HANDLE * handle)
69 {
70 int parallel_fd;
71
72 parallel_fd = open(g_rdpdr_device[device_id].local_path, O_RDWR);
73 if (parallel_fd == -1)
74 {
75 perror("open");
76 return STATUS_ACCESS_DENIED;
77 }
78
79 g_rdpdr_device[device_id].handle = parallel_fd;
80
81 *handle = parallel_fd;
82
83 /* all read and writes should be non blocking */
84 if (fcntl(*handle, F_SETFL, O_NONBLOCK) == -1)
85 perror("fcntl");
86
87 return STATUS_SUCCESS;
88 }
89
90 static NTSTATUS
91 parallel_close(HANDLE handle)
92 {
93 g_rdpdr_device[get_device_index(handle)].handle = 0;
94 close(handle);
95 return STATUS_SUCCESS;
96 }
97
98 NTSTATUS
99 parallel_read(HANDLE handle, uint8 * data, uint32 length, uint32 offset, uint32 * result)
100 {
101 *result = read(handle, data, length);
102 return STATUS_SUCCESS;
103 }
104
105 static NTSTATUS
106 parallel_write(HANDLE handle, uint8 * data, uint32 length, uint32 offset, uint32 * result)
107 {
108 *result = write(handle, data, length);
109 return STATUS_SUCCESS;
110 }
111
112 static NTSTATUS
113 parallel_device_control(HANDLE handle, uint32 request, STREAM in, STREAM out)
114 {
115 if ((request >> 16) != FILE_DEVICE_PARALLEL)
116 return STATUS_INVALID_PARAMETER;
117
118 /* extract operation */
119 request >>= 2;
120 request &= 0xfff;
121
122 printf("PARALLEL IOCTL %d: ", request);
123
124 switch (request)
125 {
126 case IOCTL_PAR_QUERY_RAW_DEVICE_ID:
127
128 default:
129
130 printf("\n");
131 unimpl("UNKNOWN IOCTL %d\n", request);
132 }
133 return STATUS_SUCCESS;
134 }
135
136 DEVICE_FNS parallel_fns = {
137 parallel_create,
138 parallel_close,
139 parallel_read,
140 parallel_write,
141 parallel_device_control
142 };

  ViewVC Help
Powered by ViewVC 1.1.26