papi_status_t papiPrinterAdd(papi_service_t handle, char *name, papi_attribute_t **attributes, papi_printer_t *result) { papi_status_t status; printer_t *p = NULL; char *dest; if ((handle == NULL) || (name == NULL) || (attributes == NULL)) return (PAPI_BAD_ARGUMENT); dest = printer_name_from_uri_id(name, -1); if (isprinter(dest) != 0) { status = lpsched_add_modify_printer(handle, dest, attributes, 0); if ((*result = p = calloc(1, sizeof (*p))) != NULL) lpsched_printer_configuration_to_attributes(handle, p, dest); else status = PAPI_TEMPORARY_ERROR; } else if (isclass(dest) != 0) { status = lpsched_add_modify_class(handle, dest, attributes); if ((*result = p = calloc(1, sizeof (*p))) != NULL) lpsched_class_configuration_to_attributes(handle, p, dest); else status = PAPI_TEMPORARY_ERROR; } else status = PAPI_NOT_FOUND; free(dest); return (status); }
papi_status_t papiPrinterRemove(papi_service_t handle, char *name) { papi_status_t result; char *dest; if ((handle == NULL) || (name == NULL)) return (PAPI_BAD_ARGUMENT); dest = printer_name_from_uri_id(name, -1); if (isprinter(dest) != 0) { result = lpsched_remove_printer(handle, dest); } else if (isclass(dest) != 0) { result = lpsched_remove_class(handle, dest); } else result = PAPI_NOT_FOUND; free(dest); return (result); }
static uae_u8 ReadCIAA (unsigned int addr) { unsigned int tmp; compute_passed_time (); #ifdef CIA_DEBUG write_log("R_CIAA: %02.2X %08.8X\n", addr, m68k_getpc()); #endif switch (addr & 0xf) { case 0: #ifdef ACTION_REPLAY action_replay_ciaread(); #endif tmp = DISK_status() & 0x3c; tmp |= handle_joystick_buttons (ciaadra); tmp |= (ciaapra | (ciaadra ^ 3)) & 0x03; if (ciaadra & 0x40) tmp = (tmp & ~0x40) | (ciaapra & 0x40); if (ciaadra & 0x80) tmp = (tmp & ~0x80) | (ciaapra & 0x80); #ifdef DONGLE_DEBUG if (notinrom()) write_log ("BFE001 R %02.2X %s\n", tmp, debuginfo(0)); #endif return tmp; case 1: #ifdef PARALLEL_PORT if (isprinter () > 0) { tmp = ciaaprb; } else if (isprinter () < 0) { uae_u8 v; parallel_direct_read_data (&v); tmp = v; } else { tmp = handle_parport_joystick (0, ciaaprb, ciaadrb); } #else tmp = handle_parport_joystick (0, ciaaprb, ciaadrb); #ifdef DONGLE_DEBUG if (notinrom()) write_log ("BFE101 R %02.2X %s\n", tmp, debuginfo(0)); #endif #endif return tmp; case 2: #ifdef DONGLE_DEBUG if (notinrom ()) write_log ("BFE201 R %02.2X %s\n", ciaadra, debuginfo(0)); #endif return ciaadra; case 3: #ifdef DONGLE_DEBUG if (notinrom ()) write_log ("BFE301 R %02.2X %s\n", ciaadrb, debuginfo(0)); #endif return ciaadrb; case 4: return (uae_u8)((ciaata - ciaata_passed) & 0xff); case 5: return (uae_u8)((ciaata - ciaata_passed) >> 8); case 6: return (uae_u8)((ciaatb - ciaatb_passed) & 0xff); case 7: return (uae_u8)((ciaatb - ciaatb_passed) >> 8); case 8: if (ciaatlatch) { ciaatlatch = 0; return (uae_u8)ciaatol; } else return (uae_u8)ciaatod; case 9: if (ciaatlatch) return (uae_u8)(ciaatol >> 8); else return (uae_u8)(ciaatod >> 8); case 10: ciaatlatch = 1; ciaatol = ciaatod; /* ??? only if not already latched? */ return (uae_u8)(ciaatol >> 16); case 12: if (ciaasdr_unread == 1) ciaasdr_unread = 2; return ciaasdr; case 13: tmp = ciaaicr; ciaaicr = 0; RethinkICRA(); return tmp; case 14: return ciaacra; case 15: return ciaacrb; }
papi_status_t papiPrinterQuery(papi_service_t handle, char *name, char **requested_attrs, papi_attribute_t **job_attrs, papi_printer_t *printer) { papi_status_t pst; service_t *svc = handle; printer_t *p = NULL; char *dest; short status = MOK; char *pname = NULL, *form = NULL, *request_id = NULL, *character_set = NULL, *reject_reason = NULL, *disable_reason = NULL; short printer_status = 0; long enable_date = 0, reject_date = 0; if ((handle == NULL) || (name == NULL) || (printer == NULL)) return (PAPI_BAD_ARGUMENT); if ((*printer = p = calloc(1, sizeof (*p))) == NULL) return (PAPI_TEMPORARY_ERROR); dest = printer_name_from_uri_id(name, -1); if (strcmp(dest, "_default") == 0) { static char *_default; if (_default == NULL) { int fd; static char buf[128]; if ((fd = open("/etc/lp/default", O_RDONLY)) >= 0) { read(fd, buf, sizeof (buf)); close(fd); _default = strtok(buf, " \t\n"); } } dest = _default; } if (isprinter(dest) != 0) { pst = lpsched_printer_configuration_to_attributes(svc, p, dest); if (pst != PAPI_OK) return (pst); /* get the spooler status data now */ if (snd_msg(svc, S_INQUIRE_PRINTER_STATUS, dest) < 0) return (PAPI_SERVICE_UNAVAILABLE); if (rcv_msg(svc, R_INQUIRE_PRINTER_STATUS, &status, &pname, &form, &character_set, &disable_reason, &reject_reason, &printer_status, &request_id, &enable_date, &reject_date) < 0) return (PAPI_SERVICE_UNAVAILABLE); printer_status_to_attributes(p, pname, form, character_set, disable_reason, reject_reason, printer_status, request_id, enable_date, reject_date); } else if (isclass(dest) != 0) { pst = lpsched_class_configuration_to_attributes(svc, p, dest); if (pst != PAPI_OK) return (pst); /* get the spooler status data now */ if (snd_msg(svc, S_INQUIRE_CLASS, dest) < 0) return (PAPI_SERVICE_UNAVAILABLE); if (rcv_msg(svc, R_INQUIRE_CLASS, &status, &pname, &printer_status, &reject_reason, &reject_date) < 0) return (PAPI_SERVICE_UNAVAILABLE); class_status_to_attributes(p, pname, printer_status, reject_reason, reject_date); } else if (strcmp(dest, "PrintService") == 0) { /* fill the printer object with service information */ lpsched_service_information(&p->attributes); } else return (PAPI_NOT_FOUND); free(dest); return (PAPI_OK); }